halo-infinite-api 5.1.0 → 5.1.2

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.
@@ -0,0 +1,3 @@
1
+ {
2
+ "javascript.preferences.importModuleSpecifier": "relative"
3
+ }
@@ -1,4 +1,5 @@
1
1
  import { DateTime } from "luxon";
2
+ import { FetchFunction } from "../util/fetch-function";
2
3
  export interface Token {
3
4
  token: string;
4
5
  expiresAt: DateTime;
@@ -12,6 +13,6 @@ export declare class HaloAuthenticationClient {
12
13
  constructor(fetchXstsToken: () => Promise<string> | string, loadToken: () => Promise<{
13
14
  token: string;
14
15
  expiresAt: unknown;
15
- } | null>, saveToken: (token: Token) => Promise<void>, fetchFn?: typeof fetch);
16
+ } | null>, saveToken: (token: Token) => Promise<void>, fetchFn?: FetchFunction);
16
17
  getSpartanToken(): Promise<string>;
17
18
  }
@@ -1,5 +1,6 @@
1
1
  import { DateTime } from "luxon";
2
2
  import { ExpiryTokenCache } from "../util/expiry-token-cache";
3
+ import { defaultFetch } from "../util/fetch-function";
3
4
  export class HaloAuthenticationClient {
4
5
  fetchXstsToken;
5
6
  loadToken;
@@ -17,14 +18,14 @@ export class HaloAuthenticationClient {
17
18
  },
18
19
  ],
19
20
  };
20
- const response = await this.fetchFn("https://settings.svc.halowaypoint.com/spartan-token", {
21
+ const result = await this.fetchFn("https://settings.svc.halowaypoint.com/spartan-token", {
22
+ method: "POST",
21
23
  body: JSON.stringify(tokenRequest),
22
24
  headers: {
23
25
  "User-Agent": "HaloWaypoint/2021112313511900 CFNetwork/1327.0.4 Darwin/21.2.0",
24
26
  "Content-Type": "application/json; charset=utf-8",
25
27
  },
26
28
  });
27
- const result = (await response.json());
28
29
  const newToken = {
29
30
  token: result.SpartanToken,
30
31
  expiresAt: DateTime.fromISO(result.ExpiresUtc.ISO8601Date),
@@ -32,7 +33,7 @@ export class HaloAuthenticationClient {
32
33
  await this.saveToken(newToken);
33
34
  return newToken;
34
35
  }, () => this.loadToken());
35
- constructor(fetchXstsToken, loadToken, saveToken, fetchFn = fetch) {
36
+ constructor(fetchXstsToken, loadToken, saveToken, fetchFn = defaultFetch) {
36
37
  this.fetchXstsToken = fetchXstsToken;
37
38
  this.loadToken = loadToken;
38
39
  this.saveToken = saveToken;
@@ -1 +1 @@
1
- {"version":3,"file":"halo-authentication-client.js","sourceRoot":"","sources":["../../src/authentication/halo-authentication-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAO9D,MAAM,OAAO,wBAAwB;IAwChB;IACA;IAIA;IACA;IA7CX,iBAAiB,GAAG,IAAI,gBAAgB,CAC9C,KAAK,IAAI,EAAE;QACT,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE9C,MAAM,YAAY,GAAwB;YACxC,QAAQ,EAAE,qBAAqB;YAC/B,UAAU,EAAE,GAAG;YACf,KAAK,EAAE;gBACL;oBACE,KAAK,EAAE,SAAS;oBAChB,SAAS,EAAE,aAAa;iBACzB;aACF;SACF,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CACjC,qDAAqD,EACrD;YACE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;YAClC,OAAO,EAAE;gBACP,YAAY,EACV,gEAAgE;gBAClE,cAAc,EAAE,iCAAiC;aAClD;SACF,CACF,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiB,CAAC;QAEvD,MAAM,QAAQ,GAAG;YACf,KAAK,EAAE,MAAM,CAAC,YAAY;YAC1B,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC;SAC3D,CAAC;QACF,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC/B,OAAO,QAAQ,CAAC;IAClB,CAAC,EACD,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CACvB,CAAC;IAEF,YACmB,cAA8C,EAC9C,SAGR,EACQ,SAA0C,EAC1C,UAAwB,KAAK;QAN7B,mBAAc,GAAd,cAAc,CAAgC;QAC9C,cAAS,GAAT,SAAS,CAGjB;QACQ,cAAS,GAAT,SAAS,CAAiC;QAC1C,YAAO,GAAP,OAAO,CAAsB;IAC7C,CAAC;IAEG,KAAK,CAAC,eAAe;QAC1B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
1
+ {"version":3,"file":"halo-authentication-client.js","sourceRoot":"","sources":["../../src/authentication/halo-authentication-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAiB,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAOrE,MAAM,OAAO,wBAAwB;IAuChB;IACA;IAIA;IACA;IA5CX,iBAAiB,GAAG,IAAI,gBAAgB,CAC9C,KAAK,IAAI,EAAE;QACT,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE9C,MAAM,YAAY,GAAwB;YACxC,QAAQ,EAAE,qBAAqB;YAC/B,UAAU,EAAE,GAAG;YACf,KAAK,EAAE;gBACL;oBACE,KAAK,EAAE,SAAS;oBAChB,SAAS,EAAE,aAAa;iBACzB;aACF;SACF,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAC/B,qDAAqD,EACrD;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;YAClC,OAAO,EAAE;gBACP,YAAY,EACV,gEAAgE;gBAClE,cAAc,EAAE,iCAAiC;aAClD;SACF,CACF,CAAC;QAEF,MAAM,QAAQ,GAAG;YACf,KAAK,EAAE,MAAM,CAAC,YAAY;YAC1B,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC;SAC3D,CAAC;QACF,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC/B,OAAO,QAAQ,CAAC;IAClB,CAAC,EACD,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CACvB,CAAC;IAEF,YACmB,cAA8C,EAC9C,SAGR,EACQ,SAA0C,EAC1C,UAAyB,YAAY;QANrC,mBAAc,GAAd,cAAc,CAAgC;QAC9C,cAAS,GAAT,SAAS,CAGjB;QACQ,cAAS,GAAT,SAAS,CAAiC;QAC1C,YAAO,GAAP,OAAO,CAA8B;IACrD,CAAC;IAEG,KAAK,CAAC,eAAe;QAC1B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -1,6 +1,7 @@
1
1
  import { DateTime } from "luxon";
2
2
  import { TokenPersister } from "../core/token-persisters";
3
3
  import { XboxTicket } from "../models/xbox-ticket";
4
+ import { FetchFunction } from "../util/fetch-function";
4
5
  export declare enum RelyingParty {
5
6
  Xbox = "http://xboxlive.com",
6
7
  Halo = "https://prod.xsts.halowaypoint.com/"
@@ -15,7 +16,7 @@ export declare class XboxAuthenticationClient {
15
16
  private readonly fetchFn;
16
17
  private userTokenCache;
17
18
  private xstsTicketCache;
18
- constructor(tokenPersister?: TokenPersister | undefined, fetchFn?: typeof fetch);
19
+ constructor(tokenPersister?: TokenPersister | undefined, fetchFn?: FetchFunction);
19
20
  getXstsTicket(getOauth2AccessToken: () => Promise<string>, relyingParty: RelyingParty): Promise<{
20
21
  expiresAt: DateTime;
21
22
  IssueInstant: string;
@@ -1,6 +1,7 @@
1
1
  import { DateTime } from "luxon";
2
2
  import { KeyedExpiryTokenCache } from "../util/keyed-expiry-token-cache";
3
3
  import { ExpiryTokenCache } from "../util/expiry-token-cache";
4
+ import { defaultFetch } from "../util/fetch-function";
4
5
  export var RelyingParty;
5
6
  (function (RelyingParty) {
6
7
  RelyingParty["Xbox"] = "http://xboxlive.com";
@@ -10,7 +11,7 @@ export class XboxAuthenticationClient {
10
11
  tokenPersister;
11
12
  fetchFn;
12
13
  userTokenCache = new ExpiryTokenCache(async (accessToken) => {
13
- const response = await this.fetchFn("https://user.auth.xboxlive.com/user/authenticate", {
14
+ const result = await this.fetchFn("https://user.auth.xboxlive.com/user/authenticate", {
14
15
  method: "POST",
15
16
  headers: {
16
17
  "Content-Type": "application/json",
@@ -27,7 +28,6 @@ export class XboxAuthenticationClient {
27
28
  },
28
29
  }),
29
30
  });
30
- const result = (await response.json());
31
31
  const token = {
32
32
  ...result,
33
33
  expiresAt: DateTime.fromISO(result.NotAfter),
@@ -36,7 +36,7 @@ export class XboxAuthenticationClient {
36
36
  return token;
37
37
  }, async () => (await this.tokenPersister?.load("xbox.userToken")) ?? null);
38
38
  xstsTicketCache = new KeyedExpiryTokenCache(async (relyingParty, userToken) => {
39
- const response = await this.fetchFn("https://xsts.auth.xboxlive.com/xsts/authorize", {
39
+ const result = await this.fetchFn("https://xsts.auth.xboxlive.com/xsts/authorize", {
40
40
  method: "POST",
41
41
  headers: {
42
42
  "Content-Type": "application/json",
@@ -52,7 +52,6 @@ export class XboxAuthenticationClient {
52
52
  },
53
53
  }),
54
54
  });
55
- const result = (await response.json());
56
55
  const token = {
57
56
  ...result,
58
57
  expiresAt: DateTime.fromISO(result.NotAfter),
@@ -60,7 +59,7 @@ export class XboxAuthenticationClient {
60
59
  await this.tokenPersister?.save("xbox.xstsTicket." + relyingParty, token);
61
60
  return token;
62
61
  }, async (relyingParty) => (await this.tokenPersister?.load("xbox.xstsTicket." + relyingParty)) ?? null);
63
- constructor(tokenPersister, fetchFn = fetch) {
62
+ constructor(tokenPersister, fetchFn = defaultFetch) {
64
63
  this.tokenPersister = tokenPersister;
65
64
  this.fetchFn = fetchFn;
66
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"xbox-authentication-client.js","sourceRoot":"","sources":["../../src/authentication/xbox-authentication-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xbox-authentication-client.js","sourceRoot":"","sources":["../../src/authentication/xbox-authentication-client.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { FetchFunction } from "../util/fetch-function";
1
2
  import { MapAsset, PlaylistAsset, UgcGameVariantAsset } from "../models/halo-infinite/asset";
2
3
  import { AssetKind } from "../models/halo-infinite/asset-kind";
3
4
  import { MatchSkill } from "../models/halo-infinite/match-skill";
@@ -20,9 +21,9 @@ export type AssetKindTypeMap = {
20
21
  [AssetKind.Playlist]: PlaylistAsset;
21
22
  };
22
23
  export declare class HaloInfiniteClient {
23
- private spartanTokenProvider;
24
+ private readonly spartanTokenProvider;
24
25
  private readonly fetchFn;
25
- constructor(spartanTokenProvider: SpartanTokenProvider, fetchFn?: typeof fetch);
26
+ constructor(spartanTokenProvider: SpartanTokenProvider, fetchFn?: FetchFunction);
26
27
  private executeRequest;
27
28
  private executeResultsRequest;
28
29
  private executePaginationRequest;
@@ -1,3 +1,4 @@
1
+ import { defaultFetch } from "../util/fetch-function";
1
2
  import { HaloCoreEndpoints } from "../endpoints/halo-core-endpoints";
2
3
  import { AssetKind } from "../models/halo-infinite/asset-kind";
3
4
  import { MatchType } from "../models/halo-infinite/match-type";
@@ -28,9 +29,9 @@ function unwrapPlayerId(playerId) {
28
29
  export class HaloInfiniteClient {
29
30
  spartanTokenProvider;
30
31
  fetchFn;
31
- constructor(spartanTokenProvider, fetchFn) {
32
+ constructor(spartanTokenProvider, fetchFn = defaultFetch) {
32
33
  this.spartanTokenProvider = spartanTokenProvider;
33
- this.fetchFn = fetchFn ?? fetch;
34
+ this.fetchFn = fetchFn;
34
35
  }
35
36
  async executeRequest(url, method, useSpartanToken = true, useClearance = false, userAgent = GlobalConstants.HALO_WAYPOINT_USER_AGENT) {
36
37
  const headers = {
@@ -44,11 +45,10 @@ export class HaloInfiniteClient {
44
45
  if (useClearance) {
45
46
  throw new Error("TODO: Implement clearance");
46
47
  }
47
- const response = await this.fetchFn(url, {
48
+ const result = await this.fetchFn(url, {
48
49
  method,
49
50
  headers,
50
51
  });
51
- const result = (await response.json());
52
52
  return result;
53
53
  }
54
54
  async executeResultsRequest(...args) {
@@ -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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"}
@@ -1,6 +1,7 @@
1
1
  import { TokenPersister } from "../token-persisters";
2
2
  import { SpartanTokenProvider } from "./spartan-token-providers";
3
3
  import { XboxTokenProvider } from "./xbox-token-provider";
4
+ import { FetchFunction } from "src/util/fetch-function";
4
5
  /**
5
6
  * A SpartanTokenProvider that fetches both the Xbox and Halo tokens in the same
6
7
  * process. This is useful for applications that do not need to contend with
@@ -9,5 +10,5 @@ import { XboxTokenProvider } from "./xbox-token-provider";
9
10
  export declare class AutoTokenProvider implements SpartanTokenProvider, XboxTokenProvider {
10
11
  readonly getSpartanToken: () => Promise<string>;
11
12
  readonly getXboxLiveV3Token: () => Promise<string>;
12
- constructor(getOauth2AccessToken: () => Promise<string>, tokenPersister?: TokenPersister);
13
+ constructor(getOauth2AccessToken: () => Promise<string>, tokenPersister?: TokenPersister, fetchFn?: FetchFunction);
13
14
  }
@@ -9,7 +9,7 @@ import { inMemoryTokenPersister } from "../token-persisters/in-memory-token-pers
9
9
  export class AutoTokenProvider {
10
10
  getSpartanToken;
11
11
  getXboxLiveV3Token;
12
- constructor(getOauth2AccessToken, tokenPersister) {
12
+ constructor(getOauth2AccessToken, tokenPersister, fetchFn) {
13
13
  let actualTokenPersister;
14
14
  if (tokenPersister) {
15
15
  actualTokenPersister = tokenPersister;
@@ -17,13 +17,13 @@ export class AutoTokenProvider {
17
17
  else {
18
18
  actualTokenPersister = inMemoryTokenPersister;
19
19
  }
20
- const xboxAuthClient = new XboxAuthenticationClient(tokenPersister);
20
+ const xboxAuthClient = new XboxAuthenticationClient(tokenPersister, fetchFn);
21
21
  const haloAuthClient = new HaloAuthenticationClient(async () => {
22
22
  const xstsTicket = await xboxAuthClient.getXstsTicket(getOauth2AccessToken, RelyingParty.Halo);
23
23
  return xstsTicket.Token;
24
24
  }, async () => await actualTokenPersister.load("halo.authToken"), async (token) => {
25
25
  await actualTokenPersister.save("halo.authToken", token);
26
- });
26
+ }, fetchFn);
27
27
  this.getSpartanToken = () => haloAuthClient.getSpartanToken();
28
28
  this.getXboxLiveV3Token = async () => {
29
29
  const xstsTicket = await xboxAuthClient.getXstsTicket(getOauth2AccessToken, RelyingParty.Xbox);
@@ -1 +1 @@
1
- {"version":3,"file":"auto-token-provider.js","sourceRoot":"","sources":["../../../src/core/token-providers/auto-token-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,wBAAwB,GACzB,MAAM,iDAAiD,CAAC;AAEzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAE3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AAGvF;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IAGZ,eAAe,CAAwB;IACvC,kBAAkB,CAAwB;IAE1D,YACE,oBAA2C,EAC3C,cAA+B;QAE/B,IAAI,oBAAoC,CAAC;QACzC,IAAI,cAAc,EAAE;YAClB,oBAAoB,GAAG,cAAc,CAAC;SACvC;aAAM;YACL,oBAAoB,GAAG,sBAAsB,CAAC;SAC/C;QACD,MAAM,cAAc,GAAG,IAAI,wBAAwB,CAAC,cAAc,CAAC,CAAC;QACpE,MAAM,cAAc,GAAG,IAAI,wBAAwB,CACjD,KAAK,IAAI,EAAE;YACT,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,aAAa,CACnD,oBAAoB,EACpB,YAAY,CAAC,IAAI,CAClB,CAAC;YACF,OAAO,UAAU,CAAC,KAAK,CAAC;QAC1B,CAAC,EACD,KAAK,IAAI,EAAE,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAC7D,KAAK,EAAE,KAAK,EAAE,EAAE;YACd,MAAM,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC,CACF,CAAC;QAEF,IAAI,CAAC,eAAe,GAAG,GAAG,EAAE,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC;QAC9D,IAAI,CAAC,kBAAkB,GAAG,KAAK,IAAI,EAAE;YACnC,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,aAAa,CACnD,oBAAoB,EACpB,YAAY,CAAC,IAAI,CAClB,CAAC;YACF,OAAO,cAAc,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACvD,CAAC,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"auto-token-provider.js","sourceRoot":"","sources":["../../../src/core/token-providers/auto-token-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,wBAAwB,GACzB,MAAM,iDAAiD,CAAC;AAEzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAE3F,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AAIvF;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IAGZ,eAAe,CAAwB;IACvC,kBAAkB,CAAwB;IAE1D,YACE,oBAA2C,EAC3C,cAA+B,EAC/B,OAAuB;QAEvB,IAAI,oBAAoC,CAAC;QACzC,IAAI,cAAc,EAAE;YAClB,oBAAoB,GAAG,cAAc,CAAC;SACvC;aAAM;YACL,oBAAoB,GAAG,sBAAsB,CAAC;SAC/C;QACD,MAAM,cAAc,GAAG,IAAI,wBAAwB,CACjD,cAAc,EACd,OAAO,CACR,CAAC;QACF,MAAM,cAAc,GAAG,IAAI,wBAAwB,CACjD,KAAK,IAAI,EAAE;YACT,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,aAAa,CACnD,oBAAoB,EACpB,YAAY,CAAC,IAAI,CAClB,CAAC;YACF,OAAO,UAAU,CAAC,KAAK,CAAC;QAC1B,CAAC,EACD,KAAK,IAAI,EAAE,CAAC,MAAM,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAC7D,KAAK,EAAE,KAAK,EAAE,EAAE;YACd,MAAM,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC,EACD,OAAO,CACR,CAAC;QAEF,IAAI,CAAC,eAAe,GAAG,GAAG,EAAE,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC;QAC9D,IAAI,CAAC,kBAAkB,GAAG,KAAK,IAAI,EAAE;YACnC,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,aAAa,CACnD,oBAAoB,EACpB,YAAY,CAAC,IAAI,CAClB,CAAC;YACF,OAAO,cAAc,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACvD,CAAC,CAAC;IACJ,CAAC;CACF"}
@@ -1,8 +1,9 @@
1
+ import { FetchFunction } from "../util/fetch-function";
1
2
  import { XboxTokenProvider } from "./token-providers/xbox-token-provider";
2
3
  export declare class XboxClient {
3
- private xboxTokenProvider;
4
+ private readonly xboxTokenProvider;
4
5
  private readonly fetchFn;
5
- constructor(xboxTokenProvider: XboxTokenProvider, fetchFn?: typeof fetch);
6
+ constructor(xboxTokenProvider: XboxTokenProvider, fetchFn?: FetchFunction);
6
7
  private executeRequest;
7
8
  searchUsers(query: string): Promise<{
8
9
  id: string;
@@ -1,12 +1,13 @@
1
+ import { defaultFetch } from "../util/fetch-function";
1
2
  export class XboxClient {
2
3
  xboxTokenProvider;
3
4
  fetchFn;
4
- constructor(xboxTokenProvider, fetchFn) {
5
+ constructor(xboxTokenProvider, fetchFn = defaultFetch) {
5
6
  this.xboxTokenProvider = xboxTokenProvider;
6
- this.fetchFn = fetchFn ?? fetch;
7
+ this.fetchFn = fetchFn;
7
8
  }
8
9
  async executeRequest(url, method) {
9
- const response = await this.fetchFn(url, {
10
+ const result = await this.fetchFn(url, {
10
11
  method,
11
12
  headers: {
12
13
  Accept: "application/json",
@@ -14,7 +15,6 @@ export class XboxClient {
14
15
  "x-xbl-contract-version": "1",
15
16
  },
16
17
  });
17
- const result = (await response.json());
18
18
  return result;
19
19
  }
20
20
  async searchUsers(query) {
@@ -1 +1 @@
1
- {"version":3,"file":"xbox-client.js","sourceRoot":"","sources":["../../src/core/xbox-client.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IAGX;IAFO,OAAO,CAAe;IACvC,YACU,iBAAoC,EAC5C,OAAsB;QADd,sBAAiB,GAAjB,iBAAiB,CAAmB;QAG5C,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,KAAK,CAAC;IAClC,CAAC;IAEO,KAAK,CAAC,cAAc,CAAI,GAAW,EAAE,MAA6B;QACxE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACvC,MAAM;YACN,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,aAAa,EAAE,MAAM,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,EAAE;gBAChE,wBAAwB,EAAE,GAAG;aAC9B;SACF,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;QAE5C,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,KAAa;QACpC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAa3C,6CAA6C,kBAAkB,CAAC,KAAK,CAAC,EAAE,EACxE,KAAK,CACN,CAAC;QACF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAEM,KAAK,CAAC,aAAa;QACxB,OAAO,MAAM,IAAI,CAAC,cAAc,CAC9B,8DAA8D,EAC9D,KAAK,CACN,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"xbox-client.js","sourceRoot":"","sources":["../../src/core/xbox-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGrE,MAAM,OAAO,UAAU;IAEF;IACA;IAFnB,YACmB,iBAAoC,EACpC,UAAyB,YAAY;QADrC,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,YAAO,GAAP,OAAO,CAA8B;IACrD,CAAC;IAEI,KAAK,CAAC,cAAc,CAAI,GAAW,EAAE,MAA6B;QACxE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAI,GAAG,EAAE;YACxC,MAAM;YACN,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,aAAa,EAAE,MAAM,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,EAAE;gBAChE,wBAAwB,EAAE,GAAG;aAC9B;SACF,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,KAAa;QACpC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAa3C,6CAA6C,kBAAkB,CAAC,KAAK,CAAC,EAAE,EACxE,KAAK,CACN,CAAC;QACF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAEM,KAAK,CAAC,aAAa;QACxB,OAAO,MAAM,IAAI,CAAC,cAAc,CAC9B,8DAA8D,EAC9D,KAAK,CACN,CAAC;IACJ,CAAC;CACF"}
package/dist/index.d.ts CHANGED
@@ -21,3 +21,4 @@ export { AutoTokenProvider, AutoTokenProvider as AutoXstsSpartanTokenProvider, }
21
21
  export { StaticXstsTicketTokenSpartanTokenProvider } from "./core/token-providers/spartan-token-providers/static-xsts-ticket-token-spartan-token-provider";
22
22
  export { TokenPersister } from "./core/token-persisters";
23
23
  export { PlaylistExperience } from "./models/halo-infinite/playlist-experience";
24
+ export { FetchFunction } from "./util/fetch-function";
@@ -0,0 +1,2 @@
1
+ export type FetchFunction = <TResponse = unknown>(input: RequestInfo | URL, init?: RequestInit) => Promise<TResponse>;
2
+ export declare const defaultFetch: <TResponse>(input: RequestInfo | URL, init?: RequestInit) => Promise<TResponse>;
@@ -0,0 +1,5 @@
1
+ export const defaultFetch = async (input, init) => {
2
+ const response = await fetch(input, init);
3
+ return response.json();
4
+ };
5
+ //# sourceMappingURL=fetch-function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-function.js","sourceRoot":"","sources":["../../src/util/fetch-function.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,KAAwB,EACxB,IAAkB,EACE,EAAE;IACtB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1C,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "halo-infinite-api",
3
3
  "type": "module",
4
- "version": "5.1.0",
4
+ "version": "5.1.2",
5
5
  "description": "An NPM package for accessing the official Halo Infinite API.",
6
6
  "main": "dist/index.js",
7
7
  "scripts": {
@@ -34,6 +34,7 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "@azure/msal-node": "^2.2.0",
37
+ "axios": "^1.6.2",
37
38
  "expiry-map": "^2.0.0",
38
39
  "luxon": "^3.3.0",
39
40
  "pkce-challenge": "^3.1.0",
@@ -2,6 +2,7 @@ import { DateTime } from "luxon";
2
2
  import type { SpartanToken } from "../models/spartan-token";
3
3
  import type { SpartanTokenRequest } from "../models/spartan-token-request";
4
4
  import { ExpiryTokenCache } from "../util/expiry-token-cache";
5
+ import { FetchFunction, defaultFetch } from "../util/fetch-function";
5
6
 
6
7
  export interface Token {
7
8
  token: string;
@@ -23,9 +24,10 @@ export class HaloAuthenticationClient {
23
24
  },
24
25
  ],
25
26
  };
26
- const response = await this.fetchFn(
27
+ const result = await this.fetchFn<SpartanToken>(
27
28
  "https://settings.svc.halowaypoint.com/spartan-token",
28
29
  {
30
+ method: "POST",
29
31
  body: JSON.stringify(tokenRequest),
30
32
  headers: {
31
33
  "User-Agent":
@@ -35,8 +37,6 @@ export class HaloAuthenticationClient {
35
37
  }
36
38
  );
37
39
 
38
- const result = (await response.json()) as SpartanToken;
39
-
40
40
  const newToken = {
41
41
  token: result.SpartanToken,
42
42
  expiresAt: DateTime.fromISO(result.ExpiresUtc.ISO8601Date),
@@ -54,7 +54,7 @@ export class HaloAuthenticationClient {
54
54
  expiresAt: unknown;
55
55
  } | null>,
56
56
  private readonly saveToken: (token: Token) => Promise<void>,
57
- private readonly fetchFn: typeof fetch = fetch
57
+ private readonly fetchFn: FetchFunction = defaultFetch
58
58
  ) {}
59
59
 
60
60
  public async getSpartanToken() {
@@ -3,6 +3,7 @@ import { TokenPersister } from "../core/token-persisters";
3
3
  import { XboxTicket } from "../models/xbox-ticket";
4
4
  import { KeyedExpiryTokenCache } from "../util/keyed-expiry-token-cache";
5
5
  import { ExpiryTokenCache } from "../util/expiry-token-cache";
6
+ import { FetchFunction, defaultFetch } from "../util/fetch-function";
6
7
 
7
8
  export enum RelyingParty {
8
9
  Xbox = "http://xboxlive.com",
@@ -18,7 +19,7 @@ export interface XboxAuthenticationToken {
18
19
  export class XboxAuthenticationClient {
19
20
  private userTokenCache = new ExpiryTokenCache(
20
21
  async (accessToken: string) => {
21
- const response = await this.fetchFn(
22
+ const result = await this.fetchFn<XboxTicket>(
22
23
  "https://user.auth.xboxlive.com/user/authenticate",
23
24
  {
24
25
  method: "POST",
@@ -39,8 +40,6 @@ export class XboxAuthenticationClient {
39
40
  }
40
41
  );
41
42
 
42
- const result = (await response.json()) as XboxTicket;
43
-
44
43
  const token = {
45
44
  ...result,
46
45
  expiresAt: DateTime.fromISO(result.NotAfter),
@@ -55,7 +54,7 @@ export class XboxAuthenticationClient {
55
54
  );
56
55
  private xstsTicketCache = new KeyedExpiryTokenCache(
57
56
  async (relyingParty: RelyingParty, userToken: string) => {
58
- const response = await this.fetchFn(
57
+ const result = await this.fetchFn<XboxTicket>(
59
58
  "https://xsts.auth.xboxlive.com/xsts/authorize",
60
59
  {
61
60
  method: "POST",
@@ -74,7 +73,6 @@ export class XboxAuthenticationClient {
74
73
  }),
75
74
  }
76
75
  );
77
- const result = (await response.json()) as XboxTicket;
78
76
 
79
77
  const token = {
80
78
  ...result,
@@ -91,7 +89,7 @@ export class XboxAuthenticationClient {
91
89
 
92
90
  constructor(
93
91
  private readonly tokenPersister?: TokenPersister,
94
- private readonly fetchFn: typeof fetch = fetch
92
+ private readonly fetchFn: FetchFunction = defaultFetch
95
93
  ) {}
96
94
 
97
95
  public async getXstsTicket(
@@ -1,3 +1,4 @@
1
+ import { FetchFunction, defaultFetch } from "../util/fetch-function";
1
2
  import { HaloCoreEndpoints } from "../endpoints/halo-core-endpoints";
2
3
  import {
3
4
  MapAsset,
@@ -66,13 +67,10 @@ function unwrapPlayerId(playerId: string) {
66
67
  }
67
68
 
68
69
  export class HaloInfiniteClient {
69
- private readonly fetchFn: typeof fetch;
70
70
  constructor(
71
- private spartanTokenProvider: SpartanTokenProvider,
72
- fetchFn?: typeof fetch
73
- ) {
74
- this.fetchFn = fetchFn ?? fetch;
75
- }
71
+ private readonly spartanTokenProvider: SpartanTokenProvider,
72
+ private readonly fetchFn: FetchFunction = defaultFetch
73
+ ) {}
76
74
 
77
75
  private async executeRequest<T>(
78
76
  url: string,
@@ -95,13 +93,11 @@ export class HaloInfiniteClient {
95
93
  throw new Error("TODO: Implement clearance");
96
94
  }
97
95
 
98
- const response = await this.fetchFn(url, {
96
+ const result = await this.fetchFn<T>(url, {
99
97
  method,
100
98
  headers,
101
99
  });
102
100
 
103
- const result = (await response.json()) as T;
104
-
105
101
  return result;
106
102
  }
107
103
 
@@ -7,6 +7,7 @@ import { HaloAuthenticationClient } from "../../authentication/halo-authenticati
7
7
  import { SpartanTokenProvider } from "./spartan-token-providers";
8
8
  import { inMemoryTokenPersister } from "../token-persisters/in-memory-token-persister";
9
9
  import { XboxTokenProvider } from "./xbox-token-provider";
10
+ import { FetchFunction } from "src/util/fetch-function";
10
11
 
11
12
  /**
12
13
  * A SpartanTokenProvider that fetches both the Xbox and Halo tokens in the same
@@ -21,7 +22,8 @@ export class AutoTokenProvider
21
22
 
22
23
  constructor(
23
24
  getOauth2AccessToken: () => Promise<string>,
24
- tokenPersister?: TokenPersister
25
+ tokenPersister?: TokenPersister,
26
+ fetchFn?: FetchFunction
25
27
  ) {
26
28
  let actualTokenPersister: TokenPersister;
27
29
  if (tokenPersister) {
@@ -29,7 +31,10 @@ export class AutoTokenProvider
29
31
  } else {
30
32
  actualTokenPersister = inMemoryTokenPersister;
31
33
  }
32
- const xboxAuthClient = new XboxAuthenticationClient(tokenPersister);
34
+ const xboxAuthClient = new XboxAuthenticationClient(
35
+ tokenPersister,
36
+ fetchFn
37
+ );
33
38
  const haloAuthClient = new HaloAuthenticationClient(
34
39
  async () => {
35
40
  const xstsTicket = await xboxAuthClient.getXstsTicket(
@@ -41,7 +46,8 @@ export class AutoTokenProvider
41
46
  async () => await actualTokenPersister.load("halo.authToken"),
42
47
  async (token) => {
43
48
  await actualTokenPersister.save("halo.authToken", token);
44
- }
49
+ },
50
+ fetchFn
45
51
  );
46
52
 
47
53
  this.getSpartanToken = () => haloAuthClient.getSpartanToken();
@@ -1,16 +1,14 @@
1
+ import { FetchFunction, defaultFetch } from "../util/fetch-function";
1
2
  import { XboxTokenProvider } from "./token-providers/xbox-token-provider";
2
3
 
3
4
  export class XboxClient {
4
- private readonly fetchFn: typeof fetch;
5
5
  constructor(
6
- private xboxTokenProvider: XboxTokenProvider,
7
- fetchFn?: typeof fetch
8
- ) {
9
- this.fetchFn = fetchFn ?? fetch;
10
- }
6
+ private readonly xboxTokenProvider: XboxTokenProvider,
7
+ private readonly fetchFn: FetchFunction = defaultFetch
8
+ ) {}
11
9
 
12
10
  private async executeRequest<T>(url: string, method: RequestInit["method"]) {
13
- const response = await this.fetchFn(url, {
11
+ const result = await this.fetchFn<T>(url, {
14
12
  method,
15
13
  headers: {
16
14
  Accept: "application/json",
@@ -19,8 +17,6 @@ export class XboxClient {
19
17
  },
20
18
  });
21
19
 
22
- const result = (await response.json()) as T;
23
-
24
20
  return result;
25
21
  }
26
22
 
package/src/index.ts CHANGED
@@ -30,3 +30,4 @@ export {
30
30
  export { StaticXstsTicketTokenSpartanTokenProvider } from "./core/token-providers/spartan-token-providers/static-xsts-ticket-token-spartan-token-provider";
31
31
  export { TokenPersister } from "./core/token-persisters";
32
32
  export { PlaylistExperience } from "./models/halo-infinite/playlist-experience";
33
+ export { FetchFunction } from "./util/fetch-function";
@@ -0,0 +1,12 @@
1
+ export type FetchFunction = <TResponse = unknown>(
2
+ input: RequestInfo | URL,
3
+ init?: RequestInit
4
+ ) => Promise<TResponse>;
5
+
6
+ export const defaultFetch = async <TResponse>(
7
+ input: RequestInfo | URL,
8
+ init?: RequestInit
9
+ ): Promise<TResponse> => {
10
+ const response = await fetch(input, init);
11
+ return response.json();
12
+ };