halo-infinite-api 4.1.0 → 5.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 (50) hide show
  1. package/dist/authentication/halo-authentication-client.d.ts +2 -1
  2. package/dist/authentication/halo-authentication-client.js +8 -5
  3. package/dist/authentication/halo-authentication-client.js.map +1 -1
  4. package/dist/authentication/xbox-authentication-client.d.ts +5 -4
  5. package/dist/authentication/xbox-authentication-client.js +43 -37
  6. package/dist/authentication/xbox-authentication-client.js.map +1 -1
  7. package/dist/core/halo-infinite-client.d.ts +4 -2
  8. package/dist/core/halo-infinite-client.js +18 -25
  9. package/dist/core/halo-infinite-client.js.map +1 -1
  10. package/dist/core/token-providers/auto-token-provider.d.ts +13 -0
  11. package/dist/core/token-providers/auto-token-provider.js +34 -0
  12. package/dist/core/token-providers/auto-token-provider.js.map +1 -0
  13. package/dist/core/token-providers/spartan-token-providers/auto-xsts-spartan-token-provider.d.ts +11 -0
  14. package/dist/core/token-providers/spartan-token-providers/auto-xsts-spartan-token-provider.js +29 -0
  15. package/dist/core/token-providers/spartan-token-providers/auto-xsts-spartan-token-provider.js.map +1 -0
  16. package/dist/core/token-providers/spartan-token-providers/index.d.ts +3 -0
  17. package/dist/core/token-providers/spartan-token-providers/index.js +2 -0
  18. package/dist/core/token-providers/spartan-token-providers/index.js.map +1 -0
  19. package/dist/core/token-providers/spartan-token-providers/static-xsts-ticket-token-spartan-token-provider.d.ts +12 -0
  20. package/dist/core/token-providers/spartan-token-providers/static-xsts-ticket-token-spartan-token-provider.js +25 -0
  21. package/dist/core/token-providers/spartan-token-providers/static-xsts-ticket-token-spartan-token-provider.js.map +1 -0
  22. package/dist/core/token-providers/xbox-token-provider.d.ts +3 -0
  23. package/dist/core/token-providers/xbox-token-provider.js +2 -0
  24. package/dist/core/token-providers/xbox-token-provider.js.map +1 -0
  25. package/dist/core/xbox-client.d.ts +14 -0
  26. package/dist/core/xbox-client.js +28 -0
  27. package/dist/core/xbox-client.js.map +1 -0
  28. package/dist/index.d.ts +4 -3
  29. package/dist/index.js +3 -2
  30. package/dist/index.js.map +1 -1
  31. package/dist/models/halo-infinite/game-variant-category.d.ts +1 -0
  32. package/dist/models/halo-infinite/game-variant-category.js +1 -0
  33. package/dist/models/halo-infinite/game-variant-category.js.map +1 -1
  34. package/dist/models/halo-infinite/stats.d.ts +44 -5
  35. package/dist/util/keyed-expiry-token-cache.d.ts +13 -0
  36. package/dist/util/keyed-expiry-token-cache.js +74 -0
  37. package/dist/util/keyed-expiry-token-cache.js.map +1 -0
  38. package/package.json +1 -2
  39. package/src/authentication/halo-authentication-client.ts +8 -7
  40. package/src/authentication/xbox-authentication-client.ts +52 -46
  41. package/src/core/halo-infinite-client.ts +39 -35
  42. package/src/core/{spartan-token-providers/auto-xsts-spartan-token-provider.ts → token-providers/auto-token-provider.ts} +15 -3
  43. package/src/core/{spartan-token-providers → token-providers/spartan-token-providers}/static-xsts-ticket-token-spartan-token-provider.ts +3 -3
  44. package/src/core/token-providers/xbox-token-provider.ts +3 -0
  45. package/src/core/xbox-client.ts +53 -0
  46. package/src/index.ts +7 -3
  47. package/src/models/halo-infinite/game-variant-category.ts +1 -0
  48. package/src/models/halo-infinite/stats.ts +49 -5
  49. package/src/util/keyed-expiry-token-cache.ts +90 -0
  50. /package/src/core/{spartan-token-providers → token-providers/spartan-token-providers}/index.ts +0 -0
@@ -7,10 +7,11 @@ export declare class HaloAuthenticationClient {
7
7
  private readonly fetchXstsToken;
8
8
  private readonly loadToken;
9
9
  private readonly saveToken;
10
+ private readonly fetchFn;
10
11
  private spartanTokenCache;
11
12
  constructor(fetchXstsToken: () => Promise<string> | string, loadToken: () => Promise<{
12
13
  token: string;
13
14
  expiresAt: unknown;
14
- } | null>, saveToken: (token: Token) => Promise<void>);
15
+ } | null>, saveToken: (token: Token) => Promise<void>, fetchFn?: typeof fetch);
15
16
  getSpartanToken(): Promise<string>;
16
17
  }
@@ -1,10 +1,10 @@
1
- import axios from "axios";
2
1
  import { DateTime } from "luxon";
3
2
  import { ExpiryTokenCache } from "../util/expiry-token-cache";
4
3
  export class HaloAuthenticationClient {
5
4
  fetchXstsToken;
6
5
  loadToken;
7
6
  saveToken;
7
+ fetchFn;
8
8
  spartanTokenCache = new ExpiryTokenCache(async () => {
9
9
  const xstsToken = await this.fetchXstsToken();
10
10
  const tokenRequest = {
@@ -17,23 +17,26 @@ export class HaloAuthenticationClient {
17
17
  },
18
18
  ],
19
19
  };
20
- const response = await axios.post("https://settings.svc.halowaypoint.com/spartan-token", tokenRequest, {
20
+ const response = await this.fetchFn("https://settings.svc.halowaypoint.com/spartan-token", {
21
+ body: JSON.stringify(tokenRequest),
21
22
  headers: {
22
23
  "User-Agent": "HaloWaypoint/2021112313511900 CFNetwork/1327.0.4 Darwin/21.2.0",
23
24
  "Content-Type": "application/json; charset=utf-8",
24
25
  },
25
26
  });
27
+ const result = (await response.json());
26
28
  const newToken = {
27
- token: response.data.SpartanToken,
28
- expiresAt: DateTime.fromISO(response.data.ExpiresUtc.ISO8601Date),
29
+ token: result.SpartanToken,
30
+ expiresAt: DateTime.fromISO(result.ExpiresUtc.ISO8601Date),
29
31
  };
30
32
  await this.saveToken(newToken);
31
33
  return newToken;
32
34
  }, () => this.loadToken());
33
- constructor(fetchXstsToken, loadToken, saveToken) {
35
+ constructor(fetchXstsToken, loadToken, saveToken, fetchFn = fetch) {
34
36
  this.fetchXstsToken = fetchXstsToken;
35
37
  this.loadToken = loadToken;
36
38
  this.saveToken = saveToken;
39
+ this.fetchFn = fetchFn;
37
40
  }
38
41
  async getSpartanToken() {
39
42
  const { token } = await this.spartanTokenCache.getToken();
@@ -1 +1 @@
1
- {"version":3,"file":"halo-authentication-client.js","sourceRoot":"","sources":["../../src/authentication/halo-authentication-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAIjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAO9D,MAAM,OAAO,wBAAwB;IAsChB;IACA;IAIA;IA1CX,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,KAAK,CAAC,IAAI,CAC/B,qDAAqD,EACrD,YAAY,EACZ;YACE,OAAO,EAAE;gBACP,YAAY,EACV,gEAAgE;gBAClE,cAAc,EAAE,iCAAiC;aAClD;SACF,CACF,CAAC;QAEF,MAAM,QAAQ,GAAG;YACf,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY;YACjC,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;SAClE,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;QAL1C,mBAAc,GAAd,cAAc,CAAgC;QAC9C,cAAS,GAAT,SAAS,CAGjB;QACQ,cAAS,GAAT,SAAS,CAAiC;IAC1D,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;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,5 +1,6 @@
1
1
  import { DateTime } from "luxon";
2
2
  import { TokenPersister } from "../core/token-persisters";
3
+ import { XboxTicket } from "../models/xbox-ticket";
3
4
  export declare enum RelyingParty {
4
5
  Xbox = "http://xboxlive.com",
5
6
  Halo = "https://prod.xsts.halowaypoint.com/"
@@ -11,11 +12,11 @@ export interface XboxAuthenticationToken {
11
12
  }
12
13
  export declare class XboxAuthenticationClient {
13
14
  private readonly tokenPersister?;
15
+ private readonly fetchFn;
14
16
  private userTokenCache;
15
17
  private xstsTicketCache;
16
- private readonly httpClient;
17
- constructor(tokenPersister?: TokenPersister | undefined);
18
- getXstsTicket(getOauth2AccessToken: () => Promise<string>): Promise<{
18
+ constructor(tokenPersister?: TokenPersister | undefined, fetchFn?: typeof fetch);
19
+ getXstsTicket(getOauth2AccessToken: () => Promise<string>, relyingParty: RelyingParty): Promise<{
19
20
  expiresAt: DateTime;
20
21
  IssueInstant: string;
21
22
  NotAfter: string;
@@ -32,5 +33,5 @@ export declare class XboxAuthenticationClient {
32
33
  }];
33
34
  };
34
35
  }>;
35
- getXboxLiveV3Token: (userHash: string, userToken: string) => string;
36
+ getXboxLiveV3Token: (xboxTicket: XboxTicket) => string;
36
37
  }
@@ -1,5 +1,5 @@
1
- import axios from "axios";
2
1
  import { DateTime } from "luxon";
2
+ import { KeyedExpiryTokenCache } from "../util/keyed-expiry-token-cache";
3
3
  import { ExpiryTokenCache } from "../util/expiry-token-cache";
4
4
  export var RelyingParty;
5
5
  (function (RelyingParty) {
@@ -8,58 +8,64 @@ export var RelyingParty;
8
8
  })(RelyingParty || (RelyingParty = {}));
9
9
  export class XboxAuthenticationClient {
10
10
  tokenPersister;
11
+ fetchFn;
11
12
  userTokenCache = new ExpiryTokenCache(async (accessToken) => {
12
- const response = await this.httpClient.post("https://user.auth.xboxlive.com/user/authenticate", {
13
- RelyingParty: "http://auth.xboxlive.com",
14
- TokenType: "JWT",
15
- Properties: {
16
- AuthMethod: "RPS",
17
- SiteName: "user.auth.xboxlive.com",
18
- RpsTicket: `d=${accessToken}`,
19
- },
20
- }, {
13
+ const response = await this.fetchFn("https://user.auth.xboxlive.com/user/authenticate", {
14
+ method: "POST",
21
15
  headers: {
22
16
  "Content-Type": "application/json",
23
17
  Accept: "application/json",
24
18
  "x-xbl-contract-version": "1",
25
19
  },
20
+ body: JSON.stringify({
21
+ RelyingParty: "http://auth.xboxlive.com",
22
+ TokenType: "JWT",
23
+ Properties: {
24
+ AuthMethod: "RPS",
25
+ SiteName: "user.auth.xboxlive.com",
26
+ RpsTicket: `d=${accessToken}`,
27
+ },
28
+ }),
26
29
  });
27
- const result = {
28
- ...response.data,
29
- expiresAt: DateTime.fromISO(response.data.NotAfter),
30
+ const result = (await response.json());
31
+ const token = {
32
+ ...result,
33
+ expiresAt: DateTime.fromISO(result.NotAfter),
30
34
  };
31
- await this.tokenPersister?.save("xbox.userToken", result);
32
- return result;
35
+ await this.tokenPersister?.save("xbox.userToken", token);
36
+ return token;
33
37
  }, async () => (await this.tokenPersister?.load("xbox.userToken")) ?? null);
34
- xstsTicketCache = new ExpiryTokenCache(async (userToken, relyingParty) => {
35
- const response = await this.httpClient.post("https://xsts.auth.xboxlive.com/xsts/authorize", {
36
- RelyingParty: relyingParty,
37
- TokenType: "JWT",
38
- Properties: {
39
- SandboxId: "RETAIL",
40
- UserTokens: [userToken],
41
- },
42
- }, {
38
+ xstsTicketCache = new KeyedExpiryTokenCache(async (relyingParty, userToken) => {
39
+ const response = await this.fetchFn("https://xsts.auth.xboxlive.com/xsts/authorize", {
40
+ method: "POST",
43
41
  headers: {
44
42
  "Content-Type": "application/json",
45
43
  Accept: "application/json",
46
44
  "x-xbl-contract-version": "1",
47
45
  },
46
+ body: JSON.stringify({
47
+ RelyingParty: relyingParty,
48
+ TokenType: "JWT",
49
+ Properties: {
50
+ SandboxId: "RETAIL",
51
+ UserTokens: [userToken],
52
+ },
53
+ }),
48
54
  });
49
- const result = {
50
- ...response.data,
51
- expiresAt: DateTime.fromISO(response.data.NotAfter),
55
+ const result = (await response.json());
56
+ const token = {
57
+ ...result,
58
+ expiresAt: DateTime.fromISO(result.NotAfter),
52
59
  };
53
- await this.tokenPersister?.save("xbox.xstsTicket", result);
54
- return result;
55
- }, async () => (await this.tokenPersister?.load("xbox.xstsTicket")) ?? null);
56
- httpClient;
57
- constructor(tokenPersister) {
60
+ await this.tokenPersister?.save("xbox.xstsTicket." + relyingParty, token);
61
+ return token;
62
+ }, async (relyingParty) => (await this.tokenPersister?.load("xbox.xstsTicket." + relyingParty)) ?? null);
63
+ constructor(tokenPersister, fetchFn = fetch) {
58
64
  this.tokenPersister = tokenPersister;
59
- this.httpClient = axios.create();
65
+ this.fetchFn = fetchFn;
60
66
  }
61
- async getXstsTicket(getOauth2AccessToken) {
62
- let xstsTicket = await this.xstsTicketCache.getExistingToken();
67
+ async getXstsTicket(getOauth2AccessToken, relyingParty) {
68
+ let xstsTicket = await this.xstsTicketCache.getExistingToken(relyingParty);
63
69
  if (!xstsTicket) {
64
70
  let userToken = await this.userTokenCache.getExistingToken();
65
71
  if (!userToken) {
@@ -67,10 +73,10 @@ export class XboxAuthenticationClient {
67
73
  // worrying if it is expired.
68
74
  userToken = await this.userTokenCache.getToken(await getOauth2AccessToken());
69
75
  }
70
- xstsTicket = await this.xstsTicketCache.getToken(userToken.Token, RelyingParty.Halo);
76
+ xstsTicket = await this.xstsTicketCache.getToken(relyingParty, userToken.Token);
71
77
  }
72
78
  return xstsTicket;
73
79
  }
74
- getXboxLiveV3Token = (userHash, userToken) => `XBL3.0 x=${userHash};${userToken}`;
80
+ getXboxLiveV3Token = (xboxTicket) => `XBL3.0 x=${xboxTicket.DisplayClaims.xui[0].uhs};${xboxTicket.Token}`;
75
81
  }
76
82
  //# sourceMappingURL=xbox-authentication-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"xbox-authentication-client.js","sourceRoot":"","sources":["../../src/authentication/xbox-authentication-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAIjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,4CAA4B,CAAA;IAC5B,4DAA4C,CAAA;AAC9C,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB;AAQD,MAAM,OAAO,wBAAwB;IAuEN;IAtErB,cAAc,GAAG,IAAI,gBAAgB,CAC3C,KAAK,EAAE,WAAmB,EAAE,EAAE;QAC5B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CACzC,kDAAkD,EAClD;YACE,YAAY,EAAE,0BAA0B;YACxC,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE;gBACV,UAAU,EAAE,KAAK;gBACjB,QAAQ,EAAE,wBAAwB;gBAClC,SAAS,EAAE,KAAK,WAAW,EAAE;aAC9B;SACF,EACD;YACE,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,MAAM,EAAE,kBAAkB;gBAC1B,wBAAwB,EAAE,GAAG;aAC9B;SACF,CACF,CAAC;QAEF,MAAM,MAAM,GAAG;YACb,GAAG,QAAQ,CAAC,IAAI;YAChB,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;SACpD,CAAC;QACF,MAAM,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAC1D,OAAO,MAAM,CAAC;IAChB,CAAC,EACD,KAAK,IAAI,EAAE,CACT,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,IAAI,CAC9B,gBAAgB,CACjB,CAAC,IAAI,IAAI,CACb,CAAC;IACM,eAAe,GAAG,IAAI,gBAAgB,CAC5C,KAAK,EAAE,SAAiB,EAAE,YAA0B,EAAE,EAAE;QACtD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CACzC,+CAA+C,EAC/C;YACE,YAAY,EAAE,YAAY;YAC1B,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE;gBACV,SAAS,EAAE,QAAQ;gBACnB,UAAU,EAAE,CAAC,SAAS,CAAC;aACxB;SACF,EACD;YACE,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,MAAM,EAAE,kBAAkB;gBAC1B,wBAAwB,EAAE,GAAG;aAC9B;SACF,CACF,CAAC;QAEF,MAAM,MAAM,GAAG;YACb,GAAG,QAAQ,CAAC,IAAI;YAChB,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;SACpD,CAAC;QACF,MAAM,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAC3D,OAAO,MAAM,CAAC;IAChB,CAAC,EACD,KAAK,IAAI,EAAE,CACT,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,IAAI,CAC9B,iBAAiB,CAClB,CAAC,IAAI,IAAI,CACb,CAAC;IAEe,UAAU,CAAgB;IAE3C,YAA6B,cAA+B;QAA/B,mBAAc,GAAd,cAAc,CAAiB;QAC1D,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,oBAA2C;QACpE,IAAI,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAC;QAC/D,IAAI,CAAC,UAAU,EAAE;YACf,IAAI,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;YAC7D,IAAI,CAAC,SAAS,EAAE;gBACd,8DAA8D;gBAC9D,6BAA6B;gBAC7B,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAC5C,MAAM,oBAAoB,EAAE,CAC7B,CAAC;aACH;YACD,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAC9C,SAAS,CAAC,KAAK,EACf,YAAY,CAAC,IAAI,CAClB,CAAC;SACH;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAEM,kBAAkB,GAAG,CAAC,QAAgB,EAAE,SAAiB,EAAE,EAAE,CAClE,YAAY,QAAQ,IAAI,SAAS,EAAE,CAAC;CACvC"}
1
+ {"version":3,"file":"xbox-authentication-client.js","sourceRoot":"","sources":["../../src/authentication/xbox-authentication-client.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ import { Playlist } from "../models/halo-infinite/playlist";
8
8
  import { PlaylistCsrContainer } from "../models/halo-infinite/playlist-csr-container";
9
9
  import { ServiceRecord } from "../models/halo-infinite/service-record";
10
10
  import { UserInfo } from "../models/halo-infinite/user-info";
11
- import { SpartanTokenProvider } from "./spartan-token-providers";
11
+ import { SpartanTokenProvider } from "./token-providers/spartan-token-providers";
12
12
  interface ResultContainer<TValue> {
13
13
  Id: string;
14
14
  ResultCode: 0 | 1;
@@ -21,7 +21,8 @@ export type AssetKindTypeMap = {
21
21
  };
22
22
  export declare class HaloInfiniteClient {
23
23
  private spartanTokenProvider;
24
- constructor(spartanTokenProvider: SpartanTokenProvider);
24
+ private readonly fetchFn;
25
+ constructor(spartanTokenProvider: SpartanTokenProvider, fetchFn?: typeof fetch);
25
26
  private executeRequest;
26
27
  private executeResultsRequest;
27
28
  private executePaginationRequest;
@@ -47,6 +48,7 @@ export declare class HaloInfiniteClient {
47
48
  */
48
49
  getPlaylist: (playlistId: string) => Promise<Playlist>;
49
50
  getPlayerMatches: (playerXuid: string, type?: MatchType, count?: number, start?: number) => Promise<PlayerMatchHistory[]>;
51
+ getPlayerServiceRecord(playerXuid: string, type?: MatchType): Promise<ServiceRecord>;
50
52
  getMatchStats: (matchId: string) => Promise<MatchStats<import("..").GameVariantCategory>>;
51
53
  getMatchSkill: (matchId: string, playerIds: string[]) => Promise<ResultContainer<MatchSkill<0>>[]>;
52
54
  /** Gets authoring metadata about a specific asset. */
@@ -1,4 +1,3 @@
1
- import axios, { AxiosError, AxiosHeaders } from "axios";
2
1
  import { HaloCoreEndpoints } from "../endpoints/halo-core-endpoints";
3
2
  import { AssetKind } from "../models/halo-infinite/asset-kind";
4
3
  import { MatchType } from "../models/halo-infinite/match-type";
@@ -9,7 +8,7 @@ const assetKindUrlMap = {
9
8
  [AssetKind.Playlist]: "Playlists",
10
9
  };
11
10
  function wrapPlayerId(playerId) {
12
- if (/^\w+(\d+)/) {
11
+ if (/^\w+\(\d+\)/.test(playerId)) {
13
12
  return playerId;
14
13
  }
15
14
  else {
@@ -28,26 +27,29 @@ function unwrapPlayerId(playerId) {
28
27
  }
29
28
  export class HaloInfiniteClient {
30
29
  spartanTokenProvider;
31
- constructor(spartanTokenProvider) {
30
+ fetchFn;
31
+ constructor(spartanTokenProvider, fetchFn) {
32
32
  this.spartanTokenProvider = spartanTokenProvider;
33
+ this.fetchFn = fetchFn ?? fetch;
33
34
  }
34
35
  async executeRequest(url, method, useSpartanToken = true, useClearance = false, userAgent = GlobalConstants.HALO_WAYPOINT_USER_AGENT) {
35
- const headers = new AxiosHeaders({
36
+ const headers = {
36
37
  "User-Agent": userAgent,
37
38
  Accept: "application/json",
38
- });
39
+ };
39
40
  if (useSpartanToken) {
40
- headers.set("x-343-authorization-spartan", await this.spartanTokenProvider.getSpartanToken());
41
+ headers["x-343-authorization-spartan"] =
42
+ await this.spartanTokenProvider.getSpartanToken();
41
43
  }
42
44
  if (useClearance) {
43
45
  throw new Error("TODO: Implement clearance");
44
46
  }
45
- const response = await axios.request({
46
- url,
47
+ const response = await this.fetchFn(url, {
47
48
  method,
48
49
  headers,
49
50
  });
50
- return response.data;
51
+ const result = (await response.json());
52
+ return result;
51
53
  }
52
54
  async executeResultsRequest(...args) {
53
55
  const result = await this.executeRequest(...args);
@@ -92,25 +94,16 @@ export class HaloInfiniteClient {
92
94
  if (type !== MatchType.All) {
93
95
  params.type = type.toString();
94
96
  }
95
- return this.executePaginationRequest(count, start, params, `https://${HaloCoreEndpoints.StatsOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/players/xuid(${wrapPlayerId(playerXuid)})/matches`, "get");
97
+ return this.executePaginationRequest(count, start, params, `https://${HaloCoreEndpoints.StatsOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/players/${wrapPlayerId(playerXuid)}/matches`, "get");
96
98
  };
99
+ getPlayerServiceRecord(playerXuid, type = MatchType.All) {
100
+ return this.executeRequest(`https://${HaloCoreEndpoints.StatsOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/players/${wrapPlayerId(playerXuid)}/Matchmade/servicerecord`, "get");
101
+ }
97
102
  getMatchStats = (matchId) => this.executeRequest(`https://${HaloCoreEndpoints.StatsOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/matches/${matchId}/stats`, "get");
98
103
  getMatchSkill = async (matchId, playerIds) => {
99
- try {
100
- return await this.executeResultsRequest(`https://${HaloCoreEndpoints.SkillOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/matches/${matchId}/skill?players=${playerIds
101
- .map(wrapPlayerId)
102
- .join(",")}`, "get");
103
- }
104
- catch (e) {
105
- if (e instanceof AxiosError &&
106
- e.response?.status === 404 &&
107
- e.response.data) {
108
- return e.response.data.Value;
109
- }
110
- else {
111
- throw e;
112
- }
113
- }
104
+ return await this.executeResultsRequest(`https://${HaloCoreEndpoints.SkillOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/matches/${matchId}/skill?players=${playerIds
105
+ .map(wrapPlayerId)
106
+ .join(",")}`, "get");
114
107
  };
115
108
  /** Gets authoring metadata about a specific asset. */
116
109
  getAsset = (assetType, assetId) => this.executeRequest(`https://${HaloCoreEndpoints.DiscoveryOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/${assetKindUrlMap[assetType]}/${assetId}`, "get");
@@ -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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"}
@@ -0,0 +1,13 @@
1
+ import { TokenPersister } from "../token-persisters";
2
+ import { SpartanTokenProvider } from "./spartan-token-providers";
3
+ import { XboxTokenProvider } from "./xbox-token-provider";
4
+ /**
5
+ * A SpartanTokenProvider that fetches both the Xbox and Halo tokens in the same
6
+ * process. This is useful for applications that do not need to contend with
7
+ * CORS restrictions.
8
+ */
9
+ export declare class AutoTokenProvider implements SpartanTokenProvider, XboxTokenProvider {
10
+ readonly getSpartanToken: () => Promise<string>;
11
+ readonly getXboxLiveV3Token: () => Promise<string>;
12
+ constructor(getOauth2AccessToken: () => Promise<string>, tokenPersister?: TokenPersister);
13
+ }
@@ -0,0 +1,34 @@
1
+ import { RelyingParty, XboxAuthenticationClient, } from "../../authentication/xbox-authentication-client";
2
+ import { HaloAuthenticationClient } from "../../authentication/halo-authentication-client";
3
+ import { inMemoryTokenPersister } from "../token-persisters/in-memory-token-persister";
4
+ /**
5
+ * A SpartanTokenProvider that fetches both the Xbox and Halo tokens in the same
6
+ * process. This is useful for applications that do not need to contend with
7
+ * CORS restrictions.
8
+ */
9
+ export class AutoTokenProvider {
10
+ getSpartanToken;
11
+ getXboxLiveV3Token;
12
+ constructor(getOauth2AccessToken, tokenPersister) {
13
+ let actualTokenPersister;
14
+ if (tokenPersister) {
15
+ actualTokenPersister = tokenPersister;
16
+ }
17
+ else {
18
+ actualTokenPersister = inMemoryTokenPersister;
19
+ }
20
+ const xboxAuthClient = new XboxAuthenticationClient(tokenPersister);
21
+ const haloAuthClient = new HaloAuthenticationClient(async () => {
22
+ const xstsTicket = await xboxAuthClient.getXstsTicket(getOauth2AccessToken, RelyingParty.Halo);
23
+ return xstsTicket.Token;
24
+ }, async () => await actualTokenPersister.load("halo.authToken"), async (token) => {
25
+ await actualTokenPersister.save("halo.authToken", token);
26
+ });
27
+ this.getSpartanToken = () => haloAuthClient.getSpartanToken();
28
+ this.getXboxLiveV3Token = async () => {
29
+ const xstsTicket = await xboxAuthClient.getXstsTicket(getOauth2AccessToken, RelyingParty.Xbox);
30
+ return xboxAuthClient.getXboxLiveV3Token(xstsTicket);
31
+ };
32
+ }
33
+ }
34
+ //# sourceMappingURL=auto-token-provider.js.map
@@ -0,0 +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"}
@@ -0,0 +1,11 @@
1
+ import { TokenPersister } from "../../token-persisters";
2
+ import { SpartanTokenProvider } from ".";
3
+ /**
4
+ * A SpartanTokenProvider that fetches both the Xbox and Halo tokens in the same
5
+ * process. This is useful for applications that do not need to contend with
6
+ * CORS restrictions.
7
+ */
8
+ export declare class AutoXstsSpartanTokenProvider implements SpartanTokenProvider {
9
+ readonly getSpartanToken: () => Promise<string>;
10
+ constructor(getOauth2AccessToken: () => Promise<string>, tokenPersister?: TokenPersister);
11
+ }
@@ -0,0 +1,29 @@
1
+ import { XboxAuthenticationClient, } from "../../../authentication/xbox-authentication-client";
2
+ import { HaloAuthenticationClient } from "../../../authentication/halo-authentication-client";
3
+ import { inMemoryTokenPersister } from "../../token-persisters/in-memory-token-persister";
4
+ /**
5
+ * A SpartanTokenProvider that fetches both the Xbox and Halo tokens in the same
6
+ * process. This is useful for applications that do not need to contend with
7
+ * CORS restrictions.
8
+ */
9
+ export class AutoXstsSpartanTokenProvider {
10
+ getSpartanToken;
11
+ constructor(getOauth2AccessToken, tokenPersister) {
12
+ let actualTokenPersister;
13
+ if (tokenPersister) {
14
+ actualTokenPersister = tokenPersister;
15
+ }
16
+ else {
17
+ actualTokenPersister = inMemoryTokenPersister;
18
+ }
19
+ const xboxAuthClient = new XboxAuthenticationClient(tokenPersister);
20
+ const haloAuthClient = new HaloAuthenticationClient(async () => {
21
+ const xstsTicket = await xboxAuthClient.getXstsTicket(getOauth2AccessToken);
22
+ return xstsTicket.Token;
23
+ }, async () => await actualTokenPersister.load("halo.authToken"), async (token) => {
24
+ await actualTokenPersister.save("halo.authToken", token);
25
+ });
26
+ this.getSpartanToken = () => haloAuthClient.getSpartanToken();
27
+ }
28
+ }
29
+ //# sourceMappingURL=auto-xsts-spartan-token-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-xsts-spartan-token-provider.js","sourceRoot":"","sources":["../../../../src/core/token-providers/spartan-token-providers/auto-xsts-spartan-token-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,wBAAwB,GACzB,MAAM,oDAAoD,CAAC;AAE5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oDAAoD,CAAC;AAE9F,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAE1F;;;;GAIG;AACH,MAAM,OAAO,4BAA4B;IACvB,eAAe,CAAwB;IAEvD,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,CACrB,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;IAChE,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ export interface SpartanTokenProvider {
2
+ getSpartanToken(): Promise<string>;
3
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/token-providers/spartan-token-providers/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { TokenPersister } from "../../token-persisters";
2
+ import { SpartanTokenProvider } from ".";
3
+ /**
4
+ * A SpartanTokenProvider that fetches uses a pre-fetched XSTS ticket token.
5
+ * Since requests to the Halo API are subject to CORS restrictions a
6
+ * HaloAuthenticationClient can be instantitated with a pre-fetched XSTS ticket
7
+ * and run on a server (such as one provided by the user).
8
+ */
9
+ export declare class StaticXstsTicketTokenSpartanTokenProvider implements SpartanTokenProvider {
10
+ readonly getSpartanToken: () => Promise<string>;
11
+ constructor(xstsTicketToken: string, tokenPersister?: TokenPersister);
12
+ }
@@ -0,0 +1,25 @@
1
+ import { HaloAuthenticationClient } from "../../../authentication/halo-authentication-client";
2
+ import { inMemoryTokenPersister } from "../../token-persisters/in-memory-token-persister";
3
+ /**
4
+ * A SpartanTokenProvider that fetches uses a pre-fetched XSTS ticket token.
5
+ * Since requests to the Halo API are subject to CORS restrictions a
6
+ * HaloAuthenticationClient can be instantitated with a pre-fetched XSTS ticket
7
+ * and run on a server (such as one provided by the user).
8
+ */
9
+ export class StaticXstsTicketTokenSpartanTokenProvider {
10
+ getSpartanToken;
11
+ constructor(xstsTicketToken, tokenPersister) {
12
+ let actualTokenPersister;
13
+ if (tokenPersister) {
14
+ actualTokenPersister = tokenPersister;
15
+ }
16
+ else {
17
+ actualTokenPersister = inMemoryTokenPersister;
18
+ }
19
+ const haloAuthClient = new HaloAuthenticationClient(() => xstsTicketToken, async () => await actualTokenPersister.load("halo.authToken"), async (token) => {
20
+ await actualTokenPersister.save("halo.authToken", token);
21
+ });
22
+ this.getSpartanToken = () => haloAuthClient.getSpartanToken();
23
+ }
24
+ }
25
+ //# sourceMappingURL=static-xsts-ticket-token-spartan-token-provider.js.map
@@ -0,0 +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"}
@@ -0,0 +1,3 @@
1
+ export interface XboxTokenProvider {
2
+ getXboxLiveV3Token: () => Promise<string>;
3
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=xbox-token-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xbox-token-provider.js","sourceRoot":"","sources":["../../../src/core/token-providers/xbox-token-provider.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { XboxTokenProvider } from "./token-providers/xbox-token-provider";
2
+ export declare class XboxClient {
3
+ private xboxTokenProvider;
4
+ private readonly fetchFn;
5
+ constructor(xboxTokenProvider: XboxTokenProvider, fetchFn?: typeof fetch);
6
+ private executeRequest;
7
+ searchUsers(query: string): Promise<{
8
+ id: string;
9
+ gamertag: string;
10
+ displayPicUri: string;
11
+ score: 0.0;
12
+ }[]>;
13
+ recentPlayers(): Promise<unknown>;
14
+ }
@@ -0,0 +1,28 @@
1
+ export class XboxClient {
2
+ xboxTokenProvider;
3
+ fetchFn;
4
+ constructor(xboxTokenProvider, fetchFn) {
5
+ this.xboxTokenProvider = xboxTokenProvider;
6
+ this.fetchFn = fetchFn ?? fetch;
7
+ }
8
+ async executeRequest(url, method) {
9
+ const response = await this.fetchFn(url, {
10
+ method,
11
+ headers: {
12
+ Accept: "application/json",
13
+ Authorization: await this.xboxTokenProvider.getXboxLiveV3Token(),
14
+ "x-xbl-contract-version": "1",
15
+ },
16
+ });
17
+ const result = (await response.json());
18
+ return result;
19
+ }
20
+ async searchUsers(query) {
21
+ const { results } = await this.executeRequest(`https://usersearch.xboxlive.com/suggest?q=${encodeURIComponent(query)}`, "GET");
22
+ return results.map(({ result }) => result);
23
+ }
24
+ async recentPlayers() {
25
+ return await this.executeRequest("https://peoplehub.xboxlive.com/users/me/people/recentplayers", "GET");
26
+ }
27
+ }
28
+ //# sourceMappingURL=xbox-client.js.map
@@ -0,0 +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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export { HaloInfiniteClient, AssetKindTypeMap, } from "./core/halo-infinite-client";
2
+ export { XboxClient } from "./core/xbox-client";
2
3
  export { XboxAuthenticationClient, RelyingParty, } from "./authentication/xbox-authentication-client";
3
4
  export { Playlist } from "./models/halo-infinite/playlist";
4
5
  export { PlaylistCsrContainer } from "./models/halo-infinite/playlist-csr-container";
@@ -15,8 +16,8 @@ export { MatchOutcome } from "./models/halo-infinite/match-outcome";
15
16
  export { MatchSkill } from "./models/halo-infinite/match-skill";
16
17
  export { AssetVersionLink } from "./models/halo-infinite/asset-version-link";
17
18
  export { MatchInfo } from "./models/halo-infinite/match-info";
18
- export { SpartanTokenProvider } from "./core/spartan-token-providers";
19
- export { AutoXstsSpartanTokenProvider } from "./core/spartan-token-providers/auto-xsts-spartan-token-provider";
20
- export { StaticXstsTicketTokenSpartanTokenProvider } from "./core/spartan-token-providers/static-xsts-ticket-token-spartan-token-provider";
19
+ export { SpartanTokenProvider } from "./core/token-providers/spartan-token-providers";
20
+ export { AutoTokenProvider, AutoTokenProvider as AutoXstsSpartanTokenProvider, } from "./core/token-providers/auto-token-provider";
21
+ export { StaticXstsTicketTokenSpartanTokenProvider } from "./core/token-providers/spartan-token-providers/static-xsts-ticket-token-spartan-token-provider";
21
22
  export { TokenPersister } from "./core/token-persisters";
22
23
  export { PlaylistExperience } from "./models/halo-infinite/playlist-experience";