From b98827ba3196f87fbc6645b22f3260fb37dbdb24 Mon Sep 17 00:00:00 2001 From: GODrums Date: Sat, 25 Oct 2025 17:43:12 +0200 Subject: [PATCH 1/4] fix: steam inventory assets --- src/lib/components/common/item_holder_metadata.ts | 4 ++++ .../inventory/inventory_item_holder_metadata.ts | 5 ++++- src/lib/types/steam.d.ts | 13 ++++++++++--- src/lib/types/steam_constants.ts | 1 + 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/lib/components/common/item_holder_metadata.ts b/src/lib/components/common/item_holder_metadata.ts index 2fd2c696..ec5394a0 100644 --- a/src/lib/components/common/item_holder_metadata.ts +++ b/src/lib/components/common/item_holder_metadata.ts @@ -78,6 +78,10 @@ export abstract class ItemHolderMetadata extends FloatElement { get assetId(): string | undefined { return $J(this).parent().attr('id')?.split('_')[2]; } + + get isTradeProtected(): boolean { + return $J(this).parent().hasClass('provisional_item'); + } abstract get asset(): rgAsset | undefined; abstract get ownerSteamId(): string | undefined; diff --git a/src/lib/components/inventory/inventory_item_holder_metadata.ts b/src/lib/components/inventory/inventory_item_holder_metadata.ts index 53197754..97da573c 100644 --- a/src/lib/components/inventory/inventory_item_holder_metadata.ts +++ b/src/lib/components/inventory/inventory_item_holder_metadata.ts @@ -1,6 +1,7 @@ import {CustomElement, InjectAppend, InjectionMode} from '../injectors'; import {rgAsset} from '../../types/steam'; import {ItemHolderMetadata} from '../common/item_holder_metadata'; +import { ContextId } from '../../types/steam_constants'; @CustomElement() @InjectAppend( @@ -11,7 +12,9 @@ export class InventoryItemHolderMetadata extends ItemHolderMetadata { get asset(): rgAsset | undefined { if (!this.assetId) return; - return g_ActiveInventory?.m_rgAssets[this.assetId]?.description; + const contextId = this.isTradeProtected ? ContextId.PROTECTED : ContextId.PRIMARY; + + return g_ActiveInventory?.m_rgChildInventories[contextId]?.m_rgAssets[this.assetId]?.description; } get ownerSteamId(): string | undefined { diff --git a/src/lib/types/steam.d.ts b/src/lib/types/steam.d.ts index 10ab8bb8..2979a413 100644 --- a/src/lib/types/steam.d.ts +++ b/src/lib/types/steam.d.ts @@ -1,5 +1,5 @@ import $ from 'jquery'; -import {AppId, ContextId, Currency} from './steam_constants'; +import {AppId, ContextId} from './steam_constants'; type ClassId = string; type InstanceId = string; @@ -116,10 +116,11 @@ export interface mOwner { strSteamId: string; } -// g_ActiveInventory +// g_ActiveInventory.m_rgChildInventories[contextId] export interface CInventory { initialized: boolean; m_rgAssets: {[assetId: string]: InventoryAsset}; + m_parentInventory: CAppwideInventory | null; rgInventory: {[assetId: string]: rgAsset}; m_owner?: mOwner; owner?: mOwner; @@ -127,6 +128,12 @@ export interface CInventory { appid?: number; } +// g_ActiveInventory +export interface CAppwideInventory extends CInventory { + m_rgChildInventories: {[contextId in ContextId]: CInventory}; + m_rgContextIds: string[]; +} + export interface CAjaxPagingControls { m_bLoading: boolean; m_cMaxPages: number; @@ -231,7 +238,7 @@ declare global { const g_rgListingInfo: {[listingId: string]: ListingData}; const g_rgWalletInfo: WalletInfo | undefined; // Not populated when user is signed-out const g_rgAssets: SteamAssets; - const g_ActiveInventory: CInventory | undefined; // Only populated on Steam inventory pages + const g_ActiveInventory: CAppwideInventory | undefined; // Only populated on Steam inventory pages const g_steamID: string; const g_oSearchResults: CAjaxPagingControls; const BuyItemDialog: BuyItemDialog | undefined; // Only populated on Steam Market pages diff --git a/src/lib/types/steam_constants.ts b/src/lib/types/steam_constants.ts index 91c9bebb..389493bb 100644 --- a/src/lib/types/steam_constants.ts +++ b/src/lib/types/steam_constants.ts @@ -9,6 +9,7 @@ export enum AppId { export enum ContextId { PRIMARY = 2, + PROTECTED = 16, } // https://developer.valvesoftware.com/wiki/Steam_Web_API/IEconService From 6d6c7a2bbfd2f601e981337ad9685de12257586a Mon Sep 17 00:00:00 2001 From: GODrums Date: Sat, 25 Oct 2025 17:50:16 +0200 Subject: [PATCH 2/4] chore: run format --- src/lib/components/common/item_holder_metadata.ts | 2 +- src/lib/components/inventory/inventory_item_holder_metadata.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/components/common/item_holder_metadata.ts b/src/lib/components/common/item_holder_metadata.ts index ec5394a0..4766a943 100644 --- a/src/lib/components/common/item_holder_metadata.ts +++ b/src/lib/components/common/item_holder_metadata.ts @@ -78,7 +78,7 @@ export abstract class ItemHolderMetadata extends FloatElement { get assetId(): string | undefined { return $J(this).parent().attr('id')?.split('_')[2]; } - + get isTradeProtected(): boolean { return $J(this).parent().hasClass('provisional_item'); } diff --git a/src/lib/components/inventory/inventory_item_holder_metadata.ts b/src/lib/components/inventory/inventory_item_holder_metadata.ts index 97da573c..73b75c62 100644 --- a/src/lib/components/inventory/inventory_item_holder_metadata.ts +++ b/src/lib/components/inventory/inventory_item_holder_metadata.ts @@ -1,7 +1,7 @@ import {CustomElement, InjectAppend, InjectionMode} from '../injectors'; import {rgAsset} from '../../types/steam'; import {ItemHolderMetadata} from '../common/item_holder_metadata'; -import { ContextId } from '../../types/steam_constants'; +import {ContextId} from '../../types/steam_constants'; @CustomElement() @InjectAppend( From 968529bd4871ed4258510f3ee4affa6c1631b03e Mon Sep 17 00:00:00 2001 From: GODrums Date: Sat, 25 Oct 2025 20:45:25 +0200 Subject: [PATCH 3/4] fix: backwards compatibility --- .../inventory/inventory_item_holder_metadata.ts | 11 +++++++++-- src/lib/types/steam.d.ts | 2 +- src/lib/utils/checkers.ts | 6 ++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/lib/components/inventory/inventory_item_holder_metadata.ts b/src/lib/components/inventory/inventory_item_holder_metadata.ts index 73b75c62..9011612d 100644 --- a/src/lib/components/inventory/inventory_item_holder_metadata.ts +++ b/src/lib/components/inventory/inventory_item_holder_metadata.ts @@ -2,6 +2,7 @@ import {CustomElement, InjectAppend, InjectionMode} from '../injectors'; import {rgAsset} from '../../types/steam'; import {ItemHolderMetadata} from '../common/item_holder_metadata'; import {ContextId} from '../../types/steam_constants'; +import { isCAppwideInventory } from '../../utils/checkers'; @CustomElement() @InjectAppend( @@ -12,9 +13,15 @@ export class InventoryItemHolderMetadata extends ItemHolderMetadata { get asset(): rgAsset | undefined { if (!this.assetId) return; - const contextId = this.isTradeProtected ? ContextId.PROTECTED : ContextId.PRIMARY; + if (!g_ActiveInventory) return; - return g_ActiveInventory?.m_rgChildInventories[contextId]?.m_rgAssets[this.assetId]?.description; + if (isCAppwideInventory(g_ActiveInventory)) { + const contextId = this.isTradeProtected ? ContextId.PROTECTED : ContextId.PRIMARY; + + return g_ActiveInventory.m_rgChildInventories[contextId]?.m_rgAssets[this.assetId]?.description; + } else { + return g_ActiveInventory.m_rgAssets[this.assetId]?.description; + } } get ownerSteamId(): string | undefined { diff --git a/src/lib/types/steam.d.ts b/src/lib/types/steam.d.ts index 2979a413..91144ad3 100644 --- a/src/lib/types/steam.d.ts +++ b/src/lib/types/steam.d.ts @@ -238,7 +238,7 @@ declare global { const g_rgListingInfo: {[listingId: string]: ListingData}; const g_rgWalletInfo: WalletInfo | undefined; // Not populated when user is signed-out const g_rgAssets: SteamAssets; - const g_ActiveInventory: CAppwideInventory | undefined; // Only populated on Steam inventory pages + const g_ActiveInventory: CAppwideInventory | CInventory | undefined; // Only populated on Steam inventory pages const g_steamID: string; const g_oSearchResults: CAjaxPagingControls; const BuyItemDialog: BuyItemDialog | undefined; // Only populated on Steam Market pages diff --git a/src/lib/utils/checkers.ts b/src/lib/utils/checkers.ts index 391c74e0..c229dcaf 100644 --- a/src/lib/utils/checkers.ts +++ b/src/lib/utils/checkers.ts @@ -1,3 +1,9 @@ +import { CInventory, CAppwideInventory } from '../types/steam'; + export function defined(t: string): boolean { return t !== 'undefined'; } + +export function isCAppwideInventory(inventory: CInventory | CAppwideInventory): inventory is CAppwideInventory { + return 'm_rgChildInventories' in inventory; +} \ No newline at end of file From 6209a77d43a9462f59d36fd4fcba45d1527d1b5b Mon Sep 17 00:00:00 2001 From: GODrums Date: Sat, 25 Oct 2025 20:47:02 +0200 Subject: [PATCH 4/4] chore: run format --- .../components/inventory/inventory_item_holder_metadata.ts | 2 +- src/lib/utils/checkers.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/components/inventory/inventory_item_holder_metadata.ts b/src/lib/components/inventory/inventory_item_holder_metadata.ts index 9011612d..a017f560 100644 --- a/src/lib/components/inventory/inventory_item_holder_metadata.ts +++ b/src/lib/components/inventory/inventory_item_holder_metadata.ts @@ -2,7 +2,7 @@ import {CustomElement, InjectAppend, InjectionMode} from '../injectors'; import {rgAsset} from '../../types/steam'; import {ItemHolderMetadata} from '../common/item_holder_metadata'; import {ContextId} from '../../types/steam_constants'; -import { isCAppwideInventory } from '../../utils/checkers'; +import {isCAppwideInventory} from '../../utils/checkers'; @CustomElement() @InjectAppend( diff --git a/src/lib/utils/checkers.ts b/src/lib/utils/checkers.ts index c229dcaf..15bec2d0 100644 --- a/src/lib/utils/checkers.ts +++ b/src/lib/utils/checkers.ts @@ -1,4 +1,4 @@ -import { CInventory, CAppwideInventory } from '../types/steam'; +import {CInventory, CAppwideInventory} from '../types/steam'; export function defined(t: string): boolean { return t !== 'undefined'; @@ -6,4 +6,4 @@ export function defined(t: string): boolean { export function isCAppwideInventory(inventory: CInventory | CAppwideInventory): inventory is CAppwideInventory { return 'm_rgChildInventories' in inventory; -} \ No newline at end of file +}