import {z} from 'zod' export type GetApiTokensRewardsBungieRewardsOptions = {baseUrl?: string | undefined, fetch?: typeof fetch | undefined}; export const destinyDefinitionsCommonDestinyIconSequenceDefinition = z.object({frames: z.array(z.string()).optional()}); export const destinyDefinitionsCommonDestinyDisplayPropertiesDefinition = z.object({description: z.string().optional(), name: z.string().optional(), icon: z.string().optional(), iconHash: z.number().int().optional(), iconSequences: z.array(destinyDefinitionsCommonDestinyIconSequenceDefinition).optional(), highResIcon: z.string().optional(), hasIcon: z.boolean().optional()}); export const destinyDefinitionsPresentationDestinyPresentationChildBlock = z.object({presentationNodeType: z.number().int().optional(), parentPresentationNodeHashes: z.array(z.number().int()).optional(), displayStyle: z.number().int().optional()}); export const destinyDefinitionsRecordsDestinyRecordTitleBlock = z.object({hasTitle: z.boolean().optional(), titlesByGender: z.record(z.string(), z.string()).optional(), titlesByGenderHash: z.record(z.string(), z.string()).optional(), gildingTrackingRecordHash: z.number().int().optional()}); export const destinyDefinitionsRecordsDestinyRecordCompletionBlock = z.object({partialCompletionObjectiveCountThreshold: z.number().int().optional(), ScoreValue: z.number().int().optional(), shouldFireToast: z.boolean().optional(), toastStyle: z.number().int().optional()}); export const destinyDefinitionsRecordsSchemaRecordStateBlock = z.object({featuredPriority: z.number().int().optional(), obscuredName: z.string().optional(), obscuredDescription: z.string().optional()}); export const destinyDefinitionsPresentationDestinyPresentationNodeRequirementsBlock = z.object({entitlementUnavailableMessage: z.string().optional()}); export const destinyDefinitionsRecordsDestinyRecordExpirationBlock = z.object({hasExpiration: z.boolean().optional(), description: z.string().optional(), icon: z.string().optional()}); export const destinyDefinitionsRecordsDestinyRecordIntervalObjective = z.object({intervalObjectiveHash: z.number().int().optional(), intervalScoreValue: z.number().int().optional()}); export const destinyDestinyItemQuantity = z.object({itemHash: z.number().int().optional(), itemInstanceId: z.number().int().optional(), quantity: z.number().int().optional(), hasConditionalVisibility: z.boolean().optional()}); export const destinyDefinitionsRecordsDestinyRecordIntervalRewards = z.object({intervalRewardItems: z.array(destinyDestinyItemQuantity).optional()}); export const destinyDefinitionsRecordsDestinyRecordIntervalBlock = z.object({intervalObjectives: z.array(destinyDefinitionsRecordsDestinyRecordIntervalObjective).optional(), intervalRewards: z.array(destinyDefinitionsRecordsDestinyRecordIntervalRewards).optional(), originalObjectiveArrayInsertionIndex: z.number().int().optional()}); export const destinyDefinitionsRecordsDestinyRecordDefinition = z.object({displayProperties: destinyDefinitionsCommonDestinyDisplayPropertiesDefinition.optional(), scope: z.number().int().optional(), presentationInfo: destinyDefinitionsPresentationDestinyPresentationChildBlock.optional(), loreHash: z.number().int().optional(), objectiveHashes: z.array(z.number().int()).optional(), recordValueStyle: z.number().int().optional(), forTitleGilding: z.boolean().optional(), shouldShowLargeIcons: z.boolean().optional(), titleInfo: destinyDefinitionsRecordsDestinyRecordTitleBlock.optional(), completionInfo: destinyDefinitionsRecordsDestinyRecordCompletionBlock.optional(), stateInfo: destinyDefinitionsRecordsSchemaRecordStateBlock.optional(), requirements: destinyDefinitionsPresentationDestinyPresentationNodeRequirementsBlock.optional(), expirationInfo: destinyDefinitionsRecordsDestinyRecordExpirationBlock.optional(), intervalInfo: destinyDefinitionsRecordsDestinyRecordIntervalBlock.optional(), rewardItems: z.array(destinyDestinyItemQuantity).optional(), recordTypeName: z.string().optional(), presentationNodeType: z.number().int().optional(), traitIds: z.array(z.string()).optional(), traitHashes: z.array(z.number().int()).optional(), parentNodeHashes: z.array(z.number().int()).optional(), hash: z.number().int().optional(), index: z.number().int().optional(), redacted: z.boolean().optional()}); export const destinyDefinitionsCollectiblesDestinyCollectibleAcquisitionBlock = z.object({acquireMaterialRequirementHash: z.number().int().optional(), acquireTimestampUnlockValueHash: z.number().int().optional()}); export const destinyDefinitionsCollectiblesDestinyCollectibleStateBlock = z.object({obscuredOverrideItemHash: z.number().int().optional(), requirements: destinyDefinitionsPresentationDestinyPresentationNodeRequirementsBlock.optional()}); export const destinyDefinitionsCollectiblesDestinyCollectibleDefinition = z.object({displayProperties: destinyDefinitionsCommonDestinyDisplayPropertiesDefinition.optional(), scope: z.number().int().optional(), sourceString: z.string().optional(), sourceHash: z.number().int().optional(), itemHash: z.number().int().optional(), acquisitionInfo: destinyDefinitionsCollectiblesDestinyCollectibleAcquisitionBlock.optional(), stateInfo: destinyDefinitionsCollectiblesDestinyCollectibleStateBlock.optional(), presentationInfo: destinyDefinitionsPresentationDestinyPresentationChildBlock.optional(), presentationNodeType: z.number().int().optional(), traitIds: z.array(z.string()).optional(), traitHashes: z.array(z.number().int()).optional(), parentNodeHashes: z.array(z.number().int()).optional(), hash: z.number().int().optional(), index: z.number().int().optional(), redacted: z.boolean().optional()}); export const destinyDefinitionsDestinyItemTooltipNotification = z.object({displayString: z.string().optional(), displayStyle: z.string().optional()}); export const destinyMiscDestinyColor = z.object({red: z.string().optional(), green: z.string().optional(), blue: z.string().optional(), alpha: z.string().optional()}); export const destinyDefinitionsDestinyItemActionRequiredItemDefinition = z.object({count: z.number().int().optional(), itemHash: z.number().int().optional(), deleteOnAction: z.boolean().optional()}); export const destinyDefinitionsDestinyProgressionRewardDefinition = z.object({progressionMappingHash: z.number().int().optional(), amount: z.number().int().optional(), applyThrottles: z.boolean().optional()}); export const destinyDefinitionsDestinyItemActionBlockDefinition = z.object({verbName: z.string().optional(), verbDescription: z.string().optional(), isPositive: z.boolean().optional(), overlayScreenName: z.string().optional(), overlayIcon: z.string().optional(), requiredCooldownSeconds: z.number().int().optional(), requiredItems: z.array(destinyDefinitionsDestinyItemActionRequiredItemDefinition).optional(), progressionRewards: z.array(destinyDefinitionsDestinyProgressionRewardDefinition).optional(), actionTypeLabel: z.string().optional(), requiredLocation: z.string().optional(), requiredCooldownHash: z.number().int().optional(), deleteOnAction: z.boolean().optional(), consumeEntireStack: z.boolean().optional(), useOnAcquire: z.boolean().optional()}); export const destinyDefinitionsDestinyItemCraftingBlockBonusPlugDefinition = z.object({socketTypeHash: z.number().int().optional(), plugItemHash: z.number().int().optional()}); export const destinyDefinitionsDestinyItemCraftingBlockDefinition = z.object({outputItemHash: z.number().int().optional(), requiredSocketTypeHashes: z.array(z.number().int()).optional(), failedRequirementStrings: z.array(z.string()).optional(), baseMaterialRequirements: z.number().int().optional(), bonusPlugs: z.array(destinyDefinitionsDestinyItemCraftingBlockBonusPlugDefinition).optional()}); export const destinyDefinitionsDestinyItemInventoryBlockDefinition = z.object({stackUniqueLabel: z.string().optional(), maxStackSize: z.number().int().optional(), bucketTypeHash: z.number().int().optional(), recoveryBucketTypeHash: z.number().int().optional(), tierTypeHash: z.number().int().optional(), isInstanceItem: z.boolean().optional(), tierTypeName: z.string().optional(), tierType: z.number().int().optional(), expirationTooltip: z.string().optional(), expiredInActivityMessage: z.string().optional(), expiredInOrbitMessage: z.string().optional(), suppressExpirationWhenObjectivesComplete: z.boolean().optional(), recipeItemHash: z.number().int().optional()}); export const destinyDefinitionsDestinyItemSetBlockEntryDefinition = z.object({trackingValue: z.number().int().optional(), itemHash: z.number().int().optional()}); export const destinyDefinitionsDestinyItemSetBlockDefinition = z.object({itemList: z.array(destinyDefinitionsDestinyItemSetBlockEntryDefinition).optional(), requireOrderedSetItemAdd: z.boolean().optional(), setIsFeatured: z.boolean().optional(), setType: z.string().optional(), questLineName: z.string().optional(), questLineDescription: z.string().optional(), questStepSummary: z.string().optional()}); export const destinyDefinitionsDestinyInventoryItemStatDefinition = z.object({statHash: z.number().int().optional(), value: z.number().int().optional(), minimum: z.number().int().optional(), maximum: z.number().int().optional(), displayMaximum: z.number().int().optional()}); export const destinyDefinitionsDestinyItemStatBlockDefinition = z.object({disablePrimaryStatDisplay: z.boolean().optional(), statGroupHash: z.number().int().optional(), stats: z.record(z.string(), destinyDefinitionsDestinyInventoryItemStatDefinition).optional(), hasDisplayableStats: z.boolean().optional(), primaryBaseStatHash: z.number().int().optional()}); export const destinyDefinitionsDestinyEquippingBlockDefinition = z.object({gearsetItemHash: z.number().int().optional(), uniqueLabel: z.string().optional(), uniqueLabelHash: z.number().int().optional(), equipmentSlotTypeHash: z.number().int().optional(), attributes: z.number().int().optional(), ammoType: z.number().int().optional(), displayStrings: z.array(z.string()).optional(), equipableItemSetHash: z.number().int().optional()}); export const destinyDyeReference = z.object({channelHash: z.number().int().optional(), dyeHash: z.number().int().optional()}); export const destinyDefinitionsDestinyGearArtArrangementReference = z.object({classHash: z.number().int().optional(), artArrangementHash: z.number().int().optional()}); export const destinyDefinitionsDestinyItemTranslationBlockDefinition = z.object({weaponPatternIdentifier: z.string().optional(), weaponPatternHash: z.number().int().optional(), defaultDyes: z.array(destinyDyeReference).optional(), lockedDyes: z.array(destinyDyeReference).optional(), customDyes: z.array(destinyDyeReference).optional(), arrangements: z.array(destinyDefinitionsDestinyGearArtArrangementReference).optional(), hasGeometry: z.boolean().optional()}); export const destinyDefinitionsItemsDestinyDerivedItemDefinition = z.object({itemHash: z.number().int().optional(), itemName: z.string().optional(), itemDetail: z.string().optional(), itemDescription: z.string().optional(), iconPath: z.string().optional(), vendorItemIndex: z.number().int().optional()}); export const destinyDefinitionsItemsDestinyDerivedItemCategoryDefinition = z.object({categoryDescription: z.string().optional(), items: z.array(destinyDefinitionsItemsDestinyDerivedItemDefinition).optional()}); export const destinyDefinitionsDestinyItemPreviewBlockDefinition = z.object({screenStyle: z.string().optional(), previewVendorHash: z.number().int().optional(), artifactHash: z.number().int().optional(), previewActionString: z.string().optional(), derivedItemCategories: z.array(destinyDefinitionsItemsDestinyDerivedItemCategoryDefinition).optional()}); export const destinyDefinitionsDestinyItemVersionDefinition = z.object({powerCapHash: z.number().int().optional()}); export const destinyDefinitionsDestinyItemQualityBlockDefinition = z.object({itemLevels: z.array(z.number().int()).optional(), qualityLevel: z.number().int().optional(), infusionCategoryName: z.string().optional(), infusionCategoryHash: z.number().int().optional(), infusionCategoryHashes: z.array(z.number().int()).optional(), progressionLevelRequirementHash: z.number().int().optional(), currentVersion: z.number().int().optional(), versions: z.array(destinyDefinitionsDestinyItemVersionDefinition).optional(), displayVersionWatermarkIcons: z.array(z.string()).optional()}); export const destinyDefinitionsDestinyItemValueBlockDefinition = z.object({itemValue: z.array(destinyDestinyItemQuantity).optional(), valueDescription: z.string().optional()}); export const destinyDefinitionsSourcesDestinyItemSourceDefinition = z.object({level: z.number().int().optional(), minQuality: z.number().int().optional(), maxQuality: z.number().int().optional(), minLevelRequired: z.number().int().optional(), maxLevelRequired: z.number().int().optional(), computedStats: z.record(z.string(), destinyDefinitionsDestinyInventoryItemStatDefinition).optional(), sourceHashes: z.array(z.number().int()).optional()}); export const destinyDefinitionsDestinyItemVendorSourceReference = z.object({vendorHash: z.number().int().optional(), vendorItemIndexes: z.array(z.number().int()).optional()}); export const destinyDefinitionsDestinyItemSourceBlockDefinition = z.object({sourceHashes: z.array(z.number().int()).optional(), sources: z.array(destinyDefinitionsSourcesDestinyItemSourceDefinition).optional(), exclusive: z.number().int().optional(), vendorSources: z.array(destinyDefinitionsDestinyItemVendorSourceReference).optional()}); export const destinyDefinitionsDestinyObjectiveDisplayProperties = z.object({activityHash: z.number().int().optional(), displayOnItemPreviewScreen: z.boolean().optional()}); export const destinyDefinitionsDestinyItemObjectiveBlockDefinition = z.object({objectiveHashes: z.array(z.number().int()).optional(), displayActivityHashes: z.array(z.number().int()).optional(), requireFullObjectiveCompletion: z.boolean().optional(), questlineItemHash: z.number().int().optional(), narrative: z.string().optional(), objectiveVerbName: z.string().optional(), questTypeIdentifier: z.string().optional(), questTypeHash: z.number().int().optional(), perObjectiveDisplayProperties: z.array(destinyDefinitionsDestinyObjectiveDisplayProperties).optional(), displayAsStatTracker: z.boolean().optional()}); export const destinyDefinitionsDestinyItemMetricBlockDefinition = z.object({availableMetricCategoryNodeHashes: z.array(z.number().int()).optional()}); export const destinyDefinitionsItemsDestinyPlugRuleDefinition = z.object({failureMessage: z.string().optional()}); export const destinyDefinitionsItemsDestinyParentItemOverride = z.object({additionalEquipRequirementsDisplayStrings: z.array(z.string()).optional(), pipIcon: z.string().optional()}); export const destinyDefinitionsItemsDestinyEnergyCapacityEntry = z.object({capacityValue: z.number().int().optional(), energyTypeHash: z.number().int().optional(), energyType: z.number().int().optional()}); export const destinyDefinitionsItemsDestinyEnergyCostEntry = z.object({energyCost: z.number().int().optional(), energyTypeHash: z.number().int().optional(), energyType: z.number().int().optional()}); export const destinyDefinitionsItemsDestinyItemPlugDefinition = z.object({insertionRules: z.array(destinyDefinitionsItemsDestinyPlugRuleDefinition).optional(), plugCategoryIdentifier: z.string().optional(), plugCategoryHash: z.number().int().optional(), onActionRecreateSelf: z.boolean().optional(), insertionMaterialRequirementHash: z.number().int().optional(), previewItemOverrideHash: z.number().int().optional(), enabledMaterialRequirementHash: z.number().int().optional(), enabledRules: z.array(destinyDefinitionsItemsDestinyPlugRuleDefinition).optional(), uiPlugLabel: z.string().optional(), plugStyle: z.number().int().optional(), plugAvailability: z.number().int().optional(), alternateUiPlugLabel: z.string().optional(), alternatePlugStyle: z.number().int().optional(), isDummyPlug: z.boolean().optional(), parentItemOverride: destinyDefinitionsItemsDestinyParentItemOverride.optional(), energyCapacity: destinyDefinitionsItemsDestinyEnergyCapacityEntry.optional(), energyCost: destinyDefinitionsItemsDestinyEnergyCostEntry.optional()}); export const destinyDefinitionsDestinyItemGearsetBlockDefinition = z.object({trackingValueMax: z.number().int().optional(), itemList: z.array(z.number().int()).optional()}); export const destinyDefinitionsDestinyItemSackBlockDefinition = z.object({detailAction: z.string().optional(), openAction: z.string().optional(), selectItemCount: z.number().int().optional(), vendorSackType: z.string().optional(), openOnAcquire: z.boolean().optional()}); export const destinyDefinitionsDestinyItemSocketEntryPlugItemDefinition = z.object({plugItemHash: z.number().int().optional()}); export const destinyDefinitionsDestinyItemSocketEntryDefinition = z.object({socketTypeHash: z.number().int().optional(), singleInitialItemHash: z.number().int().optional(), reusablePlugItems: z.array(destinyDefinitionsDestinyItemSocketEntryPlugItemDefinition).optional(), preventInitializationOnVendorPurchase: z.boolean().optional(), hidePerksInItemTooltip: z.boolean().optional(), plugSources: z.number().int().optional(), reusablePlugSetHash: z.number().int().optional(), randomizedPlugSetHash: z.number().int().optional(), defaultVisible: z.boolean().optional()}); export const destinyDefinitionsDestinyItemIntrinsicSocketEntryDefinition = z.object({plugItemHash: z.number().int().optional(), socketTypeHash: z.number().int().optional(), defaultVisible: z.boolean().optional()}); export const destinyDefinitionsDestinyItemSocketCategoryDefinition = z.object({socketCategoryHash: z.number().int().optional(), socketIndexes: z.array(z.number().int()).optional()}); export const destinyDefinitionsDestinyItemSocketBlockDefinition = z.object({detail: z.string().optional(), socketEntries: z.array(destinyDefinitionsDestinyItemSocketEntryDefinition).optional(), intrinsicSockets: z.array(destinyDefinitionsDestinyItemIntrinsicSocketEntryDefinition).optional(), socketCategories: z.array(destinyDefinitionsDestinyItemSocketCategoryDefinition).optional()}); export const destinyDefinitionsDestinyItemSummaryBlockDefinition = z.object({sortPriority: z.number().int().optional()}); export const destinyDefinitionsDestinyItemTalentGridBlockDefinition = z.object({talentGridHash: z.number().int().optional(), itemDetailString: z.string().optional(), buildName: z.string().optional(), hudDamageType: z.number().int().optional(), hudIcon: z.string().optional()}); export const destinyDefinitionsDestinyItemInvestmentStatDefinition = z.object({statTypeHash: z.number().int().optional(), value: z.number().int().optional(), isConditionallyActive: z.boolean().optional()}); export const destinyDefinitionsDestinyItemPerkEntryDefinition = z.object({requirementDisplayString: z.string().optional(), perkHash: z.number().int().optional(), perkVisibility: z.number().int().optional()}); export const destinyDefinitionsAnimationsDestinyAnimationReference = z.object({animName: z.string().optional(), animIdentifier: z.string().optional(), path: z.string().optional()}); export const linksHyperlinkReference = z.object({title: z.string().optional(), url: z.string().optional()}); export const destinyDefinitionsDestinyInventoryItemDefinition = z.object({displayProperties: destinyDefinitionsCommonDestinyDisplayPropertiesDefinition.optional(), tooltipNotifications: z.array(destinyDefinitionsDestinyItemTooltipNotification).optional(), collectibleHash: z.number().int().optional(), iconWatermark: z.string().optional(), iconWatermarkShelved: z.string().optional(), iconWatermarkFeatured: z.string().optional(), secondaryIcon: z.string().optional(), secondaryOverlay: z.string().optional(), secondarySpecial: z.string().optional(), backgroundColor: destinyMiscDestinyColor.optional(), isFeaturedItem: z.boolean().optional(), isHolofoil: z.boolean().optional(), isAdept: z.boolean().optional(), screenshot: z.string().optional(), itemTypeDisplayName: z.string().optional(), flavorText: z.string().optional(), uiItemDisplayStyle: z.string().optional(), itemTypeAndTierDisplayName: z.string().optional(), displaySource: z.string().optional(), tooltipStyle: z.string().optional(), action: destinyDefinitionsDestinyItemActionBlockDefinition.optional(), crafting: destinyDefinitionsDestinyItemCraftingBlockDefinition.optional(), inventory: destinyDefinitionsDestinyItemInventoryBlockDefinition.optional(), setData: destinyDefinitionsDestinyItemSetBlockDefinition.optional(), stats: destinyDefinitionsDestinyItemStatBlockDefinition.optional(), emblemObjectiveHash: z.number().int().optional(), equippingBlock: destinyDefinitionsDestinyEquippingBlockDefinition.optional(), translationBlock: destinyDefinitionsDestinyItemTranslationBlockDefinition.optional(), preview: destinyDefinitionsDestinyItemPreviewBlockDefinition.optional(), quality: destinyDefinitionsDestinyItemQualityBlockDefinition.optional(), value: destinyDefinitionsDestinyItemValueBlockDefinition.optional(), sourceData: destinyDefinitionsDestinyItemSourceBlockDefinition.optional(), objectives: destinyDefinitionsDestinyItemObjectiveBlockDefinition.optional(), metrics: destinyDefinitionsDestinyItemMetricBlockDefinition.optional(), plug: destinyDefinitionsItemsDestinyItemPlugDefinition.optional(), gearset: destinyDefinitionsDestinyItemGearsetBlockDefinition.optional(), sack: destinyDefinitionsDestinyItemSackBlockDefinition.optional(), sockets: destinyDefinitionsDestinyItemSocketBlockDefinition.optional(), summary: destinyDefinitionsDestinyItemSummaryBlockDefinition.optional(), talentGrid: destinyDefinitionsDestinyItemTalentGridBlockDefinition.optional(), investmentStats: z.array(destinyDefinitionsDestinyItemInvestmentStatDefinition).optional(), perks: z.array(destinyDefinitionsDestinyItemPerkEntryDefinition).optional(), loreHash: z.number().int().optional(), summaryItemHash: z.number().int().optional(), animations: z.array(destinyDefinitionsAnimationsDestinyAnimationReference).optional(), allowActions: z.boolean().optional(), links: z.array(linksHyperlinkReference).optional(), doesPostmasterPullHaveSideEffects: z.boolean().optional(), nonTransferrable: z.boolean().optional(), itemCategoryHashes: z.array(z.number().int()).optional(), specialItemType: z.number().int().optional(), itemType: z.number().int().optional(), itemSubType: z.number().int().optional(), classType: z.number().int().optional(), breakerType: z.number().int().optional(), breakerTypeHash: z.number().int().optional(), equippable: z.boolean().optional(), damageTypeHashes: z.array(z.number().int()).optional(), damageTypes: z.array(z.number().int()).optional(), defaultDamageType: z.number().int().optional(), defaultDamageTypeHash: z.number().int().optional(), seasonHash: z.number().int().optional(), isWrapper: z.boolean().optional(), traitIds: z.array(z.string()).optional(), traitHashes: z.array(z.number().int()).optional(), hash: z.number().int().optional(), index: z.number().int().optional(), redacted: z.boolean().optional()}); export const tokensCollectibleDefinitions = z.object({CollectibleDefinition: destinyDefinitionsCollectiblesDestinyCollectibleDefinition.optional(), DestinyInventoryItemDefinition: destinyDefinitionsDestinyInventoryItemDefinition.optional()}); export const tokensRewardAvailabilityModel = z.object({HasExistingCode: z.boolean().optional(), RecordDefinitions: z.array(destinyDefinitionsRecordsDestinyRecordDefinition).optional(), CollectibleDefinitions: z.array(tokensCollectibleDefinitions).optional(), IsOffer: z.boolean().optional(), HasOffer: z.boolean().optional(), OfferApplied: z.boolean().optional(), DecryptedToken: z.string().optional(), IsLoyaltyReward: z.boolean().optional(), ShopifyEndDate: z.string().optional(), GameEarnByDate: z.string().optional(), RedemptionEndDate: z.string().optional()}); export const tokensUserRewardAvailabilityModel = z.object({AvailabilityModel: tokensRewardAvailabilityModel.optional(), IsAvailableForUser: z.boolean().optional(), IsUnlockedForUser: z.boolean().optional()}); export const tokensRewardDisplayProperties = z.object({Name: z.string().optional(), Description: z.string().optional(), ImagePath: z.string().optional()}); export const tokensBungieRewardDisplay = z.object({UserRewardAvailabilityModel: tokensUserRewardAvailabilityModel.optional(), ObjectiveDisplayProperties: tokensRewardDisplayProperties.optional(), RewardDisplayProperties: tokensRewardDisplayProperties.optional()}); export const getApiTokensRewardsBungieRewardsResponse = z.object({Response: z.record(z.string(), tokensBungieRewardDisplay).optional(), ErrorCode: z.number().int().optional(), ThrottleSeconds: z.number().int().optional(), ErrorStatus: z.string().optional(), Message: z.string().optional(), MessageData: z.record(z.string(), z.string()).optional(), DetailedErrorTrace: z.string().optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Returns a list of the current bungie rewards * * GET /Tokens/Rewards/BungieRewards/ */ export const getApiTokensRewardsBungieRewards = async (options?: GetApiTokensRewardsBungieRewardsOptions) => { const {baseUrl = "https://www.bungie.net/Platform", fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") const url = `${baseUrl.replace(/\/+$/, '')}/Tokens/Rewards/BungieRewards/${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(getApiTokensRewardsBungieRewardsResponse, await res.json()) };