halo-infinite-api 5.1.2 → 5.2.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 (29) hide show
  1. package/dist/authentication/xbox-authentication-client.d.ts +2 -2
  2. package/dist/authentication/xbox-authentication-client.js +10 -7
  3. package/dist/authentication/xbox-authentication-client.js.map +1 -1
  4. package/dist/core/token-persisters/index.d.ts +4 -4
  5. package/dist/core/token-persisters/index.js +3 -1
  6. package/dist/core/token-persisters/index.js.map +1 -1
  7. package/dist/core/token-persisters/node-fs-token-persister.d.ts +1 -1
  8. package/dist/core/token-persisters/node-fs-token-persister.js +9 -6
  9. package/dist/core/token-persisters/node-fs-token-persister.js.map +1 -1
  10. package/dist/core/token-persisters/token-persister.d.ts +4 -0
  11. package/dist/core/token-persisters/token-persister.js +2 -0
  12. package/dist/core/token-persisters/token-persister.js.map +1 -0
  13. package/dist/core/token-providers/auto-token-provider.d.ts +1 -1
  14. package/dist/core/token-providers/auto-token-provider.js +9 -5
  15. package/dist/core/token-providers/auto-token-provider.js.map +1 -1
  16. package/dist/core/token-providers/spartan-token-providers/static-xsts-ticket-token-spartan-token-provider.d.ts +1 -1
  17. package/dist/core/token-providers/spartan-token-providers/static-xsts-ticket-token-spartan-token-provider.js +2 -2
  18. package/dist/core/token-providers/spartan-token-providers/static-xsts-ticket-token-spartan-token-provider.js.map +1 -1
  19. package/dist/core/xbox-client.d.ts +1 -1
  20. package/dist/index.d.ts +1 -1
  21. package/package.json +5 -1
  22. package/src/authentication/xbox-authentication-client.ts +18 -8
  23. package/src/core/token-persisters/index.ts +4 -4
  24. package/src/core/token-persisters/node-fs-token-persister.ts +16 -7
  25. package/src/core/token-persisters/token-persister.ts +4 -0
  26. package/src/core/token-providers/auto-token-provider.ts +10 -6
  27. package/src/core/token-providers/spartan-token-providers/static-xsts-ticket-token-spartan-token-provider.ts +8 -4
  28. package/src/core/xbox-client.ts +1 -1
  29. package/src/index.ts +1 -1
@@ -12,11 +12,11 @@ export interface XboxAuthenticationToken {
12
12
  refreshToken: string;
13
13
  }
14
14
  export declare class XboxAuthenticationClient {
15
- private readonly tokenPersister?;
15
+ private readonly tokenPersisterOrPromise?;
16
16
  private readonly fetchFn;
17
17
  private userTokenCache;
18
18
  private xstsTicketCache;
19
- constructor(tokenPersister?: TokenPersister | undefined, fetchFn?: FetchFunction);
19
+ constructor(tokenPersisterOrPromise?: TokenPersister | Promise<TokenPersister> | undefined, fetchFn?: FetchFunction);
20
20
  getXstsTicket(getOauth2AccessToken: () => Promise<string>, relyingParty: RelyingParty): Promise<{
21
21
  expiresAt: DateTime;
22
22
  IssueInstant: string;
@@ -8,7 +8,7 @@ export var RelyingParty;
8
8
  RelyingParty["Halo"] = "https://prod.xsts.halowaypoint.com/";
9
9
  })(RelyingParty || (RelyingParty = {}));
10
10
  export class XboxAuthenticationClient {
11
- tokenPersister;
11
+ tokenPersisterOrPromise;
12
12
  fetchFn;
13
13
  userTokenCache = new ExpiryTokenCache(async (accessToken) => {
14
14
  const result = await this.fetchFn("https://user.auth.xboxlive.com/user/authenticate", {
@@ -32,9 +32,12 @@ export class XboxAuthenticationClient {
32
32
  ...result,
33
33
  expiresAt: DateTime.fromISO(result.NotAfter),
34
34
  };
35
- await this.tokenPersister?.save("xbox.userToken", token);
35
+ await (await this.tokenPersisterOrPromise)?.save("xbox.userToken", token);
36
36
  return token;
37
- }, async () => (await this.tokenPersister?.load("xbox.userToken")) ?? null);
37
+ }, async () => {
38
+ const tokenPersister = await this.tokenPersisterOrPromise;
39
+ return ((await tokenPersister?.load("xbox.userToken")) ?? null);
40
+ });
38
41
  xstsTicketCache = new KeyedExpiryTokenCache(async (relyingParty, userToken) => {
39
42
  const result = await this.fetchFn("https://xsts.auth.xboxlive.com/xsts/authorize", {
40
43
  method: "POST",
@@ -56,11 +59,11 @@ export class XboxAuthenticationClient {
56
59
  ...result,
57
60
  expiresAt: DateTime.fromISO(result.NotAfter),
58
61
  };
59
- await this.tokenPersister?.save("xbox.xstsTicket." + relyingParty, token);
62
+ await (await this.tokenPersisterOrPromise)?.save("xbox.xstsTicket." + relyingParty, token);
60
63
  return token;
61
- }, async (relyingParty) => (await this.tokenPersister?.load("xbox.xstsTicket." + relyingParty)) ?? null);
62
- constructor(tokenPersister, fetchFn = defaultFetch) {
63
- this.tokenPersister = tokenPersister;
64
+ }, async (relyingParty) => (await (await this.tokenPersisterOrPromise)?.load("xbox.xstsTicket." + relyingParty)) ?? null);
65
+ constructor(tokenPersisterOrPromise, fetchFn = defaultFetch) {
66
+ this.tokenPersisterOrPromise = tokenPersisterOrPromise;
64
67
  this.fetchFn = fetchFn;
65
68
  }
66
69
  async getXstsTicket(getOauth2AccessToken, relyingParty) {
@@ -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,4 +1,4 @@
1
- export interface TokenPersister {
2
- load: <T>(tokenName: string) => Promise<T | null> | T | null;
3
- save: (tokenName: string, token: unknown) => Promise<void> | void;
4
- }
1
+ export { TokenPersister } from "./token-persister";
2
+ export { localStorageTokenPersister } from "./local-storage-token-persister";
3
+ export { nodeFsTokenPersister } from "./node-fs-token-persister";
4
+ export { inMemoryTokenPersister } from "./in-memory-token-persister";
@@ -1,2 +1,4 @@
1
- export {};
1
+ export { localStorageTokenPersister } from "./local-storage-token-persister";
2
+ export { nodeFsTokenPersister } from "./node-fs-token-persister";
3
+ export { inMemoryTokenPersister } from "./in-memory-token-persister";
2
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/token-persisters/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/token-persisters/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}
@@ -1,2 +1,2 @@
1
- import { TokenPersister } from ".";
1
+ import type { TokenPersister } from ".";
2
2
  export declare const nodeFsTokenPersister: TokenPersister;
@@ -1,9 +1,11 @@
1
- import fs from "fs/promises";
2
1
  export const nodeFsTokenPersister = {
3
2
  load: async (tokenName) => {
4
- const storageFileName = `./tokens/${tokenName}`;
3
+ const tokenDir = process.env.TOKEN_ROOT ||
4
+ (await import("path")).join(__dirname, "./tokens");
5
5
  try {
6
- const json = await fs.readFile(storageFileName, { encoding: "utf-8" });
6
+ const json = await (await import("fs/promises")).readFile(`${tokenDir}/${tokenName}`, {
7
+ encoding: "utf-8",
8
+ });
7
9
  return JSON.parse(json);
8
10
  }
9
11
  catch (e) {
@@ -16,9 +18,10 @@ export const nodeFsTokenPersister = {
16
18
  }
17
19
  },
18
20
  save: async (tokenName, token) => {
19
- const storageFileName = `./tokens/${tokenName}`;
20
- await fs.mkdir(`./tokens/`, { recursive: true });
21
- await fs.writeFile(storageFileName, JSON.stringify(token));
21
+ const tokenDir = process.env.TOKEN_ROOT ||
22
+ (await import("path")).join(__dirname, "./tokens");
23
+ await (await import("fs/promises")).mkdir(tokenDir, { recursive: true });
24
+ await (await import("fs/promises")).writeFile(`${tokenDir}/${tokenName}`, JSON.stringify(token));
22
25
  },
23
26
  };
24
27
  //# sourceMappingURL=node-fs-token-persister.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"node-fs-token-persister.js","sourceRoot":"","sources":["../../../src/core/token-persisters/node-fs-token-persister.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAG7B,MAAM,CAAC,MAAM,oBAAoB,GAAmB;IAClD,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QACxB,MAAM,eAAe,GAAG,YAAY,SAAS,EAAE,CAAC;QAChD,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YACvE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACzB;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACpE,OAAO,IAAI,CAAC;aACb;iBAAM;gBACL,MAAM,CAAC,CAAC;aACT;SACF;IACH,CAAC;IACD,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE;QAC/B,MAAM,eAAe,GAAG,YAAY,SAAS,EAAE,CAAC;QAChD,MAAM,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,MAAM,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7D,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"node-fs-token-persister.js","sourceRoot":"","sources":["../../../src/core/token-persisters/node-fs-token-persister.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAmB;IAClD,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QACxB,MAAM,QAAQ,GACZ,OAAO,CAAC,GAAG,CAAC,UAAU;YACtB,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACrD,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,CACjB,MAAM,MAAM,CAAC,aAAa,CAAC,CAC5B,CAAC,QAAQ,CAAC,GAAG,QAAQ,IAAI,SAAS,EAAE,EAAE;gBACrC,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACzB;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACpE,OAAO,IAAI,CAAC;aACb;iBAAM;gBACL,MAAM,CAAC,CAAC;aACT;SACF;IACH,CAAC;IACD,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE;QAC/B,MAAM,QAAQ,GACZ,OAAO,CAAC,GAAG,CAAC,UAAU;YACtB,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,MAAM,CACJ,MAAM,MAAM,CAAC,aAAa,CAAC,CAC5B,CAAC,SAAS,CAAC,GAAG,QAAQ,IAAI,SAAS,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,CAAC;CACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ export interface TokenPersister {
2
+ load: <T>(tokenName: string) => Promise<T | null> | T | null;
3
+ save: (tokenName: string, token: unknown) => Promise<void> | void;
4
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=token-persister.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-persister.js","sourceRoot":"","sources":["../../../src/core/token-persisters/token-persister.ts"],"names":[],"mappings":""}
@@ -10,5 +10,5 @@ import { FetchFunction } from "src/util/fetch-function";
10
10
  export declare class AutoTokenProvider implements SpartanTokenProvider, XboxTokenProvider {
11
11
  readonly getSpartanToken: () => Promise<string>;
12
12
  readonly getXboxLiveV3Token: () => Promise<string>;
13
- constructor(getOauth2AccessToken: () => Promise<string>, tokenPersister?: TokenPersister, fetchFn?: FetchFunction);
13
+ constructor(getOauth2AccessToken: () => Promise<string>, tokenPersister?: TokenPersister | Promise<TokenPersister>, fetchFn?: FetchFunction);
14
14
  }
@@ -10,19 +10,23 @@ export class AutoTokenProvider {
10
10
  getSpartanToken;
11
11
  getXboxLiveV3Token;
12
12
  constructor(getOauth2AccessToken, tokenPersister, fetchFn) {
13
- let actualTokenPersister;
13
+ let tokenPeristerOrPromise;
14
14
  if (tokenPersister) {
15
- actualTokenPersister = tokenPersister;
15
+ tokenPeristerOrPromise = tokenPersister;
16
16
  }
17
17
  else {
18
- actualTokenPersister = inMemoryTokenPersister;
18
+ tokenPeristerOrPromise = inMemoryTokenPersister;
19
19
  }
20
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
- }, async () => await actualTokenPersister.load("halo.authToken"), async (token) => {
25
- await actualTokenPersister.save("halo.authToken", token);
24
+ }, async () => {
25
+ const tokenPersister = await tokenPeristerOrPromise;
26
+ return await tokenPersister.load("halo.authToken");
27
+ }, async (token) => {
28
+ const tokenPersister = await tokenPeristerOrPromise;
29
+ await tokenPersister.save("halo.authToken", token);
26
30
  }, fetchFn);
27
31
  this.getSpartanToken = () => haloAuthClient.getSpartanToken();
28
32
  this.getXboxLiveV3Token = async () => {
@@ -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;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
+ {"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,cAAyD,EACzD,OAAuB;QAEvB,IAAI,sBAAgE,CAAC;QACrE,IAAI,cAAc,EAAE;YAClB,sBAAsB,GAAG,cAAc,CAAC;SACzC;aAAM;YACL,sBAAsB,GAAG,sBAAsB,CAAC;SACjD;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;YACT,MAAM,cAAc,GAAG,MAAM,sBAAsB,CAAC;YACpD,OAAO,MAAM,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACrD,CAAC,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;YACd,MAAM,cAAc,GAAG,MAAM,sBAAsB,CAAC;YACpD,MAAM,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACrD,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"}
@@ -8,5 +8,5 @@ import { SpartanTokenProvider } from ".";
8
8
  */
9
9
  export declare class StaticXstsTicketTokenSpartanTokenProvider implements SpartanTokenProvider {
10
10
  readonly getSpartanToken: () => Promise<string>;
11
- constructor(xstsTicketToken: string, tokenPersister?: TokenPersister);
11
+ constructor(xstsTicketToken: string, tokenPersister?: TokenPersister | Promise<TokenPersister>);
12
12
  }
@@ -16,8 +16,8 @@ export class StaticXstsTicketTokenSpartanTokenProvider {
16
16
  else {
17
17
  actualTokenPersister = inMemoryTokenPersister;
18
18
  }
19
- const haloAuthClient = new HaloAuthenticationClient(() => xstsTicketToken, async () => await actualTokenPersister.load("halo.authToken"), async (token) => {
20
- await actualTokenPersister.save("halo.authToken", token);
19
+ const haloAuthClient = new HaloAuthenticationClient(() => xstsTicketToken, async () => (await (await actualTokenPersister).load("halo.authToken")) ?? null, async (token) => {
20
+ await (await actualTokenPersister).save("halo.authToken", token);
21
21
  });
22
22
  this.getSpartanToken = () => haloAuthClient.getSpartanToken();
23
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"static-xsts-ticket-token-spartan-token-provider.js","sourceRoot":"","sources":["../../../../src/core/token-providers/spartan-token-providers/static-xsts-ticket-token-spartan-token-provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,oDAAoD,CAAC;AAE9F,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAE1F;;;;;GAKG;AACH,MAAM,OAAO,yCAAyC;IAGpC,eAAe,CAAwB;IAEvD,YAAY,eAAuB,EAAE,cAA+B;QAClE,IAAI,oBAAoC,CAAC;QACzC,IAAI,cAAc,EAAE;YAClB,oBAAoB,GAAG,cAAc,CAAC;SACvC;aAAM;YACL,oBAAoB,GAAG,sBAAsB,CAAC;SAC/C;QAED,MAAM,cAAc,GAAG,IAAI,wBAAwB,CACjD,GAAG,EAAE,CAAC,eAAe,EACrB,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;IAChE,CAAC;CACF"}
1
+ {"version":3,"file":"static-xsts-ticket-token-spartan-token-provider.js","sourceRoot":"","sources":["../../../../src/core/token-providers/spartan-token-providers/static-xsts-ticket-token-spartan-token-provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,oDAAoD,CAAC;AAE9F,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAE1F;;;;;GAKG;AACH,MAAM,OAAO,yCAAyC;IAGpC,eAAe,CAAwB;IAEvD,YACE,eAAuB,EACvB,cAAyD;QAEzD,IAAI,oBAA8D,CAAC;QACnE,IAAI,cAAc,EAAE;YAClB,oBAAoB,GAAG,cAAc,CAAC;SACvC;aAAM;YACL,oBAAoB,GAAG,sBAAsB,CAAC;SAC/C;QAED,MAAM,cAAc,GAAG,IAAI,wBAAwB,CACjD,GAAG,EAAE,CAAC,eAAe,EACrB,KAAK,IAAI,EAAE,CACT,CAAC,MAAM,CAAC,MAAM,oBAAoB,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,IAAI,EACrE,KAAK,EAAE,KAAK,EAAE,EAAE;YACd,MAAM,CAAC,MAAM,oBAAoB,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACnE,CAAC,CACF,CAAC;QAEF,IAAI,CAAC,eAAe,GAAG,GAAG,EAAE,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC;IAChE,CAAC;CACF"}
@@ -9,7 +9,7 @@ export declare class XboxClient {
9
9
  id: string;
10
10
  gamertag: string;
11
11
  displayPicUri: string;
12
- score: 0.0;
12
+ score: number;
13
13
  }[]>;
14
14
  recentPlayers(): Promise<unknown>;
15
15
  }
package/dist/index.d.ts CHANGED
@@ -19,6 +19,6 @@ export { MatchInfo } from "./models/halo-infinite/match-info";
19
19
  export { SpartanTokenProvider } from "./core/token-providers/spartan-token-providers";
20
20
  export { AutoTokenProvider, AutoTokenProvider as AutoXstsSpartanTokenProvider, } from "./core/token-providers/auto-token-provider";
21
21
  export { StaticXstsTicketTokenSpartanTokenProvider } from "./core/token-providers/spartan-token-providers/static-xsts-ticket-token-spartan-token-provider";
22
- export { TokenPersister } from "./core/token-persisters";
22
+ export { TokenPersister } from "./core/token-persisters/token-persister";
23
23
  export { PlaylistExperience } from "./models/halo-infinite/playlist-experience";
24
24
  export { FetchFunction } from "./util/fetch-function";
package/package.json CHANGED
@@ -1,9 +1,13 @@
1
1
  {
2
2
  "name": "halo-infinite-api",
3
3
  "type": "module",
4
- "version": "5.1.2",
4
+ "version": "5.2.0",
5
5
  "description": "An NPM package for accessing the official Halo Infinite API.",
6
6
  "main": "dist/index.js",
7
+ "exports": {
8
+ ".": "./dist/index.js",
9
+ "./token-persisters": "./dist/core/token-persisters/index.js"
10
+ },
7
11
  "scripts": {
8
12
  "prepack": "tsc --project tsconfig.app.json"
9
13
  },
@@ -44,13 +44,17 @@ export class XboxAuthenticationClient {
44
44
  ...result,
45
45
  expiresAt: DateTime.fromISO(result.NotAfter),
46
46
  };
47
- await this.tokenPersister?.save("xbox.userToken", token);
47
+ await (await this.tokenPersisterOrPromise)?.save("xbox.userToken", token);
48
48
  return token;
49
49
  },
50
- async () =>
51
- (await this.tokenPersister?.load<XboxTicket & { expiresAt: unknown }>(
52
- "xbox.userToken"
53
- )) ?? null
50
+ async () => {
51
+ const tokenPersister = await this.tokenPersisterOrPromise;
52
+ return (
53
+ (await tokenPersister?.load<XboxTicket & { expiresAt: unknown }>(
54
+ "xbox.userToken"
55
+ )) ?? null
56
+ );
57
+ }
54
58
  );
55
59
  private xstsTicketCache = new KeyedExpiryTokenCache(
56
60
  async (relyingParty: RelyingParty, userToken: string) => {
@@ -78,17 +82,23 @@ export class XboxAuthenticationClient {
78
82
  ...result,
79
83
  expiresAt: DateTime.fromISO(result.NotAfter),
80
84
  };
81
- await this.tokenPersister?.save("xbox.xstsTicket." + relyingParty, token);
85
+ await (
86
+ await this.tokenPersisterOrPromise
87
+ )?.save("xbox.xstsTicket." + relyingParty, token);
82
88
  return token;
83
89
  },
84
90
  async (relyingParty) =>
85
- (await this.tokenPersister?.load<XboxTicket & { expiresAt: unknown }>(
91
+ (await (
92
+ await this.tokenPersisterOrPromise
93
+ )?.load<XboxTicket & { expiresAt: unknown }>(
86
94
  "xbox.xstsTicket." + relyingParty
87
95
  )) ?? null
88
96
  );
89
97
 
90
98
  constructor(
91
- private readonly tokenPersister?: TokenPersister,
99
+ private readonly tokenPersisterOrPromise?:
100
+ | TokenPersister
101
+ | Promise<TokenPersister>,
92
102
  private readonly fetchFn: FetchFunction = defaultFetch
93
103
  ) {}
94
104
 
@@ -1,4 +1,4 @@
1
- export interface TokenPersister {
2
- load: <T>(tokenName: string) => Promise<T | null> | T | null;
3
- save: (tokenName: string, token: unknown) => Promise<void> | void;
4
- }
1
+ export { TokenPersister } from "./token-persister";
2
+ export { localStorageTokenPersister } from "./local-storage-token-persister";
3
+ export { nodeFsTokenPersister } from "./node-fs-token-persister";
4
+ export { inMemoryTokenPersister } from "./in-memory-token-persister";
@@ -1,11 +1,16 @@
1
- import fs from "fs/promises";
2
- import { TokenPersister } from ".";
1
+ import type { TokenPersister } from ".";
3
2
 
4
3
  export const nodeFsTokenPersister: TokenPersister = {
5
4
  load: async (tokenName) => {
6
- const storageFileName = `./tokens/${tokenName}`;
5
+ const tokenDir =
6
+ process.env.TOKEN_ROOT ||
7
+ (await import("path")).join(__dirname, "./tokens");
7
8
  try {
8
- const json = await fs.readFile(storageFileName, { encoding: "utf-8" });
9
+ const json = await (
10
+ await import("fs/promises")
11
+ ).readFile(`${tokenDir}/${tokenName}`, {
12
+ encoding: "utf-8",
13
+ });
9
14
  return JSON.parse(json);
10
15
  } catch (e) {
11
16
  if (e && typeof e === "object" && "code" in e && e.code === "ENOENT") {
@@ -16,8 +21,12 @@ export const nodeFsTokenPersister: TokenPersister = {
16
21
  }
17
22
  },
18
23
  save: async (tokenName, token) => {
19
- const storageFileName = `./tokens/${tokenName}`;
20
- await fs.mkdir(`./tokens/`, { recursive: true });
21
- await fs.writeFile(storageFileName, JSON.stringify(token));
24
+ const tokenDir =
25
+ process.env.TOKEN_ROOT ||
26
+ (await import("path")).join(__dirname, "./tokens");
27
+ await (await import("fs/promises")).mkdir(tokenDir, { recursive: true });
28
+ await (
29
+ await import("fs/promises")
30
+ ).writeFile(`${tokenDir}/${tokenName}`, JSON.stringify(token));
22
31
  },
23
32
  };
@@ -0,0 +1,4 @@
1
+ export interface TokenPersister {
2
+ load: <T>(tokenName: string) => Promise<T | null> | T | null;
3
+ save: (tokenName: string, token: unknown) => Promise<void> | void;
4
+ }
@@ -22,14 +22,14 @@ export class AutoTokenProvider
22
22
 
23
23
  constructor(
24
24
  getOauth2AccessToken: () => Promise<string>,
25
- tokenPersister?: TokenPersister,
25
+ tokenPersister?: TokenPersister | Promise<TokenPersister>,
26
26
  fetchFn?: FetchFunction
27
27
  ) {
28
- let actualTokenPersister: TokenPersister;
28
+ let tokenPeristerOrPromise: TokenPersister | Promise<TokenPersister>;
29
29
  if (tokenPersister) {
30
- actualTokenPersister = tokenPersister;
30
+ tokenPeristerOrPromise = tokenPersister;
31
31
  } else {
32
- actualTokenPersister = inMemoryTokenPersister;
32
+ tokenPeristerOrPromise = inMemoryTokenPersister;
33
33
  }
34
34
  const xboxAuthClient = new XboxAuthenticationClient(
35
35
  tokenPersister,
@@ -43,9 +43,13 @@ export class AutoTokenProvider
43
43
  );
44
44
  return xstsTicket.Token;
45
45
  },
46
- async () => await actualTokenPersister.load("halo.authToken"),
46
+ async () => {
47
+ const tokenPersister = await tokenPeristerOrPromise;
48
+ return await tokenPersister.load("halo.authToken");
49
+ },
47
50
  async (token) => {
48
- await actualTokenPersister.save("halo.authToken", token);
51
+ const tokenPersister = await tokenPeristerOrPromise;
52
+ await tokenPersister.save("halo.authToken", token);
49
53
  },
50
54
  fetchFn
51
55
  );
@@ -14,8 +14,11 @@ export class StaticXstsTicketTokenSpartanTokenProvider
14
14
  {
15
15
  public readonly getSpartanToken: () => Promise<string>;
16
16
 
17
- constructor(xstsTicketToken: string, tokenPersister?: TokenPersister) {
18
- let actualTokenPersister: TokenPersister;
17
+ constructor(
18
+ xstsTicketToken: string,
19
+ tokenPersister?: TokenPersister | Promise<TokenPersister>
20
+ ) {
21
+ let actualTokenPersister: TokenPersister | Promise<TokenPersister>;
19
22
  if (tokenPersister) {
20
23
  actualTokenPersister = tokenPersister;
21
24
  } else {
@@ -24,9 +27,10 @@ export class StaticXstsTicketTokenSpartanTokenProvider
24
27
 
25
28
  const haloAuthClient = new HaloAuthenticationClient(
26
29
  () => xstsTicketToken,
27
- async () => await actualTokenPersister.load("halo.authToken"),
30
+ async () =>
31
+ (await (await actualTokenPersister).load("halo.authToken")) ?? null,
28
32
  async (token) => {
29
- await actualTokenPersister.save("halo.authToken", token);
33
+ await (await actualTokenPersister).save("halo.authToken", token);
30
34
  }
31
35
  );
32
36
 
@@ -28,7 +28,7 @@ export class XboxClient {
28
28
  id: string;
29
29
  gamertag: string;
30
30
  displayPicUri: string;
31
- score: 0.0;
31
+ score: number;
32
32
  };
33
33
  text: string;
34
34
  }
package/src/index.ts CHANGED
@@ -28,6 +28,6 @@ export {
28
28
  AutoTokenProvider as AutoXstsSpartanTokenProvider,
29
29
  } from "./core/token-providers/auto-token-provider";
30
30
  export { StaticXstsTicketTokenSpartanTokenProvider } from "./core/token-providers/spartan-token-providers/static-xsts-ticket-token-spartan-token-provider";
31
- export { TokenPersister } from "./core/token-persisters";
31
+ export { TokenPersister } from "./core/token-persisters/token-persister";
32
32
  export { PlaylistExperience } from "./models/halo-infinite/playlist-experience";
33
33
  export { FetchFunction } from "./util/fetch-function";