1- import { TradeOfferState } from '../types/steam_constants' ;
1+ import { TradeOfferState , TradeStatus } from '../types/steam_constants' ;
22import { Trade , TradeState } from '../types/float_market' ;
33import { OfferStatus , TradeOfferStatus , TradeOffersType } from '../bridge/handlers/trade_offer_status' ;
44import { clearAccessTokenFromStorage , getAccessToken } from './access_token' ;
@@ -9,6 +9,7 @@ import {FetchSteamUser} from '../bridge/handlers/fetch_steam_user';
99import { rgDescription } from '../types/steam' ;
1010import { HasPermissions } from '../bridge/handlers/has_permissions' ;
1111import { convertSteamID32To64 } from '../utils/userinfo' ;
12+ import { TradeHistoryStatus } from '../bridge/handlers/trade_history_status' ;
1213
1314export async function pingSentTradeOffers ( pendingTrades : Trade [ ] ) {
1415 const { offers, type} = await getSentTradeOffers ( ) ;
@@ -67,7 +68,7 @@ export async function pingSentTradeOffers(pendingTrades: Trade[]) {
6768 }
6869}
6970
70- export async function pingCancelTrades ( pendingTrades : Trade [ ] ) {
71+ export async function pingCancelTrades ( pendingTrades : Trade [ ] , tradeHistory : TradeHistoryStatus [ ] ) {
7172 const hasWaitForCancelPing = pendingTrades . find ( ( e ) => e . state === TradeState . PENDING && e . wait_for_cancel_ping ) ;
7273 if ( ! hasWaitForCancelPing ) {
7374 // Nothing to process/ping, exit
@@ -88,14 +89,26 @@ export async function pingCancelTrades(pendingTrades: Trade[]) {
8889 }
8990
9091 const tradeOffer = allTradeOffers . find ( ( e ) => e . offer_id === trade . steam_offer . id ) ;
91- if (
92- tradeOffer &&
93- ( tradeOffer . state === TradeOfferState . Active || tradeOffer . state === TradeOfferState . Accepted )
94- ) {
95- // We don't want to send a cancel ping if the offer is active or valid
92+ if ( tradeOffer ?. state === TradeOfferState . Active ) {
93+ // We don't want to send a cancel ping if the offer is active since it can still become accepted
9694 continue ;
9795 }
9896
97+ if ( tradeOffer ?. state === TradeOfferState . Accepted ) {
98+ // We want to check whether the trade was rolled back from the buyer's perspective -- if so, we still want to ping
99+ const rolledBackTrade = ( tradeHistory || [ ] ) . find (
100+ ( e ) =>
101+ e . status === TradeStatus . TradeProtectionRollback &&
102+ ! ! e . received_assets . find ( ( a ) => a . asset_id === trade . contract ?. item ?. asset_id )
103+ ) ;
104+ if ( ! rolledBackTrade ) {
105+ // no rollback, trade offer was accepted, shouldn't cancel
106+ continue ;
107+ }
108+ }
109+
110+ // No active/accepted offer, or it was rolled back
111+
99112 try {
100113 await PingCancelTrade . handleRequest ( { trade_id : trade . id , steam_id : tradeOffers . steam_id } , { } ) ;
101114 } catch ( e ) {
0 commit comments