halo-infinite-api 6.2.0 → 7.0.1

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/README.md CHANGED
@@ -9,10 +9,12 @@ The package is currently limited to the endpoints I've needed to use in other pr
9
9
  - GET https://profile.svc.halowaypoint.com/users/{gamerTag}
10
10
  - GET https://profile.svc.halowaypoint.com/users?xuids={xuids}
11
11
  - GET https://skill.svc.halowaypoint.com/hi/playlist/{playlistId}/csrs?players={playerIds}
12
+ - GET https://skill.svc.halowaypoint.com/hi/matches/{matchId}/skill
12
13
  - GET https://gamecms-hacs.svc.halowaypoint.com/hi/multiplayer/file/playlists/assets/{playlistId}.json
14
+ - GET https://gamecms-hacs.svc.halowaypoint.com/hi/Progression/file/{filename}.json
13
15
  - GET https://halostats.svc.halowaypoint.com/hi/playlist/{playlistId}/csrs?players={playerIds}
14
16
  - GET https://halostats.svc.halowaypoint.com/hi/players/xuid({playerId})/matches
15
- - GET https://skill.svc.halowaypoint.com/hi/matches/{matchId}/skill
17
+ - GET https://halostats.svc.halowaypoint.com/hi/players/{gamerTagOrWrappedXuid}/Matchmade/servicerecord
16
18
  - GET https://halostats.svc.halowaypoint.com/hi/matches/{matchId}/stats
17
19
  - GET https://discovery-infiniteugc.svc.halowaypoint.com/hi/{assetType}/{assetId}
18
20
  - GET https://discovery-infiniteugc.svc.halowaypoint.com/hi/{assetType}/{assetId}/versions/{versionId}
@@ -38,7 +40,7 @@ import { HaloInfiniteClient, AutoXstsSpartanTokenProvider } from "halo-infinite-
38
40
 
39
41
  const oauthApplication = new msal.PublicClientApplication({
40
42
  auth: {
41
- clientId: "42081d3d-4465-4c86-89ba-ea546f825335",
43
+ clientId: "00000000-0000-0000-0000-000000000000",
42
44
  authority: "https://login.live.com", // Override the default authority with the xbox one
43
45
  knownAuthorities: ["login.live.com"],
44
46
  protocolMode: "OIDC", // Shit, I actually have no idea what this does, but Microsoft says I need it
@@ -46,9 +48,9 @@ const oauthApplication = new msal.PublicClientApplication({
46
48
  });
47
49
 
48
50
  const client = new HaloInfiniteClient(
49
- // Other choice for token providers is the StaticXstsTicketTokenSpartanTokenProvider,
51
+ // Another choice for token providers is the StaticXstsTicketTokenSpartanTokenProvider,
50
52
  // which uses a preset spartan token
51
- new AutoXstsSpartanTokenProvider(async () => {
53
+ new AutoTokenProvider(async () => {
52
54
  const token = await oauthApplication.acquireTokenInteractive({
53
55
  // offline_access gives us a refresh token which we can use to continually
54
56
  // get new credentials from Microsoft as the old ones expire.
@@ -11,6 +11,7 @@ import { ServiceRecord } from "../models/halo-infinite/service-record";
11
11
  import { UserInfo } from "../models/halo-infinite/user-info";
12
12
  import { SpartanTokenProvider } from "./token-providers/spartan-token-providers";
13
13
  import { MatchesPrivacy } from "src/models/halo-infinite/matches-privacy";
14
+ import { ProgressionFileType, ProgressionFileTypeMap } from "src/models/halo-infinite/progression-file";
14
15
  export interface ResultContainer<TValue> {
15
16
  Id: string;
16
17
  ResultCode: 0 | 1;
@@ -48,13 +49,15 @@ export declare class HaloInfiniteClient {
48
49
  /** Get service record for a player.
49
50
  * @param gamerTag - Gamertag to lookup.
50
51
  */
51
- getUserServiceRecord: (gamerTag: string, init?: Omit<RequestInit, "body" | "method">) => Promise<ServiceRecord>;
52
+ getUserServiceRecord: (gamerTagOrWrappedXuid: string, queryParameters?: {
53
+ seasonId?: string;
54
+ playlistAssetId?: string;
55
+ }, init?: Omit<RequestInit, "body" | "method">) => Promise<ServiceRecord>;
52
56
  /** Get playlist information
53
57
  * @param playlistId - Unique ID for the playlist.
54
58
  */
55
59
  getPlaylist: (playlistId: string, init?: Omit<RequestInit, "body" | "method">) => Promise<Playlist>;
56
60
  getPlayerMatches: (playerXuid: string, type?: MatchType, count?: number, start?: number, init?: Omit<RequestInit, "body" | "method">) => Promise<PlayerMatchHistory[]>;
57
- getPlayerServiceRecord(playerXuid: string, init?: Omit<RequestInit, "body" | "method">): Promise<ServiceRecord>;
58
61
  getMatchStats: (matchId: string, init?: Omit<RequestInit, "body" | "method">) => Promise<MatchStats<import("..").GameVariantCategory>>;
59
62
  getMatchSkill: (matchId: string, playerIds: string[], init?: Omit<RequestInit, "body" | "method">) => Promise<ResultContainer<MatchSkill<0>>[]>;
60
63
  /** Gets authoring metadata about a specific asset. */
@@ -67,4 +70,5 @@ export declare class HaloInfiniteClient {
67
70
  }>;
68
71
  getMatchesPrivacy: (playerXuid: string, init?: Omit<RequestInit, "body" | "method">) => Promise<MatchesPrivacy>;
69
72
  updateMatchesPrivacy: (playerXuid: string, matchesPrivacy: MatchesPrivacy, init?: Omit<RequestInit, "body" | "method">) => Promise<MatchesPrivacy>;
73
+ getProgressionFile: <TFileType extends ProgressionFileType>(filename: `${TFileType}/${string}.json`, init?: Omit<RequestInit, "body" | "method">) => Promise<ProgressionFileTypeMap[TFileType]>;
70
74
  }
@@ -115,7 +115,7 @@ export class HaloInfiniteClient {
115
115
  /** Get service record for a player.
116
116
  * @param gamerTag - Gamertag to lookup.
117
117
  */
118
- getUserServiceRecord = (gamerTag, init) => this.executeRequest(`https://${HaloCoreEndpoints.StatsOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/players/${gamerTag}/Matchmade/servicerecord`, {
118
+ getUserServiceRecord = (gamerTagOrWrappedXuid, queryParameters, init) => this.executeRequest(`https://${HaloCoreEndpoints.StatsOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/players/${gamerTagOrWrappedXuid}/Matchmade/servicerecord?${new URLSearchParams(queryParameters).toString()}`, {
119
119
  ...init,
120
120
  method: "get",
121
121
  });
@@ -136,12 +136,6 @@ export class HaloInfiniteClient {
136
136
  method: "get",
137
137
  });
138
138
  };
139
- getPlayerServiceRecord(playerXuid, init) {
140
- return this.executeRequest(`https://${HaloCoreEndpoints.StatsOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/players/${wrapPlayerId(playerXuid)}/Matchmade/servicerecord`, {
141
- ...init,
142
- method: "get",
143
- });
144
- }
145
139
  getMatchStats = (matchId, init) => this.executeRequest(`https://${HaloCoreEndpoints.StatsOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/matches/${matchId}/stats`, {
146
140
  ...init,
147
141
  method: "get",
@@ -180,5 +174,9 @@ export class HaloInfiniteClient {
180
174
  body: JSON.stringify({ matchesPrivacy }),
181
175
  });
182
176
  };
177
+ getProgressionFile = (filename, init) => this.executeRequest(`https://${HaloCoreEndpoints.GameCmsOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/Progression/file/${filename}`, {
178
+ ...init,
179
+ method: "get",
180
+ });
183
181
  }
184
182
  //# sourceMappingURL=halo-infinite-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"halo-infinite-client.js","sourceRoot":"","sources":["../../src/core/halo-infinite-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"halo-infinite-client.js","sourceRoot":"","sources":["../../src/core/halo-infinite-client.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -6,7 +6,7 @@ export { AutoTokenProvider, AutoTokenProvider as AutoXstsSpartanTokenProvider, }
6
6
  export { SpartanTokenProvider } from "./core/token-providers/spartan-token-providers";
7
7
  export { StaticXstsTicketTokenSpartanTokenProvider } from "./core/token-providers/spartan-token-providers/static-xsts-ticket-token-spartan-token-provider";
8
8
  export { XboxClient } from "./core/xbox-client";
9
- export { Asset, MapAsset, PlaylistAsset, UgcGameVariantAsset, MapModePairAsset, } from "./models/halo-infinite/asset";
9
+ export { Asset, MapAsset, MapModePairAsset, PlaylistAsset, UgcGameVariantAsset, } from "./models/halo-infinite/asset";
10
10
  export { AssetKind } from "./models/halo-infinite/asset-kind";
11
11
  export { AssetVersionLink } from "./models/halo-infinite/asset-version-link";
12
12
  export { GameVariantCategory } from "./models/halo-infinite/game-variant-category";
@@ -21,9 +21,10 @@ export { Playlist } from "./models/halo-infinite/playlist";
21
21
  export { PlaylistCsr } from "./models/halo-infinite/playlist-csr";
22
22
  export { PlaylistCsrContainer } from "./models/halo-infinite/playlist-csr-container";
23
23
  export { PlaylistExperience } from "./models/halo-infinite/playlist-experience";
24
+ export { SeasonCalendarProgressionFile, CsrSeasonCalendarProgressionFile, ProgressionFileType, ProgressionFileTypeMap, SeasonProgressionFile, } from "./models/halo-infinite/progression-file";
24
25
  export { ServiceRecord } from "./models/halo-infinite/service-record";
25
26
  export { Stats } from "./models/halo-infinite/stats";
26
27
  export { UserInfo } from "./models/halo-infinite/user-info";
28
+ export { XboxTicket } from "./models/xbox-ticket";
27
29
  export { FetchFunction } from "./util/fetch-function";
28
30
  export { RequestError } from "./util/request-error";
29
- export { XboxTicket } from "./models/xbox-ticket";
package/dist/index.js CHANGED
@@ -10,5 +10,6 @@ export { MatchOutcome } from "./models/halo-infinite/match-outcome";
10
10
  export { MatchType } from "./models/halo-infinite/match-type";
11
11
  export { Privacy, } from "./models/halo-infinite/matches-privacy";
12
12
  export { PlaylistExperience } from "./models/halo-infinite/playlist-experience";
13
+ export { ProgressionFileType, } from "./models/halo-infinite/progression-file";
13
14
  export { RequestError } from "./util/request-error";
14
15
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,EACL,YAAY,EACZ,wBAAwB,GAEzB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAEL,kBAAkB,GAEnB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,IAAI,4BAA4B,GAClD,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,yCAAyC,EAAE,MAAM,gGAAgG,CAAC;AAC3J,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAQhD,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAE9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AAEnF,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAGpE,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,EAEL,OAAO,GACR,MAAM,wCAAwC,CAAC;AAKhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAKhF,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,EACL,YAAY,EACZ,wBAAwB,GAEzB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAEL,kBAAkB,GAEnB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,IAAI,4BAA4B,GAClD,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,yCAAyC,EAAE,MAAM,gGAAgG,CAAC;AAC3J,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAQhD,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAE9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AAEnF,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAGpE,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,EAEL,OAAO,GACR,MAAM,wCAAwC,CAAC;AAKhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAGL,mBAAmB,GAGpB,MAAM,yCAAyC,CAAC;AAMjD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { ApiFormattedDate } from "./api-formatted-date";
2
+ export declare enum ProgressionFileType {
3
+ Seasons = "Seasons",
4
+ Calendars = "Calendars",
5
+ "Csr/Seasons" = "Csr/Seasons"
6
+ }
7
+ export type ProgressionFileTypeMap = {
8
+ Calendars: SeasonCalendarProgressionFile;
9
+ Seasons: SeasonProgressionFile;
10
+ ["Csr/Seasons"]: CsrSeasonCalendarProgressionFile;
11
+ };
12
+ export interface SeasonCalendarProgressionFile {
13
+ Seasons: {
14
+ CsrSeasonFilePath: `Csr/Seasons/${string}.json`;
15
+ OperationTrackPath: `RewardTracks/Operations/${string}.json`;
16
+ SeasonMetadata: `Seasons/${string}.json`;
17
+ StartDate: ApiFormattedDate;
18
+ EndDate: ApiFormattedDate;
19
+ }[];
20
+ Events: {
21
+ RewardTrackPath: `RewardTracks/Events/Rituals/${string}.json`;
22
+ StartDate: ApiFormattedDate;
23
+ EndDate: ApiFormattedDate;
24
+ }[];
25
+ CareerRank: {
26
+ RewardTrackPath: `RewardTracks/CareerRanks/${string}.json`;
27
+ };
28
+ }
29
+ export interface CsrSeasonCalendarProgressionFile {
30
+ Seasons: {
31
+ CsrSeasonFilePath: `Csr/Seasons/${string}.json`;
32
+ StartDate: ApiFormattedDate;
33
+ EndDate: ApiFormattedDate;
34
+ }[];
35
+ }
36
+ export interface SeasonProgressionFile {
37
+ DateRange: string;
38
+ Name: string;
39
+ Logo: string;
40
+ Number: number;
41
+ Description: string;
42
+ SummaryBackgroundPath: string;
43
+ BattlePassSeasonUpsellBackgroundImage: string;
44
+ ChallengesBackgroundPath: string;
45
+ BattlePassLogoImage: string;
46
+ SeasonLogoImage: string;
47
+ RitualLogoImage: string;
48
+ StorefrontBackgroundImage: string;
49
+ CardBackgroundImage: string;
50
+ ProgressionBackgroundImage: string;
51
+ }
@@ -0,0 +1,7 @@
1
+ export var ProgressionFileType;
2
+ (function (ProgressionFileType) {
3
+ ProgressionFileType["Seasons"] = "Seasons";
4
+ ProgressionFileType["Calendars"] = "Calendars";
5
+ ProgressionFileType["Csr/Seasons"] = "Csr/Seasons";
6
+ })(ProgressionFileType || (ProgressionFileType = {}));
7
+ //# sourceMappingURL=progression-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progression-file.js","sourceRoot":"","sources":["../../../src/models/halo-infinite/progression-file.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC7B,0CAAmB,CAAA;IACnB,8CAAuB,CAAA;IACvB,kDAA6B,CAAA;AAC/B,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,QAI9B"}
@@ -16,7 +16,7 @@ export interface ServiceRecord {
16
16
  StockpileStats: StockpileStats;
17
17
  }
18
18
  interface Subqueries {
19
- SeasonIds: string[];
19
+ SeasonIds: (`Csr/Seasons/${string}.json` | `Seasons/${string}.json`)[];
20
20
  GameVariantCategories: number[];
21
21
  IsRanked: boolean[];
22
22
  PlaylistAssetIds: string[];
@@ -15,7 +15,7 @@ export class ExpiryTokenCache {
15
15
  // Someone either already has a token or is in the process of getting one
16
16
  // Wait for them to finish, then check for validity
17
17
  const currentToken = await this.tokenFetchPromise;
18
- if (currentToken.expiresAt > DateTime.now()) {
18
+ if (currentToken.expiresAt > DateTime.now().minus({ minute: 1 })) {
19
19
  // Current token is valid, return it
20
20
  return currentToken;
21
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"expiry-token-cache.js","sourceRoot":"","sources":["../../src/util/expiry-token-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,OAAO,gBAAgB;IAOR;IACA;IAJX,iBAAiB,GAA0C,SAAS,CAAC;IAE7E,YACmB,gBAAqD,EACrD,oBAEhB;QAHgB,qBAAgB,GAAhB,gBAAgB,CAAqC;QACrD,yBAAoB,GAApB,oBAAoB,CAEpC;IACA,CAAC;IAEJ,+DAA+D;IAC/D,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAW;QAC3B,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,yEAAyE;YACzE,mDAAmD;YACnD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC;YAElD,IAAI,YAAY,CAAC,SAAS,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE;gBAC3C,oCAAoC;gBACpC,OAAO,YAAY,CAAC;aACrB;iBAAM;gBACL,6CAA6C;gBAC7C,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,EAAU,CAAC;gBAEzD,IAAI;oBACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,CAAC;oBACtD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBACzC,OAAO,QAAQ,CAAC;iBACjB;gBAAC,OAAO,CAAC,EAAE;oBACV,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACjC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;oBACnC,MAAM,CAAC,CAAC;iBACT;aACF;SACF;aAAM;YACL,0CAA0C;YAC1C,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,EAAU,CAAC;YAEzD,IAAI;gBACF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAEpD,IAAI,aAAa,EAAE,SAAS,EAAE;oBAC5B,MAAM,SAAS,GAAG,gBAAgB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;oBAC5D,IAAI,SAAS,IAAI,SAAS,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE;wBAC3C,MAAM,QAAQ,GAAG,EAAE,GAAG,aAAa,EAAE,SAAS,EAAY,CAAC;wBAC3D,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;wBACzC,OAAO,QAAQ,CAAC;qBACjB;iBACF;gBAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,CAAC;gBACtD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACzC,OAAO,QAAQ,CAAC;aACjB;YAAC,OAAO,CAAC,EAAE;gBACV,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;gBACnC,MAAM,CAAC,CAAC;aACT;SACF;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAExD,IAAI,aAAa,EAAE,SAAS,EAAE;YAC5B,MAAM,SAAS,GAAG,gBAAgB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAC5D,IAAI,SAAS,IAAI,SAAS,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE;gBAC3C,OAAO,EAAE,GAAG,aAAa,EAAE,SAAS,EAAY,CAAC;aAClD;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
1
+ {"version":3,"file":"expiry-token-cache.js","sourceRoot":"","sources":["../../src/util/expiry-token-cache.ts"],"names":[],"mappings":"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"}
@@ -43,7 +43,7 @@ export class KeyedExpiryTokenCache {
43
43
  const existingToken = await this.getExistingToken(key);
44
44
  if (existingToken?.expiresAt) {
45
45
  const expiresAt = coalesceDateTime(existingToken.expiresAt);
46
- if (expiresAt && expiresAt > DateTime.now()) {
46
+ if (expiresAt && expiresAt > DateTime.now().minus({ minute: 1 })) {
47
47
  const newToken = { ...existingToken, expiresAt };
48
48
  tokenFetchPromise.resolve(newToken);
49
49
  return newToken;
@@ -1 +1 @@
1
- {"version":3,"file":"keyed-expiry-token-cache.js","sourceRoot":"","sources":["../../src/util/keyed-expiry-token-cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keyed-expiry-token-cache.js","sourceRoot":"","sources":["../../src/util/keyed-expiry-token-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,OAAO,qBAAqB;IAWb;IAIA;IAVF,oBAAoB,GAAG,IAAI,GAAG,EAG5C,CAAC;IAEJ,YACmB,gBAGG,EACH,oBAEwD;QANxD,qBAAgB,GAAhB,gBAAgB,CAGb;QACH,yBAAoB,GAApB,oBAAoB,CAEoC;IACxE,CAAC;IAEJ,KAAK,CAAC,QAAQ,CAAC,GAAS,EAAE,GAAG,IAAW;QACtC,IAAI,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,iBAAiB,EAAE;YACrB,yEAAyE;YACzE,mDAAmD;YACnD,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC;YAE7C,IAAI,YAAY,CAAC,SAAS,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE;gBAC3C,oCAAoC;gBACpC,OAAO,YAAY,CAAC;aACrB;iBAAM;gBACL,6CAA6C;gBAC7C,iBAAiB,GAAG,IAAI,iBAAiB,EAAU,CAAC;gBACpD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;gBAEtD,IAAI;oBACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;oBAC3D,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBACpC,OAAO,QAAQ,CAAC;iBACjB;gBAAC,OAAO,CAAC,EAAE;oBACV,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC5B,iBAAiB,GAAG,SAAS,CAAC;oBAC9B,MAAM,CAAC,CAAC;iBACT;aACF;SACF;aAAM;YACL,0CAA0C;YAC1C,iBAAiB,GAAG,IAAI,iBAAiB,EAAU,CAAC;YACpD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;YAEtD,IAAI;gBACF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBAEvD,IAAI,aAAa,EAAE,SAAS,EAAE;oBAC5B,MAAM,SAAS,GAAG,gBAAgB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;oBAC5D,IAAI,SAAS,IAAI,SAAS,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE;wBAChE,MAAM,QAAQ,GAAG,EAAE,GAAG,aAAa,EAAE,SAAS,EAAY,CAAC;wBAC3D,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;wBACpC,OAAO,QAAQ,CAAC;qBACjB;iBACF;gBAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;gBAC3D,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACpC,OAAO,QAAQ,CAAC;aACjB;YAAC,OAAO,CAAC,EAAE;gBACV,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC5B,iBAAiB,GAAG,SAAS,CAAC;gBAC9B,MAAM,CAAC,CAAC;aACT;SACF;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,GAAS;QAC9B,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAE3D,IAAI,aAAa,EAAE,SAAS,EAAE;YAC5B,MAAM,SAAS,GAAG,gBAAgB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAC5D,IAAI,SAAS,IAAI,SAAS,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE;gBAC3C,OAAO,EAAE,GAAG,aAAa,EAAE,SAAS,EAAY,CAAC;aAClD;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
package/package.json CHANGED
@@ -1,50 +1,50 @@
1
- {
2
- "name": "halo-infinite-api",
3
- "type": "module",
4
- "version": "6.2.0",
5
- "description": "An NPM package for accessing the official Halo Infinite API.",
6
- "main": "dist/index.js",
7
- "exports": {
8
- ".": "./dist/index.js",
9
- "./token-persisters": "./dist/core/token-persisters/index.js"
10
- },
11
- "scripts": {
12
- "prepack": "tsc --project tsconfig.app.json"
13
- },
14
- "repository": {
15
- "type": "git",
16
- "url": "git+https://github.com/GravlLift/halo-infinite-api.git"
17
- },
18
- "keywords": [
19
- "halo",
20
- "infinite",
21
- "api"
22
- ],
23
- "author": "GravlLift",
24
- "license": "ISC",
25
- "bugs": {
26
- "url": "https://github.com/GravlLift/halo-infinite-api/issues"
27
- },
28
- "homepage": "https://github.com/GravlLift/halo-infinite-api#readme",
29
- "devDependencies": {
30
- "@types/jest": "^29.5.0",
31
- "@types/luxon": "^3.3.0",
32
- "jest": "^29.5.0",
33
- "jest-environment-jsdom": "^29.5.0",
34
- "ts-jest": "^29.1.0",
35
- "ts-node": "^10.9.1",
36
- "typescript": "^5.0.4",
37
- "yargs": "^17.7.1"
38
- },
39
- "dependencies": {
40
- "@azure/msal-node": "^2.2.0",
41
- "axios": "^1.6.2",
42
- "expiry-map": "^2.0.0",
43
- "luxon": "^3.3.0",
44
- "pkce-challenge": "^3.1.0",
45
- "simple-oauth2": "^5.0.0"
46
- },
47
- "publishConfig": {
48
- "@GravlLift:registry": "https://npm.pkg.github.com"
49
- }
50
- }
1
+ {
2
+ "name": "halo-infinite-api",
3
+ "type": "module",
4
+ "version": "7.0.1",
5
+ "description": "An NPM package for accessing the official Halo Infinite API.",
6
+ "main": "dist/index.js",
7
+ "exports": {
8
+ ".": "./dist/index.js",
9
+ "./token-persisters": "./dist/core/token-persisters/index.js"
10
+ },
11
+ "scripts": {
12
+ "prepack": "tsc --project tsconfig.app.json"
13
+ },
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/GravlLift/halo-infinite-api.git"
17
+ },
18
+ "keywords": [
19
+ "halo",
20
+ "infinite",
21
+ "api"
22
+ ],
23
+ "author": "GravlLift",
24
+ "license": "ISC",
25
+ "bugs": {
26
+ "url": "https://github.com/GravlLift/halo-infinite-api/issues"
27
+ },
28
+ "homepage": "https://github.com/GravlLift/halo-infinite-api#readme",
29
+ "devDependencies": {
30
+ "@types/jest": "^29.5.0",
31
+ "@types/luxon": "^3.3.0",
32
+ "jest": "^29.5.0",
33
+ "jest-environment-jsdom": "^29.5.0",
34
+ "ts-jest": "^29.1.0",
35
+ "ts-node": "^10.9.1",
36
+ "typescript": "^5.0.4",
37
+ "yargs": "^17.7.1"
38
+ },
39
+ "dependencies": {
40
+ "@azure/msal-node": "^2.2.0",
41
+ "axios": "^1.6.2",
42
+ "expiry-map": "^2.0.0",
43
+ "luxon": "^3.3.0",
44
+ "pkce-challenge": "^3.1.0",
45
+ "simple-oauth2": "^5.0.0"
46
+ },
47
+ "publishConfig": {
48
+ "@GravlLift:registry": "https://npm.pkg.github.com"
49
+ }
50
+ }
@@ -19,6 +19,10 @@ import { GlobalConstants } from "../util/global-contants";
19
19
  import { SpartanTokenProvider } from "./token-providers/spartan-token-providers";
20
20
  import { RequestError } from "../util/request-error";
21
21
  import { MatchesPrivacy } from "src/models/halo-infinite/matches-privacy";
22
+ import {
23
+ ProgressionFileType,
24
+ ProgressionFileTypeMap,
25
+ } from "src/models/halo-infinite/progression-file";
22
26
 
23
27
  export interface ResultContainer<TValue> {
24
28
  Id: string;
@@ -45,10 +49,10 @@ export type AssetKindTypeMap = {
45
49
  };
46
50
 
47
51
  const assetKindUrlMap = {
48
- [AssetKind.Map]: "Maps",
49
- [AssetKind.UgcGameVariant]: "UgcGameVariants",
50
- [AssetKind.Playlist]: "Playlists",
51
- [AssetKind.MapModePair]: "MapModePairs",
52
+ [AssetKind.Map]: "Maps" as const,
53
+ [AssetKind.UgcGameVariant]: "UgcGameVariants" as const,
54
+ [AssetKind.Playlist]: "Playlists" as const,
55
+ [AssetKind.MapModePair]: "MapModePairs" as const,
52
56
  } satisfies {
53
57
  [key in keyof AssetKindTypeMap]: string;
54
58
  };
@@ -203,11 +207,16 @@ export class HaloInfiniteClient {
203
207
  * @param gamerTag - Gamertag to lookup.
204
208
  */
205
209
  public getUserServiceRecord = (
206
- gamerTag: string,
210
+ gamerTagOrWrappedXuid: string,
211
+ queryParameters?: { seasonId?: string; playlistAssetId?: string },
207
212
  init?: Omit<RequestInit, "body" | "method">
208
213
  ) =>
209
214
  this.executeRequest<ServiceRecord>(
210
- `https://${HaloCoreEndpoints.StatsOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/players/${gamerTag}/Matchmade/servicerecord`,
215
+ `https://${HaloCoreEndpoints.StatsOrigin}.${
216
+ HaloCoreEndpoints.ServiceDomain
217
+ }/hi/players/${gamerTagOrWrappedXuid}/Matchmade/servicerecord?${new URLSearchParams(
218
+ queryParameters
219
+ ).toString()}`,
211
220
  {
212
221
  ...init,
213
222
  method: "get",
@@ -254,21 +263,6 @@ export class HaloInfiniteClient {
254
263
  );
255
264
  };
256
265
 
257
- public getPlayerServiceRecord(
258
- playerXuid: string,
259
- init?: Omit<RequestInit, "body" | "method">
260
- ) {
261
- return this.executeRequest<ServiceRecord>(
262
- `https://${HaloCoreEndpoints.StatsOrigin}.${
263
- HaloCoreEndpoints.ServiceDomain
264
- }/hi/players/${wrapPlayerId(playerXuid)}/Matchmade/servicerecord`,
265
- {
266
- ...init,
267
- method: "get",
268
- }
269
- );
270
- }
271
-
272
266
  public getMatchStats = (
273
267
  matchId: string,
274
268
  init?: Omit<RequestInit, "body" | "method">
@@ -371,4 +365,15 @@ export class HaloInfiniteClient {
371
365
  }
372
366
  );
373
367
  };
368
+ public getProgressionFile = <TFileType extends ProgressionFileType>(
369
+ filename: `${TFileType}/${string}.json`,
370
+ init?: Omit<RequestInit, "body" | "method">
371
+ ): Promise<ProgressionFileTypeMap[TFileType]> =>
372
+ this.executeRequest(
373
+ `https://${HaloCoreEndpoints.GameCmsOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/Progression/file/${filename}`,
374
+ {
375
+ ...init,
376
+ method: "get",
377
+ }
378
+ );
374
379
  }
package/src/index.ts CHANGED
@@ -20,9 +20,9 @@ export { XboxClient } from "./core/xbox-client";
20
20
  export {
21
21
  Asset,
22
22
  MapAsset,
23
+ MapModePairAsset,
23
24
  PlaylistAsset,
24
25
  UgcGameVariantAsset,
25
- MapModePairAsset,
26
26
  } from "./models/halo-infinite/asset";
27
27
  export { AssetKind } from "./models/halo-infinite/asset-kind";
28
28
  export { AssetVersionLink } from "./models/halo-infinite/asset-version-link";
@@ -41,9 +41,16 @@ export { Playlist } from "./models/halo-infinite/playlist";
41
41
  export { PlaylistCsr } from "./models/halo-infinite/playlist-csr";
42
42
  export { PlaylistCsrContainer } from "./models/halo-infinite/playlist-csr-container";
43
43
  export { PlaylistExperience } from "./models/halo-infinite/playlist-experience";
44
+ export {
45
+ SeasonCalendarProgressionFile,
46
+ CsrSeasonCalendarProgressionFile,
47
+ ProgressionFileType,
48
+ ProgressionFileTypeMap,
49
+ SeasonProgressionFile,
50
+ } from "./models/halo-infinite/progression-file";
44
51
  export { ServiceRecord } from "./models/halo-infinite/service-record";
45
52
  export { Stats } from "./models/halo-infinite/stats";
46
53
  export { UserInfo } from "./models/halo-infinite/user-info";
54
+ export { XboxTicket } from "./models/xbox-ticket";
47
55
  export { FetchFunction } from "./util/fetch-function";
48
56
  export { RequestError } from "./util/request-error";
49
- export { XboxTicket } from "./models/xbox-ticket";
@@ -0,0 +1,54 @@
1
+ import { ApiFormattedDate } from "./api-formatted-date";
2
+
3
+ export enum ProgressionFileType {
4
+ Seasons = "Seasons",
5
+ Calendars = "Calendars",
6
+ "Csr/Seasons" = "Csr/Seasons",
7
+ }
8
+
9
+ export type ProgressionFileTypeMap = {
10
+ Calendars: SeasonCalendarProgressionFile;
11
+ Seasons: SeasonProgressionFile;
12
+ ["Csr/Seasons"]: CsrSeasonCalendarProgressionFile;
13
+ };
14
+
15
+ export interface SeasonCalendarProgressionFile {
16
+ Seasons: {
17
+ CsrSeasonFilePath: `Csr/Seasons/${string}.json`;
18
+ OperationTrackPath: `RewardTracks/Operations/${string}.json`;
19
+ SeasonMetadata: `Seasons/${string}.json`;
20
+ StartDate: ApiFormattedDate;
21
+ EndDate: ApiFormattedDate;
22
+ }[];
23
+ Events: {
24
+ RewardTrackPath: `RewardTracks/Events/Rituals/${string}.json`;
25
+ StartDate: ApiFormattedDate;
26
+ EndDate: ApiFormattedDate;
27
+ }[];
28
+ CareerRank: { RewardTrackPath: `RewardTracks/CareerRanks/${string}.json` };
29
+ }
30
+
31
+ export interface CsrSeasonCalendarProgressionFile {
32
+ Seasons: {
33
+ CsrSeasonFilePath: `Csr/Seasons/${string}.json`;
34
+ StartDate: ApiFormattedDate;
35
+ EndDate: ApiFormattedDate;
36
+ }[];
37
+ }
38
+
39
+ export interface SeasonProgressionFile {
40
+ DateRange: string;
41
+ Name: string;
42
+ Logo: string;
43
+ Number: number;
44
+ Description: string;
45
+ SummaryBackgroundPath: string;
46
+ BattlePassSeasonUpsellBackgroundImage: string;
47
+ ChallengesBackgroundPath: string;
48
+ BattlePassLogoImage: string;
49
+ SeasonLogoImage: string;
50
+ RitualLogoImage: string;
51
+ StorefrontBackgroundImage: string;
52
+ CardBackgroundImage: string;
53
+ ProgressionBackgroundImage: string;
54
+ }
@@ -17,7 +17,7 @@ export interface ServiceRecord {
17
17
  }
18
18
 
19
19
  interface Subqueries {
20
- SeasonIds: string[];
20
+ SeasonIds: (`Csr/Seasons/${string}.json` | `Seasons/${string}.json`)[];
21
21
  GameVariantCategories: number[];
22
22
  IsRanked: boolean[];
23
23
  PlaylistAssetIds: string[];
@@ -22,7 +22,7 @@ export class ExpiryTokenCache<
22
22
  // Wait for them to finish, then check for validity
23
23
  const currentToken = await this.tokenFetchPromise;
24
24
 
25
- if (currentToken.expiresAt > DateTime.now()) {
25
+ if (currentToken.expiresAt > DateTime.now().minus({ minute: 1 })) {
26
26
  // Current token is valid, return it
27
27
  return currentToken;
28
28
  } else {
@@ -57,7 +57,7 @@ export class KeyedExpiryTokenCache<
57
57
 
58
58
  if (existingToken?.expiresAt) {
59
59
  const expiresAt = coalesceDateTime(existingToken.expiresAt);
60
- if (expiresAt && expiresAt > DateTime.now()) {
60
+ if (expiresAt && expiresAt > DateTime.now().minus({ minute: 1 })) {
61
61
  const newToken = { ...existingToken, expiresAt } as TToken;
62
62
  tokenFetchPromise.resolve(newToken);
63
63
  return newToken;