@@ -6,6 +6,9 @@ import {AnnotateOffer} from '../bridge/handlers/annotate_offer';
66import { PingCancelTrade } from '../bridge/handlers/ping_cancel_trade' ;
77import { CancelTradeOffer } from '../bridge/handlers/cancel_trade_offer' ;
88import { FetchSteamUser } from '../bridge/handlers/fetch_steam_user' ;
9+ import { rgDescription } from '../types/steam' ;
10+ import { HasPermissions } from '../bridge/handlers/has_permissions' ;
11+ import { convertSteamID32To64 } from '../utils/userinfo' ;
912
1013export async function pingSentTradeOffers ( pendingTrades : Trade [ ] ) {
1114 const { offers, type} = await getSentTradeOffers ( ) ;
@@ -191,11 +194,18 @@ async function getSentTradeOffers(): Promise<{offers: OfferStatus[]; type: Trade
191194
192195interface TradeOfferItem {
193196 assetid : string ;
197+ appid : number ;
198+ contextid : string ;
199+ classid : string ;
200+ instanceid : string ;
201+ amount : string ;
202+ missing : boolean ;
203+ est_usd : string ;
194204}
195205
196- interface TradeOffersAPIOffer {
206+ export interface TradeOffersAPIOffer {
197207 tradeofferid : string ;
198- accountid_other : string ;
208+ accountid_other : number ;
199209 trade_offer_state : TradeOfferState ;
200210 items_to_give ?: TradeOfferItem [ ] ;
201211 items_to_receive ?: TradeOfferItem [ ] ;
@@ -207,6 +217,7 @@ interface TradeOffersAPIResponse {
207217 response : {
208218 trade_offers_sent : TradeOffersAPIOffer [ ] ;
209219 trade_offers_received : TradeOffersAPIOffer [ ] ;
220+ descriptions ?: rgDescription [ ] ;
210221 } ;
211222}
212223
@@ -218,7 +229,7 @@ function offerStateMapper(e: TradeOffersAPIOffer): OfferStatus {
218229 received_asset_ids : ( e . items_to_receive || [ ] ) . map ( ( e ) => e . assetid ) ,
219230 time_created : e . time_created ,
220231 time_updated : e . time_updated ,
221- other_steam_id64 : ( BigInt ( '76561197960265728' ) + BigInt ( e . accountid_other ) ) . toString ( ) ,
232+ other_steam_id64 : convertSteamID32To64 ( e . accountid_other ) ,
222233 } as OfferStatus ;
223234}
224235
@@ -266,6 +277,51 @@ async function getSentAndReceivedTradeOffersFromAPI(): Promise<{
266277 } ;
267278}
268279
280+ export async function getTradeOffersWithDescriptionFromAPI ( steam_id ?: string ) : Promise < {
281+ received : TradeOffersAPIOffer [ ] ;
282+ sent : TradeOffersAPIOffer [ ] ;
283+ descriptions : rgDescription [ ] ;
284+ steam_id ?: string | null ;
285+ } > {
286+ // check if permissions are granted
287+ const steamPoweredPermissions = await HasPermissions . handleRequest (
288+ {
289+ permissions : [ ] ,
290+ origins : [ 'https://api.steampowered.com/*' ] ,
291+ } ,
292+ { }
293+ ) ;
294+ if ( ! steamPoweredPermissions . granted ) {
295+ return {
296+ received : [ ] ,
297+ sent : [ ] ,
298+ descriptions : [ ] ,
299+ steam_id : steam_id ,
300+ } ;
301+ }
302+
303+ const access = await getAccessToken ( steam_id ) ;
304+
305+ const resp = await fetch (
306+ `https://api.steampowered.com/IEconService/GetTradeOffers/v1/?access_token=${ access . token } &get_received_offers=true&get_sent_offers=true&get_descriptions=true` ,
307+ {
308+ credentials : 'include' ,
309+ }
310+ ) ;
311+
312+ if ( resp . status !== 200 ) {
313+ throw new Error ( 'invalid status' ) ;
314+ }
315+
316+ const data = ( await resp . json ( ) ) as TradeOffersAPIResponse ;
317+ return {
318+ received : data . response ?. trade_offers_received || [ ] ,
319+ sent : data . response ?. trade_offers_sent || [ ] ,
320+ steam_id : access . steam_id ,
321+ descriptions : data . response ?. descriptions || [ ] ,
322+ } ;
323+ }
324+
269325const BANNER_TO_STATE : { [ banner : string ] : TradeOfferState } = {
270326 accepted : TradeOfferState . Accepted ,
271327 counter : TradeOfferState . Countered ,
0 commit comments