From 998ea4c2ef4e38699b07c2054e602f64be28af25 Mon Sep 17 00:00:00 2001 From: Ilya Zabolotny <34621447+Acex187x@users.noreply.github.com> Date: Wed, 31 Dec 2025 03:56:12 +0100 Subject: [PATCH] chore: add support for storefront v3 endpoint --- .../src/endpoints/store/Storefront.ts | 48 +++++++++++++++++-- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/valorant-api-types/src/endpoints/store/Storefront.ts b/valorant-api-types/src/endpoints/store/Storefront.ts index f345b39..95149f1 100644 --- a/valorant-api-types/src/endpoints/store/Storefront.ts +++ b/valorant-api-types/src/endpoints/store/Storefront.ts @@ -39,19 +39,60 @@ const bonusOfferSchema = z.object({ IsSeen: z.boolean() }) +const CurrencyCostSchema = z.record(z.string(), z.number()); + +const RewardSchema = z.object({ + ItemTypeID: z.string(), + ItemID: z.string(), + Quantity: z.number(), +}); + +const PurchaseInformationSchema = z.object({ + DataAssetID: z.string(), + OfferID: z.string(), + OfferType: z.number(), + StartDate: z.string(), + PrimaryCurrencyID: z.string(), + Cost: CurrencyCostSchema, + DiscountedCost: CurrencyCostSchema, + DiscountedPercentage: z.number(), + Rewards: z.array(RewardSchema), + AdditionalContext: z.array(z.any()), + WholesaleOnly: z.boolean(), + IsGiftable: z.number(), +}); + +const PluginStoreSchema = z.object({ + PluginID: z.string(), + PluginOffers: z.object({ + StoreOffers: z.array( + z.object({ + PurchaseInformation: PurchaseInformationSchema, + SubOffers: z.array( + z.object({ + PurchaseInformation: PurchaseInformationSchema, + }) + ), + }) + ), + RemainingDurationInSeconds: z.number(), + }), +}); + export const storefrontEndpoint = { name: 'Storefront', description: 'Get the currently available items in the store', - queryName: 'Store_GetStorefrontV2', + queryName: 'Store_GetStorefrontV3', category: 'Store Endpoints', type: 'pd', - suffix: 'store/v2/storefront/{puuid}', + suffix: 'store/v3/storefront/{puuid}', riotRequirements: { token: true, entitlement: true, clientPlatform: true, clientVersion: true }, + body: z.object({}), responses: { '200': z.object({ FeaturedBundle: z.object({ @@ -83,7 +124,8 @@ export const storefrontEndpoint = { BonusStore: z.object({ BonusStoreOffers: z.array(bonusOfferSchema), BonusStoreRemainingDurationInSeconds: z.number() - }).optional().describe('Night market') + }).optional().describe('Night market'), + PluginStores: z.array(PluginStoreSchema), }) } } as const satisfies ValorantEndpoint