halo-infinite-api 12.0.3 → 14.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 +44 -20
- package/coverage/lcov-report/authentication/index.html +7 -7
- package/coverage/lcov-report/authentication/xbox-authentication-client.ts.html +24 -9
- package/coverage/lcov-report/core/halo-infinite-client.ts.html +6 -6
- package/coverage/lcov-report/core/index.html +1 -1
- 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 +31 -52
- package/coverage/lcov-report/core/token-providers/index.html +37 -7
- package/coverage/lcov-report/core/token-providers/spartan-token-provider.ts.html +106 -0
- package/coverage/lcov-report/core/token-providers/{spartan-token-providers/static-xsts-ticket-token-spartan-token-provider.ts.html → static-xsts-ticket-token-spartan-token-provider.ts.html} +39 -42
- 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 +15 -30
- 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 +29 -29
- package/coverage/lcov-report/util/xuid.ts.html +1 -1
- package/coverage/lcov.info +76 -52
- package/dist/index.cjs +65 -70
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +26 -22
- package/dist/index.d.ts +26 -22
- package/dist/index.js +65 -70
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/authentication/halo-authentication-client.ts +24 -16
- package/src/authentication/xbox-authentication-client.ts +10 -5
- package/src/core/halo-infinite-client.test.ts +18 -4
- package/src/core/halo-infinite-client.ts +5 -5
- package/src/core/token-providers/auto-token-provider.ts +27 -34
- package/src/core/token-providers/{spartan-token-providers/index.ts → spartan-token-provider.ts} +3 -0
- package/src/core/token-providers/static-xsts-ticket-token-spartan-token-provider.ts +48 -0
- package/src/index.ts +2 -2
- package/coverage/lcov-report/core/token-providers/spartan-token-providers/index.html +0 -116
- package/src/core/token-providers/spartan-token-providers/static-xsts-ticket-token-spartan-token-provider.ts +0 -49
|
@@ -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/103</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/103</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -158,7 +158,23 @@
|
|
|
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>
|
|
169
|
+
<a name='L104'></a><a href='#L104'>104</a></td><td class="line-coverage quiet"><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>
|
|
176
|
+
<span class="cline-any cline-no"> </span>
|
|
177
|
+
<span class="cline-any cline-no"> </span>
|
|
162
178
|
<span class="cline-any cline-no"> </span>
|
|
163
179
|
<span class="cline-any cline-no"> </span>
|
|
164
180
|
<span class="cline-any cline-no"> </span>
|
|
@@ -262,27 +278,26 @@
|
|
|
262
278
|
<span class="cstat-no" title="statement not covered" >import { RequestError } from "../util/request-error";</span>
|
|
263
279
|
<span class="cstat-no" title="statement not covered" >import { unauthorizedRetryPolicy } from "../core/request-policy";</span>
|
|
264
280
|
<span class="cstat-no" title="statement not covered" >import { HaloCoreEndpoints } from "../endpoints/halo-core-endpoints";</span>
|
|
281
|
+
<span class="cstat-no" title="statement not covered" >import { SpartanTokenProvider } from "..";</span>
|
|
265
282
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
266
283
|
<span class="cstat-no" title="statement not covered" >export interface Token {</span>
|
|
267
284
|
<span class="cstat-no" title="statement not covered" > token: string;</span>
|
|
268
285
|
<span class="cstat-no" title="statement not covered" > expiresAt: DateTime;</span>
|
|
269
286
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
270
287
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
271
|
-
<span class="cstat-no" title="statement not covered" >export class HaloAuthenticationClient {</span>
|
|
288
|
+
<span class="cstat-no" title="statement not covered" >export class HaloAuthenticationClient implements SpartanTokenProvider {</span>
|
|
272
289
|
<span class="cstat-no" title="statement not covered" > private spartanTokenCache = new ExpiryTokenCache(</span>
|
|
273
290
|
<span class="cstat-no" title="statement not covered" > async () => {</span>
|
|
274
291
|
<span class="cstat-no" title="statement not covered" > const failureHandler = unauthorizedRetryPolicy.onFailure(</span>
|
|
275
292
|
<span class="cstat-no" title="statement not covered" > async ({ handled }) => {</span>
|
|
276
293
|
<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>
|
|
294
|
+
<span class="cstat-no" title="statement not covered" > await this.xsts.clearXstsToken();</span>
|
|
280
295
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
281
296
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
282
297
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
283
298
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
284
299
|
<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.
|
|
300
|
+
<span class="cstat-no" title="statement not covered" > const xstsToken = await this.xsts.fetchToken();</span>
|
|
286
301
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
287
302
|
<span class="cstat-no" title="statement not covered" > const tokenRequest: SpartanTokenRequest = {</span>
|
|
288
303
|
<span class="cstat-no" title="statement not covered" > Audience: "urn:343:s3:services",</span>
|
|
@@ -311,7 +326,7 @@
|
|
|
311
326
|
<span class="cstat-no" title="statement not covered" > token: result_2.SpartanToken,</span>
|
|
312
327
|
<span class="cstat-no" title="statement not covered" > expiresAt: DateTime.fromISO(result_2.ExpiresUtc.ISO8601Date),</span>
|
|
313
328
|
<span class="cstat-no" title="statement not covered" > };</span>
|
|
314
|
-
<span class="cstat-no" title="statement not covered" > await this.saveToken(newToken);</span>
|
|
329
|
+
<span class="cstat-no" title="statement not covered" > await this.tokenStore.saveToken(newToken);</span>
|
|
315
330
|
<span class="cstat-no" title="statement not covered" > return newToken;</span>
|
|
316
331
|
<span class="cstat-no" title="statement not covered" > } else {</span>
|
|
317
332
|
<span class="cstat-no" title="statement not covered" > throw new RequestError(url, response);</span>
|
|
@@ -321,18 +336,22 @@
|
|
|
321
336
|
<span class="cstat-no" title="statement not covered" > failureHandler.dispose();</span>
|
|
322
337
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
323
338
|
<span class="cstat-no" title="statement not covered" > },</span>
|
|
324
|
-
<span class="cstat-no" title="statement not covered" > () => this.loadToken()</span>
|
|
339
|
+
<span class="cstat-no" title="statement not covered" > () => this.tokenStore.loadToken()</span>
|
|
325
340
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
326
341
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
327
342
|
<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" >
|
|
343
|
+
<span class="cstat-no" title="statement not covered" > private readonly xsts: {</span>
|
|
344
|
+
<span class="cstat-no" title="statement not covered" > fetchToken: () => Promise<string> | string;</span>
|
|
345
|
+
<span class="cstat-no" title="statement not covered" > clearXstsToken: () => Promise<void>;</span>
|
|
346
|
+
<span class="cstat-no" title="statement not covered" > },</span>
|
|
347
|
+
<span class="cstat-no" title="statement not covered" > private readonly tokenStore: {</span>
|
|
348
|
+
<span class="cstat-no" title="statement not covered" > loadToken: () => Promise<{</span>
|
|
349
|
+
<span class="cstat-no" title="statement not covered" > token: string;</span>
|
|
350
|
+
<span class="cstat-no" title="statement not covered" > expiresAt: unknown;</span>
|
|
351
|
+
<span class="cstat-no" title="statement not covered" > } | null>;</span>
|
|
352
|
+
<span class="cstat-no" title="statement not covered" > saveToken: (token: Token) => Promise<void>;</span>
|
|
353
|
+
<span class="cstat-no" title="statement not covered" > clearToken: () => Promise<void>;</span>
|
|
354
|
+
<span class="cstat-no" title="statement not covered" > },</span>
|
|
336
355
|
<span class="cstat-no" title="statement not covered" > private readonly fetchFn: FetchFunction = defaultFetch</span>
|
|
337
356
|
<span class="cstat-no" title="statement not covered" > ) {}</span>
|
|
338
357
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
@@ -345,7 +364,12 @@
|
|
|
345
364
|
<span class="cstat-no" title="statement not covered" > // Clear from memory</span>
|
|
346
365
|
<span class="cstat-no" title="statement not covered" > this.spartanTokenCache.clearToken();</span>
|
|
347
366
|
<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>
|
|
367
|
+
<span class="cstat-no" title="statement not covered" > await this.tokenStore.clearToken();</span>
|
|
368
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
369
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
370
|
+
<span class="cstat-no" title="statement not covered" > public async getCurrentExpiration(): Promise<DateTime | null> {</span>
|
|
371
|
+
<span class="cstat-no" title="statement not covered" > const currentToken = await this.spartanTokenCache.getExistingToken();</span>
|
|
372
|
+
<span class="cstat-no" title="statement not covered" > return currentToken ? currentToken.expiresAt : null;</span>
|
|
349
373
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
350
374
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
351
375
|
</pre></td></tr></table></pre>
|
|
@@ -355,7 +379,7 @@
|
|
|
355
379
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
356
380
|
Code coverage generated by
|
|
357
381
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
358
|
-
at 2025-11-
|
|
382
|
+
at 2025-11-21T02:48:56.500Z
|
|
359
383
|
</div>
|
|
360
384
|
<script src="../prettify.js"></script>
|
|
361
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/
|
|
28
|
+
<span class='fraction'>0/269</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/269</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="103" class="abs low">0/103</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="103" class="abs low">0/103</td>
|
|
94
94
|
</tr>
|
|
95
95
|
|
|
96
96
|
<tr>
|
|
@@ -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="
|
|
102
|
+
<td data-value="166" class="abs low">0/166</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="
|
|
108
|
+
<td data-value="166" class="abs low">0/166</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-
|
|
119
|
+
at 2025-11-21T02:48:56.500Z
|
|
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/166</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/166</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -224,7 +224,17 @@
|
|
|
224
224
|
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
225
|
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
226
|
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
-
<a name='L162'></a><a href='#L162'>162</a
|
|
227
|
+
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
+
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
+
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
+
<a name='L165'></a><a href='#L165'>165</a>
|
|
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"> </span>
|
|
233
|
+
<span class="cline-any cline-no"> </span>
|
|
234
|
+
<span class="cline-any cline-no"> </span>
|
|
235
|
+
<span class="cline-any cline-no"> </span>
|
|
236
|
+
<span class="cline-any cline-no"> </span>
|
|
237
|
+
<span class="cline-any cline-no"> </span>
|
|
228
238
|
<span class="cline-any cline-no"> </span>
|
|
229
239
|
<span class="cline-any cline-no"> </span>
|
|
230
240
|
<span class="cline-any cline-no"> </span>
|
|
@@ -495,16 +505,14 @@
|
|
|
495
505
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
496
506
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
497
507
|
<span class="cstat-no" title="statement not covered" > constructor(</span>
|
|
508
|
+
<span class="cstat-no" title="statement not covered" > private readonly getOauth2AccessToken: () => Promise<string>,</span>
|
|
498
509
|
<span class="cstat-no" title="statement not covered" > private readonly tokenPersisterOrPromise?:</span>
|
|
499
510
|
<span class="cstat-no" title="statement not covered" > | TokenPersister</span>
|
|
500
511
|
<span class="cstat-no" title="statement not covered" > | Promise<TokenPersister>,</span>
|
|
501
512
|
<span class="cstat-no" title="statement not covered" > private readonly fetchFn: FetchFunction = defaultFetch</span>
|
|
502
513
|
<span class="cstat-no" title="statement not covered" > ) {}</span>
|
|
503
514
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
504
|
-
<span class="cstat-no" title="statement not covered" > public async getXstsTicket(</span>
|
|
505
|
-
<span class="cstat-no" title="statement not covered" > getOauth2AccessToken: () => Promise<string>,</span>
|
|
506
|
-
<span class="cstat-no" title="statement not covered" > relyingParty: RelyingParty</span>
|
|
507
|
-
<span class="cstat-no" title="statement not covered" > ) {</span>
|
|
515
|
+
<span class="cstat-no" title="statement not covered" > public async getXstsTicket(relyingParty: RelyingParty) {</span>
|
|
508
516
|
<span class="cstat-no" title="statement not covered" > let xstsTicket = await this.xstsTicketCache.getExistingToken(relyingParty);</span>
|
|
509
517
|
<span class="cstat-no" title="statement not covered" > if (!xstsTicket) {</span>
|
|
510
518
|
<span class="cstat-no" title="statement not covered" > let userToken = await this.userTokenCache.getExistingToken();</span>
|
|
@@ -524,7 +532,7 @@
|
|
|
524
532
|
<span class="cstat-no" title="statement not covered" > if (!userToken) {</span>
|
|
525
533
|
<span class="cstat-no" title="statement not covered" > // Ouath2 token depends on nothing, so we can fetch it without</span>
|
|
526
534
|
<span class="cstat-no" title="statement not covered" > // worrying if it is expired.</span>
|
|
527
|
-
<span class="cstat-no" title="statement not covered" > const oauthToken = await getOauth2AccessToken();</span>
|
|
535
|
+
<span class="cstat-no" title="statement not covered" > const oauthToken = await this.getOauth2AccessToken();</span>
|
|
528
536
|
<span class="cstat-no" title="statement not covered" > userToken = await this.userTokenCache.getToken(oauthToken);</span>
|
|
529
537
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
530
538
|
<span class="cstat-no" title="statement not covered" > return this.xstsTicketCache.getToken(relyingParty, userToken.Token);</span>
|
|
@@ -545,6 +553,13 @@
|
|
|
545
553
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
546
554
|
<span class="cstat-no" title="statement not covered" > public getXboxLiveV3Token = (xboxTicket: XboxTicket) =></span>
|
|
547
555
|
<span class="cstat-no" title="statement not covered" > `XBL3.0 x=${xboxTicket.DisplayClaims.xui[0].uhs};${xboxTicket.Token}`;</span>
|
|
556
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
557
|
+
<span class="cstat-no" title="statement not covered" > public clearXboxUserToken = async () => {</span>
|
|
558
|
+
<span class="cstat-no" title="statement not covered" > // Clear from memory</span>
|
|
559
|
+
<span class="cstat-no" title="statement not covered" > this.userTokenCache.clearToken();</span>
|
|
560
|
+
<span class="cstat-no" title="statement not covered" > // Clear from storage</span>
|
|
561
|
+
<span class="cstat-no" title="statement not covered" > (await this.tokenPersisterOrPromise)?.clear("xbox.userToken");</span>
|
|
562
|
+
<span class="cstat-no" title="statement not covered" > };</span>
|
|
548
563
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
549
564
|
</pre></td></tr></table></pre>
|
|
550
565
|
|
|
@@ -553,7 +568,7 @@
|
|
|
553
568
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
554
569
|
Code coverage generated by
|
|
555
570
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
556
|
-
at 2025-11-
|
|
571
|
+
at 2025-11-21T02:48:56.500Z
|
|
557
572
|
</div>
|
|
558
573
|
<script src="../prettify.js"></script>
|
|
559
574
|
<script>
|
|
@@ -1033,7 +1033,7 @@ import { PlaylistCsrContainer } from "../models/halo-infinite/playlist-csr-conta
|
|
|
1033
1033
|
import { ServiceRecord } from "../models/halo-infinite/service-record";
|
|
1034
1034
|
import { UserInfo } from "../models/halo-infinite/user-info";
|
|
1035
1035
|
import { GlobalConstants } from "../util/global-contants";
|
|
1036
|
-
import { SpartanTokenProvider } from "./token-providers/spartan-token-
|
|
1036
|
+
import { SpartanTokenProvider } from "./token-providers/spartan-token-provider";
|
|
1037
1037
|
import { RequestError } from "../util/request-error";
|
|
1038
1038
|
import { MatchesPrivacy } from "../models/halo-infinite/matches-privacy";
|
|
1039
1039
|
import { MedalsMetadataFile } from "../models/halo-infinite/medals-metadata-file";
|
|
@@ -1120,7 +1120,7 @@ export class HaloInfiniteClient {
|
|
|
1120
1120
|
private readonly fetchFn: FetchFunction = defaultFetch
|
|
1121
1121
|
) {}
|
|
1122
1122
|
|
|
1123
|
-
|
|
1123
|
+
protected async executeRequest(url: string, init: RequestInit) {
|
|
1124
1124
|
const failureHandler = unauthorizedRetryPolicy.onFailure(
|
|
1125
1125
|
async ({ handled }) => {
|
|
1126
1126
|
if (handled) {
|
|
@@ -1158,7 +1158,7 @@ export class HaloInfiniteClient {
|
|
|
1158
1158
|
}
|
|
1159
1159
|
}
|
|
1160
1160
|
|
|
1161
|
-
|
|
1161
|
+
protected async executeJsonRequest<T>(url: string, init: RequestInit) {
|
|
1162
1162
|
const response = await this.executeRequest(url, init);
|
|
1163
1163
|
|
|
1164
1164
|
if (response.status >= 200 && response.status < 300) {
|
|
@@ -1168,7 +1168,7 @@ export class HaloInfiniteClient {
|
|
|
1168
1168
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1169
1169
|
}
|
|
1170
1170
|
|
|
1171
|
-
|
|
1171
|
+
protected <span class="fstat-no" title="function not covered" >async executeResultsRequest<T>(</span>
|
|
1172
1172
|
<span class="cstat-no" title="statement not covered" > ...args: Parameters<HaloInfiniteClient["executeJsonRequest"]></span>
|
|
1173
1173
|
<span class="cstat-no" title="statement not covered" > ) {</span>
|
|
1174
1174
|
<span class="cstat-no" title="statement not covered" > let resultsContainer: ResultsContainer<T>;</span>
|
|
@@ -1190,7 +1190,7 @@ export class HaloInfiniteClient {
|
|
|
1190
1190
|
<span class="cstat-no" title="statement not covered" > return resultsContainer.Value;</span>
|
|
1191
1191
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1192
1192
|
|
|
1193
|
-
|
|
1193
|
+
protected <span class="fstat-no" title="function not covered" >async executePaginationRequest<T>(</span>
|
|
1194
1194
|
<span class="cstat-no" title="statement not covered" > count: number,</span>
|
|
1195
1195
|
<span class="cstat-no" title="statement not covered" > start: number,</span>
|
|
1196
1196
|
<span class="cstat-no" title="statement not covered" > queryParameters: Record<string, string>,</span>
|
|
@@ -1498,7 +1498,7 @@ export class HaloInfiniteClient {
|
|
|
1498
1498
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
1499
1499
|
Code coverage generated by
|
|
1500
1500
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1501
|
-
at 2025-11-
|
|
1501
|
+
at 2025-11-21T02:48:56.500Z
|
|
1502
1502
|
</div>
|
|
1503
1503
|
<script src="../prettify.js"></script>
|
|
1504
1504
|
<script>
|
|
@@ -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-21T02:48:56.500Z
|
|
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-21T02:48:56.500Z
|
|
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-21T02:48:56.500Z
|
|
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-21T02:48:56.500Z
|
|
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-21T02:48:56.500Z
|
|
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-21T02:48:56.500Z
|
|
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-21T02:48:56.500Z
|
|
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/71</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/71</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -134,21 +134,7 @@
|
|
|
134
134
|
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
135
|
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
136
|
<a name='L71'></a><a href='#L71'>71</a>
|
|
137
|
-
<a name='L72'></a><a href='#L72'>72</a>
|
|
138
|
-
<a name='L73'></a><a href='#L73'>73</a>
|
|
139
|
-
<a name='L74'></a><a href='#L74'>74</a>
|
|
140
|
-
<a name='L75'></a><a href='#L75'>75</a>
|
|
141
|
-
<a name='L76'></a><a href='#L76'>76</a>
|
|
142
|
-
<a name='L77'></a><a href='#L77'>77</a>
|
|
143
|
-
<a name='L78'></a><a href='#L78'>78</a>
|
|
144
|
-
<a name='L79'></a><a href='#L79'>79</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
|
|
145
|
-
<span class="cline-any cline-no"> </span>
|
|
146
|
-
<span class="cline-any cline-no"> </span>
|
|
147
|
-
<span class="cline-any cline-no"> </span>
|
|
148
|
-
<span class="cline-any cline-no"> </span>
|
|
149
|
-
<span class="cline-any cline-no"> </span>
|
|
150
|
-
<span class="cline-any cline-no"> </span>
|
|
151
|
-
<span class="cline-any cline-no"> </span>
|
|
137
|
+
<a name='L72'></a><a href='#L72'>72</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
|
|
152
138
|
<span class="cline-any cline-no"> </span>
|
|
153
139
|
<span class="cline-any cline-no"> </span>
|
|
154
140
|
<span class="cline-any cline-no"> </span>
|
|
@@ -225,10 +211,11 @@
|
|
|
225
211
|
<span class="cstat-no" title="statement not covered" >} from "../../authentication/xbox-authentication-client";</span>
|
|
226
212
|
<span class="cstat-no" title="statement not covered" >import { TokenPersister } from "../token-persisters";</span>
|
|
227
213
|
<span class="cstat-no" title="statement not covered" >import { HaloAuthenticationClient } from "../../authentication/halo-authentication-client";</span>
|
|
228
|
-
<span class="cstat-no" title="statement not covered" >import { SpartanTokenProvider } from "./spartan-token-
|
|
214
|
+
<span class="cstat-no" title="statement not covered" >import { SpartanTokenProvider } from "./spartan-token-provider";</span>
|
|
229
215
|
<span class="cstat-no" title="statement not covered" >import { inMemoryTokenPersister } from "../token-persisters/in-memory-token-persister";</span>
|
|
230
216
|
<span class="cstat-no" title="statement not covered" >import { XboxTokenProvider } from "./xbox-token-provider";</span>
|
|
231
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>
|
|
232
219
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
233
220
|
<span class="cstat-no" title="statement not covered" >/**</span>
|
|
234
221
|
<span class="cstat-no" title="statement not covered" > * A SpartanTokenProvider that fetches both the Xbox and Halo tokens in the same</span>
|
|
@@ -236,10 +223,9 @@
|
|
|
236
223
|
<span class="cstat-no" title="statement not covered" > * CORS restrictions.</span>
|
|
237
224
|
<span class="cstat-no" title="statement not covered" > */</span>
|
|
238
225
|
<span class="cstat-no" title="statement not covered" >export class AutoTokenProvider</span>
|
|
226
|
+
<span class="cstat-no" title="statement not covered" > extends HaloAuthenticationClient</span>
|
|
239
227
|
<span class="cstat-no" title="statement not covered" > implements SpartanTokenProvider, XboxTokenProvider</span>
|
|
240
228
|
<span class="cstat-no" title="statement not covered" >{</span>
|
|
241
|
-
<span class="cstat-no" title="statement not covered" > public readonly getSpartanToken: () => Promise<string>;</span>
|
|
242
|
-
<span class="cstat-no" title="statement not covered" > public readonly clearSpartanToken: () => Promise<void>;</span>
|
|
243
229
|
<span class="cstat-no" title="statement not covered" > public readonly getXboxLiveV3Token: () => Promise<string>;</span>
|
|
244
230
|
<span class="cstat-no" title="statement not covered" > public readonly clearXboxLiveV3Token: () => Promise<void>;</span>
|
|
245
231
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
@@ -248,6 +234,28 @@
|
|
|
248
234
|
<span class="cstat-no" title="statement not covered" > tokenPersister?: TokenPersister | Promise<TokenPersister>,</span>
|
|
249
235
|
<span class="cstat-no" title="statement not covered" > fetchFn?: FetchFunction</span>
|
|
250
236
|
<span class="cstat-no" title="statement not covered" > ) {</span>
|
|
237
|
+
<span class="cstat-no" title="statement not covered" > super(</span>
|
|
238
|
+
<span class="cstat-no" title="statement not covered" > {</span>
|
|
239
|
+
<span class="cstat-no" title="statement not covered" > fetchToken: async () => {</span>
|
|
240
|
+
<span class="cstat-no" title="statement not covered" > const xstsTicket = await xboxAuthClient.getXstsTicket(</span>
|
|
241
|
+
<span class="cstat-no" title="statement not covered" > RelyingParty.Halo</span>
|
|
242
|
+
<span class="cstat-no" title="statement not covered" > );</span>
|
|
243
|
+
<span class="cstat-no" title="statement not covered" > return xstsTicket.Token;</span>
|
|
244
|
+
<span class="cstat-no" title="statement not covered" > },</span>
|
|
245
|
+
<span class="cstat-no" title="statement not covered" > clearXstsToken: () => xboxAuthClient.clearXstsTicket(RelyingParty.Halo),</span>
|
|
246
|
+
<span class="cstat-no" title="statement not covered" > },</span>
|
|
247
|
+
<span class="cstat-no" title="statement not covered" > {</span>
|
|
248
|
+
<span class="cstat-no" title="statement not covered" > loadToken: async () =></span>
|
|
249
|
+
<span class="cstat-no" title="statement not covered" > (await (await tokenPeristerOrPromise).load("halo.authToken")) ?? null,</span>
|
|
250
|
+
<span class="cstat-no" title="statement not covered" > saveToken: async (token) => {</span>
|
|
251
|
+
<span class="cstat-no" title="statement not covered" > await (await tokenPeristerOrPromise).save("halo.authToken", token);</span>
|
|
252
|
+
<span class="cstat-no" title="statement not covered" > },</span>
|
|
253
|
+
<span class="cstat-no" title="statement not covered" > clearToken: async () => {</span>
|
|
254
|
+
<span class="cstat-no" title="statement not covered" > await (await tokenPeristerOrPromise).clear("halo.authToken");</span>
|
|
255
|
+
<span class="cstat-no" title="statement not covered" > },</span>
|
|
256
|
+
<span class="cstat-no" title="statement not covered" > },</span>
|
|
257
|
+
<span class="cstat-no" title="statement not covered" > fetchFn</span>
|
|
258
|
+
<span class="cstat-no" title="statement not covered" > );</span>
|
|
251
259
|
<span class="cstat-no" title="statement not covered" > let tokenPeristerOrPromise: TokenPersister | Promise<TokenPersister>;</span>
|
|
252
260
|
<span class="cstat-no" title="statement not covered" > if (tokenPersister) {</span>
|
|
253
261
|
<span class="cstat-no" title="statement not covered" > tokenPeristerOrPromise = tokenPersister;</span>
|
|
@@ -255,42 +263,13 @@
|
|
|
255
263
|
<span class="cstat-no" title="statement not covered" > tokenPeristerOrPromise = inMemoryTokenPersister;</span>
|
|
256
264
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
257
265
|
<span class="cstat-no" title="statement not covered" > const xboxAuthClient = new XboxAuthenticationClient(</span>
|
|
266
|
+
<span class="cstat-no" title="statement not covered" > getOauth2AccessToken,</span>
|
|
258
267
|
<span class="cstat-no" title="statement not covered" > tokenPersister,</span>
|
|
259
268
|
<span class="cstat-no" title="statement not covered" > fetchFn</span>
|
|
260
269
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
261
|
-
<span class="cstat-no" title="statement not covered" > const haloAuthClient = new HaloAuthenticationClient(</span>
|
|
262
|
-
<span class="cstat-no" title="statement not covered" > async () => {</span>
|
|
263
|
-
<span class="cstat-no" title="statement not covered" > const xstsTicket = await xboxAuthClient.getXstsTicket(</span>
|
|
264
|
-
<span class="cstat-no" title="statement not covered" > getOauth2AccessToken,</span>
|
|
265
|
-
<span class="cstat-no" title="statement not covered" > RelyingParty.Halo</span>
|
|
266
|
-
<span class="cstat-no" title="statement not covered" > );</span>
|
|
267
|
-
<span class="cstat-no" title="statement not covered" > return xstsTicket.Token;</span>
|
|
268
|
-
<span class="cstat-no" title="statement not covered" > },</span>
|
|
269
|
-
<span class="cstat-no" title="statement not covered" > async () => {</span>
|
|
270
|
-
<span class="cstat-no" title="statement not covered" > await xboxAuthClient.clearXstsTicket(RelyingParty.Halo);</span>
|
|
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>
|
|
279
|
-
<span class="cstat-no" title="statement not covered" > },</span>
|
|
280
|
-
<span class="cstat-no" title="statement not covered" > async () => {</span>
|
|
281
|
-
<span class="cstat-no" title="statement not covered" > const tokenPersister = await tokenPeristerOrPromise;</span>
|
|
282
|
-
<span class="cstat-no" title="statement not covered" > await tokenPersister.clear("halo.authToken");</span>
|
|
283
|
-
<span class="cstat-no" title="statement not covered" > },</span>
|
|
284
|
-
<span class="cstat-no" title="statement not covered" > fetchFn</span>
|
|
285
|
-
<span class="cstat-no" title="statement not covered" > );</span>
|
|
286
270
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
287
|
-
<span class="cstat-no" title="statement not covered" > this.getSpartanToken = () => haloAuthClient.getSpartanToken();</span>
|
|
288
|
-
<span class="cstat-no" title="statement not covered" > this.clearSpartanToken = () => haloAuthClient.clearSpartanToken();</span>
|
|
289
271
|
<span class="cstat-no" title="statement not covered" > this.getXboxLiveV3Token = async () => {</span>
|
|
290
|
-
<span class="cstat-no" title="statement not covered" > const xstsTicket = await xboxAuthClient.getXstsTicket(
|
|
291
|
-
<span class="cstat-no" title="statement not covered" > getOauth2AccessToken,</span>
|
|
292
|
-
<span class="cstat-no" title="statement not covered" > RelyingParty.Xbox</span>
|
|
293
|
-
<span class="cstat-no" title="statement not covered" > );</span>
|
|
272
|
+
<span class="cstat-no" title="statement not covered" > const xstsTicket = await xboxAuthClient.getXstsTicket(RelyingParty.Xbox);</span>
|
|
294
273
|
<span class="cstat-no" title="statement not covered" > return xboxAuthClient.getXboxLiveV3Token(xstsTicket);</span>
|
|
295
274
|
<span class="cstat-no" title="statement not covered" > };</span>
|
|
296
275
|
<span class="cstat-no" title="statement not covered" > this.clearXboxLiveV3Token = () =></span>
|
|
@@ -304,7 +283,7 @@
|
|
|
304
283
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
305
284
|
Code coverage generated by
|
|
306
285
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
307
|
-
at 2025-11-
|
|
286
|
+
at 2025-11-21T02:48:56.500Z
|
|
308
287
|
</div>
|
|
309
288
|
<script src="../../prettify.js"></script>
|
|
310
289
|
<script>
|