halo-infinite-api 1.0.4 → 1.1.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.
Files changed (40) hide show
  1. package/dist/core/halo-infinite-client.d.ts +16 -6
  2. package/dist/core/halo-infinite-client.js +19 -4
  3. package/dist/core/halo-infinite-client.js.map +1 -1
  4. package/dist/endpoints/halo-core-endpoints.d.ts +2 -0
  5. package/dist/endpoints/halo-core-endpoints.js +2 -0
  6. package/dist/endpoints/halo-core-endpoints.js.map +1 -1
  7. package/dist/index.d.ts +2 -0
  8. package/dist/index.js +1 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/models/halo-infinite/api-formatted-date.d.ts +3 -0
  11. package/dist/models/halo-infinite/api-formatted-date.js +2 -0
  12. package/dist/models/halo-infinite/api-formatted-date.js.map +1 -0
  13. package/dist/models/halo-infinite/asset-kind.d.ts +12 -0
  14. package/dist/models/halo-infinite/asset-kind.js +14 -0
  15. package/dist/models/halo-infinite/asset-kind.js.map +1 -0
  16. package/dist/models/halo-infinite/asset-version-link.d.ts +6 -0
  17. package/dist/models/halo-infinite/asset-version-link.js +2 -0
  18. package/dist/models/halo-infinite/asset-version-link.js.map +1 -0
  19. package/dist/models/halo-infinite/asset.d.ts +56 -0
  20. package/dist/models/halo-infinite/asset.js +2 -0
  21. package/dist/models/halo-infinite/asset.js.map +1 -0
  22. package/dist/models/halo-infinite/authoring-asset.d.ts +56 -0
  23. package/dist/models/halo-infinite/authoring-asset.js +2 -0
  24. package/dist/models/halo-infinite/authoring-asset.js.map +1 -0
  25. package/dist/models/halo-infinite/match-info.d.ts +5 -20
  26. package/dist/models/halo-infinite/match-outcome.d.ts +3 -1
  27. package/dist/models/halo-infinite/match-outcome.js +2 -0
  28. package/dist/models/halo-infinite/match-outcome.js.map +1 -1
  29. package/dist/models/spartan-token.d.ts +2 -3
  30. package/package.json +1 -1
  31. package/src/core/halo-infinite-client.ts +54 -16
  32. package/src/endpoints/halo-core-endpoints.ts +2 -0
  33. package/src/index.ts +2 -0
  34. package/src/models/halo-infinite/api-formatted-date.ts +3 -0
  35. package/src/models/halo-infinite/asset-kind.ts +12 -0
  36. package/src/models/halo-infinite/asset-version-link.ts +7 -0
  37. package/src/models/halo-infinite/asset.ts +59 -0
  38. package/src/models/halo-infinite/match-info.ts +5 -20
  39. package/src/models/halo-infinite/match-outcome.ts +2 -0
  40. package/src/models/spartan-token.ts +3 -1
@@ -1,11 +1,13 @@
1
+ import { MatchSkill } from "../models/halo-infinite/match-skill";
2
+ import { MatchStats } from "../models/halo-infinite/match-stats";
3
+ import { MatchType } from "../models/halo-infinite/match-type";
4
+ import { PlayerMatchHistory } from "../models/halo-infinite/player-match-history";
5
+ import { Playlist } from "../models/halo-infinite/playlist";
1
6
  import { PlaylistCsrContainer } from "../models/halo-infinite/playlist-csr-container";
2
- import { UserInfo } from "../models/halo-infinite/user-info";
3
7
  import { ServiceRecord } from "../models/halo-infinite/service-record";
4
- import { Playlist } from "../models/halo-infinite/playlist";
5
- import { MatchType } from "../models/halo-infinite/match-type";
6
- import { MatchStats } from "src/models/halo-infinite/match-stats";
7
- import { PlayerMatchHistory } from "src/models/halo-infinite/player-match-history";
8
- import { MatchSkill } from "src/models/halo-infinite/match-skill";
8
+ import { UserInfo } from "../models/halo-infinite/user-info";
9
+ import { MapAsset, UgcGameVariantAsset } from "../models/halo-infinite/asset";
10
+ import { AssetKind } from "../models/halo-infinite/asset-kind";
9
11
  interface ResultContainer<TValue> {
10
12
  Id: string;
11
13
  ResultCode: number;
@@ -15,6 +17,10 @@ interface TokenPersister {
15
17
  load: <T>(tokenName: string) => Promise<T>;
16
18
  save: (tokenName: string, token: unknown) => Promise<void>;
17
19
  }
20
+ type AssetKindTypeMap = {
21
+ [AssetKind.Map]: MapAsset;
22
+ [AssetKind.UgcGameVariant]: UgcGameVariantAsset;
23
+ };
18
24
  export declare class HaloInfiniteClient {
19
25
  private readonly haloAuthClient;
20
26
  constructor(clientId: string, redirectUri: string, getAuthCode: (authorizeUrl: string) => Promise<string>, tokenPersister?: TokenPersister);
@@ -41,5 +47,9 @@ export declare class HaloInfiniteClient {
41
47
  getPlayerMatches: (playerXuid: string, type?: MatchType, count?: number, start?: number) => Promise<PlayerMatchHistory[]>;
42
48
  getMatchStats: (matchId: string) => Promise<MatchStats<import("..").GameVariantCategory>>;
43
49
  getMatchSkill: (matchId: string, playerIds: string[]) => Promise<ResultContainer<MatchSkill>[]>;
50
+ /** Gets authoring metadata about a specific asset. */
51
+ getAsset: <TAssetType extends keyof AssetKindTypeMap>(assetType: TAssetType, assetId: string) => Promise<AssetKindTypeMap[TAssetType]>;
52
+ /** Gets metadata related to a concrete version of a specified asset. */
53
+ getSpecificAssetVersion: <TAssetType extends keyof AssetKindTypeMap>(assetType: TAssetType, assetId: string, versionId: string) => Promise<AssetKindTypeMap[TAssetType]>;
44
54
  }
45
55
  export {};
@@ -1,9 +1,14 @@
1
1
  import axios, { AxiosHeaders } from "axios";
2
- import { HaloCoreEndpoints } from "../endpoints/halo-core-endpoints";
3
- import { GlobalConstants } from "../util/global-contants";
4
- import { RelyingParty, XboxAuthenticationClient, } from "../authentication/xbox-authentication-client";
5
2
  import { HaloAuthenticationClient } from "../authentication/halo-authentication-client";
3
+ import { RelyingParty, XboxAuthenticationClient, } from "../authentication/xbox-authentication-client";
4
+ import { HaloCoreEndpoints } from "../endpoints/halo-core-endpoints";
6
5
  import { MatchType } from "../models/halo-infinite/match-type";
6
+ import { GlobalConstants } from "../util/global-contants";
7
+ import { AssetKind } from "../models/halo-infinite/asset-kind";
8
+ const assetKindUrlMap = {
9
+ [AssetKind.Map]: "Maps",
10
+ [AssetKind.UgcGameVariant]: "UgcGameVariants",
11
+ };
7
12
  export class HaloInfiniteClient {
8
13
  haloAuthClient;
9
14
  constructor(clientId, redirectUri, getAuthCode, tokenPersister) {
@@ -85,8 +90,18 @@ export class HaloInfiniteClient {
85
90
  * @param playlistId - Unique ID for the playlist.
86
91
  */
87
92
  getPlaylist = (playlistId) => this.executeRequest(`https://${HaloCoreEndpoints.GameCmsOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/multiplayer/file/playlists/assets/${playlistId}.json`, "get");
88
- getPlayerMatches = (playerXuid, type = MatchType.All, count = 25, start = 0) => this.executePaginationRequest(count, start, { type: type.toString() }, `https://${HaloCoreEndpoints.StatsOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/players/xuid(${playerXuid})/matches`, "get");
93
+ getPlayerMatches = (playerXuid, type = MatchType.All, count = 25, start = 0) => {
94
+ let params = {};
95
+ if (type !== MatchType.All) {
96
+ params.type = type.toString();
97
+ }
98
+ return this.executePaginationRequest(count, start, params, `https://${HaloCoreEndpoints.StatsOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/players/xuid(${playerXuid})/matches`, "get");
99
+ };
89
100
  getMatchStats = (matchId) => this.executeRequest(`https://${HaloCoreEndpoints.StatsOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/matches/${matchId}/stats`, "get");
90
101
  getMatchSkill = (matchId, playerIds) => this.executeResultsRequest(`https://${HaloCoreEndpoints.SkillOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/matches/${matchId}/skill?players=xuid(${playerIds.join("),xuid(")})`, "get");
102
+ /** Gets authoring metadata about a specific asset. */
103
+ getAsset = (assetType, assetId) => this.executeRequest(`https://${HaloCoreEndpoints.DiscoveryOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/${assetKindUrlMap[assetType]}/${assetId}`, "get");
104
+ /** Gets metadata related to a concrete version of a specified asset. */
105
+ getSpecificAssetVersion = (assetType, assetId, versionId) => this.executeRequest(`https://${HaloCoreEndpoints.DiscoveryOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/${assetKindUrlMap[assetType]}/${assetId}/versions/${versionId}`, "get");
91
106
  }
92
107
  //# 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":"AAAA,OAAO,KAAK,EAAE,EAAE,YAAY,EAAU,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,EACL,YAAY,EACZ,wBAAwB,GACzB,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAGrE,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAM/D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AA6B/D,MAAM,eAAe,GAAG;IACtB,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM;IACvB,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,iBAAiB;CAG9C,CAAC;AAEF,MAAM,OAAO,kBAAkB;IACZ,cAAc,CAA2B;IAE1D,YACE,QAAgB,EAChB,WAAmB,EACnB,WAAsD,EACtD,cAA+B;QAE/B,MAAM,cAAc,GAAG,IAAI,wBAAwB,CACjD,QAAQ,EACR,WAAW,EACX,WAAW,EACX,KAAK,IAAI,EAAE;YACT,IAAI,cAAc,EAAE;gBAClB,OAAO,MAAM,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;aACpD;iBAAM;gBACL,OAAO,IAAI,CAAC;aACb;QACH,CAAC,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;YACd,IAAI,cAAc,EAAE;gBAClB,MAAM,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;aACpD;QACH,CAAC,CACF,CAAC;QACF,IAAI,CAAC,cAAc,GAAG,IAAI,wBAAwB,CAChD,KAAK,IAAI,EAAE;YACT,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,cAAc,EAAE,CAAC;YAC1D,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YACjE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,aAAa,CACnD,SAAS,EACT,YAAY,CAAC,IAAI,CAClB,CAAC;YACF,OAAO,UAAU,CAAC,KAAK,CAAC;QAC1B,CAAC,EACD,KAAK,IAAI,EAAE;YACT,IAAI,cAAc,EAAE;gBAClB,OAAO,MAAM,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;aACpD;iBAAM;gBACL,OAAO,IAAI,CAAC;aACb;QACH,CAAC,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;YACd,IAAI,cAAc,EAAE;gBAClB,MAAM,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;aACpD;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,GAAW,EACX,MAAc,EACd,eAAe,GAAG,IAAI,EACtB,YAAY,GAAG,KAAK,EACpB,YAAoB,eAAe,CAAC,wBAAwB;QAE5D,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC;YAC/B,YAAY,EAAE,SAAS;YACvB,MAAM,EAAE,kBAAkB;SAC3B,CAAC,CAAC;QAEH,IAAI,eAAe,EAAE;YACnB,OAAO,CAAC,GAAG,CACT,6BAA6B,EAC7B,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,CAC5C,CAAC;SACH;QAED,IAAI,YAAY,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;SAC9C;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAI;YACtC,GAAG;YACH,MAAM;YACN,OAAO;SACR,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,qBAAqB,CACjC,GAAG,IAAsD;QAEzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAsB,GAAG,IAAI,CAAC,CAAC;QAEvE,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,wBAAwB,CACpC,KAAa,EACb,KAAa,EACb,eAAuC,EACvC,GAAG,IAAsD;QAEzD,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CACtC,GAAG,GAAG,IAAI,IAAI,eAAe,CAAC;YAC5B,GAAG,eAAe;YAClB,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE;YACvB,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE;SACxB,CAAC,EAAE,EACJ,GAAG,IAAI,CACR,CAAC;QAEF,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;;OAGG;IACI,cAAc,GAAG,CAAC,UAAkB,EAAE,SAAmB,EAAE,EAAE,CAClE,IAAI,CAAC,qBAAqB,CACxB,WAAW,iBAAiB,CAAC,WAAW,IACtC,iBAAiB,CAAC,aACpB,gBAAgB,UAAU,sBAAsB,SAAS,CAAC,IAAI,CAC5D,SAAS,CACV,GAAG,EACJ,KAAK,CACN,CAAC;IAEJ;;OAEG;IACI,OAAO,GAAG,CAAC,QAAgB,EAAE,EAAE,CACpC,IAAI,CAAC,cAAc,CACjB,WAAW,iBAAiB,CAAC,OAAO,IAAI,iBAAiB,CAAC,aAAa,aAAa,QAAQ,GAAG,EAC/F,KAAK,CACN,CAAC;IAEJ;;OAEG;IACI,oBAAoB,GAAG,CAAC,QAAgB,EAAE,EAAE,CACjD,IAAI,CAAC,cAAc,CACjB,WAAW,iBAAiB,CAAC,WAAW,IAAI,iBAAiB,CAAC,aAAa,eAAe,QAAQ,0BAA0B,EAC5H,KAAK,CACN,CAAC;IAEJ;;OAEG;IACI,WAAW,GAAG,CAAC,UAAkB,EAAE,EAAE,CAC1C,IAAI,CAAC,cAAc,CACjB,WAAW,iBAAiB,CAAC,aAAa,IAAI,iBAAiB,CAAC,aAAa,yCAAyC,UAAU,OAAO,EACvI,KAAK,CACN,CAAC;IAEG,gBAAgB,GAAG,CACxB,UAAkB,EAClB,OAAkB,SAAS,CAAC,GAAG,EAC/B,QAAgB,EAAE,EAClB,QAAgB,CAAC,EACjB,EAAE;QACF,IAAI,MAAM,GAA2B,EAAE,CAAC;QACxC,IAAI,IAAI,KAAK,SAAS,CAAC,GAAG,EAAE;YAC1B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;SAC/B;QACD,OAAO,IAAI,CAAC,wBAAwB,CAClC,KAAK,EACL,KAAK,EACL,MAAM,EACN,WAAW,iBAAiB,CAAC,WAAW,IAAI,iBAAiB,CAAC,aAAa,oBAAoB,UAAU,WAAW,EACpH,KAAK,CACN,CAAC;IACJ,CAAC,CAAC;IAEK,aAAa,GAAG,CAAC,OAAe,EAAE,EAAE,CACzC,IAAI,CAAC,cAAc,CACjB,WAAW,iBAAiB,CAAC,WAAW,IAAI,iBAAiB,CAAC,aAAa,eAAe,OAAO,QAAQ,EACzG,KAAK,CACN,CAAC;IAEG,aAAa,GAAG,CAAC,OAAe,EAAE,SAAmB,EAAE,EAAE,CAC9D,IAAI,CAAC,qBAAqB,CACxB,WAAW,iBAAiB,CAAC,WAAW,IACtC,iBAAiB,CAAC,aACpB,eAAe,OAAO,uBAAuB,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EACzE,KAAK,CACN,CAAC;IAEJ,sDAAsD;IAC/C,QAAQ,GAAG,CAChB,SAAqB,EACrB,OAAe,EACf,EAAE,CACF,IAAI,CAAC,cAAc,CACjB,WAAW,iBAAiB,CAAC,eAAe,IAAI,iBAAiB,CAAC,aAAa,OAAO,eAAe,CAAC,SAAS,CAAC,IAAI,OAAO,EAAE,EAC7H,KAAK,CACN,CAAC;IAEJ,wEAAwE;IACjE,uBAAuB,GAAG,CAC/B,SAAqB,EACrB,OAAe,EACf,SAAiB,EACjB,EAAE,CACF,IAAI,CAAC,cAAc,CACjB,WAAW,iBAAiB,CAAC,eAAe,IAAI,iBAAiB,CAAC,aAAa,OAAO,eAAe,CAAC,SAAS,CAAC,IAAI,OAAO,aAAa,SAAS,EAAE,EACnJ,KAAK,CACN,CAAC;CACL"}
@@ -9,6 +9,8 @@ export declare const HaloCoreEndpoints: {
9
9
  StatsOrigin: string;
10
10
  /** Game CMS origin */
11
11
  GameCmsOrigin: string;
12
+ /** Discovery origin */
13
+ DiscoveryOrigin: string;
12
14
  /** Service domain */
13
15
  ServiceDomain: string;
14
16
  };
@@ -9,6 +9,8 @@ export const HaloCoreEndpoints = {
9
9
  StatsOrigin: "halostats",
10
10
  /** Game CMS origin */
11
11
  GameCmsOrigin: "gamecms-hacs",
12
+ /** Discovery origin */
13
+ DiscoveryOrigin: "discovery-infiniteugc",
12
14
  /** Service domain */
13
15
  ServiceDomain: "svc.halowaypoint.com:443",
14
16
  };
@@ -1 +1 @@
1
- {"version":3,"file":"halo-core-endpoints.js","sourceRoot":"","sources":["../../src/endpoints/halo-core-endpoints.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,kDAAkD;IAClD,oBAAoB,EAAE,qDAAqD;IAE3E,mBAAmB;IACnB,WAAW,EAAE,OAAO;IACpB,qBAAqB;IACrB,OAAO,EAAE,SAAS;IAClB,mBAAmB;IACnB,WAAW,EAAE,WAAW;IACxB,sBAAsB;IACtB,aAAa,EAAE,cAAc;IAE7B,qBAAqB;IACrB,aAAa,EAAE,0BAA0B;CAC1C,CAAC"}
1
+ {"version":3,"file":"halo-core-endpoints.js","sourceRoot":"","sources":["../../src/endpoints/halo-core-endpoints.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,kDAAkD;IAClD,oBAAoB,EAAE,qDAAqD;IAE3E,mBAAmB;IACnB,WAAW,EAAE,OAAO;IACpB,qBAAqB;IACrB,OAAO,EAAE,SAAS;IAClB,mBAAmB;IACnB,WAAW,EAAE,WAAW;IACxB,sBAAsB;IACtB,aAAa,EAAE,cAAc;IAC7B,uBAAuB;IACvB,eAAe,EAAE,uBAAuB;IAExC,qBAAqB;IACrB,aAAa,EAAE,0BAA0B;CAC1C,CAAC"}
package/dist/index.d.ts CHANGED
@@ -8,3 +8,5 @@ export { GameVariantCategory } from "./models/halo-infinite/game-variant-categor
8
8
  export { MatchStats } from "./models/halo-infinite/match-stats";
9
9
  export { PlayerMatchHistory } from "./models/halo-infinite/player-match-history";
10
10
  export { Stats } from "./models/halo-infinite/stats";
11
+ export { MapAsset, UgcGameVariantAsset } from "./models/halo-infinite/asset";
12
+ export { AssetKind } from "./models/halo-infinite/asset-kind";
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { HaloInfiniteClient } from "./core/halo-infinite-client";
2
2
  export { MatchType } from "./models/halo-infinite/match-type";
3
3
  export { GameVariantCategory } from "./models/halo-infinite/game-variant-category";
4
+ export { AssetKind } from "./models/halo-infinite/asset-kind";
4
5
  //# 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,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAKjE,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAKjE,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AAKnF,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export interface ApiFormattedDate {
2
+ ISO8601Date: string;
3
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=api-formatted-date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-formatted-date.js","sourceRoot":"","sources":["../../../src/models/halo-infinite/api-formatted-date.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ export declare enum AssetKind {
2
+ Film = 0,
3
+ Map = 1,
4
+ Playlist = 2,
5
+ Prefab = 3,
6
+ TestAsset = 4,
7
+ UgcGameVariant = 5,
8
+ MapModePair = 6,
9
+ Project = 7,
10
+ Manifest = 8,
11
+ EngineGameVariant = 9
12
+ }
@@ -0,0 +1,14 @@
1
+ export var AssetKind;
2
+ (function (AssetKind) {
3
+ AssetKind[AssetKind["Film"] = 0] = "Film";
4
+ AssetKind[AssetKind["Map"] = 1] = "Map";
5
+ AssetKind[AssetKind["Playlist"] = 2] = "Playlist";
6
+ AssetKind[AssetKind["Prefab"] = 3] = "Prefab";
7
+ AssetKind[AssetKind["TestAsset"] = 4] = "TestAsset";
8
+ AssetKind[AssetKind["UgcGameVariant"] = 5] = "UgcGameVariant";
9
+ AssetKind[AssetKind["MapModePair"] = 6] = "MapModePair";
10
+ AssetKind[AssetKind["Project"] = 7] = "Project";
11
+ AssetKind[AssetKind["Manifest"] = 8] = "Manifest";
12
+ AssetKind[AssetKind["EngineGameVariant"] = 9] = "EngineGameVariant";
13
+ })(AssetKind || (AssetKind = {}));
14
+ //# sourceMappingURL=asset-kind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-kind.js","sourceRoot":"","sources":["../../../src/models/halo-infinite/asset-kind.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,SAWX;AAXD,WAAY,SAAS;IACnB,yCAAI,CAAA;IACJ,uCAAG,CAAA;IACH,iDAAQ,CAAA;IACR,6CAAM,CAAA;IACN,mDAAS,CAAA;IACT,6DAAc,CAAA;IACd,uDAAW,CAAA;IACX,+CAAO,CAAA;IACP,iDAAQ,CAAA;IACR,mEAAiB,CAAA;AACnB,CAAC,EAXW,SAAS,KAAT,SAAS,QAWpB"}
@@ -0,0 +1,6 @@
1
+ import { AssetKind } from "./asset-kind";
2
+ export interface AssetVersionLink {
3
+ AssetKind: AssetKind;
4
+ AssetId: string;
5
+ VersionId: string;
6
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=asset-version-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-version-link.js","sourceRoot":"","sources":["../../../src/models/halo-infinite/asset-version-link.ts"],"names":[],"mappings":""}
@@ -0,0 +1,56 @@
1
+ import { ApiFormattedDate } from "./api-formatted-date";
2
+ export interface Asset {
3
+ Tags: string[];
4
+ AssetId: string;
5
+ VersionId: string;
6
+ PublicName: string;
7
+ Description: string;
8
+ Files: {
9
+ Prefix: string;
10
+ FileRelativePaths: string[];
11
+ PrefixEndpoint: {
12
+ AuthorityId: string;
13
+ Path: string;
14
+ QueryString: any;
15
+ RetryPolicyId: string;
16
+ TopicName: string;
17
+ AcknowledgementTypeId: number;
18
+ AuthenticationLifetimeExtensionSupported: boolean;
19
+ ClearanceAware: boolean;
20
+ };
21
+ };
22
+ Contributors: string[];
23
+ AssetHome: number;
24
+ AssetStats: {
25
+ PlaysRecent: number;
26
+ PlaysAllTime: number;
27
+ Favorites: number;
28
+ Likes: number;
29
+ Bookmarks: number;
30
+ ParentAssetCount: number;
31
+ AverageRating: number;
32
+ NumberOfRatings: number;
33
+ };
34
+ InspectionResult: number;
35
+ CloneBehavior: number;
36
+ Order: number;
37
+ PublishedDate: ApiFormattedDate;
38
+ VersionNumber: number;
39
+ Admin: string;
40
+ }
41
+ export interface MapAsset extends Asset {
42
+ CustomData: {
43
+ NumOfObjectsOnMap: number;
44
+ TagLevelId: number;
45
+ IsBaked: boolean;
46
+ HasNodeGraph: boolean;
47
+ };
48
+ PrefabLinks: unknown[];
49
+ }
50
+ export interface UgcGameVariantAsset extends Asset {
51
+ CustomData: {
52
+ KeyValues: object;
53
+ HasNodeGraph: boolean;
54
+ };
55
+ EngineGameVariantLink?: Asset;
56
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=asset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset.js","sourceRoot":"","sources":["../../../src/models/halo-infinite/asset.ts"],"names":[],"mappings":""}
@@ -0,0 +1,56 @@
1
+ import { ApiFormattedDate } from "./api-formatted-date";
2
+ export interface Asset {
3
+ Tags: string[];
4
+ AssetId: string;
5
+ VersionId: string;
6
+ PublicName: string;
7
+ Description: string;
8
+ Files: {
9
+ Prefix: string;
10
+ FileRelativePaths: string[];
11
+ PrefixEndpoint: {
12
+ AuthorityId: string;
13
+ Path: string;
14
+ QueryString: any;
15
+ RetryPolicyId: string;
16
+ TopicName: string;
17
+ AcknowledgementTypeId: number;
18
+ AuthenticationLifetimeExtensionSupported: boolean;
19
+ ClearanceAware: boolean;
20
+ };
21
+ };
22
+ Contributors: string[];
23
+ AssetHome: number;
24
+ AssetStats: {
25
+ PlaysRecent: number;
26
+ PlaysAllTime: number;
27
+ Favorites: number;
28
+ Likes: number;
29
+ Bookmarks: number;
30
+ ParentAssetCount: number;
31
+ AverageRating: number;
32
+ NumberOfRatings: number;
33
+ };
34
+ InspectionResult: number;
35
+ CloneBehavior: number;
36
+ Order: number;
37
+ PublishedDate: ApiFormattedDate;
38
+ VersionNumber: number;
39
+ Admin: string;
40
+ }
41
+ export interface MapAsset extends Asset {
42
+ CustomData: {
43
+ NumOfObjectsOnMap: number;
44
+ TagLevelId: number;
45
+ IsBaked: boolean;
46
+ HasNodeGraph: boolean;
47
+ };
48
+ PrefabLinks: unknown[];
49
+ }
50
+ export interface UcgGameVariantAsset extends Asset {
51
+ CustomData: {
52
+ KeyValues: object;
53
+ HasNodeGraph: boolean;
54
+ };
55
+ EngineGameVariantLink?: Asset;
56
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=authoring-asset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authoring-asset.js","sourceRoot":"","sources":["../../../src/models/halo-infinite/authoring-asset.ts"],"names":[],"mappings":""}
@@ -1,3 +1,4 @@
1
+ import { AssetVersionLink } from "./asset-version-link";
1
2
  import { GameVariantCategory } from "./game-variant-category";
2
3
  import { PlaylistExperience } from "./playlist-experience";
3
4
  export interface MatchInfo<TCategory extends GameVariantCategory = GameVariantCategory> {
@@ -7,28 +8,12 @@ export interface MatchInfo<TCategory extends GameVariantCategory = GameVariantCa
7
8
  LifecycleMode: number;
8
9
  GameVariantCategory: TCategory;
9
10
  LevelId: string;
10
- MapVariant: {
11
- AssetKind: number;
12
- AssetId: string;
13
- VersionId: string;
14
- };
15
- UgcGameVariant: {
16
- AssetKind: number;
17
- AssetId: string;
18
- VersionId: string;
19
- };
11
+ MapVariant: AssetVersionLink;
12
+ UgcGameVariant: AssetVersionLink;
20
13
  ClearanceId: string;
21
- Playlist: {
22
- AssetKind: number;
23
- AssetId: string;
24
- VersionId: string;
25
- };
14
+ Playlist: AssetVersionLink;
26
15
  PlaylistExperience: PlaylistExperience;
27
- PlaylistMapModePair: {
28
- AssetKind: number;
29
- AssetId: string;
30
- VersionId: string;
31
- };
16
+ PlaylistMapModePair: AssetVersionLink;
32
17
  SeasonId: string;
33
18
  PlayableDuration: string;
34
19
  TeamsEnabled: boolean;
@@ -1,4 +1,6 @@
1
1
  export declare enum MatchOutcome {
2
+ Tie = 1,
2
3
  Win = 2,
3
- Loss = 3
4
+ Loss = 3,
5
+ DidNotFinish = 4
4
6
  }
@@ -1,6 +1,8 @@
1
1
  export var MatchOutcome;
2
2
  (function (MatchOutcome) {
3
+ MatchOutcome[MatchOutcome["Tie"] = 1] = "Tie";
3
4
  MatchOutcome[MatchOutcome["Win"] = 2] = "Win";
4
5
  MatchOutcome[MatchOutcome["Loss"] = 3] = "Loss";
6
+ MatchOutcome[MatchOutcome["DidNotFinish"] = 4] = "DidNotFinish";
5
7
  })(MatchOutcome || (MatchOutcome = {}));
6
8
  //# sourceMappingURL=match-outcome.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"match-outcome.js","sourceRoot":"","sources":["../../../src/models/halo-infinite/match-outcome.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,6CAAO,CAAA;IACP,+CAAQ,CAAA;AACV,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB"}
1
+ {"version":3,"file":"match-outcome.js","sourceRoot":"","sources":["../../../src/models/halo-infinite/match-outcome.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,6CAAO,CAAA;IACP,6CAAO,CAAA;IACP,+CAAQ,CAAA;IACR,+DAAgB,CAAA;AAClB,CAAC,EALW,YAAY,KAAZ,YAAY,QAKvB"}
@@ -1,7 +1,6 @@
1
+ import { ApiFormattedDate } from "./halo-infinite/api-formatted-date";
1
2
  export interface SpartanToken {
2
3
  SpartanToken: string;
3
- ExpiresUtc: {
4
- ISO8601Date: string;
5
- };
4
+ ExpiresUtc: ApiFormattedDate;
6
5
  TokenDuration: string;
7
6
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "halo-infinite-api",
3
3
  "type": "module",
4
- "version": "1.0.4",
4
+ "version": "1.1.0",
5
5
  "description": "An NPM package for accessing the official Halo Infinite API.",
6
6
  "main": "dist/index.js",
7
7
  "scripts": {
@@ -1,21 +1,21 @@
1
- import axios, { AxiosHeaders } from "axios";
2
- import { HaloCoreEndpoints } from "../endpoints/halo-core-endpoints";
3
- import { Method } from "axios";
4
- import { PlaylistCsrContainer } from "../models/halo-infinite/playlist-csr-container";
5
- import { GlobalConstants } from "../util/global-contants";
6
- import { UserInfo } from "../models/halo-infinite/user-info";
7
- import { ServiceRecord } from "../models/halo-infinite/service-record";
1
+ import axios, { AxiosHeaders, Method } from "axios";
2
+ import { HaloAuthenticationClient } from "../authentication/halo-authentication-client";
8
3
  import {
9
4
  RelyingParty,
10
5
  XboxAuthenticationClient,
11
- XboxAuthenticationToken,
12
6
  } from "../authentication/xbox-authentication-client";
13
- import { HaloAuthenticationClient } from "../authentication/halo-authentication-client";
14
- import { Playlist } from "../models/halo-infinite/playlist";
7
+ import { HaloCoreEndpoints } from "../endpoints/halo-core-endpoints";
8
+ import { MatchSkill } from "../models/halo-infinite/match-skill";
9
+ import { MatchStats } from "../models/halo-infinite/match-stats";
15
10
  import { MatchType } from "../models/halo-infinite/match-type";
16
- import { MatchStats } from "src/models/halo-infinite/match-stats";
17
- import { PlayerMatchHistory } from "src/models/halo-infinite/player-match-history";
18
- import { MatchSkill } from "src/models/halo-infinite/match-skill";
11
+ import { PlayerMatchHistory } from "../models/halo-infinite/player-match-history";
12
+ import { Playlist } from "../models/halo-infinite/playlist";
13
+ import { PlaylistCsrContainer } from "../models/halo-infinite/playlist-csr-container";
14
+ import { ServiceRecord } from "../models/halo-infinite/service-record";
15
+ import { UserInfo } from "../models/halo-infinite/user-info";
16
+ import { GlobalConstants } from "../util/global-contants";
17
+ import { MapAsset, UgcGameVariantAsset } from "../models/halo-infinite/asset";
18
+ import { AssetKind } from "../models/halo-infinite/asset-kind";
19
19
 
20
20
  interface ResultContainer<TValue> {
21
21
  Id: string;
@@ -39,6 +39,18 @@ interface TokenPersister {
39
39
  save: (tokenName: string, token: unknown) => Promise<void>;
40
40
  }
41
41
 
42
+ type AssetKindTypeMap = {
43
+ [AssetKind.Map]: MapAsset;
44
+ [AssetKind.UgcGameVariant]: UgcGameVariantAsset;
45
+ };
46
+
47
+ const assetKindUrlMap = {
48
+ [AssetKind.Map]: "Maps",
49
+ [AssetKind.UgcGameVariant]: "UgcGameVariants",
50
+ } satisfies {
51
+ [key in keyof AssetKindTypeMap]: string;
52
+ };
53
+
42
54
  export class HaloInfiniteClient {
43
55
  private readonly haloAuthClient: HaloAuthenticationClient;
44
56
 
@@ -195,14 +207,19 @@ export class HaloInfiniteClient {
195
207
  type: MatchType = MatchType.All,
196
208
  count: number = 25,
197
209
  start: number = 0
198
- ) =>
199
- this.executePaginationRequest<PlayerMatchHistory>(
210
+ ) => {
211
+ let params: Record<string, string> = {};
212
+ if (type !== MatchType.All) {
213
+ params.type = type.toString();
214
+ }
215
+ return this.executePaginationRequest<PlayerMatchHistory>(
200
216
  count,
201
217
  start,
202
- { type: type.toString() },
218
+ params,
203
219
  `https://${HaloCoreEndpoints.StatsOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/players/xuid(${playerXuid})/matches`,
204
220
  "get"
205
221
  );
222
+ };
206
223
 
207
224
  public getMatchStats = (matchId: string) =>
208
225
  this.executeRequest<MatchStats>(
@@ -217,4 +234,25 @@ export class HaloInfiniteClient {
217
234
  }/hi/matches/${matchId}/skill?players=xuid(${playerIds.join("),xuid(")})`,
218
235
  "get"
219
236
  );
237
+
238
+ /** Gets authoring metadata about a specific asset. */
239
+ public getAsset = <TAssetType extends keyof AssetKindTypeMap>(
240
+ assetType: TAssetType,
241
+ assetId: string
242
+ ) =>
243
+ this.executeRequest<AssetKindTypeMap[TAssetType]>(
244
+ `https://${HaloCoreEndpoints.DiscoveryOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/${assetKindUrlMap[assetType]}/${assetId}`,
245
+ "get"
246
+ );
247
+
248
+ /** Gets metadata related to a concrete version of a specified asset. */
249
+ public getSpecificAssetVersion = <TAssetType extends keyof AssetKindTypeMap>(
250
+ assetType: TAssetType,
251
+ assetId: string,
252
+ versionId: string
253
+ ) =>
254
+ this.executeRequest<AssetKindTypeMap[TAssetType]>(
255
+ `https://${HaloCoreEndpoints.DiscoveryOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/${assetKindUrlMap[assetType]}/${assetId}/versions/${versionId}`,
256
+ "get"
257
+ );
220
258
  }
@@ -10,6 +10,8 @@ export const HaloCoreEndpoints = {
10
10
  StatsOrigin: "halostats",
11
11
  /** Game CMS origin */
12
12
  GameCmsOrigin: "gamecms-hacs",
13
+ /** Discovery origin */
14
+ DiscoveryOrigin: "discovery-infiniteugc",
13
15
 
14
16
  /** Service domain */
15
17
  ServiceDomain: "svc.halowaypoint.com:443",
package/src/index.ts CHANGED
@@ -8,3 +8,5 @@ export { GameVariantCategory } from "./models/halo-infinite/game-variant-categor
8
8
  export { MatchStats } from "./models/halo-infinite/match-stats";
9
9
  export { PlayerMatchHistory } from "./models/halo-infinite/player-match-history";
10
10
  export { Stats } from "./models/halo-infinite/stats";
11
+ export { MapAsset, UgcGameVariantAsset } from "./models/halo-infinite/asset";
12
+ export { AssetKind } from "./models/halo-infinite/asset-kind";
@@ -0,0 +1,3 @@
1
+ export interface ApiFormattedDate {
2
+ ISO8601Date: string;
3
+ }
@@ -0,0 +1,12 @@
1
+ export enum AssetKind {
2
+ Film,
3
+ Map,
4
+ Playlist,
5
+ Prefab,
6
+ TestAsset,
7
+ UgcGameVariant,
8
+ MapModePair,
9
+ Project,
10
+ Manifest,
11
+ EngineGameVariant,
12
+ }
@@ -0,0 +1,7 @@
1
+ import { AssetKind } from "./asset-kind";
2
+
3
+ export interface AssetVersionLink {
4
+ AssetKind: AssetKind;
5
+ AssetId: string;
6
+ VersionId: string;
7
+ }
@@ -0,0 +1,59 @@
1
+ import { ApiFormattedDate } from "./api-formatted-date";
2
+
3
+ export interface Asset {
4
+ Tags: string[];
5
+ AssetId: string;
6
+ VersionId: string;
7
+ PublicName: string;
8
+ Description: string;
9
+ Files: {
10
+ Prefix: string;
11
+ FileRelativePaths: string[];
12
+ PrefixEndpoint: {
13
+ AuthorityId: string;
14
+ Path: string;
15
+ QueryString: any;
16
+ RetryPolicyId: string;
17
+ TopicName: string;
18
+ AcknowledgementTypeId: number;
19
+ AuthenticationLifetimeExtensionSupported: boolean;
20
+ ClearanceAware: boolean;
21
+ };
22
+ };
23
+ Contributors: string[];
24
+ AssetHome: number;
25
+ AssetStats: {
26
+ PlaysRecent: number;
27
+ PlaysAllTime: number;
28
+ Favorites: number;
29
+ Likes: number;
30
+ Bookmarks: number;
31
+ ParentAssetCount: number;
32
+ AverageRating: number;
33
+ NumberOfRatings: number;
34
+ };
35
+ InspectionResult: number;
36
+ CloneBehavior: number;
37
+ Order: number;
38
+ PublishedDate: ApiFormattedDate;
39
+ VersionNumber: number;
40
+ Admin: string;
41
+ }
42
+
43
+ export interface MapAsset extends Asset {
44
+ CustomData: {
45
+ NumOfObjectsOnMap: number;
46
+ TagLevelId: number;
47
+ IsBaked: boolean;
48
+ HasNodeGraph: boolean;
49
+ };
50
+ PrefabLinks: unknown[];
51
+ }
52
+
53
+ export interface UgcGameVariantAsset extends Asset {
54
+ CustomData: {
55
+ KeyValues: object;
56
+ HasNodeGraph: boolean;
57
+ };
58
+ EngineGameVariantLink?: Asset;
59
+ }
@@ -1,3 +1,4 @@
1
+ import { AssetVersionLink } from "./asset-version-link";
1
2
  import { GameVariantCategory } from "./game-variant-category";
2
3
  import { PlaylistExperience } from "./playlist-experience";
3
4
  export interface MatchInfo<
@@ -9,28 +10,12 @@ export interface MatchInfo<
9
10
  LifecycleMode: number;
10
11
  GameVariantCategory: TCategory;
11
12
  LevelId: string;
12
- MapVariant: {
13
- AssetKind: number;
14
- AssetId: string;
15
- VersionId: string;
16
- };
17
- UgcGameVariant: {
18
- AssetKind: number;
19
- AssetId: string;
20
- VersionId: string;
21
- };
13
+ MapVariant: AssetVersionLink;
14
+ UgcGameVariant: AssetVersionLink;
22
15
  ClearanceId: string;
23
- Playlist: {
24
- AssetKind: number;
25
- AssetId: string;
26
- VersionId: string;
27
- };
16
+ Playlist: AssetVersionLink;
28
17
  PlaylistExperience: PlaylistExperience;
29
- PlaylistMapModePair: {
30
- AssetKind: number;
31
- AssetId: string;
32
- VersionId: string;
33
- };
18
+ PlaylistMapModePair: AssetVersionLink;
34
19
  SeasonId: string;
35
20
  PlayableDuration: string;
36
21
  TeamsEnabled: boolean;
@@ -1,4 +1,6 @@
1
1
  export enum MatchOutcome {
2
+ Tie = 1,
2
3
  Win = 2,
3
4
  Loss = 3,
5
+ DidNotFinish = 4,
4
6
  }
@@ -1,5 +1,7 @@
1
+ import { ApiFormattedDate } from "./halo-infinite/api-formatted-date";
2
+
1
3
  export interface SpartanToken {
2
4
  SpartanToken: string;
3
- ExpiresUtc: { ISO8601Date: string };
5
+ ExpiresUtc: ApiFormattedDate;
4
6
  TokenDuration: string;
5
7
  }