halo-infinite-api 12.0.3 → 13.0.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.
- package/coverage/lcov-report/authentication/halo-authentication-client.ts.html +40 -19
- package/coverage/lcov-report/authentication/index.html +5 -5
- package/coverage/lcov-report/authentication/xbox-authentication-client.ts.html +1 -1
- package/coverage/lcov-report/core/halo-infinite-client.ts.html +29 -8
- package/coverage/lcov-report/core/index.html +14 -14
- package/coverage/lcov-report/core/request-policy.ts.html +1 -1
- package/coverage/lcov-report/core/token-persisters/in-memory-token-persister.ts.html +1 -1
- package/coverage/lcov-report/core/token-persisters/index.html +1 -1
- package/coverage/lcov-report/core/token-persisters/local-storage-token-persister.ts.html +1 -1
- package/coverage/lcov-report/core/token-persisters/node-fs-token-persister.ts.html +1 -1
- package/coverage/lcov-report/core/token-persisters/token-persister.ts.html +1 -1
- package/coverage/lcov-report/core/token-providers/auto-token-provider.ts.html +27 -24
- package/coverage/lcov-report/core/token-providers/index.html +5 -5
- package/coverage/lcov-report/core/token-providers/spartan-token-providers/index.html +5 -5
- package/coverage/lcov-report/core/token-providers/spartan-token-providers/static-xsts-ticket-token-spartan-token-provider.ts.html +37 -16
- package/coverage/lcov-report/core/token-providers/xbox-token-provider.ts.html +1 -1
- package/coverage/lcov-report/core/xbox-client.ts.html +1 -1
- package/coverage/lcov-report/endpoints/halo-core-endpoints.ts.html +1 -1
- package/coverage/lcov-report/endpoints/index.html +1 -1
- package/coverage/lcov-report/index.html +20 -20
- package/coverage/lcov-report/models/halo-infinite/api-formatted-date.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/asset-kind.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/asset-version-link.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/asset.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/ban-summary.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/game-variant-category.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/index.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/match-info.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/match-outcome.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/match-skill.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/match-stats.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/match-type.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/matches-privacy.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/medals-metadata-file.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/player-match-history.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/playlist-csr-container.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/playlist-csr.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/playlist-experience.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/playlist.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/progression-file.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/season.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/service-record.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/skill-result.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/stats.ts.html +1 -1
- package/coverage/lcov-report/models/halo-infinite/user-info.ts.html +1 -1
- package/coverage/lcov-report/models/index.html +1 -1
- package/coverage/lcov-report/models/spartan-token-proof.ts.html +1 -1
- package/coverage/lcov-report/models/spartan-token-request.ts.html +1 -1
- package/coverage/lcov-report/models/spartan-token.ts.html +1 -1
- package/coverage/lcov-report/models/xbox-ticket.ts.html +1 -1
- package/coverage/lcov-report/util/date-time.ts.html +1 -1
- package/coverage/lcov-report/util/expiry-token-cache.ts.html +1 -1
- package/coverage/lcov-report/util/fetch-function.ts.html +1 -1
- package/coverage/lcov-report/util/global-contants.ts.html +1 -1
- package/coverage/lcov-report/util/index.html +1 -1
- package/coverage/lcov-report/util/keyed-expiry-token-cache.ts.html +1 -1
- package/coverage/lcov-report/util/request-error.ts.html +1 -1
- package/coverage/lcov-report/util/resolvable-promise.ts.html +1 -1
- package/coverage/lcov-report/util/xuid.ts.html +1 -1
- package/coverage/lcov.info +225 -201
- package/dist/index.cjs +54 -44
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +19 -10
- package/dist/index.d.ts +19 -10
- package/dist/index.js +54 -44
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/authentication/halo-authentication-client.ts +22 -15
- package/src/core/halo-infinite-client.test.ts +6 -1
- package/src/core/halo-infinite-client.ts +7 -0
- package/src/core/token-providers/auto-token-provider.ts +21 -20
- package/src/core/token-providers/spartan-token-providers/index.ts +3 -0
- package/src/core/token-providers/spartan-token-providers/static-xsts-ticket-token-spartan-token-provider.ts +19 -12
|
@@ -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/
|
|
28
|
+
<span class='fraction'>0/102</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/
|
|
49
|
+
<span class='fraction'>0/102</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -158,7 +158,21 @@
|
|
|
158
158
|
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
159
|
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
160
|
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
-
<a name='L96'></a><a href='#L96'>96</a
|
|
161
|
+
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
+
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
+
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
+
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
+
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
+
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
+
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
+
<a name='L103'></a><a href='#L103'>103</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
|
|
169
|
+
<span class="cline-any cline-no"> </span>
|
|
170
|
+
<span class="cline-any cline-no"> </span>
|
|
171
|
+
<span class="cline-any cline-no"> </span>
|
|
172
|
+
<span class="cline-any cline-no"> </span>
|
|
173
|
+
<span class="cline-any cline-no"> </span>
|
|
174
|
+
<span class="cline-any cline-no"> </span>
|
|
175
|
+
<span class="cline-any cline-no"> </span>
|
|
162
176
|
<span class="cline-any cline-no"> </span>
|
|
163
177
|
<span class="cline-any cline-no"> </span>
|
|
164
178
|
<span class="cline-any cline-no"> </span>
|
|
@@ -274,15 +288,13 @@
|
|
|
274
288
|
<span class="cstat-no" title="statement not covered" > const failureHandler = unauthorizedRetryPolicy.onFailure(</span>
|
|
275
289
|
<span class="cstat-no" title="statement not covered" > async ({ handled }) => {</span>
|
|
276
290
|
<span class="cstat-no" title="statement not covered" > if (handled) {</span>
|
|
277
|
-
<span class="cstat-no" title="statement not covered" >
|
|
278
|
-
<span class="cstat-no" title="statement not covered" > await this.clearXstsToken();</span>
|
|
279
|
-
<span class="cstat-no" title="statement not covered" > await this.clearSpartanToken();</span>
|
|
291
|
+
<span class="cstat-no" title="statement not covered" > await this.xsts.clearXstsToken();</span>
|
|
280
292
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
281
293
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
282
294
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
283
295
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
284
296
|
<span class="cstat-no" title="statement not covered" > return await unauthorizedRetryPolicy.execute(async () => {</span>
|
|
285
|
-
<span class="cstat-no" title="statement not covered" > const xstsToken = await this.
|
|
297
|
+
<span class="cstat-no" title="statement not covered" > const xstsToken = await this.xsts.fetchToken();</span>
|
|
286
298
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
287
299
|
<span class="cstat-no" title="statement not covered" > const tokenRequest: SpartanTokenRequest = {</span>
|
|
288
300
|
<span class="cstat-no" title="statement not covered" > Audience: "urn:343:s3:services",</span>
|
|
@@ -311,7 +323,7 @@
|
|
|
311
323
|
<span class="cstat-no" title="statement not covered" > token: result_2.SpartanToken,</span>
|
|
312
324
|
<span class="cstat-no" title="statement not covered" > expiresAt: DateTime.fromISO(result_2.ExpiresUtc.ISO8601Date),</span>
|
|
313
325
|
<span class="cstat-no" title="statement not covered" > };</span>
|
|
314
|
-
<span class="cstat-no" title="statement not covered" > await this.saveToken(newToken);</span>
|
|
326
|
+
<span class="cstat-no" title="statement not covered" > await this.tokenStore.saveToken(newToken);</span>
|
|
315
327
|
<span class="cstat-no" title="statement not covered" > return newToken;</span>
|
|
316
328
|
<span class="cstat-no" title="statement not covered" > } else {</span>
|
|
317
329
|
<span class="cstat-no" title="statement not covered" > throw new RequestError(url, response);</span>
|
|
@@ -321,18 +333,22 @@
|
|
|
321
333
|
<span class="cstat-no" title="statement not covered" > failureHandler.dispose();</span>
|
|
322
334
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
323
335
|
<span class="cstat-no" title="statement not covered" > },</span>
|
|
324
|
-
<span class="cstat-no" title="statement not covered" > () => this.loadToken()</span>
|
|
336
|
+
<span class="cstat-no" title="statement not covered" > () => this.tokenStore.loadToken()</span>
|
|
325
337
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
326
338
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
327
339
|
<span class="cstat-no" title="statement not covered" > constructor(</span>
|
|
328
|
-
<span class="cstat-no" title="statement not covered" > private readonly
|
|
329
|
-
<span class="cstat-no" title="statement not covered" >
|
|
330
|
-
<span class="cstat-no" title="statement not covered" >
|
|
331
|
-
<span class="cstat-no" title="statement not covered" >
|
|
332
|
-
<span class="cstat-no" title="statement not covered" >
|
|
333
|
-
<span class="cstat-no" title="statement not covered" >
|
|
334
|
-
<span class="cstat-no" title="statement not covered" >
|
|
335
|
-
<span class="cstat-no" title="statement not covered" >
|
|
340
|
+
<span class="cstat-no" title="statement not covered" > private readonly xsts: {</span>
|
|
341
|
+
<span class="cstat-no" title="statement not covered" > fetchToken: () => Promise<string> | string;</span>
|
|
342
|
+
<span class="cstat-no" title="statement not covered" > clearXstsToken: () => Promise<void>;</span>
|
|
343
|
+
<span class="cstat-no" title="statement not covered" > },</span>
|
|
344
|
+
<span class="cstat-no" title="statement not covered" > private readonly tokenStore: {</span>
|
|
345
|
+
<span class="cstat-no" title="statement not covered" > loadToken: () => Promise<{</span>
|
|
346
|
+
<span class="cstat-no" title="statement not covered" > token: string;</span>
|
|
347
|
+
<span class="cstat-no" title="statement not covered" > expiresAt: unknown;</span>
|
|
348
|
+
<span class="cstat-no" title="statement not covered" > } | null>;</span>
|
|
349
|
+
<span class="cstat-no" title="statement not covered" > saveToken: (token: Token) => Promise<void>;</span>
|
|
350
|
+
<span class="cstat-no" title="statement not covered" > clearToken: () => Promise<void>;</span>
|
|
351
|
+
<span class="cstat-no" title="statement not covered" > },</span>
|
|
336
352
|
<span class="cstat-no" title="statement not covered" > private readonly fetchFn: FetchFunction = defaultFetch</span>
|
|
337
353
|
<span class="cstat-no" title="statement not covered" > ) {}</span>
|
|
338
354
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
@@ -345,7 +361,12 @@
|
|
|
345
361
|
<span class="cstat-no" title="statement not covered" > // Clear from memory</span>
|
|
346
362
|
<span class="cstat-no" title="statement not covered" > this.spartanTokenCache.clearToken();</span>
|
|
347
363
|
<span class="cstat-no" title="statement not covered" > // Clear from storage</span>
|
|
348
|
-
<span class="cstat-no" title="statement not covered" > await this.clearToken();</span>
|
|
364
|
+
<span class="cstat-no" title="statement not covered" > await this.tokenStore.clearToken();</span>
|
|
365
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
366
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
367
|
+
<span class="cstat-no" title="statement not covered" > public async getCurrentExpiration(): Promise<DateTime | null> {</span>
|
|
368
|
+
<span class="cstat-no" title="statement not covered" > const currentToken = await this.spartanTokenCache.getExistingToken();</span>
|
|
369
|
+
<span class="cstat-no" title="statement not covered" > return currentToken ? currentToken.expiresAt : null;</span>
|
|
349
370
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
350
371
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
351
372
|
</pre></td></tr></table></pre>
|
|
@@ -355,7 +376,7 @@
|
|
|
355
376
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
356
377
|
Code coverage generated by
|
|
357
378
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
358
|
-
at 2025-11-
|
|
379
|
+
at 2025-11-19T04:39:38.927Z
|
|
359
380
|
</div>
|
|
360
381
|
<script src="../prettify.js"></script>
|
|
361
382
|
<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/
|
|
28
|
+
<span class='fraction'>0/263</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/
|
|
49
|
+
<span class='fraction'>0/263</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="
|
|
87
|
+
<td data-value="102" class="abs low">0/102</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="
|
|
93
|
+
<td data-value="102" class="abs low">0/102</td>
|
|
94
94
|
</tr>
|
|
95
95
|
|
|
96
96
|
<tr>
|
|
@@ -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-
|
|
119
|
+
at 2025-11-19T04:39:38.927Z
|
|
120
120
|
</div>
|
|
121
121
|
<script src="../prettify.js"></script>
|
|
122
122
|
<script>
|
|
@@ -553,7 +553,7 @@
|
|
|
553
553
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
554
554
|
Code coverage generated by
|
|
555
555
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
556
|
-
at 2025-11-
|
|
556
|
+
at 2025-11-19T04:39:38.927Z
|
|
557
557
|
</div>
|
|
558
558
|
<script src="../prettify.js"></script>
|
|
559
559
|
<script>
|
|
@@ -23,16 +23,16 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">44.
|
|
26
|
+
<span class="strong">44.72% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>216/483</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">72.72% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>8/
|
|
35
|
+
<span class='fraction'>8/11</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">44.
|
|
47
|
+
<span class="strong">44.72% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>216/483</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -539,7 +539,14 @@
|
|
|
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
|
|
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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
543
550
|
<span class="cline-any cline-yes">1x</span>
|
|
544
551
|
<span class="cline-any cline-yes">1x</span>
|
|
545
552
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -652,6 +659,13 @@
|
|
|
652
659
|
<span class="cline-any cline-yes">1x</span>
|
|
653
660
|
<span class="cline-any cline-yes">1x</span>
|
|
654
661
|
<span class="cline-any cline-yes">1x</span>
|
|
662
|
+
<span class="cline-any cline-no"> </span>
|
|
663
|
+
<span class="cline-any cline-no"> </span>
|
|
664
|
+
<span class="cline-any cline-no"> </span>
|
|
665
|
+
<span class="cline-any cline-yes">1x</span>
|
|
666
|
+
<span class="cline-any cline-yes">1x</span>
|
|
667
|
+
<span class="cline-any cline-yes">1x</span>
|
|
668
|
+
<span class="cline-any cline-yes">1x</span>
|
|
655
669
|
<span class="cline-any cline-yes">1x</span>
|
|
656
670
|
<span class="cline-any cline-yes">1x</span>
|
|
657
671
|
<span class="cline-any cline-yes">2x</span>
|
|
@@ -1117,6 +1131,7 @@ export class HaloInfiniteClient {
|
|
|
1117
1131
|
|
|
1118
1132
|
constructor(
|
|
1119
1133
|
private readonly spartanTokenProvider: SpartanTokenProvider,
|
|
1134
|
+
private readonly clearXstsToken: () => Promise<void>,
|
|
1120
1135
|
private readonly fetchFn: FetchFunction = defaultFetch
|
|
1121
1136
|
) {}
|
|
1122
1137
|
|
|
@@ -1124,6 +1139,12 @@ export class HaloInfiniteClient {
|
|
|
1124
1139
|
const failureHandler = unauthorizedRetryPolicy.onFailure(
|
|
1125
1140
|
async ({ handled }) => {
|
|
1126
1141
|
if (handled) {
|
|
1142
|
+
const expiration =
|
|
1143
|
+
await this.spartanTokenProvider.getCurrentExpiration();
|
|
1144
|
+
if (expiration<span class="branch-0 cbranch-no" title="branch not covered" > && expiration > DateTime.now().plus({ minutes: 1 }))</span> <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1145
|
+
<span class="cstat-no" title="statement not covered" > // Token should still be valid, but was rejected. That means the xsts is likely invalid.</span>
|
|
1146
|
+
<span class="cstat-no" title="statement not covered" > await this.clearXstsToken();</span>
|
|
1147
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1127
1148
|
await this.spartanTokenProvider.clearSpartanToken();
|
|
1128
1149
|
}
|
|
1129
1150
|
}
|
|
@@ -1498,7 +1519,7 @@ export class HaloInfiniteClient {
|
|
|
1498
1519
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
1499
1520
|
Code coverage generated by
|
|
1500
1521
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1501
|
-
at 2025-11-
|
|
1522
|
+
at 2025-11-19T04:39:38.927Z
|
|
1502
1523
|
</div>
|
|
1503
1524
|
<script src="../prettify.js"></script>
|
|
1504
1525
|
<script>
|
|
@@ -23,16 +23,16 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">37.
|
|
26
|
+
<span class="strong">37.54% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>223/594</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">69.23% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>9/
|
|
35
|
+
<span class='fraction'>9/13</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">37.
|
|
47
|
+
<span class="strong">37.54% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>223/594</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.
|
|
83
|
+
<td data-value="44.72" class="pic low">
|
|
84
84
|
<div class="chart"><div class="cover-fill" style="width: 44%"></div><div class="cover-empty" style="width: 56%"></div></div>
|
|
85
85
|
</td>
|
|
86
|
-
<td data-value="44.
|
|
87
|
-
<td data-value="
|
|
88
|
-
<td data-value="
|
|
89
|
-
<td data-value="
|
|
86
|
+
<td data-value="44.72" class="pct low">44.72%</td>
|
|
87
|
+
<td data-value="483" class="abs low">216/483</td>
|
|
88
|
+
<td data-value="72.72" class="pct medium">72.72%</td>
|
|
89
|
+
<td data-value="11" class="abs medium">8/11</td>
|
|
90
90
|
<td data-value="20.83" class="pct low">20.83%</td>
|
|
91
91
|
<td data-value="24" class="abs low">5/24</td>
|
|
92
|
-
<td data-value="44.
|
|
93
|
-
<td data-value="
|
|
92
|
+
<td data-value="44.72" class="pct low">44.72%</td>
|
|
93
|
+
<td data-value="483" class="abs low">216/483</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-
|
|
134
|
+
at 2025-11-19T04:39:38.927Z
|
|
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-
|
|
94
|
+
at 2025-11-19T04:39:38.927Z
|
|
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-
|
|
118
|
+
at 2025-11-19T04:39:38.927Z
|
|
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-
|
|
149
|
+
at 2025-11-19T04:39:38.927Z
|
|
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-
|
|
127
|
+
at 2025-11-19T04:39:38.927Z
|
|
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-
|
|
187
|
+
at 2025-11-19T04:39:38.927Z
|
|
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-
|
|
88
|
+
at 2025-11-19T04:39:38.927Z
|
|
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/
|
|
28
|
+
<span class='fraction'>0/79</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/
|
|
49
|
+
<span class='fraction'>0/79</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -141,7 +141,9 @@
|
|
|
141
141
|
<a name='L76'></a><a href='#L76'>76</a>
|
|
142
142
|
<a name='L77'></a><a href='#L77'>77</a>
|
|
143
143
|
<a name='L78'></a><a href='#L78'>78</a>
|
|
144
|
-
<a name='L79'></a><a href='#L79'>79</a
|
|
144
|
+
<a name='L79'></a><a href='#L79'>79</a>
|
|
145
|
+
<a name='L80'></a><a href='#L80'>80</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
|
|
146
|
+
<span class="cline-any cline-no"> </span>
|
|
145
147
|
<span class="cline-any cline-no"> </span>
|
|
146
148
|
<span class="cline-any cline-no"> </span>
|
|
147
149
|
<span class="cline-any cline-no"> </span>
|
|
@@ -229,6 +231,7 @@
|
|
|
229
231
|
<span class="cstat-no" title="statement not covered" >import { inMemoryTokenPersister } from "../token-persisters/in-memory-token-persister";</span>
|
|
230
232
|
<span class="cstat-no" title="statement not covered" >import { XboxTokenProvider } from "./xbox-token-provider";</span>
|
|
231
233
|
<span class="cstat-no" title="statement not covered" >import type { FetchFunction } from "../../util/fetch-function";</span>
|
|
234
|
+
<span class="cstat-no" title="statement not covered" >import type { DateTime } from "luxon";</span>
|
|
232
235
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
233
236
|
<span class="cstat-no" title="statement not covered" >/**</span>
|
|
234
237
|
<span class="cstat-no" title="statement not covered" > * A SpartanTokenProvider that fetches both the Xbox and Halo tokens in the same</span>
|
|
@@ -240,6 +243,7 @@
|
|
|
240
243
|
<span class="cstat-no" title="statement not covered" >{</span>
|
|
241
244
|
<span class="cstat-no" title="statement not covered" > public readonly getSpartanToken: () => Promise<string>;</span>
|
|
242
245
|
<span class="cstat-no" title="statement not covered" > public readonly clearSpartanToken: () => Promise<void>;</span>
|
|
246
|
+
<span class="cstat-no" title="statement not covered" > public readonly getCurrentExpiration: () => Promise<DateTime | null>;</span>
|
|
243
247
|
<span class="cstat-no" title="statement not covered" > public readonly getXboxLiveV3Token: () => Promise<string>;</span>
|
|
244
248
|
<span class="cstat-no" title="statement not covered" > public readonly clearXboxLiveV3Token: () => Promise<void>;</span>
|
|
245
249
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
@@ -259,27 +263,25 @@
|
|
|
259
263
|
<span class="cstat-no" title="statement not covered" > fetchFn</span>
|
|
260
264
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
261
265
|
<span class="cstat-no" title="statement not covered" > const haloAuthClient = new HaloAuthenticationClient(</span>
|
|
262
|
-
<span class="cstat-no" title="statement not covered" >
|
|
263
|
-
<span class="cstat-no" title="statement not covered" >
|
|
264
|
-
<span class="cstat-no" title="statement not covered" >
|
|
265
|
-
<span class="cstat-no" title="statement not covered" >
|
|
266
|
-
<span class="cstat-no" title="statement not covered" >
|
|
267
|
-
<span class="cstat-no" title="statement not covered" >
|
|
268
|
-
<span class="cstat-no" title="statement not covered" >
|
|
269
|
-
<span class="cstat-no" title="statement not covered" >
|
|
270
|
-
<span class="cstat-no" title="statement not covered" >
|
|
271
|
-
<span class="cstat-no" title="statement not covered" > },</span>
|
|
272
|
-
<span class="cstat-no" title="statement not covered" > async () => {</span>
|
|
273
|
-
<span class="cstat-no" title="statement not covered" > const tokenPersister = await tokenPeristerOrPromise;</span>
|
|
274
|
-
<span class="cstat-no" title="statement not covered" > return await tokenPersister.load("halo.authToken");</span>
|
|
275
|
-
<span class="cstat-no" title="statement not covered" > },</span>
|
|
276
|
-
<span class="cstat-no" title="statement not covered" > async (token) => {</span>
|
|
277
|
-
<span class="cstat-no" title="statement not covered" > const tokenPersister = await tokenPeristerOrPromise;</span>
|
|
278
|
-
<span class="cstat-no" title="statement not covered" > await tokenPersister.save("halo.authToken", token);</span>
|
|
266
|
+
<span class="cstat-no" title="statement not covered" > {</span>
|
|
267
|
+
<span class="cstat-no" title="statement not covered" > fetchToken: async () => {</span>
|
|
268
|
+
<span class="cstat-no" title="statement not covered" > const xstsTicket = await xboxAuthClient.getXstsTicket(</span>
|
|
269
|
+
<span class="cstat-no" title="statement not covered" > getOauth2AccessToken,</span>
|
|
270
|
+
<span class="cstat-no" title="statement not covered" > RelyingParty.Halo</span>
|
|
271
|
+
<span class="cstat-no" title="statement not covered" > );</span>
|
|
272
|
+
<span class="cstat-no" title="statement not covered" > return xstsTicket.Token;</span>
|
|
273
|
+
<span class="cstat-no" title="statement not covered" > },</span>
|
|
274
|
+
<span class="cstat-no" title="statement not covered" > clearXstsToken: () => xboxAuthClient.clearXstsTicket(RelyingParty.Halo),</span>
|
|
279
275
|
<span class="cstat-no" title="statement not covered" > },</span>
|
|
280
|
-
<span class="cstat-no" title="statement not covered" >
|
|
281
|
-
<span class="cstat-no" title="statement not covered" >
|
|
282
|
-
<span class="cstat-no" title="statement not covered" >
|
|
276
|
+
<span class="cstat-no" title="statement not covered" > {</span>
|
|
277
|
+
<span class="cstat-no" title="statement not covered" > loadToken: async () =></span>
|
|
278
|
+
<span class="cstat-no" title="statement not covered" > (await (await tokenPeristerOrPromise).load("halo.authToken")) ?? null,</span>
|
|
279
|
+
<span class="cstat-no" title="statement not covered" > saveToken: async (token) => {</span>
|
|
280
|
+
<span class="cstat-no" title="statement not covered" > await (await tokenPeristerOrPromise).save("halo.authToken", token);</span>
|
|
281
|
+
<span class="cstat-no" title="statement not covered" > },</span>
|
|
282
|
+
<span class="cstat-no" title="statement not covered" > clearToken: async () => {</span>
|
|
283
|
+
<span class="cstat-no" title="statement not covered" > await (await tokenPeristerOrPromise).clear("halo.authToken");</span>
|
|
284
|
+
<span class="cstat-no" title="statement not covered" > },</span>
|
|
283
285
|
<span class="cstat-no" title="statement not covered" > },</span>
|
|
284
286
|
<span class="cstat-no" title="statement not covered" > fetchFn</span>
|
|
285
287
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
@@ -295,6 +297,7 @@
|
|
|
295
297
|
<span class="cstat-no" title="statement not covered" > };</span>
|
|
296
298
|
<span class="cstat-no" title="statement not covered" > this.clearXboxLiveV3Token = () =></span>
|
|
297
299
|
<span class="cstat-no" title="statement not covered" > xboxAuthClient.clearXstsTicket(RelyingParty.Xbox);</span>
|
|
300
|
+
<span class="cstat-no" title="statement not covered" > this.getCurrentExpiration = () => haloAuthClient.getCurrentExpiration();</span>
|
|
298
301
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
299
302
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
300
303
|
</pre></td></tr></table></pre>
|
|
@@ -304,7 +307,7 @@
|
|
|
304
307
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
305
308
|
Code coverage generated by
|
|
306
309
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
307
|
-
at 2025-11-
|
|
310
|
+
at 2025-11-19T04:39:38.927Z
|
|
308
311
|
</div>
|
|
309
312
|
<script src="../../prettify.js"></script>
|
|
310
313
|
<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/
|
|
28
|
+
<span class='fraction'>0/83</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/
|
|
49
|
+
<span class='fraction'>0/83</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="
|
|
87
|
+
<td data-value="79" class="abs low">0/79</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="
|
|
93
|
+
<td data-value="79" class="abs low">0/79</td>
|
|
94
94
|
</tr>
|
|
95
95
|
|
|
96
96
|
<tr>
|
|
@@ -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-
|
|
119
|
+
at 2025-11-19T04:39:38.927Z
|
|
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/
|
|
28
|
+
<span class='fraction'>0/56</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/
|
|
49
|
+
<span class='fraction'>0/56</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="
|
|
87
|
+
<td data-value="56" class="abs low">0/56</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="
|
|
93
|
+
<td data-value="56" class="abs low">0/56</td>
|
|
94
94
|
</tr>
|
|
95
95
|
|
|
96
96
|
</tbody>
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
102
102
|
Code coverage generated by
|
|
103
103
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
104
|
-
at 2025-11-
|
|
104
|
+
at 2025-11-19T04:39:38.927Z
|
|
105
105
|
</div>
|
|
106
106
|
<script src="../../../prettify.js"></script>
|
|
107
107
|
<script>
|