UNPKG

valorant-api-types

Version:

A collection of documented endpoints and return types for the unofficial Valorant API

333 lines 15.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.loadoutsSchema = exports.chatMessagesSchema = exports.conversationsSchema = exports.contractsResponse = exports.pregameMatchSchema = exports.offerSchema = exports.partyPlayerSchema = exports.partySchema = exports.platformSchema = exports.currencyIDSchema = exports.armorIDSchema = exports.itemTypeIDSchema = exports.itemIDSchema = exports.xpModificationIDSchema = exports.preferredLevelBorderIDSchema = exports.titleIDSchema = exports.cardIDSchema = exports.characterIDSchema = exports.mapIDSchema = exports.queueIDSchema = exports.seasonIDSchema = exports.millisSchema = exports.dateSchema = exports.gameModeSchema = exports.partyIDSchema = exports.currentGameIDSchema = exports.pregameIDSchema = exports.matchIDSchema = exports.playerUUIDSchema = exports.stringBooleanSchema = exports.weakUUIDSchema = void 0; const zod_1 = require("zod"); // Zod's UUID type is too strict, so we use a weaker regex exports.weakUUIDSchema = zod_1.z.string().regex(/^([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})$/i).describe('UUID'); exports.stringBooleanSchema = zod_1.z.string().transform(val => val === 'true'); exports.playerUUIDSchema = exports.weakUUIDSchema.describe('Player UUID'); exports.matchIDSchema = exports.weakUUIDSchema.describe('Match ID'); exports.pregameIDSchema = exports.weakUUIDSchema.describe('Pre-Game Match ID'); exports.currentGameIDSchema = exports.weakUUIDSchema.describe('Current Game Match ID'); exports.partyIDSchema = exports.weakUUIDSchema.describe('Party ID'); exports.gameModeSchema = zod_1.z.string().describe('Game Mode'); exports.dateSchema = zod_1.z.string().datetime().transform(val => new Date(val)).describe('Date in ISO 8601 format'); exports.millisSchema = zod_1.z.number().transform(val => new Date(val)).describe('Milliseconds since epoch'); // IDs that can be derived from game files exports.seasonIDSchema = exports.weakUUIDSchema.describe('Season ID'); exports.queueIDSchema = zod_1.z.string().describe('Queue ID'); exports.mapIDSchema = zod_1.z.string().describe('Map ID'); exports.characterIDSchema = exports.weakUUIDSchema.describe('Character ID'); exports.cardIDSchema = exports.weakUUIDSchema.describe('Card ID'); exports.titleIDSchema = exports.weakUUIDSchema.describe('Title ID'); exports.preferredLevelBorderIDSchema = exports.weakUUIDSchema.or(zod_1.z.literal("")).describe('Preferred Level Border ID'); exports.xpModificationIDSchema = zod_1.z.string().describe('XP Modification ID'); exports.itemIDSchema = exports.weakUUIDSchema.describe('Item ID'); exports.itemTypeIDSchema = exports.weakUUIDSchema.describe('Item Type ID'); exports.armorIDSchema = exports.weakUUIDSchema.describe('Armor ID'); exports.currencyIDSchema = exports.weakUUIDSchema.describe('Currency ID'); exports.platformSchema = zod_1.z.object({ platformType: zod_1.z.literal('PC'), platformOS: zod_1.z.literal('Windows'), platformOSVersion: zod_1.z.string(), platformChipset: zod_1.z.literal('Unknown') }); const partyMembershipSchema = zod_1.z.array(zod_1.z.object({ Subject: exports.playerUUIDSchema })).nullable(); exports.partySchema = zod_1.z.object({ ID: exports.partyIDSchema, MUCName: zod_1.z.string(), VoiceRoomID: zod_1.z.string(), Version: zod_1.z.number(), ClientVersion: zod_1.z.string(), Members: zod_1.z.array(zod_1.z.object({ Subject: exports.playerUUIDSchema, CompetitiveTier: zod_1.z.number(), PlayerIdentity: zod_1.z.object({ Subject: exports.playerUUIDSchema, PlayerCardID: exports.cardIDSchema, PlayerTitleID: exports.titleIDSchema, AccountLevel: zod_1.z.number(), PreferredLevelBorderID: exports.preferredLevelBorderIDSchema, Incognito: zod_1.z.boolean(), HideAccountLevel: zod_1.z.boolean() }), SeasonalBadgeInfo: zod_1.z.null(), IsOwner: zod_1.z.boolean().optional(), QueueEligibleRemainingAccountLevels: zod_1.z.number(), Pings: zod_1.z.array(zod_1.z.object({ Ping: zod_1.z.number(), GamePodID: zod_1.z.string() })), IsReady: zod_1.z.boolean(), IsModerator: zod_1.z.boolean(), UseBroadcastHUD: zod_1.z.boolean(), PlatformType: exports.platformSchema.shape.platformType })), State: zod_1.z.string(), PreviousState: zod_1.z.string(), StateTransitionReason: zod_1.z.string(), Accessibility: zod_1.z.union([zod_1.z.literal('OPEN'), zod_1.z.literal('CLOSED')]), CustomGameData: zod_1.z.object({ Settings: zod_1.z.object({ Map: exports.mapIDSchema, Mode: exports.gameModeSchema, UseBots: zod_1.z.boolean(), GamePod: zod_1.z.string(), GameRules: zod_1.z.object({ AllowGameModifiers: exports.stringBooleanSchema.optional(), IsOvertimeWinByTwo: exports.stringBooleanSchema.optional(), PlayOutAllRounds: exports.stringBooleanSchema.optional(), SkipMatchHistory: exports.stringBooleanSchema.optional(), TournamentMode: exports.stringBooleanSchema.optional() }).nullable() }), Membership: zod_1.z.object({ teamOne: partyMembershipSchema, teamTwo: partyMembershipSchema, teamSpectate: partyMembershipSchema, teamOneCoaches: partyMembershipSchema, teamTwoCoaches: partyMembershipSchema }), MaxPartySize: zod_1.z.number(), AutobalanceEnabled: zod_1.z.boolean(), AutobalanceMinPlayers: zod_1.z.number(), HasRecoveryData: zod_1.z.boolean() }), MatchmakingData: zod_1.z.object({ QueueID: exports.queueIDSchema, PreferredGamePods: zod_1.z.array(zod_1.z.string()), SkillDisparityRRPenalty: zod_1.z.number() }), Invites: zod_1.z.null(), Requests: zod_1.z.array(zod_1.z.unknown()), QueueEntryTime: exports.dateSchema, ErrorNotification: zod_1.z.object({ ErrorType: zod_1.z.string(), ErroredPlayers: partyMembershipSchema }), RestrictedSeconds: zod_1.z.number(), EligibleQueues: zod_1.z.array(zod_1.z.string()), QueueIneligibilities: zod_1.z.array(zod_1.z.string()), CheatData: zod_1.z.object({ GamePodOverride: zod_1.z.string(), ForcePostGameProcessing: zod_1.z.boolean() }), XPBonuses: zod_1.z.array(zod_1.z.unknown()), InviteCode: zod_1.z.string().describe('Empty string when there is no invite code') }); exports.partyPlayerSchema = zod_1.z.object({ Subject: exports.playerUUIDSchema, Version: zod_1.z.number(), CurrentPartyID: exports.partyIDSchema, Invites: zod_1.z.null(), Requests: zod_1.z.array(zod_1.z.object({ ID: zod_1.z.string(), PartyID: exports.partyIDSchema, RequestedBySubject: exports.playerUUIDSchema, Subjects: zod_1.z.array(exports.playerUUIDSchema), CreatedAt: exports.dateSchema, RefreshedAt: exports.dateSchema, ExpiresIn: zod_1.z.number() })), PlatformInfo: exports.platformSchema }); exports.offerSchema = zod_1.z.object({ OfferID: zod_1.z.string(), IsDirectPurchase: zod_1.z.boolean(), StartDate: exports.dateSchema, Cost: zod_1.z.record(exports.currencyIDSchema, zod_1.z.number()), Rewards: zod_1.z.array(zod_1.z.object({ ItemTypeID: exports.itemTypeIDSchema, ItemID: exports.itemIDSchema, Quantity: zod_1.z.number() })) }); const pregameTeamSchema = zod_1.z.object({ TeamID: zod_1.z.enum(['Blue', 'Red']).or(exports.playerUUIDSchema), Players: zod_1.z.array(zod_1.z.object({ Subject: exports.playerUUIDSchema, CharacterID: exports.characterIDSchema, CharacterSelectionState: zod_1.z.enum(['', 'selected', 'locked']), PregamePlayerState: zod_1.z.enum(['joined']), CompetitiveTier: zod_1.z.number(), PlayerIdentity: zod_1.z.object({ Subject: exports.playerUUIDSchema, PlayerCardID: exports.cardIDSchema, PlayerTitleID: exports.titleIDSchema, AccountLevel: zod_1.z.number(), PreferredLevelBorderID: exports.preferredLevelBorderIDSchema, Incognito: zod_1.z.boolean(), HideAccountLevel: zod_1.z.boolean() }), SeasonalBadgeInfo: zod_1.z.object({ SeasonID: exports.seasonIDSchema.or(zod_1.z.literal('')), NumberOfWins: zod_1.z.number(), WinsByTier: zod_1.z.null(), Rank: zod_1.z.number(), LeaderboardRank: zod_1.z.number() }), IsCaptain: zod_1.z.boolean() })) }); exports.pregameMatchSchema = zod_1.z.object({ ID: exports.pregameIDSchema, Version: zod_1.z.number(), Teams: zod_1.z.array(pregameTeamSchema), AllyTeam: pregameTeamSchema.nullable(), EnemyTeam: pregameTeamSchema.nullable(), ObserverSubjects: zod_1.z.array(zod_1.z.unknown()), MatchCoaches: zod_1.z.array(zod_1.z.unknown()), EnemyTeamSize: zod_1.z.number(), EnemyTeamLockCount: zod_1.z.number(), PregameState: zod_1.z.enum(['character_select_active', 'provisioned']), LastUpdated: exports.dateSchema, MapID: exports.mapIDSchema, MapSelectPool: zod_1.z.array(zod_1.z.unknown()), BannedMapIDs: zod_1.z.array(zod_1.z.unknown()), CastedVotes: zod_1.z.unknown(), MapSelectSteps: zod_1.z.array(zod_1.z.unknown()), MapSelectStep: zod_1.z.number(), Team1: zod_1.z.enum(['Blue', 'Red']).or(exports.playerUUIDSchema), GamePodID: zod_1.z.string(), Mode: exports.gameModeSchema, VoiceSessionID: zod_1.z.string(), MUCName: zod_1.z.string(), TeamMatchToken: zod_1.z.string().describe('JWT containing match ID and player IDs'), QueueID: exports.queueIDSchema.or(zod_1.z.literal('')), ProvisioningFlowID: zod_1.z.enum(['Matchmaking', 'CustomGame']), IsRanked: zod_1.z.boolean(), PhaseTimeRemainingNS: zod_1.z.number(), StepTimeRemainingNS: zod_1.z.number(), altModesFlagADA: zod_1.z.boolean(), TournamentMetadata: zod_1.z.null(), RosterMetadata: zod_1.z.null() }); exports.contractsResponse = zod_1.z.object({ Version: zod_1.z.number(), Subject: exports.playerUUIDSchema, Contracts: zod_1.z.array(zod_1.z.object({ ContractDefinitionID: exports.weakUUIDSchema, ContractProgression: zod_1.z.object({ TotalProgressionEarned: zod_1.z.number(), TotalProgressionEarnedVersion: zod_1.z.number(), HighestRewardedLevel: zod_1.z.record(zod_1.z.object({ Amount: zod_1.z.number(), Version: zod_1.z.number() })) }), ProgressionLevelReached: zod_1.z.number(), ProgressionTowardsNextLevel: zod_1.z.number() })), ProcessedMatches: zod_1.z.array(zod_1.z.object({ ID: exports.matchIDSchema, StartTime: exports.millisSchema, XPGrants: zod_1.z.object({ GamePlayed: zod_1.z.number(), GameWon: zod_1.z.number(), RoundPlayed: zod_1.z.number(), RoundWon: zod_1.z.number(), Missions: zod_1.z.object({}), Modifier: zod_1.z.object({ Value: zod_1.z.number(), BaseMultiplierValue: zod_1.z.number(), Modifiers: zod_1.z.array(zod_1.z.object({ Value: zod_1.z.number(), Name: zod_1.z.enum(['RESTRICTIONS_XP', 'PREMIUM_CONTRACT_XP']), BaseOnly: zod_1.z.boolean() })) }), NumAFKRounds: zod_1.z.number() }).nullable(), RewardGrants: zod_1.z.object({}).nullable(), MissionDeltas: zod_1.z.record(exports.weakUUIDSchema, zod_1.z.object({ ID: exports.weakUUIDSchema, Objectives: zod_1.z.record(exports.weakUUIDSchema, zod_1.z.number()), ObjectiveDeltas: zod_1.z.record(exports.weakUUIDSchema, zod_1.z.object({ ID: exports.weakUUIDSchema, ProgressBefore: zod_1.z.number(), ProgressAfter: zod_1.z.number() })) })).nullable(), ContractDeltas: zod_1.z.record(exports.weakUUIDSchema, zod_1.z.object({ ID: exports.weakUUIDSchema, TotalXPBefore: zod_1.z.number(), TotalXPAfter: zod_1.z.number(), })).nullable(), CouldProgressMissions: zod_1.z.boolean() })), ActiveSpecialContract: exports.weakUUIDSchema, Missions: zod_1.z.array(zod_1.z.object({ ID: exports.weakUUIDSchema, Objectives: zod_1.z.record(exports.weakUUIDSchema, zod_1.z.number()), Complete: zod_1.z.boolean(), ExpirationTime: exports.dateSchema })), MissionMetadata: zod_1.z.object({ NPECompleted: zod_1.z.boolean(), WeeklyCheckpoint: exports.dateSchema, WeeklyRefillTime: exports.dateSchema }) }); exports.conversationsSchema = zod_1.z.object({ conversations: zod_1.z.array(zod_1.z.object({ cid: zod_1.z.string(), direct_messages: zod_1.z.boolean(), global_readership: zod_1.z.boolean(), message_history: zod_1.z.boolean(), mid: zod_1.z.string(), muted: zod_1.z.boolean(), mutedRestriction: zod_1.z.boolean(), type: zod_1.z.enum(['groupchat', 'chat']), uiState: zod_1.z.object({ changedSinceHidden: zod_1.z.boolean(), hidden: zod_1.z.boolean() }), unread_count: zod_1.z.number() })) }); exports.chatMessagesSchema = zod_1.z.object({ messages: zod_1.z.array(zod_1.z.object({ body: zod_1.z.string(), cid: zod_1.z.string(), game_name: zod_1.z.string(), game_tag: zod_1.z.string(), id: zod_1.z.string(), mid: zod_1.z.string(), name: zod_1.z.string(), pid: zod_1.z.string(), puuid: exports.playerUUIDSchema, read: zod_1.z.boolean(), region: zod_1.z.string(), time: zod_1.z.string().transform(s => new Date(Number(s))).describe('Time in milliseconds since epoch'), type: zod_1.z.enum(['chat', 'groupchat']) })) }); exports.loadoutsSchema = zod_1.z.object({ Subject: exports.playerUUIDSchema, Sprays: zod_1.z.object({ SpraySelections: zod_1.z.array(zod_1.z.object({ SocketID: exports.weakUUIDSchema, SprayID: exports.weakUUIDSchema, LevelID: exports.weakUUIDSchema })) }), Expressions: zod_1.z.object({ AESSelections: zod_1.z.array(zod_1.z.object({ SocketID: exports.weakUUIDSchema, AssetID: exports.weakUUIDSchema, TypeID: exports.weakUUIDSchema })) }), Items: zod_1.z.record(zod_1.z.object({ ID: exports.itemIDSchema, TypeID: exports.itemTypeIDSchema, Sockets: zod_1.z.record(zod_1.z.object({ ID: exports.weakUUIDSchema, Item: zod_1.z.object({ ID: exports.itemIDSchema, TypeID: exports.itemTypeIDSchema }) })) })) }); //# sourceMappingURL=commonTypes.js.map