halo-infinite-api 14.2.1 → 14.2.2

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 (89) hide show
  1. package/coverage/lcov-report/authentication/halo-authentication-client.ts.html +1 -1
  2. package/coverage/lcov-report/authentication/index.html +1 -1
  3. package/coverage/lcov-report/authentication/xbox-authentication-client.ts.html +1 -1
  4. package/coverage/lcov-report/core/halo-infinite-client.ts.html +57 -9
  5. package/coverage/lcov-report/core/index.html +14 -14
  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 +18 -18
  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 +42 -15
  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 +1 -1
  13. package/coverage/lcov-report/core/token-providers/index.html +1 -1
  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 +1 -1
  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 +2 -2
  19. package/coverage/lcov-report/endpoints/index.html +1 -1
  20. package/coverage/lcov-report/index.html +60 -45
  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-message.ts.html +97 -0
  26. package/coverage/lcov-report/models/halo-infinite/ban-summary.ts.html +28 -4
  27. package/coverage/lcov-report/models/halo-infinite/game-variant-category.ts.html +1 -1
  28. package/coverage/lcov-report/models/halo-infinite/index.html +25 -10
  29. package/coverage/lcov-report/models/halo-infinite/match-count.ts.html +1 -1
  30. package/coverage/lcov-report/models/halo-infinite/match-info.ts.html +1 -1
  31. package/coverage/lcov-report/models/halo-infinite/match-outcome.ts.html +1 -1
  32. package/coverage/lcov-report/models/halo-infinite/match-skill.ts.html +1 -1
  33. package/coverage/lcov-report/models/halo-infinite/match-stats.ts.html +1 -1
  34. package/coverage/lcov-report/models/halo-infinite/match-type.ts.html +1 -1
  35. package/coverage/lcov-report/models/halo-infinite/matches-privacy.ts.html +1 -1
  36. package/coverage/lcov-report/models/halo-infinite/medals-metadata-file.ts.html +1 -1
  37. package/coverage/lcov-report/models/halo-infinite/player-match-history.ts.html +1 -1
  38. package/coverage/lcov-report/models/halo-infinite/playlist-csr-container.ts.html +1 -1
  39. package/coverage/lcov-report/models/halo-infinite/playlist-csr.ts.html +1 -1
  40. package/coverage/lcov-report/models/halo-infinite/playlist-experience.ts.html +1 -1
  41. package/coverage/lcov-report/models/halo-infinite/playlist.ts.html +1 -1
  42. package/coverage/lcov-report/models/halo-infinite/progression-file.ts.html +1 -1
  43. package/coverage/lcov-report/models/halo-infinite/season.ts.html +1 -1
  44. package/coverage/lcov-report/models/halo-infinite/service-record.ts.html +1 -1
  45. package/coverage/lcov-report/models/halo-infinite/settings.ts.html +1 -1
  46. package/coverage/lcov-report/models/halo-infinite/skill-result.ts.html +1 -1
  47. package/coverage/lcov-report/models/halo-infinite/stats.ts.html +1 -1
  48. package/coverage/lcov-report/models/halo-infinite/user-info.ts.html +1 -1
  49. package/coverage/lcov-report/models/index.html +1 -1
  50. package/coverage/lcov-report/models/spartan-token-proof.ts.html +1 -1
  51. package/coverage/lcov-report/models/spartan-token-request.ts.html +1 -1
  52. package/coverage/lcov-report/models/spartan-token.ts.html +1 -1
  53. package/coverage/lcov-report/models/xbox-ticket.ts.html +1 -1
  54. package/coverage/lcov-report/types/import-meta.d.ts.html +100 -0
  55. package/coverage/lcov-report/types/index.html +116 -0
  56. package/coverage/lcov-report/util/date-time.ts.html +21 -21
  57. package/coverage/lcov-report/util/expiry-token-cache.ts.html +2 -2
  58. package/coverage/lcov-report/util/fetch-function.ts.html +1 -1
  59. package/coverage/lcov-report/util/global-contants.ts.html +1 -1
  60. package/coverage/lcov-report/util/index.html +20 -20
  61. package/coverage/lcov-report/util/keyed-expiry-token-cache.ts.html +27 -27
  62. package/coverage/lcov-report/util/request-error.ts.html +2 -2
  63. package/coverage/lcov-report/util/resolvable-promise.ts.html +32 -32
  64. package/coverage/lcov-report/util/xuid.ts.html +3 -3
  65. package/coverage/lcov.info +337 -272
  66. package/dist/core/token-persisters/index.cjs +12 -6
  67. package/dist/core/token-persisters/index.cjs.map +1 -1
  68. package/dist/core/token-persisters/index.js +12 -6
  69. package/dist/core/token-persisters/index.js.map +1 -1
  70. package/dist/index.cjs +22 -1
  71. package/dist/index.cjs.map +1 -1
  72. package/dist/index.d.cts +13 -1
  73. package/dist/index.d.ts +13 -1
  74. package/dist/index.js +21 -2
  75. package/dist/index.js.map +1 -1
  76. package/jest.config.ts +1 -0
  77. package/jest.setup.ts +5 -0
  78. package/package.json +2 -2
  79. package/scripts/jest-runner.mjs +31 -0
  80. package/src/core/halo-infinite-client.ts +17 -1
  81. package/src/core/token-persisters/node-fs-token-persister.ts +15 -6
  82. package/src/endpoints/halo-core-endpoints.ts +1 -1
  83. package/src/index.ts +7 -2
  84. package/src/models/halo-infinite/ban-message.ts +4 -0
  85. package/src/models/halo-infinite/ban-summary.ts +8 -0
  86. package/src/types/import-meta.d.ts +5 -0
  87. package/tests/types/import-meta.d.ts +5 -0
  88. package/tsconfig.app.json +1 -6
  89. package/tsconfig.json +9 -10
@@ -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-12-16T14:43:08.612Z
382
+ at 2026-01-09T16:49:48.934Z
383
383
  </div>
384
384
  <script src="../prettify.js"></script>
385
385
  <script>
@@ -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-12-16T14:43:08.612Z
119
+ at 2026-01-09T16:49:48.934Z
120
120
  </div>
121
121
  <script src="../prettify.js"></script>
122
122
  <script>
@@ -580,7 +580,7 @@
580
580
  <div class='footer quiet pad2 space-top1 center small'>
581
581
  Code coverage generated by
582
582
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
583
- at 2025-12-16T14:43:08.612Z
583
+ at 2026-01-09T16:49:48.934Z
584
584
  </div>
585
585
  <script src="../prettify.js"></script>
586
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.83% </span>
26
+ <span class="strong">44.04% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>230/513</span>
28
+ <span class='fraction'>233/529</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">19.23% </span>
40
+ <span class="strong">18.51% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>5/26</span>
42
+ <span class='fraction'>5/27</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">44.83% </span>
47
+ <span class="strong">44.04% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>230/513</span>
49
+ <span class='fraction'>233/529</span>
50
50
  </div>
51
51
 
52
52
 
@@ -576,7 +576,24 @@
576
576
  <a name='L511'></a><a href='#L511'>511</a>
577
577
  <a name='L512'></a><a href='#L512'>512</a>
578
578
  <a name='L513'></a><a href='#L513'>513</a>
579
- <a name='L514'></a><a href='#L514'>514</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
579
+ <a name='L514'></a><a href='#L514'>514</a>
580
+ <a name='L515'></a><a href='#L515'>515</a>
581
+ <a name='L516'></a><a href='#L516'>516</a>
582
+ <a name='L517'></a><a href='#L517'>517</a>
583
+ <a name='L518'></a><a href='#L518'>518</a>
584
+ <a name='L519'></a><a href='#L519'>519</a>
585
+ <a name='L520'></a><a href='#L520'>520</a>
586
+ <a name='L521'></a><a href='#L521'>521</a>
587
+ <a name='L522'></a><a href='#L522'>522</a>
588
+ <a name='L523'></a><a href='#L523'>523</a>
589
+ <a name='L524'></a><a href='#L524'>524</a>
590
+ <a name='L525'></a><a href='#L525'>525</a>
591
+ <a name='L526'></a><a href='#L526'>526</a>
592
+ <a name='L527'></a><a href='#L527'>527</a>
593
+ <a name='L528'></a><a href='#L528'>528</a>
594
+ <a name='L529'></a><a href='#L529'>529</a>
595
+ <a name='L530'></a><a href='#L530'>530</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
596
+ <span class="cline-any cline-yes">1x</span>
580
597
  <span class="cline-any cline-yes">1x</span>
581
598
  <span class="cline-any cline-yes">1x</span>
582
599
  <span class="cline-any cline-yes">1x</span>
@@ -920,6 +937,8 @@
920
937
  <span class="cline-any cline-no">&nbsp;</span>
921
938
  <span class="cline-any cline-no">&nbsp;</span>
922
939
  <span class="cline-any cline-no">&nbsp;</span>
940
+ <span class="cline-any cline-no">&nbsp;</span>
941
+ <span class="cline-any cline-no">&nbsp;</span>
923
942
  <span class="cline-any cline-yes">1x</span>
924
943
  <span class="cline-any cline-yes">1x</span>
925
944
  <span class="cline-any cline-yes">1x</span>
@@ -1075,6 +1094,19 @@
1075
1094
  <span class="cline-any cline-no">&nbsp;</span>
1076
1095
  <span class="cline-any cline-no">&nbsp;</span>
1077
1096
  <span class="cline-any cline-no">&nbsp;</span>
1097
+ <span class="cline-any cline-no">&nbsp;</span>
1098
+ <span class="cline-any cline-no">&nbsp;</span>
1099
+ <span class="cline-any cline-no">&nbsp;</span>
1100
+ <span class="cline-any cline-yes">1x</span>
1101
+ <span class="cline-any cline-yes">1x</span>
1102
+ <span class="cline-any cline-no">&nbsp;</span>
1103
+ <span class="cline-any cline-no">&nbsp;</span>
1104
+ <span class="cline-any cline-no">&nbsp;</span>
1105
+ <span class="cline-any cline-no">&nbsp;</span>
1106
+ <span class="cline-any cline-no">&nbsp;</span>
1107
+ <span class="cline-any cline-no">&nbsp;</span>
1108
+ <span class="cline-any cline-no">&nbsp;</span>
1109
+ <span class="cline-any cline-no">&nbsp;</span>
1078
1110
  <span class="cline-any cline-yes">1x</span>
1079
1111
  <span class="cline-any cline-yes">1x</span>
1080
1112
  <span class="cline-any cline-yes">1x</span>
@@ -1123,6 +1155,7 @@ import { wrapPlayerId, unwrapPlayerId } from "../util/xuid";
1123
1155
  import { SeasonCalendarContainer } from "../models/halo-infinite/season";
1124
1156
  import { Settings } from "../models/halo-infinite/settings";
1125
1157
  import { MatchCount } from "src/models/halo-infinite/match-count";
1158
+ import { BanMessage } from "../models/halo-infinite/ban-message";
1126
1159
  &nbsp;
1127
1160
  export interface ResultContainer&lt;TValue&gt; {
1128
1161
  Id: string;
@@ -1428,7 +1461,9 @@ export class HaloInfiniteClient {
1428
1461
  <span class="cstat-no" title="statement not covered" > init?: Omit&lt;RequestInit, "body" | "method"&gt;</span>
1429
1462
  <span class="cstat-no" title="statement not covered" > ) =&gt;</span>
1430
1463
  <span class="cstat-no" title="statement not covered" > this.executeJsonRequest&lt;MatchCount&gt;(</span>
1431
- <span class="cstat-no" title="statement not covered" > `https://${HaloCoreEndpoints.StatsOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/players/${wrapPlayerId(playerXuid)}/matches/count`,</span>
1464
+ <span class="cstat-no" title="statement not covered" > `https://${HaloCoreEndpoints.StatsOrigin}.${</span>
1465
+ <span class="cstat-no" title="statement not covered" > HaloCoreEndpoints.ServiceDomain</span>
1466
+ <span class="cstat-no" title="statement not covered" > }/hi/players/${wrapPlayerId(playerXuid)}/matches/count`,</span>
1432
1467
  <span class="cstat-no" title="statement not covered" > {</span>
1433
1468
  <span class="cstat-no" title="statement not covered" > ...init,</span>
1434
1469
  <span class="cstat-no" title="statement not covered" > method: "get",</span>
@@ -1578,6 +1613,19 @@ export class HaloInfiniteClient {
1578
1613
  <span class="cstat-no" title="statement not covered" > method: "get",</span>
1579
1614
  <span class="cstat-no" title="statement not covered" > }</span>
1580
1615
  );
1616
+ &nbsp;
1617
+ public <span class="fstat-no" title="function not covered" >getBanMessage(</span>
1618
+ <span class="cstat-no" title="statement not covered" > banPath: string,</span>
1619
+ <span class="cstat-no" title="statement not covered" > init?: Omit&lt;RequestInit, "body" | "method"&gt;</span>
1620
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;BanMessage&gt; {</span>
1621
+ <span class="cstat-no" title="statement not covered" > return this.executeJsonRequest(</span>
1622
+ <span class="cstat-no" title="statement not covered" > `https://${HaloCoreEndpoints.GameCmsOrigin}.${HaloCoreEndpoints.ServiceDomain}/hi/banning/file/${banPath}`,</span>
1623
+ <span class="cstat-no" title="statement not covered" > {</span>
1624
+ <span class="cstat-no" title="statement not covered" > ...init,</span>
1625
+ <span class="cstat-no" title="statement not covered" > method: "get",</span>
1626
+ <span class="cstat-no" title="statement not covered" > }</span>
1627
+ <span class="cstat-no" title="statement not covered" > );</span>
1628
+ <span class="cstat-no" title="statement not covered" > }</span>
1581
1629
  &nbsp;
1582
1630
  public getSeasonCalendar = <span class="fstat-no" title="function not covered" >(</span>
1583
1631
  <span class="cstat-no" title="statement not covered" > init?: Omit&lt;RequestInit, "body" | "method"&gt;</span>
@@ -1609,7 +1657,7 @@ export class HaloInfiniteClient {
1609
1657
  <div class='footer quiet pad2 space-top1 center small'>
1610
1658
  Code coverage generated by
1611
1659
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1612
- at 2025-12-16T14:43:08.612Z
1660
+ at 2026-01-09T16:49:48.934Z
1613
1661
  </div>
1614
1662
  <script src="../prettify.js"></script>
1615
1663
  <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.98% </span>
26
+ <span class="strong">37.5% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>237/624</span>
28
+ <span class='fraction'>240/640</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">18.51% </span>
40
+ <span class="strong">17.85% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>5/27</span>
42
+ <span class='fraction'>5/28</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">37.98% </span>
47
+ <span class="strong">37.5% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>237/624</span>
49
+ <span class='fraction'>240/640</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" class="pic low">
83
+ <td data-value="44.04" 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.83" class="pct low">44.83%</td>
87
- <td data-value="513" class="abs low">230/513</td>
86
+ <td data-value="44.04" class="pct low">44.04%</td>
87
+ <td data-value="529" class="abs low">233/529</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="19.23" class="pct low">19.23%</td>
91
- <td data-value="26" class="abs low">5/26</td>
92
- <td data-value="44.83" class="pct low">44.83%</td>
93
- <td data-value="513" class="abs low">230/513</td>
90
+ <td data-value="18.51" class="pct low">18.51%</td>
91
+ <td data-value="27" class="abs low">5/27</td>
92
+ <td data-value="44.04" class="pct low">44.04%</td>
93
+ <td data-value="529" class="abs low">233/529</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-12-16T14:43:08.612Z
134
+ at 2026-01-09T16:49:48.934Z
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-12-16T14:43:08.612Z
94
+ at 2026-01-09T16:49:48.934Z
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-12-16T14:43:08.612Z
118
+ at 2026-01-09T16:49:48.934Z
119
119
  </div>
120
120
  <script src="../../prettify.js"></script>
121
121
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">67.1% </span>
26
+ <span class="strong">70.58% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>51/76</span>
28
+ <span class='fraction'>60/85</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">66.66% </span>
33
+ <span class="strong">60% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>12/18</span>
35
+ <span class='fraction'>9/15</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">75% </span>
40
+ <span class="strong">77.77% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>6/8</span>
42
+ <span class='fraction'>7/9</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">67.1% </span>
47
+ <span class="strong">70.58% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>51/76</span>
49
+ <span class='fraction'>60/85</span>
50
50
  </div>
51
51
 
52
52
 
@@ -110,17 +110,17 @@
110
110
 
111
111
  <tr>
112
112
  <td class="file high" data-value="node-fs-token-persister.ts"><a href="node-fs-token-persister.ts.html">node-fs-token-persister.ts</a></td>
113
- <td data-value="94.73" class="pic high">
114
- <div class="chart"><div class="cover-fill" style="width: 94%"></div><div class="cover-empty" style="width: 6%"></div></div>
113
+ <td data-value="95.74" class="pic high">
114
+ <div class="chart"><div class="cover-fill" style="width: 95%"></div><div class="cover-empty" style="width: 5%"></div></div>
115
115
  </td>
116
- <td data-value="94.73" class="pct high">94.73%</td>
117
- <td data-value="38" class="abs high">36/38</td>
118
- <td data-value="69.23" class="pct medium">69.23%</td>
119
- <td data-value="13" class="abs medium">9/13</td>
116
+ <td data-value="95.74" class="pct high">95.74%</td>
117
+ <td data-value="47" class="abs high">45/47</td>
118
+ <td data-value="60" class="pct medium">60%</td>
119
+ <td data-value="10" class="abs medium">6/10</td>
120
120
  <td data-value="100" class="pct high">100%</td>
121
- <td data-value="3" class="abs high">3/3</td>
122
- <td data-value="94.73" class="pct high">94.73%</td>
123
- <td data-value="38" class="abs high">36/38</td>
121
+ <td data-value="4" class="abs high">4/4</td>
122
+ <td data-value="95.74" class="pct high">95.74%</td>
123
+ <td data-value="47" class="abs high">45/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-12-16T14:43:08.612Z
149
+ at 2026-01-09T16:49:48.934Z
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-12-16T14:43:08.612Z
127
+ at 2026-01-09T16:49:48.934Z
128
128
  </div>
129
129
  <script src="../../prettify.js"></script>
130
130
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">94.73% </span>
26
+ <span class="strong">95.74% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>36/38</span>
28
+ <span class='fraction'>45/47</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">69.23% </span>
33
+ <span class="strong">60% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>9/13</span>
35
+ <span class='fraction'>6/10</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>3/3</span>
42
+ <span class='fraction'>4/4</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">94.73% </span>
47
+ <span class="strong">95.74% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>36/38</span>
49
+ <span class='fraction'>45/47</span>
50
50
  </div>
51
51
 
52
52
 
@@ -101,7 +101,20 @@
101
101
  <a name='L36'></a><a href='#L36'>36</a>
102
102
  <a name='L37'></a><a href='#L37'>37</a>
103
103
  <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
114
+ <span class="cline-any cline-yes">1x</span>
115
+ <span class="cline-any cline-yes">6x</span>
116
+ <span class="cline-any cline-yes">6x</span>
117
+ <span class="cline-any cline-yes">6x</span>
105
118
  <span class="cline-any cline-yes">1x</span>
106
119
  <span class="cline-any cline-yes">1x</span>
107
120
  <span class="cline-any cline-yes">1x</span>
@@ -131,6 +144,11 @@
131
144
  <span class="cline-any cline-yes">2x</span>
132
145
  <span class="cline-any cline-yes">2x</span>
133
146
  <span class="cline-any cline-yes">2x</span>
147
+ <span class="cline-any cline-yes">2x</span>
148
+ <span class="cline-any cline-yes">2x</span>
149
+ <span class="cline-any cline-yes">2x</span>
150
+ <span class="cline-any cline-yes">1x</span>
151
+ <span class="cline-any cline-yes">1x</span>
134
152
  <span class="cline-any cline-yes">1x</span>
135
153
  <span class="cline-any cline-yes">1x</span>
136
154
  <span class="cline-any cline-yes">1x</span>
@@ -141,15 +159,19 @@
141
159
  <span class="cline-any cline-yes">1x</span>
142
160
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { TokenPersister } from ".";
143
161
  &nbsp;
162
+ function escapeTokenNameForFilesystem(tokenName: string): string {
163
+ return tokenName.replace(/[^a-zA-Z0-9-_]/g, "_");
164
+ }
165
+ &nbsp;
144
166
  export const nodeFsTokenPersister: TokenPersister = {
145
167
  load: async (tokenName) =&gt; {
146
168
  const tokenDir =
147
169
  process.env.TOKEN_ROOT<span class="branch-0 cbranch-no" title="branch not covered" > ||</span>
148
- (await import("path")).join(__dirname, "./tokens");
170
+ (await import("path")).join(import.meta.dirname, "./tokens");
149
171
  try {
150
172
  const json = await (
151
173
  await import("fs/promises")
152
- ).readFile(`${tokenDir}/${tokenName}`, {
174
+ ).readFile(`${tokenDir}/${escapeTokenNameForFilesystem(tokenName)}`, {
153
175
  encoding: "utf-8",
154
176
  });
155
177
  return JSON.parse(json);
@@ -164,17 +186,22 @@ export const nodeFsTokenPersister: TokenPersister = {
164
186
  save: async (tokenName, token) =&gt; {
165
187
  const tokenDir =
166
188
  process.env.TOKEN_ROOT<span class="branch-0 cbranch-no" title="branch not covered" > ||</span>
167
- (await import("path")).join(__dirname, "./tokens");
189
+ (await import("path")).join(import.meta.dirname, "./tokens");
168
190
  await (await import("fs/promises")).mkdir(tokenDir, { recursive: true });
169
191
  await (
170
192
  await import("fs/promises")
171
- ).writeFile(`${tokenDir}/${tokenName}`, JSON.stringify(token));
193
+ ).writeFile(
194
+ `${tokenDir}/${escapeTokenNameForFilesystem(tokenName)}`,
195
+ JSON.stringify(token)
196
+ );
172
197
  },
173
198
  clear: async (tokenName) =&gt; {
174
199
  const tokenDir =
175
200
  process.env.TOKEN_ROOT<span class="branch-0 cbranch-no" title="branch not covered" > ||</span>
176
- (await import("path")).join(__dirname, "./tokens");
177
- await (await import("fs/promises")).unlink(`${tokenDir}/${tokenName}`);
201
+ (await import("path")).join(import.meta.dirname, "./tokens");
202
+ await (
203
+ await import("fs/promises")
204
+ ).unlink(`${tokenDir}/${escapeTokenNameForFilesystem(tokenName)}`);
178
205
  },
179
206
  };
180
207
  &nbsp;</pre></td></tr></table></pre>
@@ -184,7 +211,7 @@ export const nodeFsTokenPersister: TokenPersister = {
184
211
  <div class='footer quiet pad2 space-top1 center small'>
185
212
  Code coverage generated by
186
213
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
187
- at 2025-12-16T14:43:08.612Z
214
+ at 2026-01-09T16:49:48.934Z
188
215
  </div>
189
216
  <script src="../../prettify.js"></script>
190
217
  <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-12-16T14:43:08.612Z
88
+ at 2026-01-09T16:49:48.934Z
89
89
  </div>
90
90
  <script src="../../prettify.js"></script>
91
91
  <script>
@@ -280,7 +280,7 @@
280
280
  <div class='footer quiet pad2 space-top1 center small'>
281
281
  Code coverage generated by
282
282
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
283
- at 2025-12-16T14:43:08.612Z
283
+ at 2026-01-09T16:49:48.934Z
284
284
  </div>
285
285
  <script src="../../prettify.js"></script>
286
286
  <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-12-16T14:43:08.612Z
149
+ at 2026-01-09T16:49:48.934Z
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-12-16T14:43:08.612Z
94
+ at 2026-01-09T16:49:48.934Z
95
95
  </div>
96
96
  <script src="../../prettify.js"></script>
97
97
  <script>
@@ -211,7 +211,7 @@
211
211
  <div class='footer quiet pad2 space-top1 center small'>
212
212
  Code coverage generated by
213
213
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
214
- at 2025-12-16T14:43:08.612Z
214
+ at 2026-01-09T16:49:48.934Z
215
215
  </div>
216
216
  <script src="../../prettify.js"></script>
217
217
  <script>
@@ -82,7 +82,7 @@
82
82
  <div class='footer quiet pad2 space-top1 center small'>
83
83
  Code coverage generated by
84
84
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
85
- at 2025-12-16T14:43:08.612Z
85
+ at 2026-01-09T16:49:48.934Z
86
86
  </div>
87
87
  <script src="../../prettify.js"></script>
88
88
  <script>
@@ -382,7 +382,7 @@
382
382
  <div class='footer quiet pad2 space-top1 center small'>
383
383
  Code coverage generated by
384
384
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
385
- at 2025-12-16T14:43:08.612Z
385
+ at 2026-01-09T16:49:48.934Z
386
386
  </div>
387
387
  <script src="../prettify.js"></script>
388
388
  <script>
@@ -113,7 +113,7 @@
113
113
  /** Discovery origin */
114
114
  DiscoveryOrigin: "discovery-infiniteugc",
115
115
  &nbsp;
116
- CommsOrigin: "wpcomms",
116
+ CommsOrigin: "comms",
117
117
  BanProcessorOrigin: "banprocessor",
118
118
  SettingsOrigin: "settings",
119
119
  &nbsp;
@@ -127,7 +127,7 @@
127
127
  <div class='footer quiet pad2 space-top1 center small'>
128
128
  Code coverage generated by
129
129
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
130
- at 2025-12-16T14:43:08.612Z
130
+ at 2026-01-09T16:49:48.934Z
131
131
  </div>
132
132
  <script src="../prettify.js"></script>
133
133
  <script>
@@ -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-12-16T14:43:08.612Z
104
+ at 2026-01-09T16:49:48.934Z
105
105
  </div>
106
106
  <script src="../prettify.js"></script>
107
107
  <script>