fnapi-js 1.1.2 → 2.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +81 -57
- package/config.example.json +24 -0
- package/dist/index.cjs +10508 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +5737 -0
- package/dist/index.d.ts +5737 -0
- package/dist/index.js +10218 -0
- package/dist/index.js.map +1 -0
- package/docs.md +8848 -0
- package/package.json +54 -13
- package/src/client/Aes.js +0 -23
- package/src/client/ApiClient.js +0 -114
- package/src/client/Banners.js +0 -23
- package/src/client/Cosmetics.js +0 -103
- package/src/client/CreatorCode.js +0 -19
- package/src/client/Map.js +0 -15
- package/src/client/Misc.js +0 -21
- package/src/client/News.js +0 -16
- package/src/client/Playlists.js +0 -25
- package/src/client/Shop.js +0 -17
- package/src/client/Stats.js +0 -50
- package/src/docs/DOCUMENTATION.md +0 -435
- package/src/enums/AccountType.js +0 -11
- package/src/enums/CosmeticType.js +0 -251
- package/src/enums/Language.js +0 -58
- package/src/enums/MatchMethod.js +0 -14
- package/src/enums/RequestFlags.js +0 -62
- package/src/enums/StatsImage.js +0 -15
- package/src/enums/TimeWindow.js +0 -9
- package/src/examples/api-example.js +0 -220
- package/src/examples/fnbrjsAndfnapi.js +0 -63
- package/src/http/Response.js +0 -30
- package/src/index.d.ts +0 -503
- package/src/index.js +0 -13
- package/src/types/SearchOptions.js +0 -50
- package/src/utils/Enums.js +0 -39
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/fortnite/routes.ts","../src/fortnite/enums.ts","../src/core/errors.ts","../src/fortnite/endpoints/base.ts","../src/fortnite/endpoints/aes.ts","../src/fortnite/endpoints/banners.ts","../src/core/utils.ts","../src/fortnite/search.ts","../src/fortnite/endpoints/cosmetics.ts","../src/fortnite/endpoints/creatorCode.ts","../src/fortnite/endpoints/map.ts","../src/fortnite/endpoints/news.ts","../src/fortnite/endpoints/playlists.ts","../src/fortnite/endpoints/shop.ts","../src/fortnite/endpoints/stats.ts","../src/core/version.ts","../src/core/response.ts","../src/core/cache.ts","../src/fortnite/rest.ts","../src/fortnite/client.ts","../src/dilly/routes.ts","../src/dilly/endpoints/base.ts","../src/dilly/endpoints/aes.ts","../src/dilly/endpoints/backup.ts","../src/dilly/endpoints/cloudStorage.ts","../src/dilly/endpoints/common.ts","../src/dilly/endpoints/cosmetic.ts","../src/dilly/endpoints/export.ts","../src/dilly/endpoints/manifest.ts","../src/dilly/endpoints/mapping.ts","../src/dilly/client.ts","../src/dilly/enums.ts","../src/fncc/routes.ts","../src/fncc/endpoints/base.ts","../src/fncc/endpoints/status.ts","../src/fncc/endpoints/game.ts","../src/fncc/endpoints/cosmetics.ts","../src/fncc/endpoints/banners.ts","../src/fncc/endpoints/sprites.ts","../src/fncc/endpoints/search.ts","../src/fncc/endpoints/assets.ts","../src/fncc/endpoints/images.ts","../src/fncc/endpoints/anticheat.ts","../src/fncc/endpoints/cloudstorage.ts","../src/fncc/endpoints/discovery.ts","../src/fncc/endpoints/fish.ts","../src/fncc/endpoints/itemshop.ts","../src/fncc/endpoints/lightswitch.ts","../src/fncc/endpoints/lookup.ts","../src/fncc/endpoints/mnemonic.ts","../src/fncc/endpoints/news.ts","../src/fncc/endpoints/playlists.ts","../src/fncc/endpoints/weapons.ts","../src/fncc/client.ts","../src/fncc/enums.ts","../src/epic/clients.ts","../src/epic/errorCodes.ts","../src/epic/errors.ts","../src/epic/rest.ts","../src/epic/auth.ts","../src/epic/deviceCode.ts","../src/epic/mcp-operations.generated.ts","../src/epic/mcp.ts","../src/epic/eos.ts","../src/epic/party.ts","../src/epic/emitter.ts","../src/epic/notifications.ts","../src/epic/live.ts","../src/epic/shop.ts","../src/epic/account.ts","../src/epic/friends.ts","../src/epic/habanero.ts","../src/epic/presence.ts","../src/epic/lightswitch.ts","../src/epic/socialBan.ts","../src/epic/stats.ts","../src/epic/game.ts","../src/epic/userSearch.ts","../src/epic/avatar.ts","../src/epic/cloudstorage.ts","../src/epic/matchmaking.ts","../src/epic/playtime.ts","../src/epic/status.ts","../src/epic/xml.ts","../src/epic/xmpp.ts","../src/epic/chat.ts","../src/epic/connect.ts","../src/epic/session.ts","../src/epic/ecosystem.ts","../src/epic/client.ts","../src/client.ts","../src/locker.ts"],"names":["headersToRecord","parseBody","requireString","accountId","requireStringList","requireAccountIds","encodeBase64","NUL","WS_OPEN","snapshot"],"mappings":"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","file":"index.js","sourcesContent":["export const DEFAULT_BASE_URL = 'https://fortnite-api.com';\n\nexport const Routes = {\n aes: () => '/v2/aes',\n banners: () => '/v1/banners',\n bannerColors: () => '/v1/banners/colors',\n cosmetics: () => '/v2/cosmetics',\n cosmeticsNew: () => '/v2/cosmetics/new',\n cosmeticsBr: () => '/v2/cosmetics/br',\n cosmeticById: (cosmeticId: string) => `/v2/cosmetics/br/${encodeURIComponent(cosmeticId)}`,\n cosmeticsSearch: () => '/v2/cosmetics/br/search',\n cosmeticsSearchAll: () => '/v2/cosmetics/br/search/all',\n cosmeticsSearchIds: () => '/v2/cosmetics/br/search/ids',\n cosmeticsTracks: () => '/v2/cosmetics/tracks',\n cosmeticsInstruments: () => '/v2/cosmetics/instruments',\n cosmeticsCars: () => '/v2/cosmetics/cars',\n cosmeticsLego: () => '/v2/cosmetics/lego',\n cosmeticsLegoKits: () => '/v2/cosmetics/lego/kits',\n cosmeticsBeans: () => '/v2/cosmetics/beans',\n creatorCode: () => '/v2/creatorcode',\n map: () => '/v1/map',\n news: () => '/v2/news',\n newsBr: () => '/v2/news/br',\n newsStw: () => '/v2/news/stw',\n playlists: () => '/v1/playlists',\n playlistById: (playlistId: string) => `/v1/playlists/${encodeURIComponent(playlistId)}`,\n shop: () => '/v2/shop',\n stats: () => '/v2/stats/br/v2',\n statsByAccountId: (accountId: string) => `/v2/stats/br/v2/${encodeURIComponent(accountId)}`,\n} as const;\n","export const AccountType = {\r\n Epic: 'epic',\r\n Psn: 'psn',\r\n Xbl: 'xbl',\r\n} as const;\r\n\r\nexport type AccountType = (typeof AccountType)[keyof typeof AccountType];\r\n\r\nexport const ACCOUNT_TYPES = Object.values(AccountType) as AccountType[];\r\n\r\nexport function isAccountType(value: unknown): value is AccountType {\r\n return typeof value === 'string' && (ACCOUNT_TYPES as string[]).includes(value);\r\n}\r\n\r\nexport const KeyFormat = {\r\n Hex: 'hex',\r\n Base64: 'base64',\r\n} as const;\r\n\r\nexport type KeyFormat = (typeof KeyFormat)[keyof typeof KeyFormat];\r\n\r\nexport const KEY_FORMATS = Object.values(KeyFormat) as KeyFormat[];\r\n\r\nexport function isKeyFormat(value: unknown): value is KeyFormat {\r\n return typeof value === 'string' && (KEY_FORMATS as string[]).includes(value);\r\n}\r\n\r\nexport const Language = {\r\n Arabic: 'ar',\r\n German: 'de',\r\n English: 'en',\r\n Spanish: 'es',\r\n SpanishLatinAmerica: 'es-419',\r\n French: 'fr',\r\n Indonesian: 'id',\r\n Italian: 'it',\r\n Japanese: 'ja',\r\n Korean: 'ko',\r\n Polish: 'pl',\r\n PortugueseBrazil: 'pt-BR',\r\n Russian: 'ru',\r\n Thai: 'th',\r\n Turkish: 'tr',\r\n Vietnamese: 'vi',\r\n ChineseSimplified: 'zh-Hans',\r\n ChineseTraditional: 'zh-Hant',\r\n} as const;\r\n\r\nexport type Language = (typeof Language)[keyof typeof Language];\r\n\r\nexport const LANGUAGES = Object.values(Language) as Language[];\r\n\r\nexport function isLanguage(value: unknown): value is Language {\r\n return typeof value === 'string' && (LANGUAGES as string[]).includes(value);\r\n}\r\n\r\nexport const MatchMethod = {\r\n Full: 'full',\r\n Contains: 'contains',\r\n Starts: 'starts',\r\n Ends: 'ends',\r\n} as const;\r\n\r\nexport type MatchMethod = (typeof MatchMethod)[keyof typeof MatchMethod];\r\n\r\nexport const MATCH_METHODS = Object.values(MatchMethod) as MatchMethod[];\r\n\r\nexport function isMatchMethod(value: unknown): value is MatchMethod {\r\n return typeof value === 'string' && (MATCH_METHODS as string[]).includes(value);\r\n}\r\n\r\nexport const TimeWindow = {\r\n Lifetime: 'lifetime',\r\n Season: 'season',\r\n} as const;\r\n\r\nexport type TimeWindow = (typeof TimeWindow)[keyof typeof TimeWindow];\r\n\r\nexport const TIME_WINDOWS = Object.values(TimeWindow) as TimeWindow[];\r\n\r\nexport function isTimeWindow(value: unknown): value is TimeWindow {\r\n return typeof value === 'string' && (TIME_WINDOWS as string[]).includes(value);\r\n}\r\n\r\nexport const StatsImage = {\r\n All: 'all',\r\n KeyboardMouse: 'keyboardMouse',\r\n Gamepad: 'gamepad',\r\n Touch: 'touch',\r\n None: 'none',\r\n} as const;\r\n\r\nexport type StatsImage = (typeof StatsImage)[keyof typeof StatsImage];\r\n\r\nexport const STATS_IMAGES = Object.values(StatsImage) as StatsImage[];\r\n\r\nexport function isStatsImage(value: unknown): value is StatsImage {\r\n return typeof value === 'string' && (STATS_IMAGES as string[]).includes(value);\r\n}\r\n\r\nexport const Rarity = {\r\n Common: 'common',\r\n Uncommon: 'uncommon',\r\n Rare: 'rare',\r\n Epic: 'epic',\r\n Legendary: 'legendary',\r\n Mythic: 'mythic',\r\n Dark: 'dark',\r\n Dc: 'dc',\r\n Frozen: 'frozen',\r\n GamingLegends: 'gaminglegends',\r\n Icon: 'icon',\r\n Lamborghini: 'lamborghini',\r\n Lava: 'lava',\r\n Marvel: 'marvel',\r\n Shadow: 'shadow',\r\n Slurp: 'slurp',\r\n StarWars: 'starwars',\r\n} as const;\r\n\r\nexport type Rarity = (typeof Rarity)[keyof typeof Rarity];\r\n\r\nexport const RARITIES = Object.values(Rarity) as Rarity[];\r\n\r\nexport function isRarity(value: unknown): value is Rarity {\r\n return typeof value === 'string' && (RARITIES as string[]).includes(value);\r\n}\r\n\r\nexport const BackendRarity = {\r\n Common: 'EFortRarity::Common',\r\n Uncommon: 'EFortRarity::Uncommon',\r\n Rare: 'EFortRarity::Rare',\r\n Epic: 'EFortRarity::Epic',\r\n Legendary: 'EFortRarity::Legendary',\r\n Mythic: 'EFortRarity::Mythic',\r\n Unattainable: 'EFortRarity::Unattainable',\r\n} as const;\r\n\r\nexport type BackendRarity = (typeof BackendRarity)[keyof typeof BackendRarity];\r\n\r\nexport const BACKEND_RARITIES = Object.values(BackendRarity) as BackendRarity[];\r\n\r\nexport function isBackendRarity(value: unknown): value is BackendRarity {\r\n return typeof value === 'string' && (BACKEND_RARITIES as string[]).includes(value);\r\n}\r\n\r\nexport const CosmeticSeries = {\r\n Crew: 'CrewSeries',\r\n Dark: 'CUBESeries',\r\n Dc: 'DCUSeries',\r\n DcVehicles: 'Series_DC',\r\n Frozen: 'FrozenSeries',\r\n GamingLegends: 'PlatformSeries',\r\n GamingLegendsVehicles: 'Series_GamingLegends',\r\n Icon: 'CreatorCollabSeries',\r\n Lava: 'LavaSeries',\r\n Marvel: 'MarvelSeries',\r\n Shadow: 'ShadowSeries',\r\n Slurp: 'SlurpSeries',\r\n StarWars: 'ColumbusSeries',\r\n Puma: 'KittySeries',\r\n Adidas: 'Series_Adidas',\r\n AlanWalker: 'Series_Alan_Walker',\r\n AstonMartin: 'Series_AstonMartin',\r\n Bmw: 'Series_BMW',\r\n Bugatti: 'Series_Bugatti',\r\n Chevrolet: 'Series_Chevrolet',\r\n Chrysler: 'Series_Chrysler',\r\n Defender: 'Series_Defender',\r\n Dodge: 'Series_Dodge',\r\n Ferrari: 'Series_Ferrari',\r\n Ford: 'Series_Ford',\r\n Hyundai: 'Series_Hyundai',\r\n Jeep: 'Series_Jeep',\r\n Lamborghini: 'Series_Lamborghini',\r\n Maserati: 'Series_Maserati',\r\n McLaren: 'Series_McLaren',\r\n Mercedes: 'Series_Mercedes',\r\n Nissan: 'Series_Nissan',\r\n Pontiac: 'Series_Pontiac',\r\n Porsche: 'Series_Porsche',\r\n Ram: 'Series_RAM',\r\n Rivian: 'Series_Rivian',\r\n Tesla: 'Series_Tesla',\r\n} as const;\r\n\r\nexport type CosmeticSeries = (typeof CosmeticSeries)[keyof typeof CosmeticSeries];\r\n\r\nexport const COSMETIC_SERIES = Object.values(CosmeticSeries) as CosmeticSeries[];\r\n\r\nexport const VEHICLE_SERIES = [\r\n CosmeticSeries.AstonMartin,\r\n CosmeticSeries.Bmw,\r\n CosmeticSeries.Bugatti,\r\n CosmeticSeries.Chevrolet,\r\n CosmeticSeries.Chrysler,\r\n CosmeticSeries.Defender,\r\n CosmeticSeries.Dodge,\r\n CosmeticSeries.Ferrari,\r\n CosmeticSeries.Ford,\r\n CosmeticSeries.Hyundai,\r\n CosmeticSeries.Jeep,\r\n CosmeticSeries.Lamborghini,\r\n CosmeticSeries.Maserati,\r\n CosmeticSeries.McLaren,\r\n CosmeticSeries.Mercedes,\r\n CosmeticSeries.Nissan,\r\n CosmeticSeries.Pontiac,\r\n CosmeticSeries.Porsche,\r\n CosmeticSeries.Ram,\r\n CosmeticSeries.Rivian,\r\n CosmeticSeries.Tesla,\r\n] as CosmeticSeries[];\r\n\r\nexport function isCosmeticSeries(value: unknown): value is CosmeticSeries {\r\n return typeof value === 'string' && (COSMETIC_SERIES as string[]).includes(value);\r\n}\r\n\r\nexport const COSMETIC_TYPE_BACKEND = {\r\n outfit: 'AthenaCharacter',\r\n backpack: 'AthenaBackpack',\r\n pickaxe: 'AthenaPickaxe',\r\n glider: 'AthenaGlider',\r\n contrail: 'AthenaSkyDiveContrail',\r\n emote: 'AthenaDance',\r\n emoji: 'AthenaEmoji',\r\n spray: 'AthenaSpray',\r\n toy: 'AthenaToy',\r\n wrap: 'AthenaItemWrap',\r\n loadingscreen: 'AthenaLoadingScreen',\r\n music: 'AthenaMusicPack',\r\n banner: 'BannerToken',\r\n pet: 'AthenaPet',\r\n petcarrier: 'AthenaPetCarrier',\r\n shoe: 'CosmeticShoes',\r\n sidekick: 'CosmeticCompanion',\r\n skin: 'VehicleCosmetics_Skin',\r\n body: 'VehicleCosmetics_Body',\r\n wheel: 'VehicleCosmetics_Wheel',\r\n booster: 'VehicleCosmetics_Booster',\r\n drifttrail: 'VehicleCosmetics_DriftTrail',\r\n guitar: 'SparksGuitar',\r\n bass: 'SparksBass',\r\n drum: 'SparksDrum',\r\n keyboard: 'SparksKeyboard',\r\n mic: 'SparksMic',\r\n aura: 'SparksAura',\r\n legoprop: 'JunoBuildingProp',\r\n legoset: 'JunoBuildingSet',\r\n} as const;\r\n\r\nexport type CosmeticType = keyof typeof COSMETIC_TYPE_BACKEND;\r\nexport type CosmeticBackendType = (typeof COSMETIC_TYPE_BACKEND)[CosmeticType];\r\n\r\nexport const CosmeticType = Object.fromEntries(\r\n Object.keys(COSMETIC_TYPE_BACKEND).map((key) => [key, key]),\r\n) as { [K in CosmeticType]: K };\r\n\r\nexport const COSMETIC_TYPES = Object.keys(COSMETIC_TYPE_BACKEND) as CosmeticType[];\r\n\r\nexport function isCosmeticType(value: unknown): value is CosmeticType {\r\n return typeof value === 'string' && value in COSMETIC_TYPE_BACKEND;\r\n}\r\n\r\nexport function toBackendType(type: CosmeticType): CosmeticBackendType {\r\n return COSMETIC_TYPE_BACKEND[type];\r\n}\r\n\r\nexport function fromBackendType(backendType: string): CosmeticType | null {\r\n const match = COSMETIC_TYPES.find((type) => COSMETIC_TYPE_BACKEND[type] === backendType);\r\n return match ?? null;\r\n}\r\n\r\nexport const ResponseFlags = {\r\n None: 0,\r\n Paths: 1 << 0,\r\n GameplayTags: 1 << 1,\r\n ShopHistory: 1 << 2,\r\n} as const;\r\n\r\nexport type ResponseFlagName = keyof typeof ResponseFlags;\r\nexport type ResponseFlag = (typeof ResponseFlags)[ResponseFlagName];\r\n\r\nexport const ALL_RESPONSE_FLAGS =\r\n ResponseFlags.Paths | ResponseFlags.GameplayTags | ResponseFlags.ShopHistory;\r\n\r\nexport function parseFlags(value: number | string): number {\r\n if (typeof value === 'number') {\r\n return Number.isFinite(value) ? Math.trunc(value) : 0;\r\n }\r\n\r\n const normalized = value.trim().toLowerCase();\r\n const parsed = normalized.startsWith('0x')\r\n ? Number.parseInt(normalized.slice(2), 16)\r\n : Number.parseInt(normalized, 10);\r\n\r\n return Number.isNaN(parsed) ? 0 : parsed;\r\n}\r\n\r\nexport function combineFlags(...flags: Array<number | string>): number {\r\n return flags.reduce<number>((total, flag) => total | parseFlags(flag), 0);\r\n}\r\n\r\nexport function hasFlag(value: number | string, flag: number | string): boolean {\r\n const target = parseFlags(flag);\r\n return target !== 0 && (parseFlags(value) & target) === target;\r\n}\r\n\r\nexport function listFlags(value: number | string): ResponseFlagName[] {\r\n const parsed = parseFlags(value);\r\n return (Object.keys(ResponseFlags) as ResponseFlagName[]).filter(\r\n (name) => ResponseFlags[name] !== 0 && hasFlag(parsed, ResponseFlags[name]),\r\n );\r\n}\r\n\r\nexport function formatFlags(value: number | string): string {\r\n return `0x${(parseFlags(value) >>> 0).toString(16)}`;\r\n}\r\n","export class FortniteApiError extends Error {\r\n public override readonly name: string = 'FortniteApiError';\r\n\r\n constructor(message: string, options?: { cause?: unknown }) {\r\n super(message);\r\n if (options?.cause !== undefined) {\r\n (this as { cause?: unknown }).cause = options.cause;\r\n }\r\n Object.setPrototypeOf(this, new.target.prototype);\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, new.target);\r\n }\r\n }\r\n}\r\n\r\nexport interface HttpErrorContext {\r\n status: number;\r\n method: string;\r\n url: string;\r\n body?: unknown;\r\n headers?: Record<string, string>;\r\n}\r\n\r\nexport class HttpError extends FortniteApiError {\r\n public override readonly name: string = 'HttpError';\r\n public readonly status: number;\r\n public readonly method: string;\r\n public readonly url: string;\r\n public readonly body: unknown;\r\n public readonly headers: Record<string, string>;\r\n\r\n constructor(message: string, context: HttpErrorContext) {\r\n super(message);\r\n this.status = context.status;\r\n this.method = context.method;\r\n this.url = context.url;\r\n this.body = context.body;\r\n this.headers = context.headers ?? {};\r\n }\r\n}\r\n\r\nexport class BadRequestError extends HttpError {\r\n public override readonly name: string = 'BadRequestError';\r\n}\r\n\r\nexport class AuthenticationError extends HttpError {\r\n public override readonly name: string = 'AuthenticationError';\r\n}\r\n\r\nexport class ForbiddenError extends HttpError {\r\n public override readonly name: string = 'ForbiddenError';\r\n}\r\n\r\nexport class NotFoundError extends HttpError {\r\n public override readonly name: string = 'NotFoundError';\r\n}\r\n\r\nexport class GoneError extends HttpError {\r\n public override readonly name: string = 'GoneError';\r\n}\r\n\r\nexport class ConflictError extends HttpError {\r\n public override readonly name: string = 'ConflictError';\r\n}\r\n\r\nexport class RateLimitError extends HttpError {\r\n public override readonly name: string = 'RateLimitError';\r\n public readonly retryAfter: number | null;\r\n\r\n constructor(message: string, context: HttpErrorContext & { retryAfter?: number | null }) {\r\n super(message, context);\r\n this.retryAfter = context.retryAfter ?? null;\r\n }\r\n}\r\n\r\nexport class ServerError extends HttpError {\r\n public override readonly name: string = 'ServerError';\r\n}\r\n\r\nexport class ValidationError extends FortniteApiError {\r\n public override readonly name: string = 'ValidationError';\r\n public readonly parameter: string | null;\r\n\r\n constructor(message: string, parameter?: string) {\r\n super(message);\r\n this.parameter = parameter ?? null;\r\n }\r\n}\r\n\r\nexport class ConfigurationError extends FortniteApiError {\r\n public override readonly name: string = 'ConfigurationError';\r\n public readonly option: string | null;\r\n\r\n constructor(message: string, option?: string) {\r\n super(message);\r\n this.option = option ?? null;\r\n }\r\n}\r\n\r\nexport class TimeoutError extends FortniteApiError {\r\n public override readonly name: string = 'TimeoutError';\r\n public readonly timeout: number;\r\n public readonly url: string;\r\n\r\n constructor(message: string, context: { timeout: number; url: string }) {\r\n super(message);\r\n this.timeout = context.timeout;\r\n this.url = context.url;\r\n }\r\n}\r\n\r\nexport class AbortError extends FortniteApiError {\r\n public override readonly name: string = 'AbortError';\r\n public readonly url: string;\r\n\r\n constructor(message: string, context: { url: string }) {\r\n super(message);\r\n this.url = context.url;\r\n }\r\n}\r\n\r\nexport class NetworkError extends FortniteApiError {\r\n public override readonly name: string = 'NetworkError';\r\n public readonly url: string;\r\n\r\n constructor(message: string, context: { url: string; cause?: unknown }) {\r\n super(message, { cause: context.cause });\r\n this.url = context.url;\r\n }\r\n}\r\n\r\nexport class ParseError extends FortniteApiError {\r\n public override readonly name: string = 'ParseError';\r\n public readonly url: string;\r\n public readonly raw: string;\r\n\r\n constructor(message: string, context: { url: string; raw: string; cause?: unknown }) {\r\n super(message, { cause: context.cause });\r\n this.url = context.url;\r\n this.raw = context.raw;\r\n }\r\n}\r\n\r\nfunction extractMessage(status: number, body: unknown): string {\r\n if (typeof body === 'string' && body.trim().length > 0) {\r\n return body.trim();\r\n }\r\n\r\n if (body && typeof body === 'object') {\r\n const record = body as Record<string, unknown>;\r\n const candidate = record['error'] ?? record['message'] ?? record['errorMessage'];\r\n if (typeof candidate === 'string' && candidate.length > 0) {\r\n return candidate;\r\n }\r\n }\r\n\r\n return `Request failed with status ${status}`;\r\n}\r\n\r\nexport function parseRetryAfter(value: string | undefined | null): number | null {\r\n if (!value) return null;\r\n\r\n const trimmed = value.trim();\r\n if (trimmed.length === 0) return null;\r\n\r\n const seconds = Number(trimmed);\r\n if (Number.isFinite(seconds)) {\r\n return Math.max(0, seconds * 1000);\r\n }\r\n\r\n const date = Date.parse(trimmed);\r\n return Number.isNaN(date) ? null : Math.max(0, date - Date.now());\r\n}\r\n\r\nexport function createHttpError(context: HttpErrorContext): HttpError {\r\n const message = extractMessage(context.status, context.body);\r\n\r\n switch (context.status) {\r\n case 400:\r\n return new BadRequestError(message, context);\r\n case 401:\r\n return new AuthenticationError(message, context);\r\n case 403:\r\n return new ForbiddenError(message, context);\r\n case 404:\r\n return new NotFoundError(message, context);\r\n case 409:\r\n return new ConflictError(message, context);\r\n case 410:\r\n return new GoneError(message, context);\r\n case 429:\r\n return new RateLimitError(message, {\r\n ...context,\r\n retryAfter: parseRetryAfter(context.headers?.['retry-after']),\r\n });\r\n default:\r\n break;\r\n }\r\n\r\n if (context.status >= 500) {\r\n return new ServerError(message, context);\r\n }\r\n\r\n return new HttpError(message, context);\r\n}\r\n","import type { Language } from '../enums.js';\nimport { formatFlags, parseFlags } from '../enums.js';\nimport { ValidationError } from '../../core/errors.js';\nimport type { RestClient } from '../rest.js';\nimport type { ApiEnvelope } from '../types.js';\nimport type { BaseOptions, FlagOptions } from '../options.js';\nimport type { QueryParams, RequestOptions } from '../../core/types.js';\n\nexport interface ClientDefaults {\n language?: Language;\n responseFlags?: number | string;\n}\n\nexport abstract class BaseEndpoint {\n protected readonly rest: RestClient;\n protected readonly defaults: ClientDefaults;\n\n constructor(rest: RestClient, defaults: ClientDefaults = {}) {\n this.rest = rest;\n this.defaults = defaults;\n }\n\n protected requestOptions(options: BaseOptions | undefined, query: QueryParams): RequestOptions {\n const requestOptions: RequestOptions = { query };\n\n if (options?.signal !== undefined) requestOptions.signal = options.signal;\n if (options?.timeout !== undefined) requestOptions.timeout = options.timeout;\n if (options?.cache !== undefined) requestOptions.cache = options.cache;\n if (options?.headers !== undefined) requestOptions.headers = options.headers;\n\n return requestOptions;\n }\n\n protected languageQuery(options: { language?: Language } | undefined): QueryParams {\n const language = options?.language ?? this.defaults.language;\n return language ? { language } : {};\n }\n\n protected flagQuery(options: FlagOptions | undefined): QueryParams {\n const flags = options?.responseFlags ?? this.defaults.responseFlags;\n if (flags === undefined || flags === null) return {};\n\n const parsed = parseFlags(flags);\n return parsed === 0 ? {} : { responseFlags: formatFlags(parsed) };\n }\n\n protected baseQuery(options: FlagOptions | undefined, extra: QueryParams = {}): QueryParams {\n return { ...this.languageQuery(options), ...this.flagQuery(options), ...extra };\n }\n\n protected async fetchData<T>(\n path: string,\n options: BaseOptions | undefined,\n query: QueryParams,\n ): Promise<T> {\n const response = await this.rest.get<ApiEnvelope<T>>(path, this.requestOptions(options, query));\n return response.body.data;\n }\n\n protected requireString(value: unknown, parameter: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(\n `\"${parameter}\" is required and must be a non-empty string`,\n parameter,\n );\n }\n return value;\n }\n\n protected requireApiKey(feature: string): void {\n if (!this.rest.hasApiKey()) {\n throw new ValidationError(\n `An API key is required for ${feature}. Create one at https://dash.fortnite-api.com/`,\n 'apiKey',\n );\n }\n }\n}\n","import { Routes } from '../routes.js';\r\nimport type { Aes } from '../types.js';\r\nimport type { AesOptions } from '../options.js';\r\nimport { BaseEndpoint } from './base.js';\r\n\r\nexport class AesEndpoint extends BaseEndpoint {\r\n get(options?: AesOptions): Promise<Aes> {\r\n const query = options?.keyFormat ? { keyFormat: options.keyFormat } : {};\r\n return this.fetchData<Aes>(Routes.aes(), options, query);\r\n }\r\n\r\n async mainKey(options?: AesOptions): Promise<string | null> {\r\n const aes = await this.get(options);\r\n return aes.mainKey;\r\n }\r\n\r\n async dynamicKey(pakGuid: string, options?: AesOptions): Promise<string | null> {\r\n this.requireString(pakGuid, 'pakGuid');\r\n const aes = await this.get(options);\r\n const match = aes.dynamicKeys.find(\r\n (entry) => entry.pakGuid.toLowerCase() === pakGuid.toLowerCase(),\r\n );\r\n return match?.key ?? null;\r\n }\r\n}\r\n","import { Routes } from '../routes.js';\r\nimport type { Banner, BannerColor } from '../types.js';\r\nimport type { BaseOptions, LanguageOptions } from '../options.js';\r\nimport { BaseEndpoint } from './base.js';\r\n\r\nexport class BannersEndpoint extends BaseEndpoint {\r\n all(options?: LanguageOptions): Promise<Banner[]> {\r\n return this.fetchData<Banner[]>(Routes.banners(), options, this.languageQuery(options));\r\n }\r\n\r\n colors(options?: BaseOptions): Promise<BannerColor[]> {\r\n return this.fetchData<BannerColor[]>(Routes.bannerColors(), options, {});\r\n }\r\n\r\n async byId(bannerId: string, options?: LanguageOptions): Promise<Banner | null> {\r\n this.requireString(bannerId, 'bannerId');\r\n const banners = await this.all(options);\r\n return banners.find((banner) => banner.id === bannerId) ?? null;\r\n }\r\n\r\n async colorById(colorId: string, options?: BaseOptions): Promise<BannerColor | null> {\r\n this.requireString(colorId, 'colorId');\r\n const colors = await this.colors(options);\r\n return colors.find((color) => color.id === colorId) ?? null;\r\n }\r\n}\r\n","import type { QueryParams, QueryPrimitive, QueryValue } from './types.js';\r\n\r\nfunction serializePrimitive(value: QueryPrimitive): string {\r\n if (typeof value === 'boolean') return value ? 'true' : 'false';\r\n return String(value);\r\n}\r\n\r\nexport function appendQuery(search: URLSearchParams, key: string, value: QueryValue): void {\r\n if (value === undefined || value === null) return;\r\n\r\n if (Array.isArray(value)) {\r\n for (const entry of value) {\r\n if (entry === undefined || entry === null) continue;\r\n search.append(key, serializePrimitive(entry));\r\n }\r\n return;\r\n }\r\n\r\n search.append(key, serializePrimitive(value));\r\n}\r\n\r\nexport function buildQuery(params: QueryParams | undefined): string {\r\n if (!params) return '';\r\n\r\n const search = new URLSearchParams();\r\n for (const [key, value] of Object.entries(params)) {\r\n appendQuery(search, key, value);\r\n }\r\n\r\n const serialized = search.toString();\r\n return serialized.length > 0 ? `?${serialized}` : '';\r\n}\r\n\r\nexport function mergeQuery(...sources: Array<QueryParams | undefined>): QueryParams {\r\n const merged: QueryParams = {};\r\n\r\n for (const source of sources) {\r\n if (!source) continue;\r\n for (const [key, value] of Object.entries(source)) {\r\n if (value === undefined) continue;\r\n merged[key] = value;\r\n }\r\n }\r\n\r\n return merged;\r\n}\r\n\r\nexport function sleep(ms: number, signal?: AbortSignal): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n if (signal?.aborted) {\r\n reject(signal.reason ?? new Error('Aborted'));\r\n return;\r\n }\r\n\r\n const timer = setTimeout(() => {\r\n signal?.removeEventListener('abort', onAbort);\r\n resolve();\r\n }, ms);\r\n\r\n function onAbort(): void {\r\n clearTimeout(timer);\r\n reject(signal?.reason ?? new Error('Aborted'));\r\n }\r\n\r\n signal?.addEventListener('abort', onAbort, { once: true });\r\n });\r\n}\r\n\r\nexport function toUnixSeconds(value: number | string | Date): number {\r\n if (value instanceof Date) {\r\n return Math.floor(value.getTime() / 1000);\r\n }\r\n\r\n if (typeof value === 'number') {\r\n return value > 1e11 ? Math.floor(value / 1000) : Math.floor(value);\r\n }\r\n\r\n const trimmed = value.trim();\r\n if (trimmed.length === 0) {\r\n throw new TypeError('Unable to parse an empty string as a date');\r\n }\r\n\r\n const numeric = Number(trimmed);\r\n if (Number.isFinite(numeric)) {\r\n return numeric > 1e11 ? Math.floor(numeric / 1000) : Math.floor(numeric);\r\n }\r\n\r\n const parsed = Date.parse(trimmed);\r\n if (Number.isNaN(parsed)) {\r\n throw new TypeError(`Unable to parse \"${value}\" as a date`);\r\n }\r\n\r\n return Math.floor(parsed / 1000);\r\n}\r\n\r\nexport function backoffDelay(attempt: number, minDelay: number, maxDelay: number): number {\r\n const exponential = Math.min(maxDelay, minDelay * 2 ** Math.max(0, attempt - 1));\r\n const jitter = Math.random() * exponential * 0.25;\r\n return Math.round(Math.min(maxDelay, exponential + jitter));\r\n}\r\n\r\nexport interface LinkedSignal {\r\n signal: AbortSignal;\r\n timedOut: () => boolean;\r\n dispose: () => void;\r\n}\r\n\r\nexport function linkSignals(\r\n external: AbortSignal | undefined,\r\n timeout: number | undefined,\r\n): LinkedSignal {\r\n const controller = new AbortController();\r\n let didTimeout = false;\r\n let timer: ReturnType<typeof setTimeout> | undefined;\r\n\r\n const onExternalAbort = (): void => {\r\n controller.abort(external?.reason);\r\n };\r\n\r\n if (external) {\r\n if (external.aborted) {\r\n controller.abort(external.reason);\r\n } else {\r\n external.addEventListener('abort', onExternalAbort, { once: true });\r\n }\r\n }\r\n\r\n if (timeout !== undefined && timeout > 0 && !controller.signal.aborted) {\r\n timer = setTimeout(() => {\r\n didTimeout = true;\r\n controller.abort();\r\n }, timeout);\r\n }\r\n\r\n return {\r\n signal: controller.signal,\r\n timedOut: () => didTimeout,\r\n dispose: () => {\r\n if (timer !== undefined) clearTimeout(timer);\r\n external?.removeEventListener('abort', onExternalAbort);\r\n },\r\n };\r\n}\r\n\r\nconst PATH_REPLACEMENTS: Array<[RegExp, string]> = [\r\n [/^FortniteGame\\/Plugins\\/GameFeatures\\/BRCosmetics\\/Content/, '/BRCosmetics'],\r\n [/^FortniteGame\\/Plugins\\/GameFeatures\\/CosmeticShoes\\/Content/, '/CosmeticShoes'],\r\n [/^FortniteGame\\/Plugins\\/GameFeatures\\/[^/]+\\/Content/, '/Game'],\r\n [/^FortniteGame\\/Content/, '/Game'],\r\n];\r\n\r\nexport function normalizeAssetPath(path: string): string {\r\n let normalized = path.replace(/^\\/+/, '');\r\n\r\n for (const [pattern, replacement] of PATH_REPLACEMENTS) {\r\n if (pattern.test(normalized)) {\r\n normalized = normalized.replace(pattern, replacement);\r\n break;\r\n }\r\n }\r\n\r\n return normalized.startsWith('/') ? normalized : `/${normalized}`;\r\n}\r\n\r\nexport function assetDirectory(path: string): string {\r\n const normalized = normalizeAssetPath(path);\r\n const segments = normalized.split('/');\r\n segments.pop();\r\n return segments.join('/');\r\n}\r\n\r\nexport function assetName(path: string): string {\r\n const segments = normalizeAssetPath(path).split('/');\r\n return segments[segments.length - 1] ?? '';\r\n}\r\n\r\nexport function safeGet<T = unknown>(\r\n source: unknown,\r\n path: string,\r\n defaultValue: T | null = null,\r\n): T | null {\r\n const value = path.split('.').reduce<unknown>((accumulator, key) => {\r\n if (accumulator === null || accumulator === undefined) return undefined;\r\n return (accumulator as Record<string, unknown>)[key];\r\n }, source);\r\n\r\n return (value ?? defaultValue) as T | null;\r\n}\r\n","import type {\r\n CosmeticSeries,\r\n CosmeticType,\r\n Language,\r\n MatchMethod,\r\n BackendRarity,\r\n Rarity,\r\n} from './enums.js';\r\nimport type { CosmeticSearchParams } from './options.js';\r\nimport type { QueryParams } from '../core/types.js';\r\nimport { toUnixSeconds } from '../core/utils.js';\r\n\r\nconst DATE_KEYS = new Set(['added', 'addedSince', 'lastAppearance']);\r\n\r\nexport function normalizeSearchParams(params: CosmeticSearchParams): QueryParams {\r\n const query: QueryParams = {};\r\n\r\n for (const [key, value] of Object.entries(params)) {\r\n if (value === undefined || value === null) continue;\r\n\r\n if (DATE_KEYS.has(key)) {\r\n query[key] = toUnixSeconds(value as number | string | Date);\r\n continue;\r\n }\r\n\r\n query[key] = value as QueryParams[string];\r\n }\r\n\r\n return query;\r\n}\r\n\r\nexport class CosmeticSearchBuilder {\r\n private readonly params: CosmeticSearchParams = {};\r\n\r\n static from(params: CosmeticSearchParams): CosmeticSearchBuilder {\r\n return new CosmeticSearchBuilder().merge(params);\r\n }\r\n\r\n merge(params: CosmeticSearchParams): this {\r\n Object.assign(this.params, params);\r\n return this;\r\n }\r\n\r\n language(language: Language): this {\r\n this.params.language = language;\r\n return this;\r\n }\r\n\r\n searchLanguage(language: Language): this {\r\n this.params.searchLanguage = language;\r\n return this;\r\n }\r\n\r\n matchMethod(method: MatchMethod): this {\r\n this.params.matchMethod = method;\r\n return this;\r\n }\r\n\r\n id(id: string): this {\r\n this.params.id = id;\r\n return this;\r\n }\r\n\r\n name(name: string): this {\r\n this.params.name = name;\r\n return this;\r\n }\r\n\r\n description(description: string): this {\r\n this.params.description = description;\r\n return this;\r\n }\r\n\r\n type(type: CosmeticType | (string & {})): this {\r\n this.params.type = type;\r\n return this;\r\n }\r\n\r\n displayType(displayType: string): this {\r\n this.params.displayType = displayType;\r\n return this;\r\n }\r\n\r\n backendType(backendType: string): this {\r\n this.params.backendType = backendType;\r\n return this;\r\n }\r\n\r\n rarity(rarity: Rarity | (string & {})): this {\r\n this.params.rarity = rarity;\r\n return this;\r\n }\r\n\r\n displayRarity(displayRarity: string): this {\r\n this.params.displayRarity = displayRarity;\r\n return this;\r\n }\r\n\r\n backendRarity(backendRarity: BackendRarity | (string & {})): this {\r\n this.params.backendRarity = backendRarity;\r\n return this;\r\n }\r\n\r\n hasSeries(hasSeries = true): this {\r\n this.params.hasSeries = hasSeries;\r\n return this;\r\n }\r\n\r\n series(series: string): this {\r\n this.params.series = series;\r\n return this;\r\n }\r\n\r\n backendSeries(backendSeries: CosmeticSeries | (string & {})): this {\r\n this.params.backendSeries = backendSeries;\r\n return this;\r\n }\r\n\r\n hasSet(hasSet = true): this {\r\n this.params.hasSet = hasSet;\r\n return this;\r\n }\r\n\r\n set(set: string): this {\r\n this.params.set = set;\r\n return this;\r\n }\r\n\r\n setText(setText: string): this {\r\n this.params.setText = setText;\r\n return this;\r\n }\r\n\r\n backendSet(backendSet: string): this {\r\n this.params.backendSet = backendSet;\r\n return this;\r\n }\r\n\r\n hasIntroduction(hasIntroduction = true): this {\r\n this.params.hasIntroduction = hasIntroduction;\r\n return this;\r\n }\r\n\r\n backendIntroduction(backendIntroduction: number): this {\r\n this.params.backendIntroduction = backendIntroduction;\r\n return this;\r\n }\r\n\r\n introductionChapter(chapter: string | number): this {\r\n this.params.introductionChapter = chapter;\r\n return this;\r\n }\r\n\r\n introductionSeason(season: string | number): this {\r\n this.params.introductionSeason = season;\r\n return this;\r\n }\r\n\r\n hasFeaturedImage(hasFeaturedImage = true): this {\r\n this.params.hasFeaturedImage = hasFeaturedImage;\r\n return this;\r\n }\r\n\r\n hasVariants(hasVariants = true): this {\r\n this.params.hasVariants = hasVariants;\r\n return this;\r\n }\r\n\r\n hasGameplayTags(hasGameplayTags = true): this {\r\n this.params.hasGameplayTags = hasGameplayTags;\r\n return this;\r\n }\r\n\r\n gameplayTag(tag: string): this {\r\n this.params.gameplayTag = tag;\r\n return this;\r\n }\r\n\r\n hasMetaTags(hasMetaTags = true): this {\r\n this.params.hasMetaTags = hasMetaTags;\r\n return this;\r\n }\r\n\r\n metaTag(tag: string): this {\r\n this.params.metaTag = tag;\r\n return this;\r\n }\r\n\r\n hasDynamicPakId(hasDynamicPakId = true): this {\r\n this.params.hasDynamicPakId = hasDynamicPakId;\r\n return this;\r\n }\r\n\r\n dynamicPakId(dynamicPakId: string): this {\r\n this.params.dynamicPakId = dynamicPakId;\r\n return this;\r\n }\r\n\r\n added(value: number | string | Date): this {\r\n this.params.added = value;\r\n return this;\r\n }\r\n\r\n addedSince(value: number | string | Date): this {\r\n this.params.addedSince = value;\r\n return this;\r\n }\r\n\r\n unseenFor(days: number): this {\r\n this.params.unseenFor = days;\r\n return this;\r\n }\r\n\r\n lastAppearance(value: number | string | Date): this {\r\n this.params.lastAppearance = value;\r\n return this;\r\n }\r\n\r\n toParams(): CosmeticSearchParams {\r\n return { ...this.params };\r\n }\r\n\r\n build(): QueryParams {\r\n return normalizeSearchParams(this.params);\r\n }\r\n}\r\n","import { CosmeticSearchBuilder, normalizeSearchParams } from '../search.js';\r\nimport { ValidationError, NotFoundError } from '../../core/errors.js';\r\nimport { Routes } from '../routes.js';\r\nimport type {\r\n AllCosmetics,\r\n BeanCosmetic,\r\n BrCosmetic,\r\n CarCosmetic,\r\n InstrumentCosmetic,\r\n LegoCosmetic,\r\n LegoKitCosmetic,\r\n NewCosmetics,\r\n TrackCosmetic,\r\n} from '../types.js';\r\nimport type { CosmeticSearchOptions, CosmeticSearchParams, FlagOptions } from '../options.js';\r\nimport type { QueryParams } from '../../core/types.js';\r\nimport { BaseEndpoint } from './base.js';\r\nexport type CosmeticSearchInput = CosmeticSearchParams | CosmeticSearchBuilder;\r\n\r\nfunction toSearchQuery(input: CosmeticSearchInput): QueryParams {\r\n if (input instanceof CosmeticSearchBuilder) {\r\n return input.build();\r\n }\r\n return normalizeSearchParams(input);\r\n}\r\n\r\nexport class CosmeticsEndpoint extends BaseEndpoint {\r\n all(options?: FlagOptions): Promise<AllCosmetics> {\r\n return this.fetchData<AllCosmetics>(Routes.cosmetics(), options, this.baseQuery(options));\r\n }\r\n\r\n newCosmetics(options?: FlagOptions): Promise<NewCosmetics> {\r\n return this.fetchData<NewCosmetics>(Routes.cosmeticsNew(), options, this.baseQuery(options));\r\n }\r\n\r\n br(options?: FlagOptions): Promise<BrCosmetic[]> {\r\n return this.fetchData<BrCosmetic[]>(Routes.cosmeticsBr(), options, this.baseQuery(options));\r\n }\r\n\r\n tracks(options?: FlagOptions): Promise<TrackCosmetic[]> {\r\n return this.fetchData<TrackCosmetic[]>(\r\n Routes.cosmeticsTracks(),\r\n options,\r\n this.baseQuery(options),\r\n );\r\n }\r\n\r\n instruments(options?: FlagOptions): Promise<InstrumentCosmetic[]> {\r\n return this.fetchData<InstrumentCosmetic[]>(\r\n Routes.cosmeticsInstruments(),\r\n options,\r\n this.baseQuery(options),\r\n );\r\n }\r\n\r\n cars(options?: FlagOptions): Promise<CarCosmetic[]> {\r\n return this.fetchData<CarCosmetic[]>(Routes.cosmeticsCars(), options, this.baseQuery(options));\r\n }\r\n\r\n lego(options?: FlagOptions): Promise<LegoCosmetic[]> {\r\n return this.fetchData<LegoCosmetic[]>(Routes.cosmeticsLego(), options, this.baseQuery(options));\r\n }\r\n\r\n legoKits(options?: FlagOptions): Promise<LegoKitCosmetic[]> {\r\n return this.fetchData<LegoKitCosmetic[]>(\r\n Routes.cosmeticsLegoKits(),\r\n options,\r\n this.baseQuery(options),\r\n );\r\n }\r\n\r\n beans(options?: FlagOptions): Promise<BeanCosmetic[]> {\r\n return this.fetchData<BeanCosmetic[]>(Routes.cosmeticsBeans(), options, this.baseQuery(options));\r\n }\r\n\r\n async byId(cosmeticId: string, options?: FlagOptions): Promise<BrCosmetic> {\r\n this.requireString(cosmeticId, 'cosmeticId');\r\n return this.fetchData<BrCosmetic>(\r\n Routes.cosmeticById(cosmeticId),\r\n options,\r\n this.baseQuery(options),\r\n );\r\n }\r\n\r\n async byIds(cosmeticIds: string[], options?: FlagOptions): Promise<BrCosmetic[]> {\r\n if (!Array.isArray(cosmeticIds) || cosmeticIds.length === 0) {\r\n throw new ValidationError('\"cosmeticIds\" must be a non-empty array of ids', 'cosmeticIds');\r\n }\r\n\r\n for (const id of cosmeticIds) {\r\n this.requireString(id, 'cosmeticIds');\r\n }\r\n\r\n return this.fetchData<BrCosmetic[]>(\r\n Routes.cosmeticsSearchIds(),\r\n options,\r\n this.baseQuery(options, { id: cosmeticIds }),\r\n );\r\n }\r\n\r\n async search(input: CosmeticSearchInput, options?: CosmeticSearchOptions): Promise<BrCosmetic> {\r\n return this.fetchData<BrCosmetic>(\r\n Routes.cosmeticsSearch(),\r\n options,\r\n this.baseQuery(options, toSearchQuery(input)),\r\n );\r\n }\r\n\r\n async searchAll(\r\n input: CosmeticSearchInput,\r\n options?: CosmeticSearchOptions,\r\n ): Promise<BrCosmetic[]> {\r\n return this.fetchData<BrCosmetic[]>(\r\n Routes.cosmeticsSearchAll(),\r\n options,\r\n this.baseQuery(options, toSearchQuery(input)),\r\n );\r\n }\r\n\r\n async find(input: CosmeticSearchInput, options?: CosmeticSearchOptions): Promise<BrCosmetic | null> {\r\n try {\r\n return await this.search(input, options);\r\n } catch (error) {\r\n if (error instanceof NotFoundError) return null;\r\n throw error;\r\n }\r\n }\r\n\r\n async findById(cosmeticId: string, options?: FlagOptions): Promise<BrCosmetic | null> {\r\n try {\r\n return await this.byId(cosmeticId, options);\r\n } catch (error) {\r\n if (error instanceof NotFoundError) return null;\r\n throw error;\r\n }\r\n }\r\n}\r\n","import { NotFoundError } from '../../core/errors.js';\r\nimport { Routes } from '../routes.js';\r\nimport type { CreatorCode } from '../types.js';\r\nimport type { BaseOptions } from '../options.js';\r\nimport { BaseEndpoint } from './base.js';\r\n\r\nexport class CreatorCodeEndpoint extends BaseEndpoint {\r\n async get(code: string, options?: BaseOptions): Promise<CreatorCode> {\r\n this.requireString(code, 'code');\r\n return this.fetchData<CreatorCode>(Routes.creatorCode(), options, { name: code });\r\n }\r\n\r\n async exists(code: string, options?: BaseOptions): Promise<boolean> {\r\n try {\r\n await this.get(code, options);\r\n return true;\r\n } catch (error) {\r\n if (error instanceof NotFoundError) return false;\r\n throw error;\r\n }\r\n }\r\n}\r\n","import { Routes } from '../routes.js';\r\nimport type { GameMap, Poi } from '../types.js';\r\nimport type { LanguageOptions } from '../options.js';\r\nimport { BaseEndpoint } from './base.js';\r\n\r\nexport class MapEndpoint extends BaseEndpoint {\r\n get(options?: LanguageOptions): Promise<GameMap> {\r\n return this.fetchData<GameMap>(Routes.map(), options, this.languageQuery(options));\r\n }\r\n\r\n async pois(options?: LanguageOptions): Promise<Poi[]> {\r\n const map = await this.get(options);\r\n return map.pois;\r\n }\r\n\r\n async poiById(poiId: string, options?: LanguageOptions): Promise<Poi | null> {\r\n this.requireString(poiId, 'poiId');\r\n const pois = await this.pois(options);\r\n return pois.find((poi) => poi.id === poiId) ?? null;\r\n }\r\n}\r\n","import { Routes } from '../routes.js';\r\nimport type { GameModeNews, News } from '../types.js';\r\nimport type { LanguageOptions } from '../options.js';\r\nimport { BaseEndpoint } from './base.js';\r\n\r\nexport class NewsEndpoint extends BaseEndpoint {\r\n all(options?: LanguageOptions): Promise<News> {\r\n return this.fetchData<News>(Routes.news(), options, this.languageQuery(options));\r\n }\r\n\r\n br(options?: LanguageOptions): Promise<GameModeNews> {\r\n return this.fetchData<GameModeNews>(Routes.newsBr(), options, this.languageQuery(options));\r\n }\r\n\r\n stw(options?: LanguageOptions): Promise<GameModeNews> {\r\n return this.fetchData<GameModeNews>(Routes.newsStw(), options, this.languageQuery(options));\r\n }\r\n}\r\n","import { Routes } from '../routes.js';\r\nimport type { LanguageOptions } from '../options.js';\r\nimport type { Playlist } from '../types.js';\r\nimport { BaseEndpoint } from './base.js';\r\n\r\nexport class PlaylistsEndpoint extends BaseEndpoint {\r\n all(options?: LanguageOptions): Promise<Playlist[]> {\r\n return this.fetchData<Playlist[]>(Routes.playlists(), options, this.languageQuery(options));\r\n }\r\n\r\n async byId(playlistId: string, options?: LanguageOptions): Promise<Playlist> {\r\n this.requireString(playlistId, 'playlistId');\r\n return this.fetchData<Playlist>(\r\n Routes.playlistById(playlistId),\r\n options,\r\n this.languageQuery(options),\r\n );\r\n }\r\n}\r\n","import { Routes } from '../routes.js';\r\nimport type { FlagOptions } from '../options.js';\r\nimport type { Shop, ShopEntry } from '../types.js';\r\nimport { BaseEndpoint } from './base.js';\r\n\r\nfunction entryCosmeticIds(entry: ShopEntry): string[] {\r\n return [\r\n ...(entry.brItems ?? []).map((item) => item.id),\r\n ...(entry.tracks ?? []).map((item) => item.id),\r\n ...(entry.instruments ?? []).map((item) => item.id),\r\n ...(entry.cars ?? []).map((item) => item.id),\r\n ...(entry.legoKits ?? []).map((item) => item.id),\r\n ];\r\n}\r\n\r\nexport class ShopEndpoint extends BaseEndpoint {\r\n get(options?: FlagOptions): Promise<Shop> {\r\n return this.fetchData<Shop>(Routes.shop(), options, this.baseQuery(options));\r\n }\r\n\r\n async entries(options?: FlagOptions): Promise<ShopEntry[]> {\r\n const shop = await this.get(options);\r\n return shop.entries;\r\n }\r\n\r\n async sections(options?: FlagOptions): Promise<Map<string, ShopEntry[]>> {\r\n const entries = await this.entries(options);\r\n const sections = new Map<string, ShopEntry[]>();\r\n\r\n for (const entry of entries) {\r\n const key = entry.layout?.name ?? entry.layoutId ?? 'unknown';\r\n const bucket = sections.get(key);\r\n if (bucket) {\r\n bucket.push(entry);\r\n } else {\r\n sections.set(key, [entry]);\r\n }\r\n }\r\n\r\n return sections;\r\n }\r\n\r\n async byOfferId(offerId: string, options?: FlagOptions): Promise<ShopEntry | null> {\r\n this.requireString(offerId, 'offerId');\r\n const entries = await this.entries(options);\r\n return entries.find((entry) => entry.offerId === offerId) ?? null;\r\n }\r\n\r\n async containing(cosmeticId: string, options?: FlagOptions): Promise<ShopEntry[]> {\r\n this.requireString(cosmeticId, 'cosmeticId');\r\n const entries = await this.entries(options);\r\n return entries.filter((entry) => entryCosmeticIds(entry).includes(cosmeticId));\r\n }\r\n\r\n async isInShop(cosmeticId: string, options?: FlagOptions): Promise<boolean> {\r\n const matches = await this.containing(cosmeticId, options);\r\n return matches.length > 0;\r\n }\r\n}\r\n","import { NotFoundError } from '../../core/errors.js';\r\nimport { Routes } from '../routes.js';\r\nimport type { QueryParams } from '../../core/types.js';\r\nimport type { StatsByIdOptions, StatsLookupOptions } from '../options.js';\r\nimport type { BrStats } from '../types.js';\r\nimport { BaseEndpoint } from './base.js';\r\n\r\nexport class StatsEndpoint extends BaseEndpoint {\r\n async byName(name: string, options?: StatsLookupOptions): Promise<BrStats> {\r\n this.requireApiKey('player stats');\r\n this.requireString(name, 'name');\r\n\r\n const query: QueryParams = { name };\r\n if (options?.accountType) query['accountType'] = options.accountType;\r\n if (options?.timeWindow) query['timeWindow'] = options.timeWindow;\r\n if (options?.image) query['image'] = options.image;\r\n\r\n return this.fetchData<BrStats>(Routes.stats(), options, query);\r\n }\r\n\r\n async byId(accountId: string, options?: StatsByIdOptions): Promise<BrStats> {\r\n this.requireApiKey('player stats');\r\n this.requireString(accountId, 'accountId');\r\n\r\n const query: QueryParams = {};\r\n if (options?.timeWindow) query['timeWindow'] = options.timeWindow;\r\n if (options?.image) query['image'] = options.image;\r\n\r\n return this.fetchData<BrStats>(Routes.statsByAccountId(accountId), options, query);\r\n }\r\n\r\n async findByName(name: string, options?: StatsLookupOptions): Promise<BrStats | null> {\r\n try {\r\n return await this.byName(name, options);\r\n } catch (error) {\r\n if (error instanceof NotFoundError) return null;\r\n throw error;\r\n }\r\n }\r\n\r\n async findById(accountId: string, options?: StatsByIdOptions): Promise<BrStats | null> {\r\n try {\r\n return await this.byId(accountId, options);\r\n } catch (error) {\r\n if (error instanceof NotFoundError) return null;\r\n throw error;\r\n }\r\n }\r\n}\r\n","export const VERSION = '2.0.0-beta.0';\n\nexport const USER_AGENT = `fnapi-js/${VERSION} (+https://github.com/AjaxFNC-YT/fnapi-js)`;\n","export class ApiResponse<T = unknown> {\n public readonly status: number;\n public readonly headers: Record<string, string>;\n public readonly body: T;\n public readonly url: string;\n public readonly method: string;\n public readonly cached: boolean;\n public readonly receivedAt: Date;\n\n constructor(init: {\n status: number;\n headers: Record<string, string>;\n body: T;\n url: string;\n method: string;\n cached?: boolean;\n }) {\n this.status = init.status;\n this.headers = init.headers;\n this.body = init.body;\n this.url = init.url;\n this.method = init.method;\n this.cached = init.cached ?? false;\n this.receivedAt = new Date();\n }\n\n get ok(): boolean {\n return this.status >= 200 && this.status < 300;\n }\n\n get failed(): boolean {\n return !this.ok;\n }\n\n header(name: string): string | undefined {\n return this.headers[name.toLowerCase()];\n }\n\n toJSON(): {\n status: number;\n headers: Record<string, string>;\n body: T;\n url: string;\n method: string;\n cached: boolean;\n } {\n return {\n status: this.status,\n headers: this.headers,\n body: this.body,\n url: this.url,\n method: this.method,\n cached: this.cached,\n };\n }\n}\n","interface CacheEntry<T> {\n value: T;\n expiresAt: number;\n}\n\nexport class MemoryCache<T = unknown> {\n private readonly store = new Map<string, CacheEntry<T>>();\n private readonly ttl: number;\n private readonly maxEntries: number;\n\n constructor(options: { ttl?: number; maxEntries?: number } = {}) {\n this.ttl = options.ttl ?? 60_000;\n this.maxEntries = options.maxEntries ?? 200;\n }\n\n get size(): number {\n return this.store.size;\n }\n\n get(key: string): T | undefined {\n const entry = this.store.get(key);\n if (!entry) return undefined;\n\n if (entry.expiresAt <= Date.now()) {\n this.store.delete(key);\n return undefined;\n }\n\n this.store.delete(key);\n this.store.set(key, entry);\n return entry.value;\n }\n\n has(key: string): boolean {\n return this.get(key) !== undefined;\n }\n\n set(key: string, value: T, ttl?: number): void {\n if (this.store.has(key)) {\n this.store.delete(key);\n } else if (this.store.size >= this.maxEntries) {\n const oldest = this.store.keys().next();\n if (!oldest.done) this.store.delete(oldest.value);\n }\n\n this.store.set(key, { value, expiresAt: Date.now() + (ttl ?? this.ttl) });\n }\n\n delete(key: string): boolean {\n return this.store.delete(key);\n }\n\n clear(): void {\n this.store.clear();\n }\n\n prune(): void {\n const now = Date.now();\n for (const [key, entry] of this.store) {\n if (entry.expiresAt <= now) this.store.delete(key);\n }\n }\n}\n","import { DEFAULT_BASE_URL } from './routes.js';\nimport { USER_AGENT } from '../core/version.js';\nimport {\n AbortError,\n createHttpError,\n HttpError,\n NetworkError,\n ParseError,\n parseRetryAfter,\n RateLimitError,\n TimeoutError,\n} from '../core/errors.js';\nimport type {\n CacheOptions,\n FetchLike,\n HttpMethod,\n QueryParams,\n RequestOptions,\n ResolvedRetryOptions,\n RetryOptions,\n} from '../core/types.js';\nimport type { FortniteAPIOptions } from './options.js';\nimport { backoffDelay, buildQuery, linkSignals, mergeQuery, sleep } from '../core/utils.js';\nimport { ApiResponse } from '../core/response.js';\nimport { MemoryCache } from '../core/cache.js';\n\nconst DEFAULT_RETRY: ResolvedRetryOptions = {\n attempts: 3,\n minDelay: 500,\n maxDelay: 8_000,\n statusCodes: [408, 425, 429, 500, 502, 503, 504],\n};\n\nfunction resolveRetry(retry: number | RetryOptions | false | undefined): ResolvedRetryOptions {\n if (retry === false) {\n return { ...DEFAULT_RETRY, attempts: 1 };\n }\n\n if (typeof retry === 'number') {\n return { ...DEFAULT_RETRY, attempts: Math.max(1, retry) };\n }\n\n if (retry && typeof retry === 'object') {\n return {\n attempts: Math.max(1, retry.attempts ?? DEFAULT_RETRY.attempts),\n minDelay: retry.minDelay ?? DEFAULT_RETRY.minDelay,\n maxDelay: retry.maxDelay ?? DEFAULT_RETRY.maxDelay,\n statusCodes: retry.statusCodes ?? DEFAULT_RETRY.statusCodes,\n };\n }\n\n return { ...DEFAULT_RETRY };\n}\n\nfunction resolveCache(cache: boolean | CacheOptions | undefined): {\n enabled: boolean;\n instance: MemoryCache<ApiResponse<unknown>>;\n} {\n if (cache === true) {\n return { enabled: true, instance: new MemoryCache<ApiResponse<unknown>>() };\n }\n\n if (cache && typeof cache === 'object') {\n return {\n enabled: cache.enabled ?? true,\n instance: new MemoryCache<ApiResponse<unknown>>({\n ttl: cache.ttl,\n maxEntries: cache.maxEntries,\n }),\n };\n }\n\n return { enabled: false, instance: new MemoryCache<ApiResponse<unknown>>() };\n}\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, '');\n}\n\nfunction headersToRecord(headers: Headers): Record<string, string> {\n const record: Record<string, string> = {};\n headers.forEach((value, key) => {\n record[key.toLowerCase()] = value;\n });\n return record;\n}\n\nfunction looksLikeJson(text: string, contentType: string | undefined): boolean {\n return contentType?.includes('json') === true || /^\\s*[[{]/.test(text) || /^\\s*\"/.test(text);\n}\n\nfunction parseBody(text: string, contentType: string | undefined, url: string): unknown {\n if (text.length === 0) return null;\n if (!looksLikeJson(text, contentType)) return text;\n\n try {\n return JSON.parse(text) as unknown;\n } catch (cause) {\n throw new ParseError('Failed to parse response body as JSON', { url, raw: text, cause });\n }\n}\n\nfunction parseErrorBody(text: string, contentType: string | undefined): unknown {\n if (text.length === 0) return null;\n if (!looksLikeJson(text, contentType)) return text;\n\n try {\n return JSON.parse(text) as unknown;\n } catch {\n return text;\n }\n}\n\nfunction snapshot<T>(value: T): T {\n if (value === null || typeof value !== 'object') return value;\n\n try {\n return structuredClone(value);\n } catch {\n return value;\n }\n}\n\nexport class RestClient {\n public baseUrl: string;\n public timeout: number;\n public readonly cache: MemoryCache<ApiResponse<unknown>>;\n\n private readonly defaultHeaders: Record<string, string>;\n private readonly defaultQuery: QueryParams;\n private readonly retry: ResolvedRetryOptions;\n private readonly cacheEnabled: boolean;\n private readonly fetchImpl: FetchLike;\n private apiKeyValue: string | null;\n\n constructor(options: FortniteAPIOptions = {}) {\n this.baseUrl = normalizeBaseUrl(options.baseUrl ?? DEFAULT_BASE_URL);\n this.timeout = options.timeout ?? 30_000;\n this.defaultHeaders = {};\n\n for (const [key, value] of Object.entries(options.headers ?? {})) {\n this.defaultHeaders[key.toLowerCase()] = value;\n }\n\n this.defaultQuery = { ...options.query };\n this.retry = resolveRetry(options.retry);\n this.apiKeyValue = options.apiKey ?? null;\n\n const cache = resolveCache(options.cache);\n this.cache = cache.instance;\n this.cacheEnabled = cache.enabled;\n\n const fetchImpl = options.fetch ?? (globalThis.fetch as FetchLike | undefined);\n if (typeof fetchImpl !== 'function') {\n throw new TypeError(\n 'No fetch implementation available. Use Node 18+ or pass a custom `fetch` option.',\n );\n }\n this.fetchImpl = fetchImpl;\n\n this.defaultHeaders['accept'] = this.defaultHeaders['accept'] ?? 'application/json';\n this.defaultHeaders['user-agent'] =\n options.userAgent ?? this.defaultHeaders['user-agent'] ?? USER_AGENT;\n }\n\n get apiKey(): string | null {\n return this.apiKeyValue;\n }\n\n set apiKey(value: string | null) {\n this.apiKeyValue = value;\n }\n\n hasApiKey(): boolean {\n return typeof this.apiKeyValue === 'string' && this.apiKeyValue.length > 0;\n }\n\n setHeader(name: string, value: string): this {\n this.defaultHeaders[name.toLowerCase()] = value;\n return this;\n }\n\n removeHeader(name: string): this {\n delete this.defaultHeaders[name.toLowerCase()];\n return this;\n }\n\n buildUrl(path: string, query?: QueryParams): string {\n const normalizedPath = path.startsWith('/') ? path : `/${path}`;\n return `${this.baseUrl}${normalizedPath}${buildQuery(mergeQuery(this.defaultQuery, query))}`;\n }\n\n get<T>(path: string, options: RequestOptions = {}): Promise<ApiResponse<T>> {\n return this.request<T>('GET', path, options);\n }\n\n post<T>(path: string, options: RequestOptions = {}): Promise<ApiResponse<T>> {\n return this.request<T>('POST', path, options);\n }\n\n async request<T>(\n method: HttpMethod,\n path: string,\n options: RequestOptions = {},\n ): Promise<ApiResponse<T>> {\n const url = this.buildUrl(path, options.query);\n const useCache = method === 'GET' && (options.cache ?? this.cacheEnabled);\n const cacheKey = `${method} ${url}`;\n\n if (useCache) {\n const hit = this.cache.get(cacheKey);\n if (hit) {\n return new ApiResponse<T>({\n status: hit.status,\n headers: { ...hit.headers },\n body: snapshot(hit.body) as T,\n url: hit.url,\n method: hit.method,\n cached: true,\n });\n }\n }\n\n const attempts =\n options.retry === false ? 1 : Math.max(1, options.retry ?? this.retry.attempts);\n\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= attempts; attempt += 1) {\n const link = linkSignals(options.signal, options.timeout ?? this.timeout);\n\n try {\n const response = await this.fetchImpl(url, {\n method,\n headers: this.composeHeaders(options.headers, options.body !== undefined),\n body: options.body === undefined ? undefined : JSON.stringify(options.body),\n signal: link.signal,\n });\n\n const text = await response.text();\n const headers = headersToRecord(response.headers);\n\n if (!response.ok) {\n const error = createHttpError({\n status: response.status,\n method,\n url,\n body: parseErrorBody(text, headers['content-type']),\n headers,\n });\n\n if (attempt < attempts && this.retry.statusCodes.includes(response.status)) {\n lastError = error;\n await sleep(this.retryDelay(attempt, error), options.signal);\n continue;\n }\n\n throw error;\n }\n\n const body = parseBody(text, headers['content-type'], url);\n\n if (useCache) {\n this.cache.set(\n cacheKey,\n new ApiResponse<unknown>({\n status: response.status,\n headers: { ...headers },\n body: snapshot(body),\n url,\n method,\n }),\n );\n }\n\n return new ApiResponse<T>({\n status: response.status,\n headers,\n body: body as T,\n url,\n method,\n });\n } catch (error) {\n if (error instanceof HttpError || error instanceof ParseError) throw error;\n\n const normalized = this.normalizeTransportError(error, url, link.timedOut(), options);\n if (normalized instanceof AbortError) throw normalized;\n\n lastError = normalized;\n if (attempt >= attempts) throw normalized;\n\n try {\n await sleep(\n backoffDelay(attempt, this.retry.minDelay, this.retry.maxDelay),\n options.signal,\n );\n } catch (interrupted) {\n throw this.normalizeTransportError(interrupted, url, link.timedOut(), options);\n }\n } finally {\n link.dispose();\n }\n }\n\n throw lastError instanceof Error\n ? lastError\n : new NetworkError('Request failed after all retry attempts', { url });\n }\n\n private retryDelay(attempt: number, error: unknown): number {\n if (error instanceof RateLimitError && error.retryAfter !== null) {\n return Math.min(this.retry.maxDelay, error.retryAfter);\n }\n\n const header = error instanceof HttpError ? error.headers['retry-after'] : undefined;\n const retryAfter = parseRetryAfter(header);\n if (retryAfter !== null) {\n return Math.min(this.retry.maxDelay, retryAfter);\n }\n\n return backoffDelay(attempt, this.retry.minDelay, this.retry.maxDelay);\n }\n\n private normalizeTransportError(\n error: unknown,\n url: string,\n timedOut: boolean,\n options: RequestOptions,\n ): Error {\n const isAbort =\n error instanceof Error && (error.name === 'AbortError' || error.name === 'TimeoutError');\n\n if (timedOut && isAbort) {\n const timeout = options.timeout ?? this.timeout;\n return new TimeoutError(`Request to ${url} timed out after ${timeout}ms`, { timeout, url });\n }\n\n if (isAbort || options.signal?.aborted === true) {\n return new AbortError(`Request to ${url} was aborted`, { url });\n }\n\n return new NetworkError(\n error instanceof Error ? error.message : `Network request to ${url} failed`,\n { url, cause: error },\n );\n }\n\n private composeHeaders(\n extra: Record<string, string> | undefined,\n hasBody: boolean,\n ): Record<string, string> {\n const headers: Record<string, string> = { ...this.defaultHeaders };\n\n if (this.hasApiKey()) {\n headers['authorization'] = this.apiKeyValue as string;\n }\n\n if (hasBody) {\n headers['content-type'] = headers['content-type'] ?? 'application/json';\n }\n\n for (const [key, value] of Object.entries(extra ?? {})) {\n headers[key.toLowerCase()] = value;\n }\n\n return headers;\n }\n}\n","import { AesEndpoint } from './endpoints/aes.js';\nimport { BannersEndpoint } from './endpoints/banners.js';\nimport type { ClientDefaults } from './endpoints/base.js';\nimport { CosmeticsEndpoint } from './endpoints/cosmetics.js';\nimport { CreatorCodeEndpoint } from './endpoints/creatorCode.js';\nimport { MapEndpoint } from './endpoints/map.js';\nimport { NewsEndpoint } from './endpoints/news.js';\nimport { PlaylistsEndpoint } from './endpoints/playlists.js';\nimport { ShopEndpoint } from './endpoints/shop.js';\nimport { StatsEndpoint } from './endpoints/stats.js';\nimport type { Language } from './enums.js';\nimport { RestClient } from './rest.js';\nimport type { FortniteAPIOptions } from './options.js';\n\nexport class FortniteAPI {\n public readonly rest: RestClient;\n public readonly aes: AesEndpoint;\n public readonly banners: BannersEndpoint;\n public readonly cosmetics: CosmeticsEndpoint;\n public readonly creatorCode: CreatorCodeEndpoint;\n public readonly sac: CreatorCodeEndpoint;\n public readonly map: MapEndpoint;\n public readonly news: NewsEndpoint;\n public readonly playlists: PlaylistsEndpoint;\n public readonly shop: ShopEndpoint;\n public readonly stats: StatsEndpoint;\n\n private readonly defaults: ClientDefaults;\n\n constructor(options: FortniteAPIOptions = {}) {\n this.rest = new RestClient(options);\n this.defaults = {};\n\n if (options.language !== undefined) this.defaults.language = options.language;\n if (options.responseFlags !== undefined) this.defaults.responseFlags = options.responseFlags;\n\n this.aes = new AesEndpoint(this.rest, this.defaults);\n this.banners = new BannersEndpoint(this.rest, this.defaults);\n this.cosmetics = new CosmeticsEndpoint(this.rest, this.defaults);\n this.creatorCode = new CreatorCodeEndpoint(this.rest, this.defaults);\n this.sac = this.creatorCode;\n this.map = new MapEndpoint(this.rest, this.defaults);\n this.news = new NewsEndpoint(this.rest, this.defaults);\n this.playlists = new PlaylistsEndpoint(this.rest, this.defaults);\n this.shop = new ShopEndpoint(this.rest, this.defaults);\n this.stats = new StatsEndpoint(this.rest, this.defaults);\n }\n\n get apiKey(): string | null {\n return this.rest.apiKey;\n }\n\n get language(): Language | undefined {\n return this.defaults.language;\n }\n\n get baseUrl(): string {\n return this.rest.baseUrl;\n }\n\n setApiKey(apiKey: string | null): this {\n this.rest.apiKey = apiKey;\n return this;\n }\n\n setLanguage(language: Language | undefined): this {\n this.defaults.language = language;\n return this;\n }\n\n setResponseFlags(responseFlags: number | string | undefined): this {\n this.defaults.responseFlags = responseFlags;\n return this;\n }\n\n setHeader(name: string, value: string): this {\n this.rest.setHeader(name, value);\n return this;\n }\n\n clearCache(): this {\n this.rest.cache.clear();\n return this;\n }\n}\n","export const DILLY_BASE_URL = 'https://api.fortniteapi.com';\n\nexport const DillyRoutes = {\n aes: () => '/v1/aes',\n aesForPak: (pakId: string) => `/v1/aes/${encodeURIComponent(pakId)}`,\n aesCosmetics: (pakId: string) => `/v1/aes/${encodeURIComponent(pakId)}/cosmetics`,\n backups: () => '/v1/backups',\n hotfixes: () => '/v1/cloudstorage/hotfixes',\n versions: () => '/v1/versions',\n cosmetics: () => '/v1/cosmetics',\n cosmeticsNew: () => '/v1/cosmetics/new',\n cosmeticsBundles: () => '/v1/cosmetics/bundles',\n cosmeticsBundlesFrom: (fromDate: string) =>\n `/v1/cosmetics/bundles/${encodeURIComponent(fromDate)}`,\n export: () => '/v1/export',\n exportIni: () => '/v1/export/ini',\n exportParsed: () => '/v1/export/parsed',\n exportDownload: () => '/v1/export/download',\n exportSeasons: () => '/v1/export/seasons',\n exportCosmetics: () => '/v1/export/cosmetics',\n exportCosmeticsNew: () => '/v1/export/cosmetics/new',\n exportCosmeticsAll: () => '/v1/export/cosmetics/all',\n exportCosmeticsSeries: () => '/v1/export/cosmetics/series',\n exportCosmeticsSets: () => '/v1/export/cosmetics/sets',\n exportOfferPopups: () => '/v1/export/offerpopups',\n exportDisplayAssets: () => '/v1/export/displayassets',\n exportDisplayAssetsParsed: () => '/v1/export/displayassets/parsed',\n exportBundles: () => '/v1/export/bundles',\n exportSearch: () => '/v1/export/search',\n manifests: () => '/v1/manifests',\n manifest: (manifestId: string) => `/v1/manifests/${encodeURIComponent(manifestId)}`,\n mappings: () => '/v1/mappings',\n mappingsLegacy: () => '/v1/mappings/legacy',\n} as const;\n","import { ValidationError } from '../../core/errors.js';\nimport type { QueryParams, RequestOptions } from '../../core/types.js';\nimport type { RestClient } from '../../fortnite/rest.js';\nimport type { DillyBaseOptions, DillyVersionOptions } from '../options.js';\n\nexport class DillyEndpoint {\n protected readonly rest: RestClient;\n\n constructor(rest: RestClient) {\n this.rest = rest;\n }\n\n protected async fetchRaw<T>(\n path: string,\n options: DillyBaseOptions | undefined,\n query: QueryParams = {},\n ): Promise<T> {\n const response = await this.rest.get<T>(path, this.requestOptions(options, query));\n return response.body;\n }\n\n protected requestOptions(\n options: DillyBaseOptions | undefined,\n query: QueryParams,\n ): RequestOptions {\n const requestOptions: RequestOptions = { query };\n\n if (options?.signal !== undefined) requestOptions.signal = options.signal;\n if (options?.timeout !== undefined) requestOptions.timeout = options.timeout;\n if (options?.cache !== undefined) requestOptions.cache = options.cache;\n if (options?.headers !== undefined) requestOptions.headers = options.headers;\n\n return requestOptions;\n }\n\n protected versionQuery(options: DillyVersionOptions | undefined): QueryParams {\n const query: QueryParams = {};\n if (options?.version !== undefined) query['version'] = options.version;\n return query;\n }\n\n protected requireString(value: unknown, parameter: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(\n `\"${parameter}\" is required and must be a non-empty string`,\n parameter,\n );\n }\n return value;\n }\n}\n","import { DillyEndpoint } from './base.js';\nimport { DillyRoutes } from '../routes.js';\nimport type { DillyPakOptions, DillyVersionOptions } from '../options.js';\nimport type { DillyAesCosmeticsResponse, DillyAesResponse } from '../types.js';\n\nexport class DillyAesEndpoint extends DillyEndpoint {\n async keys(options?: DillyVersionOptions): Promise<DillyAesResponse> {\n return this.fetchRaw<DillyAesResponse>(DillyRoutes.aes(), options, this.versionQuery(options));\n }\n\n async forPak(pakId: string, options?: DillyPakOptions): Promise<DillyAesResponse> {\n this.requireString(pakId, 'pakId');\n return this.fetchRaw<DillyAesResponse>(\n DillyRoutes.aesForPak(pakId),\n options,\n this.versionQuery(options),\n );\n }\n\n async cosmetics(pakId: string, options?: DillyPakOptions): Promise<DillyAesCosmeticsResponse> {\n this.requireString(pakId, 'pakId');\n return this.fetchRaw<DillyAesCosmeticsResponse>(\n DillyRoutes.aesCosmetics(pakId),\n options,\n this.versionQuery(options),\n );\n }\n}\n","import { DillyEndpoint } from './base.js';\nimport { DillyRoutes } from '../routes.js';\nimport type { DillyBaseOptions } from '../options.js';\nimport type { DillyBackup } from '../types.js';\n\nexport class DillyBackupEndpoint extends DillyEndpoint {\n async list(options?: DillyBaseOptions): Promise<DillyBackup[]> {\n return this.fetchRaw<DillyBackup[]>(DillyRoutes.backups(), options);\n }\n}\n","import { DillyEndpoint } from './base.js';\nimport { DillyRoutes } from '../routes.js';\nimport type { QueryParams } from '../../core/types.js';\nimport type { DillyHotfixOptions } from '../options.js';\nimport type { DillyHotfixes } from '../types.js';\n\nexport class DillyCloudStorageEndpoint extends DillyEndpoint {\n async hotfixes(options?: DillyHotfixOptions): Promise<DillyHotfixes> {\n const query: QueryParams = {};\n if (options?.lang !== undefined) query['lang'] = options.lang;\n return this.fetchRaw<DillyHotfixes>(DillyRoutes.hotfixes(), options, query);\n }\n}\n","import { DillyEndpoint } from './base.js';\nimport { DillyRoutes } from '../routes.js';\nimport type { DillyBaseOptions } from '../options.js';\nimport type { DillyVersion } from '../types.js';\n\nexport class DillyCommonEndpoint extends DillyEndpoint {\n async versions(options?: DillyBaseOptions): Promise<DillyVersion[]> {\n return this.fetchRaw<DillyVersion[]>(DillyRoutes.versions(), options);\n }\n}\n","import { DillyEndpoint } from './base.js';\nimport { DillyRoutes } from '../routes.js';\nimport type { QueryParams } from '../../core/types.js';\nimport type { DillyBaseOptions, DillyCosmeticsOptions } from '../options.js';\nimport type { DillyBundlesResponse, DillyCosmeticsResponse } from '../types.js';\n\nexport class DillyCosmeticEndpoint extends DillyEndpoint {\n async list(options?: DillyCosmeticsOptions): Promise<DillyCosmeticsResponse> {\n return this.fetchRaw<DillyCosmeticsResponse>(\n DillyRoutes.cosmetics(),\n options,\n this.cosmeticQuery(options),\n );\n }\n\n async listNew(options?: DillyCosmeticsOptions): Promise<DillyCosmeticsResponse> {\n return this.fetchRaw<DillyCosmeticsResponse>(\n DillyRoutes.cosmeticsNew(),\n options,\n this.cosmeticQuery(options),\n );\n }\n\n async bundles(options?: DillyBaseOptions): Promise<DillyBundlesResponse> {\n return this.fetchRaw<DillyBundlesResponse>(DillyRoutes.cosmeticsBundles(), options);\n }\n\n async bundlesFrom(fromDate: string, options?: DillyBaseOptions): Promise<DillyBundlesResponse> {\n this.requireString(fromDate, 'fromDate');\n return this.fetchRaw<DillyBundlesResponse>(\n DillyRoutes.cosmeticsBundlesFrom(fromDate),\n options,\n );\n }\n\n private cosmeticQuery(options: DillyCosmeticsOptions | undefined): QueryParams {\n const query: QueryParams = {};\n if (options?.type !== undefined) query['Type'] = options.type;\n return query;\n }\n}\n","import { DillyEndpoint } from './base.js';\nimport { DillyRoutes } from '../routes.js';\nimport type { QueryParams } from '../../core/types.js';\nimport type {\n DillyExportOptions,\n DillyExportPathOptions,\n DillySearchOptions,\n DillyVersionOptions,\n} from '../options.js';\nimport type {\n DillyExport,\n DillyExportBundlesResponse,\n DillyExportCosmeticsResponse,\n DillyExportDisplayAssetsResponse,\n DillyExportOfferPopupsResponse,\n DillyExportSearchResponse,\n DillyExportSeasonsResponse,\n DillyExportSeriesResponse,\n DillyExportSetsResponse,\n} from '../types.js';\n\nexport class DillyExportEndpoint extends DillyEndpoint {\n async get<T = unknown>(options: DillyExportOptions): Promise<DillyExport<T>> {\n this.requireString(options?.path, 'path');\n return this.fetchRaw<DillyExport<T>>(DillyRoutes.export(), options, this.exportQuery(options));\n }\n\n async ini<T = unknown>(options: DillyExportPathOptions): Promise<DillyExport<T>> {\n this.requireString(options?.path, 'path');\n return this.fetchRaw<DillyExport<T>>(\n DillyRoutes.exportIni(),\n options,\n this.pathQuery(options),\n );\n }\n\n async parsed<T = unknown>(options: DillyExportPathOptions): Promise<DillyExport<T>> {\n this.requireString(options?.path, 'path');\n return this.fetchRaw<DillyExport<T>>(\n DillyRoutes.exportParsed(),\n options,\n this.pathQuery(options),\n );\n }\n\n async download<T = unknown>(options: DillyExportPathOptions): Promise<DillyExport<T>> {\n this.requireString(options?.path, 'path');\n return this.fetchRaw<DillyExport<T>>(\n DillyRoutes.exportDownload(),\n options,\n this.pathQuery(options),\n );\n }\n\n async seasons(options?: DillyVersionOptions): Promise<DillyExportSeasonsResponse> {\n return this.fetchRaw<DillyExportSeasonsResponse>(\n DillyRoutes.exportSeasons(),\n options,\n this.versionQuery(options),\n );\n }\n\n async cosmetics(options?: DillyVersionOptions): Promise<DillyExportCosmeticsResponse> {\n return this.fetchRaw<DillyExportCosmeticsResponse>(\n DillyRoutes.exportCosmetics(),\n options,\n this.versionQuery(options),\n );\n }\n\n async cosmeticsNew(options?: DillyVersionOptions): Promise<DillyExportCosmeticsResponse> {\n return this.fetchRaw<DillyExportCosmeticsResponse>(\n DillyRoutes.exportCosmeticsNew(),\n options,\n this.versionQuery(options),\n );\n }\n\n async cosmeticsAll(options?: DillyVersionOptions): Promise<DillyExportCosmeticsResponse> {\n return this.fetchRaw<DillyExportCosmeticsResponse>(\n DillyRoutes.exportCosmeticsAll(),\n options,\n this.versionQuery(options),\n );\n }\n\n async cosmeticsSeries(options?: DillyVersionOptions): Promise<DillyExportSeriesResponse> {\n return this.fetchRaw<DillyExportSeriesResponse>(\n DillyRoutes.exportCosmeticsSeries(),\n options,\n this.versionQuery(options),\n );\n }\n\n async cosmeticsSets(options?: DillyVersionOptions): Promise<DillyExportSetsResponse> {\n return this.fetchRaw<DillyExportSetsResponse>(\n DillyRoutes.exportCosmeticsSets(),\n options,\n this.versionQuery(options),\n );\n }\n\n async offerPopups(options?: DillyVersionOptions): Promise<DillyExportOfferPopupsResponse> {\n return this.fetchRaw<DillyExportOfferPopupsResponse>(\n DillyRoutes.exportOfferPopups(),\n options,\n this.versionQuery(options),\n );\n }\n\n async displayAssets(options?: DillyVersionOptions): Promise<DillyExportDisplayAssetsResponse> {\n return this.fetchRaw<DillyExportDisplayAssetsResponse>(\n DillyRoutes.exportDisplayAssets(),\n options,\n this.versionQuery(options),\n );\n }\n\n async displayAssetsParsed<T = unknown>(\n options?: DillyVersionOptions,\n ): Promise<DillyExport<T>> {\n return this.fetchRaw<DillyExport<T>>(\n DillyRoutes.exportDisplayAssetsParsed(),\n options,\n this.versionQuery(options),\n );\n }\n\n async bundles(options?: DillyVersionOptions): Promise<DillyExportBundlesResponse> {\n return this.fetchRaw<DillyExportBundlesResponse>(\n DillyRoutes.exportBundles(),\n options,\n this.versionQuery(options),\n );\n }\n\n async search(options: DillySearchOptions): Promise<DillyExportSearchResponse> {\n this.requireString(options?.query, 'query');\n const query: QueryParams = { query: options.query };\n if (options.new !== undefined) query['new'] = options.new;\n return this.fetchRaw<DillyExportSearchResponse>(DillyRoutes.exportSearch(), options, query);\n }\n\n private pathQuery(options: DillyExportPathOptions): QueryParams {\n const query = this.versionQuery(options);\n query['path'] = options.path;\n return query;\n }\n\n private exportQuery(options: DillyExportOptions): QueryParams {\n const query = this.pathQuery(options);\n if (options.raw !== undefined) query['raw'] = options.raw;\n return query;\n }\n}\n","import { DillyEndpoint } from './base.js';\nimport { DillyRoutes } from '../routes.js';\nimport type { DillyBaseOptions } from '../options.js';\nimport type { DillyManifest } from '../types.js';\n\nexport class DillyManifestEndpoint extends DillyEndpoint {\n async list(options?: DillyBaseOptions): Promise<DillyManifest[]> {\n return this.fetchRaw<DillyManifest[]>(DillyRoutes.manifests(), options);\n }\n\n async get(manifestId: string, options?: DillyBaseOptions): Promise<DillyManifest> {\n this.requireString(manifestId, 'manifestId');\n return this.fetchRaw<DillyManifest>(DillyRoutes.manifest(manifestId), options);\n }\n}\n","import { DillyEndpoint } from './base.js';\nimport { DillyRoutes } from '../routes.js';\nimport type { DillyBaseOptions } from '../options.js';\nimport type { DillyMapping } from '../types.js';\n\nexport class DillyMappingEndpoint extends DillyEndpoint {\n async list(options?: DillyBaseOptions): Promise<DillyMapping[]> {\n return this.fetchRaw<DillyMapping[]>(DillyRoutes.mappings(), options);\n }\n\n async legacy(options?: DillyBaseOptions): Promise<DillyMapping[]> {\n return this.fetchRaw<DillyMapping[]>(DillyRoutes.mappingsLegacy(), options);\n }\n}\n","import { RestClient } from '../fortnite/rest.js';\nimport { DILLY_BASE_URL } from './routes.js';\nimport type { DillyAPIOptions } from './options.js';\nimport { DillyAesEndpoint } from './endpoints/aes.js';\nimport { DillyBackupEndpoint } from './endpoints/backup.js';\nimport { DillyCloudStorageEndpoint } from './endpoints/cloudStorage.js';\nimport { DillyCommonEndpoint } from './endpoints/common.js';\nimport { DillyCosmeticEndpoint } from './endpoints/cosmetic.js';\nimport { DillyExportEndpoint } from './endpoints/export.js';\nimport { DillyManifestEndpoint } from './endpoints/manifest.js';\nimport { DillyMappingEndpoint } from './endpoints/mapping.js';\n\nexport class DillyAPI {\n public readonly rest: RestClient;\n\n public readonly aes: DillyAesEndpoint;\n public readonly backups: DillyBackupEndpoint;\n public readonly cloudStorage: DillyCloudStorageEndpoint;\n public readonly common: DillyCommonEndpoint;\n public readonly cosmetics: DillyCosmeticEndpoint;\n public readonly exports: DillyExportEndpoint;\n public readonly manifests: DillyManifestEndpoint;\n public readonly mappings: DillyMappingEndpoint;\n\n constructor(options: DillyAPIOptions = {}) {\n this.rest = new RestClient({\n baseUrl: options.baseUrl ?? DILLY_BASE_URL,\n timeout: options.timeout,\n headers: options.headers,\n query: options.query,\n retry: options.retry,\n cache: options.cache,\n fetch: options.fetch,\n userAgent: options.userAgent,\n });\n\n this.aes = new DillyAesEndpoint(this.rest);\n this.backups = new DillyBackupEndpoint(this.rest);\n this.cloudStorage = new DillyCloudStorageEndpoint(this.rest);\n this.common = new DillyCommonEndpoint(this.rest);\n this.cosmetics = new DillyCosmeticEndpoint(this.rest);\n this.exports = new DillyExportEndpoint(this.rest);\n this.manifests = new DillyManifestEndpoint(this.rest);\n this.mappings = new DillyMappingEndpoint(this.rest);\n }\n\n versions(...args: Parameters<DillyCommonEndpoint['versions']>) {\n return this.common.versions(...args);\n }\n}\n","export const DillyVersionState = {\n Ready: 'READY',\n Pending: 'PENDING',\n Failed: 'FAILED',\n} as const;\n\nexport type DillyVersionState = (typeof DillyVersionState)[keyof typeof DillyVersionState];\n\nexport const DILLY_VERSION_STATES = Object.values(DillyVersionState) as DillyVersionState[];\n\nexport function isDillyVersionState(value: unknown): value is DillyVersionState {\n return typeof value === 'string' && (DILLY_VERSION_STATES as string[]).includes(value);\n}\n\nexport const DillyVersionTag = {\n Latest: 'latest',\n Stable: 'stable',\n} as const;\n\nexport type DillyVersionTag = (typeof DillyVersionTag)[keyof typeof DillyVersionTag];\n\nexport const DILLY_VERSION_TAGS = Object.values(DillyVersionTag) as DillyVersionTag[];\n\nexport function isDillyVersionTag(value: unknown): value is DillyVersionTag {\n return typeof value === 'string' && (DILLY_VERSION_TAGS as string[]).includes(value);\n}\n","export const FNCC_BASE_URL = 'https://prod.fn-api.cc';\n\nexport const FnccRoutes = {\n status: () => '/v1/status',\n statusDownload: () => '/v1/status/download',\n statusMaintenance: () => '/v1/status/maintenance',\n statusParser: () => '/v1/status/parser',\n\n aes: () => '/v1/aes',\n mappings: () => '/v1/mappings',\n version: () => '/v1/version',\n\n cosmetics: () => '/v1/cosmetics',\n cosmeticsCategories: () => '/v1/cosmetics/categories',\n cosmeticsCategory: (category: string) => `/v1/cosmetics/${encodeURIComponent(category)}`,\n cosmeticsCategorySearch: (category: string) =>\n `/v1/cosmetics/${encodeURIComponent(category)}/search`,\n cosmetic: (category: string, id: string) =>\n `/v1/cosmetics/${encodeURIComponent(category)}/${encodeURIComponent(id)}`,\n\n banners: () => '/v1/banners',\n bannerColors: () => '/v1/banners/colors',\n\n sprites: () => '/v1/sprites',\n sprite: (id: string) => `/v1/sprites/${encodeURIComponent(id)}`,\n\n search: () => '/v1/search',\n searchContent: () => '/v1/search/content',\n\n assets: () => '/v1/assets',\n assetsSearch: () => '/v1/assets/search',\n assetsExports: () => '/v1/assets/exports',\n assetsJson: () => '/v1/assets/json',\n assetsRaw: () => '/v1/assets/raw',\n assetsPackage: () => '/v1/assets/package',\n assetsArchives: () => '/v1/assets/archives',\n\n images: () => '/v1/images',\n\n anticheat: () => '/v1/anticheat',\n anticheatFile: (name: string) => `/v1/anticheat/files/${encodeURIComponent(name)}`,\n\n cloudstorage: () => '/v1/cloudstorage',\n cloudstorageFile: (filename: string) => `/v1/cloudstorage/${encodeURIComponent(filename)}`,\n\n discovery: () => '/v1/discovery',\n discoverySurface: (surface: string) => `/v1/discovery/${encodeURIComponent(surface)}`,\n\n fish: () => '/v1/fish',\n fishById: (id: string) => `/v1/fish/${encodeURIComponent(id)}`,\n\n itemshop: () => '/v1/itemshop',\n itemshopSections: () => '/v1/itemshop/sections',\n\n lightswitch: () => '/v1/lightswitch',\n lightswitchService: (service: string) => `/v1/lightswitch/${encodeURIComponent(service)}`,\n\n lookup: () => '/v1/lookup',\n\n mnemonic: () => '/v1/mnemonic',\n mnemonicByKey: (mnemonic: string) => `/v1/mnemonic/${encodeURIComponent(mnemonic)}`,\n\n news: () => '/v1/news',\n newsFeed: (feed: string) => `/v1/news/${encodeURIComponent(feed)}`,\n\n playlists: () => '/v1/playlists',\n playlist: (id: string) => `/v1/playlists/${encodeURIComponent(id)}`,\n\n weapons: () => '/v1/weapons',\n weaponsCategories: () => '/v1/weapons/categories',\n weapon: (id: string) => `/v1/weapons/${encodeURIComponent(id)}`,\n} as const;\n","import { ValidationError } from '../../core/errors.js';\nimport type { QueryParams, RequestOptions } from '../../core/types.js';\nimport type { RestClient } from '../../fortnite/rest.js';\nimport type { FnccBaseOptions } from '../options.js';\n\nexport class FnccEndpoint {\n protected readonly rest: RestClient;\n\n constructor(rest: RestClient) {\n this.rest = rest;\n }\n\n protected async fetchRaw<T>(\n path: string,\n options: FnccBaseOptions | undefined,\n query: QueryParams = {},\n ): Promise<T> {\n const response = await this.rest.get<T>(path, this.requestOptions(options, query));\n return response.body;\n }\n\n protected async fetchData<T>(\n path: string,\n options: FnccBaseOptions | undefined,\n query: QueryParams = {},\n ): Promise<T> {\n const body = await this.fetchRaw<unknown>(path, options, query);\n if (\n body !== null &&\n typeof body === 'object' &&\n !Array.isArray(body) &&\n 'status' in body &&\n 'data' in body\n ) {\n return (body as { data: T }).data;\n }\n return body as T;\n }\n\n protected buildUrl(path: string, query: QueryParams = {}): string {\n return this.rest.buildUrl(path, query);\n }\n\n protected requestOptions(options: FnccBaseOptions | undefined, query: QueryParams): RequestOptions {\n const requestOptions: RequestOptions = { query };\n\n if (options?.signal !== undefined) requestOptions.signal = options.signal;\n if (options?.timeout !== undefined) requestOptions.timeout = options.timeout;\n if (options?.cache !== undefined) requestOptions.cache = options.cache;\n if (options?.headers !== undefined) requestOptions.headers = options.headers;\n\n return requestOptions;\n }\n\n protected requireString(value: unknown, parameter: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(\n `\"${parameter}\" is required and must be a non-empty string`,\n parameter,\n );\n }\n return value;\n }\n}\n","import { FnccEndpoint } from './base.js';\nimport { FnccRoutes } from '../routes.js';\nimport type { FnccBaseOptions } from '../options.js';\nimport type { FnccDownload, FnccMaintenance, FnccParser, FnccStatus } from '../types.js';\n\nexport class FnccStatusEndpoint extends FnccEndpoint {\n async overview(options?: FnccBaseOptions): Promise<FnccStatus> {\n return this.fetchRaw<FnccStatus>(FnccRoutes.status(), options);\n }\n\n async download(options?: FnccBaseOptions): Promise<FnccDownload> {\n return this.fetchRaw<FnccDownload>(FnccRoutes.statusDownload(), options);\n }\n\n async maintenance(options?: FnccBaseOptions): Promise<FnccMaintenance> {\n return this.fetchRaw<FnccMaintenance>(FnccRoutes.statusMaintenance(), options);\n }\n\n async parser(options?: FnccBaseOptions): Promise<FnccParser> {\n return this.fetchRaw<FnccParser>(FnccRoutes.statusParser(), options);\n }\n}\n","import { FnccEndpoint } from './base.js';\nimport { FnccRoutes } from '../routes.js';\nimport type { FnccBaseOptions } from '../options.js';\nimport type { FnccAes, FnccMappings, FnccVersion } from '../types.js';\n\nexport class FnccGameEndpoint extends FnccEndpoint {\n async version(options?: FnccBaseOptions): Promise<FnccVersion> {\n return this.fetchRaw<FnccVersion>(FnccRoutes.version(), options);\n }\n\n async aes(options?: FnccBaseOptions): Promise<FnccAes> {\n return this.fetchRaw<FnccAes>(FnccRoutes.aes(), options);\n }\n\n async mappings(options?: FnccBaseOptions): Promise<FnccMappings> {\n return this.fetchRaw<FnccMappings>(FnccRoutes.mappings(), options);\n }\n}\n","import { FnccEndpoint } from './base.js';\nimport { FnccRoutes } from '../routes.js';\nimport type { QueryParams } from '../../core/types.js';\nimport type { FnccBaseOptions, FnccCosmeticSearchOptions } from '../options.js';\nimport type {\n FnccCosmetic,\n FnccCosmeticCategories,\n FnccCosmeticSearchResponse,\n FnccCosmeticsByCategory,\n} from '../types.js';\n\nexport class FnccCosmeticsEndpoint extends FnccEndpoint {\n async all(options?: FnccBaseOptions): Promise<FnccCosmeticsByCategory> {\n return this.fetchData<FnccCosmeticsByCategory>(FnccRoutes.cosmetics(), options);\n }\n\n async categories(options?: FnccBaseOptions): Promise<FnccCosmeticCategories> {\n return this.fetchData<FnccCosmeticCategories>(FnccRoutes.cosmeticsCategories(), options);\n }\n\n async category(category: string, options?: FnccBaseOptions): Promise<FnccCosmetic[]> {\n this.requireString(category, 'category');\n return this.fetchData<FnccCosmetic[]>(FnccRoutes.cosmeticsCategory(category), options);\n }\n\n async get(category: string, id: string, options?: FnccBaseOptions): Promise<FnccCosmetic> {\n this.requireString(category, 'category');\n this.requireString(id, 'id');\n return this.fetchData<FnccCosmetic>(FnccRoutes.cosmetic(category, id), options);\n }\n\n async search(\n category: string,\n options?: FnccCosmeticSearchOptions,\n ): Promise<FnccCosmeticSearchResponse> {\n this.requireString(category, 'category');\n return this.fetchRaw<FnccCosmeticSearchResponse>(\n FnccRoutes.cosmeticsCategorySearch(category),\n options,\n this.searchQuery(options),\n );\n }\n\n private searchQuery(options: FnccCosmeticSearchOptions | undefined): QueryParams {\n const query: QueryParams = {};\n if (options?.name !== undefined) query['name'] = options.name;\n if (options?.description !== undefined) query['description'] = options.description;\n if (options?.id !== undefined) query['id'] = options.id;\n if (options?.artist !== undefined) query['artist'] = options.artist;\n if (options?.album !== undefined) query['album'] = options.album;\n if (options?.type !== undefined) query['type'] = options.type;\n if (options?.rarity !== undefined) query['rarity'] = options.rarity;\n if (options?.series !== undefined) query['series'] = options.series;\n if (options?.set !== undefined) query['set'] = options.set;\n if (options?.introduction !== undefined) query['introduction'] = options.introduction;\n if (options?.matchMethod !== undefined) query['matchMethod'] = options.matchMethod;\n if (options?.limit !== undefined) query['limit'] = options.limit;\n if (options?.offset !== undefined) query['offset'] = options.offset;\n return query;\n }\n}\n","import { FnccEndpoint } from './base.js';\nimport { FnccRoutes } from '../routes.js';\nimport type { FnccBaseOptions } from '../options.js';\nimport type { FnccBanner, FnccBannerColor } from '../types.js';\n\nexport class FnccBannersEndpoint extends FnccEndpoint {\n async list(options?: FnccBaseOptions): Promise<FnccBanner[]> {\n return this.fetchData<FnccBanner[]>(FnccRoutes.banners(), options);\n }\n\n async colors(options?: FnccBaseOptions): Promise<FnccBannerColor[]> {\n return this.fetchData<FnccBannerColor[]>(FnccRoutes.bannerColors(), options);\n }\n}\n","import { FnccEndpoint } from './base.js';\nimport { FnccRoutes } from '../routes.js';\nimport type { QueryParams } from '../../core/types.js';\nimport type { FnccSpritesOptions, FnccBaseOptions } from '../options.js';\nimport type { FnccSprite, FnccSpritesResponse } from '../types.js';\n\nexport class FnccSpritesEndpoint extends FnccEndpoint {\n async list(options?: FnccSpritesOptions): Promise<FnccSpritesResponse> {\n return this.fetchRaw<FnccSpritesResponse>(\n FnccRoutes.sprites(),\n options,\n this.listQuery(options),\n );\n }\n\n async get(id: string, options?: FnccBaseOptions): Promise<FnccSprite> {\n this.requireString(id, 'id');\n return this.fetchData<FnccSprite>(FnccRoutes.sprite(id), options);\n }\n\n private listQuery(options: FnccSpritesOptions | undefined): QueryParams {\n const query: QueryParams = {};\n if (options?.enabled !== undefined) query['enabled'] = options.enabled;\n if (options?.library !== undefined) query['library'] = options.library;\n return query;\n }\n}\n","import { FnccEndpoint } from './base.js';\nimport { FnccRoutes } from '../routes.js';\nimport type { QueryParams } from '../../core/types.js';\nimport type { FnccContentSearchOptions, FnccPageOptions } from '../options.js';\nimport type { FnccContentSearchResult, FnccPage, FnccSearchHit } from '../types.js';\n\nexport class FnccSearchEndpoint extends FnccEndpoint {\n async paths(query: string, options?: FnccPageOptions): Promise<FnccPage<FnccSearchHit>> {\n this.requireString(query, 'query');\n return this.fetchRaw<FnccPage<FnccSearchHit>>(\n FnccRoutes.search(),\n options,\n this.pageQuery(query, options),\n );\n }\n\n async content(\n query: string,\n options?: FnccContentSearchOptions,\n ): Promise<FnccContentSearchResult> {\n this.requireString(query, 'query');\n return this.fetchRaw<FnccContentSearchResult>(\n FnccRoutes.searchContent(),\n options,\n this.contentQuery(query, options),\n );\n }\n\n private pageQuery(query: string, options: FnccPageOptions | undefined): QueryParams {\n const params: QueryParams = { q: query };\n if (options?.offset !== undefined) params['offset'] = options.offset;\n if (options?.limit !== undefined) params['limit'] = options.limit;\n return params;\n }\n\n private contentQuery(query: string, options: FnccContentSearchOptions | undefined): QueryParams {\n const params: QueryParams = { q: query };\n if (options?.prefix !== undefined) params['prefix'] = options.prefix;\n if (options?.extension !== undefined) params['extension'] = options.extension;\n if (options?.limit !== undefined) params['limit'] = options.limit;\n if (options?.maxFiles !== undefined) params['maxFiles'] = options.maxFiles;\n if (options?.timeBudgetMs !== undefined) params['timeBudgetMs'] = options.timeBudgetMs;\n if (options?.ignoreCase !== undefined) params['ignoreCase'] = options.ignoreCase;\n return params;\n }\n}\n","import { FnccEndpoint } from './base.js';\nimport { FnccRoutes } from '../routes.js';\nimport type { QueryParams } from '../../core/types.js';\nimport type { FnccAssetsListOptions, FnccBaseOptions, FnccPageOptions } from '../options.js';\nimport type {\n FnccArchive,\n FnccAssetEntry,\n FnccAssetExport,\n FnccAssetPackage,\n FnccPage,\n} from '../types.js';\n\nexport class FnccAssetsEndpoint extends FnccEndpoint {\n async list(options?: FnccAssetsListOptions): Promise<FnccPage<FnccAssetEntry>> {\n return this.fetchRaw<FnccPage<FnccAssetEntry>>(\n FnccRoutes.assets(),\n options,\n this.listQuery(options),\n );\n }\n\n async search(\n query: string,\n options?: FnccPageOptions,\n ): Promise<FnccPage<FnccAssetEntry>> {\n this.requireString(query, 'query');\n const params: QueryParams = { q: query };\n if (options?.offset !== undefined) params['offset'] = options.offset;\n if (options?.limit !== undefined) params['limit'] = options.limit;\n return this.fetchRaw<FnccPage<FnccAssetEntry>>(FnccRoutes.assetsSearch(), options, params);\n }\n\n async exports(path: string, options?: FnccBaseOptions): Promise<FnccAssetExport[]> {\n this.requireString(path, 'path');\n return this.fetchRaw<FnccAssetExport[]>(FnccRoutes.assetsExports(), options, { path });\n }\n\n async json<T = unknown>(path: string, name?: string, options?: FnccBaseOptions): Promise<T> {\n this.requireString(path, 'path');\n const params: QueryParams = { path };\n if (name !== undefined) params['name'] = this.requireString(name, 'name');\n return this.fetchRaw<T>(FnccRoutes.assetsJson(), options, params);\n }\n\n async package(path: string, options?: FnccBaseOptions): Promise<FnccAssetPackage> {\n this.requireString(path, 'path');\n return this.fetchRaw<FnccAssetPackage>(FnccRoutes.assetsPackage(), options, { path });\n }\n\n async archives(options?: FnccBaseOptions): Promise<FnccArchive[]> {\n return this.fetchRaw<FnccArchive[]>(FnccRoutes.assetsArchives(), options);\n }\n\n rawUrl(path: string): string {\n this.requireString(path, 'path');\n return this.buildUrl(FnccRoutes.assetsRaw(), { path });\n }\n\n private listQuery(options: FnccAssetsListOptions | undefined): QueryParams {\n const query: QueryParams = {};\n if (options?.prefix !== undefined) query['prefix'] = options.prefix;\n if (options?.extension !== undefined) query['extension'] = options.extension;\n if (options?.offset !== undefined) query['offset'] = options.offset;\n if (options?.limit !== undefined) query['limit'] = options.limit;\n return query;\n }\n}\n","import { FnccEndpoint } from './base.js';\nimport { FnccRoutes } from '../routes.js';\nimport type { QueryParams } from '../../core/types.js';\nimport type { FnccImageOptions } from '../options.js';\n\nexport class FnccImagesEndpoint extends FnccEndpoint {\n url(options: FnccImageOptions): string {\n this.requireString(options?.path, 'path');\n const query: QueryParams = { path: options.path };\n if (options.name !== undefined) query['name'] = options.name;\n if (options.format !== undefined) query['format'] = options.format;\n if (options.maxSize !== undefined) query['maxSize'] = options.maxSize;\n return this.buildUrl(FnccRoutes.images(), query);\n }\n}\n","import { FnccEndpoint } from './base.js';\nimport { FnccRoutes } from '../routes.js';\nimport type { FnccBaseOptions } from '../options.js';\nimport type { FnccAntiCheat, FnccAntiCheatFileContent } from '../types.js';\n\nexport class FnccAntiCheatEndpoint extends FnccEndpoint {\n async info(options?: FnccBaseOptions): Promise<FnccAntiCheat> {\n return this.fetchData<FnccAntiCheat>(FnccRoutes.anticheat(), options);\n }\n\n async file(name: string, options?: FnccBaseOptions): Promise<FnccAntiCheatFileContent> {\n this.requireString(name, 'name');\n return this.fetchData<FnccAntiCheatFileContent>(FnccRoutes.anticheatFile(name), options);\n }\n}\n","import { FnccEndpoint } from './base.js';\nimport { FnccRoutes } from '../routes.js';\nimport type { FnccBaseOptions } from '../options.js';\nimport type { FnccCloudStorageFile } from '../types.js';\n\nexport class FnccCloudStorageEndpoint extends FnccEndpoint {\n async list(options?: FnccBaseOptions): Promise<FnccCloudStorageFile[]> {\n return this.fetchData<FnccCloudStorageFile[]>(FnccRoutes.cloudstorage(), options);\n }\n\n async file(filename: string, options?: FnccBaseOptions): Promise<string> {\n this.requireString(filename, 'filename');\n return this.fetchRaw<string>(FnccRoutes.cloudstorageFile(filename), options);\n }\n}\n","import { FnccEndpoint } from './base.js';\nimport { FnccRoutes } from '../routes.js';\nimport type { FnccBaseOptions } from '../options.js';\nimport type { FnccDiscoveryResponse, FnccDiscoverySurface } from '../types.js';\n\nexport class FnccDiscoveryEndpoint extends FnccEndpoint {\n async all(options?: FnccBaseOptions): Promise<FnccDiscoveryResponse> {\n return this.fetchRaw<FnccDiscoveryResponse>(FnccRoutes.discovery(), options);\n }\n\n async surface(surface: string, options?: FnccBaseOptions): Promise<FnccDiscoverySurface> {\n this.requireString(surface, 'surface');\n return this.fetchData<FnccDiscoverySurface>(FnccRoutes.discoverySurface(surface), options);\n }\n}\n","import { FnccEndpoint } from './base.js';\nimport { FnccRoutes } from '../routes.js';\nimport type { QueryParams } from '../../core/types.js';\nimport type { FnccBaseOptions, FnccFishOptions } from '../options.js';\nimport type { FnccFish } from '../types.js';\n\nexport class FnccFishEndpoint extends FnccEndpoint {\n async list(options?: FnccFishOptions): Promise<FnccFish[]> {\n return this.fetchData<FnccFish[]>(FnccRoutes.fish(), options, this.query(options));\n }\n\n async get(id: string, options?: FnccBaseOptions): Promise<FnccFish> {\n this.requireString(id, 'id');\n return this.fetchData<FnccFish>(FnccRoutes.fishById(id), options);\n }\n\n private query(options: FnccFishOptions | undefined): QueryParams {\n const query: QueryParams = {};\n if (options?.search !== undefined) query['search'] = options.search;\n if (options?.rarity !== undefined) query['rarity'] = options.rarity;\n if (options?.enabled !== undefined) query['enabled'] = options.enabled;\n if (options?.needsProFishingRod !== undefined) {\n query['needsProFishingRod'] = options.needsProFishingRod;\n }\n return query;\n }\n}\n","import { FnccEndpoint } from './base.js';\nimport { FnccRoutes } from '../routes.js';\nimport type { QueryParams } from '../../core/types.js';\nimport type { FnccBaseOptions, FnccItemShopOptions } from '../options.js';\nimport type { FnccItemShop, FnccItemShopSections } from '../types.js';\n\nexport class FnccItemShopEndpoint extends FnccEndpoint {\n async current(options?: FnccItemShopOptions): Promise<FnccItemShop> {\n const query: QueryParams = {};\n if (options?.section !== undefined) query['section'] = options.section;\n return this.fetchRaw<FnccItemShop>(FnccRoutes.itemshop(), options, query);\n }\n\n async sections(options?: FnccBaseOptions): Promise<FnccItemShopSections> {\n return this.fetchRaw<FnccItemShopSections>(FnccRoutes.itemshopSections(), options);\n }\n}\n","import { FnccEndpoint } from './base.js';\nimport { FnccRoutes } from '../routes.js';\nimport type { FnccBaseOptions } from '../options.js';\nimport type { FnccLightswitchResponse, FnccLightswitchService } from '../types.js';\n\nexport class FnccLightswitchEndpoint extends FnccEndpoint {\n async all(options?: FnccBaseOptions): Promise<FnccLightswitchResponse> {\n return this.fetchRaw<FnccLightswitchResponse>(FnccRoutes.lightswitch(), options);\n }\n\n async service(service: string, options?: FnccBaseOptions): Promise<FnccLightswitchService> {\n this.requireString(service, 'service');\n return this.fetchData<FnccLightswitchService>(FnccRoutes.lightswitchService(service), options);\n }\n}\n","import { FnccEndpoint } from './base.js';\nimport { FnccRoutes } from '../routes.js';\nimport type { QueryParams } from '../../core/types.js';\nimport type { FnccLookupOptions } from '../options.js';\nimport type { FnccLookupResponse } from '../types.js';\n\nexport class FnccLookupEndpoint extends FnccEndpoint {\n async find(options?: FnccLookupOptions): Promise<FnccLookupResponse> {\n return this.fetchRaw<FnccLookupResponse>(FnccRoutes.lookup(), options, this.query(options));\n }\n\n async byName(name: string, options?: FnccLookupOptions): Promise<FnccLookupResponse> {\n this.requireString(name, 'name');\n return this.find({ ...options, name });\n }\n\n async byAccountId(accountId: string, options?: FnccLookupOptions): Promise<FnccLookupResponse> {\n this.requireString(accountId, 'accountId');\n return this.find({ ...options, accountId });\n }\n\n private query(options: FnccLookupOptions | undefined): QueryParams {\n const query: QueryParams = {};\n if (options?.accountId !== undefined) query['accountId'] = options.accountId;\n if (options?.name !== undefined) query['name'] = options.name;\n if (options?.platform !== undefined) query['platform'] = options.platform;\n if (options?.search !== undefined) query['search'] = options.search;\n return query;\n }\n}\n","import { FnccEndpoint } from './base.js';\nimport { FnccRoutes } from '../routes.js';\nimport type { QueryParams } from '../../core/types.js';\nimport type { FnccMnemonicListOptions, FnccMnemonicOptions } from '../options.js';\nimport type { FnccMnemonic } from '../types.js';\n\nexport class FnccMnemonicEndpoint extends FnccEndpoint {\n async list(options?: FnccMnemonicListOptions): Promise<FnccMnemonic[]> {\n const query: QueryParams = {};\n if (options?.type !== undefined) query['type'] = options.type;\n return this.fetchData<FnccMnemonic[]>(FnccRoutes.mnemonic(), options, query);\n }\n\n async get(mnemonic: string, options?: FnccMnemonicOptions): Promise<FnccMnemonic> {\n this.requireString(mnemonic, 'mnemonic');\n const query: QueryParams = {};\n if (options?.related !== undefined) query['related'] = options.related;\n return this.fetchData<FnccMnemonic>(FnccRoutes.mnemonicByKey(mnemonic), options, query);\n }\n}\n","import { FnccEndpoint } from './base.js';\nimport { FnccRoutes } from '../routes.js';\nimport type { FnccBaseOptions } from '../options.js';\nimport type { FnccNewsFeed, FnccNewsResponse } from '../types.js';\n\nexport class FnccNewsEndpoint extends FnccEndpoint {\n async all(options?: FnccBaseOptions): Promise<FnccNewsResponse> {\n return this.fetchRaw<FnccNewsResponse>(FnccRoutes.news(), options);\n }\n\n async feed(feed: string, options?: FnccBaseOptions): Promise<FnccNewsFeed> {\n this.requireString(feed, 'feed');\n return this.fetchData<FnccNewsFeed>(FnccRoutes.newsFeed(feed), options);\n }\n}\n","import { FnccEndpoint } from './base.js';\nimport { FnccRoutes } from '../routes.js';\nimport type { QueryParams } from '../../core/types.js';\nimport type { FnccPlaylistOptions, FnccPlaylistsOptions } from '../options.js';\nimport type { FnccPlaylist } from '../types.js';\n\nexport class FnccPlaylistsEndpoint extends FnccEndpoint {\n async list(options?: FnccPlaylistsOptions): Promise<FnccPlaylist[]> {\n return this.fetchData<FnccPlaylist[]>(FnccRoutes.playlists(), options, this.query(options));\n }\n\n async get(id: string, options?: FnccPlaylistOptions): Promise<FnccPlaylist> {\n this.requireString(id, 'id');\n const query: QueryParams = {};\n if (options?.fetchImages !== undefined) query['fetchImages'] = options.fetchImages;\n return this.fetchData<FnccPlaylist>(FnccRoutes.playlist(id), options, query);\n }\n\n private query(options: FnccPlaylistsOptions | undefined): QueryParams {\n const query: QueryParams = {};\n if (options?.gameType !== undefined) query['gameType'] = options.gameType;\n if (options?.tag !== undefined) query['tag'] = options.tag;\n if (options?.tournament !== undefined) query['tournament'] = options.tournament;\n if (options?.ranked !== undefined) query['ranked'] = options.ranked;\n if (options?.limitedTime !== undefined) query['limitedTime'] = options.limitedTime;\n if (options?.default !== undefined) query['default'] = options.default;\n if (options?.fetchImages !== undefined) query['fetchImages'] = options.fetchImages;\n return query;\n }\n}\n","import { FnccEndpoint } from './base.js';\nimport { FnccRoutes } from '../routes.js';\nimport type { QueryParams } from '../../core/types.js';\nimport type { FnccBaseOptions, FnccWeaponOptions, FnccWeaponsOptions } from '../options.js';\nimport type { FnccWeapon, FnccWeaponFilters, FnccWeaponsResponse } from '../types.js';\n\nexport class FnccWeaponsEndpoint extends FnccEndpoint {\n async list(options?: FnccWeaponsOptions): Promise<FnccWeaponsResponse> {\n return this.fetchRaw<FnccWeaponsResponse>(FnccRoutes.weapons(), options, this.query(options));\n }\n\n async categories(options?: FnccBaseOptions): Promise<FnccWeaponFilters> {\n return this.fetchData<FnccWeaponFilters>(FnccRoutes.weaponsCategories(), options);\n }\n\n async get(id: string, options?: FnccWeaponOptions): Promise<FnccWeapon> {\n this.requireString(id, 'id');\n const query: QueryParams = {};\n if (options?.includeRaw !== undefined) query['includeRaw'] = options.includeRaw;\n return this.fetchData<FnccWeapon>(FnccRoutes.weapon(id), options, query);\n }\n\n private query(options: FnccWeaponsOptions | undefined): QueryParams {\n const query: QueryParams = {};\n if (options?.search !== undefined) query['search'] = options.search;\n if (options?.category !== undefined) query['category'] = options.category;\n if (options?.rarity !== undefined) query['rarity'] = options.rarity;\n if (options?.ammo !== undefined) query['ammo'] = options.ammo;\n if (options?.trigger !== undefined) query['trigger'] = options.trigger;\n if (options?.type !== undefined) query['type'] = options.type;\n if (options?.tag !== undefined) query['tag'] = options.tag;\n if (options?.ranged !== undefined) query['ranged'] = options.ranged;\n if (options?.melee !== undefined) query['melee'] = options.melee;\n if (options?.hasIcon !== undefined) query['hasIcon'] = options.hasIcon;\n if (options?.hasStats !== undefined) query['hasStats'] = options.hasStats;\n if (options?.sort !== undefined) query['sort'] = options.sort;\n if (options?.order !== undefined) query['order'] = options.order;\n if (options?.limit !== undefined) query['limit'] = options.limit;\n if (options?.offset !== undefined) query['offset'] = options.offset;\n return query;\n }\n}\n","import { RestClient } from '../fortnite/rest.js';\nimport { FNCC_BASE_URL } from './routes.js';\nimport type { FnccAPIOptions } from './options.js';\nimport { FnccStatusEndpoint } from './endpoints/status.js';\nimport { FnccGameEndpoint } from './endpoints/game.js';\nimport { FnccCosmeticsEndpoint } from './endpoints/cosmetics.js';\nimport { FnccBannersEndpoint } from './endpoints/banners.js';\nimport { FnccSpritesEndpoint } from './endpoints/sprites.js';\nimport { FnccSearchEndpoint } from './endpoints/search.js';\nimport { FnccAssetsEndpoint } from './endpoints/assets.js';\nimport { FnccImagesEndpoint } from './endpoints/images.js';\nimport { FnccAntiCheatEndpoint } from './endpoints/anticheat.js';\nimport { FnccCloudStorageEndpoint } from './endpoints/cloudstorage.js';\nimport { FnccDiscoveryEndpoint } from './endpoints/discovery.js';\nimport { FnccFishEndpoint } from './endpoints/fish.js';\nimport { FnccItemShopEndpoint } from './endpoints/itemshop.js';\nimport { FnccLightswitchEndpoint } from './endpoints/lightswitch.js';\nimport { FnccLookupEndpoint } from './endpoints/lookup.js';\nimport { FnccMnemonicEndpoint } from './endpoints/mnemonic.js';\nimport { FnccNewsEndpoint } from './endpoints/news.js';\nimport { FnccPlaylistsEndpoint } from './endpoints/playlists.js';\nimport { FnccWeaponsEndpoint } from './endpoints/weapons.js';\n\nexport class FnccAPI {\n public readonly rest: RestClient;\n\n public readonly status: FnccStatusEndpoint;\n public readonly game: FnccGameEndpoint;\n public readonly cosmetics: FnccCosmeticsEndpoint;\n public readonly banners: FnccBannersEndpoint;\n public readonly sprites: FnccSpritesEndpoint;\n public readonly search: FnccSearchEndpoint;\n public readonly assets: FnccAssetsEndpoint;\n public readonly images: FnccImagesEndpoint;\n public readonly anticheat: FnccAntiCheatEndpoint;\n public readonly cloudstorage: FnccCloudStorageEndpoint;\n public readonly discovery: FnccDiscoveryEndpoint;\n public readonly fish: FnccFishEndpoint;\n public readonly itemshop: FnccItemShopEndpoint;\n public readonly lightswitch: FnccLightswitchEndpoint;\n public readonly lookup: FnccLookupEndpoint;\n public readonly mnemonic: FnccMnemonicEndpoint;\n public readonly news: FnccNewsEndpoint;\n public readonly playlists: FnccPlaylistsEndpoint;\n public readonly weapons: FnccWeaponsEndpoint;\n\n constructor(options: FnccAPIOptions = {}) {\n this.rest = new RestClient({\n baseUrl: options.baseUrl ?? FNCC_BASE_URL,\n timeout: options.timeout,\n headers: options.headers,\n query: options.query,\n retry: options.retry,\n cache: options.cache,\n fetch: options.fetch,\n userAgent: options.userAgent,\n });\n\n this.status = new FnccStatusEndpoint(this.rest);\n this.game = new FnccGameEndpoint(this.rest);\n this.cosmetics = new FnccCosmeticsEndpoint(this.rest);\n this.banners = new FnccBannersEndpoint(this.rest);\n this.sprites = new FnccSpritesEndpoint(this.rest);\n this.search = new FnccSearchEndpoint(this.rest);\n this.assets = new FnccAssetsEndpoint(this.rest);\n this.images = new FnccImagesEndpoint(this.rest);\n this.anticheat = new FnccAntiCheatEndpoint(this.rest);\n this.cloudstorage = new FnccCloudStorageEndpoint(this.rest);\n this.discovery = new FnccDiscoveryEndpoint(this.rest);\n this.fish = new FnccFishEndpoint(this.rest);\n this.itemshop = new FnccItemShopEndpoint(this.rest);\n this.lightswitch = new FnccLightswitchEndpoint(this.rest);\n this.lookup = new FnccLookupEndpoint(this.rest);\n this.mnemonic = new FnccMnemonicEndpoint(this.rest);\n this.news = new FnccNewsEndpoint(this.rest);\n this.playlists = new FnccPlaylistsEndpoint(this.rest);\n this.weapons = new FnccWeaponsEndpoint(this.rest);\n }\n\n version(...args: Parameters<FnccGameEndpoint['version']>) {\n return this.game.version(...args);\n }\n\n aes(...args: Parameters<FnccGameEndpoint['aes']>) {\n return this.game.aes(...args);\n }\n\n mappings(...args: Parameters<FnccGameEndpoint['mappings']>) {\n return this.game.mappings(...args);\n }\n}\n","export const FnccParserState = {\n Loading: 'loading',\n Ready: 'ready',\n Error: 'error',\n} as const;\n\nexport type FnccParserState = (typeof FnccParserState)[keyof typeof FnccParserState];\n\nexport const FNCC_PARSER_STATES = Object.values(FnccParserState) as FnccParserState[];\n\nexport function isFnccParserState(value: unknown): value is FnccParserState {\n return typeof value === 'string' && (FNCC_PARSER_STATES as string[]).includes(value);\n}\n\nexport const FnccUpdateStatus = {\n UpToDate: 'up-to-date',\n Updating: 'updating',\n Behind: 'behind',\n} as const;\n\nexport type FnccUpdateStatus = (typeof FnccUpdateStatus)[keyof typeof FnccUpdateStatus];\n\nexport const FNCC_UPDATE_STATUSES = Object.values(FnccUpdateStatus) as FnccUpdateStatus[];\n\nexport function isFnccUpdateStatus(value: unknown): value is FnccUpdateStatus {\n return typeof value === 'string' && (FNCC_UPDATE_STATUSES as string[]).includes(value);\n}\n","import { ValidationError } from '../core/errors.js';\n\nexport interface AuthClient {\n name: string;\n clientId: string;\n clientSecret?: string;\n}\n\nexport const AuthClients = {\n fortnitePC: {\n name: 'fortnitePCGameClient',\n clientId: 'ec684b8c687f479fadea3cb2ad83f5c6',\n clientSecret: 'e1f31c211f28413186262d37a13fc84d',\n },\n fortniteIOS: {\n name: 'fortniteIOSGameClient',\n clientId: '3446cd72694c4a4485d81b77adbb2141',\n clientSecret: '9209d4a5e25a457fb9b07489d313b41a',\n },\n fortniteIOSEUAppstore: {\n name: 'fortniteIOSGameClientEUAppstore',\n clientId: 'af43dc71dd91452396fcdffbd7a8e8a9',\n clientSecret: '4YXvSEBLFRPLh1hzGZAkfOi5mqupFohZ',\n },\n fortniteAndroid: {\n name: 'fortniteAndroidGameClient',\n clientId: '3f69e56c7649492c8cc29f1af08a8a12',\n clientSecret: 'b51ee9cb12234f50a69efa67ef53812e',\n },\n fortniteSwitch: {\n name: 'fortniteSwitchGameClient',\n clientId: '5229dcd3ac3845208b496649092f251b',\n clientSecret: 'e3bd2d3e-bf8c-4857-9e7d-f3d947d220c7',\n },\n fortniteNewSwitch: {\n name: 'fortniteNewSwitchGameClient',\n clientId: '98f7e42c2e3a4f86a74eb43fbb41ed39',\n clientSecret: '0a2449a2-001a-451e-afec-3e812901c4d7',\n },\n fortniteXbox: {\n name: 'fortniteXboxGameClient',\n clientId: 'cfaa14c4bf8744e3a5ef9a5d6c34558d',\n clientSecret: 'bcb0cd392fcd4e50a76ad4384c620543',\n },\n fortniteXSX: {\n name: 'fortniteXSXGameClient',\n clientId: 'db84fa58b60e468ba64e3b17209b56e9',\n clientSecret: '332881d7-e586-4681-b25b-377a6d97d24d',\n },\n fortniteValkyrie: {\n name: 'fortniteValkyrieGameClient',\n clientId: '3e13c5c57f594a578abe516eecb673fe',\n clientSecret: '530e316c337e409893c55ec44f22cd62',\n },\n fortniteCN: {\n name: 'fortniteCNGameClient',\n clientId: 'efe3cbb938804c74b20e109d0efc1548',\n clientSecret: '6e31bdbae6a44f258474733db74f39ba',\n },\n fortnitePS4EU: {\n name: 'fortnitePS4EUGameClient',\n clientId: '79a931b375334570ac369234f5da05ec',\n clientSecret: 'ee7335df3c4a412cb57055ab7ade693e',\n },\n fortnitePS4US: {\n name: 'fortnitePS4USGameClient',\n clientId: 'd8566f2e7f5c48f89683173eb529fee1',\n clientSecret: '255c7109c8274241986616e3702678b5',\n },\n kairosPC: {\n name: 'KairosPC',\n clientId: '5b685653b9904c1d92495ee8859dcb00',\n clientSecret: '7Q2mcmneyuvPmoRYfwM7gfErA6iUjhXr',\n },\n kairosAndroid: {\n name: 'Kairos Android',\n clientId: '0716a69cb8b2422fbb2a8b0879501471',\n clientSecret: 'cGthdfG68tyE7M3ZHMu3sXUBwqhibKFp',\n },\n kairosIOS: {\n name: 'Kairos iOS',\n clientId: '61d2f70175e84a6bba80a5089e597e1c',\n clientSecret: 'FbiZv3wbiKpvVKrAeMxiR6WhxZWVbrvA',\n },\n launcherApp: {\n name: 'launcherAppClient2',\n clientId: '34a02cf8f4414e29b15921876da36f9a',\n clientSecret: 'daafbccc737745039dffe53d94fc76cf',\n },\n androidPortal: {\n name: 'androidPortal',\n clientId: '38dbfc3196024d5980386a37b7c792bb',\n clientSecret: 'a6280b87-e45e-409b-9681-8f15eb7dbcf5',\n },\n ut: {\n name: 'utClient',\n clientId: '1252412dc7704a9690f6ea4611bc81ee',\n clientSecret: '2ca0c925b4674852bff92b26f8322434',\n },\n utDedicatedServer: {\n name: 'utDedicatedServer',\n clientId: '6ff43e743edc4d1dbac3594877b4bed9',\n clientSecret: '54619d6f84d443e195200b54ab649a53',\n },\n} as const satisfies Record<string, AuthClient>;\n\nexport type AuthClientName = keyof typeof AuthClients;\n\nexport const ALL_AUTH_CLIENTS: readonly AuthClient[] = [\n { name: 'fortnitePCGameClient', clientId: 'ec684b8c687f479fadea3cb2ad83f5c6', clientSecret: 'e1f31c211f28413186262d37a13fc84d' },\n { name: 'fortniteIOSGameClientEUAppstore', clientId: 'af43dc71dd91452396fcdffbd7a8e8a9', clientSecret: '4YXvSEBLFRPLh1hzGZAkfOi5mqupFohZ' },\n { name: 'fortniteIOSGameClient', clientId: '3446cd72694c4a4485d81b77adbb2141', clientSecret: '9209d4a5e25a457fb9b07489d313b41a' },\n { name: 'fortniteSwitchGameClient', clientId: '5229dcd3ac3845208b496649092f251b', clientSecret: 'e3bd2d3e-bf8c-4857-9e7d-f3d947d220c7' },\n { name: 'fortniteNewSwitchGameClient', clientId: '98f7e42c2e3a4f86a74eb43fbb41ed39', clientSecret: '0a2449a2-001a-451e-afec-3e812901c4d7' },\n { name: 'fortniteAndroidGameClient', clientId: '3f69e56c7649492c8cc29f1af08a8a12', clientSecret: 'b51ee9cb12234f50a69efa67ef53812e' },\n { name: 'fortniteXboxGameClient', clientId: 'cfaa14c4bf8744e3a5ef9a5d6c34558d', clientSecret: 'bcb0cd392fcd4e50a76ad4384c620543' },\n { name: 'fortniteXSXGameClient', clientId: 'db84fa58b60e468ba64e3b17209b56e9', clientSecret: '332881d7-e586-4681-b25b-377a6d97d24d' },\n { name: 'fortniteValkyrieGameClient', clientId: '3e13c5c57f594a578abe516eecb673fe', clientSecret: '530e316c337e409893c55ec44f22cd62' },\n { name: 'fortniteCNGameClient', clientId: 'efe3cbb938804c74b20e109d0efc1548', clientSecret: '6e31bdbae6a44f258474733db74f39ba' },\n { name: 'fortnitePS4EUGameClient', clientId: '79a931b375334570ac369234f5da05ec', clientSecret: 'ee7335df3c4a412cb57055ab7ade693e' },\n { name: 'fortnitePS4USGameClient', clientId: 'd8566f2e7f5c48f89683173eb529fee1', clientSecret: '255c7109c8274241986616e3702678b5' },\n { name: 'KairosPC', clientId: '5b685653b9904c1d92495ee8859dcb00', clientSecret: '7Q2mcmneyuvPmoRYfwM7gfErA6iUjhXr' },\n { name: 'Kairos Android', clientId: '0716a69cb8b2422fbb2a8b0879501471', clientSecret: 'cGthdfG68tyE7M3ZHMu3sXUBwqhibKFp' },\n { name: 'Kairos iOS', clientId: '61d2f70175e84a6bba80a5089e597e1c', clientSecret: 'FbiZv3wbiKpvVKrAeMxiR6WhxZWVbrvA' },\n { name: 'launcherAppClient2', clientId: '34a02cf8f4414e29b15921876da36f9a', clientSecret: 'daafbccc737745039dffe53d94fc76cf' },\n { name: 'androidPortal', clientId: '38dbfc3196024d5980386a37b7c792bb', clientSecret: 'a6280b87-e45e-409b-9681-8f15eb7dbcf5' },\n { name: 'utClient', clientId: '1252412dc7704a9690f6ea4611bc81ee', clientSecret: '2ca0c925b4674852bff92b26f8322434' },\n { name: 'wexPCGameClient', clientId: '3cf78cd3b00b439a8755a878b160c7ad', clientSecret: 'b383e0f4-f0cc-4d14-99e3-813c33fc1e9d' },\n { name: 'wexAndroidGameClient', clientId: 'e645e4b96298419cbffbfa353ebf8b82', clientSecret: 'd03089fd-628a-448a-ac39-0e8c5b022a11' },\n { name: 'wexIOSGameClient', clientId: 'ec813099a59f48d4a338f1901c1609db', clientSecret: '72f6db62-0e3e-4439-97df-ee21f7b0ae94' },\n { name: 'utDedicatedServer', clientId: '6ff43e743edc4d1dbac3594877b4bed9', clientSecret: '54619d6f84d443e195200b54ab649a53' },\n { name: 'Diesel - Monomi Park - Slime Rancher', clientId: '7c0e608d74ec4f40a1d58beb26639367', clientSecret: 'P9A63tad7Yk5FPRRmqbopgACDq99em' },\n { name: 'Among Us', clientId: 'xyza7891qtrmoYLr86we6DlfCA1RRsp8', clientSecret: 'nGThQanzvthA2HPaARXe/xutzsKyx5WJveNkBx44ti4' },\n { name: 'Fall Guys', clientId: 'xyza7891mADED0tPNJFOiF8OmI0DwY0J', clientSecret: '8w2sDwL5/GuUjeVbHZIxe1FAFwi+tuQI2msSCVIO+EA' },\n { name: 'Fortnite', clientId: 'xyza7891343Fr4ZSPkQZ3kaL3I2sX8B5', clientSecret: 'F8BVRyHIqmct8cN9KSPbXsJszpiIZEYEFDiySxc1wuA' },\n];\n\nconst CLIENT_INDEX = new Map<string, AuthClient>(\n ALL_AUTH_CLIENTS.flatMap((client) => [\n [client.clientId.toLowerCase(), client] as [string, AuthClient],\n [client.name.toLowerCase(), client] as [string, AuthClient],\n ]),\n);\n\nexport function findAuthClient(idOrName: string): AuthClient | null {\n return CLIENT_INDEX.get(idOrName.trim().toLowerCase()) ?? null;\n}\n\nexport type AuthClientInput = AuthClient | AuthClientName | (string & {});\n\nexport function isCustomClientInput(input: AuthClientInput): boolean {\n if (typeof input !== 'object' || input === null) return false;\n return findAuthClient(input.clientId) === null;\n}\n\nexport function resolveAuthClient(input: AuthClientInput): AuthClient {\n if (typeof input === 'object' && input !== null) {\n if (typeof input.clientId !== 'string' || input.clientId.length === 0) {\n throw new ValidationError('A custom auth client requires a non-empty \"clientId\"', 'clientId');\n }\n return input;\n }\n\n if (typeof input === 'string') {\n if (input in AuthClients) {\n return AuthClients[input as AuthClientName];\n }\n const found = findAuthClient(input);\n if (found) return found;\n throw new ValidationError(\n `Unknown auth client \"${input}\". Pass a known client name/id or a custom { clientId, clientSecret }.`,\n 'client',\n );\n }\n\n throw new ValidationError('An auth client is required', 'client');\n}\n","export const EPIC_ERROR_DESCRIPTIONS: Readonly<Record<string, string>> = {\n \"errors.com.epicgames.account.account_creation_date_of_birth_required\": \"Date of birth is required to create an account\",\n \"errors.com.epicgames.account.account_creation_email_required\": \"Account cannot be created with the provided input.\",\n \"errors.com.epicgames.account.account_is_not_minor\": \"Account 94b1569506b04f9f8557af611e8c5e47 is not minor.\",\n \"errors.com.epicgames.account.account_locked\": \"Sorry, your account is temporarily locked. Please try again later.\",\n \"errors.com.epicgames.account.account_not_active\": \"Sorry the account you are using is not active.\",\n \"errors.com.epicgames.account.account_not_found\": \"Sorry, we couldn't find an account for d1d7a59146f14b4b9f76a5cb00a38f41\",\n \"errors.com.epicgames.account.address.address_not_found\": \"Sorry, we couldn't find an address for account id 94b1569506b04f9f8557af611e8c5e47 and address id main\",\n \"errors.com.epicgames.account.apple.invalid_auth_code\": \"Apple authorization code is not valid.\",\n \"errors.com.epicgames.account.auth_app.bad_definition_format\": \"AuthApp definition could not be parsed due to bad format: [xyza7891ov4bjltiTDG4lfbFq7aPJjm1]\",\n \"errors.com.epicgames.account.auth_token.invalid_access_token\": \"Sorry the access token 'huchala' is invalid\",\n \"errors.com.epicgames.account.auth_token.invalid_refresh_token\": \"Sorry the refresh token 'aaaaaaaaaa' is invalid\",\n \"errors.com.epicgames.account.auth_token.login_not_allowed_with_client_only_auth\": \"Sorry the access token 'dc277800d2a2481db9a2c67a0005dde2' you are using may not be used for this operation as it is a client only token\",\n \"errors.com.epicgames.account.auth_token.not_own_session_removal\": \"Sorry you cannot remove the auth session 50069c2029d54b009660f6fce782da5d. It was not issued to you.\",\n \"errors.com.epicgames.account.auth_token.unknown_oauth_session\": \"Sorry we could not find the auth session 'eg1~aaaaaa'\",\n \"errors.com.epicgames.account.authorization_code.invalid_client_redirect_url\": \"Sorry, the redirect url you are using is not allowed for this client.\",\n \"errors.com.epicgames.account.client.unknown_client\": \"Sorry we do not have a record of the client 98f7e42c2e3a4f86a74eb43fbb41ed38\",\n \"errors.com.epicgames.account.client_disabled\": \"Sorry the client you are using has been disabled\",\n \"errors.com.epicgames.account.client_feature_not_allowed\": \"Client has no ExchangeCodeCreation feature.\",\n \"errors.com.epicgames.account.continuation_token_already_linked\": \"Continuation token with id 9779aac11b4d4f6181e77d0c43ff372f is already linked to an account.\",\n \"errors.com.epicgames.account.continuation_token_not_found\": \"Sorry, we couldn't find a continuation token with id aaaaaaaaaa\",\n \"errors.com.epicgames.account.date_of_birth_already_set\": \"Sorry, the date of birth for account c28fc8cee3794bff9aa452288b6785d8 is already set and cannot be updated.\",\n \"errors.com.epicgames.account.date_of_birth_change_failed\": \"Sorry, you can not change your date of birth.\",\n \"errors.com.epicgames.account.date_of_birth_not_set\": \"Sorry, the date of birth for account 94b1569506b04f9f8557af611e8c5e47 is not set.\",\n \"errors.com.epicgames.account.device_auth.invalid_device_info\": \"Invalid device info JSON value\",\n \"errors.com.epicgames.account.device_auth.not_found\": \"Sorry, we couldn't find the specified device 435b52ece6d347479531c5132e209e53 auth for account 605e561d56f8496a974fe6f11d7db3f5\",\n \"errors.com.epicgames.account.display_name_change_failed\": \"Sorry, you can only change your display name once every 14 days.\",\n \"errors.com.epicgames.account.display_name_change_timeframe\": \"Sorry, you can only change your display name once every 2 weeks\",\n \"errors.com.epicgames.account.display_name_required\": \"You must specify a displayName\",\n \"errors.com.epicgames.account.duplicate_display_name\": \"Sorry, the display name lele is already in use\",\n \"errors.com.epicgames.account.duplicate_email\": \"Sorry, the email address lele@example.com is already registered\",\n \"errors.com.epicgames.account.duplicate_external_auth\": \"Attempt to link externalAuth github to account 94b1569506b04f9f8557af611e8c5e47, but it's already linked to another account\",\n \"errors.com.epicgames.account.duplicate_external_auth_type\": \"duplicate external auth type github\",\n \"errors.com.epicgames.account.duplicate_username\": \"Sorry, the username lele is already in use\",\n \"errors.com.epicgames.account.email_code.code_not_for_your_account\": \"\\\"The code provided is associated with another account. Please login with the email associated with this code.\",\n \"errors.com.epicgames.account.email_code.code_not_found\": \"Sorry, the code you are using couldn't be found.\",\n \"errors.com.epicgames.account.email_confirmation_not_found\": \"Sorry, we couldn't find an email associated with the provided identifier.\",\n \"errors.com.epicgames.account.email_not_valid\": \"Email: lele@example.com is not valid. Reasons: [No MX records found for domain 'example.com']\",\n \"errors.com.epicgames.account.ext_auth.invalid_cert\": \"Certificate required for google auth type and google_id_token auth method is missing or invalidtoken\",\n \"errors.com.epicgames.account.ext_auth.invalid_external_auth_token\": \"Sorry, the external token you provided for the the auth system xbl_token could not be validated\",\n \"errors.com.epicgames.account.ext_auth.invalid_token\": \"Invalid OAuth access token\",\n \"errors.com.epicgames.account.ext_auth.linking_restricted\": \"External auth linking restricted for account 8b0a23cb43af46cb972806f4025a9cba and auth type psn to external account with name The1Jaren. Hence external id 7136032847522542450 is not allowed\",\n \"errors.com.epicgames.account.ext_auth.login_not_allowed\": \"Sorry the external authentication type 'github' does not allow login.\",\n \"errors.com.epicgames.account.ext_auth.not_trusted\": \"Sorry the external authentication method 'lego_id_token' is not allowed for passwordless accounts.\",\n \"errors.com.epicgames.account.ext_auth.sanitized_login_not_allowed\": \"Sorry the external authentication type 'google' cant be used for login for account 25ef13c7f99d47c69c5c2f7139813907\",\n \"errors.com.epicgames.account.ext_auth.unknown_external_auth_type\": \"Sorry the auth type huchala for token grant flow INTERNAL is not known to this system\",\n \"errors.com.epicgames.account.external_auth.remove.forbid.last_login_way\": \"Sorry, we cannot remove 'internal' external auth, since this is the last way to login. Please consider promoting 'ecbd2baf44694f76b04e6a503b8aa11b' account to full first, or removing it at once in order to be able to remove the auth.\",\n \"errors.com.epicgames.account.external_auth.remove.forbid.last_trusted_ext_auth_apple\": \"Sorry, we cannot remove 'apple' external auth for 'fbd28827bc0545abbcb778b4fec6a522' accountId, since this is the last way to login. Please set password and try again\",\n \"errors.com.epicgames.account.external_auth.remove.forbid.last_trusted_ext_auth_facebook\": \"Sorry, we cannot remove 'facebook' external auth for '590747b631294cfda9fda096ee336f5c' accountId, since this is the last way to login. Please set password and try again\",\n \"errors.com.epicgames.account.external_auth.remove.forbid.last_trusted_ext_auth_github\": \"Sorry, we cannot remove 'github' external auth for 'e43dcf1e6a444402b904b7961b8f9449' accountId, since this is the last way to login. Please set password and try again\",\n \"errors.com.epicgames.account.external_auth.remove.forbid.last_trusted_ext_auth_google\": \"Sorry, we cannot remove 'google' external auth for '9fc4ec4857804d55867cf61888696600' accountId, since this is the last way to login. Please set password and try again\",\n \"errors.com.epicgames.account.external_auth.remove.forbid.last_trusted_ext_auth_vk\": \"Sorry, we cannot remove 'vk' external auth for 'e43dcf1e6a444402b904b7961b8f9449' accountId, since this is the last way to login. Please set password and try again\",\n \"errors.com.epicgames.account.external_auth_account_id_mismatch\": \"The exchangeCode for this external auth is not associated with this Epic account. The google account associated to this Epic account has the display name lele\",\n \"errors.com.epicgames.account.external_auth_already_registered\": \"That GitHub account is already associated with another account\",\n \"errors.com.epicgames.account.external_auth_not_found\": \"Sorry, we couldn't find an external auth for account id 94b1569506b04f9f8557af611e8c5e47 and auth type ubisoft\",\n \"errors.com.epicgames.account.external_auth_validate_failed\": \"Failed to verify token for authType: steam_encrypted_appticket and sandboxId: XXX, error: Sandbox credentials not found for sandboxId: xxxxxxxxxxx identityProvider: steam\",\n \"errors.com.epicgames.account.forbidden_by_account_policy\": \"The operation requested is forbidden by the account policy.\",\n \"errors.com.epicgames.account.guardian_challenge_not_found\": \"Sorry, we couldn't find guardian challenge with id: 1a2b6286a30ed0ca8ca688563ce4d8a4\",\n \"errors.com.epicgames.account.guardian_challenge_not_found_for_minor\": \"Sorry, we couldn't find guardian challenge for minor account with id: 94b1569506b04f9f8557af611e8c5e47\",\n \"errors.com.epicgames.account.guardian_email_not_valid\": \"Guardian email: test@epicgames.coms is not valid.\",\n \"errors.com.epicgames.account.guardian_verification_not_required\": \"Guardian verification is not required for account: 94b1569506b04f9f8557af611e8c5e47 or it has already been verified.\",\n \"errors.com.epicgames.account.id_token_not_allowed\": \"Account 6c5f78c40a31482f81ae5df98b950889 is not allowed to get ID token for account 24ad0dec99aa4655990184aa97e2979b\",\n \"errors.com.epicgames.account.identity_provider.api_error\": \"Unable to fulfill Identity Provider API request.\",\n \"errors.com.epicgames.account.invalidLanguagePreference\": \"Sorry the language you chose is not supported\",\n \"errors.com.epicgames.account.invalid_account_credentials\": \"Sorry the account credentials you are using are invalid\",\n \"errors.com.epicgames.account.invalid_account_id_count\": \"Sorry, the number of account id should be at least one and not more than 100.\",\n \"errors.com.epicgames.account.invalid_client_credentials\": \"Sorry the client credentials you are using are invalid\",\n \"errors.com.epicgames.account.invalid_current_password\": \"Sorry, the current password value you entered is invalid.\",\n \"errors.com.epicgames.account.invalid_date_of_birth\": \"Sorry, the specified dateOfBirth is not valid. Please, try entering a correct dateOfBirth.\",\n \"errors.com.epicgames.account.invalid_guardian\": \"Sorry, the guardianId you provided: o-u565bxxhvzkerqyl8n4bvkbw36v5me is not valid\",\n \"errors.com.epicgames.account.invalid_parameters\": \"Accounts lookup by external account ids and Epic account ids is not allowed.\",\n \"errors.com.epicgames.account.invalid_two_factor_auth_type\": \"Cannot verify two factor request when updating 2fa settings for account: 8b0a23cb43af46cb972806f4025a9cba. Method: sms\",\n \"errors.com.epicgames.account.ip_mismatch\": \"Sorry, you must complete this flow from the same network that you initiated the flow\",\n \"errors.com.epicgames.account.keys.key_not_found\": \"Sorry, we couldn't find an public/private key for thumbprint WMS7EnkIGpcH9DGZsv2WcY9xsuFnZCtxZjj4Ahb-DDD\",\n \"errors.com.epicgames.account.last_name_invalid_characters\": \"Name may not contain the following characters: '.'.\",\n \"errors.com.epicgames.account.merge.account_feature_restricted\": \"Sorry, your account are not allowed for merge.\",\n \"errors.com.epicgames.account.merge.external_auth_conflict\": \"Unknown error. Please try again later.\",\n \"errors.com.epicgames.account.metadata_key_not_found\": \"Sorry the metadata key fun for the account 94b1569506b04f9f8557af611e8c5e47 was not found\",\n \"errors.com.epicgames.account.minor_status_forbidden\": \"Sorry, you can only change minorStatus to NOT_MINOR and from SUSPECTED or UNKNOWN status.\",\n \"errors.com.epicgames.account.name_invalid_characters\": \"Name may not contain the following characters: '.'.\",\n \"errors.com.epicgames.account.no_account_found_for_external_auth\": \"Sorry the external auth token you provided does not map to an account\",\n \"errors.com.epicgames.account.oauth.authorization_code_not_for_your_client\": \"Sorry the authorization code you supplied was not issued for your client.\",\n \"errors.com.epicgames.account.oauth.authorization_code_not_found\": \"Sorry the authorization code you supplied was not found. It is possible that it was no longer valid\",\n \"errors.com.epicgames.account.oauth.authorization_pending\": \"The authorization server request is still pending as the end user has yet to visit and enter the verification code.\",\n \"errors.com.epicgames.account.oauth.code_not_valid_for_login_type\": \"Sorry the code you are using cannot be used for the login method you are using\",\n \"errors.com.epicgames.account.oauth.exchange_code_client_mismatch\": \"Sorry the exchange_code code you supplied is not consumable for the current client: 3446cd72694c4a4485d81b77adbb2141\",\n \"errors.com.epicgames.account.oauth.exchange_code_not_found\": \"Sorry the exchange code you supplied was not found. It is possible that it was no longer valid\",\n \"errors.com.epicgames.account.oauth.expired_exchange_code_session\": \"Sorry the originating session for the exchange_code has expired.\",\n \"errors.com.epicgames.account.oauth.failure_state_not_found\": \"Failure state with id ba50914f6f9149ea9edcace5d30b825c not found\",\n \"errors.com.epicgames.account.oauth.missing_real_id_association\": \"Real ID association is required to proceed\",\n \"errors.com.epicgames.account.oauth.parental_control.playing_forbidden\": \"Forbidden to play between 2024-06-21T15:00 and 2024-06-21T21:00\",\n \"errors.com.epicgames.account.oauth.password_reset_required\": \"Please reset your password to proceed with login.\",\n \"errors.com.epicgames.account.oauth.single_use_code_not_found\": \"Sorry, the OAuth exchange or authorization code you are using is not valid. Please try again with a new code.\",\n \"errors.com.epicgames.account.oauth.single_use_code_verifier_invalid\": \"The code_verified provided is invalid for this single_use_code.\",\n \"errors.com.epicgames.account.oauth.single_use_code_verifier_required\": \"The code_verified is required for this single_use_code.\",\n \"errors.com.epicgames.account.oauth.too_many_sessions\": \"Sorry too many sessions have been issued for your account. Please try again later\",\n \"errors.com.epicgames.account.password_required\": \"You must provide a password when an email or username is specified\",\n \"errors.com.epicgames.account.sdn.challenge_not_allowed\": \"Challenge not allowed: only accounts with CHALLENGE status are allowed. Current sdnStatus=CLEAN\",\n \"errors.com.epicgames.account.token_account_id_does_not_match_url_accountId\": \"The accountId supplied in the url does not match the accountId for the OAuth token.\",\n \"errors.com.epicgames.account.update_denied_due_to_cabined_mode\": \"Sorry, you cannot update the display name field while under current account restrictions.\",\n \"errors.com.epicgames.account.username_or_email_required\": \"You must specify an email or username when a password is specified\",\n \"errors.com.epicgames.account.validation.displayName.invalid_character\": \"Your display name may not contain the following characters: '[]\\u200b'.\",\n \"errors.com.epicgames.account.validation.displayName.invalid_character_repeat\": \"Your display name may not repeat the '.'character.\",\n \"errors.com.epicgames.account.validation.displayName.invalid_display_name.too_long\": \"Your display name must have fewer than 16 characters.\",\n \"errors.com.epicgames.account.validation.displayName.invalid_display_name.too_short\": \"Your display name must have a minimum of 3 characters.\",\n \"errors.com.epicgames.account.validation.displayName.invalid_start_character\": \"Your display name may not start with the '.' character.\",\n \"errors.com.epicgames.account.xbl.invalid_token\": \"Provided token is in violation of the xToken auth header format.\",\n \"errors.com.epicgames.account.xbl.invalid_token_date\": \"Token cannot be used before Tue Jan 31 20:27:26 UTC 2023 or after Wed Feb 01 12:27:26 UTC 2023.\",\n \"errors.com.epicgames.accountportal.account_headless\": \"Please update your account with display name and email specified.\",\n \"errors.com.epicgames.accountportal.account_review_details_required\": \"Please verify your account details.\",\n \"errors.com.epicgames.accountportal.account_select_required\": \"Please confirm you want to proceed with the currently logged in account.\",\n \"errors.com.epicgames.accountportal.account_type_not_supported\": \"This account type is not allowed to sign in.\",\n \"errors.com.epicgames.accountportal.captcha_invalid\": \"Incorrect response. Please refresh the page.\",\n \"errors.com.epicgames.accountportal.client_access_denied\": \"Unfortunately, you dont have access to use this application.\",\n \"errors.com.epicgames.accountportal.client_has_no_application\": \"Client has no application associated.\",\n \"errors.com.epicgames.accountportal.client_has_no_scopes\": \"Client scopes are not configured.\",\n \"errors.com.epicgames.accountportal.client_no_redirect_uri\": \"There is no redirect URL configured for this client.\",\n \"errors.com.epicgames.accountportal.client_no_response_type_code\": \"The \\\\\\\"response_type=code\\\\\\\" parameter must be specified.\",\n \"errors.com.epicgames.accountportal.client_not_authorized\": \"Client not authorized.\",\n \"errors.com.epicgames.accountportal.client_redirect_domain_mismatch\": \"Redirect URL is not known to the client.\",\n \"errors.com.epicgames.accountportal.code_invalid\": \"Sorry, the code is expired or invalid.\",\n \"errors.com.epicgames.accountportal.country_restrictionerror\": \"Due to United States trade restrictions, we are unable to permit account creation or sign in with individuals in Cuba, Iran, North K\",\n \"errors.com.epicgames.accountportal.csrf_token_invalid\": \"Something went wrong. Please refresh the page and check that you allow cookies on your device. If the error persists, please contact Player Support.\",\n \"errors.com.epicgames.accountportal.date_of_birth_verification_required\": \"Please verify your age.\",\n \"errors.com.epicgames.accountportal.email_not_specified\": \"Email verification failed. Please try again.\",\n \"errors.com.epicgames.accountportal.email_verification_required\": \"Please verify your email address.\",\n \"errors.com.epicgames.accountportal.ext_auth_required\": \"You must be externally authenticated.\",\n \"errors.com.epicgames.accountportal.guardian_code_invalid\": \"It's been too long since parental consent was requested, it timed out...\",\n \"errors.com.epicgames.accountportal.guardian_consent_required\": \"The consent of a parent or legal guardian is required.\",\n \"errors.com.epicgames.accountportal.mfa_backup_code_invalid\": \"The backup code is invalid or expired.\",\n \"errors.com.epicgames.accountportal.mfa_code_invalid\": \"The security code is invalid or expired.\",\n \"errors.com.epicgames.accountportal.oauth_state_invalid\": \"There was an error logging you in, please try again.\",\n \"errors.com.epicgames.accountportal.parameter_required\": \"Parameter \\\"country\\\" is required\",\n \"errors.com.epicgames.accountportal.pin_grant_client_mismatch\": \"Security Code was requested for a different client\",\n \"errors.com.epicgames.accountportal.pin_grant_login_required\": \"Please sign in.\",\n \"errors.com.epicgames.accountportal.playtime_request_already_granted\": \"Value is invalid\",\n \"errors.com.epicgames.accountportal.registration_blocked\": \"Unable to register with the provided information.\",\n \"errors.com.epicgames.accountportal.reputation_session_invalidated\": \"Session missing reputation\",\n \"errors.com.epicgames.accountportal.session_id_invalid\": \"Session ID is invalid or expired.\",\n \"errors.com.epicgames.accountportal.session_invalidated\": \"Signed out. Please try again.\",\n \"errors.com.epicgames.accountportal.sso.organization_not_found.by-email\": \"We're having trouble finding your organization. Check if your email is correct. If you're sure your account uses this email, contact your organization's admin.\",\n \"errors.com.epicgames.accountportal.sso.organization_not_found.by-issuer\": \"We're having trouble finding your organization. Please contact your organization's admin.\",\n \"errors.com.epicgames.accountportal.supplemental_consent_not_required\": \"Supplemental guardian consent is not required.\",\n \"errors.com.epicgames.accountportal.unauthorized_eula\": \"Client is not authorized to request the following EULA: s23_thekidlaroi_rules.\",\n \"errors.com.epicgames.accountportal.unauthorized_scope\": \"Client is not authorized to request the following scope: friends_management.\",\n \"errors.com.epicgames.accountportal.user_code_not_confirmed\": \"Code was not confirmed.\",\n \"errors.com.epicgames.accountportal.validation\": \"exchangeCode is invalid.\",\n \"errors.com.epicgames.accountportal.validation.allowed\": \"responseType must be one of code,eula_token\",\n \"errors.com.epicgames.accountportal.validation.boolean\": \"name_or_logo_inappropriate must be one of [true, false]\",\n \"errors.com.epicgames.accountportal.validation.max\": \"displayName length must be less than or equal to 16 characters long\",\n \"errors.com.epicgames.accountportal.validation.min\": \"displayName length must be at least 3 characters long\",\n \"errors.com.epicgames.accountportal.validation.required\": \"query is required\",\n \"errors.com.epicgames.accountportal.validation.unknown\": \"query is not allowed\",\n \"errors.com.epicgames.common.account_not_logged_in\": \"Sorry we couldn't validate your token. Please try with a new token.\",\n \"errors.com.epicgames.common.argus.invalid_account\": \"Account has non-test external auths linked.\",\n \"errors.com.epicgames.common.authentication.authentication_failed\": \"Authentication failed for /api/storefront/v2/catalog\",\n \"errors.com.epicgames.common.authentication.token_verification_failed\": \"Sorry we couldn't validate your token. Please try with a new token.\",\n \"errors.com.epicgames.common.authn.insufficient_user_authentication\": \"Insufficient User Authentication\",\n \"errors.com.epicgames.common.client_auth_required\": \"Calling this api requires a client credentials token\",\n \"errors.com.epicgames.common.concurrent_modification_error\": \"Sorry, the item you were trying to edit was changed before your edit could be completed. Please retry your edit.\",\n \"errors.com.epicgames.common.dad.illegal_argument\": \"FortniteDataAssetDirectoryManager is intended for use by clients with UE formatted UserAgent headers but it was null or empty\",\n \"errors.com.epicgames.common.insufficient_scopes\": \"Insufficient access scopes. Expected: [friends_management]\",\n \"errors.com.epicgames.common.internal_server_error\": \"HTTP 500 Internal Server Error\",\n \"errors.com.epicgames.common.invalid_deployment\": \"E:v1,A:Some()\",\n \"errors.com.epicgames.common.invalid_product\": \"E:fghi4567WVmSm0yD36WOPZsn2gkXHrra,A:Some(ce29c2ecda084567abdee769c6c28010)\",\n \"errors.com.epicgames.common.json_mapping_error\": \"Json mapping failed.\",\n \"errors.com.epicgames.common.json_parse_error\": \"Json parse failed.\",\n \"errors.com.epicgames.common.method_not_allowed\": \"Sorry the resource you were trying to access cannot be accessed with the HTTP method you used.\",\n \"errors.com.epicgames.common.missing_action\": \"LLogin is banned or does not posses the action 'PLAY' needed to perform the requested operation for platform ''\",\n \"errors.com.epicgames.common.missing_feature\": \"Feature is not enabled for this client\",\n \"errors.com.epicgames.common.missing_param\": \"One or more required parameters is null\",\n \"errors.com.epicgames.common.missing_permission\": \"Sorry your login does not posses the permissions 'fortnite:cloudstorage:system:DedicatedServerEngine.ini READ' needed to perform the requested operation\",\n \"errors.com.epicgames.common.missing_role\": \"E:,A:Epic\",\n \"errors.com.epicgames.common.mongo_execution_timeout_error\": \"Sorry, there was a timeout utilizing the database.\",\n \"errors.com.epicgames.common.mongo_query_error\": \"Sorry, there was an error querying the database.\",\n \"errors.com.epicgames.common.mongo_socket_open_error\": \"Sorry, there was a socket open error.\",\n \"errors.com.epicgames.common.mongo_wait_queue_full_error\": \"Sorry, there was database timeout.\",\n \"errors.com.epicgames.common.mongo_write_concern_error\": \"Sorry, there was an error writing to the database\",\n \"errors.com.epicgames.common.mongo_write_error\": \"Sorry, there was an error writing to the database.\",\n \"errors.com.epicgames.common.nintendo.api_error\": \"Unable to fulfill Nintendo API request.\",\n \"errors.com.epicgames.common.not_found\": \"Sorry the resource you were trying to find could not be found\",\n \"errors.com.epicgames.common.oauth.invalid_client\": \"Client 3446cd72694c4a4485d81b77adbb2141 is not allowed to login with continuation token 24f96cc4862544278b71febe022926b5\",\n \"errors.com.epicgames.common.oauth.invalid_request\": \"The Google authorization code you are using is invalidfound.\",\n \"errors.com.epicgames.common.oauth.invalid_token\": \"There was an issue verifying token eg1~xxx. Token contains invalid data.\",\n \"errors.com.epicgames.common.oauth.unauthorized_client\": \"Sorry your client is not allowed to use the grant type password\",\n \"errors.com.epicgames.common.oauth.unsupported_grant_type\": \"Sorry, your client does not have the proper grant_type for access.\",\n \"errors.com.epicgames.common.oauth_account_authentication_required\": \"You must be using oauth authentication representing an Account to access this API.\",\n \"errors.com.epicgames.common.oauth_authentication_required\": \"You must be using oauth authentication to access this API.\",\n \"errors.com.epicgames.common.policy_check_failed\": \"Client xyza7891ov4bjltiTDG4lfbFq7aPJjm1 targetUserId requires 00028c67a0b64e7b98a56ce5ddac6a4e but had 00028c67a0b64e7b98a56ce5ddac6a4d for datastorage:access\",\n \"errors.com.epicgames.common.policy_denied\": \"Policy denied : Does not have access to the queried deploymentId\",\n \"errors.com.epicgames.common.policy_missing_action\": \"Client ec684b8c687f479fadea3cb2ad83f5c6 missing kws:getUserPermissions\",\n \"errors.com.epicgames.common.policy_requires_user\": \"Client xyza7891buv7hes6zVnhJdQUclKjqKEg requires signed in user for anticheat:authenticateForAnyUser,anticheat:authenticateForLocalUse\",\n \"errors.com.epicgames.common.processing_exception\": \"Sorry a processing exception occurred while we were waiting for you to send us request data. (tracking id: [00000000-0000-0000-0000-000000000000])\",\n \"errors.com.epicgames.common.rejection.MalformedQueryParamRejection\": \"Invalid query: showPrivateEvents\",\n \"errors.com.epicgames.common.rejection.MalformedRequestContentRejection\": \"No content to map due to end-of-input\\\\n at [Source: (byte[])\\\\\\\"\\\\\\\"; line: 1, column: 0]\",\n \"errors.com.epicgames.common.rejection.MissingHeaderRejection\": \"Missing header: User-Agent\",\n \"errors.com.epicgames.common.rejection.MissingQueryParamRejection\": \"Missing query: playerId\",\n \"errors.com.epicgames.common.request_not_acceptable\": \"Sorry your request could not be processed as you do not accept theresponse type generated by this resource. Please check your Accept header.\",\n \"errors.com.epicgames.common.sandbox.access.control.invalid_client_access\": \"The client [34a02cf8f4414e29b15921876da36f9a] cannot access the private namespaces [p-u7k4uzbyy3xdxgd9rhwv7743x75kt8]\",\n \"errors.com.epicgames.common.sandbox.access.control.missing_permission\": \"Sorry you are not assigned the appropriate permissions to access namespaces [p-jbevlmd3zzfcz7zf5ty8f8j4l3q9wn].\",\n \"errors.com.epicgames.common.server_error\": \"Sorry an error occurred and we were unable to resolve it (tracking id: [00000000-0000-0000-0000-000000000000])\",\n \"errors.com.epicgames.common.slow_down\": \"Request frequency should not exceed one call per 10 seconds\",\n \"errors.com.epicgames.common.throttled\": \"Operation access is limited by throttling policy, please try again in 5 second(s).\",\n \"errors.com.epicgames.common.throttled.orderprocessor.freeorder\": \"Operation access is limited by throttling policy, please try again in 14429 second(s).\",\n \"errors.com.epicgames.common.two_factor_authentication.required\": \"Two-Factor authentication required to process request.\",\n \"errors.com.epicgames.common.two_factor_authentication.verification_failed\": \"Sorry, we were unable to verify the Two-Factor Authentication request because the token is invalid or expired.\",\n \"errors.com.epicgames.common.unsupported_media_type\": \"Sorry your request could not be processed as you are supplying a media type we do not support.\",\n \"errors.com.epicgames.common.user_required\": \"Calling this api requires a user access token\",\n \"errors.com.epicgames.common.validation.country.validation_failed\": \"Sorry the value you entered does not appear to be a valid ISO country code.\",\n \"errors.com.epicgames.common.validation.invalid_email\": \"Sorry the email you entered does not appear to be a valid email address.\",\n \"errors.com.epicgames.common.validation.password.complexity_requirements_not_met\": \"Password must contain at least one letter, and one digit\",\n \"errors.com.epicgames.common.validation.password.length_violation\": \"Password must be between 7 and 256 characters\",\n \"errors.com.epicgames.common.validation.password.non_printable_characters_not_allowed\": \"Password cannot contain non printable characters\",\n \"errors.com.epicgames.common.validation.password.whitespace_not_allowed\": \"Password cannot contain whitespace characters\",\n \"errors.com.epicgames.common.validation.phone_number.validation_failed\": \"Sorry the value you entered does not appear to be a valid phone number\",\n \"errors.com.epicgames.oauth.account_feature_restricted\": \"Your account cannot use this feature.\",\n \"errors.com.epicgames.oauth.account_forbidden\": \"Account cannot access deployment '98cc357b079248148d60fe3fad5c8d30'\",\n \"errors.com.epicgames.oauth.corrective_action_required\": \"Corrective action is required to continue.\",\n \"errors.com.epicgames.oauth.invalid_deployment\": \"Deployment 'lele' is invalid or not accessible by this client\",\n \"errors.com.epicgames.oauth.scope_consent_required\": \"The user has not consented to required scopes.\",\n};\n\nexport function describeEpicError(errorCode: string | null | undefined): string | null {\n if (!errorCode) return null;\n return EPIC_ERROR_DESCRIPTIONS[errorCode] ?? null;\n}\n","import { FortniteApiError } from '../core/errors.js';\r\nimport { describeEpicError } from './errorCodes.js';\r\nimport type { EpicErrorBody } from './types.js';\r\n\r\nexport interface EpicApiErrorContext {\r\n status: number;\r\n method: string;\r\n url: string;\r\n body: EpicErrorBody | string | null;\r\n headers?: Record<string, string>;\r\n}\r\n\r\nexport class EpicApiError extends FortniteApiError {\r\n public override readonly name: string = 'EpicApiError';\r\n public readonly status: number;\r\n public readonly method: string;\r\n public readonly url: string;\r\n public readonly body: EpicErrorBody | string | null;\r\n public readonly headers: Record<string, string>;\r\n public readonly errorCode: string | null;\r\n public readonly numericErrorCode: number | null;\r\n public readonly messageVars: string[];\r\n public readonly description: string | null;\r\n\r\n constructor(message: string, context: EpicApiErrorContext) {\r\n super(message);\r\n this.status = context.status;\r\n this.method = context.method;\r\n this.url = context.url;\r\n this.body = context.body;\r\n this.headers = context.headers ?? {};\r\n\r\n const body = typeof context.body === 'object' && context.body !== null ? context.body : {};\r\n this.errorCode = body.errorCode ?? null;\r\n this.numericErrorCode = body.numericErrorCode ?? null;\r\n this.messageVars = Array.isArray(body.messageVars) ? body.messageVars : [];\r\n this.description = describeEpicError(this.errorCode);\r\n }\r\n}\r\n\r\nexport class EpicAuthError extends EpicApiError {\r\n public override readonly name: string = 'EpicAuthError';\r\n}\r\n\r\nexport class EpicPermissionError extends EpicApiError {\r\n public override readonly name: string = 'EpicPermissionError';\r\n}\r\n\r\nexport class EpicNotFoundError extends EpicApiError {\r\n public override readonly name: string = 'EpicNotFoundError';\r\n}\r\n\r\nexport class EpicRateLimitError extends EpicApiError {\r\n public override readonly name: string = 'EpicRateLimitError';\r\n public readonly retryAfterSeconds: number | null;\r\n\r\n constructor(message: string, context: EpicApiErrorContext) {\r\n super(message, context);\r\n const header = context.headers?.['retry-after'];\r\n const parsed = header !== undefined ? Number(header) : Number.NaN;\r\n this.retryAfterSeconds = Number.isFinite(parsed) ? parsed : null;\r\n }\r\n}\r\n\r\nconst PERMISSION_ERROR_CODES = [\r\n 'missing_permission',\r\n 'policy_missing_action',\r\n 'deployment_product_access_forbidden',\r\n];\r\n\r\nexport function createEpicError(context: EpicApiErrorContext): EpicApiError {\r\n const body = context.body;\r\n let message = `Epic request failed with status ${context.status}`;\r\n\r\n if (typeof body === 'string' && body.trim().length > 0) {\r\n message = body.trim();\r\n } else if (body && typeof body === 'object') {\r\n message = body.errorMessage ?? body.error_description ?? body.error ?? message;\r\n }\r\n\r\n const errorCode = typeof body === 'object' && body !== null ? body.errorCode ?? '' : '';\r\n\r\n if (context.url.includes('/oauth/') || errorCode.includes('.oauth.')) {\r\n return new EpicAuthError(message, context);\r\n }\r\n if (context.status === 403 || PERMISSION_ERROR_CODES.some((code) => errorCode.includes(code))) {\r\n return new EpicPermissionError(message, context);\r\n }\r\n if (context.status === 404) {\r\n return new EpicNotFoundError(message, context);\r\n }\r\n if (context.status === 429) {\r\n return new EpicRateLimitError(message, context);\r\n }\r\n return new EpicApiError(message, context);\r\n}\r\n","import { USER_AGENT } from '../core/version.js';\r\nimport { AbortError, NetworkError, ParseError, TimeoutError } from '../core/errors.js';\r\nimport type { FetchLike, HttpMethod, QueryParams } from '../core/types.js';\r\nimport { backoffDelay, buildQuery, linkSignals, sleep } from '../core/utils.js';\r\nimport { createEpicError } from './errors.js';\r\nimport type { AuthClient } from './clients.js';\r\nimport type { EpicErrorBody } from './types.js';\r\n\r\nexport const EPIC_ACCOUNT_SERVICE = 'https://account-public-service-prod.ol.epicgames.com';\r\n\r\nexport interface EpicRestOptions {\r\n baseUrl?: string;\r\n timeout?: number;\r\n retry?: number;\r\n userAgent?: string;\r\n fetch?: FetchLike;\r\n headers?: Record<string, string>;\r\n}\r\n\r\nexport interface EpicRequestOptions {\r\n query?: QueryParams;\r\n form?: Record<string, string | undefined>;\r\n json?: unknown;\r\n text?: string;\r\n body?: string | Uint8Array;\r\n contentType?: string;\r\n responseType?: 'json' | 'text' | 'binary';\r\n basic?: AuthClient;\r\n bearer?: string;\r\n headers?: Record<string, string>;\r\n signal?: AbortSignal;\r\n timeout?: number;\r\n deviceId?: string;\r\n}\r\n\r\nexport interface EpicResponse<T> {\r\n status: number;\r\n headers: Record<string, string>;\r\n data: T;\r\n}\r\n\r\nconst RETRYABLE_STATUS = new Set([429, 500, 502, 503, 504]);\r\n\r\nfunction toBase64(value: string): string {\r\n if (typeof globalThis.btoa === 'function') {\r\n return globalThis.btoa(value);\r\n }\r\n return Buffer.from(value, 'utf8').toString('base64');\r\n}\r\n\r\nexport function basicAuthHeader(client: AuthClient): string {\r\n return `Basic ${toBase64(`${client.clientId}:${client.clientSecret ?? ''}`)}`;\r\n}\r\n\r\nfunction headersToRecord(headers: Headers): Record<string, string> {\r\n const record: Record<string, string> = {};\r\n headers.forEach((value, key) => {\r\n record[key.toLowerCase()] = value;\r\n });\r\n return record;\r\n}\r\n\r\nfunction encodeForm(form: Record<string, string | undefined>): string {\r\n const params = new URLSearchParams();\r\n for (const [key, value] of Object.entries(form)) {\r\n if (value !== undefined) params.append(key, value);\r\n }\r\n return params.toString();\r\n}\r\n\r\nexport class EpicRestClient {\r\n public baseUrl: string;\r\n public timeout: number;\r\n\r\n private readonly retry: number;\r\n private readonly fetchImpl: FetchLike;\r\n private readonly defaultHeaders: Record<string, string>;\r\n\r\n constructor(options: EpicRestOptions = {}) {\r\n this.baseUrl = (options.baseUrl ?? EPIC_ACCOUNT_SERVICE).replace(/\\/+$/, '');\r\n this.timeout = options.timeout ?? 30_000;\r\n this.retry = Math.max(1, options.retry ?? 3);\r\n\r\n this.defaultHeaders = {};\r\n for (const [key, value] of Object.entries(options.headers ?? {})) {\r\n this.defaultHeaders[key.toLowerCase()] = value;\r\n }\r\n this.defaultHeaders['accept'] = this.defaultHeaders['accept'] ?? 'application/json';\r\n this.defaultHeaders['user-agent'] = options.userAgent ?? this.defaultHeaders['user-agent'] ?? USER_AGENT;\r\n\r\n const fetchImpl = options.fetch ?? (globalThis.fetch as FetchLike | undefined);\r\n if (typeof fetchImpl !== 'function') {\r\n throw new TypeError(\r\n 'No fetch implementation available. Use Node 18+ or pass a custom `fetch` option.',\r\n );\r\n }\r\n this.fetchImpl = fetchImpl;\r\n }\r\n\r\n buildUrl(path: string, query?: QueryParams): string {\r\n const normalizedPath = path.startsWith('/') ? path : `/${path}`;\r\n return `${this.baseUrl}${normalizedPath}${buildQuery(query)}`;\r\n }\r\n\r\n async request<T>(\r\n method: HttpMethod,\r\n path: string,\r\n options: EpicRequestOptions = {},\r\n ): Promise<EpicResponse<T>> {\r\n const url = this.buildUrl(path, options.query);\r\n let lastError: unknown;\r\n\r\n for (let attempt = 1; attempt <= this.retry; attempt += 1) {\r\n const link = linkSignals(options.signal, options.timeout ?? this.timeout);\r\n\r\n try {\r\n const response = await this.fetchImpl(url, {\r\n method,\r\n headers: this.composeHeaders(options),\r\n body: this.composeBody(options) as RequestInit['body'],\r\n signal: link.signal,\r\n });\r\n\r\n const headers = headersToRecord(response.headers);\r\n\r\n if (response.ok && options.responseType === 'binary') {\r\n const buffer = await response.arrayBuffer();\r\n return { status: response.status, headers, data: new Uint8Array(buffer) as unknown as T };\r\n }\r\n\r\n const text = await response.text();\r\n const data = parseBody(text, headers['content-type'], url, response.ok);\r\n\r\n if (!response.ok) {\r\n const error = createEpicError({\r\n status: response.status,\r\n method,\r\n url,\r\n body: data as EpicErrorBody | string | null,\r\n headers,\r\n });\r\n\r\n if (attempt < this.retry && RETRYABLE_STATUS.has(response.status)) {\r\n lastError = error;\r\n await sleep(backoffDelay(attempt, 500, 8_000), options.signal);\r\n continue;\r\n }\r\n\r\n throw error;\r\n }\r\n\r\n return { status: response.status, headers, data: data as T };\r\n } catch (error) {\r\n if (error instanceof ParseError) throw error;\r\n if (isEpicError(error)) throw error;\r\n\r\n const normalized = this.normalizeError(error, url, link.timedOut(), options);\r\n if (normalized instanceof AbortError) throw normalized;\r\n\r\n lastError = normalized;\r\n if (attempt >= this.retry) throw normalized;\r\n\r\n try {\r\n await sleep(backoffDelay(attempt, 500, 8_000), options.signal);\r\n } catch (interrupted) {\r\n throw this.normalizeError(interrupted, url, link.timedOut(), options);\r\n }\r\n } finally {\r\n link.dispose();\r\n }\r\n }\r\n\r\n throw lastError instanceof Error\r\n ? lastError\r\n : new NetworkError('Epic request failed after all retry attempts', { url });\r\n }\r\n\r\n private composeHeaders(options: EpicRequestOptions): Record<string, string> {\r\n const headers: Record<string, string> = { ...this.defaultHeaders };\r\n\r\n if (options.basic) {\r\n headers['authorization'] = basicAuthHeader(options.basic);\r\n } else if (options.bearer) {\r\n headers['authorization'] = `Bearer ${options.bearer}`;\r\n }\r\n\r\n if (options.form !== undefined) {\r\n headers['content-type'] = 'application/x-www-form-urlencoded';\r\n } else if (options.json !== undefined) {\r\n headers['content-type'] = 'application/json';\r\n } else if (options.text !== undefined) {\r\n headers['content-type'] = 'text/plain';\r\n } else if (options.body !== undefined) {\r\n headers['content-type'] = options.contentType ?? 'application/octet-stream';\r\n }\r\n\r\n if (options.deviceId) {\r\n headers['x-epic-device-id'] = options.deviceId;\r\n }\r\n\r\n for (const [key, value] of Object.entries(options.headers ?? {})) {\r\n headers[key.toLowerCase()] = value;\r\n }\r\n\r\n return headers;\r\n }\r\n\r\n private composeBody(options: EpicRequestOptions): string | Uint8Array | undefined {\r\n if (options.form !== undefined) return encodeForm(options.form);\r\n if (options.json !== undefined) return JSON.stringify(options.json);\r\n if (options.text !== undefined) return options.text;\r\n if (options.body !== undefined) return options.body;\r\n return undefined;\r\n }\r\n\r\n private normalizeError(\r\n error: unknown,\r\n url: string,\r\n timedOut: boolean,\r\n options: EpicRequestOptions,\r\n ): Error {\r\n const isAbort =\r\n error instanceof Error && (error.name === 'AbortError' || error.name === 'TimeoutError');\r\n\r\n if (timedOut && isAbort) {\r\n const timeout = options.timeout ?? this.timeout;\r\n return new TimeoutError(`Epic request to ${url} timed out after ${timeout}ms`, {\r\n timeout,\r\n url,\r\n });\r\n }\r\n\r\n if (isAbort || options.signal?.aborted === true) {\r\n return new AbortError(`Epic request to ${url} was aborted`, { url });\r\n }\r\n\r\n return new NetworkError(\r\n error instanceof Error ? error.message : `Network request to ${url} failed`,\r\n { url, cause: error },\r\n );\r\n }\r\n}\r\n\r\nfunction isEpicError(error: unknown): boolean {\r\n return error instanceof Error && error.name.startsWith('Epic');\r\n}\r\n\r\nfunction parseBody(\r\n text: string,\r\n contentType: string | undefined,\r\n url: string,\r\n ok: boolean,\r\n): unknown {\r\n if (text.length === 0) return null;\r\n\r\n const looksJson =\r\n contentType?.includes('json') === true || /^\\s*[[{]/.test(text) || /^\\s*\"/.test(text);\r\n\r\n if (!looksJson) return text;\r\n\r\n try {\r\n return JSON.parse(text) as unknown;\r\n } catch (cause) {\r\n if (!ok) return text;\r\n throw new ParseError('Failed to parse Epic response body as JSON', { url, raw: text, cause });\r\n }\r\n}\r\n","import { AbortError, ValidationError } from '../core/errors.js';\r\nimport type { QueryParams } from '../core/types.js';\r\nimport { sleep } from '../core/utils.js';\r\nimport { EpicAuthError } from './errors.js';\r\nimport type { AuthClient } from './clients.js';\r\nimport type { EpicRestClient } from './rest.js';\r\nimport type {\r\n DeviceAuthCredentials,\r\n DeviceCode,\r\n ExchangeCode,\r\n GrantType,\r\n KillType,\r\n OAuthToken,\r\n TokenType,\r\n VerifyResponse,\r\n} from './types.js';\r\n\r\nconst TOKEN_PATH = '/account/api/oauth/token';\r\nconst VERIFY_PATH = '/account/api/oauth/verify';\r\nconst EXCHANGE_PATH = '/account/api/oauth/exchange';\r\nconst DEVICE_AUTHORIZATION_PATH = '/account/api/oauth/deviceAuthorization';\r\nconst KILL_SESSION_PATH = '/account/api/oauth/sessions/kill';\r\n\r\nconst EG1_DEFAULT_GRANTS = new Set<GrantType>([\r\n 'device_auth',\r\n 'authorization_code',\r\n 'exchange_code',\r\n 'refresh_token',\r\n 'device_code',\r\n 'continuation_token',\r\n 'token_to_token',\r\n 'external_auth',\r\n 'otp',\r\n 'password',\r\n]);\r\n\r\nexport interface TokenRequestOptions {\r\n tokenType?: TokenType;\r\n includePerms?: boolean;\r\n deploymentId?: string;\r\n deviceId?: string;\r\n scope?: string | string[];\r\n signal?: AbortSignal;\r\n timeout?: number;\r\n}\r\n\r\nexport interface ExchangeCodeOptions {\r\n consumingClientId?: string;\r\n codeChallenge?: string;\r\n codeChallengeMethod?: 'S256' | 'plain';\r\n signal?: AbortSignal;\r\n timeout?: number;\r\n}\r\n\r\nexport interface DeviceCodePendingInfo {\r\n attempt: number;\r\n intervalMs: number;\r\n expiresInMs: number;\r\n}\r\n\r\nexport interface DeviceCodePollOptions {\r\n signal?: AbortSignal;\r\n intervalMs?: number;\r\n maxAttempts?: number;\r\n expiresAt?: Date;\r\n onPending?: (info: DeviceCodePendingInfo) => void;\r\n onCanceled?: (error: EpicAuthError) => void;\r\n}\r\n\r\nfunction requireString(value: unknown, parameter: string): string {\r\n if (typeof value !== 'string' || value.trim().length === 0) {\r\n throw new ValidationError(`\"${parameter}\" is required and must be a non-empty string`, parameter);\r\n }\r\n return value;\r\n}\r\n\r\nfunction isPendingError(error: unknown): 'pending' | 'slow_down' | null {\r\n if (!(error instanceof EpicAuthError)) return null;\r\n const code = error.errorCode ?? '';\r\n if (code.includes('authorization_pending')) return 'pending';\r\n if (code.includes('slow_down')) return 'slow_down';\r\n return null;\r\n}\r\n\r\nexport class AuthManager {\r\n constructor(private readonly rest: EpicRestClient) {}\r\n\r\n async token(\r\n client: AuthClient,\r\n grantType: GrantType,\r\n fields: Record<string, string | undefined>,\r\n options: TokenRequestOptions = {},\r\n ): Promise<OAuthToken> {\r\n const form: Record<string, string | undefined> = {\r\n grant_type: grantType,\r\n ...fields,\r\n };\r\n\r\n if (options.tokenType) form['token_type'] = options.tokenType;\r\n else if (EG1_DEFAULT_GRANTS.has(grantType)) form['token_type'] = 'eg1';\r\n if (options.includePerms !== undefined) form['includePerms'] = String(options.includePerms);\r\n if (options.deploymentId) form['deployment_id'] = options.deploymentId;\r\n if (options.scope) {\r\n form['scope'] = Array.isArray(options.scope) ? options.scope.join(' ') : options.scope;\r\n }\r\n\r\n const requestOptions = {\r\n form,\r\n basic: client,\r\n ...(options.deviceId ? { deviceId: options.deviceId } : {}),\r\n ...(options.signal ? { signal: options.signal } : {}),\r\n ...(options.timeout !== undefined ? { timeout: options.timeout } : {}),\r\n };\r\n\r\n const response = await this.rest.request<OAuthToken>('POST', TOKEN_PATH, requestOptions);\r\n return response.data;\r\n }\r\n\r\n clientCredentials(client: AuthClient, options?: TokenRequestOptions): Promise<OAuthToken> {\r\n return this.token(client, 'client_credentials', {}, options);\r\n }\r\n\r\n authorizationCode(\r\n client: AuthClient,\r\n code: string,\r\n options?: TokenRequestOptions & { codeVerifier?: string },\r\n ): Promise<OAuthToken> {\r\n requireString(code, 'code');\r\n return this.token(\r\n client,\r\n 'authorization_code',\r\n { code, code_verifier: options?.codeVerifier },\r\n options,\r\n );\r\n }\r\n\r\n exchangeCode(\r\n client: AuthClient,\r\n code: string,\r\n options?: TokenRequestOptions & { codeVerifier?: string },\r\n ): Promise<OAuthToken> {\r\n requireString(code, 'code');\r\n return this.token(\r\n client,\r\n 'exchange_code',\r\n { exchange_code: code, code_verifier: options?.codeVerifier },\r\n options,\r\n );\r\n }\r\n\r\n deviceAuth(\r\n client: AuthClient,\r\n credentials: DeviceAuthCredentials,\r\n options?: TokenRequestOptions,\r\n ): Promise<OAuthToken> {\r\n requireString(credentials?.accountId, 'accountId');\r\n requireString(credentials?.deviceId, 'deviceId');\r\n requireString(credentials?.secret, 'secret');\r\n return this.token(\r\n client,\r\n 'device_auth',\r\n {\r\n account_id: credentials.accountId,\r\n device_id: credentials.deviceId,\r\n secret: credentials.secret,\r\n },\r\n options,\r\n );\r\n }\r\n\r\n deviceCode(client: AuthClient, deviceCode: string, options?: TokenRequestOptions): Promise<OAuthToken> {\r\n requireString(deviceCode, 'deviceCode');\r\n return this.token(client, 'device_code', { device_code: deviceCode }, options);\r\n }\r\n\r\n async pollDeviceCode(\r\n client: AuthClient,\r\n deviceCode: string,\r\n options: DeviceCodePollOptions = {},\r\n ): Promise<OAuthToken> {\r\n requireString(deviceCode, 'deviceCode');\r\n\r\n let intervalMs = Math.max(1, options.intervalMs ?? 10_000);\r\n const deadline = options.expiresAt?.getTime();\r\n const maxAttempts = options.maxAttempts ?? Number.POSITIVE_INFINITY;\r\n let attempt = 0;\r\n\r\n const fail = (error: unknown): never => {\r\n if (error instanceof EpicAuthError) options.onCanceled?.(error);\r\n throw error;\r\n };\r\n\r\n for (;;) {\r\n if (options.signal?.aborted) {\r\n throw new AbortError('Device code polling was aborted', { url: this.tokenUrl() });\r\n }\r\n if (deadline !== undefined && Date.now() >= deadline) {\r\n fail(this.deviceCodeError('Device code expired before it was authorized', 'device_code_expired'));\r\n }\r\n\r\n attempt += 1;\r\n\r\n try {\r\n return await this.deviceCode(\r\n client,\r\n deviceCode,\r\n options.signal ? { signal: options.signal } : undefined,\r\n );\r\n } catch (error) {\r\n const pending = isPendingError(error);\r\n if (!pending) fail(error);\r\n\r\n if (pending === 'slow_down') intervalMs += 5_000;\r\n if (attempt >= maxAttempts) fail(error);\r\n\r\n options.onPending?.({\r\n attempt,\r\n intervalMs,\r\n expiresInMs: deadline === undefined ? Number.POSITIVE_INFINITY : deadline - Date.now(),\r\n });\r\n\r\n try {\r\n await sleep(intervalMs, options.signal);\r\n } catch {\r\n throw new AbortError('Device code polling was aborted', { url: this.tokenUrl() });\r\n }\r\n }\r\n }\r\n }\r\n\r\n private tokenUrl(): string {\r\n return this.rest.buildUrl(TOKEN_PATH);\r\n }\r\n\r\n private deviceCodeError(message: string, code: string): EpicAuthError {\r\n return new EpicAuthError(message, {\r\n status: 400,\r\n method: 'POST',\r\n url: this.tokenUrl(),\r\n body: {\r\n errorCode: `errors.com.epicgames.account.oauth.${code}`,\r\n errorMessage: message,\r\n },\r\n });\r\n }\r\n\r\n refreshToken(\r\n client: AuthClient,\r\n refreshToken: string,\r\n options?: TokenRequestOptions,\r\n ): Promise<OAuthToken> {\r\n requireString(refreshToken, 'refreshToken');\r\n return this.token(client, 'refresh_token', { refresh_token: refreshToken }, options);\r\n }\r\n\r\n continuationToken(\r\n client: AuthClient,\r\n continuationToken: string,\r\n options?: TokenRequestOptions,\r\n ): Promise<OAuthToken> {\r\n requireString(continuationToken, 'continuationToken');\r\n return this.token(client, 'continuation_token', { continuation_token: continuationToken }, options);\r\n }\r\n\r\n password(\r\n client: AuthClient,\r\n username: string,\r\n passwordValue: string,\r\n options?: TokenRequestOptions,\r\n ): Promise<OAuthToken> {\r\n requireString(username, 'username');\r\n requireString(passwordValue, 'password');\r\n return this.token(client, 'password', { username, password: passwordValue }, options);\r\n }\r\n\r\n otp(\r\n client: AuthClient,\r\n otp: string,\r\n challenge: string,\r\n options?: TokenRequestOptions,\r\n ): Promise<OAuthToken> {\r\n requireString(otp, 'otp');\r\n requireString(challenge, 'challenge');\r\n return this.token(client, 'otp', { otp, challenge }, options);\r\n }\r\n\r\n externalAuth(\r\n client: AuthClient,\r\n externalAuthType: string,\r\n externalAuthToken: string,\r\n options?: TokenRequestOptions,\r\n ): Promise<OAuthToken> {\r\n requireString(externalAuthType, 'externalAuthType');\r\n requireString(externalAuthToken, 'externalAuthToken');\r\n return this.token(\r\n client,\r\n 'external_auth',\r\n { external_auth_type: externalAuthType, external_auth_token: externalAuthToken },\r\n options,\r\n );\r\n }\r\n\r\n tokenToToken(client: AuthClient, accessToken: string, options?: TokenRequestOptions): Promise<OAuthToken> {\r\n requireString(accessToken, 'accessToken');\r\n return this.token(client, 'token_to_token', { access_token: accessToken }, options);\r\n }\r\n\r\n async verify(accessToken: string, options?: { includePerms?: boolean; signal?: AbortSignal }): Promise<VerifyResponse> {\r\n requireString(accessToken, 'accessToken');\r\n const query: QueryParams = {};\r\n if (options?.includePerms !== undefined) query['includePerms'] = options.includePerms;\r\n\r\n const response = await this.rest.request<VerifyResponse>('GET', VERIFY_PATH, {\r\n bearer: accessToken,\r\n query,\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n });\r\n return response.data;\r\n }\r\n\r\n async createExchangeCode(accessToken: string, options: ExchangeCodeOptions = {}): Promise<ExchangeCode> {\r\n requireString(accessToken, 'accessToken');\r\n const query: QueryParams = {};\r\n if (options.consumingClientId) query['consumingClientId'] = options.consumingClientId;\r\n if (options.codeChallenge) query['codeChallenge'] = options.codeChallenge;\r\n if (options.codeChallengeMethod) query['codeChallengeMethod'] = options.codeChallengeMethod;\r\n\r\n const response = await this.rest.request<ExchangeCode>('GET', EXCHANGE_PATH, {\r\n bearer: accessToken,\r\n query,\r\n ...(options.signal ? { signal: options.signal } : {}),\r\n });\r\n return response.data;\r\n }\r\n\r\n async createDeviceCode(clientAccessToken: string, options?: { signal?: AbortSignal }): Promise<DeviceCode> {\r\n requireString(clientAccessToken, 'clientAccessToken');\r\n const response = await this.rest.request<DeviceCode>('POST', DEVICE_AUTHORIZATION_PATH, {\r\n bearer: clientAccessToken,\r\n form: { prompt: 'login' },\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n });\r\n return response.data;\r\n }\r\n\r\n async deleteDeviceCode(clientAccessToken: string, userCode: string, options?: { signal?: AbortSignal }): Promise<void> {\r\n requireString(clientAccessToken, 'clientAccessToken');\r\n requireString(userCode, 'userCode');\r\n await this.rest.request<null>(\r\n 'DELETE',\r\n `${DEVICE_AUTHORIZATION_PATH}/${encodeURIComponent(userCode)}`,\r\n {\r\n bearer: clientAccessToken,\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n },\r\n );\r\n }\r\n\r\n async killSession(\r\n accessToken: string,\r\n options?: { killAllWithSameSource?: boolean; signal?: AbortSignal },\r\n ): Promise<void> {\r\n requireString(accessToken, 'accessToken');\r\n const query: QueryParams = {};\r\n if (options?.killAllWithSameSource !== undefined) {\r\n query['killAllWithSameSource'] = options.killAllWithSameSource;\r\n }\r\n\r\n await this.rest.request<null>(\r\n 'DELETE',\r\n `${KILL_SESSION_PATH}/${encodeURIComponent(accessToken)}`,\r\n {\r\n bearer: accessToken,\r\n query,\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n },\r\n );\r\n }\r\n\r\n async killSessions(\r\n accessToken: string,\r\n killType: KillType,\r\n options?: { signal?: AbortSignal },\r\n ): Promise<void> {\r\n requireString(accessToken, 'accessToken');\r\n await this.rest.request<null>('DELETE', KILL_SESSION_PATH, {\r\n bearer: accessToken,\r\n query: { killType },\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n });\r\n }\r\n}\r\n","import type { AuthManager, DeviceCodePollOptions } from './auth.js';\nimport type { AuthClient } from './clients.js';\nimport type { EpicAuthSession } from './session.js';\nimport type { DeviceCode, OAuthToken } from './types.js';\n\nexport class DeviceCodeFlow {\n public readonly client: AuthClient;\n public readonly userCode: string;\n public readonly deviceCode: string;\n public readonly verificationUri: string;\n public readonly verificationUriComplete: string;\n public readonly intervalSeconds: number;\n public readonly expiresAt: Date;\n\n private readonly auth: AuthManager;\n private readonly toSession: (token: OAuthToken) => EpicAuthSession;\n\n constructor(\n auth: AuthManager,\n toSession: (token: OAuthToken) => EpicAuthSession,\n client: AuthClient,\n response: DeviceCode,\n ) {\n this.auth = auth;\n this.toSession = toSession;\n this.client = client;\n this.userCode = response.user_code;\n this.deviceCode = response.device_code;\n this.verificationUri = response.verification_uri;\n this.verificationUriComplete = response.verification_uri_complete;\n this.intervalSeconds = response.interval;\n this.expiresAt = new Date(Date.now() + response.expires_in * 1000);\n }\n\n get expiresInMs(): number {\n return this.expiresAt.getTime() - Date.now();\n }\n\n get isExpired(): boolean {\n return this.expiresInMs <= 0;\n }\n\n pollForToken(options: DeviceCodePollOptions = {}): Promise<OAuthToken> {\n return this.auth.pollDeviceCode(this.client, this.deviceCode, {\n intervalMs: this.intervalSeconds * 1000,\n expiresAt: this.expiresAt,\n ...options,\n });\n }\n\n async poll(options: DeviceCodePollOptions = {}): Promise<EpicAuthSession> {\n const token = await this.pollForToken(options);\n return this.toSession(token);\n }\n}\n","export const MCP_OPERATIONS = [\n 'AbandonExpedition', 'ActivateConsumable', 'AddToCollection', 'ApplyVote',\n 'AssignDefenderToLoadout', 'AssignGadgetToLoadout', 'AssignHeroToLoadout',\n 'AssignTeamPerkToLoadout', 'AssignWeaponToDefender', 'AssignWorkerToSquad',\n 'AssignWorkerToSquadBatch', 'AthenaPinQuest', 'AthenaRemoveQuests', 'AthenaTrackQuests',\n 'BulkUpdateCollections', 'CancelOrResumeSubscription', 'ChallengeBundleLevelUp',\n 'ClaimCollectedResources', 'ClaimCollectionBookPageRewards', 'ClaimCollectionBookRewards',\n 'ClaimImportFriendsReward', 'ClaimLoginReward', 'ClaimMfaEnabled', 'ClaimMissionAlertRewards',\n 'ClaimQuestReward', 'ClaimSubscriptionRewards', 'ClearHeroLoadout', 'ClientQuestLogin',\n 'CollectExpedition', 'CompletePlayerSurvey', 'ConvertItem', 'ConvertLegacyAlterations',\n 'ConvertSlottedItem', 'CopyCosmeticLoadout', 'CraftWorldItem', 'CreateNewBattleLabFile',\n 'CreateNewIsland', 'CreateNewIslandFromLinkCode', 'DeleteBattleLabIsland',\n 'DeleteCosmeticLoadout', 'DeleteIsland', 'DeleteModularCosmeticLoadout',\n 'DepositPostResources', 'DestroyWorldItems', 'DisassembleWorldItems', 'DuplicateIsland',\n 'EndBattleRoyaleGame', 'EndBattleRoyaleGameV2', 'EquipModularCosmeticLoadoutPreset',\n 'ExchangeGameCurrencyForBattlePassOffer', 'ExchangeGameCurrencyForSeasonPassOffer',\n 'ExchangeGiftToken', 'ExecuteTerminalCommand', 'FortRerollDailyQuest', 'GiftCatalogEntry',\n 'InitializeTheater', 'IssueFriendCode', 'LockProfileForWrite', 'MarkCollectedItemsSeen',\n 'MarkItemSeen', 'MarkNewQuestNotificationSent', 'ModifyCreativePlotPermissions',\n 'ModifyMission', 'ModifyQuickbar', 'OpenCardPack', 'OpenCardPackBatch',\n 'PopulatePrerolledOffers', 'PromoteItem', 'ProtoJuno_CreateWorld',\n 'ProtoJuno_DeleteAllWorlds', 'ProtoJuno_DeleteWorld', 'ProtoJuno_MarkWorldDeleted',\n 'ProtoJuno_SetWorldName', 'ProtoJuno_UpdateWorldLastAccessTime',\n 'ProtoJuno_UpdateWorldMetadata', 'ProtoJuno_UpdateWorldSysMetadata', 'PurchaseCatalogEntry',\n 'PurchaseMultipleCatalogEntries', 'PurchaseOrUpgradeHomebaseNode',\n 'PurchaseResearchStatUpgrade', 'PutModularCosmeticLoadout', 'QueryProfile',\n 'QueryPublicProfile', 'RecordCampaignMatchEnded', 'RecycleItem', 'RecycleItemBatch',\n 'RedeemRealMoneyPurchases', 'RedeemResearchToken', 'RedeemSTWAccoladeTokens',\n 'RefreshExpeditions', 'RefundItem', 'RefundMtxPurchase', 'RemoveGiftBox',\n 'ReportConsumableUsed', 'RequestRestedStateIncrease', 'ResearchItemFromCollectionBook',\n 'RespecAlteration', 'RespecResearch', 'RespecUpgrades', 'RestoreDeletedIsland',\n 'ServerQuestLogin', 'SetActiveArchetype', 'SetActiveHeroLoadout', 'SetAffiliateName',\n 'SetCosmeticLockerBanner', 'SetCosmeticLockerName', 'SetCosmeticLockerSlot',\n 'SetCosmeticLockerSlots', 'SetCreativePlotMetadata', 'SetFactionChoice',\n 'SetForcedIntroPlayed', 'SetGameplayStats', 'SetHardcoreModifier', 'SetHeroCosmeticVariants',\n 'SetHomebaseBanner', 'SetHomebaseName', 'SetIntroGamePlayed', 'SetItemArchivedStatusBatch',\n 'SetItemFavoriteStatus', 'SetItemFavoriteStatusBatch', 'SetLastUsedBattleLabFile',\n 'SetLastUsedCreativePlot', 'SetLastUsedProject', 'SetLoadoutShuffleEnabled',\n 'SetMatchmakingBansViewed', 'SetMtxPlatform', 'SetPartyAssistQuest', 'SetPinnedQuests',\n 'SetRandomCosmeticLoadoutFlag', 'SetReceiveGiftsEnabled', 'SetRewardGraphConfig',\n 'SetSeasonPassAutoClaim', 'SkipTutorial', 'StartExpedition', 'StorageTransfer',\n 'ToggleQuestActiveState', 'UnassignAllSquads', 'UnlockProfileForWrite', 'UnlockRewardNode',\n 'UnslotItemFromCollectionBook', 'UpdatePlotPublishInfo', 'UpdateQuestClientObjectives',\n 'UpdateQuests', 'UpgradeAlteration', 'UpgradeItem', 'UpgradeItemBulk', 'UpgradeItemRarity',\n 'UpgradeSlottedItem', 'VerifyRealMoneyPurchase',\n] as const;\n","import { ConfigurationError, ValidationError } from '../core/errors.js';\nimport type { QueryParams } from '../core/types.js';\nimport type { EpicRestClient } from './rest.js';\nimport { MCP_OPERATIONS } from './mcp-operations.generated.js';\n\nexport interface MCPClientOptions {\n allowCustomOperations?: boolean;\n}\n\nexport const MCP_BASE_URL = 'https://fngw-mcp-gc-livefn.ol.epicgames.com';\n\nexport const STOREFRONT_CATALOG_PATH = '/fortnite/api/storefront/v2/catalog';\n\nexport const MCPProfile = {\n athena: 'athena',\n creative: 'creative',\n campaign: 'campaign',\n commonPublic: 'common_public',\n collections: 'collections',\n commonCore: 'common_core',\n metadata: 'metadata',\n collectionBookPeople: 'collection_book_people0',\n collectionBookSchematics: 'collection_book_schematics0',\n outpost: 'outpost0',\n theater0: 'theater0',\n theater1: 'theater1',\n theater2: 'theater2',\n recycleBin: 'recycle_bin',\n} as const;\n\nexport type MCPProfileId = (typeof MCPProfile)[keyof typeof MCPProfile];\n\nexport const MCPRoute = {\n client: 'client',\n public: 'public',\n dedicatedServer: 'dedicated_server',\n} as const;\n\nexport type MCPRouteName = (typeof MCPRoute)[keyof typeof MCPRoute];\n\nexport { MCP_OPERATIONS };\n\nexport type MCPOperation = (typeof MCP_OPERATIONS)[number];\n\nexport const MCP_OPERATIONS_SOURCE_URL =\n 'https://api.github.com/repos/LeleDerGrasshalmi/FortniteEndpointsDocumentation/contents/EpicGames/FN-Service/Game/Profile/Operations';\n\nconst MCP_OPERATION_SET = new Set<string>(MCP_OPERATIONS);\n\nexport function isMCPOperation(value: unknown): value is MCPOperation {\n return typeof value === 'string' && MCP_OPERATION_SET.has(value);\n}\n\nexport function knownMCPOperations(): string[] {\n return [...MCP_OPERATION_SET];\n}\n\nexport interface RefreshMCPOperationsOptions {\n fetch?: typeof fetch;\n signal?: AbortSignal;\n url?: string;\n}\n\ninterface GitHubContentEntry {\n name: string;\n type: string;\n}\n\nexport async function refreshMCPOperations(\n options: RefreshMCPOperationsOptions = {},\n): Promise<string[]> {\n const fetchImpl = options.fetch ?? globalThis.fetch;\n if (typeof fetchImpl !== 'function') {\n throw new ConfigurationError(\n 'No fetch implementation available. Pass `fetch` in RefreshMCPOperationsOptions.',\n 'fetch',\n );\n }\n\n const url = options.url ?? MCP_OPERATIONS_SOURCE_URL;\n const response = await fetchImpl(url, {\n headers: { Accept: 'application/vnd.github+json' },\n ...(options.signal ? { signal: options.signal } : {}),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch MCP operations (${response.status} ${response.statusText})`);\n }\n\n const entries = (await response.json()) as GitHubContentEntry[];\n if (!Array.isArray(entries)) {\n throw new Error('Unexpected response shape while refreshing MCP operations');\n }\n\n const added: string[] = [];\n for (const entry of entries) {\n if (entry.type !== 'file' || !entry.name.endsWith('.md')) continue;\n const name = entry.name.slice(0, -'.md'.length);\n if (!MCP_OPERATION_SET.has(name)) {\n MCP_OPERATION_SET.add(name);\n added.push(name);\n }\n }\n\n return added;\n}\n\nexport interface MCPResponse<T = unknown> {\n profileRevision: number;\n profileId: string;\n profileChangesBaseRevision: number;\n profileChanges: T[];\n profileCommandRevision: number;\n serverTime: string;\n responseVersion: number;\n [key: string]: unknown;\n}\n\nexport interface MCPOperationOptions {\n profileId?: MCPProfileId | (string & {});\n route?: MCPRouteName | (string & {});\n rvn?: number;\n payload?: unknown;\n signal?: AbortSignal;\n timeout?: number;\n}\n\nfunction requireString(value: unknown, parameter: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(`\"${parameter}\" is required and must be a non-empty string`, parameter);\n }\n return value;\n}\n\nexport class MCPClient {\n private readonly allowCustomOperations: boolean;\n\n constructor(\n private readonly rest: EpicRestClient,\n options: MCPClientOptions = {},\n ) {\n this.allowCustomOperations = options.allowCustomOperations ?? false;\n }\n\n async operation<T = unknown>(\n accessToken: string,\n accountId: string,\n operation: MCPOperation | (string & {}),\n options: MCPOperationOptions = {},\n ): Promise<MCPResponse<T>> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n requireString(operation, 'operation');\n\n if (!isMCPOperation(operation) && !this.allowCustomOperations) {\n throw new ConfigurationError(\n `Unknown MCP operation \"${operation}\". Pass \\`allowCustomMcpOperations: true\\` to the ` +\n 'EpicGamesClient constructor to call operations not in MCP_OPERATIONS.',\n 'allowCustomMcpOperations',\n );\n }\n\n const route = options.route ?? 'client';\n const path =\n `/fortnite/api/game/v2/profile/${encodeURIComponent(accountId)}/${route}/${operation}`;\n const query: QueryParams = {\n profileId: options.profileId ?? 'common_core',\n rvn: options.rvn ?? -1,\n };\n\n const response = await this.rest.request<MCPResponse<T>>('POST', path, {\n bearer: accessToken,\n query,\n json: options.payload ?? {},\n ...(options.signal ? { signal: options.signal } : {}),\n ...(options.timeout !== undefined ? { timeout: options.timeout } : {}),\n });\n return response.data;\n }\n\n async storefrontCatalog<T = unknown>(\n accessToken: string,\n options: { signal?: AbortSignal; timeout?: number } = {},\n ): Promise<T> {\n requireString(accessToken, 'accessToken');\n const response = await this.rest.request<T>('GET', STOREFRONT_CATALOG_PATH, {\n bearer: accessToken,\n ...(options.signal ? { signal: options.signal } : {}),\n ...(options.timeout !== undefined ? { timeout: options.timeout } : {}),\n });\n return response.data;\n }\n\n refreshOperations(options: RefreshMCPOperationsOptions = {}): Promise<string[]> {\n return refreshMCPOperations(options);\n }\n\n queryProfile<T = unknown>(\n accessToken: string,\n accountId: string,\n profileId: MCPProfileId | (string & {}) = 'common_core',\n options: Omit<MCPOperationOptions, 'profileId'> = {},\n ): Promise<MCPResponse<T>> {\n return this.operation<T>(accessToken, accountId, 'QueryProfile', { ...options, profileId });\n }\n\n queryPublicProfile<T = unknown>(\n accessToken: string,\n accountId: string,\n profileId: MCPProfileId | (string & {}) = 'common_core',\n options: Omit<MCPOperationOptions, 'profileId' | 'route'> = {},\n ): Promise<MCPResponse<T>> {\n return this.operation<T>(accessToken, accountId, 'QueryPublicProfile', {\n ...options,\n profileId,\n route: 'public',\n });\n }\n}\n","import { ValidationError } from '../core/errors.js';\nimport type { AuthClient } from './clients.js';\nimport type { EpicRestClient } from './rest.js';\n\nexport const EOS_AUTH_BASE_URL = 'https://api.epicgames.dev';\nexport const LOCKER_BASE_URL = 'https://fngw-svc-gc-livefn.ol.epicgames.com';\nexport const FN_LIVE_DEPLOYMENT_ID = '62a9473a2dca46b29ccf17577fcf42d7';\n\nconst EOS_TOKEN_PATH = '/auth/v1/oauth/token';\nconst EAS_TOKEN_PATH = '/epic/oauth/v2/token';\nconst NONCE_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\nexport interface EosToken {\n access_token: string;\n token_type: string;\n expires_at: string;\n expires_in: number;\n account_id?: string;\n organization_user_id?: string;\n product_user_id?: string;\n deployment_id: string;\n id_token?: string;\n features?: string[];\n [key: string]: unknown;\n}\n\nexport interface LockerItemCustomization {\n channelTag?: string;\n variantTag?: string;\n additionalData?: string;\n}\n\nexport interface LockerLoadoutSlot {\n slotTemplate: string;\n equippedItemId?: string;\n itemCustomizations?: LockerItemCustomization[];\n}\n\nexport interface LockerSchemaLoadout {\n loadoutSlots: LockerLoadoutSlot[];\n shuffleType?: string;\n}\n\nexport interface LockerActiveLoadoutGroup {\n deploymentId?: string;\n accountId?: string;\n athenaItemId?: string;\n creationTime?: string;\n updatedTime?: string;\n loadouts: Record<string, LockerSchemaLoadout>;\n shuffleType?: string;\n}\n\nexport interface LockerItemsResponse {\n activeLoadoutGroup?: LockerActiveLoadoutGroup;\n loadoutGroupPresets?: unknown[];\n loadoutPresets?: unknown[];\n}\n\nexport interface EosTokenOptions {\n deploymentId?: string;\n signal?: AbortSignal;\n}\n\nexport interface EasToken {\n access_token: string;\n token_type: string;\n expires_in: number;\n expires_at?: string;\n refresh_token?: string;\n refresh_expires?: number;\n refresh_expires_at?: string;\n account_id?: string;\n scope?: string;\n client_id?: string;\n application_id?: string;\n [key: string]: unknown;\n}\n\nexport interface EasRefreshGrantOptions {\n deploymentId?: string;\n scope?: string;\n signal?: AbortSignal;\n}\n\nexport const EAS_DEFAULT_SCOPE = 'basic_profile friends_list presence openid';\n\nexport interface EosIdAccount {\n accountId: string;\n displayName: string;\n preferredLanguage?: string;\n linkedAccounts?: Record<string, string>;\n cabinedMode?: boolean;\n [key: string]: unknown;\n}\n\nexport interface EosProductUserMapping {\n productUserId: string;\n accountId?: string;\n accountIdType?: string;\n [key: string]: unknown;\n}\n\nfunction requireString(value: unknown, parameter: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(`\"${parameter}\" is required and must be a non-empty string`, parameter);\n }\n return value;\n}\n\nfunction requireIdList(ids: unknown, parameter: string): string[] {\n if (!Array.isArray(ids) || ids.length === 0) {\n throw new ValidationError(`\"${parameter}\" must be a non-empty array`, parameter);\n }\n if (ids.length > 100) {\n throw new ValidationError(`\"${parameter}\" accepts at most 100 ids per request`, parameter);\n }\n return ids as string[];\n}\n\nfunction randomNonce(length = 22): string {\n const bytes = new Uint8Array(length);\n globalThis.crypto.getRandomValues(bytes);\n let out = '';\n for (const byte of bytes) out += NONCE_ALPHABET[byte % NONCE_ALPHABET.length];\n return out;\n}\n\nexport class EosConnectManager {\n constructor(private readonly rest: EpicRestClient) {}\n\n async token(client: AuthClient, epicAccessToken: string, options: EosTokenOptions = {}): Promise<EosToken> {\n if (typeof epicAccessToken !== 'string' || epicAccessToken.length === 0) {\n throw new ValidationError('\"epicAccessToken\" is required to exchange for an EOS token', 'epicAccessToken');\n }\n const response = await this.rest.request<EosToken>('POST', EOS_TOKEN_PATH, {\n basic: client,\n form: {\n grant_type: 'external_auth',\n external_auth_type: 'epicgames_access_token',\n external_auth_token: epicAccessToken,\n deployment_id: options.deploymentId ?? FN_LIVE_DEPLOYMENT_ID,\n nonce: randomNonce(),\n },\n ...(options.signal ? { signal: options.signal } : {}),\n });\n return response.data;\n }\n\n async easToken(client: AuthClient, options: { signal?: AbortSignal } = {}): Promise<EasToken> {\n const response = await this.rest.request<EasToken>('POST', EAS_TOKEN_PATH, {\n basic: client,\n form: { grant_type: 'client_credentials' },\n ...(options.signal ? { signal: options.signal } : {}),\n });\n return response.data;\n }\n\n async easRefreshGrant(\n client: AuthClient,\n refreshToken: string,\n options: EasRefreshGrantOptions = {},\n ): Promise<EasToken> {\n requireString(refreshToken, 'refreshToken');\n const response = await this.rest.request<EasToken>('POST', EAS_TOKEN_PATH, {\n basic: client,\n form: {\n grant_type: 'refresh_token',\n refresh_token: refreshToken,\n scope: options.scope ?? EAS_DEFAULT_SCOPE,\n deployment_id: options.deploymentId ?? FN_LIVE_DEPLOYMENT_ID,\n },\n ...(options.signal ? { signal: options.signal } : {}),\n });\n return response.data;\n }\n\n async queryAccounts(\n easAccessToken: string,\n accountIds: string[],\n options: { signal?: AbortSignal } = {},\n ): Promise<EosIdAccount[]> {\n requireString(easAccessToken, 'easAccessToken');\n const ids = requireIdList(accountIds, 'accountIds');\n const response = await this.rest.request<EosIdAccount[]>('GET', '/epic/id/v2/accounts', {\n bearer: easAccessToken,\n query: { accountId: ids },\n ...(options.signal ? { signal: options.signal } : {}),\n });\n return response.data;\n }\n\n async queryProductUsers(\n eosAccessToken: string,\n productUserIds: string[],\n options: { signal?: AbortSignal } = {},\n ): Promise<EosProductUserMapping[]> {\n requireString(eosAccessToken, 'eosAccessToken');\n const ids = requireIdList(productUserIds, 'productUserIds');\n const response = await this.rest.request<EosProductUserMapping[]>('GET', '/user/v1/product-users', {\n bearer: eosAccessToken,\n query: { productUserId: ids },\n ...(options.signal ? { signal: options.signal } : {}),\n });\n return response.data;\n }\n}\n\nexport class LockerService {\n constructor(private readonly rest: EpicRestClient) {}\n\n async items(eosAccessToken: string, accountId: string, options: EosTokenOptions = {}): Promise<LockerItemsResponse> {\n if (typeof eosAccessToken !== 'string' || eosAccessToken.length === 0) {\n throw new ValidationError('\"eosAccessToken\" is required', 'eosAccessToken');\n }\n if (typeof accountId !== 'string' || accountId.length === 0) {\n throw new ValidationError('\"accountId\" is required', 'accountId');\n }\n const deploymentId = options.deploymentId ?? FN_LIVE_DEPLOYMENT_ID;\n const path = `/api/locker/v4/${encodeURIComponent(deploymentId)}/account/${encodeURIComponent(accountId)}/items`;\n const response = await this.rest.request<LockerItemsResponse>('GET', path, {\n bearer: eosAccessToken,\n ...(options.signal ? { signal: options.signal } : {}),\n });\n return response.data;\n }\n}\n","import { ValidationError } from '../core/errors.js';\nimport { sleep } from '../core/utils.js';\nimport { EpicApiError } from './errors.js';\nimport type { EpicRestClient } from './rest.js';\n\nexport const PARTY_BASE_URL = 'https://party-service-prod.ol.epicgames.com';\nexport const PARTY_BUILD_ID = '1:3:';\nexport const PARTY_DEFAULT_PLATFORM = 'WIN';\n\nconst BASE = '/party/api/v1/Fortnite';\nconst COSMETIC_ROOT = '/BRCosmetics/Athena/Items/Cosmetics';\n\nconst MP_LOADOUT_KEY = 'Default:MpLoadout1_j';\nconst MP_LOADOUT2_KEY = 'Default:MpLoadout2_j';\nconst EMOTE_KEY = 'Default:FrontendEmote_j';\nconst JAM_KEY = 'Default:FrontendSparksSongPart_j';\nconst MATCHMAKING_KEY = 'Default:MatchmakingInfo_j';\nconst BANNER_INFO_KEY = 'Default:AthenaBannerInfo_j';\nconst LOADOUT_META_KEY = 'Default:LoadoutMeta_j';\nconst ATHENA_LOADOUT_KEY = 'Default:AthenaCosmeticLoadout_j';\nconst BATTLEPASS_KEY = 'Default:BattlePassInfo_j';\nconst PLATFORM_KEY = 'Default:PlatformData_j';\nconst PACKED_STATE_KEY = 'Default:PackedState_j';\nconst MIMOSA_KEY = 'Default:FrontendMimosa_j';\nconst NUM_PLAYERS_KEY = 'Default:NumAthenaPlayersLeft_U';\nconst MATCH_STARTED_KEY = 'Default:UtcTimeStartedMatchAthena_s';\nconst LOBBY_STATE_KEY = 'Default:LobbyState_j';\nconst SPARKS_SONGPART_ROOT = '/SparksSongTemplates/Items/SongParts';\n\nconst CROWNING_ACHIEVEMENT_EMOTE = 'EID_Coronet';\nconst CROWN_EMOTE_DELAY_MS = 500;\n\nconst SLOT = {\n outfit: 'ac',\n backpack: 'ab',\n pickaxe: 'ap',\n contrail: 'at',\n shoes: 'as',\n glider: 'ag',\n sidekick: 'mm',\n bannerIcon: 'li',\n bannerColor: 'lc',\n} as const;\n\nconst INSTRUMENT_SLOT = {\n bass: 'sb',\n guitar: 'sg',\n drums: 'sd',\n keytar: 'sk',\n microphone: 'sm',\n} as const;\n\ninterface LoadoutSlot {\n i: string;\n v: unknown[];\n}\n\nexport const ReadyState = {\n Ready: 'Ready',\n NotReady: 'NotReady',\n SittingOut: 'SittingOut',\n} as const;\n\nexport type ReadyStateValue = (typeof ReadyState)[keyof typeof ReadyState];\n\nexport const JamPart = {\n vocals: 'Vox',\n lead: 'Lead',\n bass: 'Bass',\n drums: 'Drum',\n} as const;\n\nexport type JamPartValue = (typeof JamPart)[keyof typeof JamPart];\n\nexport const SidekickAnim = {\n emote: 'Emote',\n interact: 'Interact',\n} as const;\n\nexport type SidekickAnimValue = (typeof SidekickAnim)[keyof typeof SidekickAnim];\n\nexport interface PartyPrivacyPreset {\n partyType: 'Public' | 'FriendsOnly' | 'Private';\n inviteRestriction: 'AnyMember' | 'LeaderOnly';\n onlyLeaderFriendsCanJoin: boolean;\n presencePermission: 'Anyone' | 'Leader' | 'Noone';\n invitePermission: 'Anyone' | 'AnyMember' | 'Leader';\n acceptingMembers: boolean;\n}\n\nexport const PartyPrivacy = {\n public: {\n partyType: 'Public',\n inviteRestriction: 'AnyMember',\n onlyLeaderFriendsCanJoin: false,\n presencePermission: 'Anyone',\n invitePermission: 'Anyone',\n acceptingMembers: true,\n },\n friendsOfFriends: {\n partyType: 'FriendsOnly',\n inviteRestriction: 'AnyMember',\n onlyLeaderFriendsCanJoin: false,\n presencePermission: 'Anyone',\n invitePermission: 'AnyMember',\n acceptingMembers: true,\n },\n friends: {\n partyType: 'FriendsOnly',\n inviteRestriction: 'LeaderOnly',\n onlyLeaderFriendsCanJoin: true,\n presencePermission: 'Leader',\n invitePermission: 'Leader',\n acceptingMembers: false,\n },\n privateOfFriends: {\n partyType: 'Private',\n inviteRestriction: 'AnyMember',\n onlyLeaderFriendsCanJoin: false,\n presencePermission: 'Noone',\n invitePermission: 'AnyMember',\n acceptingMembers: false,\n },\n private: {\n partyType: 'Private',\n inviteRestriction: 'LeaderOnly',\n onlyLeaderFriendsCanJoin: true,\n presencePermission: 'Noone',\n invitePermission: 'Leader',\n acceptingMembers: false,\n },\n} as const satisfies Record<string, PartyPrivacyPreset>;\n\nexport type PartyPrivacyValue = keyof typeof PartyPrivacy;\n\nexport const PARTY_PRIVACY_LIST = Object.keys(PartyPrivacy) as PartyPrivacyValue[];\n\nexport function isPartyPrivacy(value: string): value is PartyPrivacyValue {\n return Object.prototype.hasOwnProperty.call(PartyPrivacy, value);\n}\n\nexport interface PartyConfig {\n discoverability?: string;\n joinability?: string;\n joinConfirmation?: boolean;\n maxSize?: number;\n chatEnabled?: boolean;\n}\n\nexport interface PartyIdentity {\n accountId: string;\n connectionId: string;\n displayName: string;\n platform?: string;\n buildId?: string;\n}\n\nexport interface RawPartyMember {\n account_id: string;\n meta: Record<string, string>;\n revision: number;\n role?: string;\n connections?: unknown[];\n joined_at?: string;\n updated_at?: string;\n}\n\nexport interface RawParty {\n id: string;\n config: Record<string, unknown>;\n members: RawPartyMember[];\n meta: Record<string, string>;\n revision: number;\n invites?: unknown[];\n intentions?: unknown[];\n}\n\nexport interface UserParties {\n current: RawParty[];\n pending?: unknown[];\n invites?: unknown[];\n pings?: unknown[];\n}\n\nexport interface FakeInstruments {\n bass?: string;\n guitar?: string;\n drums?: string;\n keytar?: string;\n microphone?: string;\n}\n\nexport interface FakeCosmeticLoadout {\n outfit?: string;\n backpack?: string;\n pickaxe?: string;\n contrail?: string;\n shoes?: string;\n glider?: string;\n sidekick?: string;\n bannerIcon?: string;\n bannerColor?: string;\n variants?: Record<string, unknown[]>;\n instruments?: FakeInstruments;\n crowns?: number;\n emote?: string;\n emoji?: string;\n jam?: string;\n}\n\nexport interface FakeOutfitStyle {\n variants?: number[];\n colors?: { primary?: number | string | null; secondary?: number | string | null };\n sticker?: string | null;\n enlightenment?: [number, number];\n}\n\nexport interface PartyMemberBanner {\n bannerIconId?: string;\n bannerColorId?: string;\n}\n\nexport interface PartyMemberBattlePass {\n purchased: boolean;\n level: number;\n}\n\nexport interface PartyMemberMatchInfo {\n inMatch: boolean;\n playerCount: number;\n startedAt: Date | null;\n}\n\nexport interface MetaPatch {\n update?: Record<string, string>;\n delete?: string[];\n}\n\nfunction requireString(value: unknown, parameter: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(`\"${parameter}\" is required and must be a non-empty string`, parameter);\n }\n return value;\n}\n\nfunction staleRevision(error: unknown): number | null {\n if (!(error instanceof EpicApiError)) return null;\n const stale = error.numericErrorCode === 51018 || (error.errorCode ?? '').includes('stale_revision');\n if (!stale) return null;\n const message = typeof error.body === 'object' && error.body ? (error.body as { errorMessage?: string }).errorMessage : '';\n const match = /current one \\[(\\d+)\\]/.exec(message ?? '');\n return match ? Number(match[1]) : null;\n}\n\nfunction bareId(value: string): string {\n if (value === 'None' || value === '') return value;\n let id = value;\n const colon = id.lastIndexOf(':');\n if (colon >= 0) id = id.slice(colon + 1);\n const slash = id.lastIndexOf('/');\n if (slash >= 0) id = id.slice(slash + 1);\n const dot = id.indexOf('.');\n if (dot >= 0) id = id.slice(0, dot);\n return id;\n}\n\nfunction emotePath(value: string, subfolder = ''): string {\n if (value === '' || value === 'None') return 'None';\n if (value.includes('/')) return value;\n const id = bareId(value);\n const folder = subfolder ? `${COSMETIC_ROOT}/Dances/${subfolder}` : `${COSMETIC_ROOT}/Dances`;\n return `${folder}/${id}.${id}`;\n}\n\nfunction frontendEmote(pickable: string, ekey = '', section = -1): Record<string, unknown> {\n return { pickable, emoteEKey: ekey, emoteSection: section, multipurposeEmoteData: -1 };\n}\n\nfunction bannerColourId(value: string): string {\n const match = /^defaultcolor(\\d+)$/i.exec(value.trim());\n return match ? `DefaultColor${match[1]}` : value.trim();\n}\n\nconst OUTFIT_STYLE_SLOTS = { primary: 3, secondary: 4, sticker: 13 } as const;\nconst STICKER_NONE = 'None';\n\nfunction stickerValue(raw: string): string {\n const value = raw.trim();\n if (value === '' || value === STICKER_NONE || value.includes(':')) return value;\n return /^Emoji_/i.test(value) ? `AthenaEmoji:${value}` : value;\n}\n\nfunction colourValue(value: number | string | null | undefined): string | null {\n if (value === null || value === undefined) return null;\n if (typeof value === 'number') return Number.isFinite(value) ? String(value) : null;\n const trimmed = value.trim();\n return trimmed === '' ? null : trimmed;\n}\n\nfunction outfitVariantArray(style: FakeOutfitStyle): string[] {\n const base = (style.variants ?? []).map((index) => String(index));\n const primary = colourValue(style.colors?.primary);\n const secondary = colourValue(style.colors?.secondary);\n const sticker = typeof style.sticker === 'string' && style.sticker.trim() !== '' ? stickerValue(style.sticker) : null;\n\n const extras: Array<[number, string]> = [];\n if (primary !== null) extras.push([OUTFIT_STYLE_SLOTS.primary, primary]);\n if (secondary !== null) extras.push([OUTFIT_STYLE_SLOTS.secondary, secondary]);\n if (sticker !== null) extras.push([OUTFIT_STYLE_SLOTS.sticker, sticker]);\n if (extras.length === 0) return base;\n\n const length = Math.max(base.length, ...extras.map(([index]) => index + 1));\n const out = Array.from({ length }, (_, index) =>\n base[index] ?? (index === OUTFIT_STYLE_SLOTS.sticker ? STICKER_NONE : '0'),\n );\n for (const [index, value] of extras) out[index] = value;\n return out;\n}\n\nfunction loadoutSalt(): number {\n return Math.floor(Math.random() * 0xffffffff);\n}\n\nfunction jamTrackKey(value: string): string {\n return bareId(value).replace(/^sid_placeholder_/i, '').replace(/^sid_/i, '');\n}\n\nfunction randomGuid(): string {\n let out = '';\n for (let i = 0; i < 32; i += 1) {\n out += Math.floor(Math.random() * 16).toString(16);\n }\n return out.toUpperCase();\n}\n\nexport interface PrivacyPatch {\n update: Record<string, string>;\n delete: string[];\n config: Record<string, unknown>;\n}\n\nexport function buildPrivacyPatch(meta: Record<string, string>, preset: PartyPrivacyPreset): PrivacyPatch {\n const update: Record<string, string> = {};\n const del: string[] = [];\n const config: Record<string, unknown> = {};\n\n const rawPrivacy = meta['Default:PrivacySettings_j'];\n let privacyObject: { PrivacySettings?: Record<string, unknown> } = {};\n if (rawPrivacy) {\n try {\n privacyObject = JSON.parse(rawPrivacy) as { PrivacySettings?: Record<string, unknown> };\n } catch {\n privacyObject = {};\n }\n }\n update['Default:PrivacySettings_j'] = JSON.stringify({\n PrivacySettings: {\n ...(privacyObject.PrivacySettings ?? {}),\n partyType: preset.partyType,\n bOnlyLeaderFriendsCanJoin: preset.onlyLeaderFriendsCanJoin,\n partyInviteRestriction: preset.inviteRestriction,\n },\n });\n\n update['urn:epic:cfg:presence-perm_s'] = preset.presencePermission;\n update['urn:epic:cfg:accepting-members_b'] = String(preset.acceptingMembers);\n update['urn:epic:cfg:invite-perm_s'] = preset.invitePermission;\n\n if (preset.partyType === 'Private') {\n del.push('urn:epic:cfg:not-accepting-members');\n update['urn:epic:cfg:not-accepting-members-reason_i'] = '7';\n config.discoverability = 'INVITED_ONLY';\n config.joinability = 'INVITE_AND_FORMER';\n } else {\n del.push('urn:epic:cfg:not-accepting-members-reason_i');\n config.discoverability = 'ALL';\n config.joinability = 'OPEN';\n }\n\n return { update, delete: del, config };\n}\n\nfunction buildJoinPayload(identity: PartyIdentity): Record<string, unknown> {\n const platform = identity.platform ?? PARTY_DEFAULT_PLATFORM;\n return {\n connection: {\n id: identity.connectionId,\n meta: {\n 'urn:epic:conn:platform_s': platform,\n 'urn:epic:conn:type_s': 'game',\n },\n yield_leadership: false,\n },\n meta: {\n 'urn:epic:member:dn_s': identity.displayName,\n 'urn:epic:member:joinrequestusers_j': JSON.stringify({\n users: [\n {\n id: identity.accountId,\n dn: identity.displayName,\n plat: platform,\n data: JSON.stringify({ CrossplayPreference: '1', SubGame_u: '1' }),\n },\n ],\n }),\n },\n };\n}\n\nexport class PartyClient {\n constructor(private readonly rest: EpicRestClient) {}\n\n async userParties(accessToken: string, accountId: string): Promise<UserParties> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n const response = await this.rest.request<UserParties>('GET', `${BASE}/user/${encodeURIComponent(accountId)}`, {\n bearer: accessToken,\n });\n return response.data;\n }\n\n async updateParty(accessToken: string, partyId: string, body: { revision: number; meta?: MetaPatch; config?: Record<string, unknown> }): Promise<void> {\n requireString(accessToken, 'accessToken');\n requireString(partyId, 'partyId');\n await this.rest.request('PATCH', `${BASE}/parties/${encodeURIComponent(partyId)}`, {\n bearer: accessToken,\n json: body,\n });\n }\n\n async updateMemberMeta(accessToken: string, partyId: string, accountId: string, body: { revision: number; update?: Record<string, string>; delete?: string[] }): Promise<void> {\n requireString(accessToken, 'accessToken');\n requireString(partyId, 'partyId');\n requireString(accountId, 'accountId');\n await this.rest.request('PATCH', `${BASE}/parties/${encodeURIComponent(partyId)}/members/${encodeURIComponent(accountId)}/meta`, {\n bearer: accessToken,\n json: body,\n });\n }\n\n async promote(accessToken: string, partyId: string, memberId: string): Promise<void> {\n requireString(accessToken, 'accessToken');\n await this.rest.request('POST', `${BASE}/parties/${encodeURIComponent(partyId)}/members/${encodeURIComponent(memberId)}/promote`, {\n bearer: accessToken,\n });\n }\n\n async kick(accessToken: string, partyId: string, accountId: string): Promise<void> {\n requireString(accessToken, 'accessToken');\n await this.rest.request('DELETE', `${BASE}/parties/${encodeURIComponent(partyId)}/members/${encodeURIComponent(accountId)}`, {\n bearer: accessToken,\n });\n }\n\n leave(accessToken: string, partyId: string, accountId: string): Promise<void> {\n return this.kick(accessToken, partyId, accountId);\n }\n\n async invite(accessToken: string, partyId: string, friendId: string, sendPing = true): Promise<void> {\n requireString(accessToken, 'accessToken');\n await this.rest.request('POST', `${BASE}/parties/${encodeURIComponent(partyId)}/invites/${encodeURIComponent(friendId)}`, {\n bearer: accessToken,\n query: { sendPing },\n json: {},\n });\n }\n\n async requestToJoin(accessToken: string, friendId: string, accountId: string): Promise<void> {\n requireString(accessToken, 'accessToken');\n await this.rest.request('POST', `${BASE}/members/${encodeURIComponent(friendId)}/intentions/${encodeURIComponent(accountId)}`, {\n bearer: accessToken,\n json: {},\n });\n }\n\n async pings(accessToken: string, accountId: string, pingerId: string): Promise<unknown> {\n requireString(accessToken, 'accessToken');\n const response = await this.rest.request(\n 'GET',\n `${BASE}/user/${encodeURIComponent(accountId)}/pings/${encodeURIComponent(pingerId)}/parties`,\n { bearer: accessToken },\n );\n return response.data;\n }\n\n async lookupParty(accessToken: string, partyId: string): Promise<RawParty> {\n requireString(accessToken, 'accessToken');\n requireString(partyId, 'partyId');\n const response = await this.rest.request<RawParty>('GET', `${BASE}/parties/${encodeURIComponent(partyId)}`, {\n bearer: accessToken,\n });\n return response.data;\n }\n\n async create(accessToken: string, identity: PartyIdentity, config: PartyConfig = {}): Promise<RawParty> {\n requireString(accessToken, 'accessToken');\n requireString(identity.connectionId, 'connectionId');\n requireString(identity.displayName, 'displayName');\n const platform = identity.platform ?? PARTY_DEFAULT_PLATFORM;\n const chatEnabled = config.chatEnabled ?? true;\n const payload = {\n config: {\n discoverability: config.discoverability ?? 'ALL',\n join_confirmation: config.joinConfirmation ?? false,\n joinability: config.joinability ?? 'OPEN',\n max_size: config.maxSize ?? 16,\n },\n join_info: {\n connection: {\n id: identity.connectionId,\n meta: {\n 'urn:epic:conn:platform_s': platform,\n 'urn:epic:conn:type_s': 'game',\n },\n yield_leadership: false,\n },\n meta: {\n 'urn:epic:member:dn_s': identity.displayName,\n },\n },\n meta: {\n 'urn:epic:cfg:party-type-id_s': 'default',\n 'urn:epic:cfg:build-id_s': identity.buildId ?? PARTY_BUILD_ID,\n 'urn:epic:cfg:join-request-action_s': 'Manual',\n 'urn:epic:cfg:chat-enabled_b': String(chatEnabled),\n 'urn:epic:cfg:can-join_b': 'true',\n 'urn:epic:cfg:presence-perm_s': 'Noone',\n 'urn:epic:cfg:accepting-members_b': 'false',\n 'urn:epic:cfg:invite-perm_s': 'Noone',\n 'urn:epic:cfg:not-accepting-members-reason_i': '0',\n },\n };\n const response = await this.rest.request<RawParty>('POST', `${BASE}/parties`, {\n bearer: accessToken,\n json: payload,\n });\n return response.data;\n }\n\n async joinById(accessToken: string, partyId: string, identity: PartyIdentity): Promise<void> {\n requireString(accessToken, 'accessToken');\n requireString(partyId, 'partyId');\n requireString(identity.accountId, 'accountId');\n await this.rest.request('POST', `${BASE}/parties/${encodeURIComponent(partyId)}/members/${encodeURIComponent(identity.accountId)}/join`, {\n bearer: accessToken,\n json: buildJoinPayload(identity),\n });\n }\n\n async confirmMember(accessToken: string, partyId: string, accountId: string): Promise<void> {\n requireString(accessToken, 'accessToken');\n await this.rest.request('POST', `${BASE}/parties/${encodeURIComponent(partyId)}/members/${encodeURIComponent(accountId)}/confirm`, {\n bearer: accessToken,\n json: {},\n });\n }\n\n async rejectMember(accessToken: string, partyId: string, accountId: string): Promise<void> {\n requireString(accessToken, 'accessToken');\n await this.rest.request('POST', `${BASE}/parties/${encodeURIComponent(partyId)}/members/${encodeURIComponent(accountId)}/reject`, {\n bearer: accessToken,\n json: {},\n });\n }\n\n async declineInvite(accessToken: string, partyId: string, accountId: string): Promise<void> {\n requireString(accessToken, 'accessToken');\n await this.rest.request('POST', `${BASE}/parties/${encodeURIComponent(partyId)}/invites/${encodeURIComponent(accountId)}/decline`, {\n bearer: accessToken,\n json: {},\n });\n }\n\n async sendIntention(accessToken: string, targetId: string, accountId: string, guid = randomGuid()): Promise<void> {\n requireString(accessToken, 'accessToken');\n requireString(targetId, 'targetId');\n requireString(accountId, 'accountId');\n await this.rest.request('POST', `${BASE}/members/${encodeURIComponent(targetId)}/intentions/${encodeURIComponent(accountId)}`, {\n bearer: accessToken,\n json: { 'urn:epic:invite:platformdata_s': `RequestToJoin,guid=${guid}` },\n });\n }\n}\n\nexport class PartyMember {\n public accountId: string;\n public meta: Record<string, string>;\n public revision: number;\n public role: string;\n\n constructor(private readonly party: Party, raw: RawPartyMember) {\n this.accountId = raw.account_id;\n this.meta = { ...raw.meta };\n this.revision = raw.revision ?? 0;\n this.role = raw.role ?? 'MEMBER';\n }\n\n get isLeader(): boolean {\n return this.role === 'CAPTAIN';\n }\n\n get isSelf(): boolean {\n return this.accountId === this.party.clientAccountId;\n }\n\n private get loadoutSlots(): Record<string, LoadoutSlot> {\n return this.getProp<{ MpLoadout1?: { s?: Record<string, LoadoutSlot> } }>(MP_LOADOUT_KEY)?.MpLoadout1?.s ?? {};\n }\n\n private get matchmakingInfo(): Record<string, unknown> {\n return this.getProp<{ MatchmakingInfo?: Record<string, unknown> }>(MATCHMAKING_KEY)?.MatchmakingInfo ?? {};\n }\n\n private pickableId(key: string, prop: string): string | undefined {\n const pickable = (this.getProp<Record<string, { pickable?: string }>>(key)?.[prop])?.pickable;\n if (!pickable || pickable === 'None') return undefined;\n const dot = pickable.lastIndexOf('.');\n return dot >= 0 ? pickable.slice(dot + 1) : pickable;\n }\n\n private loadoutStat(name: string): number | undefined {\n const stats = this.getProp<{ LoadoutMeta?: { stats?: unknown[] } }>(LOADOUT_META_KEY)?.LoadoutMeta?.stats;\n if (!Array.isArray(stats)) return undefined;\n for (const entry of stats) {\n if (typeof entry === 'string') {\n const [key, value] = entry.split(':');\n if (key === name) return Number(value);\n } else if (entry && typeof entry === 'object') {\n const stat = entry as { statName?: string; statValue?: number };\n if (stat.statName === name) return stat.statValue;\n }\n }\n return undefined;\n }\n\n get outfit(): string | undefined {\n return this.loadoutSlots.ac?.i;\n }\n\n get backpack(): string | undefined {\n return this.loadoutSlots.ab?.i;\n }\n\n get pickaxe(): string | undefined {\n return this.loadoutSlots.ap?.i;\n }\n\n get contrail(): string | undefined {\n return this.loadoutSlots.at?.i;\n }\n\n get shoes(): string | undefined {\n return this.loadoutSlots.as?.i;\n }\n\n get glider(): string | undefined {\n return this.loadoutSlots.ag?.i;\n }\n\n get sidekick(): string | undefined {\n return this.loadoutSlots.mm?.i;\n }\n\n get instruments(): FakeInstruments {\n const s = this.loadoutSlots;\n return { bass: s.sb?.i, guitar: s.sg?.i, drums: s.sd?.i, keytar: s.sk?.i, microphone: s.sm?.i };\n }\n\n get banner(): PartyMemberBanner | undefined {\n const s = this.loadoutSlots;\n if (!s.li?.i && !s.lc?.i) return undefined;\n return { bannerIconId: s.li?.i, bannerColorId: s.lc?.i };\n }\n\n get emote(): string | undefined {\n return this.pickableId(EMOTE_KEY, 'FrontendEmote');\n }\n\n get isEmoting(): boolean {\n return this.emote !== undefined;\n }\n\n get jamTrack(): string | undefined {\n return this.pickableId(JAM_KEY, 'FrontendSparksSongPart');\n }\n\n get isJamming(): boolean {\n return this.jamTrack !== undefined;\n }\n\n get readyState(): ReadyStateValue {\n const status = this.matchmakingInfo['readyStatus'];\n return status === 'Ready' || status === 'SittingOut' ? status : 'NotReady';\n }\n\n get isReady(): boolean {\n return this.readyState === 'Ready';\n }\n\n get isSittingOut(): boolean {\n return this.readyState === 'SittingOut';\n }\n\n get inMatch(): boolean {\n return this.getProp<{ PackedState?: { location?: string } }>(PACKED_STATE_KEY)?.PackedState?.location === 'InGame';\n }\n\n get matchInfo(): PartyMemberMatchInfo {\n const players = this.getMetaKey(NUM_PLAYERS_KEY);\n const started = this.getMetaKey(MATCH_STARTED_KEY);\n return {\n inMatch: this.inMatch,\n playerCount: players ? Number(players) : 0,\n startedAt: started ? new Date(started) : null,\n };\n }\n\n get battlePass(): PartyMemberBattlePass | undefined {\n const info = this.getProp<{ BattlePassInfo?: { bHasPurchasedPass?: boolean; passLevel?: number } }>(BATTLEPASS_KEY)?.BattlePassInfo;\n if (!info) return undefined;\n return { purchased: !!info.bHasPurchasedPass, level: info.passLevel ?? 0 };\n }\n\n get level(): number {\n return this.battlePass?.level ?? 0;\n }\n\n get platform(): string | undefined {\n return this.getProp<{ PlatformData?: { platform?: { platformDescription?: { name?: string } } } }>(PLATFORM_KEY)\n ?.PlatformData?.platform?.platformDescription?.name;\n }\n\n get inputMethod(): string | undefined {\n return this.getProp<{ LobbyState?: { currentInputType?: string } }>(LOBBY_STATE_KEY)?.LobbyState?.currentInputType;\n }\n\n get crowns(): number {\n return this.loadoutStat('TotalVictoryCrowns') ?? 0;\n }\n\n get hasCrown(): boolean {\n return (this.loadoutStat('HasCrown') ?? 0) > 0;\n }\n\n getMeta(): Record<string, string> {\n return { ...this.meta };\n }\n\n getMetaKey(key: string): string | undefined {\n return this.meta[key];\n }\n\n getProp<T = unknown>(key: string): T | null {\n const raw = this.meta[key];\n if (raw == null) return null;\n try {\n return JSON.parse(raw) as T;\n } catch {\n return null;\n }\n }\n\n patchMeta(update: Record<string, string> = {}, deleteKeys: string[] = []): Promise<void> {\n return this.party.patchMemberMeta(this, update, deleteKeys);\n }\n\n updateMetaKey(key: string, value: string): Promise<void> {\n requireString(key, 'key');\n return this.patchMeta({ [key]: value });\n }\n\n setProp(key: string, value: unknown): Promise<void> {\n requireString(key, 'key');\n return this.patchMeta({ [key]: JSON.stringify(value) });\n }\n\n private mpLoadout(): { MpLoadout1: { s: Record<string, LoadoutSlot> } } {\n const current = this.getProp<{ MpLoadout1?: { s?: Record<string, LoadoutSlot> } }>(MP_LOADOUT_KEY);\n return { MpLoadout1: { s: current?.MpLoadout1?.s ?? {} } };\n }\n\n async fakeApplyCosmetics(loadout: FakeCosmeticLoadout): Promise<void> {\n this.requireSelf();\n const mp = this.mpLoadout();\n const slots = mp.MpLoadout1.s;\n const variants = loadout.variants ?? {};\n\n const apply = (value: string | undefined, key: string): void => {\n if (value === undefined) return;\n if (value === '' || value === 'None') {\n delete slots[key];\n return;\n }\n slots[key] = { i: bareId(value), v: variants[key] ?? [] };\n };\n\n apply(loadout.outfit, SLOT.outfit);\n apply(loadout.backpack, SLOT.backpack);\n apply(loadout.pickaxe, SLOT.pickaxe);\n apply(loadout.contrail, SLOT.contrail);\n apply(loadout.shoes, SLOT.shoes);\n apply(loadout.glider, SLOT.glider);\n\n if (loadout.bannerIcon !== undefined) slots[SLOT.bannerIcon] = { i: loadout.bannerIcon, v: [] };\n if (loadout.bannerColor !== undefined) slots[SLOT.bannerColor] = { i: loadout.bannerColor, v: [] };\n\n if (loadout.instruments) {\n for (const [name, key] of Object.entries(INSTRUMENT_SLOT)) {\n const value = loadout.instruments[name as keyof FakeInstruments];\n if (value === undefined) continue;\n slots[key] = { i: bareId(value), v: variants[key] ?? ['0'] };\n }\n }\n\n await this.setProp(MP_LOADOUT_KEY, mp);\n\n if (loadout.sidekick !== undefined) await this.fakeSidekick(loadout.sidekick);\n if (loadout.crowns !== undefined) await this.fakeCrown(loadout.crowns);\n\n if (loadout.emote !== undefined) await this.fakeEmote(loadout.emote);\n else if (loadout.emoji !== undefined) await this.fakeEmoji(loadout.emoji);\n else if (loadout.jam !== undefined) await this.fakeJam(loadout.jam);\n }\n\n fakeEquipOutfit(cosmetic: string): Promise<void> {\n return this.fakeApplyCosmetics({ outfit: cosmetic });\n }\n\n fakeEquipBackpack(cosmetic: string): Promise<void> {\n return this.fakeApplyCosmetics({ backpack: cosmetic });\n }\n\n fakeEquipPickaxe(cosmetic: string): Promise<void> {\n return this.fakeApplyCosmetics({ pickaxe: cosmetic });\n }\n\n fakeEquipContrail(cosmetic: string): Promise<void> {\n return this.fakeApplyCosmetics({ contrail: cosmetic });\n }\n\n fakeEquipShoes(cosmetic: string): Promise<void> {\n return this.fakeApplyCosmetics({ shoes: cosmetic });\n }\n\n fakeEquipGlider(cosmetic: string): Promise<void> {\n return this.fakeApplyCosmetics({ glider: cosmetic });\n }\n\n fakeEquipSidekick(cosmetic: string): Promise<void> {\n return this.fakeSidekick(cosmetic);\n }\n\n fakeInstruments(instruments: FakeInstruments): Promise<void> {\n return this.fakeApplyCosmetics({ instruments });\n }\n\n async fakeOutfit(cosmetic: string, style: FakeOutfitStyle = {}): Promise<void> {\n this.requireSelf();\n const mp = this.mpLoadout();\n mp.MpLoadout1.s[SLOT.outfit] = { i: bareId(cosmetic), v: outfitVariantArray(style) };\n const loadoutMeta = this.getProp<{ LoadoutMeta?: Record<string, unknown> }>(LOADOUT_META_KEY)?.LoadoutMeta ?? {};\n const scratch =\n style.enlightenment && style.enlightenment.length === 2\n ? [{ t: style.enlightenment[0], v: style.enlightenment[1] }]\n : [];\n await this.patchMeta({\n [MP_LOADOUT_KEY]: JSON.stringify(mp),\n [LOADOUT_META_KEY]: JSON.stringify({ LoadoutMeta: { ...loadoutMeta, scratch, rand: loadoutSalt() } }),\n });\n }\n\n async fakeSidekick(cosmetic: string | null): Promise<void> {\n this.requireSelf();\n const mp = this.mpLoadout();\n const slots = mp.MpLoadout1.s;\n const loadout = this.getProp<{ AthenaCosmeticLoadout?: Record<string, unknown> }>(ATHENA_LOADOUT_KEY)?.AthenaCosmeticLoadout ?? {};\n\n if (cosmetic === null || cosmetic === '' || cosmetic === 'None') {\n delete slots[SLOT.sidekick];\n loadout.mimosaDef = 'None';\n } else {\n const id = bareId(cosmetic);\n slots[SLOT.sidekick] = { i: id, v: [] };\n loadout.mimosaDef = `CosmeticCompanion:${id}`;\n }\n loadout.mimosaEKey = '';\n\n await this.patchMeta({\n [MP_LOADOUT_KEY]: JSON.stringify(mp),\n [ATHENA_LOADOUT_KEY]: JSON.stringify({ AthenaCosmeticLoadout: loadout }),\n });\n }\n\n async fakeSidekickAnim(anim: SidekickAnimValue | 'None' = 'Emote'): Promise<void> {\n this.requireSelf();\n const current = this.getProp<{ FrontendMimosa?: Record<string, unknown> }>(MIMOSA_KEY)?.FrontendMimosa ?? {};\n await this.setProp(MIMOSA_KEY, {\n FrontendMimosa: { ...current, frontendMimosaAnimType: anim, frontendMimosaInstanceId: '' },\n });\n }\n\n fakeStopSidekickAnim(): Promise<void> {\n return this.fakeSidekickAnim('None');\n }\n\n fakeBanner(icon: string, color?: string): Promise<void> {\n this.requireSelf();\n const iconId = bareId(icon);\n const colorId = color !== undefined ? bannerColourId(color) : undefined;\n\n const mp1 = this.mpLoadout();\n mp1.MpLoadout1.s[SLOT.bannerIcon] = { i: iconId, v: [] };\n if (colorId !== undefined) mp1.MpLoadout1.s[SLOT.bannerColor] = { i: colorId, v: [] };\n\n const mp2raw = this.getProp<{ MpLoadout2?: { s?: Record<string, LoadoutSlot> } }>(MP_LOADOUT2_KEY);\n const mp2 = { MpLoadout2: { s: { ...(mp2raw?.MpLoadout2?.s ?? {}) } } };\n mp2.MpLoadout2.s[SLOT.bannerIcon] = { i: iconId, v: [] };\n if (colorId !== undefined) mp2.MpLoadout2.s[SLOT.bannerColor] = { i: colorId, v: [] };\n\n const info = this.getProp<{ AthenaBannerInfo?: Record<string, unknown> }>(BANNER_INFO_KEY)?.AthenaBannerInfo ?? {};\n const bannerInfo: Record<string, unknown> = { ...info, bannerIconId: iconId, seasonLevel: info.seasonLevel ?? 0 };\n if (colorId !== undefined) bannerInfo.bannerColorId = colorId;\n\n return this.patchMeta({\n [BANNER_INFO_KEY]: JSON.stringify({ AthenaBannerInfo: bannerInfo }),\n [MP_LOADOUT_KEY]: JSON.stringify(mp1),\n [MP_LOADOUT2_KEY]: JSON.stringify(mp2),\n });\n }\n\n async fakeLoadoutStats(values: Record<string, number>): Promise<void> {\n this.requireSelf();\n const current = this.getProp<{ LoadoutMeta?: Record<string, unknown> }>(LOADOUT_META_KEY)?.LoadoutMeta ?? {};\n const existing = Array.isArray(current.stats) ? (current.stats as unknown[]) : [];\n const merged = new Map<string, string>();\n for (const entry of existing) {\n const text =\n typeof entry === 'string'\n ? entry\n : `${(entry as { statName?: string }).statName ?? ''}:${(entry as { statValue?: number }).statValue ?? 0}`;\n const key = text.split(':')[0];\n if (key) merged.set(key, text);\n }\n for (const [key, value] of Object.entries(values)) {\n merged.set(key, `${key}:${Math.max(0, Math.trunc(value))}`);\n }\n await this.setProp(LOADOUT_META_KEY, { LoadoutMeta: { ...current, stats: [...merged.values()] } });\n }\n\n async fakeCrown(wins: number, playEmote = false): Promise<void> {\n await this.fakeLoadoutStats({\n TotalVictoryCrowns: wins,\n TotalRoyalRoyales: wins,\n HasCrown: wins > 0 ? 1 : 0,\n });\n if (playEmote) {\n await sleep(CROWN_EMOTE_DELAY_MS);\n await this.fakeEmote(CROWNING_ACHIEVEMENT_EMOTE);\n }\n }\n\n async fakeBattlePass(purchased: boolean, level: number): Promise<void> {\n this.requireSelf();\n const info = this.getProp<{ BattlePassInfo?: Record<string, unknown> }>(BATTLEPASS_KEY)?.BattlePassInfo ?? {};\n await this.setProp(BATTLEPASS_KEY, {\n BattlePassInfo: { ...info, bHasPurchasedPass: purchased, passLevel: level },\n });\n }\n\n fakeLevel(level: number): Promise<void> {\n const info = this.getProp<{ BattlePassInfo?: { bHasPurchasedPass?: boolean } }>(BATTLEPASS_KEY)?.BattlePassInfo;\n return this.fakeBattlePass(info?.bHasPurchasedPass ?? false, level);\n }\n\n async fakePlatform(platform: string): Promise<void> {\n this.requireSelf();\n const name = platform.toUpperCase();\n const platformType = name === 'WIN' ? 'DESKTOP' : ['PSN', 'XBL', 'SWT'].includes(name) ? 'CONSOLE' : 'MOBILE';\n const crossplayPool = name === 'WIN' ? 'DESKTOP' : platformType === 'CONSOLE' ? 'CONSOLE' : 'MOBILE';\n const current = this.getProp<{ PlatformData?: Record<string, any> }>(PLATFORM_KEY)?.PlatformData ?? {};\n const platformObj = current.platform ?? {};\n const description = platformObj.platformDescription ?? {};\n await this.setProp(PLATFORM_KEY, {\n PlatformData: {\n ...current,\n platform: {\n ...platformObj,\n platformDescription: { ...description, name, platformType, crossplayPool },\n },\n },\n });\n }\n\n async fakePlaying(playing = true, playerCount = 100, startedAt: Date = new Date()): Promise<void> {\n this.requireSelf();\n const packed = this.getProp<{ PackedState?: Record<string, unknown> }>(PACKED_STATE_KEY)?.PackedState ?? {};\n const info = this.getProp<{ MatchmakingInfo?: Record<string, unknown> }>(MATCHMAKING_KEY)?.MatchmakingInfo ?? {};\n await this.patchMeta({\n [PACKED_STATE_KEY]: JSON.stringify({\n PackedState: { ...packed, location: playing ? 'InGame' : 'PreLobby', gameMode: playing ? 'InBattleRoyale' : 'None' },\n }),\n [MATCHMAKING_KEY]: JSON.stringify({ MatchmakingInfo: { ...info, hasPreloadedAthena: playing } }),\n [NUM_PLAYERS_KEY]: String(Math.max(0, Math.trunc(playerCount))),\n [MATCH_STARTED_KEY]: startedAt.toISOString(),\n });\n }\n\n async fakeSittingOut(sittingOut = true): Promise<void> {\n this.requireSelf();\n const info = this.getProp<{ MatchmakingInfo?: Record<string, unknown> }>(MATCHMAKING_KEY)?.MatchmakingInfo ?? {};\n await this.setProp(MATCHMAKING_KEY, {\n MatchmakingInfo: { ...info, readyStatus: sittingOut ? 'SittingOut' : 'NotReady', readyStatusMMId: '' },\n });\n }\n\n async fakeEmote(cosmetic: string): Promise<void> {\n this.requireSelf();\n await this.setProp(EMOTE_KEY, { FrontendEmote: frontendEmote(emotePath(cosmetic)) });\n }\n\n async fakeEmoji(cosmetic: string): Promise<void> {\n this.requireSelf();\n await this.setProp(EMOTE_KEY, { FrontendEmote: frontendEmote(emotePath(cosmetic, 'Emoji')) });\n }\n\n async fakeJam(cosmetic: string): Promise<void> {\n this.requireSelf();\n const pickable = cosmetic === '' || cosmetic === 'None' ? 'None' : cosmetic.includes('/') ? cosmetic : emotePath(cosmetic);\n await this.patchMeta({\n [EMOTE_KEY]: JSON.stringify({ FrontendEmote: frontendEmote(pickable) }),\n [JAM_KEY]: JSON.stringify({ FrontendSparksSongPart: frontendEmote(pickable) }),\n });\n }\n\n async fakeJamTrack(trackKey: string, part: JamPartValue = 'Vox'): Promise<void> {\n this.requireSelf();\n const asset = `SparksSongPart_Placeholder_${jamTrackKey(trackKey)}_${part}`;\n const pickable = `${SPARKS_SONGPART_ROOT}/${asset}.${asset}`;\n await this.patchMeta({\n [EMOTE_KEY]: JSON.stringify({ FrontendEmote: frontendEmote(pickable) }),\n [JAM_KEY]: JSON.stringify({ FrontendSparksSongPart: frontendEmote(pickable) }),\n });\n }\n\n fakeStopEmote(): Promise<void> {\n return this.fakeEmote('None');\n }\n\n async fakeReady(ready: boolean | ReadyStateValue = true): Promise<void> {\n this.requireSelf();\n const status: ReadyStateValue = typeof ready === 'string' ? ready : ready ? 'Ready' : 'NotReady';\n const info = (this.getProp<{ MatchmakingInfo?: Record<string, unknown> }>(MATCHMAKING_KEY)?.MatchmakingInfo ?? {}) as Record<string, unknown>;\n info['readyStatus'] = status;\n await this.setProp(MATCHMAKING_KEY, { MatchmakingInfo: info });\n }\n\n private requireSelf(): void {\n if (!this.isSelf) {\n throw new ValidationError('You can only edit your own party member state', 'accountId');\n }\n }\n}\n\nexport class Party {\n public readonly id: string;\n public revision: number;\n public readonly config: Record<string, unknown>;\n public meta: Record<string, string>;\n public members: PartyMember[];\n\n constructor(\n private readonly client: PartyClient,\n private readonly token: () => Promise<string>,\n public readonly clientAccountId: string,\n raw: RawParty,\n ) {\n this.id = raw.id;\n this.revision = raw.revision ?? 0;\n this.config = raw.config ?? {};\n this.meta = { ...raw.meta };\n this.members = (raw.members ?? []).map((member) => new PartyMember(this, member));\n }\n\n get me(): PartyMember | null {\n return this.member(this.clientAccountId);\n }\n\n get leader(): PartyMember | null {\n return this.members.find((member) => member.isLeader) ?? null;\n }\n\n member(accountId: string): PartyMember | null {\n return this.members.find((member) => member.accountId === accountId) ?? null;\n }\n\n async refresh(): Promise<this> {\n const token = await this.token();\n const parties = await this.client.userParties(token, this.clientAccountId);\n const raw = (parties.current ?? []).find((party) => party.id === this.id) ?? parties.current?.[0];\n if (!raw) throw new ValidationError('You are no longer in this party', 'party');\n this.revision = raw.revision ?? this.revision;\n this.meta = { ...raw.meta };\n this.members = (raw.members ?? []).map((member) => new PartyMember(this, member));\n return this;\n }\n\n async patchMeta(update: Record<string, string> = {}, deleteKeys: string[] = []): Promise<void> {\n const token = await this.token();\n const send = async (revision: number): Promise<void> => {\n await this.client.updateParty(token, this.id, {\n revision,\n meta: { update, ...(deleteKeys.length ? { delete: deleteKeys } : {}) },\n });\n };\n await this.withRevision((revision) => send(revision), () => this.revision, (value) => {\n this.revision = value;\n });\n Object.assign(this.meta, update);\n for (const key of deleteKeys) delete this.meta[key];\n }\n\n async patchMemberMeta(member: PartyMember, update: Record<string, string>, deleteKeys: string[]): Promise<void> {\n if (member.accountId !== this.clientAccountId) {\n throw new ValidationError('You can only edit your own party member meta', 'accountId');\n }\n const token = await this.token();\n const send = async (revision: number): Promise<void> => {\n await this.client.updateMemberMeta(token, this.id, member.accountId, {\n revision,\n update,\n ...(deleteKeys.length ? { delete: deleteKeys } : {}),\n });\n };\n await this.withRevision((revision) => send(revision), () => member.revision, (value) => {\n member.revision = value;\n });\n Object.assign(member.meta, update);\n for (const key of deleteKeys) delete member.meta[key];\n }\n\n async leave(): Promise<void> {\n const token = await this.token();\n await this.client.leave(token, this.id, this.clientAccountId);\n }\n\n async invite(accountId: string, sendPing = true): Promise<void> {\n requireString(accountId, 'accountId');\n const token = await this.token();\n await this.client.invite(token, this.id, accountId, sendPing);\n }\n\n async promote(accountId: string): Promise<void> {\n requireString(accountId, 'accountId');\n const token = await this.token();\n await this.client.promote(token, this.id, accountId);\n }\n\n async kick(accountId: string): Promise<void> {\n requireString(accountId, 'accountId');\n const token = await this.token();\n await this.client.kick(token, this.id, accountId);\n }\n\n async setConfig(patch: Record<string, unknown>): Promise<void> {\n this.requireLeader();\n const token = await this.token();\n await this.withRevision(\n (revision) => this.client.updateParty(token, this.id, { revision, config: patch }),\n () => this.revision,\n (value) => {\n this.revision = value;\n },\n );\n Object.assign(this.config, patch);\n }\n\n async setPrivacy(privacy: PartyPrivacyValue | PartyPrivacyPreset): Promise<void> {\n this.requireLeader();\n const preset: PartyPrivacyPreset = typeof privacy === 'string' ? PartyPrivacy[privacy] : privacy;\n if (!preset) throw new ValidationError(`Unknown party privacy \"${String(privacy)}\"`, 'privacy');\n const patch = buildPrivacyPatch(this.meta, preset);\n const token = await this.token();\n await this.withRevision(\n (revision) =>\n this.client.updateParty(token, this.id, {\n revision,\n meta: { update: patch.update, ...(patch.delete.length ? { delete: patch.delete } : {}) },\n config: patch.config,\n }),\n () => this.revision,\n (value) => {\n this.revision = value;\n },\n );\n Object.assign(this.meta, patch.update);\n for (const key of patch.delete) delete this.meta[key];\n Object.assign(this.config, patch.config);\n }\n\n private requireLeader(): void {\n if (this.me?.isLeader !== true) {\n throw new ValidationError('Only the party leader can perform this action', 'leader');\n }\n }\n\n private async withRevision(\n send: (revision: number) => Promise<void>,\n get: () => number,\n set: (value: number) => void,\n ): Promise<void> {\n try {\n await send(get());\n set(get() + 1);\n } catch (error) {\n const current = staleRevision(error);\n if (current === null) throw error;\n set(current);\n await send(current);\n set(current + 1);\n }\n }\n}\n","export type Listener<T> = (payload: T) => void;\n\nexport class TypedEmitter<M extends { error: Error }> {\n private readonly listeners = new Map<keyof M, Set<Listener<unknown>>>();\n\n on<K extends keyof M>(event: K, listener: Listener<M[K]>): this {\n let set = this.listeners.get(event);\n if (!set) {\n set = new Set();\n this.listeners.set(event, set);\n }\n set.add(listener as Listener<unknown>);\n return this;\n }\n\n once<K extends keyof M>(event: K, listener: Listener<M[K]>): this {\n const wrapper: Listener<M[K]> = (payload) => {\n this.off(event, wrapper);\n listener(payload);\n };\n return this.on(event, wrapper);\n }\n\n off<K extends keyof M>(event: K, listener: Listener<M[K]>): this {\n this.listeners.get(event)?.delete(listener as Listener<unknown>);\n return this;\n }\n\n removeAllListeners(event?: keyof M): this {\n if (event === undefined) {\n this.listeners.clear();\n } else {\n this.listeners.delete(event);\n }\n return this;\n }\n\n protected emit<K extends keyof M>(event: K, payload: M[K]): void {\n const set = this.listeners.get(event);\n if (!set) return;\n for (const listener of [...set]) {\n try {\n (listener as Listener<M[K]>)(payload);\n } catch (error) {\n if (event !== ('error' as K)) {\n const normalized = error instanceof Error ? error : new Error(String(error));\n this.emit('error' as K, normalized as M[K]);\n }\n }\n }\n }\n}\n","export const PARTY_NOTIFICATION_PREFIX = 'com.epicgames.social.party.notification.v0.';\nexport const FRIEND_NOTIFICATION_TYPE = 'com.epicgames.friends.core.apiobjects.Friend';\nexport const FRIENDSHIP_REMOVE_TYPE = 'FRIENDSHIP_REMOVE';\n\nexport type FriendDirection = 'INBOUND' | 'OUTBOUND';\nexport type FriendRemoveReason = 'ABORTED' | 'REJECTED' | 'DELETED';\n\nexport interface RawNotification {\n type: string;\n [key: string]: unknown;\n}\n\nexport type DecodedNotification =\n | { kind: 'party:invite'; fromId: string; raw: RawNotification }\n | { kind: 'party:member:joined'; partyId: string; accountId: string; raw: RawNotification }\n | { kind: 'party:member:left'; partyId: string; accountId: string; raw: RawNotification }\n | { kind: 'party:member:expired'; partyId: string; accountId: string; raw: RawNotification }\n | { kind: 'party:member:kicked'; partyId: string; accountId: string; raw: RawNotification }\n | { kind: 'party:member:disconnected'; partyId: string; accountId: string; raw: RawNotification }\n | { kind: 'party:member:connected'; partyId: string; accountId: string; raw: RawNotification }\n | { kind: 'party:member:updated'; partyId: string; accountId: string; raw: RawNotification }\n | { kind: 'party:member:promoted'; partyId: string; accountId: string; raw: RawNotification }\n | { kind: 'party:member:confirmation'; partyId: string; accountId: string; raw: RawNotification }\n | { kind: 'party:join:request'; partyId: string; requesterId: string; raw: RawNotification }\n | { kind: 'party:updated'; partyId: string; raw: RawNotification }\n | { kind: 'party:invite:declined'; accountId: string; raw: RawNotification }\n | { kind: 'friend:request'; accountId: string; direction: FriendDirection; favorite: boolean; created: string | null; raw: RawNotification }\n | { kind: 'friend:added'; accountId: string; favorite: boolean; created: string | null; raw: RawNotification }\n | { kind: 'friend:removed'; from: string; to: string; reason: FriendRemoveReason; raw: RawNotification }\n | { kind: 'unknown'; type: string; raw: RawNotification };\n\nfunction str(value: unknown): string {\n return typeof value === 'string' ? value : '';\n}\n\nfunction optionalString(value: unknown): string | null {\n return typeof value === 'string' ? value : null;\n}\n\nexport function decodeNotification(body: string): DecodedNotification | null {\n let raw: RawNotification;\n try {\n raw = JSON.parse(body) as RawNotification;\n } catch {\n return null;\n }\n if (!raw || typeof raw.type !== 'string') return null;\n const type = raw.type;\n\n if (type === FRIEND_NOTIFICATION_TYPE) {\n const payload = (raw.payload ?? {}) as Record<string, unknown>;\n const status = str(payload.status);\n const accountId = str(payload.accountId);\n const favorite = payload.favorite === true;\n const created = optionalString(payload.created);\n if (status === 'ACCEPTED') {\n return { kind: 'friend:added', accountId, favorite, created, raw };\n }\n if (status === 'PENDING') {\n const direction: FriendDirection = payload.direction === 'OUTBOUND' ? 'OUTBOUND' : 'INBOUND';\n return { kind: 'friend:request', accountId, direction, favorite, created, raw };\n }\n return { kind: 'unknown', type, raw };\n }\n\n if (type === FRIENDSHIP_REMOVE_TYPE) {\n const reasonRaw = str(raw.reason);\n const reason: FriendRemoveReason =\n reasonRaw === 'ABORTED' || reasonRaw === 'REJECTED' ? reasonRaw : 'DELETED';\n return { kind: 'friend:removed', from: str(raw.from), to: str(raw.to), reason, raw };\n }\n\n if (!type.startsWith(PARTY_NOTIFICATION_PREFIX)) {\n return { kind: 'unknown', type, raw };\n }\n\n const event = type.slice(PARTY_NOTIFICATION_PREFIX.length);\n const partyId = str(raw.party_id);\n const accountId = str(raw.account_id);\n\n switch (event) {\n case 'PING':\n case 'INITIAL_INVITE':\n return { kind: 'party:invite', fromId: str(raw.pinger_id) || str(raw.inviter_id) || str(raw.sent_by), raw };\n case 'MEMBER_JOINED':\n return { kind: 'party:member:joined', partyId, accountId, raw };\n case 'MEMBER_LEFT':\n return { kind: 'party:member:left', partyId, accountId, raw };\n case 'MEMBER_EXPIRED':\n return { kind: 'party:member:expired', partyId, accountId, raw };\n case 'MEMBER_KICKED':\n return { kind: 'party:member:kicked', partyId, accountId, raw };\n case 'MEMBER_DISCONNECTED':\n return { kind: 'party:member:disconnected', partyId, accountId, raw };\n case 'MEMBER_CONNECTED':\n return { kind: 'party:member:connected', partyId, accountId, raw };\n case 'MEMBER_STATE_UPDATED':\n return { kind: 'party:member:updated', partyId, accountId, raw };\n case 'MEMBER_NEW_CAPTAIN':\n return { kind: 'party:member:promoted', partyId, accountId, raw };\n case 'MEMBER_REQUIRE_CONFIRMATION':\n return { kind: 'party:member:confirmation', partyId, accountId, raw };\n case 'INITIAL_INTENTION':\n return { kind: 'party:join:request', partyId, requesterId: str(raw.requester_id), raw };\n case 'PARTY_UPDATED':\n return { kind: 'party:updated', partyId, raw };\n case 'INVITE_DECLINED':\n return { kind: 'party:invite:declined', accountId: str(raw.invitee_id) || accountId, raw };\n default:\n return { kind: 'unknown', type, raw };\n }\n}\n","import { ValidationError } from '../core/errors.js';\nimport type { ConnectClientOptions, ConnectFriendMessage, ConnectPartyMessage, ConnectPresenceUpdate } from './connect.js';\nimport { TypedEmitter } from './emitter.js';\nimport type { ResolvedFriendEntry } from './friends.js';\nimport {\n decodeNotification,\n type DecodedNotification,\n type FriendDirection,\n type FriendRemoveReason,\n type RawNotification,\n} from './notifications.js';\nimport {\n Party,\n PARTY_BUILD_ID,\n PARTY_DEFAULT_PLATFORM,\n type PartyClient,\n type PartyConfig,\n type PartyIdentity,\n type RawParty,\n} from './party.js';\nimport type { EpicAuthSession } from './session.js';\nimport type { XmppClientOptions, XmppMessage } from './xmpp.js';\n\nexport interface FriendRequestEvent {\n accountId: string;\n displayName?: string;\n direction: FriendDirection;\n favorite: boolean;\n created: string | null;\n accept(): Promise<void>;\n decline(): Promise<void>;\n raw: RawNotification;\n}\n\nexport interface FriendAddedEvent {\n accountId: string;\n entry: ResolvedFriendEntry;\n raw: RawNotification;\n}\n\nexport interface FriendRemovedEvent {\n accountId: string;\n reason: FriendRemoveReason;\n raw: RawNotification;\n}\n\nexport interface PartyInviteEvent {\n fromId: string;\n accept(): Promise<Party | null>;\n decline(): Promise<void>;\n raw: RawNotification;\n}\n\nexport interface PartyMemberEvent {\n partyId: string;\n accountId: string;\n party: Party | null;\n raw: RawNotification;\n}\n\nexport interface PartyJoinRequestEvent {\n partyId: string;\n requesterId: string;\n confirm(): Promise<void>;\n reject(): Promise<void>;\n raw: RawNotification;\n}\n\nexport interface PartyUpdatedEvent {\n partyId: string;\n party: Party | null;\n raw: RawNotification;\n}\n\nexport interface PartyInviteDeclinedEvent {\n accountId: string;\n raw: RawNotification;\n}\n\nexport interface LiveEventMap {\n connected: void;\n disconnected: { code: number; reason: string };\n error: Error;\n notification: DecodedNotification;\n 'party:invite': PartyInviteEvent;\n 'party:invite:declined': PartyInviteDeclinedEvent;\n 'party:join:request': PartyJoinRequestEvent;\n 'party:member:joined': PartyMemberEvent;\n 'party:member:left': PartyMemberEvent;\n 'party:member:expired': PartyMemberEvent;\n 'party:member:kicked': PartyMemberEvent;\n 'party:member:connected': PartyMemberEvent;\n 'party:member:disconnected': PartyMemberEvent;\n 'party:member:updated': PartyMemberEvent;\n 'party:member:promoted': PartyMemberEvent;\n 'party:member:confirmation': PartyMemberEvent;\n 'party:updated': PartyUpdatedEvent;\n 'party:disbanded': { partyId: string };\n 'friend:request': FriendRequestEvent;\n 'friend:added': FriendAddedEvent;\n 'friend:removed': FriendRemovedEvent;\n 'friend:message': ConnectFriendMessage;\n 'party:message': ConnectPartyMessage;\n presence: ConnectPresenceUpdate;\n}\n\nexport interface LiveClientOptions {\n xmpp?: Partial<Omit<XmppClientOptions, 'accountId' | 'getAccessToken'>>;\n connect?: Partial<Omit<ConnectClientOptions, 'accountId' | 'getAccessToken'>>;\n seedParty?: boolean;\n seedFriends?: boolean;\n}\n\nfunction safeParse(value: string): unknown {\n try {\n return JSON.parse(value);\n } catch {\n return null;\n }\n}\n\nfunction normalizeParties(data: unknown): RawParty[] {\n if (Array.isArray(data)) return data as RawParty[];\n if (data && typeof data === 'object') {\n const record = data as { current?: unknown; parties?: unknown };\n if (Array.isArray(record.current)) return record.current as RawParty[];\n if (Array.isArray(record.parties)) return record.parties as RawParty[];\n }\n return [];\n}\n\nexport class LiveClient extends TypedEmitter<LiveEventMap> {\n private readonly session: EpicAuthSession;\n private readonly partyClient: PartyClient;\n private readonly options: LiveClientOptions;\n private currentParty: Party | null = null;\n private readonly friendCache = new Map<string, ResolvedFriendEntry>();\n private readonly invites = new Map<string, PartyInviteEvent>();\n private readonly requests = new Map<string, FriendRequestEvent>();\n private started = false;\n\n constructor(session: EpicAuthSession, partyClient: PartyClient, options: LiveClientOptions = {}) {\n super();\n this.session = session;\n this.partyClient = partyClient;\n this.options = options;\n }\n\n get party(): Party | null {\n return this.currentParty;\n }\n\n get friends(): ReadonlyMap<string, ResolvedFriendEntry> {\n return this.friendCache;\n }\n\n get pendingInvites(): ReadonlyMap<string, PartyInviteEvent> {\n return this.invites;\n }\n\n get incomingRequests(): ReadonlyMap<string, FriendRequestEvent> {\n return this.requests;\n }\n\n async start(): Promise<this> {\n if (this.started) return this;\n this.started = true;\n const xmpp = await this.session.connectXmpp(this.options.xmpp);\n const events = await this.session.connectEvents(this.options.connect);\n\n xmpp.on('message', (message) => {\n void this.onXmppMessage(message);\n });\n xmpp.on('disconnected', (payload) => this.emit('disconnected', payload));\n xmpp.on('error', (error) => this.emit('error', error));\n\n events.on('friend:message', (message) => this.emit('friend:message', message));\n events.on('party:message', (message) => this.emit('party:message', message));\n events.on('presence', (presence) => this.emit('presence', presence));\n events.on('error', (error) => this.emit('error', error));\n\n await this.seed();\n this.emit('connected', undefined);\n return this;\n }\n\n async refreshParty(): Promise<Party | null> {\n try {\n this.currentParty = await this.session.getParty();\n } catch {\n this.currentParty = null;\n }\n return this.currentParty;\n }\n\n async refreshFriends(): Promise<ReadonlyMap<string, ResolvedFriendEntry>> {\n const resolved = await this.session.friendsListResolved();\n this.friendCache.clear();\n for (const entry of resolved) this.friendCache.set(entry.accountId, entry);\n return this.friendCache;\n }\n\n async createParty(config: PartyConfig = {}): Promise<Party> {\n const token = await this.session.ensureValid();\n const raw = await this.partyClient.create(token, this.identity(), config);\n this.currentParty = new Party(this.partyClient, () => this.session.ensureValid(), this.requireAccountId(), raw);\n return this.currentParty;\n }\n\n async leaveParty(): Promise<void> {\n if (!this.currentParty) return;\n await this.currentParty.leave();\n this.currentParty = null;\n }\n\n async joinParty(partyId: string): Promise<Party | null> {\n const token = await this.session.ensureValid();\n await this.partyClient.joinById(token, partyId, this.identity());\n await this.syncParty(partyId);\n return this.currentParty;\n }\n\n async joinFriend(accountId: string): Promise<Party | null> {\n const partyId = this.presenceJoinPartyId(accountId);\n if (!partyId) {\n throw new ValidationError(`No joinable party is present in ${accountId}'s presence`, 'accountId');\n }\n return this.joinParty(partyId);\n }\n\n async acceptInvite(invite: PartyInviteEvent | string): Promise<Party | null> {\n const fromId = typeof invite === 'string' ? invite : invite.fromId;\n const target = await this.invitedParty(fromId);\n if (!target) {\n throw new ValidationError(`No pending invite was found from ${fromId}`, 'fromId');\n }\n const joined = await this.joinParty(target.id);\n this.invites.delete(fromId);\n return joined;\n }\n\n async declineInvite(invite: PartyInviteEvent | string): Promise<void> {\n const fromId = typeof invite === 'string' ? invite : invite.fromId;\n const target = await this.invitedParty(fromId);\n const token = await this.session.ensureValid();\n if (target) {\n await this.partyClient.declineInvite(token, target.id, this.requireAccountId());\n }\n this.invites.delete(fromId);\n }\n\n private async seed(): Promise<void> {\n if (this.options.seedFriends !== false) {\n try {\n await this.refreshFriends();\n } catch {\n this.friendCache.clear();\n }\n }\n if (this.options.seedParty !== false) {\n await this.refreshParty();\n }\n }\n\n private async onXmppMessage(message: XmppMessage): Promise<void> {\n const decoded = decodeNotification(message.body);\n if (!decoded) return;\n this.emit('notification', decoded);\n await this.dispatch(decoded);\n }\n\n private async dispatch(decoded: DecodedNotification): Promise<void> {\n switch (decoded.kind) {\n case 'party:invite': {\n const event = this.makeInviteEvent(decoded.fromId, decoded.raw);\n this.invites.set(decoded.fromId, event);\n this.emit('party:invite', event);\n return;\n }\n case 'party:invite:declined': {\n this.emit('party:invite:declined', { accountId: decoded.accountId, raw: decoded.raw });\n return;\n }\n case 'party:join:request': {\n this.emit('party:join:request', this.makeJoinRequestEvent(decoded.partyId, decoded.requesterId, decoded.raw));\n return;\n }\n case 'party:member:joined':\n case 'party:member:expired':\n case 'party:member:connected':\n case 'party:member:disconnected':\n case 'party:member:updated':\n case 'party:member:promoted':\n case 'party:member:confirmation': {\n await this.syncParty(decoded.partyId);\n this.emit(decoded.kind, {\n partyId: decoded.partyId,\n accountId: decoded.accountId,\n party: this.currentParty,\n raw: decoded.raw,\n });\n return;\n }\n case 'party:member:left':\n case 'party:member:kicked': {\n const selfAffected = decoded.accountId === this.session.accountId;\n await this.syncParty(decoded.partyId);\n this.emit(decoded.kind, {\n partyId: decoded.partyId,\n accountId: decoded.accountId,\n party: this.currentParty,\n raw: decoded.raw,\n });\n if (selfAffected) {\n this.currentParty = null;\n this.emit('party:disbanded', { partyId: decoded.partyId });\n }\n return;\n }\n case 'party:updated': {\n await this.syncParty(decoded.partyId);\n this.emit('party:updated', { partyId: decoded.partyId, party: this.currentParty, raw: decoded.raw });\n return;\n }\n case 'friend:request': {\n const event = this.makeFriendRequestEvent(decoded.accountId, decoded.direction, decoded.favorite, decoded.created, decoded.raw);\n if (decoded.direction === 'INBOUND') this.requests.set(decoded.accountId, event);\n this.emit('friend:request', event);\n return;\n }\n case 'friend:added': {\n this.requests.delete(decoded.accountId);\n const entry: ResolvedFriendEntry = {\n accountId: decoded.accountId,\n favorite: decoded.favorite,\n ...(decoded.created ? { created: decoded.created } : {}),\n };\n this.friendCache.set(decoded.accountId, entry);\n this.emit('friend:added', { accountId: decoded.accountId, entry, raw: decoded.raw });\n return;\n }\n case 'friend:removed': {\n const accountId = decoded.to === this.session.accountId ? decoded.from : decoded.to;\n this.friendCache.delete(accountId);\n this.requests.delete(accountId);\n this.emit('friend:removed', { accountId, reason: decoded.reason, raw: decoded.raw });\n return;\n }\n default:\n return;\n }\n }\n\n private makeInviteEvent(fromId: string, raw: RawNotification): PartyInviteEvent {\n return {\n fromId,\n raw,\n accept: () => this.acceptInvite(fromId),\n decline: () => this.declineInvite(fromId),\n };\n }\n\n private makeJoinRequestEvent(partyId: string, requesterId: string, raw: RawNotification): PartyJoinRequestEvent {\n return {\n partyId,\n requesterId,\n raw,\n confirm: async () => {\n const token = await this.session.ensureValid();\n await this.partyClient.confirmMember(token, partyId, requesterId);\n },\n reject: async () => {\n const token = await this.session.ensureValid();\n await this.partyClient.rejectMember(token, partyId, requesterId);\n },\n };\n }\n\n private makeFriendRequestEvent(\n accountId: string,\n direction: FriendDirection,\n favorite: boolean,\n created: string | null,\n raw: RawNotification,\n ): FriendRequestEvent {\n return {\n accountId,\n direction,\n favorite,\n created,\n raw,\n accept: async () => {\n await this.session.acceptFriendRequests([accountId]);\n },\n decline: async () => {\n await this.session.removeFriend(accountId);\n },\n };\n }\n\n private async syncParty(partyId: string): Promise<void> {\n try {\n if (this.currentParty && this.currentParty.id === partyId) {\n await this.currentParty.refresh();\n if (!this.currentParty.me) this.currentParty = null;\n return;\n }\n const party = await this.session.getParty();\n if (party.id === partyId) this.currentParty = party;\n } catch {\n if (this.currentParty?.id === partyId) this.currentParty = null;\n }\n }\n\n private async invitedParty(fromId: string): Promise<RawParty | null> {\n const token = await this.session.ensureValid();\n const data = await this.partyClient.pings(token, this.requireAccountId(), fromId);\n return normalizeParties(data)[0] ?? null;\n }\n\n private presenceJoinPartyId(accountId: string): string | null {\n const presence = this.session.xmpp?.getPresence(accountId);\n const properties = presence?.status?.Properties;\n if (!properties) return null;\n for (const [key, value] of Object.entries(properties)) {\n if (!/party\\.joininfodata/i.test(key)) continue;\n const info = typeof value === 'string' ? safeParse(value) : value;\n if (info && typeof info === 'object') {\n const partyId = (info as Record<string, unknown>).partyId;\n if (typeof partyId === 'string' && partyId.length > 0) return partyId;\n }\n }\n return null;\n }\n\n private identity(): PartyIdentity {\n const accountId = this.requireAccountId();\n const connectionId = this.session.xmpp?.jid;\n const displayName = this.session.displayName;\n if (!connectionId) {\n throw new ValidationError('XMPP must be connected before joining or creating a party', 'connectionId');\n }\n if (!displayName) {\n throw new ValidationError('This session has no display name to present to the party', 'displayName');\n }\n return {\n accountId,\n connectionId,\n displayName,\n platform: PARTY_DEFAULT_PLATFORM,\n buildId: PARTY_BUILD_ID,\n };\n }\n\n private requireAccountId(): string {\n const accountId = this.session.accountId;\n if (!accountId) {\n throw new ValidationError('This session is not bound to an account', 'accountId');\n }\n return accountId;\n }\n}\n","import { ValidationError } from '../core/errors.js';\nimport type { MCPResponse } from './mcp.js';\nimport type { EpicAuthSession } from './session.js';\n\nexport const GIFT_CURRENCY = 'MtxCurrency';\nexport const GIFT_GAME_CONTEXT = 'Frontend.CatabaScreen';\nexport const GIFT_DEFAULT_CURRENCY_SUBTYPE = 'Currency';\n\nconst ACCOUNT_ID_PATTERN = /^[0-9a-f]{32}$/i;\n\nexport interface RawCatalogPrice {\n currencyType?: string;\n currencySubType?: string;\n regularPrice?: number;\n dynamicRegularPrice?: number;\n finalPrice?: number;\n basePrice?: number;\n saleExpiration?: string;\n [key: string]: unknown;\n}\n\nexport interface RawGiftInfo {\n bIsEnabled?: boolean;\n forcedGiftBoxTemplateId?: string;\n purchaseRequirements?: unknown[];\n giftRecordIds?: unknown[];\n [key: string]: unknown;\n}\n\nexport interface RawItemGrant {\n templateId?: string;\n quantity?: number;\n [key: string]: unknown;\n}\n\nexport interface RawMetaInfo {\n key?: string;\n value?: string;\n}\n\nexport interface RawCatalogEntry {\n offerId?: string;\n devName?: string;\n offerType?: string;\n prices?: RawCatalogPrice[];\n categories?: string[];\n giftInfo?: RawGiftInfo;\n itemGrants?: RawItemGrant[];\n metaInfo?: RawMetaInfo[];\n meta?: Record<string, unknown>;\n title?: string;\n displayAssetPath?: string;\n refundable?: boolean;\n [key: string]: unknown;\n}\n\nexport interface RawStorefront {\n name?: string;\n catalogEntries?: RawCatalogEntry[];\n [key: string]: unknown;\n}\n\nexport interface StorefrontCatalog {\n refreshIntervalHrs?: number;\n dailyPurchaseHrs?: number;\n expiration?: string;\n storefronts?: RawStorefront[];\n [key: string]: unknown;\n}\n\nexport interface ShopPrice {\n currencyType: string;\n currencySubType: string;\n basePrice: number;\n regularPrice: number;\n finalPrice: number;\n}\n\nexport interface ShopItem {\n templateId: string;\n quantity: number;\n}\n\nexport type GiftTarget = string | string[];\n\nexport interface GiftOptions {\n message?: string;\n giftWrapTemplateId?: string;\n priceIndex?: number;\n currencySubType?: string;\n price?: number;\n signal?: AbortSignal;\n}\n\nexport interface GiftResult {\n offerId: string;\n receiverAccountIds: string[];\n currencySubType: string;\n totalPrice: number;\n response: MCPResponse;\n}\n\nexport interface ShopFetchOptions {\n signal?: AbortSignal;\n timeout?: number;\n}\n\ninterface GiftDescriptor {\n offerId: string;\n currencySubType: string;\n unitPrice: number;\n}\n\nfunction normalizePrice(price: RawCatalogPrice): ShopPrice {\n const regularPrice =\n typeof price.regularPrice === 'number'\n ? price.regularPrice\n : typeof price.dynamicRegularPrice === 'number'\n ? price.dynamicRegularPrice\n : 0;\n const finalPrice = typeof price.finalPrice === 'number' ? price.finalPrice : regularPrice;\n return {\n currencyType: typeof price.currencyType === 'string' ? price.currencyType : '',\n currencySubType: typeof price.currencySubType === 'string' ? price.currencySubType : '',\n basePrice: typeof price.basePrice === 'number' ? price.basePrice : regularPrice,\n regularPrice,\n finalPrice,\n };\n}\n\nfunction extractDisplayName(raw: RawCatalogEntry): string | null {\n if (typeof raw.title === 'string' && raw.title.length > 0) return raw.title;\n for (const info of raw.metaInfo ?? []) {\n const key = typeof info.key === 'string' ? info.key.toLowerCase() : '';\n if ((key === 'displayname' || key === 'title') && typeof info.value === 'string') {\n return info.value;\n }\n }\n const metaTitle = raw.meta?.['DisplayName'] ?? raw.meta?.['title'];\n return typeof metaTitle === 'string' ? metaTitle : null;\n}\n\nfunction buildEntries(gifting: Gifting, catalog: StorefrontCatalog): ShopEntry[] {\n const entries: ShopEntry[] = [];\n for (const storefront of catalog.storefronts ?? []) {\n const name = typeof storefront.name === 'string' ? storefront.name : '';\n for (const raw of storefront.catalogEntries ?? []) {\n if (typeof raw.offerId !== 'string' || raw.offerId.length === 0) continue;\n entries.push(new ShopEntry(gifting, name, raw));\n }\n }\n return entries;\n}\n\nexport class ShopEntry {\n readonly offerId: string;\n readonly devName: string;\n readonly displayName: string | null;\n readonly offerType: string | null;\n readonly prices: ShopPrice[];\n readonly giftable: boolean;\n readonly categories: string[];\n readonly items: ShopItem[];\n readonly storefront: string;\n readonly raw: RawCatalogEntry;\n\n constructor(\n private readonly gifting: Gifting,\n storefront: string,\n raw: RawCatalogEntry,\n ) {\n this.raw = raw;\n this.storefront = storefront;\n this.offerId = typeof raw.offerId === 'string' ? raw.offerId : '';\n this.devName = typeof raw.devName === 'string' ? raw.devName : '';\n this.offerType = typeof raw.offerType === 'string' ? raw.offerType : null;\n this.displayName = extractDisplayName(raw);\n this.prices = (raw.prices ?? []).map(normalizePrice);\n this.giftable = raw.giftInfo?.bIsEnabled === true;\n this.categories = Array.isArray(raw.categories)\n ? raw.categories.filter((category): category is string => typeof category === 'string')\n : [];\n this.items = (raw.itemGrants ?? [])\n .filter((grant) => typeof grant.templateId === 'string')\n .map((grant) => ({\n templateId: grant.templateId as string,\n quantity: typeof grant.quantity === 'number' ? grant.quantity : 1,\n }));\n }\n\n get price(): ShopPrice | null {\n return this.prices[0] ?? null;\n }\n\n get name(): string {\n return this.displayName ?? this.devName;\n }\n\n priceAt(index: number): ShopPrice | null {\n return this.prices[index] ?? null;\n }\n\n gift(target: GiftTarget, options: GiftOptions = {}): Promise<GiftResult> {\n return this.gifting.giftEntry(this, target, options);\n }\n}\n\nexport class Gifting {\n constructor(private readonly session: EpicAuthSession) {}\n\n gift(offerId: string, target: GiftTarget, options: GiftOptions = {}): Promise<GiftResult> {\n if (typeof offerId !== 'string' || offerId.length === 0) {\n throw new ValidationError('\"offerId\" is required and must be a non-empty string', 'offerId');\n }\n return this.giftDescriptor(\n {\n offerId,\n currencySubType: options.currencySubType ?? GIFT_DEFAULT_CURRENCY_SUBTYPE,\n unitPrice: options.price ?? 0,\n },\n target,\n options,\n );\n }\n\n giftEntry(entry: ShopEntry, target: GiftTarget, options: GiftOptions = {}): Promise<GiftResult> {\n if (!(entry instanceof ShopEntry)) {\n throw new ValidationError('\"entry\" must be a ShopEntry', 'entry');\n }\n return this.giftDescriptor(this.describe(entry, options), target, options);\n }\n\n async giftEntries(\n entries: ShopEntry[],\n target: GiftTarget,\n options: GiftOptions = {},\n ): Promise<GiftResult[]> {\n if (!Array.isArray(entries) || entries.length === 0) {\n throw new ValidationError('\"entries\" must be a non-empty array of ShopEntry', 'entries');\n }\n const receivers = await this.resolveTargets(target, options.signal);\n const descriptors = entries.map((entry) => this.describe(entry, options));\n const results: GiftResult[] = [];\n for (const descriptor of descriptors) {\n results.push(await this.send(descriptor, receivers, options));\n }\n return results;\n }\n\n giftMany(entries: ShopEntry[], target: GiftTarget, options: GiftOptions = {}): Promise<GiftResult[]> {\n return this.giftEntries(entries, target, options);\n }\n\n setReceiveGiftsEnabled(\n enabled: boolean,\n options: { signal?: AbortSignal } = {},\n ): Promise<MCPResponse> {\n return this.session.mcpOperation('SetReceiveGiftsEnabled', {\n profileId: 'common_core',\n payload: { bReceiveGifts: enabled },\n ...(options.signal ? { signal: options.signal } : {}),\n });\n }\n\n private describe(entry: ShopEntry, options: GiftOptions): GiftDescriptor {\n const price = entry.priceAt(options.priceIndex ?? 0);\n if (!price) {\n throw new ValidationError(`Shop entry \"${entry.offerId}\" has no price to gift with`, 'entry');\n }\n return {\n offerId: entry.offerId,\n currencySubType: options.currencySubType ?? price.currencySubType,\n unitPrice: options.price ?? price.finalPrice,\n };\n }\n\n private async giftDescriptor(\n descriptor: GiftDescriptor,\n target: GiftTarget,\n options: GiftOptions,\n ): Promise<GiftResult> {\n const receivers = await this.resolveTargets(target, options.signal);\n return this.send(descriptor, receivers, options);\n }\n\n private async send(\n descriptor: GiftDescriptor,\n receivers: string[],\n options: GiftOptions,\n ): Promise<GiftResult> {\n if (receivers.length === 0) {\n throw new ValidationError('A gift needs at least one receiver', 'target');\n }\n const totalPrice = descriptor.unitPrice * receivers.length;\n const payload = {\n offerId: descriptor.offerId,\n currency: GIFT_CURRENCY,\n currencySubType: descriptor.currencySubType,\n expectedTotalPrice: totalPrice,\n gameContext: GIFT_GAME_CONTEXT,\n receiverAccountIds: receivers,\n giftWrapTemplateId: options.giftWrapTemplateId ?? '',\n personalMessage: options.message ?? '',\n };\n const response = await this.session.mcpOperation('GiftCatalogEntry', {\n profileId: 'common_core',\n payload,\n ...(options.signal ? { signal: options.signal } : {}),\n });\n return {\n offerId: descriptor.offerId,\n receiverAccountIds: receivers,\n currencySubType: descriptor.currencySubType,\n totalPrice,\n response,\n };\n }\n\n private async resolveTargets(target: GiftTarget, signal?: AbortSignal): Promise<string[]> {\n const list = Array.isArray(target) ? target : [target];\n if (list.length === 0) {\n throw new ValidationError('A gift needs at least one receiver', 'target');\n }\n const seen = new Set<string>();\n const receivers: string[] = [];\n for (const value of list) {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(\n 'Each gift target must be a non-empty accountId or display name',\n 'target',\n );\n }\n const accountId = await this.resolveAccountId(value.trim(), signal);\n if (!seen.has(accountId)) {\n seen.add(accountId);\n receivers.push(accountId);\n }\n }\n return receivers;\n }\n\n private async resolveAccountId(value: string, signal?: AbortSignal): Promise<string> {\n if (ACCOUNT_ID_PATTERN.test(value)) return value;\n const account = await this.session.accountByDisplayName(\n value,\n signal ? { signal } : undefined,\n );\n return account.id;\n }\n}\n\nexport class Shop {\n private readonly giftingHelper: Gifting;\n private rawValue: StorefrontCatalog;\n private entriesValue: ShopEntry[];\n\n constructor(\n private readonly session: EpicAuthSession,\n raw: StorefrontCatalog,\n ) {\n this.giftingHelper = new Gifting(session);\n this.rawValue = raw;\n this.entriesValue = buildEntries(this.giftingHelper, raw);\n }\n\n get raw(): StorefrontCatalog {\n return this.rawValue;\n }\n\n get entries(): ShopEntry[] {\n return this.entriesValue;\n }\n\n get giftable(): ShopEntry[] {\n return this.entriesValue.filter((entry) => entry.giftable);\n }\n\n get gifting(): Gifting {\n return this.giftingHelper;\n }\n\n get expiration(): string | null {\n return typeof this.rawValue.expiration === 'string' ? this.rawValue.expiration : null;\n }\n\n byOfferId(offerId: string): ShopEntry | null {\n return this.entriesValue.find((entry) => entry.offerId === offerId) ?? null;\n }\n\n filter(predicate: (entry: ShopEntry) => boolean): ShopEntry[] {\n return this.entriesValue.filter(predicate);\n }\n\n find(nameOrOffer: string): ShopEntry | null {\n if (typeof nameOrOffer !== 'string' || nameOrOffer.length === 0) return null;\n const needle = nameOrOffer.toLowerCase();\n return (\n this.entriesValue.find((entry) => entry.offerId === nameOrOffer) ??\n this.entriesValue.find((entry) => entry.devName.toLowerCase() === needle) ??\n this.entriesValue.find((entry) => (entry.displayName ?? '').toLowerCase() === needle) ??\n this.entriesValue.find((entry) => entry.devName.toLowerCase().includes(needle)) ??\n this.entriesValue.find((entry) => (entry.displayName ?? '').toLowerCase().includes(needle)) ??\n null\n );\n }\n\n search(query: string): ShopEntry[] {\n if (typeof query !== 'string' || query.length === 0) return [];\n const needle = query.toLowerCase();\n return this.entriesValue.filter(\n (entry) =>\n entry.devName.toLowerCase().includes(needle) ||\n (entry.displayName ?? '').toLowerCase().includes(needle),\n );\n }\n\n gift(\n entries: ShopEntry | ShopEntry[] | string | string[],\n target: GiftTarget,\n options: GiftOptions = {},\n ): Promise<GiftResult[]> {\n const list = Array.isArray(entries) ? entries : [entries];\n if (list.length === 0) {\n throw new ValidationError('\"entries\" must contain at least one shop entry', 'entries');\n }\n const resolved = list.map((item) => {\n if (item instanceof ShopEntry) return item;\n const found = this.find(item);\n if (!found) {\n throw new ValidationError(`No shop entry matches \"${item}\"`, 'entries');\n }\n return found;\n });\n return this.giftingHelper.giftEntries(resolved, target, options);\n }\n\n async refresh(options: ShopFetchOptions = {}): Promise<this> {\n this.rawValue = await this.session.storefrontCatalog<StorefrontCatalog>(options);\n this.entriesValue = buildEntries(this.giftingHelper, this.rawValue);\n return this;\n }\n}\n","import { ValidationError } from '../core/errors.js';\r\nimport type { QueryParams } from '../core/types.js';\r\nimport type { EpicRestClient } from './rest.js';\r\nimport type {\r\n AccountMetadata,\r\n DeviceAuth,\r\n EpicAccount,\r\n ExternalAuth,\r\n ExternalAuthAccountMatch,\r\n ExternalDisplayNameLookup,\r\n ExternalIdLookup,\r\n} from './types.js';\r\n\r\nfunction requireString(value: unknown, parameter: string): string {\r\n if (typeof value !== 'string' || value.trim().length === 0) {\r\n throw new ValidationError(`\"${parameter}\" is required and must be a non-empty string`, parameter);\r\n }\r\n return value;\r\n}\r\n\r\nfunction requireStringList(value: unknown, parameter: string): string[] {\r\n if (!Array.isArray(value) || value.length === 0) {\r\n throw new ValidationError(`\"${parameter}\" must be a non-empty array`, parameter);\r\n }\r\n if (value.length > 100) {\r\n throw new ValidationError(`\"${parameter}\" accepts at most 100 values per request`, parameter);\r\n }\r\n return value as string[];\r\n}\r\n\r\nfunction accountPath(accountId: string): string {\r\n return `/account/api/public/account/${encodeURIComponent(accountId)}`;\r\n}\r\n\r\nexport class DeviceAuthManager {\r\n constructor(private readonly rest: EpicRestClient) {}\r\n\r\n async create(accessToken: string, accountId: string, options?: { signal?: AbortSignal }): Promise<DeviceAuth> {\r\n requireString(accessToken, 'accessToken');\r\n requireString(accountId, 'accountId');\r\n const response = await this.rest.request<DeviceAuth>('POST', `${accountPath(accountId)}/deviceAuth`, {\r\n bearer: accessToken,\r\n json: {},\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n });\r\n return response.data;\r\n }\r\n\r\n async list(accessToken: string, accountId: string, options?: { signal?: AbortSignal }): Promise<DeviceAuth[]> {\r\n requireString(accessToken, 'accessToken');\r\n requireString(accountId, 'accountId');\r\n const response = await this.rest.request<DeviceAuth[]>('GET', `${accountPath(accountId)}/deviceAuth`, {\r\n bearer: accessToken,\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n });\r\n return response.data;\r\n }\r\n\r\n async get(\r\n accessToken: string,\r\n accountId: string,\r\n deviceId: string,\r\n options?: { signal?: AbortSignal },\r\n ): Promise<DeviceAuth> {\r\n requireString(accessToken, 'accessToken');\r\n requireString(accountId, 'accountId');\r\n requireString(deviceId, 'deviceId');\r\n const response = await this.rest.request<DeviceAuth>(\r\n 'GET',\r\n `${accountPath(accountId)}/deviceAuth/${encodeURIComponent(deviceId)}`,\r\n {\r\n bearer: accessToken,\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n },\r\n );\r\n return response.data;\r\n }\r\n\r\n async delete(\r\n accessToken: string,\r\n accountId: string,\r\n deviceId: string,\r\n options?: { signal?: AbortSignal },\r\n ): Promise<void> {\r\n requireString(accessToken, 'accessToken');\r\n requireString(accountId, 'accountId');\r\n requireString(deviceId, 'deviceId');\r\n await this.rest.request<null>(\r\n 'DELETE',\r\n `${accountPath(accountId)}/deviceAuth/${encodeURIComponent(deviceId)}`,\r\n {\r\n bearer: accessToken,\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n },\r\n );\r\n }\r\n}\r\n\r\nexport class AccountManager {\r\n constructor(private readonly rest: EpicRestClient) {}\r\n\r\n async byId(accessToken: string, accountId: string, options?: { signal?: AbortSignal }): Promise<EpicAccount> {\r\n requireString(accessToken, 'accessToken');\r\n requireString(accountId, 'accountId');\r\n const response = await this.rest.request<EpicAccount>('GET', accountPath(accountId), {\r\n bearer: accessToken,\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n });\r\n return response.data;\r\n }\r\n\r\n async byIds(accessToken: string, accountIds: string[], options?: { signal?: AbortSignal }): Promise<EpicAccount[]> {\r\n requireString(accessToken, 'accessToken');\r\n if (!Array.isArray(accountIds) || accountIds.length === 0) {\r\n throw new ValidationError('\"accountIds\" must be a non-empty array', 'accountIds');\r\n }\r\n if (accountIds.length > 100) {\r\n throw new ValidationError('\"accountIds\" accepts at most 100 ids per request', 'accountIds');\r\n }\r\n\r\n const query: QueryParams = { accountId: accountIds };\r\n const response = await this.rest.request<EpicAccount[]>('GET', '/account/api/public/account', {\r\n bearer: accessToken,\r\n query,\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n });\r\n return response.data;\r\n }\r\n\r\n async resolveAccounts(\r\n accessToken: string,\r\n accountIds: string[],\r\n options?: { signal?: AbortSignal },\r\n ): Promise<Map<string, EpicAccount>> {\r\n requireString(accessToken, 'accessToken');\r\n if (!Array.isArray(accountIds)) {\r\n throw new ValidationError('\"accountIds\" must be an array', 'accountIds');\r\n }\r\n const unique = [...new Set(accountIds.filter((id) => typeof id === 'string' && id.trim().length > 0))];\r\n const resolved = new Map<string, EpicAccount>();\r\n for (let index = 0; index < unique.length; index += 100) {\r\n const chunk = unique.slice(index, index + 100);\r\n const accounts = await this.byIds(accessToken, chunk, options);\r\n for (const account of accounts) resolved.set(account.id, account);\r\n }\r\n return resolved;\r\n }\r\n\r\n async resolveNames(\r\n accessToken: string,\r\n accountIds: string[],\r\n options?: { signal?: AbortSignal },\r\n ): Promise<Map<string, string>> {\r\n const accounts = await this.resolveAccounts(accessToken, accountIds, options);\r\n const names = new Map<string, string>();\r\n for (const [id, account] of accounts) names.set(id, account.displayName);\r\n return names;\r\n }\r\n\r\n async byDisplayName(\r\n accessToken: string,\r\n displayName: string,\r\n options?: { signal?: AbortSignal },\r\n ): Promise<EpicAccount> {\r\n requireString(accessToken, 'accessToken');\r\n requireString(displayName, 'displayName');\r\n const response = await this.rest.request<EpicAccount>(\r\n 'GET',\r\n `/account/api/public/account/displayName/${encodeURIComponent(displayName)}`,\r\n {\r\n bearer: accessToken,\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n },\r\n );\r\n return response.data;\r\n }\r\n\r\n async byEmail(accessToken: string, email: string, options?: { signal?: AbortSignal }): Promise<EpicAccount> {\r\n requireString(accessToken, 'accessToken');\r\n requireString(email, 'email');\r\n const response = await this.rest.request<EpicAccount>(\r\n 'GET',\r\n `/account/api/public/account/email/${encodeURIComponent(email)}`,\r\n {\r\n bearer: accessToken,\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n },\r\n );\r\n return response.data;\r\n }\r\n\r\n async externalAuths(\r\n accessToken: string,\r\n accountId: string,\r\n options?: { signal?: AbortSignal },\r\n ): Promise<ExternalAuth[]> {\r\n requireString(accessToken, 'accessToken');\r\n requireString(accountId, 'accountId');\r\n const response = await this.rest.request<ExternalAuth[]>(\r\n 'GET',\r\n `${accountPath(accountId)}/externalAuths`,\r\n {\r\n bearer: accessToken,\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n },\r\n );\r\n return response.data;\r\n }\r\n\r\n async externalAuth(\r\n accessToken: string,\r\n accountId: string,\r\n externalAuthType: string,\r\n options?: { signal?: AbortSignal },\r\n ): Promise<ExternalAuth> {\r\n requireString(accessToken, 'accessToken');\r\n requireString(accountId, 'accountId');\r\n requireString(externalAuthType, 'externalAuthType');\r\n const response = await this.rest.request<ExternalAuth>(\r\n 'GET',\r\n `${accountPath(accountId)}/externalAuths/${encodeURIComponent(externalAuthType)}`,\r\n {\r\n bearer: accessToken,\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n },\r\n );\r\n return response.data;\r\n }\r\n\r\n async byExternalDisplayName(\r\n accessToken: string,\r\n externalAuthType: string,\r\n displayName: string,\r\n options?: { caseInsensitive?: boolean; signal?: AbortSignal },\r\n ): Promise<ExternalAuthAccountMatch[]> {\r\n requireString(accessToken, 'accessToken');\r\n requireString(externalAuthType, 'externalAuthType');\r\n requireString(displayName, 'displayName');\r\n const query: QueryParams = {};\r\n if (options?.caseInsensitive !== undefined) {\r\n query['caseInsensitive'] = String(options.caseInsensitive);\r\n }\r\n const response = await this.rest.request<ExternalAuthAccountMatch[]>(\r\n 'GET',\r\n `/account/api/public/account/lookup/externalAuth/${encodeURIComponent(externalAuthType)}/displayName/${encodeURIComponent(displayName)}`,\r\n {\r\n bearer: accessToken,\r\n query,\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n },\r\n );\r\n return response.data;\r\n }\r\n\r\n async byExternalDisplayNames(\r\n accessToken: string,\r\n authType: string,\r\n displayNames: string[],\r\n options?: { signal?: AbortSignal },\r\n ): Promise<ExternalDisplayNameLookup> {\r\n requireString(accessToken, 'accessToken');\r\n requireString(authType, 'authType');\r\n const names = requireStringList(displayNames, 'displayNames');\r\n const response = await this.rest.request<ExternalDisplayNameLookup>(\r\n 'POST',\r\n '/account/api/public/account/lookup/externalDisplayName',\r\n {\r\n bearer: accessToken,\r\n json: { authType, displayNames: names },\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n },\r\n );\r\n return response.data;\r\n }\r\n\r\n async byExternalIds(\r\n accessToken: string,\r\n authType: string,\r\n ids: string[],\r\n options?: { signal?: AbortSignal },\r\n ): Promise<ExternalIdLookup> {\r\n requireString(accessToken, 'accessToken');\r\n requireString(authType, 'authType');\r\n const externalIds = requireStringList(ids, 'ids');\r\n const response = await this.rest.request<ExternalIdLookup>(\r\n 'POST',\r\n '/account/api/public/account/lookup/externalId',\r\n {\r\n bearer: accessToken,\r\n json: { authType, ids: externalIds },\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n },\r\n );\r\n return response.data;\r\n }\r\n\r\n async metadata(\r\n accessToken: string,\r\n accountId: string,\r\n options?: { signal?: AbortSignal },\r\n ): Promise<AccountMetadata> {\r\n requireString(accessToken, 'accessToken');\r\n requireString(accountId, 'accountId');\r\n const response = await this.rest.request<AccountMetadata>(\r\n 'GET',\r\n `/account/api/accounts/${encodeURIComponent(accountId)}/metadata`,\r\n {\r\n bearer: accessToken,\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n },\r\n );\r\n return response.data;\r\n }\r\n}\r\n","import { ConfigurationError, ValidationError } from '../core/errors.js';\nimport type { AccountManager } from './account.js';\nimport type { EpicRestClient } from './rest.js';\nimport type { EpicAccount } from './types.js';\n\nexport const FRIENDS_BASE_URL = 'https://friends-public-service-prod.ol.epicgames.com';\n\nexport interface FriendEntry {\n accountId: string;\n groups?: string[];\n mutual?: number;\n nickname?: string;\n note?: string;\n favorite?: boolean;\n created?: string;\n}\n\nexport interface ResolvedFriendEntry extends FriendEntry {\n displayName?: string;\n account?: EpicAccount;\n}\n\ninterface RawFriendEntry extends Omit<FriendEntry, 'nickname'> {\n alias?: string;\n nickname?: string;\n}\n\ninterface RawFriendsSummary extends Omit<FriendsSummary, 'friends' | 'incoming' | 'outgoing' | 'suggested'> {\n friends?: RawFriendEntry[];\n incoming?: RawFriendEntry[];\n outgoing?: RawFriendEntry[];\n suggested?: RawFriendEntry[];\n}\n\nfunction normalizeEntry(entry: RawFriendEntry): FriendEntry {\n const { alias, nickname, ...rest } = entry;\n const resolved = nickname ?? alias;\n return { ...rest, ...(resolved !== undefined ? { nickname: resolved } : {}) };\n}\n\nexport interface BlocklistEntry {\n accountId: string;\n created: string;\n}\n\nexport interface FriendSettings {\n acceptInvites?: string;\n mutualPrivacy?: string;\n}\n\nexport interface FriendsLimitsReached {\n incoming: boolean;\n outgoing: boolean;\n accepted: boolean;\n}\n\nexport interface FriendsSummary {\n friends: FriendEntry[];\n incoming: FriendEntry[];\n outgoing: FriendEntry[];\n suggested: FriendEntry[];\n blocklist: BlocklistEntry[];\n settings: FriendSettings;\n limitsReached: FriendsLimitsReached;\n}\n\nexport interface FriendAddOptions {\n pin?: string;\n signal?: AbortSignal;\n}\n\nfunction requireString(value: unknown, parameter: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(`\"${parameter}\" is required and must be a non-empty string`, parameter);\n }\n return value;\n}\n\nexport class FriendsManager {\n constructor(\n private readonly rest: EpicRestClient,\n private readonly accounts?: AccountManager,\n ) {}\n\n private base(accountId: string): string {\n return `/friends/api/v1/${encodeURIComponent(accountId)}`;\n }\n\n private requireAccounts(): AccountManager {\n if (!this.accounts) {\n throw new ConfigurationError(\n 'Name resolution requires an AccountManager. Use client.friends (which is wired with one) ' +\n 'or construct new FriendsManager(rest, accountManager).',\n 'accounts',\n );\n }\n return this.accounts;\n }\n\n async summary(\n accessToken: string,\n accountId: string,\n options?: { signal?: AbortSignal },\n ): Promise<FriendsSummary> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n const response = await this.rest.request<RawFriendsSummary>('GET', `${this.base(accountId)}/summary`, {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n });\n const raw = response.data;\n return {\n ...raw,\n friends: (raw.friends ?? []).map(normalizeEntry),\n incoming: (raw.incoming ?? []).map(normalizeEntry),\n outgoing: (raw.outgoing ?? []).map(normalizeEntry),\n suggested: (raw.suggested ?? []).map(normalizeEntry),\n };\n }\n\n private async listing(\n accessToken: string,\n accountId: string,\n segment: string,\n options?: { signal?: AbortSignal },\n ): Promise<FriendEntry[]> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n const response = await this.rest.request<RawFriendEntry[]>('GET', `${this.base(accountId)}/${segment}`, {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n });\n return response.data.map(normalizeEntry);\n }\n\n list(accessToken: string, accountId: string, options?: { signal?: AbortSignal }): Promise<FriendEntry[]> {\n return this.listing(accessToken, accountId, 'friends', options);\n }\n\n incoming(accessToken: string, accountId: string, options?: { signal?: AbortSignal }): Promise<FriendEntry[]> {\n return this.listing(accessToken, accountId, 'incoming', options);\n }\n\n outgoing(accessToken: string, accountId: string, options?: { signal?: AbortSignal }): Promise<FriendEntry[]> {\n return this.listing(accessToken, accountId, 'outgoing', options);\n }\n\n suggested(accessToken: string, accountId: string, options?: { signal?: AbortSignal }): Promise<FriendEntry[]> {\n return this.listing(accessToken, accountId, 'suggested', options);\n }\n\n async resolveEntries(\n accessToken: string,\n entries: FriendEntry[],\n options?: { signal?: AbortSignal },\n ): Promise<ResolvedFriendEntry[]> {\n requireString(accessToken, 'accessToken');\n const accounts = await this.requireAccounts().resolveAccounts(\n accessToken,\n entries.map((entry) => entry.accountId),\n options,\n );\n return entries.map((entry) => {\n const account = accounts.get(entry.accountId);\n return account ? { ...entry, displayName: account.displayName, account } : { ...entry };\n });\n }\n\n async listResolved(\n accessToken: string,\n accountId: string,\n options?: { signal?: AbortSignal },\n ): Promise<ResolvedFriendEntry[]> {\n const entries = await this.list(accessToken, accountId, options);\n return this.resolveEntries(accessToken, entries, options);\n }\n\n async acceptBulk(\n accessToken: string,\n accountId: string,\n targetIds: string[],\n options?: { signal?: AbortSignal },\n ): Promise<string[]> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n if (!Array.isArray(targetIds) || targetIds.length === 0) {\n throw new ValidationError('\"targetIds\" must be a non-empty array', 'targetIds');\n }\n const response = await this.rest.request<string[]>('POST', `${this.base(accountId)}/incoming/accept`, {\n bearer: accessToken,\n query: { targetIds: targetIds.join(',') },\n ...(options?.signal ? { signal: options.signal } : {}),\n });\n return response.data;\n }\n\n async clearAll(\n accessToken: string,\n accountId: string,\n options?: { signal?: AbortSignal },\n ): Promise<void> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n await this.rest.request<null>('DELETE', `${this.base(accountId)}/friends`, {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n });\n }\n\n async get(\n accessToken: string,\n accountId: string,\n friendId: string,\n options?: { signal?: AbortSignal },\n ): Promise<FriendEntry> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n requireString(friendId, 'friendId');\n const response = await this.rest.request<RawFriendEntry>(\n 'GET',\n `${this.base(accountId)}/friends/${encodeURIComponent(friendId)}`,\n {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return normalizeEntry(response.data);\n }\n\n async add(\n accessToken: string,\n accountId: string,\n friendId: string,\n options?: FriendAddOptions,\n ): Promise<void> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n requireString(friendId, 'friendId');\n await this.rest.request<null>(\n 'POST',\n `${this.base(accountId)}/friends/${encodeURIComponent(friendId)}`,\n {\n bearer: accessToken,\n ...(options?.pin ? { json: { pin: options.pin } } : {}),\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n }\n\n async remove(\n accessToken: string,\n accountId: string,\n friendId: string,\n options?: { signal?: AbortSignal },\n ): Promise<void> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n requireString(friendId, 'friendId');\n await this.rest.request<null>(\n 'DELETE',\n `${this.base(accountId)}/friends/${encodeURIComponent(friendId)}`,\n {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n }\n\n async mutual(\n accessToken: string,\n accountId: string,\n friendId: string,\n options?: { signal?: AbortSignal },\n ): Promise<string[]> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n requireString(friendId, 'friendId');\n const response = await this.rest.request<string[]>(\n 'GET',\n `${this.base(accountId)}/friends/${encodeURIComponent(friendId)}/mutual`,\n {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n\n async setNickname(\n accessToken: string,\n accountId: string,\n friendId: string,\n nickname: string,\n options?: { signal?: AbortSignal },\n ): Promise<void> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n requireString(friendId, 'friendId');\n requireString(nickname, 'nickname');\n await this.rest.request<null>(\n 'PUT',\n `${this.base(accountId)}/friends/${encodeURIComponent(friendId)}/alias`,\n {\n bearer: accessToken,\n text: nickname,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n }\n\n async removeNickname(\n accessToken: string,\n accountId: string,\n friendId: string,\n options?: { signal?: AbortSignal },\n ): Promise<void> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n requireString(friendId, 'friendId');\n await this.rest.request<null>(\n 'DELETE',\n `${this.base(accountId)}/friends/${encodeURIComponent(friendId)}/alias`,\n {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n }\n\n async setNote(\n accessToken: string,\n accountId: string,\n friendId: string,\n note: string,\n options?: { signal?: AbortSignal },\n ): Promise<void> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n requireString(friendId, 'friendId');\n requireString(note, 'note');\n await this.rest.request<null>(\n 'PUT',\n `${this.base(accountId)}/friends/${encodeURIComponent(friendId)}/note`,\n {\n bearer: accessToken,\n text: note,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n }\n\n async removeNote(\n accessToken: string,\n accountId: string,\n friendId: string,\n options?: { signal?: AbortSignal },\n ): Promise<void> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n requireString(friendId, 'friendId');\n await this.rest.request<null>(\n 'DELETE',\n `${this.base(accountId)}/friends/${encodeURIComponent(friendId)}/note`,\n {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n }\n\n async blocklist(\n accessToken: string,\n accountId: string,\n options?: { signal?: AbortSignal },\n ): Promise<BlocklistEntry[]> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n const response = await this.rest.request<BlocklistEntry[]>('GET', `${this.base(accountId)}/blocklist`, {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n });\n return response.data;\n }\n\n async block(\n accessToken: string,\n accountId: string,\n userId: string,\n options?: { signal?: AbortSignal },\n ): Promise<void> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n requireString(userId, 'userId');\n await this.rest.request<null>(\n 'POST',\n `${this.base(accountId)}/blocklist/${encodeURIComponent(userId)}`,\n {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n }\n\n async unblock(\n accessToken: string,\n accountId: string,\n userId: string,\n options?: { signal?: AbortSignal },\n ): Promise<void> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n requireString(userId, 'userId');\n await this.rest.request<null>(\n 'DELETE',\n `${this.base(accountId)}/blocklist/${encodeURIComponent(userId)}`,\n {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n }\n}\n","import { ValidationError } from '../core/errors.js';\nimport type { QueryParams } from '../core/types.js';\nimport type { EpicRestClient } from './rest.js';\n\nexport const HABANERO_BASE_URL = 'https://fn-service-habanero-live-public.ogs.live.on.epicgames.com';\n\nexport const HABANERO_NAMESPACE = 'fortnite';\n\nexport const HABANERO_MAX_BULK_ACCOUNTS = 25;\n\nexport const RankingType = {\n BattleRoyaleBuild: 'ranked-br',\n BattleRoyaleCombined: 'ranked-br-combined',\n ZeroBuild: 'ranked-zb',\n RocketRacing: 'delmar-competitive',\n ReloadBuild: 'ranked_blastberry_build',\n ReloadZeroBuild: 'ranked_blastberry_nobuild',\n ReloadCombined: 'ranked-blastberry-combined',\n Ballistic: 'ranked-feral',\n OgBuild: 'ranked-figment-build',\n OgZeroBuild: 'ranked-figment-nobuild',\n Getaway: 'ranked-bling',\n GetawayZeroBuild: 'ranked-bling-nobuild',\n FallGuysCrownJam: 'ranked-pimlico',\n Arenas: 'ranked-squareclub',\n} as const;\n\nexport type RankingType = (typeof RankingType)[keyof typeof RankingType];\n\nexport const RANKING_TYPES = Object.values(RankingType);\n\nexport function isRankingType(value: unknown): value is RankingType {\n return typeof value === 'string' && (RANKING_TYPES as string[]).includes(value);\n}\n\nexport interface HabaneroTrack {\n gameId: string;\n trackguid: string;\n rankingType: string;\n beginTime: string;\n endTime: string;\n divisionCount: number;\n leaderboardTrackingEventId: string;\n}\n\nexport interface HabaneroProgress {\n gameId: string;\n trackguid: string;\n accountId: string;\n rankingType: string;\n lastUpdated: string;\n currentDivision: number;\n highestDivision: number;\n promotionProgress: number;\n currentPlayerRanking: number | null;\n}\n\nexport interface HabaneroBaseOptions {\n namespace?: string;\n signal?: AbortSignal;\n}\n\nexport interface HabaneroTracksOptions extends HabaneroBaseOptions {\n endsAfter?: string;\n rankingType?: RankingType | (string & {});\n}\n\nexport interface HabaneroProgressOptions extends HabaneroBaseOptions {\n endsAfter?: string;\n}\n\nexport interface HabaneroRankingTypeOptions extends HabaneroBaseOptions {\n endsAfter?: string;\n}\n\nfunction requireString(value: unknown, parameter: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(`\"${parameter}\" is required and must be a non-empty string`, parameter);\n }\n return value;\n}\n\nfunction requireAccountIds(accountIds: unknown): string[] {\n if (!Array.isArray(accountIds) || accountIds.length === 0) {\n throw new ValidationError('\"accountIds\" must be a non-empty array', 'accountIds');\n }\n if (accountIds.length > HABANERO_MAX_BULK_ACCOUNTS) {\n throw new ValidationError(\n `\"accountIds\" accepts at most ${HABANERO_MAX_BULK_ACCOUNTS} ids per request`,\n 'accountIds',\n );\n }\n return accountIds as string[];\n}\n\nexport class HabaneroManager {\n private readonly namespace: string;\n\n constructor(\n private readonly rest: EpicRestClient,\n options?: { namespace?: string },\n ) {\n this.namespace = options?.namespace ?? HABANERO_NAMESPACE;\n }\n\n private base(namespace?: string): string {\n return `/api/v1/games/${encodeURIComponent(namespace ?? this.namespace)}`;\n }\n\n async tracks(accessToken: string, options?: HabaneroTracksOptions): Promise<HabaneroTrack[]> {\n requireString(accessToken, 'accessToken');\n const query: QueryParams = {};\n if (options?.endsAfter) query['endsAfter'] = options.endsAfter;\n if (options?.rankingType) query['rankingType'] = options.rankingType;\n const response = await this.rest.request<HabaneroTrack[]>(\n 'GET',\n `${this.base(options?.namespace)}/tracks/query`,\n {\n bearer: accessToken,\n query,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n\n async trackByGuid(\n accessToken: string,\n trackguid: string,\n options?: HabaneroBaseOptions,\n ): Promise<HabaneroTrack> {\n requireString(accessToken, 'accessToken');\n requireString(trackguid, 'trackguid');\n const response = await this.rest.request<HabaneroTrack>(\n 'GET',\n `${this.base(options?.namespace)}/tracks/byGUID/${encodeURIComponent(trackguid)}`,\n {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n\n async activeTracks(\n accessToken: string,\n startDate: string,\n options?: HabaneroBaseOptions,\n ): Promise<HabaneroTrack[]> {\n requireString(accessToken, 'accessToken');\n requireString(startDate, 'startDate');\n const response = await this.rest.request<HabaneroTrack[]>(\n 'GET',\n `${this.base(options?.namespace)}/tracks/activeBy/${encodeURIComponent(startDate)}`,\n {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n\n async progress(\n accessToken: string,\n accountId: string,\n trackguid: string,\n options?: HabaneroBaseOptions,\n ): Promise<HabaneroProgress> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n requireString(trackguid, 'trackguid');\n const response = await this.rest.request<HabaneroProgress>(\n 'GET',\n `${this.base(options?.namespace)}/trackprogress/${encodeURIComponent(accountId)}/byTrack/${encodeURIComponent(trackguid)}`,\n {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n\n async allProgress(\n accessToken: string,\n accountId: string,\n options?: HabaneroProgressOptions,\n ): Promise<HabaneroProgress[]> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n const query: QueryParams = {};\n if (options?.endsAfter) query['endsAfter'] = options.endsAfter;\n const response = await this.rest.request<HabaneroProgress[]>(\n 'GET',\n `${this.base(options?.namespace)}/trackprogress/${encodeURIComponent(accountId)}`,\n {\n bearer: accessToken,\n query,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n\n async bulkProgress(\n accessToken: string,\n trackguid: string,\n accountIds: string[],\n options?: HabaneroBaseOptions,\n ): Promise<HabaneroProgress[]> {\n requireString(accessToken, 'accessToken');\n requireString(trackguid, 'trackguid');\n const ids = requireAccountIds(accountIds);\n const response = await this.rest.request<HabaneroProgress[]>(\n 'POST',\n `${this.base(options?.namespace)}/trackprogress/byAccountIds/${encodeURIComponent(trackguid)}`,\n {\n bearer: accessToken,\n json: { accountIds: ids },\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n\n async bulkProgressByRankingType(\n accessToken: string,\n rankingType: RankingType | (string & {}),\n accountIds: string[],\n options?: HabaneroRankingTypeOptions,\n ): Promise<HabaneroProgress[]> {\n requireString(accessToken, 'accessToken');\n requireString(rankingType, 'rankingType');\n const ids = requireAccountIds(accountIds);\n const query: QueryParams = { rankingType };\n if (options?.endsAfter) query['endsAfter'] = options.endsAfter;\n const response = await this.rest.request<HabaneroProgress[]>(\n 'POST',\n `${this.base(options?.namespace)}/trackprogress/bulkByRankingType`,\n {\n bearer: accessToken,\n query,\n json: { accountIds: ids },\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n}\n","import { ValidationError } from '../core/errors.js';\nimport type { EpicRestClient } from './rest.js';\n\nexport const PRESENCE_BASE_URL = 'https://presence-public-service-prod.ol.epicgames.com';\n\nexport const PRESENCE_NAMESPACE = 'Fortnite';\n\nexport interface LastOnlineEntry {\n namespace?: string;\n last_online: string;\n}\n\nexport type LastOnlineResponse = Record<string, LastOnlineEntry[]>;\n\nexport interface PresenceOptions {\n namespace?: string;\n signal?: AbortSignal;\n}\n\nfunction requireString(value: unknown, parameter: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(`\"${parameter}\" is required and must be a non-empty string`, parameter);\n }\n return value;\n}\n\nexport class PresenceManager {\n private readonly namespace: string;\n\n constructor(\n private readonly rest: EpicRestClient,\n options?: { namespace?: string },\n ) {\n this.namespace = options?.namespace ?? PRESENCE_NAMESPACE;\n }\n\n async lastOnline(\n accessToken: string,\n accountId: string,\n options?: PresenceOptions,\n ): Promise<LastOnlineResponse> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n const namespace = options?.namespace ?? this.namespace;\n const response = await this.rest.request<LastOnlineResponse>(\n 'GET',\n `/presence/api/v1/${encodeURIComponent(namespace)}/${encodeURIComponent(accountId)}/last-online`,\n {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n\n async lastOnlineFor(\n accessToken: string,\n accountId: string,\n options?: PresenceOptions,\n ): Promise<LastOnlineEntry | null> {\n const response = await this.lastOnline(accessToken, accountId, options);\n return response[accountId]?.[0] ?? null;\n }\n}\n","import { ValidationError } from '../core/errors.js';\nimport type { QueryParams } from '../core/types.js';\nimport type { EpicRestClient } from './rest.js';\n\nexport const LIGHTSWITCH_BASE_URL = 'https://lightswitch-public-service-prod.ol.epicgames.com';\n\nexport const LIGHTSWITCH_BULK_BASE_URL = 'https://lightswitch-public-service-prod06.ol.epicgames.com';\n\nexport const LIGHTSWITCH_SERVICE_ID = 'Fortnite';\n\nexport interface LightswitchLauncherInfo {\n appName?: string;\n catalogItemId?: string;\n namespace?: string;\n}\n\nexport interface LightswitchStatus {\n serviceInstanceId: string;\n status: string;\n message?: string;\n maintenanceUri?: string | null;\n overrideCatalogIds?: string[];\n allowedActions?: string[];\n banned?: boolean;\n launcherInfoDTO?: LightswitchLauncherInfo;\n}\n\nexport interface LightswitchOptions {\n signal?: AbortSignal;\n}\n\nfunction requireString(value: unknown, parameter: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(`\"${parameter}\" is required and must be a non-empty string`, parameter);\n }\n return value;\n}\n\nfunction requireStringList(value: unknown, parameter: string): string[] {\n if (!Array.isArray(value) || value.length === 0) {\n throw new ValidationError(`\"${parameter}\" must be a non-empty array`, parameter);\n }\n return value as string[];\n}\n\nexport class LightswitchManager {\n private readonly serviceId: string;\n\n constructor(\n private readonly rest: EpicRestClient,\n private readonly bulkRest: EpicRestClient,\n options?: { serviceId?: string },\n ) {\n this.serviceId = options?.serviceId ?? LIGHTSWITCH_SERVICE_ID;\n }\n\n async status(\n accessToken: string,\n serviceId?: string,\n options?: LightswitchOptions,\n ): Promise<LightswitchStatus> {\n requireString(accessToken, 'accessToken');\n const service = serviceId ?? this.serviceId;\n const response = await this.rest.request<LightswitchStatus>(\n 'GET',\n `/lightswitch/api/service/${encodeURIComponent(service)}/status`,\n {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n\n async statusBulk(\n accessToken: string,\n serviceIds: string[],\n options?: LightswitchOptions,\n ): Promise<LightswitchStatus[]> {\n requireString(accessToken, 'accessToken');\n const ids = requireStringList(serviceIds, 'serviceIds');\n const query: QueryParams = { serviceId: ids };\n const response = await this.bulkRest.request<LightswitchStatus[]>(\n 'GET',\n '/lightswitch/api/service/bulk/status',\n {\n bearer: accessToken,\n query,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n}\n","import { ValidationError } from '../core/errors.js';\nimport type { EpicRestClient } from './rest.js';\n\nexport const SOCIAL_BAN_BASE_URL = 'https://social-ban-public-service-prod.ol.epicgames.com';\n\nexport interface SocialBanOptions {\n signal?: AbortSignal;\n}\n\nexport interface SocialBanEntry {\n [key: string]: unknown;\n}\n\nexport interface SocialBanStatus {\n active: boolean;\n bans: SocialBanEntry[];\n warnings: SocialBanEntry[];\n}\n\ninterface RawSocialBanResponse {\n bans?: unknown;\n warnings?: unknown;\n}\n\nfunction requireString(value: unknown, parameter: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(`\"${parameter}\" is required and must be a non-empty string`, parameter);\n }\n return value;\n}\n\nfunction toEntries(value: unknown): SocialBanEntry[] {\n return Array.isArray(value) ? (value as SocialBanEntry[]) : [];\n}\n\nexport class SocialBanManager {\n constructor(private readonly rest: EpicRestClient) {}\n\n async status(\n accessToken: string,\n accountId: string,\n options?: SocialBanOptions,\n ): Promise<SocialBanStatus> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n const response = await this.rest.request<RawSocialBanResponse>(\n 'GET',\n `/socialban/api/public/v1/${encodeURIComponent(accountId)}`,\n {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n const bans = toEntries(response.data?.bans);\n const warnings = toEntries(response.data?.warnings);\n return { active: bans.length > 0, bans, warnings };\n }\n}\n","import { ValidationError } from '../core/errors.js';\nimport type { QueryParams } from '../core/types.js';\nimport type { EpicRestClient } from './rest.js';\n\nexport const STATS_PROXY_BASE_URL = 'https://statsproxy-public-service-live.ol.epicgames.com';\n\nexport const STATS_APP_ID = 'Fortnite';\n\nexport const STATS_MAX_TIMESTAMP = 9223372036854774784;\n\nexport const StatsCategory = {\n Fish: 'collection_fish',\n Character: 'collection_character',\n} as const;\n\nexport type StatsCategory = (typeof StatsCategory)[keyof typeof StatsCategory];\n\nexport interface UserStats {\n startTime: number;\n endTime: number;\n stats: Record<string, number>;\n accountId: string;\n}\n\nexport interface LeaderboardEntry {\n account: string;\n value: number;\n}\n\nexport interface Leaderboard {\n entries: LeaderboardEntry[];\n maxSize: number;\n}\n\nexport interface UserStatsOptions {\n startTime?: number;\n endTime?: number;\n signal?: AbortSignal;\n}\n\nexport interface StatsQueryOptions {\n appId?: string;\n startDate?: number;\n endDate?: number;\n stats?: string[];\n category?: StatsCategory | (string & {});\n signal?: AbortSignal;\n}\n\nexport interface LeaderboardOptions {\n signal?: AbortSignal;\n}\n\nfunction requireString(value: unknown, parameter: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(`\"${parameter}\" is required and must be a non-empty string`, parameter);\n }\n return value;\n}\n\nfunction requireStringList(value: unknown, parameter: string): string[] {\n if (!Array.isArray(value) || value.length === 0) {\n throw new ValidationError(`\"${parameter}\" must be a non-empty array`, parameter);\n }\n return value as string[];\n}\n\nexport class StatsProxyManager {\n constructor(private readonly rest: EpicRestClient) {}\n\n async userStats(\n accessToken: string,\n accountId: string,\n options?: UserStatsOptions,\n ): Promise<UserStats | null> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n const query: QueryParams = {};\n if (options?.startTime !== undefined) query['startTime'] = options.startTime;\n if (options?.endTime !== undefined) query['endTime'] = options.endTime;\n const response = await this.rest.request<UserStats | null>(\n 'GET',\n `/statsproxy/api/statsv2/account/${encodeURIComponent(accountId)}`,\n {\n bearer: accessToken,\n query,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n\n async userStatsBulk(\n accessToken: string,\n accountIds: string[],\n options?: StatsQueryOptions,\n ): Promise<UserStats[]> {\n requireString(accessToken, 'accessToken');\n const owners = requireStringList(accountIds, 'accountIds');\n const stats = options?.stats ?? [];\n if (options?.category === undefined && stats.length === 0) {\n throw new ValidationError(\n '\"stats\" must be a non-empty array unless a \"category\" is provided',\n 'stats',\n );\n }\n const query: QueryParams = {};\n if (options?.category !== undefined) query['category'] = options.category;\n const response = await this.rest.request<UserStats[]>(\n 'POST',\n '/statsproxy/api/statsv2/query',\n {\n bearer: accessToken,\n query,\n json: {\n appId: options?.appId ?? STATS_APP_ID,\n startDate: options?.startDate ?? 0,\n endDate: options?.endDate ?? STATS_MAX_TIMESTAMP,\n owners,\n stats,\n },\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n\n async leaderboard(\n accessToken: string,\n leaderboardName: string,\n options?: LeaderboardOptions,\n ): Promise<Leaderboard> {\n requireString(accessToken, 'accessToken');\n requireString(leaderboardName, 'leaderboardName');\n const response = await this.rest.request<Leaderboard>(\n 'GET',\n `/statsproxy/api/statsv2/leaderboards/${encodeURIComponent(leaderboardName)}`,\n {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n}\n","import { ValidationError } from '../core/errors.js';\nimport type { MCPClient } from './mcp.js';\nimport type { EpicRestClient } from './rest.js';\n\nexport interface TimelineChannelState {\n validFrom: string;\n activeEvents: Array<Record<string, unknown>>;\n state: Record<string, unknown>;\n}\n\nexport interface TimelineChannel {\n states: TimelineChannelState[];\n cacheExpire: string;\n}\n\nexport interface Timeline {\n channels: Record<string, TimelineChannel>;\n eventsTimeOffsetHrs: number;\n cacheIntervalMins: number;\n currentTime: string;\n}\n\nexport interface BrInventory {\n stash: Record<string, number>;\n}\n\nexport interface Receipt {\n appStore: string;\n appStoreId: string;\n receiptId: string;\n receiptInfo: string;\n}\n\nexport const MTX_CURRENCY_PREFIX = 'Currency:Mtx';\n\nexport const MtxPlatform = {\n WeGame: 'WeGame',\n EpicPCKorea: 'EpicPCKorea',\n Epic: 'Epic',\n EpicPC: 'EpicPC',\n EpicAndroid: 'EpicAndroid',\n PlayStation: 'PSN',\n Xbox: 'Live',\n IOS: 'IOSAppStore',\n Nintendo: 'Nintendo',\n Samsung: 'Samsung',\n GooglePlay: 'GooglePlay',\n Shared: 'Shared',\n} as const;\n\nexport type MtxPlatform = (typeof MtxPlatform)[keyof typeof MtxPlatform];\n\nexport const MTX_PLATFORM_LIST = Object.values(MtxPlatform);\n\nconst MTX_PLATFORM_SET = new Set<string>(MTX_PLATFORM_LIST);\n\nexport function isMtxPlatform(value: unknown): value is MtxPlatform {\n return typeof value === 'string' && MTX_PLATFORM_SET.has(value);\n}\n\nconst MTX_CATEGORY: Record<string, string> = {\n 'Currency:MtxComplimentary': 'Epic Games & Refunds',\n 'Currency:MtxGiveaway': 'Battlepass & Challenges',\n 'Currency:MtxPurchased': 'Purchased',\n 'Currency:MtxSubscription': 'Crew',\n};\n\nexport interface CommonCoreItem {\n templateId: string;\n attributes: Record<string, unknown> & { platform?: string };\n quantity: number;\n}\n\nexport interface CommonCoreProfile {\n _id?: string;\n profileId?: string;\n items: Record<string, CommonCoreItem>;\n stats: { attributes: Record<string, unknown> & { current_mtx_platform?: string; mtx_affiliate?: string } };\n [key: string]: unknown;\n}\n\nexport interface VbucksEntry {\n templateId: string;\n category: string;\n platform?: string;\n amount: number;\n}\n\nexport interface VbucksBalance {\n total: number;\n platform: string;\n entries: VbucksEntry[];\n}\n\ninterface ProfileChange {\n changeType?: string;\n profile?: CommonCoreProfile;\n}\n\nfunction requireString(value: unknown, parameter: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(`\"${parameter}\" is required and must be a non-empty string`, parameter);\n }\n return value;\n}\n\nexport class FortniteGameManager {\n constructor(\n private readonly rest: EpicRestClient,\n private readonly mcp: MCPClient,\n ) {}\n\n async timeline(accessToken: string, options?: { signal?: AbortSignal }): Promise<Timeline> {\n requireString(accessToken, 'accessToken');\n const response = await this.rest.request<Timeline>('GET', '/fortnite/api/calendar/v1/timeline', {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n });\n return response.data;\n }\n\n async brInventory(\n accessToken: string,\n accountId: string,\n options?: { signal?: AbortSignal },\n ): Promise<BrInventory> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n const response = await this.rest.request<BrInventory>(\n 'GET',\n `/fortnite/api/game/v2/br-inventory/account/${encodeURIComponent(accountId)}`,\n {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n\n async commonCore(\n accessToken: string,\n accountId: string,\n options?: { signal?: AbortSignal },\n ): Promise<CommonCoreProfile> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n const response = await this.mcp.queryProfile<ProfileChange>(\n accessToken,\n accountId,\n 'common_core',\n options?.signal ? { signal: options.signal } : {},\n );\n const profile = response.profileChanges?.[0]?.profile;\n if (!profile) {\n throw new ValidationError('common_core profile was not returned by MCP', 'accountId');\n }\n return profile;\n }\n\n async vbucksBalance(\n accessToken: string,\n accountId: string,\n options?: { signal?: AbortSignal },\n ): Promise<VbucksBalance> {\n const profile = await this.commonCore(accessToken, accountId, options);\n const entries: VbucksEntry[] = [];\n for (const item of Object.values(profile.items ?? {})) {\n if (typeof item?.templateId !== 'string' || !item.templateId.startsWith(MTX_CURRENCY_PREFIX)) continue;\n const platform = typeof item.attributes?.platform === 'string' ? item.attributes.platform : undefined;\n entries.push({\n templateId: item.templateId,\n category:\n MTX_CATEGORY[item.templateId] ?? (item.templateId.slice(MTX_CURRENCY_PREFIX.length) || 'Unknown'),\n ...(platform ? { platform } : {}),\n amount: typeof item.quantity === 'number' ? item.quantity : 0,\n });\n }\n const total = entries.reduce((sum, entry) => sum + entry.amount, 0);\n const current = profile.stats?.attributes?.current_mtx_platform;\n return { total, platform: typeof current === 'string' ? current : 'Unknown', entries };\n }\n\n async vbucks(\n accessToken: string,\n accountId: string,\n options?: { signal?: AbortSignal },\n ): Promise<number> {\n return (await this.vbucksBalance(accessToken, accountId, options)).total;\n }\n\n async mtxPlatform(\n accessToken: string,\n accountId: string,\n options?: { signal?: AbortSignal },\n ): Promise<string> {\n const profile = await this.commonCore(accessToken, accountId, options);\n const current = profile.stats?.attributes?.current_mtx_platform;\n return typeof current === 'string' ? current : 'Unknown';\n }\n\n async setMtxPlatform(\n accessToken: string,\n accountId: string,\n platform: MtxPlatform | (string & {}),\n options?: { signal?: AbortSignal },\n ): Promise<CommonCoreProfile | null> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n requireString(platform, 'platform');\n const response = await this.mcp.operation<ProfileChange>(accessToken, accountId, 'SetMtxPlatform', {\n profileId: 'common_core',\n payload: { newPlatform: platform },\n ...(options?.signal ? { signal: options.signal } : {}),\n });\n return response.profileChanges?.[0]?.profile ?? null;\n }\n\n async receipts(\n accessToken: string,\n accountId: string,\n options?: { signal?: AbortSignal },\n ): Promise<Receipt[]> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n const response = await this.rest.request<Receipt[]>(\n 'GET',\n `/fortnite/api/game/v2/receipts/${encodeURIComponent(accountId)}`,\n {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n}\n","import { ValidationError } from '../core/errors.js';\nimport type { QueryParams } from '../core/types.js';\nimport type { AccountManager } from './account.js';\nimport type { EpicRestClient } from './rest.js';\nimport type { EpicAccount } from './types.js';\n\nexport const USER_SEARCH_BASE_URL = 'https://user-search-service-prod.ol.epicgames.com';\n\nexport const UserSearchPlatform = {\n Epic: 'epic',\n PlayStation: 'psn',\n Xbox: 'xbl',\n Steam: 'steam',\n Nintendo: 'nsw',\n} as const;\n\nexport type UserSearchPlatform = (typeof UserSearchPlatform)[keyof typeof UserSearchPlatform];\n\nexport const USER_SEARCH_PLATFORM_LIST = Object.values(UserSearchPlatform);\n\nexport function isUserSearchPlatform(value: unknown): value is UserSearchPlatform {\n return typeof value === 'string' && (USER_SEARCH_PLATFORM_LIST as string[]).includes(value);\n}\n\nexport type UserSearchMatchType = 'exact' | 'prefix';\n\nexport interface UserSearchMatch {\n value: string;\n platform: UserSearchPlatform | (string & {});\n}\n\nexport interface UserSearchResult {\n accountId: string;\n matches: UserSearchMatch[];\n matchType: UserSearchMatchType | (string & {});\n epicMutuals: number;\n sortPosition: number;\n}\n\nexport interface ResolvedUserSearchResult extends UserSearchResult {\n displayName?: string;\n account?: EpicAccount;\n}\n\nexport interface UserSearchOptions {\n platform?: UserSearchPlatform | (string & {});\n signal?: AbortSignal;\n}\n\nfunction requireString(value: unknown, parameter: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(`\"${parameter}\" is required and must be a non-empty string`, parameter);\n }\n return value;\n}\n\nexport class UserSearchManager {\n constructor(\n private readonly rest: EpicRestClient,\n private readonly accounts: AccountManager,\n ) {}\n\n async search(\n accessToken: string,\n accountId: string,\n prefix: string,\n options?: UserSearchOptions,\n ): Promise<UserSearchResult[]> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n requireString(prefix, 'prefix');\n const query: QueryParams = {\n prefix,\n platform: options?.platform ?? UserSearchPlatform.Epic,\n };\n const response = await this.rest.request<UserSearchResult[]>(\n 'GET',\n `/api/v1/search/${encodeURIComponent(accountId)}`,\n {\n bearer: accessToken,\n query,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data ?? [];\n }\n\n async searchResolved(\n accessToken: string,\n accountId: string,\n prefix: string,\n options?: UserSearchOptions,\n ): Promise<ResolvedUserSearchResult[]> {\n const results = await this.search(accessToken, accountId, prefix, options);\n if (results.length === 0) return [];\n const accounts = await this.accounts.resolveAccounts(\n accessToken,\n results.map((result) => result.accountId),\n options?.signal ? { signal: options.signal } : undefined,\n );\n return results.map((result) => {\n const account = accounts.get(result.accountId);\n return {\n ...result,\n ...(account ? { account, displayName: account.displayName } : {}),\n };\n });\n }\n}\n","import { ValidationError } from '../core/errors.js';\nimport type { EpicRestClient } from './rest.js';\n\nexport const AVATAR_BASE_URL = 'https://avatar-service-prod.identity.live.on.epicgames.com';\n\nexport const AVATAR_ICON_BASE_URL = 'https://fortnite-api.com/images/cosmetics/br';\n\nexport const AVATAR_CHARACTER_NAMESPACE = 'ATHENACHARACTER:';\n\nexport const AvatarIconSize = {\n SmallIcon: 'smallicon',\n Icon: 'icon',\n Featured: 'featured',\n} as const;\n\nexport type AvatarIconSize = (typeof AvatarIconSize)[keyof typeof AvatarIconSize];\n\nexport const AVATAR_ICON_SIZE_LIST = Object.values(AvatarIconSize);\n\nexport function isAvatarIconSize(value: unknown): value is AvatarIconSize {\n return typeof value === 'string' && AVATAR_ICON_SIZE_LIST.includes(value as AvatarIconSize);\n}\n\nexport interface AvatarEntry {\n accountId: string;\n avatarId: string;\n namespace: string;\n}\n\nexport interface ResolvedAvatar extends AvatarEntry {\n characterId: string | null;\n iconUrl: string | null;\n}\n\nexport interface AvatarOptions {\n signal?: AbortSignal;\n}\n\nexport interface AvatarResolveOptions extends AvatarOptions {\n size?: AvatarIconSize;\n}\n\nfunction requireString(value: unknown, parameter: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(`\"${parameter}\" is required and must be a non-empty string`, parameter);\n }\n return value;\n}\n\nfunction requireAccountIds(accountIds: readonly string[]): string[] {\n if (!Array.isArray(accountIds) || accountIds.length === 0) {\n throw new ValidationError('\"accountIds\" must be a non-empty array', 'accountIds');\n }\n return accountIds.map((accountId, index) => requireString(accountId, `accountIds[${index}]`));\n}\n\nexport function extractCharacterId(avatarId: string): string | null {\n if (typeof avatarId !== 'string' || avatarId.trim().length === 0) return null;\n const separator = avatarId.indexOf(':');\n const raw = separator >= 0 ? avatarId.slice(separator + 1) : avatarId;\n const characterId = raw.trim().toLowerCase();\n return characterId.length > 0 ? characterId : null;\n}\n\nexport function buildIconUrl(\n avatarId: string,\n size: AvatarIconSize = AvatarIconSize.SmallIcon,\n): string | null {\n const characterId = extractCharacterId(avatarId);\n if (!characterId) return null;\n return `${AVATAR_ICON_BASE_URL}/${characterId}/${size}.png`;\n}\n\nexport class AvatarManager {\n constructor(private readonly rest: EpicRestClient) {}\n\n async get(\n accessToken: string,\n accountIds: readonly string[],\n options?: AvatarOptions,\n ): Promise<AvatarEntry[]> {\n requireString(accessToken, 'accessToken');\n const ids = requireAccountIds(accountIds);\n const response = await this.rest.request<AvatarEntry[]>(\n 'GET',\n '/v1/avatar/fortnite/ids',\n {\n bearer: accessToken,\n query: { accountIds: ids.join(',') },\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n\n async getFor(\n accessToken: string,\n accountId: string,\n options?: AvatarOptions,\n ): Promise<AvatarEntry | null> {\n requireString(accountId, 'accountId');\n const entries = await this.get(accessToken, [accountId], options);\n return entries.find((entry) => entry.accountId === accountId) ?? entries[0] ?? null;\n }\n\n async resolve(\n accessToken: string,\n accountIds: readonly string[],\n options?: AvatarResolveOptions,\n ): Promise<ResolvedAvatar[]> {\n const size = options?.size ?? AvatarIconSize.SmallIcon;\n const entries = await this.get(accessToken, accountIds, options);\n return entries.map((entry) => this.resolveEntry(entry, size));\n }\n\n async resolveFor(\n accessToken: string,\n accountId: string,\n options?: AvatarResolveOptions,\n ): Promise<ResolvedAvatar | null> {\n const entry = await this.getFor(accessToken, accountId, options);\n if (!entry) return null;\n return this.resolveEntry(entry, options?.size ?? AvatarIconSize.SmallIcon);\n }\n\n resolveEntry(entry: AvatarEntry, size: AvatarIconSize = AvatarIconSize.SmallIcon): ResolvedAvatar {\n return {\n ...entry,\n characterId: extractCharacterId(entry.avatarId),\n iconUrl: buildIconUrl(entry.avatarId, size),\n };\n }\n\n resolveIconUrl(avatarId: string, size: AvatarIconSize = AvatarIconSize.SmallIcon): string | null {\n return buildIconUrl(avatarId, size);\n }\n}\n","import { ValidationError } from '../core/errors.js';\nimport type { EpicRestClient } from './rest.js';\n\nexport const CLOUDSTORAGE_CONTENT_TYPE = 'application/octet-stream';\n\nexport interface CloudStorageFile {\n uniqueFilename: string;\n filename: string;\n hash: string;\n hash256: string;\n length: number;\n contentType: string;\n uploaded: string;\n storageType: string;\n storageIds?: Record<string, string>;\n accountId?: string;\n doNotCache?: boolean;\n}\n\nexport interface CloudStorageOptions {\n signal?: AbortSignal;\n}\n\nexport interface CloudStorageWriteOptions extends CloudStorageOptions {\n contentType?: string;\n}\n\nfunction requireString(value: unknown, parameter: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(`\"${parameter}\" is required and must be a non-empty string`, parameter);\n }\n return value;\n}\n\nfunction toBytes(data: string | Uint8Array, parameter: string): string | Uint8Array {\n if (typeof data === 'string' || data instanceof Uint8Array) return data;\n throw new ValidationError(`\"${parameter}\" must be a string or Uint8Array`, parameter);\n}\n\nexport class CloudStorageManager {\n constructor(private readonly rest: EpicRestClient) {}\n\n async listUser(\n accessToken: string,\n accountId: string,\n options?: CloudStorageOptions,\n ): Promise<CloudStorageFile[]> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n const response = await this.rest.request<CloudStorageFile[]>(\n 'GET',\n `/fortnite/api/cloudstorage/user/${encodeURIComponent(accountId)}`,\n {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n\n async readUser(\n accessToken: string,\n accountId: string,\n filename: string,\n options?: CloudStorageOptions,\n ): Promise<Uint8Array> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n requireString(filename, 'filename');\n const response = await this.rest.request<Uint8Array>(\n 'GET',\n `/fortnite/api/cloudstorage/user/${encodeURIComponent(accountId)}/${encodeURIComponent(filename)}`,\n {\n bearer: accessToken,\n responseType: 'binary',\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n\n async readUserText(\n accessToken: string,\n accountId: string,\n filename: string,\n options?: CloudStorageOptions,\n ): Promise<string> {\n const bytes = await this.readUser(accessToken, accountId, filename, options);\n return new TextDecoder().decode(bytes);\n }\n\n async writeUser(\n accessToken: string,\n accountId: string,\n filename: string,\n data: string | Uint8Array,\n options?: CloudStorageWriteOptions,\n ): Promise<void> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n requireString(filename, 'filename');\n await this.rest.request<null>(\n 'PUT',\n `/fortnite/api/cloudstorage/user/${encodeURIComponent(accountId)}/${encodeURIComponent(filename)}`,\n {\n bearer: accessToken,\n body: toBytes(data, 'data'),\n contentType: options?.contentType ?? CLOUDSTORAGE_CONTENT_TYPE,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n }\n\n async deleteUser(\n accessToken: string,\n accountId: string,\n filename: string,\n options?: CloudStorageOptions,\n ): Promise<void> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n requireString(filename, 'filename');\n await this.rest.request<null>(\n 'DELETE',\n `/fortnite/api/cloudstorage/user/${encodeURIComponent(accountId)}/${encodeURIComponent(filename)}`,\n {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n }\n\n async listSystem(accessToken: string, options?: CloudStorageOptions): Promise<CloudStorageFile[]> {\n requireString(accessToken, 'accessToken');\n const response = await this.rest.request<CloudStorageFile[]>(\n 'GET',\n '/fortnite/api/cloudstorage/system',\n {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n\n async readSystem(\n accessToken: string,\n filename: string,\n options?: CloudStorageOptions,\n ): Promise<Uint8Array> {\n requireString(accessToken, 'accessToken');\n requireString(filename, 'filename');\n const response = await this.rest.request<Uint8Array>(\n 'GET',\n `/fortnite/api/cloudstorage/system/${encodeURIComponent(filename)}`,\n {\n bearer: accessToken,\n responseType: 'binary',\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n\n async readSystemText(\n accessToken: string,\n filename: string,\n options?: CloudStorageOptions,\n ): Promise<string> {\n const bytes = await this.readSystem(accessToken, filename, options);\n return new TextDecoder().decode(bytes);\n }\n}\n","import { ParseError, ValidationError } from '../core/errors.js';\nimport { EpicApiError } from './errors.js';\nimport type { SocialBanStatus } from './socialBan.js';\nimport type { EpicRestClient } from './rest.js';\n\nexport const MATCHMAKING_USER_AGENT_BUILD = '++Fortnite+Release-Live';\n\nexport const MATCHMAKING_USER_AGENT_PLATFORM = 'Windows/10.0.22631.1.768.64bit';\n\nexport const MATCHMAKING_DEFAULT_HOTFIX_VERSION = '1';\n\nexport const MATCHMAKING_DEFAULT_REGION = 'NAE';\n\nexport const MATCHMAKING_DEFAULT_PLAYLIST = 'playlist_defaultsolo';\n\nexport const MATCHMAKING_DEFAULT_PLATFORM = 'Windows';\n\nexport const MATCHMAKING_BAN_ERROR_CODE =\n 'errors.com.epicgames.fortnite.player_banned_from_sub_game';\n\nexport interface MatchmakingBanResult {\n banned: boolean;\n banDaysRemaining: number | null;\n errorCode: string | null;\n}\n\nexport interface BanCheckResult {\n banned: boolean;\n permanent: boolean;\n temporary: boolean;\n social: boolean;\n banDaysRemaining: number | null;\n matchmaking: MatchmakingBanResult;\n socialBan: SocialBanStatus;\n}\n\nexport interface MatchmakingSessionAttributes {\n LINKID_s?: string;\n SUBREGION_s?: string;\n MATCHSTARTTIME_s?: string;\n REGION_s?: string;\n [key: string]: unknown;\n}\n\nexport interface MatchmakingSession {\n id: string;\n totalPlayers: number;\n serverAddress: string;\n serverName?: string;\n serverPort: number;\n started: boolean;\n attributes: MatchmakingSessionAttributes;\n [key: string]: unknown;\n}\n\nexport interface MatchmakingRequestAttributes {\n buildUniqueId_s?: string;\n [key: string]: unknown;\n}\n\nexport interface MatchmakingRequestEntry {\n attributes: MatchmakingRequestAttributes;\n [key: string]: unknown;\n}\n\nexport interface BucketIdParts {\n netCL?: string;\n hotfixVersion?: string;\n region?: string;\n playlist?: string;\n}\n\nexport interface MatchmakingOptions {\n signal?: AbortSignal;\n}\n\nexport interface MatchmakingTicketOptions extends MatchmakingOptions, BucketIdParts {\n bucketId?: string;\n platform?: string;\n userAgent?: string;\n}\n\nexport function buildBucketId(netCL: string, parts?: Omit<BucketIdParts, 'netCL'>): string {\n const build = requireString(netCL, 'netCL');\n const hotfixVersion = parts?.hotfixVersion ?? MATCHMAKING_DEFAULT_HOTFIX_VERSION;\n const region = parts?.region ?? MATCHMAKING_DEFAULT_REGION;\n const playlist = parts?.playlist ?? MATCHMAKING_DEFAULT_PLAYLIST;\n return `${build}:${hotfixVersion}:${region}:${playlist}`;\n}\n\nexport function buildUserAgent(netCL: string): string {\n const build = requireString(netCL, 'netCL');\n return `Fortnite/${MATCHMAKING_USER_AGENT_BUILD}-CL-${build} ${MATCHMAKING_USER_AGENT_PLATFORM}`;\n}\n\nfunction requireString(value: unknown, parameter: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(`\"${parameter}\" is required and must be a non-empty string`, parameter);\n }\n return value;\n}\n\nfunction readBanDays(error: EpicApiError): number | null {\n const body = error.body;\n if (body && typeof body === 'object') {\n const value = (body as Record<string, unknown>).banDaysRemaining;\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n if (typeof value === 'string') {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) return parsed;\n }\n }\n for (const variable of error.messageVars) {\n const parsed = Number(variable);\n if (Number.isFinite(parsed) && parsed > 0) return parsed;\n }\n return null;\n}\n\nfunction isBanError(error: EpicApiError): boolean {\n const code = error.errorCode ?? '';\n return code === MATCHMAKING_BAN_ERROR_CODE || code.includes('player_banned');\n}\n\nexport class MatchmakingManager {\n constructor(private readonly rest: EpicRestClient) {}\n\n async netCL(accessToken: string, options?: MatchmakingOptions): Promise<string> {\n requireString(accessToken, 'accessToken');\n const path = '/fortnite/api/matchmaking/session/matchMakingRequest';\n const response = await this.rest.request<MatchmakingRequestEntry[]>('POST', path, {\n bearer: accessToken,\n json: { criteria: [], openPlayersRequired: 1, buildUniqueId: '', maxResults: 1 },\n ...(options?.signal ? { signal: options.signal } : {}),\n });\n const buildUniqueId = response.data?.[0]?.attributes?.buildUniqueId_s;\n if (typeof buildUniqueId !== 'string' || buildUniqueId.trim().length === 0) {\n throw new ParseError('Matchmaking request did not return a buildUniqueId (netCL)', {\n url: this.rest.buildUrl(path),\n raw: JSON.stringify(response.data),\n });\n }\n return buildUniqueId;\n }\n\n async ticketBan(\n accessToken: string,\n accountId: string,\n options?: MatchmakingTicketOptions,\n ): Promise<MatchmakingBanResult> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n let netCL = options?.netCL;\n if (!netCL && (!options?.bucketId || !options?.userAgent)) {\n netCL = await this.netCL(accessToken, options);\n }\n const bucketId =\n options?.bucketId ??\n buildBucketId(netCL as string, {\n hotfixVersion: options?.hotfixVersion,\n region: options?.region,\n playlist: options?.playlist,\n });\n const userAgent = options?.userAgent ?? buildUserAgent(netCL as string);\n try {\n await this.rest.request<unknown>(\n 'GET',\n `/fortnite/api/game/v2/matchmakingservice/ticket/player/${encodeURIComponent(accountId)}`,\n {\n bearer: accessToken,\n query: {\n bucketId,\n partyPlayerIds: accountId,\n 'player.platform': options?.platform ?? MATCHMAKING_DEFAULT_PLATFORM,\n },\n headers: { 'user-agent': userAgent },\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return { banned: false, banDaysRemaining: null, errorCode: null };\n } catch (error) {\n if (error instanceof EpicApiError && isBanError(error)) {\n return {\n banned: true,\n banDaysRemaining: readBanDays(error),\n errorCode: error.errorCode,\n };\n }\n throw error;\n }\n }\n\n async sessionInfo(\n accessToken: string,\n accountId: string,\n options?: MatchmakingOptions,\n ): Promise<MatchmakingSession[]> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n const response = await this.rest.request<MatchmakingSession[]>(\n 'GET',\n `/fortnite/api/matchmaking/session/findPlayer/${encodeURIComponent(accountId)}`,\n {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n}\n","import { ValidationError } from '../core/errors.js';\nimport type { EpicRestClient } from './rest.js';\n\nexport const PLAYTIME_BASE_URL = 'https://library-service.live.use1a.on.epicgames.com';\n\nexport const PLAYTIME_ARTIFACT_ID = 'Fortnite';\n\nexport const PLAYTIME_MACHINE_ID = '5058da6a-4ee8-4370-967f-4bff47a77114';\n\nexport interface PlaytimeInfo {\n accountId: string;\n artifactId: string;\n totalTime: number;\n}\n\nexport interface PlaytimeOptions {\n signal?: AbortSignal;\n}\n\nexport interface PlaytimeSegment {\n artifactId?: string;\n machineId?: string;\n startTime: Date | string;\n endTime: Date | string;\n startSegment?: boolean;\n endSegment?: boolean;\n}\n\nexport interface PlaytimeAddSecondsOptions extends PlaytimeOptions {\n artifactId?: string;\n machineId?: string;\n endTime?: Date | string;\n}\n\ninterface PlaytimeSegmentPayload {\n machineId: string;\n artifactId: string;\n startTime: string;\n endTime: string;\n startSegment: boolean;\n endSegment: boolean;\n}\n\nfunction requireString(value: unknown, parameter: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(`\"${parameter}\" is required and must be a non-empty string`, parameter);\n }\n return value;\n}\n\nfunction toIso(value: Date | string, parameter: string): string {\n if (value instanceof Date) {\n if (Number.isNaN(value.getTime())) {\n throw new ValidationError(`\"${parameter}\" is an invalid Date`, parameter);\n }\n return value.toISOString();\n }\n return requireString(value, parameter);\n}\n\nfunction buildSegment(segment: PlaytimeSegment, artifactFallback: string): PlaytimeSegmentPayload {\n return {\n machineId: segment.machineId ?? PLAYTIME_MACHINE_ID,\n artifactId: segment.artifactId ?? artifactFallback,\n startTime: toIso(segment.startTime, 'startTime'),\n endTime: toIso(segment.endTime, 'endTime'),\n startSegment: segment.startSegment ?? true,\n endSegment: segment.endSegment ?? true,\n };\n}\n\nexport class PlaytimeManager {\n private readonly artifactId: string;\n\n constructor(\n private readonly rest: EpicRestClient,\n options?: { artifactId?: string },\n ) {\n this.artifactId = options?.artifactId ?? PLAYTIME_ARTIFACT_ID;\n }\n\n async get(\n accessToken: string,\n accountId: string,\n artifactId?: string,\n options?: PlaytimeOptions,\n ): Promise<PlaytimeInfo> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n const artifact = artifactId ?? this.artifactId;\n const response = await this.rest.request<PlaytimeInfo>(\n 'GET',\n `/library/api/public/playtime/account/${encodeURIComponent(accountId)}/artifact/${encodeURIComponent(artifact)}`,\n {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n\n async getAll(\n accessToken: string,\n accountId: string,\n options?: PlaytimeOptions,\n ): Promise<PlaytimeInfo[]> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n const response = await this.rest.request<PlaytimeInfo[]>(\n 'GET',\n `/library/api/public/playtime/account/${encodeURIComponent(accountId)}/all`,\n {\n bearer: accessToken,\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n return response.data;\n }\n\n async add(\n accessToken: string,\n accountId: string,\n segment: PlaytimeSegment,\n options?: PlaytimeOptions,\n ): Promise<void> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n await this.rest.request<null>(\n 'PUT',\n `/library/api/public/playtime/account/${encodeURIComponent(accountId)}`,\n {\n bearer: accessToken,\n json: buildSegment(segment, this.artifactId),\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n }\n\n async addBulk(\n accessToken: string,\n accountId: string,\n segments: PlaytimeSegment[],\n options?: PlaytimeOptions,\n ): Promise<void> {\n requireString(accessToken, 'accessToken');\n requireString(accountId, 'accountId');\n if (!Array.isArray(segments) || segments.length === 0) {\n throw new ValidationError('\"segments\" must be a non-empty array', 'segments');\n }\n await this.rest.request<null>(\n 'PUT',\n `/library/api/public/playtime/account/${encodeURIComponent(accountId)}/bulk`,\n {\n bearer: accessToken,\n json: { playtimeAddList: segments.map((segment) => buildSegment(segment, this.artifactId)) },\n ...(options?.signal ? { signal: options.signal } : {}),\n },\n );\n }\n\n async addSeconds(\n accessToken: string,\n accountId: string,\n seconds: number,\n options?: PlaytimeAddSecondsOptions,\n ): Promise<void> {\n if (typeof seconds !== 'number' || !Number.isFinite(seconds) || seconds <= 0) {\n throw new ValidationError('\"seconds\" must be a positive, finite number', 'seconds');\n }\n const end = options?.endTime instanceof Date ? options.endTime : options?.endTime ? new Date(options.endTime) : new Date();\n const start = new Date(end.getTime() - Math.round(seconds) * 1000);\n await this.add(\n accessToken,\n accountId,\n {\n startTime: start,\n endTime: end,\n ...(options?.artifactId ? { artifactId: options.artifactId } : {}),\n ...(options?.machineId ? { machineId: options.machineId } : {}),\n },\n options?.signal ? { signal: options.signal } : undefined,\n );\n }\n}\n","import type { EpicRestClient } from './rest.js';\n\nexport const STATUS_BASE_URL = 'https://status.epicgames.com';\n\nexport const STATUS_FORTNITE_PATTERN = /fortnite/i;\n\nexport type StatusIndicator = 'none' | 'minor' | 'major' | 'critical' | (string & {});\n\nexport type ComponentStatus =\n | 'operational'\n | 'degraded_performance'\n | 'partial_outage'\n | 'major_outage'\n | 'under_maintenance'\n | (string & {});\n\nexport type IncidentImpact = 'none' | 'maintenance' | 'minor' | 'major' | 'critical' | (string & {});\n\nexport type IncidentStatus =\n | 'investigating'\n | 'identified'\n | 'monitoring'\n | 'resolved'\n | 'postmortem'\n | (string & {});\n\nexport type MaintenanceStatus =\n | 'scheduled'\n | 'in_progress'\n | 'verifying'\n | 'completed'\n | (string & {});\n\nexport interface StatusPage {\n id: string;\n name: string;\n url: string;\n time_zone?: string;\n updated_at: string;\n}\n\nexport interface StatusSummaryStatus {\n indicator: StatusIndicator;\n description: string;\n}\n\nexport interface StatusComponent {\n id: string;\n name: string;\n status: ComponentStatus;\n created_at: string;\n updated_at: string;\n position: number;\n description: string | null;\n showcase: boolean;\n start_date: string | null;\n group_id: string | null;\n page_id: string;\n group: boolean;\n only_show_if_degraded: boolean;\n components?: string[];\n}\n\nexport interface StatusIncidentUpdate {\n id: string;\n status: IncidentStatus;\n body: string;\n incident_id: string;\n created_at: string;\n updated_at: string;\n display_at: string;\n affected_components?: StatusAffectedComponent[] | null;\n deliver_notifications?: boolean;\n custom_tweet?: string | null;\n tweet_id?: string | null;\n}\n\nexport interface StatusAffectedComponent {\n code: string;\n name: string;\n old_status: ComponentStatus;\n new_status: ComponentStatus;\n}\n\nexport interface StatusIncident {\n id: string;\n name: string;\n status: IncidentStatus;\n created_at: string;\n updated_at: string;\n monitoring_at: string | null;\n resolved_at: string | null;\n impact: IncidentImpact;\n shortlink: string;\n started_at: string;\n page_id: string;\n incident_updates: StatusIncidentUpdate[];\n components?: StatusComponent[];\n}\n\nexport interface StatusMaintenance extends StatusIncident {\n scheduled_for: string | null;\n scheduled_until: string | null;\n}\n\nexport interface StatusSummary {\n page: StatusPage;\n status: StatusSummaryStatus;\n components: StatusComponent[];\n incidents: StatusIncident[];\n scheduled_maintenances: StatusMaintenance[];\n}\n\nexport interface StatusResponse {\n page: StatusPage;\n status: StatusSummaryStatus;\n}\n\nexport interface StatusComponentsResponse {\n page: StatusPage;\n components: StatusComponent[];\n}\n\nexport interface StatusIncidentsResponse {\n page: StatusPage;\n incidents: StatusIncident[];\n}\n\nexport interface StatusMaintenancesResponse {\n page: StatusPage;\n scheduled_maintenances: StatusMaintenance[];\n}\n\nexport interface StatusOptions {\n signal?: AbortSignal;\n}\n\nexport class EpicStatusManager {\n constructor(private readonly rest: EpicRestClient) {}\n\n private get<T>(path: string, options?: StatusOptions): Promise<T> {\n return this.rest\n .request<T>('GET', path, options?.signal ? { signal: options.signal } : {})\n .then((response) => response.data);\n }\n\n summary(options?: StatusOptions): Promise<StatusSummary> {\n return this.get<StatusSummary>('/api/v2/summary.json', options);\n }\n\n status(options?: StatusOptions): Promise<StatusResponse> {\n return this.get<StatusResponse>('/api/v2/status.json', options);\n }\n\n components(options?: StatusOptions): Promise<StatusComponent[]> {\n return this.get<StatusComponentsResponse>('/api/v2/components.json', options).then(\n (response) => response.components,\n );\n }\n\n incidents(options?: StatusOptions): Promise<StatusIncident[]> {\n return this.get<StatusIncidentsResponse>('/api/v2/incidents.json', options).then(\n (response) => response.incidents,\n );\n }\n\n unresolvedIncidents(options?: StatusOptions): Promise<StatusIncident[]> {\n return this.get<StatusIncidentsResponse>('/api/v2/incidents/unresolved.json', options).then(\n (response) => response.incidents,\n );\n }\n\n maintenances(options?: StatusOptions): Promise<StatusMaintenance[]> {\n return this.get<StatusMaintenancesResponse>('/api/v2/scheduled-maintenances.json', options).then(\n (response) => response.scheduled_maintenances,\n );\n }\n\n activeMaintenances(options?: StatusOptions): Promise<StatusMaintenance[]> {\n return this.get<StatusMaintenancesResponse>(\n '/api/v2/scheduled-maintenances/active.json',\n options,\n ).then((response) => response.scheduled_maintenances);\n }\n\n upcomingMaintenances(options?: StatusOptions): Promise<StatusMaintenance[]> {\n return this.get<StatusMaintenancesResponse>(\n '/api/v2/scheduled-maintenances/upcoming.json',\n options,\n ).then((response) => response.scheduled_maintenances);\n }\n\n async fortniteComponents(options?: StatusOptions): Promise<StatusComponent[]> {\n const components = await this.components(options);\n return components.filter(\n (component) => !component.group && STATUS_FORTNITE_PATTERN.test(component.name),\n );\n }\n\n async isFortniteOperational(options?: StatusOptions): Promise<boolean> {\n const components = await this.fortniteComponents(options);\n if (components.length === 0) return true;\n return components.every((component) => component.status === 'operational');\n }\n}\n","export interface XmlNode {\n name: string;\n attrs: Record<string, string>;\n children: XmlNode[];\n text: string;\n}\n\nexport interface StanzaInput {\n name: string;\n attrs?: Record<string, string | number | boolean | null | undefined>;\n children?: Array<StanzaInput | string | null | undefined>;\n text?: string;\n}\n\nconst NAMED_ENTITIES: Record<string, string> = {\n amp: '&',\n lt: '<',\n gt: '>',\n quot: '\"',\n apos: \"'\",\n};\n\nexport function escapeXml(value: string): string {\n return value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\nexport function unescapeXml(value: string): string {\n if (value.indexOf('&') === -1) return value;\n return value.replace(/&(#x[0-9a-fA-F]+|#\\d+|[a-zA-Z]+);/g, (match, code: string) => {\n if (code[0] === '#') {\n const codePoint =\n code[1] === 'x' || code[1] === 'X'\n ? Number.parseInt(code.slice(2), 16)\n : Number.parseInt(code.slice(1), 10);\n return Number.isFinite(codePoint) ? String.fromCodePoint(codePoint) : match;\n }\n const named = NAMED_ENTITIES[code];\n return named === undefined ? match : named;\n });\n}\n\nexport function buildStanza(input: StanzaInput): string {\n let attrs = '';\n if (input.attrs) {\n for (const [key, value] of Object.entries(input.attrs)) {\n if (value === null || value === undefined) continue;\n attrs += ` ${key}=\"${escapeXml(String(value))}\"`;\n }\n }\n\n const inner: string[] = [];\n if (input.text !== undefined) inner.push(escapeXml(input.text));\n if (input.children) {\n for (const child of input.children) {\n if (child === null || child === undefined) continue;\n inner.push(typeof child === 'string' ? escapeXml(child) : buildStanza(child));\n }\n }\n\n if (inner.length === 0) return `<${input.name}${attrs}/>`;\n return `<${input.name}${attrs}>${inner.join('')}</${input.name}>`;\n}\n\nconst NAME_CHAR = /[^\\s/>=]/;\n\nclass Scanner {\n private index = 0;\n\n constructor(private readonly source: string) {}\n\n parse(): XmlNode | null {\n this.skipProlog();\n if (this.index >= this.source.length) return null;\n if (this.source[this.index] !== '<') return null;\n return this.parseElement();\n }\n\n private skipWhitespace(): void {\n while (this.index < this.source.length && /\\s/.test(this.source[this.index]!)) this.index += 1;\n }\n\n private skipProlog(): void {\n for (;;) {\n this.skipWhitespace();\n if (this.source.startsWith('<?', this.index)) {\n const end = this.source.indexOf('?>', this.index);\n if (end === -1) {\n this.index = this.source.length;\n return;\n }\n this.index = end + 2;\n continue;\n }\n if (this.source.startsWith('<!--', this.index)) {\n const end = this.source.indexOf('-->', this.index);\n if (end === -1) {\n this.index = this.source.length;\n return;\n }\n this.index = end + 3;\n continue;\n }\n return;\n }\n }\n\n private readName(): string {\n const start = this.index;\n while (this.index < this.source.length && NAME_CHAR.test(this.source[this.index]!)) {\n this.index += 1;\n }\n return this.source.slice(start, this.index);\n }\n\n private parseElement(): XmlNode | null {\n if (this.source[this.index] !== '<') return null;\n this.index += 1;\n const name = this.readName();\n if (name.length === 0) return null;\n\n const node: XmlNode = { name, attrs: {}, children: [], text: '' };\n\n for (;;) {\n this.skipWhitespace();\n const char = this.source[this.index];\n if (char === undefined) return node;\n if (char === '/') {\n this.index += 1;\n if (this.source[this.index] === '>') this.index += 1;\n return node;\n }\n if (char === '>') {\n this.index += 1;\n break;\n }\n const attrName = this.readName();\n if (attrName.length === 0) {\n this.index += 1;\n continue;\n }\n this.skipWhitespace();\n let attrValue = '';\n if (this.source[this.index] === '=') {\n this.index += 1;\n this.skipWhitespace();\n const quote = this.source[this.index];\n if (quote === '\"' || quote === \"'\") {\n this.index += 1;\n const end = this.source.indexOf(quote, this.index);\n const raw = end === -1 ? this.source.slice(this.index) : this.source.slice(this.index, end);\n attrValue = unescapeXml(raw);\n this.index = end === -1 ? this.source.length : end + 1;\n }\n }\n node.attrs[attrName] = attrValue;\n }\n\n this.parseChildren(node);\n return node;\n }\n\n private parseChildren(node: XmlNode): void {\n let text = '';\n for (;;) {\n if (this.index >= this.source.length) break;\n const char = this.source[this.index]!;\n if (char === '<') {\n if (this.source.startsWith('<![CDATA[', this.index)) {\n const end = this.source.indexOf(']]>', this.index);\n const raw = end === -1 ? this.source.slice(this.index + 9) : this.source.slice(this.index + 9, end);\n text += raw;\n this.index = end === -1 ? this.source.length : end + 3;\n continue;\n }\n if (this.source.startsWith('<!--', this.index)) {\n const end = this.source.indexOf('-->', this.index);\n this.index = end === -1 ? this.source.length : end + 3;\n continue;\n }\n if (this.source[this.index + 1] === '/') {\n const end = this.source.indexOf('>', this.index);\n this.index = end === -1 ? this.source.length : end + 1;\n break;\n }\n const child = this.parseElement();\n if (child) node.children.push(child);\n continue;\n }\n const next = this.source.indexOf('<', this.index);\n const chunk = next === -1 ? this.source.slice(this.index) : this.source.slice(this.index, next);\n text += chunk;\n this.index = next === -1 ? this.source.length : next;\n }\n node.text = unescapeXml(text).trim();\n }\n}\n\nexport function parseStanza(xml: string): XmlNode | null {\n return new Scanner(xml).parse();\n}\n\nexport function findChild(node: XmlNode, name: string): XmlNode | undefined {\n return node.children.find((child) => child.name === name || localName(child.name) === name);\n}\n\nexport function findChildren(node: XmlNode, name: string): XmlNode[] {\n return node.children.filter((child) => child.name === name || localName(child.name) === name);\n}\n\nexport function localName(name: string): string {\n const colon = name.indexOf(':');\n return colon === -1 ? name : name.slice(colon + 1);\n}\n","import { ConfigurationError, ValidationError } from '../core/errors.js';\nimport { TypedEmitter } from './emitter.js';\nimport { buildStanza, findChild, localName, parseStanza, type XmlNode } from './xml.js';\n\nexport const XMPP_WEBSOCKET_URL = 'wss://xmpp-service-prod.ol.epicgames.com';\nexport const XMPP_DOMAIN = 'prod.ol.epicgames.com';\nexport const XMPP_SUBPROTOCOL = 'xmpp';\nexport const XMPP_DEFAULT_APP = 'Fortnite';\nexport const XMPP_DEFAULT_PLATFORM = 'WIN';\nexport const PRESENCE_OFFLINE_PERSIST_STAMP = '9999-12-31T23:59:59.999Z';\n\nexport type PresenceShow = 'chat' | 'away' | 'xa' | 'dnd';\n\nexport type AwayStatus = 'online' | 'away' | 'extended';\n\nconst AWAY_STATUS_SHOW: Record<AwayStatus, PresenceShow | null> = {\n online: null,\n away: 'away',\n extended: 'xa',\n};\n\nexport type XmppState =\n | 'idle'\n | 'connecting'\n | 'authenticating'\n | 'binding'\n | 'connected'\n | 'closing'\n | 'closed';\n\nexport interface FortniteStatus {\n Status?: string;\n bIsPlaying?: boolean;\n bIsJoinable?: boolean;\n bHasVoiceSupport?: boolean;\n SessionId?: string;\n ProductName?: string;\n Properties?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\nexport interface FriendPresence {\n accountId: string;\n jid: string;\n resource: string | null;\n platform: string | null;\n available: boolean;\n show: PresenceShow | null;\n statusText: string | null;\n status: FortniteStatus | null;\n playing: boolean;\n joinable: boolean;\n receivedAt: string;\n}\n\nexport interface XmppMessage {\n id: string | null;\n from: string;\n accountId: string;\n type: string;\n body: string;\n receivedAt: string;\n}\n\nexport interface SetStatusInput {\n status?: string;\n online?: boolean;\n away?: AwayStatus;\n show?: PresenceShow;\n playing?: boolean;\n joinable?: boolean;\n voice?: boolean;\n sessionId?: string;\n productName?: string;\n properties?: Record<string, unknown>;\n raw?: FortniteStatus;\n to?: string;\n persistWhileOffline?: boolean;\n delayStamp?: string;\n}\n\nexport interface CustomStatusOptions {\n away?: AwayStatus;\n show?: PresenceShow;\n to?: string;\n persistWhileOffline?: boolean;\n delayStamp?: string;\n}\n\nexport interface WebSocketLike {\n readyState: number;\n send(data: string): void;\n close(code?: number, reason?: string): void;\n addEventListener(type: 'open', listener: () => void): void;\n addEventListener(type: 'message', listener: (event: { data: unknown }) => void): void;\n addEventListener(type: 'close', listener: (event: { code?: number; reason?: string }) => void): void;\n addEventListener(type: 'error', listener: (event: unknown) => void): void;\n removeEventListener?(type: string, listener: (...args: never[]) => void): void;\n}\n\nexport type WebSocketFactory = (url: string, protocols?: string | string[]) => WebSocketLike;\n\nexport interface XmppClientOptions {\n accountId: string;\n getAccessToken: () => string | Promise<string>;\n webSocket?: WebSocketFactory;\n url?: string;\n domain?: string;\n app?: string;\n platform?: string;\n resource?: string;\n connectionTimeoutMs?: number;\n pingIntervalMs?: number;\n initialPresence?: SetStatusInput | false;\n autoReconnect?: boolean;\n reconnectInitialDelayMs?: number;\n reconnectMaxDelayMs?: number;\n maxReconnectAttempts?: number;\n debug?: (direction: 'in' | 'out', data: string) => void;\n}\n\nexport interface XmppEventMap {\n connected: void;\n disconnected: { code: number; reason: string };\n reconnecting: { attempt: number; delay: number };\n presence: FriendPresence;\n message: XmppMessage;\n stanza: XmlNode;\n raw: { direction: 'in' | 'out'; data: string };\n error: Error;\n}\n\nconst WS_OPEN = 1;\nconst NUL = String.fromCharCode(0);\n\nfunction resolveWebSocketFactory(factory?: WebSocketFactory): WebSocketFactory {\n if (factory) return factory;\n const globalWebSocket = (globalThis as { WebSocket?: unknown }).WebSocket;\n if (typeof globalWebSocket !== 'function') {\n throw new ConfigurationError(\n 'No global WebSocket implementation was found. Pass a `webSocket` factory (for example one backed by the \"ws\" package) in the XMPP options.',\n 'webSocket',\n );\n }\n return (url, protocols) =>\n new (globalWebSocket as new (url: string, protocols?: string | string[]) => WebSocketLike)(url, protocols);\n}\n\nfunction encodeBase64(input: string): string {\n const globalBtoa = (globalThis as { btoa?: (value: string) => string }).btoa;\n if (typeof globalBtoa === 'function') return globalBtoa(input);\n const bufferCtor = (globalThis as { Buffer?: { from(data: string, encoding: string): { toString(encoding: string): string } } }).Buffer;\n if (bufferCtor) return bufferCtor.from(input, 'binary').toString('base64');\n throw new ConfigurationError('No base64 encoder (btoa/Buffer) is available in this runtime.', 'webSocket');\n}\n\nfunction randomHex(length: number): string {\n const bytes = new Uint8Array(Math.ceil(length / 2));\n const cryptoObj = (globalThis as { crypto?: { getRandomValues?: (array: Uint8Array) => Uint8Array } }).crypto;\n if (cryptoObj?.getRandomValues) {\n cryptoObj.getRandomValues(bytes);\n } else {\n for (let i = 0; i < bytes.length; i += 1) bytes[i] = Math.floor(Math.random() * 256);\n }\n let out = '';\n for (const byte of bytes) out += byte.toString(16).padStart(2, '0');\n return out.slice(0, length);\n}\n\nfunction saslPlain(accountId: string, token: string): string {\n return encodeBase64(`${NUL}${accountId}${NUL}${token}`);\n}\n\nfunction accountIdFromJid(jid: string): string {\n const at = jid.indexOf('@');\n return at === -1 ? jid : jid.slice(0, at);\n}\n\nfunction resourceFromJid(jid: string): string | null {\n const slash = jid.indexOf('/');\n return slash === -1 ? null : jid.slice(slash + 1);\n}\n\nfunction platformFromResource(resource: string | null): string | null {\n if (!resource) return null;\n const parts = resource.split(':');\n return parts.length >= 3 && parts[2]!.length > 0 ? parts[2]! : null;\n}\n\nexport class XmppClient extends TypedEmitter<XmppEventMap> {\n private readonly options: XmppClientOptions;\n private readonly factory: WebSocketFactory;\n private readonly url: string;\n private readonly domain: string;\n private readonly app: string;\n private readonly resourceId: string;\n private readonly pingIntervalMs: number;\n private readonly connectionTimeoutMs: number;\n private readonly autoReconnect: boolean;\n private readonly reconnectInitialDelayMs: number;\n private readonly reconnectMaxDelayMs: number;\n private readonly maxReconnectAttempts: number;\n\n private socket: WebSocketLike | null = null;\n private currentState: XmppState = 'idle';\n private authenticated = false;\n private sessionAdvertised = false;\n private boundJid: string | null = null;\n private lastStatus: FortniteStatus | null = null;\n private currentPresence: { status: FortniteStatus; show: PresenceShow | null; persist: boolean } | null = null;\n private saslToken = '';\n\n private pingTimer: ReturnType<typeof setInterval> | null = null;\n private connectTimer: ReturnType<typeof setTimeout> | null = null;\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n private reconnectAttempts = 0;\n private everConnected = false;\n private manualDisconnect = false;\n private pingCounter = 0;\n\n private connectPromise: Promise<void> | null = null;\n private connectResolve: (() => void) | null = null;\n private connectReject: ((error: Error) => void) | null = null;\n\n private readonly presenceCache = new Map<string, FriendPresence>();\n\n constructor(options: XmppClientOptions) {\n super();\n if (!options || typeof options.accountId !== 'string' || options.accountId.trim().length === 0) {\n throw new ValidationError('An XMPP client requires a non-empty accountId.', 'accountId');\n }\n if (typeof options.getAccessToken !== 'function') {\n throw new ValidationError('An XMPP client requires a getAccessToken function.', 'getAccessToken');\n }\n this.options = options;\n this.factory = resolveWebSocketFactory(options.webSocket);\n this.url = options.url ?? XMPP_WEBSOCKET_URL;\n this.domain = options.domain ?? XMPP_DOMAIN;\n this.app = options.app ?? XMPP_DEFAULT_APP;\n const platform = options.platform ?? XMPP_DEFAULT_PLATFORM;\n this.resourceId = options.resource ?? `V2:${this.app}:${platform}::${randomHex(32).toUpperCase()}`;\n this.pingIntervalMs = options.pingIntervalMs ?? 60_000;\n this.connectionTimeoutMs = options.connectionTimeoutMs ?? 15_000;\n this.autoReconnect = options.autoReconnect ?? true;\n this.reconnectInitialDelayMs = options.reconnectInitialDelayMs ?? 1_000;\n this.reconnectMaxDelayMs = options.reconnectMaxDelayMs ?? 30_000;\n this.maxReconnectAttempts = options.maxReconnectAttempts ?? 0;\n }\n\n get state(): XmppState {\n return this.currentState;\n }\n\n get connected(): boolean {\n return this.currentState === 'connected';\n }\n\n get accountId(): string {\n return this.options.accountId;\n }\n\n get jid(): string | null {\n return this.boundJid;\n }\n\n get resource(): string {\n return this.resourceId;\n }\n\n get presences(): ReadonlyMap<string, FriendPresence> {\n return this.presenceCache;\n }\n\n getPresence(accountId: string): FriendPresence | null {\n return this.presenceCache.get(accountId) ?? null;\n }\n\n async connect(): Promise<void> {\n if (this.currentState === 'connected') return;\n if (this.connectPromise) return this.connectPromise;\n\n this.manualDisconnect = false;\n this.clearReconnect();\n\n const token = await this.options.getAccessToken();\n if (typeof token !== 'string' || token.length === 0) {\n throw new ValidationError('getAccessToken returned an empty access token.', 'getAccessToken');\n }\n\n this.currentState = 'connecting';\n this.authenticated = false;\n this.sessionAdvertised = false;\n this.boundJid = null;\n this.saslToken = saslPlain(this.options.accountId, token);\n\n this.connectPromise = new Promise<void>((resolve, reject) => {\n this.connectResolve = resolve;\n this.connectReject = reject;\n });\n\n let socket: WebSocketLike;\n try {\n socket = this.factory(this.url, XMPP_SUBPROTOCOL);\n } catch (error) {\n const failure = error instanceof Error ? error : new Error(String(error));\n this.failConnect(failure);\n throw failure;\n }\n this.socket = socket;\n\n this.connectTimer = setTimeout(() => {\n this.failConnect(new ConfigurationError('Timed out while establishing the XMPP session.', 'connectionTimeoutMs'));\n }, this.connectionTimeoutMs);\n\n socket.addEventListener('open', () => {\n this.sendRaw(this.openStanza());\n });\n socket.addEventListener('message', (event: { data: unknown }) => {\n this.handleIncoming(event.data);\n });\n socket.addEventListener('close', (event: { code?: number; reason?: string }) => {\n this.handleClose(event.code ?? 1006, event.reason ?? '');\n });\n socket.addEventListener('error', () => {\n this.emit('error', new Error('The XMPP WebSocket reported an error.'));\n });\n\n return this.connectPromise;\n }\n\n async disconnect(): Promise<void> {\n this.manualDisconnect = true;\n this.clearReconnect();\n if (this.currentState === 'idle' || this.currentState === 'closed') {\n this.teardownTimers();\n return;\n }\n this.currentState = 'closing';\n if (this.socket && this.socket.readyState === WS_OPEN) {\n try {\n this.sendRaw(this.presenceStanza({ online: false }));\n this.sendRaw('<close xmlns=\"urn:ietf:params:xml:ns:xmpp-framing\"/>');\n } catch {\n // teardown best-effort\n }\n }\n try {\n this.socket?.close(1000, 'client disconnect');\n } catch {\n // teardown best-effort\n }\n this.handleClose(1000, 'client disconnect');\n }\n\n setStatus(input: SetStatusInput = {}): void {\n this.assertConnected();\n this.sendRaw(this.presenceStanza(input));\n }\n\n setCustomStatus(status: string, options: CustomStatusOptions = {}): void {\n if (typeof status !== 'string') {\n throw new ValidationError('A custom status must be a string.', 'status');\n }\n this.setStatus({ status, ...options });\n }\n\n showStatusWhenOffline(status: string, options: Omit<CustomStatusOptions, 'persistWhileOffline'> = {}): void {\n if (typeof status !== 'string') {\n throw new ValidationError('A custom status must be a string.', 'status');\n }\n this.setStatus({ status, ...options, persistWhileOffline: true });\n }\n\n clearStatus(): void {\n this.setStatus({ status: '', playing: false, joinable: false });\n }\n\n setAway(away: AwayStatus, status?: string): void {\n this.setStatus(status === undefined ? { away } : { away, status });\n }\n\n goOnline(): void {\n this.setStatus({ online: true, away: 'online' });\n }\n\n goOffline(): void {\n this.setStatus({ online: false });\n }\n\n private resolveShow(input: SetStatusInput): PresenceShow | null {\n if (input.show) return input.show;\n if (input.away !== undefined) return AWAY_STATUS_SHOW[input.away];\n return null;\n }\n\n private replayInput(presence: { status: FortniteStatus; show: PresenceShow | null; persist: boolean }): SetStatusInput {\n return {\n raw: presence.status,\n persistWhileOffline: presence.persist,\n ...(presence.show ? { show: presence.show } : {}),\n };\n }\n\n sendMessage(accountId: string, body: string): void {\n this.assertConnected();\n if (typeof accountId !== 'string' || accountId.trim().length === 0) {\n throw new ValidationError('sendMessage requires a target accountId.', 'accountId');\n }\n if (typeof body !== 'string' || body.length === 0) {\n throw new ValidationError('sendMessage requires a non-empty body.', 'body');\n }\n const to = accountId.includes('@') ? accountId : `${accountId}@${this.domain}`;\n this.sendRaw(\n buildStanza({\n name: 'message',\n attrs: { to, id: `msg_${randomHex(16)}`, type: 'chat' },\n children: [{ name: 'body', text: body }],\n }),\n );\n }\n\n requestPresence(accountId: string): void {\n this.assertConnected();\n if (typeof accountId !== 'string' || accountId.trim().length === 0) {\n throw new ValidationError('requestPresence requires a target accountId.', 'accountId');\n }\n const to = accountId.includes('@') ? accountId : `${accountId}@${this.domain}`;\n this.sendRaw(buildStanza({ name: 'presence', attrs: { to, type: 'probe' } }));\n }\n\n ping(): void {\n this.assertConnected();\n this.pingCounter += 1;\n this.sendRaw(\n buildStanza({\n name: 'iq',\n attrs: { to: this.domain, type: 'get', id: `ping_${this.pingCounter}` },\n children: [{ name: 'ping', attrs: { xmlns: 'urn:xmpp:ping' } }],\n }),\n );\n }\n\n private assertConnected(): void {\n if (this.currentState !== 'connected') {\n throw new ConfigurationError('The XMPP client is not connected. Call connect() first.', 'state');\n }\n }\n\n private openStanza(): string {\n return buildStanza({\n name: 'open',\n attrs: { xmlns: 'urn:ietf:params:xml:ns:xmpp-framing', to: this.domain, version: '1.0' },\n });\n }\n\n private presenceStanza(input: SetStatusInput): string {\n const online = input.online !== false;\n const status = this.buildStatus(input);\n if (online) this.lastStatus = status;\n\n const attrs: Record<string, string> = {};\n const directed = input.to !== undefined && input.to.trim().length > 0;\n if (directed) {\n attrs.to = input.to!.includes('@') ? input.to! : `${input.to!}@${this.domain}`;\n }\n if (!online) attrs.type = 'unavailable';\n\n const show = this.resolveShow(input);\n const persist = online && input.persistWhileOffline === true;\n if (online && !directed) this.currentPresence = { status, show, persist };\n\n const children: Array<{ name: string; text?: string; attrs?: Record<string, string> }> = [];\n if (online && show) children.push({ name: 'show', text: show });\n if (online) children.push({ name: 'status', text: JSON.stringify(status) });\n if (persist) {\n children.push({\n name: 'delay',\n attrs: { xmlns: 'urn:xmpp:delay', stamp: input.delayStamp ?? PRESENCE_OFFLINE_PERSIST_STAMP },\n });\n }\n\n return buildStanza({\n name: 'presence',\n attrs: Object.keys(attrs).length > 0 ? attrs : undefined,\n children,\n });\n }\n\n private buildStatus(input: SetStatusInput): FortniteStatus {\n if (input.raw) return input.raw;\n const base: FortniteStatus = this.lastStatus ? { ...this.lastStatus } : {};\n if (input.status !== undefined) base.Status = input.status;\n if (input.playing !== undefined) base.bIsPlaying = input.playing;\n if (input.joinable !== undefined) base.bIsJoinable = input.joinable;\n if (input.voice !== undefined) base.bHasVoiceSupport = input.voice;\n if (input.sessionId !== undefined) base.SessionId = input.sessionId;\n if (input.productName !== undefined) base.ProductName = input.productName;\n if (input.properties !== undefined) base.Properties = input.properties;\n if (base.Status === undefined) base.Status = '';\n return base;\n }\n\n private sendRaw(data: string): void {\n if (!this.socket) throw new ConfigurationError('The XMPP socket is not open.', 'state');\n this.socket.send(data);\n this.options.debug?.('out', data);\n this.emit('raw', { direction: 'out', data });\n }\n\n private handleIncoming(data: unknown): void {\n const text = typeof data === 'string' ? data : this.decodeBinary(data);\n if (!text) return;\n this.options.debug?.('in', text);\n this.emit('raw', { direction: 'in', data: text });\n\n const node = parseStanza(text);\n if (!node) return;\n this.emit('stanza', node);\n this.routeStanza(node);\n }\n\n private decodeBinary(data: unknown): string {\n try {\n const bufferCtor = (globalThis as { Buffer?: { isBuffer(value: unknown): boolean; from(value: unknown): { toString(encoding: string): string } } }).Buffer;\n if (bufferCtor?.isBuffer(data)) return bufferCtor.from(data).toString('utf8');\n if (data instanceof ArrayBuffer) return new TextDecoder().decode(new Uint8Array(data));\n if (ArrayBuffer.isView(data)) return new TextDecoder().decode(data as ArrayBufferView);\n } catch {\n return '';\n }\n return '';\n }\n\n private routeStanza(node: XmlNode): void {\n const name = localName(node.name);\n switch (name) {\n case 'open':\n return;\n case 'features':\n this.handleFeatures(node);\n return;\n case 'success':\n this.handleSaslSuccess();\n return;\n case 'failure':\n this.failConnect(new ConfigurationError('XMPP authentication failed (SASL failure).', 'getAccessToken'));\n return;\n case 'iq':\n this.handleIq(node);\n return;\n case 'presence':\n this.handlePresence(node);\n return;\n case 'message':\n this.handleMessage(node);\n return;\n case 'close':\n this.handleClose(1000, 'server closed stream');\n return;\n default:\n return;\n }\n }\n\n private handleFeatures(node: XmlNode): void {\n const hasMechanisms = Boolean(findChild(node, 'mechanisms'));\n const hasBind = Boolean(findChild(node, 'bind'));\n\n if (!this.authenticated && hasMechanisms) {\n this.currentState = 'authenticating';\n this.sendRaw(\n buildStanza({\n name: 'auth',\n attrs: { xmlns: 'urn:ietf:params:xml:ns:xmpp-sasl', mechanism: 'PLAIN' },\n text: this.saslToken,\n }),\n );\n return;\n }\n\n if (this.authenticated && hasBind) {\n this.sessionAdvertised = Boolean(findChild(node, 'session'));\n this.currentState = 'binding';\n this.sendRaw(\n buildStanza({\n name: 'iq',\n attrs: { type: 'set', id: 'bind_1' },\n children: [\n {\n name: 'bind',\n attrs: { xmlns: 'urn:ietf:params:xml:ns:xmpp-bind' },\n children: [{ name: 'resource', text: this.resourceId }],\n },\n ],\n }),\n );\n }\n }\n\n private handleSaslSuccess(): void {\n this.authenticated = true;\n this.sendRaw(this.openStanza());\n }\n\n private handleIq(node: XmlNode): void {\n const id = node.attrs.id ?? '';\n const type = node.attrs.type ?? '';\n\n if (findChild(node, 'ping') && type === 'get') {\n this.sendRaw(\n buildStanza({\n name: 'iq',\n attrs: {\n to: node.attrs.from ?? this.domain,\n from: this.boundJid ?? undefined,\n id: id || `pong_${randomHex(8)}`,\n type: 'result',\n },\n }),\n );\n return;\n }\n\n if (id === 'bind_1' && type === 'result') {\n const bind = findChild(node, 'bind');\n const jidNode = bind ? findChild(bind, 'jid') : undefined;\n this.boundJid = jidNode?.text ?? `${this.options.accountId}@${this.domain}/${this.resourceId}`;\n if (this.sessionAdvertised) {\n this.sendRaw(\n buildStanza({\n name: 'iq',\n attrs: { type: 'set', id: 'session_1' },\n children: [{ name: 'session', attrs: { xmlns: 'urn:ietf:params:xml:ns:xmpp-session' } }],\n }),\n );\n } else {\n this.finishConnect();\n }\n return;\n }\n\n if (id === 'session_1' && type === 'result') {\n this.finishConnect();\n }\n }\n\n private finishConnect(): void {\n if (this.currentState === 'connected') return;\n this.currentState = 'connected';\n this.everConnected = true;\n this.reconnectAttempts = 0;\n this.clearReconnect();\n\n if (this.currentPresence) {\n this.sendRaw(this.presenceStanza(this.replayInput(this.currentPresence)));\n } else {\n const initial = this.options.initialPresence;\n if (initial !== false) {\n this.sendRaw(this.presenceStanza(initial ?? {}));\n }\n }\n\n this.startKeepalive();\n if (this.connectTimer) {\n clearTimeout(this.connectTimer);\n this.connectTimer = null;\n }\n const resolve = this.connectResolve;\n this.connectResolve = null;\n this.connectReject = null;\n this.connectPromise = null;\n this.emit('connected', undefined);\n resolve?.();\n }\n\n private handlePresence(node: XmlNode): void {\n const from = node.attrs.from;\n if (!from) return;\n const type = node.attrs.type ?? '';\n if (type === 'error') return;\n\n const accountId = accountIdFromJid(from);\n if (accountId === this.options.accountId) return;\n\n const resource = resourceFromJid(from);\n const available = type !== 'unavailable';\n const showNode = findChild(node, 'show');\n const statusNode = findChild(node, 'status');\n const statusText = statusNode?.text ?? null;\n\n let status: FortniteStatus | null = null;\n if (statusText) {\n try {\n const parsed = JSON.parse(statusText) as FortniteStatus;\n if (parsed && typeof parsed === 'object') status = parsed;\n } catch {\n status = null;\n }\n }\n\n const presence: FriendPresence = {\n accountId,\n jid: from,\n resource,\n platform: platformFromResource(resource),\n available,\n show: (showNode?.text as PresenceShow) || null,\n statusText,\n status,\n playing: Boolean(status?.bIsPlaying),\n joinable: Boolean(status?.bIsJoinable),\n receivedAt: new Date().toISOString(),\n };\n\n if (available) {\n this.presenceCache.set(accountId, presence);\n } else {\n this.presenceCache.delete(accountId);\n }\n this.emit('presence', presence);\n }\n\n private handleMessage(node: XmlNode): void {\n const from = node.attrs.from;\n if (!from) return;\n const bodyNode = findChild(node, 'body');\n if (!bodyNode) return;\n const message: XmppMessage = {\n id: node.attrs.id ?? null,\n from,\n accountId: accountIdFromJid(from),\n type: node.attrs.type ?? 'normal',\n body: bodyNode.text,\n receivedAt: new Date().toISOString(),\n };\n this.emit('message', message);\n }\n\n private startKeepalive(): void {\n this.teardownTimers();\n this.pingTimer = setInterval(() => {\n if (this.currentState !== 'connected') return;\n try {\n this.ping();\n } catch {\n // transient ping failures are non-fatal\n }\n }, this.pingIntervalMs);\n const timer = this.pingTimer as { unref?: () => void };\n if (typeof timer.unref === 'function') timer.unref();\n }\n\n private teardownTimers(): void {\n if (this.pingTimer) {\n clearInterval(this.pingTimer);\n this.pingTimer = null;\n }\n }\n\n private failConnect(error: Error): void {\n const reject = this.connectReject;\n this.connectResolve = null;\n this.connectReject = null;\n this.connectPromise = null;\n if (this.connectTimer) {\n clearTimeout(this.connectTimer);\n this.connectTimer = null;\n }\n this.teardownTimers();\n if (this.currentState !== 'closed') {\n this.currentState = 'closed';\n try {\n this.socket?.close(1000, 'connect failed');\n } catch {\n // ignore\n }\n }\n if (reject) {\n reject(error);\n } else {\n this.emit('error', error);\n }\n this.maybeReconnect();\n }\n\n private handleClose(code: number, reason: string): void {\n if (this.currentState === 'closed') return;\n const wasConnecting = Boolean(this.connectReject);\n this.teardownTimers();\n if (this.connectTimer) {\n clearTimeout(this.connectTimer);\n this.connectTimer = null;\n }\n this.currentState = 'closed';\n this.socket = null;\n this.presenceCache.clear();\n\n if (wasConnecting) {\n this.failConnect(new ConfigurationError(`The XMPP connection closed before it was established (code ${code}).`, 'state'));\n return;\n }\n this.emit('disconnected', { code, reason });\n this.maybeReconnect();\n }\n\n private maybeReconnect(): void {\n if (!this.autoReconnect || this.manualDisconnect || !this.everConnected) return;\n if (this.reconnectTimer || this.connectPromise) return;\n if (this.maxReconnectAttempts > 0 && this.reconnectAttempts >= this.maxReconnectAttempts) {\n this.emit('error', new ConfigurationError('Exhausted XMPP reconnect attempts.', 'maxReconnectAttempts'));\n return;\n }\n\n const attempt = this.reconnectAttempts + 1;\n const delay = Math.min(this.reconnectMaxDelayMs, this.reconnectInitialDelayMs * 2 ** this.reconnectAttempts);\n this.reconnectAttempts = attempt;\n this.emit('reconnecting', { attempt, delay });\n\n this.reconnectTimer = setTimeout(() => {\n this.reconnectTimer = null;\n if (this.manualDisconnect) return;\n this.connect().catch(() => {\n // failure re-enters maybeReconnect via failConnect/handleClose\n });\n }, delay);\n const timer = this.reconnectTimer as { unref?: () => void };\n if (typeof timer.unref === 'function') timer.unref();\n }\n\n private clearReconnect(): void {\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n }\n}\n","import { ConfigurationError, ValidationError } from '../core/errors.js';\nimport { EOS_AUTH_BASE_URL, FN_LIVE_DEPLOYMENT_ID } from './eos.js';\nimport type { EpicRestClient } from './rest.js';\n\nexport const CHAT_BASE_URL = EOS_AUTH_BASE_URL;\nexport const PUBLIC_KEY_BASE_URL = 'https://publickey-service-live.ecosec.on.epicgames.com';\nexport const CHAT_DEFAULT_PLATFORM = 'WIN';\nexport const CHAT_DEFAULT_BUILD = '++Fortnite+Release-40.30-CL-53093531';\nexport const CHAT_MAX_MESSAGE_LENGTH = 2048;\n\nexport interface ChatKeypair {\n privateKey: unknown;\n publicKeyB64: string;\n}\n\nexport interface RegisteredKey {\n jwt?: string;\n [key: string]: unknown;\n}\n\nexport interface ConversationData {\n conversationId: string;\n isReportable: boolean;\n [key: string]: unknown;\n}\n\nexport interface ChatMessage {\n id?: string;\n conversationId?: string;\n senderId?: string;\n body?: string;\n time?: string;\n [key: string]: unknown;\n}\n\nexport interface ChatSendResult {\n id?: string;\n time?: string;\n [key: string]: unknown;\n}\n\nexport interface SignedMessageInput {\n accountId: string;\n conversationId: string;\n content: string;\n type?: 'Persistent' | 'Party' | (string & {});\n sequence?: number;\n}\n\nexport interface SignedMessage {\n body: string;\n sig: string;\n}\n\nexport interface ChatPresenceOptions {\n platform?: string;\n build?: string;\n activity?: string;\n onlineType?: string;\n deploymentId?: string;\n signal?: AbortSignal;\n}\n\nfunction requireString(value: unknown, parameter: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(`\"${parameter}\" is required and must be a non-empty string`, parameter);\n }\n return value;\n}\n\nfunction encodeBase64(input: string): string {\n const bufferCtor = (globalThis as { Buffer?: { from(data: string, encoding: string): { toString(encoding: string): string } } }).Buffer;\n if (bufferCtor) return bufferCtor.from(input, 'utf8').toString('base64');\n const globalBtoa = (globalThis as { btoa?: (value: string) => string }).btoa;\n if (typeof globalBtoa === 'function') {\n const bytes = new TextEncoder().encode(input);\n let binary = '';\n for (const byte of bytes) binary += String.fromCharCode(byte);\n return globalBtoa(binary);\n }\n throw new ConfigurationError('No base64 encoder (Buffer/btoa) is available in this runtime.', 'chat');\n}\n\nexport function decodeMessageBody(body: string): string {\n try {\n let decoded: string;\n const bufferCtor = (globalThis as { Buffer?: { from(data: string, encoding: string): { toString(encoding: string): string } } }).Buffer;\n if (bufferCtor) {\n decoded = bufferCtor.from(body, 'base64').toString('utf8');\n } else {\n const globalAtob = (globalThis as { atob?: (value: string) => string }).atob;\n if (typeof globalAtob !== 'function') return body;\n const binary = globalAtob(body);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i += 1) bytes[i] = binary.charCodeAt(i);\n decoded = new TextDecoder().decode(bytes);\n }\n decoded = decoded.replace(/\\0+$/, '');\n const parsed = JSON.parse(decoded) as { msg?: unknown };\n if (parsed && typeof parsed.msg === 'string') return parsed.msg;\n return body;\n } catch {\n return body;\n }\n}\n\nasync function loadCrypto(): Promise<typeof import('node:crypto')> {\n try {\n return await import('node:crypto');\n } catch {\n throw new ConfigurationError(\n 'Ed25519 chat signing requires the Node.js \"node:crypto\" module, which is not available in this runtime.',\n 'chat',\n );\n }\n}\n\nexport async function generateChatKeypair(): Promise<ChatKeypair> {\n const crypto = await loadCrypto();\n const { publicKey, privateKey } = crypto.generateKeyPairSync('ed25519');\n const spki = publicKey.export({ type: 'spki', format: 'der' }) as Buffer;\n const raw = spki.subarray(spki.length - 32);\n return { privateKey, publicKeyB64: raw.toString('base64') };\n}\n\nexport async function buildSignedMessage(keypair: ChatKeypair, input: SignedMessageInput): Promise<SignedMessage> {\n const crypto = await loadCrypto();\n const timestamp = Math.floor(Date.now() / 1000);\n const messageInfo = {\n mid: crypto.randomBytes(16).toString('hex'),\n sid: input.accountId,\n rid: input.conversationId,\n msg: input.content,\n tst: timestamp,\n seq: input.sequence ?? 1,\n rec: false,\n mts: [],\n cty: input.type ?? 'Persistent',\n };\n const body = encodeBase64(JSON.stringify(messageInfo));\n const message = Buffer.concat([Buffer.from(body, 'utf8'), Buffer.from([0])]);\n const signature = crypto.sign(null, message, keypair.privateKey as Parameters<typeof crypto.sign>[2]);\n return { body, sig: signature.toString('base64') };\n}\n\nexport function buildPresencePayload(\n options: { platform?: string; build?: string; activity?: string; onlineType?: string } = {},\n): Record<string, unknown> {\n const payload: Record<string, unknown> = {\n status: options.onlineType ?? 'online',\n props: {\n EOS_Platform: options.platform ?? CHAT_DEFAULT_PLATFORM,\n EOS_IntegratedPlatform: 'EGS',\n EOS_OnlinePlatformType: '100',\n EOS_ProductVersion: options.build ?? CHAT_DEFAULT_BUILD,\n EOS_ProductName: 'Fortnite',\n EOS_Session: '{\"version\":3}',\n EOS_Lobby: '{\"version\":3}',\n },\n conn: { props: {} },\n };\n if (typeof options.activity === 'string') {\n payload.activity = { value: options.activity };\n }\n return payload;\n}\n\nexport class ChatService {\n constructor(\n private readonly chatRest: EpicRestClient,\n private readonly publicKeyRest: EpicRestClient,\n ) {}\n\n async registerPublicKey(\n gameAccessToken: string,\n publicKeyB64: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<RegisteredKey> {\n requireString(gameAccessToken, 'gameAccessToken');\n requireString(publicKeyB64, 'publicKeyB64');\n const response = await this.publicKeyRest.request<RegisteredKey>('POST', '/publickey/v2/publickey/', {\n bearer: gameAccessToken,\n json: { key: publicKeyB64, algorithm: 'ed25519' },\n ...(options.signal ? { signal: options.signal } : {}),\n });\n return response.data;\n }\n\n async getConversation(\n easAccessToken: string,\n accountId: string,\n targetAccountId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<ConversationData> {\n requireString(easAccessToken, 'easAccessToken');\n requireString(accountId, 'accountId');\n requireString(targetAccountId, 'targetAccountId');\n const response = await this.chatRest.request<ConversationData>('POST', '/epic/chat/v1/public/_/conversations', {\n bearer: easAccessToken,\n query: { createIfExists: 'false' },\n json: { title: '', type: 'dm', members: [accountId, targetAccountId] },\n ...(options.signal ? { signal: options.signal } : {}),\n });\n return response.data;\n }\n\n async previousMessages(\n easAccessToken: string,\n accountId: string,\n conversationId: string,\n options: { limit?: number; signal?: AbortSignal } = {},\n ): Promise<ChatMessage[]> {\n requireString(easAccessToken, 'easAccessToken');\n requireString(accountId, 'accountId');\n requireString(conversationId, 'conversationId');\n const path = `/epic/chat/v1/public/_/conversations/${encodeURIComponent(conversationId)}/messages`;\n const response = await this.chatRest.request<{ page?: ChatMessage[] }>('GET', path, {\n bearer: easAccessToken,\n query: { requestingAccountId: accountId, limit: options.limit ?? 30 },\n ...(options.signal ? { signal: options.signal } : {}),\n });\n return response.data.page ?? [];\n }\n\n async postDMMessage(\n easAccessToken: string,\n accountId: string,\n conversationId: string,\n payload: Record<string, unknown>,\n options: { signal?: AbortSignal } = {},\n ): Promise<ChatSendResult> {\n requireString(easAccessToken, 'easAccessToken');\n requireString(conversationId, 'conversationId');\n const path = `/epic/chat/v1/public/_/conversations/${encodeURIComponent(conversationId)}/messages`;\n const response = await this.chatRest.request<ChatSendResult>('POST', path, {\n bearer: easAccessToken,\n query: { fromAccountId: accountId },\n json: payload,\n ...(options.signal ? { signal: options.signal } : {}),\n });\n return response.data;\n }\n\n async postPartyMessage(\n easAccessToken: string,\n accountId: string,\n partyId: string,\n payload: Record<string, unknown>,\n options: { deploymentId?: string; signal?: AbortSignal } = {},\n ): Promise<ChatSendResult> {\n requireString(easAccessToken, 'easAccessToken');\n requireString(partyId, 'partyId');\n const deploymentId = options.deploymentId ?? FN_LIVE_DEPLOYMENT_ID;\n const path =\n `/epic/chat/v1/public/${encodeURIComponent(deploymentId)}/conversations/` +\n `${encodeURIComponent(`p-${partyId}`)}/messages`;\n const response = await this.chatRest.request<ChatSendResult>('POST', path, {\n bearer: easAccessToken,\n query: { fromAccountId: accountId },\n json: payload,\n ...(options.signal ? { signal: options.signal } : {}),\n });\n return response.data;\n }\n\n async sendPresence(\n easAccessToken: string,\n accountId: string,\n connectionId: string,\n options: ChatPresenceOptions = {},\n ): Promise<void> {\n requireString(easAccessToken, 'easAccessToken');\n requireString(accountId, 'accountId');\n requireString(connectionId, 'connectionId');\n const deploymentId = options.deploymentId ?? FN_LIVE_DEPLOYMENT_ID;\n const path =\n `/epic/presence/v1/${encodeURIComponent(deploymentId)}/` +\n `${encodeURIComponent(accountId)}/presence/${encodeURIComponent(connectionId)}`;\n await this.chatRest.request('PATCH', path, {\n bearer: easAccessToken,\n json: buildPresencePayload(options),\n ...(options.signal ? { signal: options.signal } : {}),\n });\n }\n}\n","import { ConfigurationError, ValidationError } from '../core/errors.js';\nimport { decodeMessageBody } from './chat.js';\nimport { TypedEmitter } from './emitter.js';\nimport type { WebSocketLike } from './xmpp.js';\n\nexport const CONNECT_WEBSOCKET_URL = 'wss://connect.epicgames.dev/';\nexport const CONNECT_SUBPROTOCOL = 'stomp';\nexport const CONNECT_SEC_PROTOCOLS = 'v10.stomp,v11.stomp,v12.stomp';\n\nconst NUL = String.fromCharCode(0);\nconst WS_OPEN = 1;\n\nexport type ConnectState = 'idle' | 'connecting' | 'connected' | 'closing' | 'closed';\n\nexport interface ConnectSocketOptions {\n headers?: Record<string, string>;\n}\n\nexport type ConnectWebSocketFactory = (\n url: string,\n protocols?: string | string[],\n options?: ConnectSocketOptions,\n) => WebSocketLike;\n\nexport interface ConnectFrame {\n command: string;\n headers: Record<string, string>;\n body: Record<string, unknown>;\n}\n\nexport interface ConnectFriendMessage {\n conversationId: string | null;\n accountId: string;\n body: string;\n receivedAt: string;\n raw: Record<string, unknown>;\n}\n\nexport interface ConnectPartyMessage {\n partyId: string | null;\n conversationId: string | null;\n accountId: string;\n body: string;\n receivedAt: string;\n raw: Record<string, unknown>;\n}\n\nexport interface ConnectPresenceUpdate {\n accountId: string;\n payload: Record<string, unknown>;\n receivedAt: string;\n}\n\nexport interface ConnectClientOptions {\n accountId: string;\n getAccessToken: () => string | Promise<string>;\n onConnected?: (connectionId: string) => void | Promise<void>;\n webSocket?: ConnectWebSocketFactory;\n url?: string;\n connectionTimeoutMs?: number;\n autoReconnect?: boolean;\n debug?: (direction: 'in' | 'out', data: string) => void;\n}\n\nexport interface ConnectEventMap {\n connected: { connectionId: string };\n disconnected: { code: number; reason: string };\n 'friend:message': ConnectFriendMessage;\n 'party:message': ConnectPartyMessage;\n presence: ConnectPresenceUpdate;\n message: ConnectFrame;\n frame: ConnectFrame;\n raw: { direction: 'in' | 'out'; data: string };\n error: Error;\n}\n\nfunction resolveConnectWebSocketFactory(factory?: ConnectWebSocketFactory): ConnectWebSocketFactory {\n if (factory) return factory;\n const globalWebSocket = (globalThis as { WebSocket?: unknown }).WebSocket;\n if (typeof globalWebSocket !== 'function') {\n throw new ConfigurationError(\n 'No global WebSocket implementation was found. Pass a `webSocket` factory (for example one backed by the \"ws\" package, which can set the required Authorization header) in the connect options.',\n 'webSocket',\n );\n }\n return (url, protocols) =>\n new (globalWebSocket as new (url: string, protocols?: string | string[]) => WebSocketLike)(url, protocols);\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object' ? (value as Record<string, unknown>) : {};\n}\n\nfunction stripPartyPrefix(conversationId: string | null): string | null {\n if (!conversationId) return null;\n return conversationId.startsWith('p-') ? conversationId.slice(2) : conversationId;\n}\n\nexport class ConnectClient extends TypedEmitter<ConnectEventMap> {\n private readonly options: ConnectClientOptions;\n private readonly factory: ConnectWebSocketFactory;\n private readonly url: string;\n private readonly connectionTimeoutMs: number;\n private readonly autoReconnect: boolean;\n\n private socket: WebSocketLike | null = null;\n private currentState: ConnectState = 'idle';\n private connectionId: string | null = null;\n private heartbeatStarted = false;\n\n private heartbeatTimer: ReturnType<typeof setInterval> | null = null;\n private connectTimer: ReturnType<typeof setTimeout> | null = null;\n\n private connectPromise: Promise<void> | null = null;\n private connectResolve: (() => void) | null = null;\n private connectReject: ((error: Error) => void) | null = null;\n\n constructor(options: ConnectClientOptions) {\n super();\n if (!options || typeof options.accountId !== 'string' || options.accountId.trim().length === 0) {\n throw new ValidationError('A connect client requires a non-empty accountId.', 'accountId');\n }\n if (typeof options.getAccessToken !== 'function') {\n throw new ValidationError('A connect client requires a getAccessToken function.', 'getAccessToken');\n }\n this.options = options;\n this.factory = resolveConnectWebSocketFactory(options.webSocket);\n this.url = options.url ?? CONNECT_WEBSOCKET_URL;\n this.connectionTimeoutMs = options.connectionTimeoutMs ?? 15_000;\n this.autoReconnect = options.autoReconnect ?? true;\n }\n\n get state(): ConnectState {\n return this.currentState;\n }\n\n get connected(): boolean {\n return this.currentState === 'connected';\n }\n\n get accountId(): string {\n return this.options.accountId;\n }\n\n get connection(): string | null {\n return this.connectionId;\n }\n\n async connect(): Promise<void> {\n if (this.currentState === 'connected') return;\n if (this.connectPromise) return this.connectPromise;\n\n const token = await this.options.getAccessToken();\n if (typeof token !== 'string' || token.length === 0) {\n throw new ValidationError('getAccessToken returned an empty access token.', 'getAccessToken');\n }\n\n this.currentState = 'connecting';\n this.connectionId = null;\n this.heartbeatStarted = false;\n\n this.connectPromise = new Promise<void>((resolve, reject) => {\n this.connectResolve = resolve;\n this.connectReject = reject;\n });\n\n let socket: WebSocketLike;\n try {\n socket = this.factory(this.url, undefined, {\n headers: {\n Authorization: `Bearer ${token}`,\n 'Epic-Connect-Protocol': 'stomp',\n 'Sec-WebSocket-Protocol': CONNECT_SEC_PROTOCOLS,\n 'Epic-Connect-Device-Id': ' ',\n },\n });\n } catch (error) {\n const failure = error instanceof Error ? error : new Error(String(error));\n this.failConnect(failure);\n throw failure;\n }\n this.socket = socket;\n\n this.connectTimer = setTimeout(() => {\n this.failConnect(new ConfigurationError('Timed out while establishing the connect session.', 'connectionTimeoutMs'));\n }, this.connectionTimeoutMs);\n\n socket.addEventListener('open', () => {\n this.sendRaw(`CONNECT\\nheart-beat:30000,0\\naccept-version:1.0,1.1,1.2\\n\\n${NUL}`);\n });\n socket.addEventListener('message', (event: { data: unknown }) => {\n this.handleIncoming(event.data);\n });\n socket.addEventListener('close', (event: { code?: number; reason?: string }) => {\n this.handleClose(event.code ?? 1006, event.reason ?? '');\n });\n socket.addEventListener('error', () => {\n this.emit('error', new Error('The connect WebSocket reported an error.'));\n });\n\n return this.connectPromise;\n }\n\n async disconnect(): Promise<void> {\n if (this.currentState === 'idle' || this.currentState === 'closed') {\n this.teardownTimers();\n return;\n }\n this.currentState = 'closing';\n try {\n this.socket?.close(1000, 'client disconnect');\n } catch {\n // teardown best-effort\n }\n this.handleClose(1000, 'client disconnect');\n }\n\n private sendRaw(data: string): void {\n if (!this.socket) throw new ConfigurationError('The connect socket is not open.', 'state');\n this.socket.send(data);\n this.options.debug?.('out', data);\n this.emit('raw', { direction: 'out', data });\n }\n\n private handleIncoming(data: unknown): void {\n const text = typeof data === 'string' ? data : this.decodeBinary(data);\n if (!text) return;\n this.options.debug?.('in', text);\n this.emit('raw', { direction: 'in', data: text });\n\n const separator = text.indexOf('\\n\\n');\n if (separator === -1) return;\n\n const rawHeaders = text.slice(0, separator);\n const rawBody = text.slice(separator + 2);\n const headerLines = rawHeaders.split('\\n');\n const command = headerLines[0] ?? '';\n\n const headers: Record<string, string> = {};\n for (let i = 1; i < headerLines.length; i += 1) {\n const line = headerLines[i]!;\n const colon = line.indexOf(':');\n if (colon === -1) continue;\n headers[line.slice(0, colon).trim()] = line.slice(colon + 1).trim();\n }\n\n let body: Record<string, unknown> = {};\n const trimmed = rawBody.replace(/\\0+$/, '');\n if (trimmed.length > 0) {\n try {\n body = asRecord(JSON.parse(trimmed));\n } catch {\n body = {};\n }\n }\n\n const frame: ConnectFrame = { command, headers, body };\n this.emit('frame', frame);\n this.routeFrame(frame);\n }\n\n private decodeBinary(data: unknown): string {\n try {\n const bufferCtor = (globalThis as { Buffer?: { isBuffer(value: unknown): boolean; from(value: unknown): { toString(encoding: string): string } } }).Buffer;\n if (bufferCtor?.isBuffer(data)) return bufferCtor.from(data).toString('utf8');\n if (data instanceof ArrayBuffer) return new TextDecoder().decode(new Uint8Array(data));\n if (ArrayBuffer.isView(data)) return new TextDecoder().decode(data as ArrayBufferView);\n } catch {\n return '';\n }\n return '';\n }\n\n private routeFrame(frame: ConnectFrame): void {\n const { command, headers, body } = frame;\n\n if (command === 'CONNECTED') {\n this.startHeartbeat(headers['heart-beat']);\n this.sendRaw(`SUBSCRIBE\\nid:0\\ndestination:launcher\\n\\n${NUL}`);\n return;\n }\n\n if (command === 'ERROR') {\n const statusCode = typeof body['statusCode'] === 'number' ? (body['statusCode'] as number) : undefined;\n if (statusCode === 4019) {\n void this.restart();\n return;\n }\n const message = typeof headers['message'] === 'string' ? headers['message'] : 'connect stream error';\n this.emit('error', new Error(`Connect error frame: ${message}`));\n return;\n }\n\n if (command !== 'MESSAGE') return;\n this.emit('message', frame);\n\n const type = typeof body['type'] === 'string' ? (body['type'] as string) : '';\n if (type === 'core.connect.v1.connected') {\n const connectionId = typeof body['connectionId'] === 'string' ? (body['connectionId'] as string) : '';\n this.finishConnect(connectionId);\n return;\n }\n\n if (type === 'social.chat.v1.NEW_MESSAGE') {\n this.handleNewMessage(body);\n return;\n }\n\n if (type === 'presence.v1.UPDATE') {\n const payload = asRecord(body['payload']);\n const accountId = typeof payload['accountId'] === 'string' ? (payload['accountId'] as string) : '';\n if (!accountId) return;\n this.emit('presence', { accountId, payload, receivedAt: new Date().toISOString() });\n }\n }\n\n private handleNewMessage(body: Record<string, unknown>): void {\n const payload = asRecord(body['payload']);\n const conversation = asRecord(payload['conversation']);\n const message = asRecord(payload['message']);\n const conversationType = typeof conversation['type'] === 'string' ? (conversation['type'] as string) : '';\n const senderId = typeof message['senderId'] === 'string' ? (message['senderId'] as string) : '';\n const rawBody = typeof message['body'] === 'string' ? (message['body'] as string) : '';\n const conversationId =\n (typeof conversation['conversationId'] === 'string' && (conversation['conversationId'] as string)) ||\n (typeof conversation['id'] === 'string' && (conversation['id'] as string)) ||\n null;\n if (!senderId) return;\n const content = decodeMessageBody(rawBody);\n const receivedAt = new Date().toISOString();\n\n if (conversationType === 'dm') {\n this.emit('friend:message', {\n conversationId,\n accountId: senderId,\n body: content,\n receivedAt,\n raw: payload,\n });\n return;\n }\n\n if (conversationType === 'party') {\n if (senderId === this.options.accountId) return;\n this.emit('party:message', {\n partyId: stripPartyPrefix(conversationId),\n conversationId,\n accountId: senderId,\n body: content,\n receivedAt,\n raw: payload,\n });\n }\n }\n\n private startHeartbeat(headerValue: string | undefined): void {\n if (this.heartbeatStarted) return;\n const parts = (headerValue ?? '0,0').split(',');\n const requested = Number.parseInt(parts[1] ?? '0', 10);\n const delayMs = Number.isFinite(requested) && requested > 0 ? requested : 30_000;\n this.heartbeatStarted = true;\n this.heartbeatTimer = setInterval(() => {\n if (!this.socket || this.socket.readyState !== WS_OPEN) return;\n try {\n this.sendRaw('\\n');\n } catch {\n // transient heartbeat failures are non-fatal\n }\n }, delayMs);\n const timer = this.heartbeatTimer as { unref?: () => void };\n if (typeof timer.unref === 'function') timer.unref();\n }\n\n private finishConnect(connectionId: string): void {\n this.connectionId = connectionId || this.connectionId;\n if (this.currentState !== 'connected') {\n this.currentState = 'connected';\n if (this.connectTimer) {\n clearTimeout(this.connectTimer);\n this.connectTimer = null;\n }\n const resolve = this.connectResolve;\n this.connectResolve = null;\n this.connectReject = null;\n this.connectPromise = null;\n this.emit('connected', { connectionId: this.connectionId ?? '' });\n resolve?.();\n }\n if (this.connectionId) {\n void Promise.resolve(this.options.onConnected?.(this.connectionId)).catch((error) => {\n this.emit('error', error instanceof Error ? error : new Error(String(error)));\n });\n }\n }\n\n private async restart(): Promise<void> {\n if (!this.autoReconnect) {\n await this.disconnect();\n return;\n }\n try {\n this.socket?.close(1000, 'restart');\n } catch {\n // ignore\n }\n this.socket = null;\n this.teardownTimers();\n this.currentState = 'idle';\n this.heartbeatStarted = false;\n try {\n await this.connect();\n } catch (error) {\n this.emit('error', error instanceof Error ? error : new Error(String(error)));\n }\n }\n\n private teardownTimers(): void {\n if (this.heartbeatTimer) {\n clearInterval(this.heartbeatTimer);\n this.heartbeatTimer = null;\n }\n }\n\n private failConnect(error: Error): void {\n const reject = this.connectReject;\n this.connectResolve = null;\n this.connectReject = null;\n this.connectPromise = null;\n if (this.connectTimer) {\n clearTimeout(this.connectTimer);\n this.connectTimer = null;\n }\n this.teardownTimers();\n if (this.currentState !== 'closed') {\n this.currentState = 'closed';\n try {\n this.socket?.close(1000, 'connect failed');\n } catch {\n // ignore\n }\n }\n if (reject) {\n reject(error);\n } else {\n this.emit('error', error);\n }\n }\n\n private handleClose(code: number, reason: string): void {\n if (this.currentState === 'closed') return;\n const wasConnecting = Boolean(this.connectReject);\n this.teardownTimers();\n if (this.connectTimer) {\n clearTimeout(this.connectTimer);\n this.connectTimer = null;\n }\n this.currentState = 'closed';\n this.socket = null;\n this.connectionId = null;\n this.heartbeatStarted = false;\n\n if (wasConnecting) {\n this.failConnect(new ConfigurationError(`The connect stream closed before it was established (code ${code}).`, 'state'));\n return;\n }\n this.emit('disconnected', { code, reason });\n }\n}\n","import { ConfigurationError, ValidationError } from '../core/errors.js';\r\nimport { AccountManager, DeviceAuthManager } from './account.js';\r\nimport type { AuthManager, ExchangeCodeOptions, TokenRequestOptions } from './auth.js';\r\nimport {\r\n isCustomClientInput,\r\n resolveAuthClient,\r\n type AuthClient,\r\n type AuthClientInput,\r\n} from './clients.js';\r\nimport { EpicApiError } from './errors.js';\r\nimport {\r\n buildSignedMessage,\r\n decodeMessageBody,\r\n generateChatKeypair,\r\n CHAT_DEFAULT_PLATFORM,\r\n CHAT_MAX_MESSAGE_LENGTH,\r\n ChatService,\r\n type ChatKeypair,\r\n type ChatMessage,\r\n type ChatSendResult,\r\n type ConversationData,\r\n} from './chat.js';\r\nimport { ConnectClient, type ConnectClientOptions } from './connect.js';\r\nimport type {\r\n MCPClient,\r\n MCPOperation,\r\n MCPOperationOptions,\r\n MCPProfileId,\r\n MCPResponse,\r\n} from './mcp.js';\r\nimport {\r\n EosConnectManager,\r\n LockerService,\r\n type EasToken,\r\n type EosIdAccount,\r\n type EosProductUserMapping,\r\n type EosToken,\r\n type EosTokenOptions,\r\n type LockerItemsResponse,\r\n} from './eos.js';\r\nimport type {\r\n BlocklistEntry,\r\n FriendAddOptions,\r\n FriendEntry,\r\n FriendsManager,\r\n FriendsSummary,\r\n ResolvedFriendEntry,\r\n} from './friends.js';\r\nimport type {\r\n HabaneroBaseOptions,\r\n HabaneroManager,\r\n HabaneroProgress,\r\n HabaneroProgressOptions,\r\n HabaneroRankingTypeOptions,\r\n HabaneroTrack,\r\n HabaneroTracksOptions,\r\n RankingType,\r\n} from './habanero.js';\r\nimport { LiveClient, type LiveClientOptions } from './live.js';\r\nimport { Party, type PartyClient } from './party.js';\r\nimport { Shop, Gifting, type StorefrontCatalog, type ShopFetchOptions } from './shop.js';\r\nimport type {\r\n FortniteGameManager,\r\n BrInventory,\r\n Receipt,\r\n Timeline,\r\n VbucksBalance,\r\n CommonCoreProfile,\r\n MtxPlatform,\r\n} from './game.js';\r\nimport type { LightswitchManager, LightswitchStatus, LightswitchOptions } from './lightswitch.js';\r\nimport type { SocialBanManager, SocialBanStatus, SocialBanOptions } from './socialBan.js';\r\nimport type { PresenceManager, LastOnlineEntry, LastOnlineResponse, PresenceOptions } from './presence.js';\r\nimport { XmppClient } from './xmpp.js';\r\nimport type { FriendPresence, XmppClientOptions } from './xmpp.js';\r\nimport type {\r\n StatsProxyManager,\r\n Leaderboard,\r\n LeaderboardOptions,\r\n StatsQueryOptions,\r\n UserStats,\r\n UserStatsOptions,\r\n} from './stats.js';\r\nimport type {\r\n UserSearchManager,\r\n UserSearchOptions,\r\n UserSearchResult,\r\n ResolvedUserSearchResult,\r\n} from './userSearch.js';\r\nimport type {\r\n AvatarManager,\r\n AvatarEntry,\r\n AvatarOptions,\r\n AvatarResolveOptions,\r\n ResolvedAvatar,\r\n} from './avatar.js';\r\nimport type {\r\n CloudStorageManager,\r\n CloudStorageFile,\r\n CloudStorageOptions,\r\n CloudStorageWriteOptions,\r\n} from './cloudstorage.js';\r\nimport type {\r\n MatchmakingManager,\r\n MatchmakingOptions,\r\n MatchmakingSession,\r\n MatchmakingTicketOptions,\r\n MatchmakingBanResult,\r\n BanCheckResult,\r\n} from './matchmaking.js';\r\nimport type {\r\n PlaytimeManager,\r\n PlaytimeInfo,\r\n PlaytimeOptions,\r\n PlaytimeSegment,\r\n PlaytimeAddSecondsOptions,\r\n} from './playtime.js';\r\nimport type {\r\n EpicStatusManager,\r\n StatusOptions,\r\n StatusSummary,\r\n StatusComponent,\r\n StatusIncident,\r\n StatusMaintenance,\r\n} from './status.js';\r\nimport type {\r\n AccountMetadata,\r\n DeviceAuth,\r\n EpicAccount,\r\n ExchangeCode,\r\n ExternalAuth,\r\n ExternalAuthAccountMatch,\r\n ExternalDisplayNameLookup,\r\n ExternalIdLookup,\r\n KillType,\r\n OAuthToken,\r\n VerifyResponse,\r\n} from './types.js';\r\n\r\nexport interface EpicAuthSessionInit {\r\n auth: AuthManager;\r\n deviceAuths: DeviceAuthManager;\r\n accounts: AccountManager;\r\n mcp: MCPClient;\r\n party: PartyClient;\r\n eos: EosConnectManager;\r\n chat: ChatService;\r\n lockerService: LockerService;\r\n friends: FriendsManager;\r\n habanero: HabaneroManager;\r\n presence: PresenceManager;\r\n lightswitch: LightswitchManager;\r\n socialBan: SocialBanManager;\r\n stats: StatsProxyManager;\r\n game: FortniteGameManager;\r\n userSearch: UserSearchManager;\r\n avatar: AvatarManager;\r\n cloudStorage: CloudStorageManager;\r\n matchmaking: MatchmakingManager;\r\n playtime: PlaytimeManager;\r\n status: EpicStatusManager;\r\n client: AuthClient;\r\n token: OAuthToken;\r\n allowCustomClients?: boolean;\r\n}\r\n\r\nconst EOS_REFRESH_THRESHOLD_MS = 30_000;\r\n\r\nconst REFRESH_THRESHOLD_MS = 15_000;\r\n\r\nfunction isReportableMismatch(error: unknown): boolean {\r\n if (!(error instanceof EpicApiError)) return false;\r\n return (error.errorCode ?? '').includes('is_reportable');\r\n}\r\n\r\nexport class EpicAuthSession {\r\n private tokenValue: OAuthToken;\r\n private readonly auth: AuthManager;\r\n private readonly deviceAuths: DeviceAuthManager;\r\n private readonly accounts: AccountManager;\r\n private readonly mcpClient: MCPClient;\r\n private readonly partyClient: PartyClient;\r\n private readonly eos: EosConnectManager;\r\n private readonly chatService: ChatService;\r\n private readonly lockerService: LockerService;\r\n private readonly friendsManager: FriendsManager;\r\n private readonly habaneroManager: HabaneroManager;\r\n private readonly presenceManager: PresenceManager;\r\n private readonly lightswitchManager: LightswitchManager;\r\n private readonly socialBanManager: SocialBanManager;\r\n private readonly statsManager: StatsProxyManager;\r\n private readonly gameManager: FortniteGameManager;\r\n private readonly userSearchManager: UserSearchManager;\r\n private readonly avatarManager: AvatarManager;\r\n private readonly cloudStorageManager: CloudStorageManager;\r\n private readonly matchmakingManager: MatchmakingManager;\r\n private readonly playtimeManager: PlaytimeManager;\r\n private readonly statusManager: EpicStatusManager;\r\n private readonly allowCustomClients: boolean;\r\n private eosTokenValue: EosToken | null = null;\r\n private easTokenValue: EasToken | null = null;\r\n private userEasTokenValue: EasToken | null = null;\r\n private androidTokenValue: OAuthToken | null = null;\r\n private launcherTokenValue: OAuthToken | null = null;\r\n private xmppClient: XmppClient | null = null;\r\n private chatKeypair: ChatKeypair | null = null;\r\n private chatKeyJwt: string | null = null;\r\n private readonly conversationCache = new Map<string, ConversationData>();\r\n private connectClient: ConnectClient | null = null;\r\n private liveClientValue: LiveClient | null = null;\r\n private customStatusValue: string | null = null;\r\n public readonly client: AuthClient;\r\n\r\n constructor(init: EpicAuthSessionInit) {\r\n this.auth = init.auth;\r\n this.deviceAuths = init.deviceAuths;\r\n this.accounts = init.accounts;\r\n this.mcpClient = init.mcp;\r\n this.partyClient = init.party;\r\n this.eos = init.eos;\r\n this.chatService = init.chat;\r\n this.lockerService = init.lockerService;\r\n this.friendsManager = init.friends;\r\n this.habaneroManager = init.habanero;\r\n this.presenceManager = init.presence;\r\n this.lightswitchManager = init.lightswitch;\r\n this.socialBanManager = init.socialBan;\r\n this.statsManager = init.stats;\r\n this.gameManager = init.game;\r\n this.userSearchManager = init.userSearch;\r\n this.avatarManager = init.avatar;\r\n this.cloudStorageManager = init.cloudStorage;\r\n this.matchmakingManager = init.matchmaking;\r\n this.playtimeManager = init.playtime;\r\n this.statusManager = init.status;\r\n this.allowCustomClients = init.allowCustomClients ?? false;\r\n this.client = init.client;\r\n this.tokenValue = init.token;\r\n }\r\n\r\n get token(): OAuthToken {\r\n return this.tokenValue;\r\n }\r\n\r\n get accessToken(): string {\r\n return this.tokenValue.access_token;\r\n }\r\n\r\n get refreshTokenValue(): string | null {\r\n return this.tokenValue.refresh_token ?? null;\r\n }\r\n\r\n get accountId(): string | null {\r\n return this.tokenValue.account_id ?? null;\r\n }\r\n\r\n get displayName(): string | null {\r\n return this.tokenValue.displayName ?? null;\r\n }\r\n\r\n get expiresAt(): Date {\r\n return new Date(this.tokenValue.expires_at);\r\n }\r\n\r\n get expiresInMs(): number {\r\n return this.expiresAt.getTime() - Date.now();\r\n }\r\n\r\n get isExpired(): boolean {\r\n return this.expiresInMs <= 0;\r\n }\r\n\r\n get canRefresh(): boolean {\r\n return typeof this.tokenValue.refresh_token === 'string';\r\n }\r\n\r\n async refresh(options?: TokenRequestOptions): Promise<OAuthToken> {\r\n if (!this.tokenValue.refresh_token) {\r\n throw new ValidationError('This session has no refresh token to renew with', 'refreshToken');\r\n }\r\n this.tokenValue = await this.auth.refreshToken(\r\n this.client,\r\n this.tokenValue.refresh_token,\r\n options,\r\n );\r\n return this.tokenValue;\r\n }\r\n\r\n async ensureValid(options?: TokenRequestOptions): Promise<string> {\r\n if (this.expiresInMs <= REFRESH_THRESHOLD_MS && this.canRefresh) {\r\n await this.refresh(options);\r\n }\r\n return this.accessToken;\r\n }\r\n\r\n verify(options?: { includePerms?: boolean; signal?: AbortSignal }): Promise<VerifyResponse> {\r\n return this.auth.verify(this.accessToken, options);\r\n }\r\n\r\n createExchangeCode(options?: ExchangeCodeOptions): Promise<ExchangeCode> {\r\n return this.auth.createExchangeCode(this.accessToken, options);\r\n }\r\n\r\n async switchClient(\r\n toClient: AuthClientInput,\r\n options?: TokenRequestOptions & { codeChallenge?: string; codeChallengeMethod?: 'S256' | 'plain' },\r\n ): Promise<EpicAuthSession> {\r\n if (isCustomClientInput(toClient) && !this.allowCustomClients) {\r\n throw new ConfigurationError(\r\n 'Custom auth clients are disabled. Construct the EpicGamesClient with `allowCustomClients: true` ' +\r\n 'to switch to a custom { clientId, clientSecret }.',\r\n 'allowCustomClients',\r\n );\r\n }\r\n const target = resolveAuthClient(toClient);\r\n const exchange = await this.auth.createExchangeCode(this.accessToken, {\r\n consumingClientId: target.clientId,\r\n ...(options?.codeChallenge ? { codeChallenge: options.codeChallenge } : {}),\r\n ...(options?.codeChallengeMethod ? { codeChallengeMethod: options.codeChallengeMethod } : {}),\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n ...(options?.timeout !== undefined ? { timeout: options.timeout } : {}),\r\n });\r\n const token = await this.auth.exchangeCode(target, exchange.code, options);\r\n return new EpicAuthSession({\r\n auth: this.auth,\r\n deviceAuths: this.deviceAuths,\r\n accounts: this.accounts,\r\n mcp: this.mcpClient,\r\n party: this.partyClient,\r\n eos: this.eos,\r\n chat: this.chatService,\r\n lockerService: this.lockerService,\r\n friends: this.friendsManager,\r\n habanero: this.habaneroManager,\r\n presence: this.presenceManager,\r\n lightswitch: this.lightswitchManager,\r\n socialBan: this.socialBanManager,\r\n stats: this.statsManager,\r\n game: this.gameManager,\r\n userSearch: this.userSearchManager,\r\n avatar: this.avatarManager,\r\n cloudStorage: this.cloudStorageManager,\r\n matchmaking: this.matchmakingManager,\r\n playtime: this.playtimeManager,\r\n status: this.statusManager,\r\n client: target,\r\n token,\r\n allowCustomClients: this.allowCustomClients,\r\n });\r\n }\r\n\r\n async eosToken(options?: EosTokenOptions): Promise<EosToken> {\r\n if (this.eosTokenValue) {\r\n const expiresInMs = new Date(this.eosTokenValue.expires_at).getTime() - Date.now();\r\n if (expiresInMs > EOS_REFRESH_THRESHOLD_MS) return this.eosTokenValue;\r\n }\r\n const token = await this.ensureValid();\r\n this.eosTokenValue = await this.eos.token(this.client, token, options);\r\n return this.eosTokenValue;\r\n }\r\n\r\n async lockerItems(options?: EosTokenOptions): Promise<LockerItemsResponse> {\r\n const accountId = this.requireAccountId();\r\n const eos = await this.eosToken(options);\r\n return this.lockerService.items(eos.access_token, accountId, options);\r\n }\r\n\r\n async easToken(options?: EosTokenOptions): Promise<EasToken> {\r\n if (this.easTokenValue?.expires_at) {\r\n const expiresInMs = new Date(this.easTokenValue.expires_at).getTime() - Date.now();\r\n if (expiresInMs > EOS_REFRESH_THRESHOLD_MS) return this.easTokenValue;\r\n }\r\n this.easTokenValue = await this.eos.easToken(\r\n this.client,\r\n options?.signal ? { signal: options.signal } : {},\r\n );\r\n return this.easTokenValue;\r\n }\r\n\r\n async eosAccounts(accountIds: string[], options?: EosTokenOptions): Promise<EosIdAccount[]> {\r\n const eas = await this.easToken(options);\r\n return this.eos.queryAccounts(eas.access_token, accountIds, options);\r\n }\r\n\r\n async eosProductUsers(productUserIds: string[], options?: EosTokenOptions): Promise<EosProductUserMapping[]> {\r\n const eos = await this.eosToken(options);\r\n return this.eos.queryProductUsers(eos.access_token, productUserIds, options);\r\n }\r\n\r\n async getParty(): Promise<Party> {\r\n const accountId = this.requireAccountId();\r\n const token = await this.ensureValid();\r\n const parties = await this.partyClient.userParties(token, accountId);\r\n const current = parties.current?.[0];\r\n if (!current) {\r\n throw new ValidationError('You are not currently in a party', 'party');\r\n }\r\n return new Party(this.partyClient, () => this.ensureValid(), accountId, current);\r\n }\r\n\r\n async storefrontCatalog<T = StorefrontCatalog>(options?: ShopFetchOptions): Promise<T> {\r\n const token = await this.ensureValid();\r\n return this.mcpClient.storefrontCatalog<T>(token, options ?? {});\r\n }\r\n\r\n async shop(options?: ShopFetchOptions): Promise<Shop> {\r\n const raw = await this.storefrontCatalog<StorefrontCatalog>(options);\r\n return new Shop(this, raw);\r\n }\r\n\r\n gifting(): Gifting {\r\n return new Gifting(this);\r\n }\r\n\r\n private requireAccountId(): string {\r\n if (!this.tokenValue.account_id) {\r\n throw new ValidationError(\r\n 'This session is not bound to an account (client_credentials grant)',\r\n 'accountId',\r\n );\r\n }\r\n return this.tokenValue.account_id;\r\n }\r\n\r\n async mcpOperation<T = unknown>(\r\n operation: MCPOperation | (string & {}),\r\n options?: MCPOperationOptions,\r\n ): Promise<MCPResponse<T>> {\r\n const accountId = this.requireAccountId();\r\n const token = await this.ensureValid();\r\n return this.mcpClient.operation<T>(token, accountId, operation, options ?? {});\r\n }\r\n\r\n async queryProfile<T = unknown>(\r\n profileId: MCPProfileId | (string & {}) = 'common_core',\r\n options?: Omit<MCPOperationOptions, 'profileId'>,\r\n ): Promise<MCPResponse<T>> {\r\n const accountId = this.requireAccountId();\r\n const token = await this.ensureValid();\r\n return this.mcpClient.queryProfile<T>(token, accountId, profileId, options ?? {});\r\n }\r\n\r\n async queryPublicProfile<T = unknown>(\r\n accountId: string,\r\n profileId: MCPProfileId | (string & {}) = 'common_core',\r\n options?: Omit<MCPOperationOptions, 'profileId' | 'route'>,\r\n ): Promise<MCPResponse<T>> {\r\n const token = await this.ensureValid();\r\n return this.mcpClient.queryPublicProfile<T>(token, accountId, profileId, options ?? {});\r\n }\r\n\r\n me(options?: { signal?: AbortSignal }): Promise<EpicAccount> {\r\n return this.accounts.byId(this.accessToken, this.requireAccountId(), options);\r\n }\r\n\r\n account(accountId: string, options?: { signal?: AbortSignal }): Promise<EpicAccount> {\r\n return this.accounts.byId(this.accessToken, accountId, options);\r\n }\r\n\r\n accountsByIds(accountIds: string[], options?: { signal?: AbortSignal }): Promise<EpicAccount[]> {\r\n return this.accounts.byIds(this.accessToken, accountIds, options);\r\n }\r\n\r\n accountByDisplayName(displayName: string, options?: { signal?: AbortSignal }): Promise<EpicAccount> {\r\n return this.accounts.byDisplayName(this.accessToken, displayName, options);\r\n }\r\n\r\n externalAuths(accountId?: string, options?: { signal?: AbortSignal }): Promise<ExternalAuth[]> {\r\n return this.accounts.externalAuths(this.accessToken, accountId ?? this.requireAccountId(), options);\r\n }\r\n\r\n externalAuth(\r\n externalAuthType: string,\r\n accountId?: string,\r\n options?: { signal?: AbortSignal },\r\n ): Promise<ExternalAuth> {\r\n return this.accounts.externalAuth(\r\n this.accessToken,\r\n accountId ?? this.requireAccountId(),\r\n externalAuthType,\r\n options,\r\n );\r\n }\r\n\r\n accountByExternalDisplayName(\r\n externalAuthType: string,\r\n displayName: string,\r\n options?: { caseInsensitive?: boolean; signal?: AbortSignal },\r\n ): Promise<ExternalAuthAccountMatch[]> {\r\n return this.accounts.byExternalDisplayName(this.accessToken, externalAuthType, displayName, options);\r\n }\r\n\r\n accountsByExternalDisplayNames(\r\n authType: string,\r\n displayNames: string[],\r\n options?: { signal?: AbortSignal },\r\n ): Promise<ExternalDisplayNameLookup> {\r\n return this.accounts.byExternalDisplayNames(this.accessToken, authType, displayNames, options);\r\n }\r\n\r\n accountsByExternalIds(\r\n authType: string,\r\n ids: string[],\r\n options?: { signal?: AbortSignal },\r\n ): Promise<ExternalIdLookup> {\r\n return this.accounts.byExternalIds(this.accessToken, authType, ids, options);\r\n }\r\n\r\n accountMetadata(accountId?: string, options?: { signal?: AbortSignal }): Promise<AccountMetadata> {\r\n return this.accounts.metadata(this.accessToken, accountId ?? this.requireAccountId(), options);\r\n }\r\n\r\n async lastOnline(accountId?: string, options?: PresenceOptions): Promise<LastOnlineResponse> {\r\n const token = await this.ensureValid();\r\n return this.presenceManager.lastOnline(token, accountId ?? this.requireAccountId(), options);\r\n }\r\n\r\n async lastOnlineFor(accountId?: string, options?: PresenceOptions): Promise<LastOnlineEntry | null> {\r\n const token = await this.ensureValid();\r\n return this.presenceManager.lastOnlineFor(token, accountId ?? this.requireAccountId(), options);\r\n }\r\n\r\n async serviceStatus(serviceId?: string, options?: LightswitchOptions): Promise<LightswitchStatus> {\r\n const token = await this.ensureValid();\r\n return this.lightswitchManager.status(token, serviceId, options);\r\n }\r\n\r\n async serviceStatusBulk(serviceIds: string[], options?: LightswitchOptions): Promise<LightswitchStatus[]> {\r\n const token = await this.ensureValid();\r\n return this.lightswitchManager.statusBulk(token, serviceIds, options);\r\n }\r\n\r\n async socialBan(accountId?: string, options?: SocialBanOptions): Promise<SocialBanStatus> {\r\n const token = await this.ensureValid();\r\n return this.socialBanManager.status(token, accountId ?? this.requireAccountId(), options);\r\n }\r\n\r\n async userStats(accountId?: string, options?: UserStatsOptions): Promise<UserStats | null> {\r\n const token = await this.ensureValid();\r\n return this.statsManager.userStats(token, accountId ?? this.requireAccountId(), options);\r\n }\r\n\r\n async userStatsBulk(accountIds: string[], options?: StatsQueryOptions): Promise<UserStats[]> {\r\n const token = await this.ensureValid();\r\n return this.statsManager.userStatsBulk(token, accountIds, options);\r\n }\r\n\r\n async leaderboard(leaderboardName: string, options?: LeaderboardOptions): Promise<Leaderboard> {\r\n const token = await this.ensureValid();\r\n return this.statsManager.leaderboard(token, leaderboardName, options);\r\n }\r\n\r\n async timeline(options?: { signal?: AbortSignal }): Promise<Timeline> {\r\n const token = await this.ensureValid();\r\n return this.gameManager.timeline(token, options);\r\n }\r\n\r\n async brInventory(accountId?: string, options?: { signal?: AbortSignal }): Promise<BrInventory> {\r\n const token = await this.ensureValid();\r\n return this.gameManager.brInventory(token, accountId ?? this.requireAccountId(), options);\r\n }\r\n\r\n async vbucks(options?: { signal?: AbortSignal }): Promise<number> {\r\n const token = await this.ensureValid();\r\n return this.gameManager.vbucks(token, this.requireAccountId(), options);\r\n }\r\n\r\n async vbucksBalance(options?: { signal?: AbortSignal }): Promise<VbucksBalance> {\r\n const token = await this.ensureValid();\r\n return this.gameManager.vbucksBalance(token, this.requireAccountId(), options);\r\n }\r\n\r\n async mtxPlatform(options?: { signal?: AbortSignal }): Promise<string> {\r\n const token = await this.ensureValid();\r\n return this.gameManager.mtxPlatform(token, this.requireAccountId(), options);\r\n }\r\n\r\n async setMtxPlatform(\r\n platform: MtxPlatform | (string & {}),\r\n options?: { signal?: AbortSignal },\r\n ): Promise<CommonCoreProfile | null> {\r\n const token = await this.ensureValid();\r\n return this.gameManager.setMtxPlatform(token, this.requireAccountId(), platform, options);\r\n }\r\n\r\n async commonCore(options?: { signal?: AbortSignal }): Promise<CommonCoreProfile> {\r\n const token = await this.ensureValid();\r\n return this.gameManager.commonCore(token, this.requireAccountId(), options);\r\n }\r\n\r\n async receipts(accountId?: string, options?: { signal?: AbortSignal }): Promise<Receipt[]> {\r\n const token = await this.ensureValid();\r\n return this.gameManager.receipts(token, accountId ?? this.requireAccountId(), options);\r\n }\r\n\r\n async searchUsers(prefix: string, options?: UserSearchOptions): Promise<UserSearchResult[]> {\r\n const token = await this.ensureValid();\r\n return this.userSearchManager.search(token, this.requireAccountId(), prefix, options);\r\n }\r\n\r\n async searchUsersResolved(\r\n prefix: string,\r\n options?: UserSearchOptions,\r\n ): Promise<ResolvedUserSearchResult[]> {\r\n const token = await this.ensureValid();\r\n return this.userSearchManager.searchResolved(token, this.requireAccountId(), prefix, options);\r\n }\r\n\r\n friendsSummary(options?: { signal?: AbortSignal }): Promise<FriendsSummary> {\r\n return this.friendsManager.summary(this.accessToken, this.requireAccountId(), options);\r\n }\r\n\r\n friendsList(options?: { signal?: AbortSignal }): Promise<FriendEntry[]> {\r\n return this.friendsManager.list(this.accessToken, this.requireAccountId(), options);\r\n }\r\n\r\n friendsListResolved(options?: { signal?: AbortSignal }): Promise<ResolvedFriendEntry[]> {\r\n return this.friendsManager.listResolved(this.accessToken, this.requireAccountId(), options);\r\n }\r\n\r\n resolveFriends(entries: FriendEntry[], options?: { signal?: AbortSignal }): Promise<ResolvedFriendEntry[]> {\r\n return this.friendsManager.resolveEntries(this.accessToken, entries, options);\r\n }\r\n\r\n resolveAccounts(accountIds: string[], options?: { signal?: AbortSignal }): Promise<Map<string, EpicAccount>> {\r\n return this.accounts.resolveAccounts(this.accessToken, accountIds, options);\r\n }\r\n\r\n resolveAccountNames(accountIds: string[], options?: { signal?: AbortSignal }): Promise<Map<string, string>> {\r\n return this.accounts.resolveNames(this.accessToken, accountIds, options);\r\n }\r\n\r\n incomingFriendRequests(options?: { signal?: AbortSignal }): Promise<FriendEntry[]> {\r\n return this.friendsManager.incoming(this.accessToken, this.requireAccountId(), options);\r\n }\r\n\r\n outgoingFriendRequests(options?: { signal?: AbortSignal }): Promise<FriendEntry[]> {\r\n return this.friendsManager.outgoing(this.accessToken, this.requireAccountId(), options);\r\n }\r\n\r\n suggestedFriends(options?: { signal?: AbortSignal }): Promise<FriendEntry[]> {\r\n return this.friendsManager.suggested(this.accessToken, this.requireAccountId(), options);\r\n }\r\n\r\n acceptFriendRequests(targetIds: string[], options?: { signal?: AbortSignal }): Promise<string[]> {\r\n return this.friendsManager.acceptBulk(this.accessToken, this.requireAccountId(), targetIds, options);\r\n }\r\n\r\n clearFriends(options?: { signal?: AbortSignal }): Promise<void> {\r\n return this.friendsManager.clearAll(this.accessToken, this.requireAccountId(), options);\r\n }\r\n\r\n friend(friendId: string, options?: { signal?: AbortSignal }): Promise<FriendEntry> {\r\n return this.friendsManager.get(this.accessToken, this.requireAccountId(), friendId, options);\r\n }\r\n\r\n addFriend(friendId: string, options?: FriendAddOptions): Promise<void> {\r\n return this.friendsManager.add(this.accessToken, this.requireAccountId(), friendId, options);\r\n }\r\n\r\n removeFriend(friendId: string, options?: { signal?: AbortSignal }): Promise<void> {\r\n return this.friendsManager.remove(this.accessToken, this.requireAccountId(), friendId, options);\r\n }\r\n\r\n mutualFriends(friendId: string, options?: { signal?: AbortSignal }): Promise<string[]> {\r\n return this.friendsManager.mutual(this.accessToken, this.requireAccountId(), friendId, options);\r\n }\r\n\r\n setFriendNickname(friendId: string, nickname: string, options?: { signal?: AbortSignal }): Promise<void> {\r\n return this.friendsManager.setNickname(this.accessToken, this.requireAccountId(), friendId, nickname, options);\r\n }\r\n\r\n removeFriendNickname(friendId: string, options?: { signal?: AbortSignal }): Promise<void> {\r\n return this.friendsManager.removeNickname(this.accessToken, this.requireAccountId(), friendId, options);\r\n }\r\n\r\n setFriendNote(friendId: string, note: string, options?: { signal?: AbortSignal }): Promise<void> {\r\n return this.friendsManager.setNote(this.accessToken, this.requireAccountId(), friendId, note, options);\r\n }\r\n\r\n removeFriendNote(friendId: string, options?: { signal?: AbortSignal }): Promise<void> {\r\n return this.friendsManager.removeNote(this.accessToken, this.requireAccountId(), friendId, options);\r\n }\r\n\r\n blocklist(options?: { signal?: AbortSignal }): Promise<BlocklistEntry[]> {\r\n return this.friendsManager.blocklist(this.accessToken, this.requireAccountId(), options);\r\n }\r\n\r\n blockAccount(userId: string, options?: { signal?: AbortSignal }): Promise<void> {\r\n return this.friendsManager.block(this.accessToken, this.requireAccountId(), userId, options);\r\n }\r\n\r\n unblockAccount(userId: string, options?: { signal?: AbortSignal }): Promise<void> {\r\n return this.friendsManager.unblock(this.accessToken, this.requireAccountId(), userId, options);\r\n }\r\n\r\n rankedTracks(options?: HabaneroTracksOptions): Promise<HabaneroTrack[]> {\r\n return this.habaneroManager.tracks(this.accessToken, options);\r\n }\r\n\r\n rankedTrack(trackguid: string, options?: HabaneroBaseOptions): Promise<HabaneroTrack> {\r\n return this.habaneroManager.trackByGuid(this.accessToken, trackguid, options);\r\n }\r\n\r\n rankedActiveTracks(startDate: string, options?: HabaneroBaseOptions): Promise<HabaneroTrack[]> {\r\n return this.habaneroManager.activeTracks(this.accessToken, startDate, options);\r\n }\r\n\r\n rankedProgress(\r\n trackguid: string,\r\n accountId?: string,\r\n options?: HabaneroBaseOptions,\r\n ): Promise<HabaneroProgress> {\r\n return this.habaneroManager.progress(\r\n this.accessToken,\r\n accountId ?? this.requireAccountId(),\r\n trackguid,\r\n options,\r\n );\r\n }\r\n\r\n rankedProgressAll(accountId?: string, options?: HabaneroProgressOptions): Promise<HabaneroProgress[]> {\r\n return this.habaneroManager.allProgress(this.accessToken, accountId ?? this.requireAccountId(), options);\r\n }\r\n\r\n rankedProgressBulk(\r\n trackguid: string,\r\n accountIds: string[],\r\n options?: HabaneroBaseOptions,\r\n ): Promise<HabaneroProgress[]> {\r\n return this.habaneroManager.bulkProgress(this.accessToken, trackguid, accountIds, options);\r\n }\r\n\r\n rankedProgressBulkByType(\r\n rankingType: RankingType | (string & {}),\r\n accountIds: string[],\r\n options?: HabaneroRankingTypeOptions,\r\n ): Promise<HabaneroProgress[]> {\r\n return this.habaneroManager.bulkProgressByRankingType(\r\n this.accessToken,\r\n rankingType,\r\n accountIds,\r\n options,\r\n );\r\n }\r\n\r\n listDeviceAuths(options?: { signal?: AbortSignal }): Promise<DeviceAuth[]> {\r\n return this.deviceAuths.list(this.accessToken, this.requireAccountId(), options);\r\n }\r\n\r\n createDeviceAuth(options?: { signal?: AbortSignal }): Promise<DeviceAuth> {\r\n return this.deviceAuths.create(this.accessToken, this.requireAccountId(), options);\r\n }\r\n\r\n getDeviceAuth(deviceId: string, options?: { signal?: AbortSignal }): Promise<DeviceAuth> {\r\n return this.deviceAuths.get(this.accessToken, this.requireAccountId(), deviceId, options);\r\n }\r\n\r\n deleteDeviceAuth(deviceId: string, options?: { signal?: AbortSignal }): Promise<void> {\r\n return this.deviceAuths.delete(this.accessToken, this.requireAccountId(), deviceId, options);\r\n }\r\n\r\n killOtherSessions(options?: { signal?: AbortSignal }): Promise<void> {\r\n return this.auth.killSessions(this.accessToken, 'OTHERS_ACCOUNT_CLIENT_SERVICE', options);\r\n }\r\n\r\n killSessions(killType: KillType, options?: { signal?: AbortSignal }): Promise<void> {\r\n return this.auth.killSessions(this.accessToken, killType, options);\r\n }\r\n\r\n private async launcherToken(options?: TokenRequestOptions): Promise<string> {\r\n if (this.launcherTokenValue) {\r\n const expiresInMs = new Date(this.launcherTokenValue.expires_at).getTime() - Date.now();\r\n if (expiresInMs > REFRESH_THRESHOLD_MS) return this.launcherTokenValue.access_token;\r\n if (this.launcherTokenValue.refresh_token) {\r\n this.launcherTokenValue = await this.auth.refreshToken(\r\n resolveAuthClient('launcherApp'),\r\n this.launcherTokenValue.refresh_token,\r\n options,\r\n );\r\n return this.launcherTokenValue.access_token;\r\n }\r\n }\r\n const target = resolveAuthClient('launcherApp');\r\n const accessToken = await this.ensureValid();\r\n const exchange = await this.auth.createExchangeCode(accessToken, {\r\n consumingClientId: target.clientId,\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n ...(options?.timeout !== undefined ? { timeout: options.timeout } : {}),\r\n });\r\n this.launcherTokenValue = await this.auth.exchangeCode(target, exchange.code, options);\r\n return this.launcherTokenValue.access_token;\r\n }\r\n\r\n async playtime(artifactId?: string, options?: PlaytimeOptions): Promise<PlaytimeInfo> {\r\n const token = await this.launcherToken();\r\n return this.playtimeManager.get(token, this.requireAccountId(), artifactId, options);\r\n }\r\n\r\n async playtimeAll(options?: PlaytimeOptions): Promise<PlaytimeInfo[]> {\r\n const token = await this.launcherToken();\r\n return this.playtimeManager.getAll(token, this.requireAccountId(), options);\r\n }\r\n\r\n async addPlaytime(segment: PlaytimeSegment, options?: PlaytimeOptions): Promise<void> {\r\n const token = await this.launcherToken();\r\n return this.playtimeManager.add(token, this.requireAccountId(), segment, options);\r\n }\r\n\r\n async addPlaytimeSeconds(seconds: number, options?: PlaytimeAddSecondsOptions): Promise<void> {\r\n const token = await this.launcherToken();\r\n return this.playtimeManager.addSeconds(token, this.requireAccountId(), seconds, options);\r\n }\r\n\r\n async avatars(accountIds: readonly string[], options?: AvatarOptions): Promise<AvatarEntry[]> {\r\n const token = await this.ensureValid();\r\n return this.avatarManager.get(token, accountIds, options);\r\n }\r\n\r\n async avatar(accountId?: string, options?: AvatarOptions): Promise<AvatarEntry | null> {\r\n const token = await this.ensureValid();\r\n return this.avatarManager.getFor(token, accountId ?? this.requireAccountId(), options);\r\n }\r\n\r\n async resolveAvatars(\r\n accountIds: readonly string[],\r\n options?: AvatarResolveOptions,\r\n ): Promise<ResolvedAvatar[]> {\r\n const token = await this.ensureValid();\r\n return this.avatarManager.resolve(token, accountIds, options);\r\n }\r\n\r\n async resolveAvatar(\r\n accountId?: string,\r\n options?: AvatarResolveOptions,\r\n ): Promise<ResolvedAvatar | null> {\r\n const token = await this.ensureValid();\r\n return this.avatarManager.resolveFor(token, accountId ?? this.requireAccountId(), options);\r\n }\r\n\r\n async cloudStorageFiles(options?: CloudStorageOptions): Promise<CloudStorageFile[]> {\r\n const token = await this.ensureValid();\r\n return this.cloudStorageManager.listUser(token, this.requireAccountId(), options);\r\n }\r\n\r\n async readCloudStorage(filename: string, options?: CloudStorageOptions): Promise<Uint8Array> {\r\n const token = await this.ensureValid();\r\n return this.cloudStorageManager.readUser(token, this.requireAccountId(), filename, options);\r\n }\r\n\r\n async readCloudStorageText(filename: string, options?: CloudStorageOptions): Promise<string> {\r\n const token = await this.ensureValid();\r\n return this.cloudStorageManager.readUserText(token, this.requireAccountId(), filename, options);\r\n }\r\n\r\n async writeCloudStorage(\r\n filename: string,\r\n data: string | Uint8Array,\r\n options?: CloudStorageWriteOptions,\r\n ): Promise<void> {\r\n const token = await this.ensureValid();\r\n return this.cloudStorageManager.writeUser(token, this.requireAccountId(), filename, data, options);\r\n }\r\n\r\n async deleteCloudStorage(filename: string, options?: CloudStorageOptions): Promise<void> {\r\n const token = await this.ensureValid();\r\n return this.cloudStorageManager.deleteUser(token, this.requireAccountId(), filename, options);\r\n }\r\n\r\n async systemCloudStorageFiles(options?: CloudStorageOptions): Promise<CloudStorageFile[]> {\r\n const token = await this.ensureValid();\r\n return this.cloudStorageManager.listSystem(token, options);\r\n }\r\n\r\n async readSystemCloudStorage(filename: string, options?: CloudStorageOptions): Promise<Uint8Array> {\r\n const token = await this.ensureValid();\r\n return this.cloudStorageManager.readSystem(token, filename, options);\r\n }\r\n\r\n async readSystemCloudStorageText(filename: string, options?: CloudStorageOptions): Promise<string> {\r\n const token = await this.ensureValid();\r\n return this.cloudStorageManager.readSystemText(token, filename, options);\r\n }\r\n\r\n async matchmakingNetCL(options?: MatchmakingOptions): Promise<string> {\r\n const token = await this.ensureValid();\r\n return this.matchmakingManager.netCL(token, options);\r\n }\r\n\r\n async matchmakingBan(options?: MatchmakingTicketOptions): Promise<MatchmakingBanResult> {\r\n const token = await this.ensureValid();\r\n return this.matchmakingManager.ticketBan(token, this.requireAccountId(), options);\r\n }\r\n\r\n async sessionInfo(options?: MatchmakingOptions): Promise<MatchmakingSession[]> {\r\n const token = await this.ensureValid();\r\n return this.matchmakingManager.sessionInfo(token, this.requireAccountId(), options);\r\n }\r\n\r\n async checkBan(options?: MatchmakingTicketOptions): Promise<BanCheckResult> {\r\n const token = await this.ensureValid();\r\n const accountId = this.requireAccountId();\r\n const signalOptions = options?.signal ? { signal: options.signal } : undefined;\r\n const [lightswitch, matchmaking, socialBan] = await Promise.all([\r\n this.lightswitchManager.status(token, undefined, signalOptions),\r\n this.matchmakingManager.ticketBan(token, accountId, options),\r\n this.socialBanManager.status(token, accountId, signalOptions),\r\n ]);\r\n const permanent = lightswitch.banned === true;\r\n const temporary = matchmaking.banned;\r\n const social = socialBan.active;\r\n return {\r\n banned: permanent || temporary || social,\r\n permanent,\r\n temporary,\r\n social,\r\n banDaysRemaining: matchmaking.banDaysRemaining,\r\n matchmaking,\r\n socialBan,\r\n };\r\n }\r\n\r\n statusSummary(options?: StatusOptions): Promise<StatusSummary> {\r\n return this.statusManager.summary(options);\r\n }\r\n\r\n statusComponents(options?: StatusOptions): Promise<StatusComponent[]> {\r\n return this.statusManager.components(options);\r\n }\r\n\r\n statusIncidents(options?: StatusOptions): Promise<StatusIncident[]> {\r\n return this.statusManager.unresolvedIncidents(options);\r\n }\r\n\r\n statusMaintenances(options?: StatusOptions): Promise<StatusMaintenance[]> {\r\n return this.statusManager.activeMaintenances(options);\r\n }\r\n\r\n private async androidToken(options?: TokenRequestOptions): Promise<OAuthToken> {\r\n if (this.androidTokenValue) {\r\n const expiresInMs = new Date(this.androidTokenValue.expires_at).getTime() - Date.now();\r\n if (expiresInMs > REFRESH_THRESHOLD_MS) return this.androidTokenValue;\r\n if (this.androidTokenValue.refresh_token) {\r\n try {\r\n this.androidTokenValue = await this.auth.refreshToken(\r\n resolveAuthClient('fortniteAndroid'),\r\n this.androidTokenValue.refresh_token,\r\n options,\r\n );\r\n return this.androidTokenValue;\r\n } catch {\r\n this.androidTokenValue = null;\r\n }\r\n }\r\n }\r\n const target = resolveAuthClient('fortniteAndroid');\r\n const accessToken = await this.ensureValid();\r\n const exchange = await this.auth.createExchangeCode(accessToken, {\r\n consumingClientId: target.clientId,\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n ...(options?.timeout !== undefined ? { timeout: options.timeout } : {}),\r\n });\r\n this.androidTokenValue = await this.auth.exchangeCode(target, exchange.code, options);\r\n return this.androidTokenValue;\r\n }\r\n\r\n private async userEasToken(options?: { signal?: AbortSignal }): Promise<EasToken> {\r\n if (this.userEasTokenValue?.expires_at) {\r\n const expiresInMs = new Date(this.userEasTokenValue.expires_at).getTime() - Date.now();\r\n if (expiresInMs > EOS_REFRESH_THRESHOLD_MS) return this.userEasTokenValue;\r\n }\r\n const android = resolveAuthClient('fortniteAndroid');\r\n const signalOptions = options?.signal ? { signal: options.signal } : {};\r\n if (this.userEasTokenValue?.refresh_token) {\r\n try {\r\n this.userEasTokenValue = await this.eos.easRefreshGrant(\r\n android,\r\n this.userEasTokenValue.refresh_token,\r\n signalOptions,\r\n );\r\n return this.userEasTokenValue;\r\n } catch {\r\n this.userEasTokenValue = null;\r\n }\r\n }\r\n const androidToken = await this.androidToken();\r\n if (!androidToken.refresh_token) {\r\n throw new ConfigurationError(\r\n 'The Android auth token did not include a refresh token to mint an EAS user token with.',\r\n 'chat',\r\n );\r\n }\r\n this.userEasTokenValue = await this.eos.easRefreshGrant(android, androidToken.refresh_token, signalOptions);\r\n return this.userEasTokenValue;\r\n }\r\n\r\n private async ensureChatKey(): Promise<{ keypair: ChatKeypair; jwt: string }> {\r\n if (this.chatKeypair && this.chatKeyJwt) {\r\n return { keypair: this.chatKeypair, jwt: this.chatKeyJwt };\r\n }\r\n const keypair = this.chatKeypair ?? (await generateChatKeypair());\r\n this.chatKeypair = keypair;\r\n const gameToken = await this.ensureValid();\r\n const registered = await this.chatService.registerPublicKey(gameToken, keypair.publicKeyB64);\r\n const jwt = typeof registered.jwt === 'string' ? registered.jwt : null;\r\n if (!jwt) {\r\n throw new ConfigurationError('The public key registration did not return a signing JWT.', 'chat');\r\n }\r\n this.chatKeyJwt = jwt;\r\n return { keypair, jwt };\r\n }\r\n\r\n private async conversation(targetAccountId: string): Promise<ConversationData> {\r\n const cached = this.conversationCache.get(targetAccountId);\r\n if (cached) return cached;\r\n const me = this.requireAccountId();\r\n const eas = await this.userEasToken();\r\n const conversation = await this.chatService.getConversation(eas.access_token, me, targetAccountId);\r\n this.conversationCache.set(targetAccountId, conversation);\r\n return conversation;\r\n }\r\n\r\n async sendDM(targetAccountId: string, content: string): Promise<ChatSendResult> {\r\n if (typeof targetAccountId !== 'string' || targetAccountId.trim().length === 0) {\r\n throw new ValidationError('sendDM requires a target accountId.', 'targetAccountId');\r\n }\r\n if (typeof content !== 'string' || content.length === 0) {\r\n throw new ValidationError('sendDM requires a non-empty message.', 'content');\r\n }\r\n if (content.length >= CHAT_MAX_MESSAGE_LENGTH) {\r\n throw new ValidationError(\r\n `A chat message must be shorter than ${CHAT_MAX_MESSAGE_LENGTH} characters.`,\r\n 'content',\r\n );\r\n }\r\n const me = this.requireAccountId();\r\n const { keypair, jwt } = await this.ensureChatKey();\r\n const conversation = await this.conversation(targetAccountId);\r\n const eas = await this.userEasToken();\r\n const signed = await buildSignedMessage(keypair, {\r\n accountId: me,\r\n conversationId: conversation.conversationId,\r\n content,\r\n type: 'Persistent',\r\n sequence: 0,\r\n });\r\n const metadata = {\r\n TmV: '2',\r\n Pub: jwt,\r\n Sig: signed.sig,\r\n PlfNm: CHAT_DEFAULT_PLATFORM,\r\n PlfId: me,\r\n };\r\n const payload: Record<string, unknown> = {\r\n allowedRecipients: [targetAccountId, me],\r\n message: { body: signed.body },\r\n isReportable: conversation.isReportable,\r\n metadata,\r\n };\r\n try {\r\n return await this.chatService.postDMMessage(eas.access_token, me, conversation.conversationId, payload);\r\n } catch (error) {\r\n if (isReportableMismatch(error)) {\r\n const retry: Record<string, unknown> = {\r\n allowedRecipients: [targetAccountId, me],\r\n message: { body: signed.body },\r\n metadata,\r\n };\r\n return this.chatService.postDMMessage(eas.access_token, me, conversation.conversationId, retry);\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n async sendPartyMessage(content: string): Promise<ChatSendResult> {\r\n if (typeof content !== 'string' || content.length === 0) {\r\n throw new ValidationError('sendPartyMessage requires a non-empty message.', 'content');\r\n }\r\n if (content.length >= CHAT_MAX_MESSAGE_LENGTH) {\r\n throw new ValidationError(\r\n `A chat message must be shorter than ${CHAT_MAX_MESSAGE_LENGTH} characters.`,\r\n 'content',\r\n );\r\n }\r\n const me = this.requireAccountId();\r\n const party = await this.getParty();\r\n const recipients = party.members\r\n .map((member) => member.accountId)\r\n .filter((accountId) => accountId !== me);\r\n if (recipients.length === 0) {\r\n throw new ValidationError('There is no one else in your party to message.', 'party');\r\n }\r\n const { keypair, jwt } = await this.ensureChatKey();\r\n const eas = await this.userEasToken();\r\n const signed = await buildSignedMessage(keypair, {\r\n accountId: me,\r\n conversationId: party.id,\r\n content,\r\n type: 'Party',\r\n });\r\n const payload: Record<string, unknown> = {\r\n allowedRecipients: recipients,\r\n message: { body: signed.body },\r\n isReportable: false,\r\n metadata: {\r\n TmV: '2',\r\n NPM: '1',\r\n Pub: jwt,\r\n Sig: signed.sig,\r\n PlfNm: CHAT_DEFAULT_PLATFORM,\r\n PlfId: me,\r\n },\r\n };\r\n return this.chatService.postPartyMessage(eas.access_token, me, party.id, payload);\r\n }\r\n\r\n async chatHistory(\r\n targetAccountId: string,\r\n options?: { limit?: number; signal?: AbortSignal },\r\n ): Promise<ChatMessage[]> {\r\n const me = this.requireAccountId();\r\n const conversation = await this.conversation(targetAccountId);\r\n const eas = await this.userEasToken();\r\n const messages = await this.chatService.previousMessages(\r\n eas.access_token,\r\n me,\r\n conversation.conversationId,\r\n options,\r\n );\r\n return messages.map((message) =>\r\n typeof message.body === 'string' ? { ...message, body: decodeMessageBody(message.body) } : message,\r\n );\r\n }\r\n\r\n get events(): ConnectClient | null {\r\n return this.connectClient;\r\n }\r\n\r\n async connectEvents(\r\n options?: Partial<Omit<ConnectClientOptions, 'accountId' | 'getAccessToken'>>,\r\n ): Promise<ConnectClient> {\r\n const accountId = this.requireAccountId();\r\n if (this.connectClient && this.connectClient.connected) {\r\n return this.connectClient;\r\n }\r\n if (!this.connectClient) {\r\n this.connectClient = new ConnectClient({\r\n ...options,\r\n accountId,\r\n getAccessToken: async () => (await this.userEasToken()).access_token,\r\n onConnected: async (connectionId) => {\r\n const eas = await this.userEasToken();\r\n await this.chatService.sendPresence(eas.access_token, accountId, connectionId, {\r\n ...(this.customStatusValue !== null ? { activity: this.customStatusValue } : {}),\r\n });\r\n },\r\n });\r\n }\r\n await this.connectClient.connect();\r\n return this.connectClient;\r\n }\r\n\r\n async disconnectEvents(): Promise<void> {\r\n if (!this.connectClient) return;\r\n await this.connectClient.disconnect();\r\n this.connectClient = null;\r\n }\r\n\r\n async setCustomStatus(\r\n status: string,\r\n options?: { onlineType?: string; signal?: AbortSignal },\r\n ): Promise<void> {\r\n if (typeof status !== 'string' || status.trim().length === 0) {\r\n throw new ValidationError('\"status\" is required and must be a non-empty string', 'status');\r\n }\r\n const accountId = this.requireAccountId();\r\n this.customStatusValue = status;\r\n await this.connectEvents();\r\n const connectionId = this.connectClient?.connection;\r\n if (!connectionId) {\r\n throw new ConfigurationError('The connect session did not provide a connection id for presence.', 'connect');\r\n }\r\n const eas = await this.userEasToken(options?.signal ? { signal: options.signal } : {});\r\n await this.chatService.sendPresence(eas.access_token, accountId, connectionId, {\r\n activity: status,\r\n ...(options?.onlineType ? { onlineType: options.onlineType } : {}),\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n });\r\n }\r\n\r\n async clearCustomStatus(options?: { signal?: AbortSignal }): Promise<void> {\r\n this.customStatusValue = null;\r\n const connectionId = this.connectClient?.connection;\r\n if (!connectionId) return;\r\n const accountId = this.requireAccountId();\r\n const eas = await this.userEasToken(options?.signal ? { signal: options.signal } : {});\r\n await this.chatService.sendPresence(eas.access_token, accountId, connectionId, {\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n });\r\n }\r\n\r\n get xmpp(): XmppClient | null {\r\n return this.xmppClient;\r\n }\r\n\r\n async connectXmpp(\r\n options?: Partial<Omit<XmppClientOptions, 'accountId' | 'getAccessToken'>>,\r\n ): Promise<XmppClient> {\r\n const accountId = this.requireAccountId();\r\n if (this.xmppClient && this.xmppClient.connected) {\r\n return this.xmppClient;\r\n }\r\n if (!this.xmppClient) {\r\n this.xmppClient = new XmppClient({\r\n accountId,\r\n getAccessToken: () => this.ensureValid(),\r\n ...options,\r\n });\r\n }\r\n await this.xmppClient.connect();\r\n return this.xmppClient;\r\n }\r\n\r\n async disconnectXmpp(): Promise<void> {\r\n if (!this.xmppClient) return;\r\n await this.xmppClient.disconnect();\r\n this.xmppClient = null;\r\n }\r\n\r\n async friendPresences(): Promise<FriendPresence[]> {\r\n const client = await this.connectXmpp();\r\n return [...client.presences.values()];\r\n }\r\n\r\n get liveClient(): LiveClient | null {\r\n return this.liveClientValue;\r\n }\r\n\r\n async live(options?: LiveClientOptions): Promise<LiveClient> {\r\n if (this.liveClientValue) return this.liveClientValue;\r\n const client = new LiveClient(this, this.partyClient, options ?? {});\r\n await client.start();\r\n this.liveClientValue = client;\r\n return client;\r\n }\r\n\r\n async disconnectLive(): Promise<void> {\r\n if (!this.liveClientValue) return;\r\n this.liveClientValue.removeAllListeners();\r\n this.liveClientValue = null;\r\n await this.disconnectXmpp();\r\n await this.disconnectEvents();\r\n }\r\n\r\n async logout(options?: { signal?: AbortSignal }): Promise<void> {\r\n this.liveClientValue?.removeAllListeners();\r\n this.liveClientValue = null;\r\n await this.disconnectXmpp();\r\n await this.disconnectEvents();\r\n return this.auth.killSession(this.accessToken, options);\r\n }\r\n}\r\n","import { NotFoundError, ValidationError } from '../core/errors.js';\nimport type { QueryParams, RequestOptions } from '../core/types.js';\nimport type { RestClient } from '../fortnite/rest.js';\n\nexport const ECOSYSTEM_BASE_URL = 'https://api.fortnite.com/ecosystem/v1';\n\nexport const EcosystemRoutes = {\n islands: () => '/islands',\n island: (code: string) => `/islands/${encodeURIComponent(code)}`,\n islandMetrics: (code: string) => `/islands/${encodeURIComponent(code)}/metrics`,\n islandMetricsByInterval: (code: string, interval: string) =>\n `/islands/${encodeURIComponent(code)}/metrics/${encodeURIComponent(interval)}`,\n islandPeakCcu: (code: string, interval: string) =>\n `/islands/${encodeURIComponent(code)}/metrics/${encodeURIComponent(interval)}/peak-ccu`,\n islandFavorites: (code: string, interval: string) =>\n `/islands/${encodeURIComponent(code)}/metrics/${encodeURIComponent(interval)}/favorites`,\n islandMinutesPlayed: (code: string, interval: string) =>\n `/islands/${encodeURIComponent(code)}/metrics/${encodeURIComponent(interval)}/minutes-played`,\n islandAverageMinutesPerPlayer: (code: string, interval: string) =>\n `/islands/${encodeURIComponent(code)}/metrics/${encodeURIComponent(interval)}/average-minutes-per-player`,\n islandRecommendations: (code: string, interval: string) =>\n `/islands/${encodeURIComponent(code)}/metrics/${encodeURIComponent(interval)}/recommendations`,\n islandUniquePlayers: (code: string, interval: string) =>\n `/islands/${encodeURIComponent(code)}/metrics/${encodeURIComponent(interval)}/unique-players`,\n islandPlays: (code: string, interval: string) =>\n `/islands/${encodeURIComponent(code)}/metrics/${encodeURIComponent(interval)}/plays`,\n islandRetention: (code: string, interval: string) =>\n `/islands/${encodeURIComponent(code)}/metrics/${encodeURIComponent(interval)}/retention`,\n islandRankings: (code: string) => `/islands/${encodeURIComponent(code)}/rankings`,\n genres: () => '/genres',\n genreRankings: (slug: string) => `/genres/${encodeURIComponent(slug)}/rankings`,\n metrics: (interval: string) => `/metrics/${encodeURIComponent(interval)}`,\n inClientPeakCcu: (interval: string) =>\n `/metrics/${encodeURIComponent(interval)}/in-client-peak-ccu`,\n inMatchPeakCcu: (interval: string) =>\n `/metrics/${encodeURIComponent(interval)}/in-match-peak-ccu`,\n} as const;\n\nexport const EcosystemInterval = {\n Day: 'day',\n Hour: 'hour',\n Minute: 'minute',\n} as const;\n\nexport type EcosystemInterval = (typeof EcosystemInterval)[keyof typeof EcosystemInterval];\n\nexport const ECOSYSTEM_INTERVALS = Object.values(EcosystemInterval) as EcosystemInterval[];\n\nexport function isEcosystemInterval(value: unknown): value is EcosystemInterval {\n return typeof value === 'string' && (ECOSYSTEM_INTERVALS as string[]).includes(value);\n}\n\nexport const IslandMetric = {\n AverageMinutesPerPlayer: 'averageMinutesPerPlayer',\n PeakCCU: 'peakCCU',\n Favorites: 'favorites',\n MinutesPlayed: 'minutesPlayed',\n Recommendations: 'recommendations',\n Plays: 'plays',\n UniquePlayers: 'uniquePlayers',\n Retention: 'retention',\n} as const;\n\nexport type IslandMetric = (typeof IslandMetric)[keyof typeof IslandMetric];\n\nexport const ISLAND_METRICS = Object.values(IslandMetric) as IslandMetric[];\n\nexport function isIslandMetric(value: unknown): value is IslandMetric {\n return typeof value === 'string' && (ISLAND_METRICS as string[]).includes(value);\n}\n\nexport const EcosystemMetric = {\n InMatchPeakCCU: 'inMatchPeakCCU',\n InClientPeakCCU: 'inClientPeakCCU',\n} as const;\n\nexport type EcosystemMetric = (typeof EcosystemMetric)[keyof typeof EcosystemMetric];\n\nexport const ECOSYSTEM_METRICS = Object.values(EcosystemMetric) as EcosystemMetric[];\n\nexport function isEcosystemMetric(value: unknown): value is EcosystemMetric {\n return typeof value === 'string' && (ECOSYSTEM_METRICS as string[]).includes(value);\n}\n\nexport type EcosystemDate = string | number | Date;\n\nexport interface EcosystemBaseOptions {\n signal?: AbortSignal;\n timeout?: number;\n cache?: boolean;\n headers?: Record<string, string>;\n}\n\nexport interface EcosystemPageOptions extends EcosystemBaseOptions {\n after?: string;\n before?: string;\n size?: number;\n}\n\nexport interface EcosystemRangeOptions extends EcosystemBaseOptions {\n from?: EcosystemDate;\n to?: EcosystemDate;\n}\n\nexport interface EcosystemIslandMetricsOptions extends EcosystemRangeOptions {\n metrics?: IslandMetric[];\n}\n\nexport interface EcosystemMetricsOptions extends EcosystemRangeOptions {\n metrics?: EcosystemMetric[];\n}\n\nexport interface EcosystemGenreRankingOptions extends EcosystemPageOptions {\n at?: EcosystemDate;\n}\n\nexport interface EcosystemIslandSummary {\n code: string;\n creatorCode?: string;\n displayName?: string;\n title: string;\n category?: string;\n createdIn?: string;\n tags: string[];\n}\n\nexport interface EcosystemCursorMeta {\n meta: {\n page: {\n cursor: string;\n };\n };\n}\n\nexport type EcosystemPaginatedIsland = EcosystemIslandSummary & EcosystemCursorMeta;\n\nexport interface EcosystemPaginationLinks {\n prev: string | null;\n next: string | null;\n}\n\nexport interface EcosystemPageCursors {\n prevCursor: string | null;\n nextCursor: string | null;\n}\n\nexport interface EcosystemPaginationMeta {\n count: number;\n page: EcosystemPageCursors;\n}\n\nexport interface EcosystemIslandsResponse {\n links: EcosystemPaginationLinks;\n meta: EcosystemPaginationMeta;\n data: EcosystemPaginatedIsland[];\n}\n\nexport interface EcosystemMetricValue {\n value: number | null;\n timestamp: string;\n}\n\nexport type EcosystemMetricSeries = EcosystemMetricValue[];\n\nexport interface EcosystemMetricResponse {\n intervals?: EcosystemMetricValue[];\n}\n\nexport interface EcosystemRetentionValue {\n d1: number | null;\n d7: number | null;\n timestamp: string;\n}\n\nexport interface EcosystemRetentionResponse {\n intervals?: EcosystemRetentionValue[];\n}\n\nexport interface EcosystemIslandMetricsResponse {\n averageMinutesPerPlayer: EcosystemMetricSeries;\n peakCCU: EcosystemMetricSeries;\n favorites: EcosystemMetricSeries;\n minutesPlayed: EcosystemMetricSeries;\n recommendations: EcosystemMetricSeries;\n retention?: EcosystemRetentionValue[];\n plays: EcosystemMetricSeries;\n uniquePlayers: EcosystemMetricSeries;\n}\n\nexport interface EcosystemFilterableIslandMetricsResponse {\n averageMinutesPerPlayer?: EcosystemMetricSeries;\n peakCCU?: EcosystemMetricSeries;\n favorites?: EcosystemMetricSeries;\n minutesPlayed?: EcosystemMetricSeries;\n recommendations?: EcosystemMetricSeries;\n retention?: EcosystemRetentionValue[];\n plays?: EcosystemMetricSeries;\n uniquePlayers?: EcosystemMetricSeries;\n}\n\nexport interface EcosystemMetricsResponse {\n inMatchPeakCCU: EcosystemMetricSeries;\n inClientPeakCCU: EcosystemMetricSeries;\n}\n\nexport interface EcosystemFilterableMetricsResponse {\n inMatchPeakCCU?: EcosystemMetricSeries;\n inClientPeakCCU?: EcosystemMetricSeries;\n}\n\nexport interface EcosystemGenre {\n slug: string;\n displayName: string;\n}\n\nexport interface EcosystemGenreListResponse {\n data: EcosystemGenre[];\n}\n\nexport interface EcosystemGenreRankingMeta {\n count: number;\n total: number;\n snapshotAvailable: boolean;\n snapshot: string | null;\n page: EcosystemPageCursors;\n}\n\nexport type EcosystemGenreRankingItem = {\n islandCode: string;\n rank: number;\n} & EcosystemCursorMeta;\n\nexport interface EcosystemGenreRankingResponse {\n links: EcosystemPaginationLinks;\n meta: EcosystemGenreRankingMeta;\n data: EcosystemGenreRankingItem[];\n}\n\nexport interface EcosystemIslandRankingGenre {\n genreSlug: string;\n genre: string;\n rank: number;\n}\n\nexport interface EcosystemIslandRankingSnapshot {\n timestamp: string;\n genres: EcosystemIslandRankingGenre[];\n}\n\nexport interface EcosystemIslandRankingResponse {\n data: EcosystemIslandRankingSnapshot[];\n}\n\nexport interface EcosystemErrorResponse {\n errorCode: string;\n errorMessage: string;\n uuid: string;\n}\n\nfunction toDateTime(value: EcosystemDate): string {\n if (value instanceof Date) return value.toISOString();\n if (typeof value === 'number') return new Date(value).toISOString();\n return value;\n}\n\nexport class EcosystemEndpoint {\n protected readonly rest: RestClient;\n\n constructor(rest: RestClient) {\n this.rest = rest;\n }\n\n async islands(options?: EcosystemPageOptions): Promise<EcosystemIslandsResponse> {\n return this.fetchRaw<EcosystemIslandsResponse>(\n EcosystemRoutes.islands(),\n options,\n this.pageQuery(options),\n );\n }\n\n async island(code: string, options?: EcosystemBaseOptions): Promise<EcosystemIslandSummary> {\n this.requireString(code, 'code');\n return this.fetchRaw<EcosystemIslandSummary>(EcosystemRoutes.island(code), options, {});\n }\n\n async findIsland(\n code: string,\n options?: EcosystemBaseOptions,\n ): Promise<EcosystemIslandSummary | null> {\n try {\n return await this.island(code, options);\n } catch (error) {\n if (error instanceof NotFoundError) return null;\n throw error;\n }\n }\n\n async islandMetrics(\n code: string,\n options?: EcosystemRangeOptions,\n ): Promise<EcosystemIslandMetricsResponse> {\n this.requireString(code, 'code');\n return this.fetchRaw<EcosystemIslandMetricsResponse>(\n EcosystemRoutes.islandMetrics(code),\n options,\n this.rangeQuery(options),\n );\n }\n\n async islandMetricsByInterval(\n code: string,\n interval: EcosystemInterval,\n options?: EcosystemIslandMetricsOptions,\n ): Promise<EcosystemFilterableIslandMetricsResponse> {\n this.requireString(code, 'code');\n this.requireInterval(interval);\n const query = this.rangeQuery(options);\n if (options?.metrics && options.metrics.length > 0) query['metrics'] = options.metrics;\n return this.fetchRaw<EcosystemFilterableIslandMetricsResponse>(\n EcosystemRoutes.islandMetricsByInterval(code, interval),\n options,\n query,\n );\n }\n\n islandPeakCcu(\n code: string,\n interval: EcosystemInterval,\n options?: EcosystemRangeOptions,\n ): Promise<EcosystemMetricResponse> {\n return this.islandMetric(EcosystemRoutes.islandPeakCcu, code, interval, options);\n }\n\n islandFavorites(\n code: string,\n interval: EcosystemInterval,\n options?: EcosystemRangeOptions,\n ): Promise<EcosystemMetricResponse> {\n return this.islandMetric(EcosystemRoutes.islandFavorites, code, interval, options);\n }\n\n islandMinutesPlayed(\n code: string,\n interval: EcosystemInterval,\n options?: EcosystemRangeOptions,\n ): Promise<EcosystemMetricResponse> {\n return this.islandMetric(EcosystemRoutes.islandMinutesPlayed, code, interval, options);\n }\n\n islandAverageMinutesPerPlayer(\n code: string,\n interval: EcosystemInterval,\n options?: EcosystemRangeOptions,\n ): Promise<EcosystemMetricResponse> {\n return this.islandMetric(EcosystemRoutes.islandAverageMinutesPerPlayer, code, interval, options);\n }\n\n islandRecommendations(\n code: string,\n interval: EcosystemInterval,\n options?: EcosystemRangeOptions,\n ): Promise<EcosystemMetricResponse> {\n return this.islandMetric(EcosystemRoutes.islandRecommendations, code, interval, options);\n }\n\n islandUniquePlayers(\n code: string,\n interval: EcosystemInterval,\n options?: EcosystemRangeOptions,\n ): Promise<EcosystemMetricResponse> {\n return this.islandMetric(EcosystemRoutes.islandUniquePlayers, code, interval, options);\n }\n\n islandPlays(\n code: string,\n interval: EcosystemInterval,\n options?: EcosystemRangeOptions,\n ): Promise<EcosystemMetricResponse> {\n return this.islandMetric(EcosystemRoutes.islandPlays, code, interval, options);\n }\n\n async islandRetention(\n code: string,\n interval: EcosystemInterval,\n options?: EcosystemRangeOptions,\n ): Promise<EcosystemRetentionResponse> {\n this.requireString(code, 'code');\n this.requireInterval(interval);\n return this.fetchRaw<EcosystemRetentionResponse>(\n EcosystemRoutes.islandRetention(code, interval),\n options,\n this.rangeQuery(options),\n );\n }\n\n async islandRankings(\n code: string,\n options?: EcosystemRangeOptions,\n ): Promise<EcosystemIslandRankingResponse> {\n this.requireString(code, 'code');\n return this.fetchRaw<EcosystemIslandRankingResponse>(\n EcosystemRoutes.islandRankings(code),\n options,\n this.rangeQuery(options),\n );\n }\n\n async genres(options?: EcosystemBaseOptions): Promise<EcosystemGenreListResponse> {\n return this.fetchRaw<EcosystemGenreListResponse>(EcosystemRoutes.genres(), options, {});\n }\n\n async genreRankings(\n slug: string,\n options?: EcosystemGenreRankingOptions,\n ): Promise<EcosystemGenreRankingResponse> {\n this.requireString(slug, 'slug');\n const query = this.pageQuery(options);\n if (options?.at !== undefined) query['at'] = toDateTime(options.at);\n return this.fetchRaw<EcosystemGenreRankingResponse>(\n EcosystemRoutes.genreRankings(slug),\n options,\n query,\n );\n }\n\n async metrics(\n interval: EcosystemInterval,\n options?: EcosystemMetricsOptions,\n ): Promise<EcosystemFilterableMetricsResponse> {\n this.requireInterval(interval);\n const query = this.rangeQuery(options);\n if (options?.metrics && options.metrics.length > 0) query['metrics'] = options.metrics;\n return this.fetchRaw<EcosystemFilterableMetricsResponse>(\n EcosystemRoutes.metrics(interval),\n options,\n query,\n );\n }\n\n async inClientPeakCcu(\n interval: EcosystemInterval,\n options?: EcosystemRangeOptions,\n ): Promise<EcosystemMetricResponse> {\n this.requireInterval(interval);\n return this.fetchRaw<EcosystemMetricResponse>(\n EcosystemRoutes.inClientPeakCcu(interval),\n options,\n this.rangeQuery(options),\n );\n }\n\n async inMatchPeakCcu(\n interval: EcosystemInterval,\n options?: EcosystemRangeOptions,\n ): Promise<EcosystemMetricResponse> {\n this.requireInterval(interval);\n return this.fetchRaw<EcosystemMetricResponse>(\n EcosystemRoutes.inMatchPeakCcu(interval),\n options,\n this.rangeQuery(options),\n );\n }\n\n private async islandMetric(\n route: (code: string, interval: string) => string,\n code: string,\n interval: EcosystemInterval,\n options?: EcosystemRangeOptions,\n ): Promise<EcosystemMetricResponse> {\n this.requireString(code, 'code');\n this.requireInterval(interval);\n return this.fetchRaw<EcosystemMetricResponse>(\n route(code, interval),\n options,\n this.rangeQuery(options),\n );\n }\n\n private async fetchRaw<T>(\n path: string,\n options: EcosystemBaseOptions | undefined,\n query: QueryParams,\n ): Promise<T> {\n const response = await this.rest.get<T>(path, this.requestOptions(options, query));\n return response.body;\n }\n\n private requestOptions(\n options: EcosystemBaseOptions | undefined,\n query: QueryParams,\n ): RequestOptions {\n const requestOptions: RequestOptions = { query };\n\n if (options?.signal !== undefined) requestOptions.signal = options.signal;\n if (options?.timeout !== undefined) requestOptions.timeout = options.timeout;\n if (options?.cache !== undefined) requestOptions.cache = options.cache;\n if (options?.headers !== undefined) requestOptions.headers = options.headers;\n\n return requestOptions;\n }\n\n private pageQuery(options: EcosystemPageOptions | undefined): QueryParams {\n const query: QueryParams = {};\n if (options?.after !== undefined) query['after'] = options.after;\n if (options?.before !== undefined) query['before'] = options.before;\n if (options?.size !== undefined) query['size'] = options.size;\n return query;\n }\n\n private rangeQuery(options: EcosystemRangeOptions | undefined): QueryParams {\n const query: QueryParams = {};\n if (options?.from !== undefined) query['from'] = toDateTime(options.from);\n if (options?.to !== undefined) query['to'] = toDateTime(options.to);\n return query;\n }\n\n private requireString(value: unknown, parameter: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(\n `\"${parameter}\" is required and must be a non-empty string`,\n parameter,\n );\n }\n return value;\n }\n\n private requireInterval(value: string): EcosystemInterval {\n if (!isEcosystemInterval(value)) {\n throw new ValidationError(\n `\"interval\" must be one of ${ECOSYSTEM_INTERVALS.join(', ')}`,\n 'interval',\n );\n }\n return value;\n }\n}\n","import { ConfigurationError } from '../core/errors.js';\r\nimport { RestClient } from '../fortnite/rest.js';\r\nimport { AccountManager, DeviceAuthManager } from './account.js';\r\nimport { AuthManager, type DeviceCodePollOptions, type TokenRequestOptions } from './auth.js';\r\nimport {\r\n AuthClients,\r\n isCustomClientInput,\r\n resolveAuthClient,\r\n type AuthClient,\r\n type AuthClientInput,\r\n type AuthClientName,\r\n} from './clients.js';\r\nimport { DeviceCodeFlow } from './deviceCode.js';\r\nimport { ChatService, PUBLIC_KEY_BASE_URL } from './chat.js';\r\nimport { ECOSYSTEM_BASE_URL, EcosystemEndpoint } from './ecosystem.js';\r\nimport { EOS_AUTH_BASE_URL, EosConnectManager, LOCKER_BASE_URL, LockerService } from './eos.js';\r\nimport { FriendsManager, FRIENDS_BASE_URL } from './friends.js';\r\nimport { FortniteGameManager } from './game.js';\r\nimport { HABANERO_BASE_URL, HabaneroManager } from './habanero.js';\r\nimport {\r\n LIGHTSWITCH_BASE_URL,\r\n LIGHTSWITCH_BULK_BASE_URL,\r\n LightswitchManager,\r\n} from './lightswitch.js';\r\nimport { SOCIAL_BAN_BASE_URL, SocialBanManager } from './socialBan.js';\r\nimport { MCP_BASE_URL, MCPClient } from './mcp.js';\r\nimport { PARTY_BASE_URL, PartyClient } from './party.js';\r\nimport { PRESENCE_BASE_URL, PresenceManager } from './presence.js';\r\nimport { STATS_PROXY_BASE_URL, StatsProxyManager } from './stats.js';\r\nimport { USER_SEARCH_BASE_URL, UserSearchManager } from './userSearch.js';\r\nimport { AVATAR_BASE_URL, AvatarManager } from './avatar.js';\r\nimport { CloudStorageManager } from './cloudstorage.js';\r\nimport { MatchmakingManager } from './matchmaking.js';\r\nimport { PLAYTIME_BASE_URL, PlaytimeManager } from './playtime.js';\r\nimport { STATUS_BASE_URL, EpicStatusManager } from './status.js';\r\nimport { EpicRestClient, type EpicRestOptions } from './rest.js';\r\nimport { EpicAuthSession } from './session.js';\r\nimport type { DeviceAuthCredentials, OAuthToken } from './types.js';\r\n\r\nconst DEVICE_CODE_CLIENT: AuthClientName = 'fortniteNewSwitch';\r\n\r\nexport { resolveAuthClient };\r\nexport type { AuthClientInput };\r\n\r\nexport interface EpicClientOptions extends EpicRestOptions {\r\n defaultClient?: AuthClientInput;\r\n allowCustomClients?: boolean;\r\n allowCustomMcpOperations?: boolean;\r\n}\r\n\r\nexport class EpicGamesClient {\r\n public readonly rest: EpicRestClient;\r\n public readonly mcpRest: EpicRestClient;\r\n public readonly partyRest: EpicRestClient;\r\n public readonly eosRest: EpicRestClient;\r\n public readonly publicKeyRest: EpicRestClient;\r\n public readonly lockerRest: EpicRestClient;\r\n public readonly friendsRest: EpicRestClient;\r\n public readonly habaneroRest: EpicRestClient;\r\n public readonly presenceRest: EpicRestClient;\r\n public readonly lightswitchRest: EpicRestClient;\r\n public readonly lightswitchBulkRest: EpicRestClient;\r\n public readonly socialBanRest: EpicRestClient;\r\n public readonly statsRest: EpicRestClient;\r\n public readonly userSearchRest: EpicRestClient;\r\n public readonly ecosystemRest: RestClient;\r\n public readonly avatarRest: EpicRestClient;\r\n public readonly playtimeRest: EpicRestClient;\r\n public readonly statusRest: EpicRestClient;\r\n public readonly auth: AuthManager;\r\n public readonly deviceAuths: DeviceAuthManager;\r\n public readonly accounts: AccountManager;\r\n public readonly mcp: MCPClient;\r\n public readonly party: PartyClient;\r\n public readonly eos: EosConnectManager;\r\n public readonly chat: ChatService;\r\n public readonly lockerService: LockerService;\r\n public readonly friends: FriendsManager;\r\n public readonly habanero: HabaneroManager;\r\n public readonly presence: PresenceManager;\r\n public readonly lightswitch: LightswitchManager;\r\n public readonly socialBan: SocialBanManager;\r\n public readonly stats: StatsProxyManager;\r\n public readonly game: FortniteGameManager;\r\n public readonly userSearch: UserSearchManager;\r\n public readonly ecosystem: EcosystemEndpoint;\r\n public readonly avatar: AvatarManager;\r\n public readonly cloudStorage: CloudStorageManager;\r\n public readonly matchmaking: MatchmakingManager;\r\n public readonly playtime: PlaytimeManager;\r\n public readonly status: EpicStatusManager;\r\n\r\n private readonly defaultClient: AuthClient;\r\n private readonly allowCustomClients: boolean;\r\n\r\n constructor(options: EpicClientOptions = {}) {\r\n const { defaultClient, allowCustomClients, allowCustomMcpOperations, ...restOptions } = options;\r\n this.allowCustomClients = allowCustomClients ?? false;\r\n this.rest = new EpicRestClient(restOptions);\r\n this.mcpRest = new EpicRestClient({ ...restOptions, baseUrl: MCP_BASE_URL });\r\n this.partyRest = new EpicRestClient({ ...restOptions, baseUrl: PARTY_BASE_URL });\r\n this.eosRest = new EpicRestClient({ ...restOptions, baseUrl: EOS_AUTH_BASE_URL });\r\n this.publicKeyRest = new EpicRestClient({ ...restOptions, baseUrl: PUBLIC_KEY_BASE_URL });\r\n this.lockerRest = new EpicRestClient({ ...restOptions, baseUrl: LOCKER_BASE_URL });\r\n this.friendsRest = new EpicRestClient({ ...restOptions, baseUrl: FRIENDS_BASE_URL });\r\n this.habaneroRest = new EpicRestClient({ ...restOptions, baseUrl: HABANERO_BASE_URL });\r\n this.presenceRest = new EpicRestClient({ ...restOptions, baseUrl: PRESENCE_BASE_URL });\r\n this.lightswitchRest = new EpicRestClient({ ...restOptions, baseUrl: LIGHTSWITCH_BASE_URL });\r\n this.lightswitchBulkRest = new EpicRestClient({ ...restOptions, baseUrl: LIGHTSWITCH_BULK_BASE_URL });\r\n this.socialBanRest = new EpicRestClient({ ...restOptions, baseUrl: SOCIAL_BAN_BASE_URL });\r\n this.statsRest = new EpicRestClient({ ...restOptions, baseUrl: STATS_PROXY_BASE_URL });\r\n this.userSearchRest = new EpicRestClient({ ...restOptions, baseUrl: USER_SEARCH_BASE_URL });\r\n this.avatarRest = new EpicRestClient({ ...restOptions, baseUrl: AVATAR_BASE_URL });\r\n this.playtimeRest = new EpicRestClient({ ...restOptions, baseUrl: PLAYTIME_BASE_URL });\r\n this.statusRest = new EpicRestClient({ ...restOptions, baseUrl: STATUS_BASE_URL });\r\n this.ecosystemRest = new RestClient({\r\n baseUrl: ECOSYSTEM_BASE_URL,\r\n timeout: restOptions.timeout,\r\n retry: restOptions.retry,\r\n userAgent: restOptions.userAgent,\r\n fetch: restOptions.fetch,\r\n headers: restOptions.headers,\r\n });\r\n this.auth = new AuthManager(this.rest);\r\n this.deviceAuths = new DeviceAuthManager(this.rest);\r\n this.accounts = new AccountManager(this.rest);\r\n this.mcp = new MCPClient(this.mcpRest, { allowCustomOperations: allowCustomMcpOperations ?? false });\r\n this.party = new PartyClient(this.partyRest);\r\n this.eos = new EosConnectManager(this.eosRest);\r\n this.chat = new ChatService(this.eosRest, this.publicKeyRest);\r\n this.lockerService = new LockerService(this.lockerRest);\r\n this.friends = new FriendsManager(this.friendsRest, this.accounts);\r\n this.habanero = new HabaneroManager(this.habaneroRest);\r\n this.presence = new PresenceManager(this.presenceRest);\r\n this.lightswitch = new LightswitchManager(this.lightswitchRest, this.lightswitchBulkRest);\r\n this.socialBan = new SocialBanManager(this.socialBanRest);\r\n this.stats = new StatsProxyManager(this.statsRest);\r\n this.game = new FortniteGameManager(this.mcpRest, this.mcp);\r\n this.userSearch = new UserSearchManager(this.userSearchRest, this.accounts);\r\n this.ecosystem = new EcosystemEndpoint(this.ecosystemRest);\r\n this.avatar = new AvatarManager(this.avatarRest);\r\n this.cloudStorage = new CloudStorageManager(this.mcpRest);\r\n this.matchmaking = new MatchmakingManager(this.mcpRest);\r\n this.playtime = new PlaytimeManager(this.playtimeRest);\r\n this.status = new EpicStatusManager(this.statusRest);\r\n this.defaultClient = resolveAuthClient(defaultClient ?? AuthClients.fortniteAndroid);\r\n }\r\n\r\n client(input?: AuthClientInput): AuthClient {\r\n if (input === undefined) return this.defaultClient;\r\n if (isCustomClientInput(input) && !this.allowCustomClients) {\r\n throw new ConfigurationError(\r\n 'Custom auth clients are disabled. Pass `allowCustomClients: true` to the EpicGamesClient ' +\r\n 'constructor to use a custom { clientId, clientSecret }.',\r\n 'allowCustomClients',\r\n );\r\n }\r\n return resolveAuthClient(input);\r\n }\r\n\r\n session(token: OAuthToken, client?: AuthClientInput): EpicAuthSession {\r\n return new EpicAuthSession({\r\n auth: this.auth,\r\n deviceAuths: this.deviceAuths,\r\n accounts: this.accounts,\r\n mcp: this.mcp,\r\n party: this.party,\r\n eos: this.eos,\r\n chat: this.chat,\r\n lockerService: this.lockerService,\r\n friends: this.friends,\r\n habanero: this.habanero,\r\n presence: this.presence,\r\n lightswitch: this.lightswitch,\r\n socialBan: this.socialBan,\r\n stats: this.stats,\r\n game: this.game,\r\n userSearch: this.userSearch,\r\n avatar: this.avatar,\r\n cloudStorage: this.cloudStorage,\r\n matchmaking: this.matchmaking,\r\n playtime: this.playtime,\r\n status: this.status,\r\n client: this.client(client),\r\n token,\r\n allowCustomClients: this.allowCustomClients,\r\n });\r\n }\r\n\r\n async login(\r\n grant: (auth: AuthManager, client: AuthClient) => Promise<OAuthToken>,\r\n client?: AuthClientInput,\r\n ): Promise<EpicAuthSession> {\r\n const resolved = this.client(client);\r\n const token = await grant(this.auth, resolved);\r\n return this.session(token, resolved);\r\n }\r\n\r\n async loginWithDeviceAuth(\r\n credentials: DeviceAuthCredentials,\r\n options?: { client?: AuthClientInput } & TokenRequestOptions,\r\n ): Promise<EpicAuthSession> {\r\n const { client, ...tokenOptions } = options ?? {};\r\n return this.login((auth, resolved) => auth.deviceAuth(resolved, credentials, tokenOptions), client);\r\n }\r\n\r\n async loginWithExchangeCode(\r\n code: string,\r\n options?: { client?: AuthClientInput; codeVerifier?: string } & TokenRequestOptions,\r\n ): Promise<EpicAuthSession> {\r\n const { client, ...tokenOptions } = options ?? {};\r\n return this.login((auth, resolved) => auth.exchangeCode(resolved, code, tokenOptions), client);\r\n }\r\n\r\n async loginWithAuthorizationCode(\r\n code: string,\r\n options?: { client?: AuthClientInput; codeVerifier?: string } & TokenRequestOptions,\r\n ): Promise<EpicAuthSession> {\r\n const { client, ...tokenOptions } = options ?? {};\r\n return this.login((auth, resolved) => auth.authorizationCode(resolved, code, tokenOptions), client);\r\n }\r\n\r\n async loginWithRefreshToken(\r\n refreshToken: string,\r\n options?: { client?: AuthClientInput } & TokenRequestOptions,\r\n ): Promise<EpicAuthSession> {\r\n const { client, ...tokenOptions } = options ?? {};\r\n return this.login((auth, resolved) => auth.refreshToken(resolved, refreshToken, tokenOptions), client);\r\n }\r\n\r\n async loginClientCredentials(\r\n options?: { client?: AuthClientInput } & TokenRequestOptions,\r\n ): Promise<EpicAuthSession> {\r\n const { client, ...tokenOptions } = options ?? {};\r\n return this.login((auth, resolved) => auth.clientCredentials(resolved, tokenOptions), client);\r\n }\r\n\r\n async loginWithExternalAuth(\r\n externalAuthType: string,\r\n externalAuthToken: string,\r\n options?: { client?: AuthClientInput } & TokenRequestOptions,\r\n ): Promise<EpicAuthSession> {\r\n const { client, ...tokenOptions } = options ?? {};\r\n return this.login(\r\n (auth, resolved) => auth.externalAuth(resolved, externalAuthType, externalAuthToken, tokenOptions),\r\n client,\r\n );\r\n }\r\n\r\n async loginWithTokenToToken(\r\n accessToken: string,\r\n options?: { client?: AuthClientInput } & TokenRequestOptions,\r\n ): Promise<EpicAuthSession> {\r\n const { client, ...tokenOptions } = options ?? {};\r\n return this.login((auth, resolved) => auth.tokenToToken(resolved, accessToken, tokenOptions), client);\r\n }\r\n\r\n async changeClient(\r\n accessToken: string,\r\n toClient: AuthClientInput,\r\n options?: TokenRequestOptions & { codeChallenge?: string; codeChallengeMethod?: 'S256' | 'plain' },\r\n ): Promise<EpicAuthSession> {\r\n const target = this.client(toClient);\r\n const exchange = await this.auth.createExchangeCode(accessToken, {\r\n consumingClientId: target.clientId,\r\n ...(options?.codeChallenge ? { codeChallenge: options.codeChallenge } : {}),\r\n ...(options?.codeChallengeMethod ? { codeChallengeMethod: options.codeChallengeMethod } : {}),\r\n ...(options?.signal ? { signal: options.signal } : {}),\r\n ...(options?.timeout !== undefined ? { timeout: options.timeout } : {}),\r\n });\r\n const token = await this.auth.exchangeCode(target, exchange.code, options);\r\n return this.session(token, target);\r\n }\r\n\r\n async startDeviceCode(options?: { client?: AuthClientInput }): Promise<DeviceCodeFlow> {\r\n const client = this.client(options?.client ?? DEVICE_CODE_CLIENT);\r\n const appToken = await this.auth.clientCredentials(client);\r\n const deviceCode = await this.auth.createDeviceCode(appToken.access_token);\r\n return new DeviceCodeFlow(this.auth, (token) => this.session(token, client), client, deviceCode);\r\n }\r\n\r\n async loginWithDeviceCode(\r\n options?: {\r\n client?: AuthClientInput;\r\n onPrompt?: (flow: DeviceCodeFlow) => void | Promise<void>;\r\n } & DeviceCodePollOptions,\r\n ): Promise<EpicAuthSession> {\r\n const { client, onPrompt, ...pollOptions } = options ?? {};\r\n const flow = await this.startDeviceCode({ client });\r\n if (onPrompt) await onPrompt(flow);\r\n return flow.poll(pollOptions);\r\n }\r\n}\r\n","import { FortniteAPI } from './fortnite/client.js';\nimport { DillyAPI } from './dilly/index.js';\nimport { FnccAPI } from './fncc/index.js';\nimport { EpicGamesClient } from './epic/index.js';\nimport type { FortniteAPIOptions } from './fortnite/options.js';\nimport type { DillyAPIOptions } from './dilly/options.js';\nimport type { FnccAPIOptions } from './fncc/options.js';\nimport type { EpicClientOptions } from './epic/index.js';\nimport type { EcosystemEndpoint } from './epic/ecosystem.js';\n\nexport interface FortniteOptions extends FortniteAPIOptions {\n epic?: EpicClientOptions;\n dilly?: DillyAPIOptions;\n fncc?: FnccAPIOptions;\n}\n\nexport class Fortnite {\n public readonly fortniteapi: FortniteAPI;\n public readonly dilly: DillyAPI;\n public readonly fncc: FnccAPI;\n public readonly epic: EpicGamesClient;\n\n constructor(options: FortniteOptions = {}) {\n const { epic, dilly, fncc, ...dataOptions } = options;\n\n this.fortniteapi = new FortniteAPI(dataOptions);\n\n this.dilly = new DillyAPI({\n timeout: dataOptions.timeout,\n headers: dataOptions.headers,\n retry: dataOptions.retry,\n cache: dataOptions.cache,\n fetch: dataOptions.fetch,\n userAgent: dataOptions.userAgent,\n ...dilly,\n });\n\n this.fncc = new FnccAPI({\n timeout: dataOptions.timeout,\n headers: dataOptions.headers,\n retry: dataOptions.retry,\n cache: dataOptions.cache,\n fetch: dataOptions.fetch,\n userAgent: dataOptions.userAgent,\n ...fncc,\n });\n\n this.epic = new EpicGamesClient({\n timeout: dataOptions.timeout,\n headers: dataOptions.headers,\n userAgent: dataOptions.userAgent,\n fetch: dataOptions.fetch,\n ...(typeof dataOptions.retry === 'number' ? { retry: dataOptions.retry } : {}),\n ...epic,\n });\n }\n\n get ecosystem(): EcosystemEndpoint {\n return this.epic.ecosystem;\n }\n}\n","import { ValidationError } from './core/errors.js';\nimport type { EpicAuthSession } from './epic/session.js';\nimport type { LockerActiveLoadoutGroup } from './epic/eos.js';\nimport type { MCPOperation, MCPResponse } from './epic/mcp.js';\nimport type { AllCosmetics, AnyCosmetic } from './fortnite/types.js';\n\nexport interface LockerCosmeticSource {\n all(): Promise<AllCosmetics>;\n}\n\nexport interface LockerVariant {\n channel: string;\n active: string;\n owned: string[];\n}\n\nexport interface LockerItem {\n id: string;\n templateId: string;\n type: string;\n cosmeticId: string;\n favorite: boolean;\n seen: boolean;\n variants: LockerVariant[];\n name: string | null;\n cosmetic: AnyCosmetic | null;\n imageUrl: string | null;\n}\n\nexport interface LockerSlot {\n type: string;\n cosmeticId: string;\n name: string | null;\n cosmetic: AnyCosmetic | null;\n imageUrl: string | null;\n}\n\nexport interface LockerLoadout {\n character: LockerSlot | null;\n backpack: LockerSlot | null;\n pickaxe: LockerSlot | null;\n glider: LockerSlot | null;\n contrail: LockerSlot | null;\n musicPack: LockerSlot | null;\n loadingScreen: LockerSlot | null;\n dances: LockerSlot[];\n itemWraps: LockerSlot[];\n}\n\nexport interface LockerSnapshot {\n accountId: string | null;\n profileRevision: number;\n items: LockerItem[];\n loadout: LockerLoadout;\n}\n\nexport interface LockerFetchOptions {\n enrich?: boolean;\n useLockerService?: boolean;\n signal?: AbortSignal;\n}\n\nexport const LockerCategory = {\n character: 'Character',\n backpack: 'Backpack',\n pickaxe: 'Pickaxe',\n glider: 'Glider',\n contrail: 'SkyDiveContrail',\n musicPack: 'MusicPack',\n loadingScreen: 'LoadingScreen',\n dance: 'Dance',\n itemWrap: 'ItemWrap',\n} as const;\n\nexport type LockerCategoryValue = (typeof LockerCategory)[keyof typeof LockerCategory];\n\nexport const ModularLoadout = {\n character: 'CosmeticLoadout:LoadoutSchema_Character',\n emotes: 'CosmeticLoadout:LoadoutSchema_Emotes',\n wraps: 'CosmeticLoadout:LoadoutSchema_Wraps',\n platform: 'CosmeticLoadout:LoadoutSchema_Platform',\n sparks: 'CosmeticLoadout:LoadoutSchema_Sparks',\n jam: 'CosmeticLoadout:LoadoutSchema_Jam',\n vehicle: 'CosmeticLoadout:LoadoutSchema_Vehicle',\n} as const;\n\nexport type ModularLoadoutValue = (typeof ModularLoadout)[keyof typeof ModularLoadout];\n\nconst CATEGORY_BACKEND: Record<LockerCategoryValue, string> = {\n Character: 'AthenaCharacter',\n Backpack: 'AthenaBackpack',\n Pickaxe: 'AthenaPickaxe',\n Glider: 'AthenaGlider',\n SkyDiveContrail: 'AthenaSkyDiveContrail',\n MusicPack: 'AthenaMusicPack',\n LoadingScreen: 'AthenaLoadingScreen',\n Dance: 'AthenaDance',\n ItemWrap: 'AthenaItemWrap',\n};\n\nconst LOCKER_ITEM_TEMPLATE = 'CosmeticLocker:cosmeticlocker_athena';\n\nexport interface LockerVariantUpdate {\n channel: string;\n active: string;\n owned?: string[];\n}\n\nexport interface LockerSlotTarget {\n lockerItem?: string;\n preset?: number;\n signal?: AbortSignal;\n}\n\nexport interface LockerEquipOptions extends LockerSlotTarget {\n slotIndex?: number;\n variants?: LockerVariantUpdate[];\n}\n\nexport interface LockerEquipLoadout {\n character?: string | null;\n backpack?: string | null;\n pickaxe?: string | null;\n glider?: string | null;\n contrail?: string | null;\n musicPack?: string | null;\n loadingScreen?: string | null;\n dances?: (string | null)[];\n itemWraps?: (string | null)[];\n}\n\nexport interface ModularSlotInput {\n slotTemplate: string;\n equippedItem?: string | null;\n customizations?: { channelTag: string; variantTag: string }[];\n}\n\nexport interface ModularLoadoutInput {\n slots: ModularSlotInput[];\n displayName?: string;\n}\n\nexport interface DeletePresetOptions extends LockerSlotTarget {\n fallbackLoadoutIndex?: number;\n leaveNullSlot?: boolean;\n}\n\nexport interface LockerPresetSlotOptions {\n slotIndex?: number;\n variants?: LockerVariantUpdate[];\n}\n\nexport interface LockerPresetSlot {\n category: LockerCategoryValue;\n itemId: string | null;\n slotIndex: number;\n variants: LockerVariantUpdate[];\n}\n\nexport interface ApplyPresetOptions extends LockerSlotTarget {\n name?: string;\n}\n\nconst LOCKER_SLOT_NAMES: Record<string, keyof LockerLoadout> = {\n LoadoutSlot_Character: 'character',\n LoadoutSlot_Backpack: 'backpack',\n LoadoutSlot_Pickaxe: 'pickaxe',\n LoadoutSlot_Glider: 'glider',\n LoadoutSlot_Contrails: 'contrail',\n LoadoutSlot_MusicPack: 'musicPack',\n LoadoutSlot_LoadingScreen: 'loadingScreen',\n};\n\ninterface LockerSlotData {\n slots?: Record<string, { items?: string[] }>;\n}\n\ninterface RawItem {\n templateId?: string;\n attributes?: {\n favorite?: boolean;\n item_seen?: boolean;\n variants?: Array<{ channel?: string; active?: string; owned?: string[] }>;\n locker_slots_data?: LockerSlotData;\n };\n}\n\nconst COSMETIC_TYPE = new RegExp(\n '^(Athena(Character|Backpack|Pickaxe|Glider|SkyDiveContrail|Dance|Emoji|Toy|ItemWrap|' +\n 'MusicPack|LoadingScreen|Spray|PetCarrier|VictoryPose|ConsumableEmote)|Sparks|Vehicle|' +\n 'CosmeticShoes|BannerToken|HomebaseBannerIcon)',\n);\n\nfunction templateParts(templateId: string): { type: string; cosmeticId: string } {\n const idx = templateId.indexOf(':');\n if (idx < 0) return { type: '', cosmeticId: templateId };\n return { type: templateId.slice(0, idx), cosmeticId: templateId.slice(idx + 1) };\n}\n\nfunction cosmeticImage(cosmetic: AnyCosmetic): string | null {\n const value = cosmetic as unknown as Record<string, unknown>;\n const images = value['images'] as Record<string, unknown> | undefined;\n if (images) {\n const pick = ['icon', 'featured', 'large', 'small', 'smallIcon', 'wide'];\n for (const key of pick) {\n if (typeof images[key] === 'string') return images[key] as string;\n }\n }\n if (typeof value['albumArt'] === 'string') return value['albumArt'] as string;\n return null;\n}\n\nfunction cosmeticName(cosmetic: AnyCosmetic): string | null {\n const value = cosmetic as unknown as Record<string, unknown>;\n if (typeof value['name'] === 'string') return value['name'] as string;\n if (typeof value['title'] === 'string') return value['title'] as string;\n return null;\n}\n\nexport class Locker {\n private cosmeticMapCache: Map<string, AnyCosmetic> | null = null;\n private lockerContextCache: { defaultItem: string | null; loadouts: string[] } | null = null;\n\n constructor(\n private readonly session: EpicAuthSession,\n private readonly cosmetics?: LockerCosmeticSource,\n ) {}\n\n async fetch(options: LockerFetchOptions = {}): Promise<LockerSnapshot> {\n const response = await this.session.queryProfile('athena', options.signal ? { signal: options.signal } : {});\n const profile = extractProfile(response);\n const items = (profile['items'] ?? {}) as Record<string, RawItem>;\n const attributes = ((profile['stats'] as Record<string, unknown> | undefined)?.['attributes'] ??\n {}) as Record<string, unknown>;\n\n const lockerItems = parseItems(items);\n const loadout = parseLoadout(attributes, items);\n\n if (loadout.character === null && options.useLockerService !== false) {\n await this.applyLockerService(loadout, items, options.signal);\n }\n\n const snapshot: LockerSnapshot = {\n accountId: this.session.accountId,\n profileRevision: response.profileRevision,\n items: lockerItems,\n loadout,\n };\n\n if (options.enrich) {\n const map = await this.cosmeticMap();\n for (const item of snapshot.items) enrichSlot(item, map);\n for (const slot of loadoutSlots(loadout)) enrichSlot(slot, map);\n }\n\n return snapshot;\n }\n\n items(options?: LockerFetchOptions): Promise<LockerItem[]> {\n return this.fetch(options).then((snapshot) => snapshot.items);\n }\n\n loadout(options?: LockerFetchOptions): Promise<LockerLoadout> {\n return this.fetch(options).then((snapshot) => snapshot.loadout);\n }\n\n async resolveImage(cosmeticId: string): Promise<string | null> {\n const map = await this.cosmeticMap();\n const cosmetic = map.get(cosmeticId.toLowerCase());\n return cosmetic ? cosmeticImage(cosmetic) : null;\n }\n\n setFavorite(itemIds: string[], favorite = true): Promise<MCPResponse> {\n if (!Array.isArray(itemIds) || itemIds.length === 0) {\n throw new ValidationError('\"itemIds\" must be a non-empty array', 'itemIds');\n }\n return this.session.mcpOperation('SetItemFavoriteStatusBatch', {\n profileId: 'athena',\n payload: { itemIds, itemFavStatus: itemIds.map(() => favorite) },\n });\n }\n\n markSeen(itemIds: string[]): Promise<MCPResponse> {\n if (!Array.isArray(itemIds) || itemIds.length === 0) {\n throw new ValidationError('\"itemIds\" must be a non-empty array', 'itemIds');\n }\n return this.session.mcpOperation('MarkItemSeen', {\n profileId: 'athena',\n payload: { itemIds },\n });\n }\n\n async setSlot(\n category: LockerCategoryValue,\n itemId: string | null,\n options: LockerEquipOptions = {},\n ): Promise<MCPResponse> {\n if (!CATEGORY_BACKEND[category]) {\n throw new ValidationError(`Unknown locker category \"${category}\"`, 'category');\n }\n const lockerItem = await this.resolveLockerItem(options);\n return this.athenaOp(\n 'SetCosmeticLockerSlot',\n {\n lockerItem,\n category,\n itemToSlot: buildItemToSlot(category, itemId),\n slotIndex: options.slotIndex ?? 0,\n variantUpdates: (options.variants ?? []).map(normalizeVariant),\n },\n options.signal,\n );\n }\n\n equipOutfit(itemId: string, options: LockerEquipOptions = {}): Promise<MCPResponse> {\n return this.setSlot('Character', itemId, options);\n }\n\n equipBackpack(itemId: string, options: LockerEquipOptions = {}): Promise<MCPResponse> {\n return this.setSlot('Backpack', itemId, options);\n }\n\n equipPickaxe(itemId: string, options: LockerEquipOptions = {}): Promise<MCPResponse> {\n return this.setSlot('Pickaxe', itemId, options);\n }\n\n equipGlider(itemId: string, options: LockerEquipOptions = {}): Promise<MCPResponse> {\n return this.setSlot('Glider', itemId, options);\n }\n\n equipContrail(itemId: string, options: LockerEquipOptions = {}): Promise<MCPResponse> {\n return this.setSlot('SkyDiveContrail', itemId, options);\n }\n\n equipMusicPack(itemId: string, options: LockerEquipOptions = {}): Promise<MCPResponse> {\n return this.setSlot('MusicPack', itemId, options);\n }\n\n equipLoadingScreen(itemId: string, options: LockerEquipOptions = {}): Promise<MCPResponse> {\n return this.setSlot('LoadingScreen', itemId, options);\n }\n\n equipEmote(itemId: string, slotIndex = 0, options: LockerSlotTarget = {}): Promise<MCPResponse> {\n return this.setSlot('Dance', itemId, { ...options, slotIndex });\n }\n\n equipWrap(itemId: string, slotIndex = -1, options: LockerEquipOptions = {}): Promise<MCPResponse> {\n return this.setSlot('ItemWrap', itemId, { ...options, slotIndex });\n }\n\n clearSlot(category: LockerCategoryValue, options: LockerEquipOptions = {}): Promise<MCPResponse> {\n return this.setSlot(category, null, options);\n }\n\n setVariants(\n category: LockerCategoryValue,\n itemId: string,\n variants: LockerVariantUpdate[],\n options: LockerEquipOptions = {},\n ): Promise<MCPResponse> {\n return this.setSlot(category, itemId, { ...options, variants });\n }\n\n async equipLoadout(loadout: LockerEquipLoadout, options: LockerSlotTarget = {}): Promise<MCPResponse> {\n const lockerItem = await this.resolveLockerItem(options);\n const loadoutData: Array<Record<string, unknown>> = [];\n const push = (category: LockerCategoryValue, id: string | null | undefined, slotIndex = 0): void => {\n if (id === undefined) return;\n loadoutData.push({\n category,\n itemToSlot: buildItemToSlot(category, id),\n slotIndex,\n variantUpdates: [],\n });\n };\n push('Character', loadout.character);\n push('Backpack', loadout.backpack);\n push('Pickaxe', loadout.pickaxe);\n push('Glider', loadout.glider);\n push('SkyDiveContrail', loadout.contrail);\n push('MusicPack', loadout.musicPack);\n push('LoadingScreen', loadout.loadingScreen);\n loadout.dances?.forEach((id, index) => push('Dance', id, index));\n loadout.itemWraps?.forEach((id, index) => push('ItemWrap', id, index));\n\n if (loadoutData.length === 0) {\n throw new ValidationError('\"loadout\" must include at least one slot to equip', 'loadout');\n }\n return this.athenaOp('SetCosmeticLockerSlots', { lockerItem, loadoutData }, options.signal);\n }\n\n async setBanner(iconId: string, colorId: string, options: LockerSlotTarget = {}): Promise<MCPResponse> {\n const lockerItem = await this.resolveLockerItem(options);\n return this.athenaOp(\n 'SetCosmeticLockerBanner',\n {\n lockerItem,\n bannerIconTemplateName: bannerName(iconId),\n bannerColorTemplateName: bannerName(colorId),\n },\n options.signal,\n );\n }\n\n async renameLocker(name: string, options: LockerSlotTarget = {}): Promise<MCPResponse> {\n if (typeof name !== 'string' || name.length === 0) {\n throw new ValidationError('\"name\" must be a non-empty string', 'name');\n }\n const lockerItem = await this.resolveLockerItem(options);\n return this.athenaOp('SetCosmeticLockerName', { lockerItem, name }, options.signal);\n }\n\n createPreset(): LockerPresetBuilder {\n return new LockerPresetBuilder(this);\n }\n\n async applyPreset(slots: LockerPresetSlot[], options: ApplyPresetOptions = {}): Promise<MCPResponse> {\n if (!Array.isArray(slots) || slots.length === 0) {\n throw new ValidationError('A preset must contain at least one slot', 'slots');\n }\n for (const slot of slots) {\n if (!CATEGORY_BACKEND[slot.category]) {\n throw new ValidationError(`Unknown locker category \"${slot.category}\"`, 'category');\n }\n }\n const lockerItem = await this.resolveLockerItem(options);\n const loadoutData = slots.map((slot) => ({\n category: slot.category,\n itemToSlot: buildItemToSlot(slot.category, slot.itemId),\n slotIndex: slot.slotIndex,\n variantUpdates: slot.variants.map(normalizeVariant),\n }));\n\n const response = await this.athenaOp('SetCosmeticLockerSlots', { lockerItem, loadoutData }, options.signal);\n if (typeof options.name === 'string' && options.name.length > 0) {\n await this.athenaOp('SetCosmeticLockerName', { lockerItem, name: options.name }, options.signal);\n }\n return response;\n }\n\n copyPreset(\n sourceIndex: number,\n targetIndex: number,\n newName?: string,\n signal?: AbortSignal,\n ): Promise<MCPResponse> {\n return this.athenaOp(\n 'CopyCosmeticLoadout',\n { sourceIndex, targetIndex, optNewNameForTarget: newName ?? '' },\n signal,\n );\n }\n\n deletePreset(index: number, options: DeletePresetOptions = {}): Promise<MCPResponse> {\n return this.athenaOp(\n 'DeleteCosmeticLoadout',\n {\n index,\n fallbackLoadoutIndex: options.fallbackLoadoutIndex ?? -1,\n leaveNullSlot: options.leaveNullSlot ?? false,\n },\n options.signal,\n );\n }\n\n putModularLoadout(\n loadoutType: ModularLoadoutValue,\n presetId: number,\n data: ModularLoadoutInput,\n signal?: AbortSignal,\n ): Promise<MCPResponse> {\n const loadout: Record<string, unknown> = { slots: modularSlots(data.slots) };\n if (typeof data.displayName === 'string') loadout['display_name'] = data.displayName;\n return this.athenaOp(\n 'PutModularCosmeticLoadout',\n { loadoutType, presetId, loadoutData: JSON.stringify(loadout) },\n signal,\n );\n }\n\n equipModularPreset(\n loadoutType: ModularLoadoutValue,\n presetId: number,\n signal?: AbortSignal,\n ): Promise<MCPResponse> {\n return this.athenaOp('EquipModularCosmeticLoadoutPreset', { loadoutType, presetId }, signal);\n }\n\n deleteModularLoadout(\n loadoutType: ModularLoadoutValue,\n presetId: number,\n signal?: AbortSignal,\n ): Promise<MCPResponse> {\n return this.athenaOp('DeleteModularCosmeticLoadout', { loadoutType, presetId }, signal);\n }\n\n setRandomLoadout(enabled: boolean, signal?: AbortSignal): Promise<MCPResponse> {\n return this.athenaOp('SetRandomCosmeticLoadoutFlag', { random: enabled }, signal);\n }\n\n setShuffleEnabled(\n loadoutType: ModularLoadoutValue,\n enabled: boolean,\n signal?: AbortSignal,\n ): Promise<MCPResponse> {\n return this.athenaOp('SetLoadoutShuffleEnabled', { loadoutType, bEnabled: enabled }, signal);\n }\n\n private athenaOp(operation: MCPOperation, payload: Record<string, unknown>, signal?: AbortSignal): Promise<MCPResponse> {\n return this.session.mcpOperation(operation, {\n profileId: 'athena',\n payload,\n ...(signal ? { signal } : {}),\n });\n }\n\n private async lockerContext(signal?: AbortSignal): Promise<{ defaultItem: string | null; loadouts: string[] }> {\n if (this.lockerContextCache) return this.lockerContextCache;\n const response = await this.session.queryProfile('athena', signal ? { signal } : {});\n const profile = extractProfile(response);\n const items = (profile['items'] ?? {}) as Record<string, RawItem>;\n const attributes = ((profile['stats'] as Record<string, unknown> | undefined)?.['attributes'] ??\n {}) as Record<string, unknown>;\n\n const loadouts = Array.isArray(attributes['loadouts'])\n ? (attributes['loadouts'] as unknown[]).filter((guid): guid is string => typeof guid === 'string')\n : [];\n const lastApplied = typeof attributes['last_applied_loadout'] === 'string'\n ? (attributes['last_applied_loadout'] as string)\n : null;\n\n let defaultItem = lastApplied ?? loadouts[0] ?? null;\n if (!defaultItem) {\n for (const [guid, raw] of Object.entries(items)) {\n if (raw.templateId === LOCKER_ITEM_TEMPLATE) {\n defaultItem = guid;\n break;\n }\n }\n }\n\n this.lockerContextCache = { defaultItem, loadouts };\n return this.lockerContextCache;\n }\n\n private async resolveLockerItem(target: LockerSlotTarget): Promise<string> {\n if (target.lockerItem) return target.lockerItem;\n const context = await this.lockerContext(target.signal);\n if (typeof target.preset === 'number') {\n const guid = context.loadouts[target.preset];\n if (!guid) throw new ValidationError(`No locker preset at index ${target.preset}`, 'preset');\n return guid;\n }\n if (!context.defaultItem) {\n throw new ValidationError('Could not find the athena cosmetic locker on this profile', 'lockerItem');\n }\n return context.defaultItem;\n }\n\n private async applyLockerService(\n loadout: LockerLoadout,\n items: Record<string, RawItem>,\n signal?: AbortSignal,\n ): Promise<void> {\n try {\n const response = await this.session.lockerItems(signal ? { signal } : {});\n if (response.activeLoadoutGroup) mergeActiveLoadout(loadout, response.activeLoadoutGroup, items);\n } catch {\n // The EOS locker service may be unavailable (e.g. a client_credentials session); keep the athena result.\n }\n }\n\n private async cosmeticMap(): Promise<Map<string, AnyCosmetic>> {\n if (!this.cosmetics) {\n throw new ValidationError(\n 'Pass a cosmetics source (e.g. `client.cosmetics`) to the Locker to enrich or resolve images.',\n 'cosmetics',\n );\n }\n if (this.cosmeticMapCache) return this.cosmeticMapCache;\n\n const all = await this.cosmetics.all();\n const map = new Map<string, AnyCosmetic>();\n const groups: AnyCosmetic[][] = [\n all.br,\n all.tracks,\n all.instruments,\n all.cars,\n all.lego,\n all.legoKits,\n all.beans,\n ];\n for (const group of groups) {\n for (const cosmetic of group) {\n map.set(cosmetic.id.toLowerCase(), cosmetic);\n }\n }\n this.cosmeticMapCache = map;\n return map;\n }\n}\n\nexport class LockerPresetBuilder {\n private readonly slots: LockerPresetSlot[] = [];\n private presetName: string | null = null;\n\n constructor(private readonly locker: Locker) {}\n\n slot(\n category: LockerCategoryValue,\n itemId: string | null,\n options: LockerPresetSlotOptions = {},\n ): this {\n const slotIndex = options.slotIndex ?? 0;\n const entry: LockerPresetSlot = {\n category,\n itemId,\n slotIndex,\n variants: options.variants ?? [],\n };\n const existing = this.slots.findIndex(\n (slot) => slot.category === category && slot.slotIndex === slotIndex,\n );\n if (existing >= 0) this.slots[existing] = entry;\n else this.slots.push(entry);\n return this;\n }\n\n character(itemId: string | null, options: LockerPresetSlotOptions = {}): this {\n return this.slot('Character', itemId, { ...options, slotIndex: 0 });\n }\n\n backpack(itemId: string | null, options: LockerPresetSlotOptions = {}): this {\n return this.slot('Backpack', itemId, { ...options, slotIndex: 0 });\n }\n\n pickaxe(itemId: string | null, options: LockerPresetSlotOptions = {}): this {\n return this.slot('Pickaxe', itemId, { ...options, slotIndex: 0 });\n }\n\n glider(itemId: string | null, options: LockerPresetSlotOptions = {}): this {\n return this.slot('Glider', itemId, { ...options, slotIndex: 0 });\n }\n\n contrail(itemId: string | null, options: LockerPresetSlotOptions = {}): this {\n return this.slot('SkyDiveContrail', itemId, { ...options, slotIndex: 0 });\n }\n\n musicPack(itemId: string | null, options: LockerPresetSlotOptions = {}): this {\n return this.slot('MusicPack', itemId, { ...options, slotIndex: 0 });\n }\n\n loadingScreen(itemId: string | null, options: LockerPresetSlotOptions = {}): this {\n return this.slot('LoadingScreen', itemId, { ...options, slotIndex: 0 });\n }\n\n emote(slotIndex: number, itemId: string | null, options: LockerPresetSlotOptions = {}): this {\n return this.slot('Dance', itemId, { ...options, slotIndex });\n }\n\n wrap(slotIndex: number, itemId: string | null, options: LockerPresetSlotOptions = {}): this {\n return this.slot('ItemWrap', itemId, { ...options, slotIndex });\n }\n\n clear(category: LockerCategoryValue, slotIndex = 0): this {\n return this.slot(category, null, { slotIndex });\n }\n\n name(name: string): this {\n this.presetName = name;\n return this;\n }\n\n get size(): number {\n return this.slots.length;\n }\n\n build(): LockerPresetSlot[] {\n return this.slots.map((slot) => ({ ...slot, variants: [...slot.variants] }));\n }\n\n apply(options: LockerSlotTarget = {}): Promise<MCPResponse> {\n const applyOptions: ApplyPresetOptions = { ...options };\n if (this.presetName !== null) applyOptions.name = this.presetName;\n return this.locker.applyPreset(this.build(), applyOptions);\n }\n\n save(options: LockerSlotTarget = {}): Promise<MCPResponse> {\n return this.apply(options);\n }\n}\n\nfunction extractProfile(response: MCPResponse): Record<string, unknown> {\n const changes = response.profileChanges as Array<Record<string, unknown>>;\n const full = changes.find((change) => change['changeType'] === 'fullProfileUpdate');\n return (full?.['profile'] ?? {}) as Record<string, unknown>;\n}\n\nfunction parseItems(items: Record<string, RawItem>): LockerItem[] {\n const result: LockerItem[] = [];\n for (const [id, raw] of Object.entries(items)) {\n if (typeof raw.templateId !== 'string') continue;\n const { type, cosmeticId } = templateParts(raw.templateId);\n if (!COSMETIC_TYPE.test(type)) continue;\n\n result.push({\n id,\n templateId: raw.templateId,\n type,\n cosmeticId,\n favorite: raw.attributes?.favorite === true,\n seen: raw.attributes?.item_seen === true,\n variants: (raw.attributes?.variants ?? []).map((variant) => ({\n channel: variant.channel ?? '',\n active: variant.active ?? '',\n owned: variant.owned ?? [],\n })),\n name: null,\n cosmetic: null,\n imageUrl: null,\n });\n }\n return result;\n}\n\nfunction slotFrom(value: unknown, items: Record<string, RawItem>): LockerSlot | null {\n if (typeof value !== 'string' || value.length === 0) return null;\n let templateId = value;\n if (!value.includes(':')) {\n const item = items[value];\n if (typeof item?.templateId !== 'string') return null;\n templateId = item.templateId;\n }\n const { type, cosmeticId } = templateParts(templateId);\n return { type, cosmeticId, name: null, cosmetic: null, imageUrl: null };\n}\n\nfunction appliedLoadoutSlots(\n attributes: Record<string, unknown>,\n items: Record<string, RawItem>,\n): Record<string, { items?: string[] }> | undefined {\n const applied = attributes['last_applied_loadout'];\n let loadout = typeof applied === 'string' ? items[applied] : undefined;\n\n if (!loadout) {\n const loadouts = Array.isArray(attributes['loadouts']) ? (attributes['loadouts'] as unknown[]) : [];\n const index = typeof attributes['active_loadout_index'] === 'number' ? attributes['active_loadout_index'] : 0;\n const guid = loadouts[index] ?? loadouts[0];\n if (typeof guid === 'string') loadout = items[guid];\n }\n\n if (!loadout) {\n const entry = Object.values(items).find((item) => item.attributes?.locker_slots_data?.slots);\n loadout = entry;\n }\n\n return loadout?.attributes?.locker_slots_data?.slots;\n}\n\nfunction parseLoadout(attributes: Record<string, unknown>, items: Record<string, RawItem>): LockerLoadout {\n const slots = appliedLoadoutSlots(attributes, items);\n\n const single = (slotKey: string, legacyKey: string): LockerSlot | null => {\n const equipped = slots?.[slotKey]?.items?.find((value) => typeof value === 'string' && value.length > 0);\n if (equipped) return slotFrom(equipped, items);\n return slotFrom(attributes[legacyKey], items);\n };\n\n const many = (slotKey: string, legacyKey: string): LockerSlot[] => {\n const fromSlots = (slots?.[slotKey]?.items ?? []).map((value) => slotFrom(value, items)).filter(nonNull);\n if (fromSlots.length > 0) return fromSlots;\n const legacy = Array.isArray(attributes[legacyKey]) ? (attributes[legacyKey] as unknown[]) : [];\n return legacy.map((value) => slotFrom(value, items)).filter(nonNull);\n };\n\n return {\n character: single('Character', 'favorite_character'),\n backpack: single('Backpack', 'favorite_backpack'),\n pickaxe: single('Pickaxe', 'favorite_pickaxe'),\n glider: single('Glider', 'favorite_glider'),\n contrail: single('SkyDiveContrail', 'favorite_skydivecontrail'),\n musicPack: single('MusicPack', 'favorite_musicpack'),\n loadingScreen: single('LoadingScreen', 'favorite_loadingscreen'),\n dances: many('Dance', 'favorite_dance'),\n itemWraps: many('ItemWrap', 'favorite_itemwraps'),\n };\n}\n\nfunction slotTemplateName(slotTemplate: string): string {\n const key = slotTemplate.split(':').pop() ?? slotTemplate;\n return key;\n}\n\nfunction mergeActiveLoadout(\n loadout: LockerLoadout,\n group: LockerActiveLoadoutGroup,\n items: Record<string, RawItem>,\n): void {\n const dances: LockerSlot[] = [];\n for (const schema of Object.values(group.loadouts ?? {})) {\n for (const slot of schema.loadoutSlots ?? []) {\n if (!slot.equippedItemId) continue;\n const parsed = slotFrom(slot.equippedItemId, items);\n if (!parsed) continue;\n const name = slotTemplateName(slot.slotTemplate);\n if (name.startsWith('LoadoutSlot_Emote')) {\n dances.push(parsed);\n continue;\n }\n const key = LOCKER_SLOT_NAMES[name];\n if (key) (loadout[key] as LockerSlot) = parsed;\n }\n }\n if (dances.length > 0) loadout.dances = dances;\n}\n\nfunction loadoutSlots(loadout: LockerLoadout): LockerSlot[] {\n return [\n loadout.character,\n loadout.backpack,\n loadout.pickaxe,\n loadout.glider,\n loadout.contrail,\n loadout.musicPack,\n loadout.loadingScreen,\n ...loadout.dances,\n ...loadout.itemWraps,\n ].filter(nonNull);\n}\n\nfunction enrichSlot(slot: LockerItem | LockerSlot, map: Map<string, AnyCosmetic>): void {\n const cosmetic = map.get(slot.cosmeticId.toLowerCase()) ?? null;\n slot.cosmetic = cosmetic;\n slot.name = cosmetic ? cosmeticName(cosmetic) : null;\n slot.imageUrl = cosmetic ? cosmeticImage(cosmetic) : null;\n}\n\nfunction nonNull<T>(value: T | null): value is T {\n return value !== null;\n}\n\nfunction buildItemToSlot(category: LockerCategoryValue, itemId: string | null | undefined): string {\n if (!itemId) return '';\n if (itemId.includes(':')) return itemId;\n return `${CATEGORY_BACKEND[category]}:${itemId}`;\n}\n\nfunction normalizeVariant(variant: LockerVariantUpdate): { channel: string; active: string; owned: string[] } {\n return { channel: variant.channel, active: variant.active, owned: variant.owned ?? [] };\n}\n\nfunction modularSlots(slots: ModularSlotInput[]): Array<Record<string, unknown>> {\n return slots.map((slot) => {\n const entry: Record<string, unknown> = { slot_template: slot.slotTemplate };\n if (slot.equippedItem) entry['equipped_item'] = slot.equippedItem;\n if (slot.customizations && slot.customizations.length > 0) {\n entry['customization_info'] = slot.customizations.map((info) => ({\n channel_tag: info.channelTag,\n variant_tag: info.variantTag,\n }));\n }\n return entry;\n });\n}\n\nfunction bannerName(value: string): string {\n const idx = value.indexOf(':');\n return idx < 0 ? value : value.slice(idx + 1);\n}\n"]}
|