halo-infinite-api 14.0.0 → 14.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 (73) hide show
  1. package/coverage/lcov-report/authentication/halo-authentication-client.ts.html +1 -1
  2. package/coverage/lcov-report/authentication/index.html +5 -5
  3. package/coverage/lcov-report/authentication/xbox-authentication-client.ts.html +18 -6
  4. package/coverage/lcov-report/core/halo-infinite-client.ts.html +88 -16
  5. package/coverage/lcov-report/core/index.html +15 -15
  6. package/coverage/lcov-report/core/request-policy.ts.html +1 -1
  7. package/coverage/lcov-report/core/token-persisters/in-memory-token-persister.ts.html +1 -1
  8. package/coverage/lcov-report/core/token-persisters/index.html +1 -1
  9. package/coverage/lcov-report/core/token-persisters/local-storage-token-persister.ts.html +1 -1
  10. package/coverage/lcov-report/core/token-persisters/node-fs-token-persister.ts.html +1 -1
  11. package/coverage/lcov-report/core/token-persisters/token-persister.ts.html +1 -1
  12. package/coverage/lcov-report/core/token-providers/auto-token-provider.ts.html +8 -11
  13. package/coverage/lcov-report/core/token-providers/index.html +7 -7
  14. package/coverage/lcov-report/core/token-providers/spartan-token-provider.ts.html +1 -1
  15. package/coverage/lcov-report/core/token-providers/static-xsts-ticket-token-spartan-token-provider.ts.html +7 -10
  16. package/coverage/lcov-report/core/token-providers/xbox-token-provider.ts.html +1 -1
  17. package/coverage/lcov-report/core/xbox-client.ts.html +1 -1
  18. package/coverage/lcov-report/endpoints/halo-core-endpoints.ts.html +1 -1
  19. package/coverage/lcov-report/endpoints/index.html +1 -1
  20. package/coverage/lcov-report/index.html +29 -29
  21. package/coverage/lcov-report/models/halo-infinite/api-formatted-date.ts.html +1 -1
  22. package/coverage/lcov-report/models/halo-infinite/asset-kind.ts.html +1 -1
  23. package/coverage/lcov-report/models/halo-infinite/asset-version-link.ts.html +1 -1
  24. package/coverage/lcov-report/models/halo-infinite/asset.ts.html +1 -1
  25. package/coverage/lcov-report/models/halo-infinite/ban-summary.ts.html +1 -1
  26. package/coverage/lcov-report/models/halo-infinite/game-variant-category.ts.html +1 -1
  27. package/coverage/lcov-report/models/halo-infinite/index.html +23 -8
  28. package/coverage/lcov-report/models/halo-infinite/match-info.ts.html +1 -1
  29. package/coverage/lcov-report/models/halo-infinite/match-outcome.ts.html +1 -1
  30. package/coverage/lcov-report/models/halo-infinite/match-skill.ts.html +1 -1
  31. package/coverage/lcov-report/models/halo-infinite/match-stats.ts.html +1 -1
  32. package/coverage/lcov-report/models/halo-infinite/match-type.ts.html +1 -1
  33. package/coverage/lcov-report/models/halo-infinite/matches-privacy.ts.html +1 -1
  34. package/coverage/lcov-report/models/halo-infinite/medals-metadata-file.ts.html +1 -1
  35. package/coverage/lcov-report/models/halo-infinite/player-match-history.ts.html +1 -1
  36. package/coverage/lcov-report/models/halo-infinite/playlist-csr-container.ts.html +1 -1
  37. package/coverage/lcov-report/models/halo-infinite/playlist-csr.ts.html +1 -1
  38. package/coverage/lcov-report/models/halo-infinite/playlist-experience.ts.html +1 -1
  39. package/coverage/lcov-report/models/halo-infinite/playlist.ts.html +1 -1
  40. package/coverage/lcov-report/models/halo-infinite/progression-file.ts.html +1 -1
  41. package/coverage/lcov-report/models/halo-infinite/season.ts.html +1 -1
  42. package/coverage/lcov-report/models/halo-infinite/service-record.ts.html +1 -1
  43. package/coverage/lcov-report/models/halo-infinite/settings.ts.html +205 -0
  44. package/coverage/lcov-report/models/halo-infinite/skill-result.ts.html +1 -1
  45. package/coverage/lcov-report/models/halo-infinite/stats.ts.html +1 -1
  46. package/coverage/lcov-report/models/halo-infinite/user-info.ts.html +1 -1
  47. package/coverage/lcov-report/models/index.html +1 -1
  48. package/coverage/lcov-report/models/spartan-token-proof.ts.html +1 -1
  49. package/coverage/lcov-report/models/spartan-token-request.ts.html +1 -1
  50. package/coverage/lcov-report/models/spartan-token.ts.html +1 -1
  51. package/coverage/lcov-report/models/xbox-ticket.ts.html +1 -1
  52. package/coverage/lcov-report/util/date-time.ts.html +1 -1
  53. package/coverage/lcov-report/util/expiry-token-cache.ts.html +1 -1
  54. package/coverage/lcov-report/util/fetch-function.ts.html +1 -1
  55. package/coverage/lcov-report/util/global-contants.ts.html +1 -1
  56. package/coverage/lcov-report/util/index.html +1 -1
  57. package/coverage/lcov-report/util/keyed-expiry-token-cache.ts.html +1 -1
  58. package/coverage/lcov-report/util/request-error.ts.html +1 -1
  59. package/coverage/lcov-report/util/resolvable-promise.ts.html +1 -1
  60. package/coverage/lcov-report/util/xuid.ts.html +1 -1
  61. package/coverage/lcov.info +272 -192
  62. package/dist/index.cjs +24 -11
  63. package/dist/index.cjs.map +1 -1
  64. package/dist/index.d.cts +37 -2
  65. package/dist/index.d.ts +37 -2
  66. package/dist/index.js +24 -11
  67. package/dist/index.js.map +1 -1
  68. package/package.json +1 -1
  69. package/src/authentication/xbox-authentication-client.ts +6 -2
  70. package/src/core/halo-infinite-client.ts +32 -8
  71. package/src/core/token-providers/auto-token-provider.ts +3 -4
  72. package/src/core/token-providers/static-xsts-ticket-token-spartan-token-provider.ts +2 -3
  73. package/src/models/halo-infinite/settings.ts +40 -0
@@ -379,7 +379,7 @@
379
379
  <div class='footer quiet pad2 space-top1 center small'>
380
380
  Code coverage generated by
381
381
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
382
- at 2025-11-21T02:48:56.500Z
382
+ at 2025-12-08T18:28:58.806Z
383
383
  </div>
384
384
  <script src="../prettify.js"></script>
385
385
  <script>
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/269</span>
28
+ <span class='fraction'>0/273</span>
29
29
  </div>
30
30
 
31
31
 
@@ -46,7 +46,7 @@
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/269</span>
49
+ <span class='fraction'>0/273</span>
50
50
  </div>
51
51
 
52
52
 
@@ -99,13 +99,13 @@
99
99
  <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
100
100
  </td>
101
101
  <td data-value="0" class="pct low">0%</td>
102
- <td data-value="166" class="abs low">0/166</td>
102
+ <td data-value="170" class="abs low">0/170</td>
103
103
  <td data-value="0" class="pct low">0%</td>
104
104
  <td data-value="1" class="abs low">0/1</td>
105
105
  <td data-value="0" class="pct low">0%</td>
106
106
  <td data-value="1" class="abs low">0/1</td>
107
107
  <td data-value="0" class="pct low">0%</td>
108
- <td data-value="166" class="abs low">0/166</td>
108
+ <td data-value="170" class="abs low">0/170</td>
109
109
  </tr>
110
110
 
111
111
  </tbody>
@@ -116,7 +116,7 @@
116
116
  <div class='footer quiet pad2 space-top1 center small'>
117
117
  Code coverage generated by
118
118
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at 2025-11-21T02:48:56.500Z
119
+ at 2025-12-08T18:28:58.806Z
120
120
  </div>
121
121
  <script src="../prettify.js"></script>
122
122
  <script>
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/166</span>
28
+ <span class='fraction'>0/170</span>
29
29
  </div>
30
30
 
31
31
 
@@ -46,7 +46,7 @@
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/166</span>
49
+ <span class='fraction'>0/170</span>
50
50
  </div>
51
51
 
52
52
 
@@ -229,7 +229,15 @@
229
229
  <a name='L164'></a><a href='#L164'>164</a>
230
230
  <a name='L165'></a><a href='#L165'>165</a>
231
231
  <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
237
+ <span class="cline-any cline-no">&nbsp;</span>
238
+ <span class="cline-any cline-no">&nbsp;</span>
239
+ <span class="cline-any cline-no">&nbsp;</span>
240
+ <span class="cline-any cline-no">&nbsp;</span>
233
241
  <span class="cline-any cline-no">&nbsp;</span>
234
242
  <span class="cline-any cline-no">&nbsp;</span>
235
243
  <span class="cline-any cline-no">&nbsp;</span>
@@ -416,6 +424,10 @@
416
424
  <span class="cstat-no" title="statement not covered" >}</span>
417
425
  <span class="cstat-no" title="statement not covered" ></span>
418
426
  <span class="cstat-no" title="statement not covered" >export class XboxAuthenticationClient {</span>
427
+ <span class="cstat-no" title="statement not covered" > static readonly userTokenName = "xbox.userToken";</span>
428
+ <span class="cstat-no" title="statement not covered" > static readonly xstsTicketName = (relyingParty: RelyingParty) =&gt;</span>
429
+ <span class="cstat-no" title="statement not covered" > `xbox.xstsTicket.${relyingParty}`;</span>
430
+ <span class="cstat-no" title="statement not covered" ></span>
419
431
  <span class="cstat-no" title="statement not covered" > private userTokenCache = new ExpiryTokenCache(</span>
420
432
  <span class="cstat-no" title="statement not covered" > async (accessToken: string) =&gt; {</span>
421
433
  <span class="cstat-no" title="statement not covered" > const url = "https://user.auth.xboxlive.com/user/authenticate";</span>
@@ -456,7 +468,7 @@
456
468
  <span class="cstat-no" title="statement not covered" > const tokenPersister = await this.tokenPersisterOrPromise;</span>
457
469
  <span class="cstat-no" title="statement not covered" > return (</span>
458
470
  <span class="cstat-no" title="statement not covered" > (await tokenPersister?.load&lt;XboxTicket &amp; { expiresAt: unknown }&gt;(</span>
459
- <span class="cstat-no" title="statement not covered" > "xbox.userToken"</span>
471
+ <span class="cstat-no" title="statement not covered" > XboxAuthenticationClient.userTokenName</span>
460
472
  <span class="cstat-no" title="statement not covered" > )) ?? null</span>
461
473
  <span class="cstat-no" title="statement not covered" > );</span>
462
474
  <span class="cstat-no" title="statement not covered" > }</span>
@@ -490,7 +502,7 @@
490
502
  <span class="cstat-no" title="statement not covered" > };</span>
491
503
  <span class="cstat-no" title="statement not covered" > await (</span>
492
504
  <span class="cstat-no" title="statement not covered" > await this.tokenPersisterOrPromise</span>
493
- <span class="cstat-no" title="statement not covered" > )?.save("xbox.xstsTicket." + relyingParty, token);</span>
505
+ <span class="cstat-no" title="statement not covered" > )?.save(XboxAuthenticationClient.xstsTicketName(relyingParty), token);</span>
494
506
  <span class="cstat-no" title="statement not covered" > return token;</span>
495
507
  <span class="cstat-no" title="statement not covered" > } else {</span>
496
508
  <span class="cstat-no" title="statement not covered" > throw new RequestError(url, response);</span>
@@ -568,7 +580,7 @@
568
580
  <div class='footer quiet pad2 space-top1 center small'>
569
581
  Code coverage generated by
570
582
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
571
- at 2025-11-21T02:48:56.500Z
583
+ at 2025-12-08T18:28:58.806Z
572
584
  </div>
573
585
  <script src="../prettify.js"></script>
574
586
  <script>
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">44.53% </span>
26
+ <span class="strong">45.2% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>212/476</span>
28
+ <span class='fraction'>226/500</span>
29
29
  </div>
30
30
 
31
31
 
@@ -37,16 +37,16 @@
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">20.83% </span>
40
+ <span class="strong">20% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>5/24</span>
42
+ <span class='fraction'>5/25</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">44.53% </span>
47
+ <span class="strong">45.2% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>212/476</span>
49
+ <span class='fraction'>226/500</span>
50
50
  </div>
51
51
 
52
52
 
@@ -539,7 +539,31 @@
539
539
  <a name='L474'></a><a href='#L474'>474</a>
540
540
  <a name='L475'></a><a href='#L475'>475</a>
541
541
  <a name='L476'></a><a href='#L476'>476</a>
542
- <a name='L477'></a><a href='#L477'>477</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
542
+ <a name='L477'></a><a href='#L477'>477</a>
543
+ <a name='L478'></a><a href='#L478'>478</a>
544
+ <a name='L479'></a><a href='#L479'>479</a>
545
+ <a name='L480'></a><a href='#L480'>480</a>
546
+ <a name='L481'></a><a href='#L481'>481</a>
547
+ <a name='L482'></a><a href='#L482'>482</a>
548
+ <a name='L483'></a><a href='#L483'>483</a>
549
+ <a name='L484'></a><a href='#L484'>484</a>
550
+ <a name='L485'></a><a href='#L485'>485</a>
551
+ <a name='L486'></a><a href='#L486'>486</a>
552
+ <a name='L487'></a><a href='#L487'>487</a>
553
+ <a name='L488'></a><a href='#L488'>488</a>
554
+ <a name='L489'></a><a href='#L489'>489</a>
555
+ <a name='L490'></a><a href='#L490'>490</a>
556
+ <a name='L491'></a><a href='#L491'>491</a>
557
+ <a name='L492'></a><a href='#L492'>492</a>
558
+ <a name='L493'></a><a href='#L493'>493</a>
559
+ <a name='L494'></a><a href='#L494'>494</a>
560
+ <a name='L495'></a><a href='#L495'>495</a>
561
+ <a name='L496'></a><a href='#L496'>496</a>
562
+ <a name='L497'></a><a href='#L497'>497</a>
563
+ <a name='L498'></a><a href='#L498'>498</a>
564
+ <a name='L499'></a><a href='#L499'>499</a>
565
+ <a name='L500'></a><a href='#L500'>500</a>
566
+ <a name='L501'></a><a href='#L501'>501</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
543
567
  <span class="cline-any cline-yes">1x</span>
544
568
  <span class="cline-any cline-yes">1x</span>
545
569
  <span class="cline-any cline-yes">1x</span>
@@ -614,6 +638,8 @@
614
638
  <span class="cline-any cline-yes">1x</span>
615
639
  <span class="cline-any cline-yes">1x</span>
616
640
  <span class="cline-any cline-yes">1x</span>
641
+ <span class="cline-any cline-yes">1x</span>
642
+ <span class="cline-any cline-no">&nbsp;</span>
617
643
  <span class="cline-any cline-no">&nbsp;</span>
618
644
  <span class="cline-any cline-no">&nbsp;</span>
619
645
  <span class="cline-any cline-no">&nbsp;</span>
@@ -654,6 +680,12 @@
654
680
  <span class="cline-any cline-yes">1x</span>
655
681
  <span class="cline-any cline-yes">1x</span>
656
682
  <span class="cline-any cline-yes">1x</span>
683
+ <span class="cline-any cline-yes">1x</span>
684
+ <span class="cline-any cline-yes">1x</span>
685
+ <span class="cline-any cline-yes">1x</span>
686
+ <span class="cline-any cline-yes">1x</span>
687
+ <span class="cline-any cline-yes">2x</span>
688
+ <span class="cline-any cline-yes">2x</span>
657
689
  <span class="cline-any cline-yes">2x</span>
658
690
  <span class="cline-any cline-yes">2x</span>
659
691
  <span class="cline-any cline-yes">2x</span>
@@ -688,6 +720,10 @@
688
720
  <span class="cline-any cline-yes">1x</span>
689
721
  <span class="cline-any cline-yes">1x</span>
690
722
  <span class="cline-any cline-yes">1x</span>
723
+ <span class="cline-any cline-yes">1x</span>
724
+ <span class="cline-any cline-yes">1x</span>
725
+ <span class="cline-any cline-yes">1x</span>
726
+ <span class="cline-any cline-yes">1x</span>
691
727
  <span class="cline-any cline-no">&nbsp;</span>
692
728
  <span class="cline-any cline-no">&nbsp;</span>
693
729
  <span class="cline-any cline-yes">1x</span>
@@ -1015,6 +1051,18 @@
1015
1051
  <span class="cline-any cline-no">&nbsp;</span>
1016
1052
  <span class="cline-any cline-yes">1x</span>
1017
1053
  <span class="cline-any cline-yes">1x</span>
1054
+ <span class="cline-any cline-yes">1x</span>
1055
+ <span class="cline-any cline-no">&nbsp;</span>
1056
+ <span class="cline-any cline-no">&nbsp;</span>
1057
+ <span class="cline-any cline-no">&nbsp;</span>
1058
+ <span class="cline-any cline-no">&nbsp;</span>
1059
+ <span class="cline-any cline-no">&nbsp;</span>
1060
+ <span class="cline-any cline-no">&nbsp;</span>
1061
+ <span class="cline-any cline-no">&nbsp;</span>
1062
+ <span class="cline-any cline-no">&nbsp;</span>
1063
+ <span class="cline-any cline-no">&nbsp;</span>
1064
+ <span class="cline-any cline-yes">1x</span>
1065
+ <span class="cline-any cline-yes">1x</span>
1018
1066
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { FetchFunction, defaultFetch } from "../util/fetch-function";
1019
1067
  import { HaloCoreEndpoints } from "../endpoints/halo-core-endpoints";
1020
1068
  import {
@@ -1047,6 +1095,7 @@ import { KeyedExpiryTokenCache } from "../util/keyed-expiry-token-cache";
1047
1095
  import { DateTime } from "luxon";
1048
1096
  import { wrapPlayerId, unwrapPlayerId } from "../util/xuid";
1049
1097
  import { SeasonCalendarContainer } from "../models/halo-infinite/season";
1098
+ import { Settings } from "../models/halo-infinite/settings";
1050
1099
  &nbsp;
1051
1100
  export interface ResultContainer&lt;TValue&gt; {
1052
1101
  Id: string;
@@ -1097,7 +1146,8 @@ export class HaloInfiniteClient {
1097
1146
  <span class="cstat-no" title="statement not covered" > }/oban/flight-configurations/titles/hi/audiences/retail/players/${wrapPlayerId(</span>
1098
1147
  <span class="cstat-no" title="statement not covered" > xuid</span>
1099
1148
  <span class="cstat-no" title="statement not covered" > )}/active`,</span>
1100
- <span class="cstat-no" title="statement not covered" > { method: "get" }</span>
1149
+ <span class="cstat-no" title="statement not covered" > { method: "get" },</span>
1150
+ <span class="cstat-no" title="statement not covered" > false</span>
1101
1151
  <span class="cstat-no" title="statement not covered" > );</span>
1102
1152
  <span class="cstat-no" title="statement not covered" > const {</span>
1103
1153
  <span class="cstat-no" title="statement not covered" > FlightConfigurationId,</span>
@@ -1120,7 +1170,11 @@ export class HaloInfiniteClient {
1120
1170
  private readonly fetchFn: FetchFunction = defaultFetch
1121
1171
  ) {}
1122
1172
  &nbsp;
1123
- protected async executeRequest(url: string, init: RequestInit) {
1173
+ protected async executeRequest(
1174
+ url: string,
1175
+ init: RequestInit,
1176
+ skipAuth: boolean
1177
+ ) {
1124
1178
  const failureHandler = unauthorizedRetryPolicy.onFailure(
1125
1179
  async ({ handled }) =&gt; {
1126
1180
  if (handled) {
@@ -1137,10 +1191,12 @@ export class HaloInfiniteClient {
1137
1191
  if (!headers.has("Accept")) {
1138
1192
  headers.set("Accept", "application/json");
1139
1193
  }
1140
- headers.set(
1141
- "x-343-authorization-spartan",
1142
- await this.spartanTokenProvider.getSpartanToken()
1143
- );
1194
+ if (!skipAuth) {
1195
+ headers.set(
1196
+ "x-343-authorization-spartan",
1197
+ await this.spartanTokenProvider.getSpartanToken()
1198
+ );
1199
+ }
1144
1200
  &nbsp;
1145
1201
  const response = await this.fetchFn(url, {
1146
1202
  ...init,
@@ -1158,8 +1214,12 @@ export class HaloInfiniteClient {
1158
1214
  }
1159
1215
  }
1160
1216
  &nbsp;
1161
- protected async executeJsonRequest&lt;T&gt;(url: string, init: RequestInit) {
1162
- const response = await this.executeRequest(url, init);
1217
+ protected async executeJsonRequest&lt;T&gt;(
1218
+ url: string,
1219
+ init: RequestInit,
1220
+ skipAuth?: boolean
1221
+ ) {
1222
+ const response = await this.executeRequest(url, init, skipAuth ?? false);
1163
1223
  &nbsp;
1164
1224
  if (response.status &gt;= 200 &amp;&amp; response.status &lt; 300) {
1165
1225
  return (await response.json()) as T;
@@ -1490,6 +1550,18 @@ export class HaloInfiniteClient {
1490
1550
  <span class="cstat-no" title="statement not covered" > method: "get",</span>
1491
1551
  <span class="cstat-no" title="statement not covered" > }</span>
1492
1552
  );
1553
+ &nbsp;
1554
+ public getSettings = <span class="fstat-no" title="function not covered" >(</span>
1555
+ <span class="cstat-no" title="statement not covered" > init?: Omit&lt;RequestInit, "body" | "method"&gt;</span>
1556
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;Settings&gt; =&gt;</span>
1557
+ <span class="cstat-no" title="statement not covered" > this.executeJsonRequest(</span>
1558
+ <span class="cstat-no" title="statement not covered" > `https://${HaloCoreEndpoints.SettingsOrigin}.${HaloCoreEndpoints.ServiceDomain}/settings/hipc/e2a0a7c6-6efe-42af-9283-c2ab73250c48`,</span>
1559
+ <span class="cstat-no" title="statement not covered" > {</span>
1560
+ <span class="cstat-no" title="statement not covered" > ...init,</span>
1561
+ <span class="cstat-no" title="statement not covered" > method: "get",</span>
1562
+ <span class="cstat-no" title="statement not covered" > },</span>
1563
+ <span class="cstat-no" title="statement not covered" > true</span>
1564
+ );
1493
1565
  }
1494
1566
  &nbsp;</pre></td></tr></table></pre>
1495
1567
 
@@ -1498,7 +1570,7 @@ export class HaloInfiniteClient {
1498
1570
  <div class='footer quiet pad2 space-top1 center small'>
1499
1571
  Code coverage generated by
1500
1572
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1501
- at 2025-11-21T02:48:56.500Z
1573
+ at 2025-12-08T18:28:58.806Z
1502
1574
  </div>
1503
1575
  <script src="../prettify.js"></script>
1504
1576
  <script>
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">37.3% </span>
26
+ <span class="strong">38.13% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>219/587</span>
28
+ <span class='fraction'>233/611</span>
29
29
  </div>
30
30
 
31
31
 
@@ -37,16 +37,16 @@
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">20% </span>
40
+ <span class="strong">19.23% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>5/25</span>
42
+ <span class='fraction'>5/26</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">37.3% </span>
47
+ <span class="strong">38.13% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>219/587</span>
49
+ <span class='fraction'>233/611</span>
50
50
  </div>
51
51
 
52
52
 
@@ -80,17 +80,17 @@
80
80
  </thead>
81
81
  <tbody><tr>
82
82
  <td class="file low" data-value="halo-infinite-client.ts"><a href="halo-infinite-client.ts.html">halo-infinite-client.ts</a></td>
83
- <td data-value="44.53" class="pic low">
84
- <div class="chart"><div class="cover-fill" style="width: 44%"></div><div class="cover-empty" style="width: 56%"></div></div>
83
+ <td data-value="45.2" class="pic low">
84
+ <div class="chart"><div class="cover-fill" style="width: 45%"></div><div class="cover-empty" style="width: 55%"></div></div>
85
85
  </td>
86
- <td data-value="44.53" class="pct low">44.53%</td>
87
- <td data-value="476" class="abs low">212/476</td>
86
+ <td data-value="45.2" class="pct low">45.2%</td>
87
+ <td data-value="500" class="abs low">226/500</td>
88
88
  <td data-value="88.88" class="pct high">88.88%</td>
89
89
  <td data-value="9" class="abs high">8/9</td>
90
- <td data-value="20.83" class="pct low">20.83%</td>
91
- <td data-value="24" class="abs low">5/24</td>
92
- <td data-value="44.53" class="pct low">44.53%</td>
93
- <td data-value="476" class="abs low">212/476</td>
90
+ <td data-value="20" class="pct low">20%</td>
91
+ <td data-value="25" class="abs low">5/25</td>
92
+ <td data-value="45.2" class="pct low">45.2%</td>
93
+ <td data-value="500" class="abs low">226/500</td>
94
94
  </tr>
95
95
 
96
96
  <tr>
@@ -131,7 +131,7 @@
131
131
  <div class='footer quiet pad2 space-top1 center small'>
132
132
  Code coverage generated by
133
133
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
134
- at 2025-11-21T02:48:56.500Z
134
+ at 2025-12-08T18:28:58.806Z
135
135
  </div>
136
136
  <script src="../prettify.js"></script>
137
137
  <script>
@@ -91,7 +91,7 @@ export const unauthorizedRetryPolicy = retry(
91
91
  <div class='footer quiet pad2 space-top1 center small'>
92
92
  Code coverage generated by
93
93
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
94
- at 2025-11-21T02:48:56.500Z
94
+ at 2025-12-08T18:28:58.806Z
95
95
  </div>
96
96
  <script src="../prettify.js"></script>
97
97
  <script>
@@ -115,7 +115,7 @@ export const inMemoryTokenPersister: TokenPersister = {
115
115
  <div class='footer quiet pad2 space-top1 center small'>
116
116
  Code coverage generated by
117
117
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
118
- at 2025-11-21T02:48:56.500Z
118
+ at 2025-12-08T18:28:58.806Z
119
119
  </div>
120
120
  <script src="../../prettify.js"></script>
121
121
  <script>
@@ -146,7 +146,7 @@
146
146
  <div class='footer quiet pad2 space-top1 center small'>
147
147
  Code coverage generated by
148
148
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
149
- at 2025-11-21T02:48:56.500Z
149
+ at 2025-12-08T18:28:58.806Z
150
150
  </div>
151
151
  <script src="../../prettify.js"></script>
152
152
  <script>
@@ -124,7 +124,7 @@
124
124
  <div class='footer quiet pad2 space-top1 center small'>
125
125
  Code coverage generated by
126
126
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
127
- at 2025-11-21T02:48:56.500Z
127
+ at 2025-12-08T18:28:58.806Z
128
128
  </div>
129
129
  <script src="../../prettify.js"></script>
130
130
  <script>
@@ -184,7 +184,7 @@ export const nodeFsTokenPersister: TokenPersister = {
184
184
  <div class='footer quiet pad2 space-top1 center small'>
185
185
  Code coverage generated by
186
186
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
187
- at 2025-11-21T02:48:56.500Z
187
+ at 2025-12-08T18:28:58.806Z
188
188
  </div>
189
189
  <script src="../../prettify.js"></script>
190
190
  <script>
@@ -85,7 +85,7 @@
85
85
  <div class='footer quiet pad2 space-top1 center small'>
86
86
  Code coverage generated by
87
87
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
88
- at 2025-11-21T02:48:56.500Z
88
+ at 2025-12-08T18:28:58.806Z
89
89
  </div>
90
90
  <script src="../../prettify.js"></script>
91
91
  <script>
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/71</span>
28
+ <span class='fraction'>0/70</span>
29
29
  </div>
30
30
 
31
31
 
@@ -46,7 +46,7 @@
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/71</span>
49
+ <span class='fraction'>0/70</span>
50
50
  </div>
51
51
 
52
52
 
@@ -133,8 +133,7 @@
133
133
  <a name='L68'></a><a href='#L68'>68</a>
134
134
  <a name='L69'></a><a href='#L69'>69</a>
135
135
  <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
136
+ <a name='L71'></a><a href='#L71'>71</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
138
137
  <span class="cline-any cline-no">&nbsp;</span>
139
138
  <span class="cline-any cline-no">&nbsp;</span>
140
139
  <span class="cline-any cline-no">&nbsp;</span>
@@ -204,18 +203,16 @@
204
203
  <span class="cline-any cline-no">&nbsp;</span>
205
204
  <span class="cline-any cline-no">&nbsp;</span>
206
205
  <span class="cline-any cline-no">&nbsp;</span>
207
- <span class="cline-any cline-no">&nbsp;</span>
208
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >import {</span></span></span>
206
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >import { HaloAuthenticationClient } from "../../authentication/halo-authentication-client";</span></span></span>
207
+ <span class="cstat-no" title="statement not covered" >import {</span>
209
208
  <span class="cstat-no" title="statement not covered" > RelyingParty,</span>
210
209
  <span class="cstat-no" title="statement not covered" > XboxAuthenticationClient,</span>
211
210
  <span class="cstat-no" title="statement not covered" >} from "../../authentication/xbox-authentication-client";</span>
211
+ <span class="cstat-no" title="statement not covered" >import type { FetchFunction } from "../../util/fetch-function";</span>
212
212
  <span class="cstat-no" title="statement not covered" >import { TokenPersister } from "../token-persisters";</span>
213
- <span class="cstat-no" title="statement not covered" >import { HaloAuthenticationClient } from "../../authentication/halo-authentication-client";</span>
214
- <span class="cstat-no" title="statement not covered" >import { SpartanTokenProvider } from "./spartan-token-provider";</span>
215
213
  <span class="cstat-no" title="statement not covered" >import { inMemoryTokenPersister } from "../token-persisters/in-memory-token-persister";</span>
214
+ <span class="cstat-no" title="statement not covered" >import { SpartanTokenProvider } from "./spartan-token-provider";</span>
216
215
  <span class="cstat-no" title="statement not covered" >import { XboxTokenProvider } from "./xbox-token-provider";</span>
217
- <span class="cstat-no" title="statement not covered" >import type { FetchFunction } from "../../util/fetch-function";</span>
218
- <span class="cstat-no" title="statement not covered" >import type { DateTime } from "luxon";</span>
219
216
  <span class="cstat-no" title="statement not covered" ></span>
220
217
  <span class="cstat-no" title="statement not covered" >/**</span>
221
218
  <span class="cstat-no" title="statement not covered" > * A SpartanTokenProvider that fetches both the Xbox and Halo tokens in the same</span>
@@ -283,7 +280,7 @@
283
280
  <div class='footer quiet pad2 space-top1 center small'>
284
281
  Code coverage generated by
285
282
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
286
- at 2025-11-21T02:48:56.500Z
283
+ at 2025-12-08T18:28:58.806Z
287
284
  </div>
288
285
  <script src="../../prettify.js"></script>
289
286
  <script>
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/130</span>
28
+ <span class='fraction'>0/128</span>
29
29
  </div>
30
30
 
31
31
 
@@ -46,7 +46,7 @@
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/130</span>
49
+ <span class='fraction'>0/128</span>
50
50
  </div>
51
51
 
52
52
 
@@ -84,13 +84,13 @@
84
84
  <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
85
85
  </td>
86
86
  <td data-value="0" class="pct low">0%</td>
87
- <td data-value="71" class="abs low">0/71</td>
87
+ <td data-value="70" class="abs low">0/70</td>
88
88
  <td data-value="0" class="pct low">0%</td>
89
89
  <td data-value="1" class="abs low">0/1</td>
90
90
  <td data-value="0" class="pct low">0%</td>
91
91
  <td data-value="1" class="abs low">0/1</td>
92
92
  <td data-value="0" class="pct low">0%</td>
93
- <td data-value="71" class="abs low">0/71</td>
93
+ <td data-value="70" class="abs low">0/70</td>
94
94
  </tr>
95
95
 
96
96
  <tr>
@@ -114,13 +114,13 @@
114
114
  <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
115
115
  </td>
116
116
  <td data-value="0" class="pct low">0%</td>
117
- <td data-value="48" class="abs low">0/48</td>
117
+ <td data-value="47" class="abs low">0/47</td>
118
118
  <td data-value="0" class="pct low">0%</td>
119
119
  <td data-value="1" class="abs low">0/1</td>
120
120
  <td data-value="0" class="pct low">0%</td>
121
121
  <td data-value="1" class="abs low">0/1</td>
122
122
  <td data-value="0" class="pct low">0%</td>
123
- <td data-value="48" class="abs low">0/48</td>
123
+ <td data-value="47" class="abs low">0/47</td>
124
124
  </tr>
125
125
 
126
126
  <tr>
@@ -146,7 +146,7 @@
146
146
  <div class='footer quiet pad2 space-top1 center small'>
147
147
  Code coverage generated by
148
148
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
149
- at 2025-11-21T02:48:56.500Z
149
+ at 2025-12-08T18:28:58.806Z
150
150
  </div>
151
151
  <script src="../../prettify.js"></script>
152
152
  <script>
@@ -91,7 +91,7 @@
91
91
  <div class='footer quiet pad2 space-top1 center small'>
92
92
  Code coverage generated by
93
93
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
94
- at 2025-11-21T02:48:56.500Z
94
+ at 2025-12-08T18:28:58.806Z
95
95
  </div>
96
96
  <script src="../../prettify.js"></script>
97
97
  <script>