@insignia-education/api-sdk-js 0.9.34 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/.env.test +1 -1
  2. package/AGENTS.md +15 -0
  3. package/coverage/clover.xml +229 -135
  4. package/coverage/coverage-final.json +7 -7
  5. package/coverage/lcov-report/index.html +27 -27
  6. package/coverage/lcov-report/src/Client.js.html +163 -67
  7. package/coverage/lcov-report/src/api/index.html +1 -1
  8. package/coverage/lcov-report/src/api/index.js.html +1 -1
  9. package/coverage/lcov-report/src/api/v1/Accounts.js.html +1 -1
  10. package/coverage/lcov-report/src/api/v1/Auth.js.html +27 -6
  11. package/coverage/lcov-report/src/api/v1/Categories.js.html +1 -1
  12. package/coverage/lcov-report/src/api/v1/Changelogs.js.html +1 -1
  13. package/coverage/lcov-report/src/api/v1/Configs.js.html +1 -1
  14. package/coverage/lcov-report/src/api/v1/ContactForms.js.html +1 -1
  15. package/coverage/lcov-report/src/api/v1/ConversationalTopics.js.html +1 -1
  16. package/coverage/lcov-report/src/api/v1/Countries.js.html +1 -1
  17. package/coverage/lcov-report/src/api/v1/Coupons.js.html +1 -1
  18. package/coverage/lcov-report/src/api/v1/Courses.js.html +23 -8
  19. package/coverage/lcov-report/src/api/v1/Currencies.js.html +1 -1
  20. package/coverage/lcov-report/src/api/v1/Files.js.html +55 -10
  21. package/coverage/lcov-report/src/api/v1/Forums.js.html +1 -1
  22. package/coverage/lcov-report/src/api/v1/Hashes.js.html +1 -1
  23. package/coverage/lcov-report/src/api/v1/Insignias.js.html +1 -1
  24. package/coverage/lcov-report/src/api/v1/Languages.js.html +1 -1
  25. package/coverage/lcov-report/src/api/v1/MailBlacklist.js.html +1 -1
  26. package/coverage/lcov-report/src/api/v1/Organizations.js.html +1 -1
  27. package/coverage/lcov-report/src/api/v1/PaymentMethods.js.html +1 -1
  28. package/coverage/lcov-report/src/api/v1/Quizzes.js.html +31 -31
  29. package/coverage/lcov-report/src/api/v1/ShortLinks.js.html +1 -1
  30. package/coverage/lcov-report/src/api/v1/Surveys.js.html +1 -1
  31. package/coverage/lcov-report/src/api/v1/Taxes.js.html +1 -1
  32. package/coverage/lcov-report/src/api/v1/Teacher.js.html +1 -1
  33. package/coverage/lcov-report/src/api/v1/UserTypes.js.html +1 -1
  34. package/coverage/lcov-report/src/api/v1/Users.js.html +116 -11
  35. package/coverage/lcov-report/src/api/v1/Zoom.js.html +1 -1
  36. package/coverage/lcov-report/src/api/v1/index.html +45 -45
  37. package/coverage/lcov-report/src/api/v1/index.js.html +1 -1
  38. package/coverage/lcov-report/src/index.html +17 -17
  39. package/coverage/lcov-report/src/index.js.html +1 -1
  40. package/coverage/lcov-report/tests/helpers.js.html +1 -1
  41. package/coverage/lcov-report/tests/index.html +1 -1
  42. package/coverage/lcov.info +376 -221
  43. package/coverage/test-report.html +281 -156
  44. package/package.json +2 -3
  45. package/src/Client.js +11 -3
  46. package/src/api/v1/Files.js +2 -2
  47. package/src/api/v1/Users.js +2 -0
  48. package/tests/client.test.js +12 -2
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">76.8% </span>
26
+ <span class="strong">76.19% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>573/746</span>
28
+ <span class='fraction'>640/840</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">82.75% </span>
33
+ <span class="strong">80% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>144/174</span>
35
+ <span class='fraction'>148/185</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">55.27% </span>
40
+ <span class="strong">50.89% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>110/199</span>
42
+ <span class='fraction'>114/224</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">76.8% </span>
47
+ <span class="strong">76.19% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>573/746</span>
49
+ <span class='fraction'>640/840</span>
50
50
  </div>
51
51
 
52
52
 
@@ -80,17 +80,17 @@
80
80
  </thead>
81
81
  <tbody><tr>
82
82
  <td class="file high" data-value="src"><a href="src/index.html">src</a></td>
83
- <td data-value="100" class="pic high">
84
- <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
83
+ <td data-value="88.28" class="pic high">
84
+ <div class="chart"><div class="cover-fill" style="width: 88%"></div><div class="cover-empty" style="width: 12%"></div></div>
85
85
  </td>
86
+ <td data-value="88.28" class="pct high">88.28%</td>
87
+ <td data-value="128" class="abs high">113/128</td>
88
+ <td data-value="81.81" class="pct high">81.81%</td>
89
+ <td data-value="55" class="abs high">45/55</td>
86
90
  <td data-value="100" class="pct high">100%</td>
87
- <td data-value="96" class="abs high">96/96</td>
88
- <td data-value="93.61" class="pct high">93.61%</td>
89
- <td data-value="47" class="abs high">44/47</td>
90
- <td data-value="100" class="pct high">100%</td>
91
- <td data-value="14" class="abs high">14/14</td>
92
- <td data-value="100" class="pct high">100%</td>
93
- <td data-value="96" class="abs high">96/96</td>
91
+ <td data-value="15" class="abs high">15/15</td>
92
+ <td data-value="88.28" class="pct high">88.28%</td>
93
+ <td data-value="128" class="abs high">113/128</td>
94
94
  </tr>
95
95
 
96
96
  <tr>
@@ -110,17 +110,17 @@
110
110
 
111
111
  <tr>
112
112
  <td class="file medium" data-value="src/api/v1"><a href="src/api/v1/index.html">src/api/v1</a></td>
113
- <td data-value="72.09" class="pic medium">
113
+ <td data-value="72.87" class="pic medium">
114
114
  <div class="chart"><div class="cover-fill" style="width: 72%"></div><div class="cover-empty" style="width: 28%"></div></div>
115
115
  </td>
116
- <td data-value="72.09" class="pct medium">72.09%</td>
117
- <td data-value="620" class="abs medium">447/620</td>
118
- <td data-value="77.5" class="pct medium">77.5%</td>
119
- <td data-value="120" class="abs medium">93/120</td>
120
- <td data-value="50.55" class="pct medium">50.55%</td>
121
- <td data-value="180" class="abs medium">91/180</td>
122
- <td data-value="72.09" class="pct medium">72.09%</td>
123
- <td data-value="620" class="abs medium">447/620</td>
116
+ <td data-value="72.87" class="pct medium">72.87%</td>
117
+ <td data-value="682" class="abs medium">497/682</td>
118
+ <td data-value="78.04" class="pct medium">78.04%</td>
119
+ <td data-value="123" class="abs medium">96/123</td>
120
+ <td data-value="46.07" class="pct low">46.07%</td>
121
+ <td data-value="204" class="abs low">94/204</td>
122
+ <td data-value="72.87" class="pct medium">72.87%</td>
123
+ <td data-value="682" class="abs medium">497/682</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 2026-05-19T21:22:09.562Z
149
+ at 2026-07-20T23:00:44.070Z
150
150
  </div>
151
151
  <script src="prettify.js"></script>
152
152
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">100% </span>
26
+ <span class="strong">87.5% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>88/88</span>
28
+ <span class='fraction'>105/120</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">93.47% </span>
33
+ <span class="strong">81.48% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>43/46</span>
35
+ <span class='fraction'>44/54</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'>13/13</span>
42
+ <span class='fraction'>14/14</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">100% </span>
47
+ <span class="strong">87.5% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>88/88</span>
49
+ <span class='fraction'>105/120</span>
50
50
  </div>
51
51
 
52
52
 
@@ -151,7 +151,39 @@
151
151
  <a name='L86'></a><a href='#L86'>86</a>
152
152
  <a name='L87'></a><a href='#L87'>87</a>
153
153
  <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</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>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
155
187
  <span class="cline-any cline-yes">1x</span>
156
188
  <span class="cline-any cline-yes">1x</span>
157
189
  <span class="cline-any cline-yes">1x</span>
@@ -170,68 +202,74 @@
170
202
  <span class="cline-any cline-yes">147x</span>
171
203
  <span class="cline-any cline-yes">1x</span>
172
204
  <span class="cline-any cline-yes">1x</span>
173
- <span class="cline-any cline-yes">96x</span>
174
- <span class="cline-any cline-yes">96x</span>
175
- <span class="cline-any cline-yes">96x</span>
176
- <span class="cline-any cline-yes">96x</span>
177
- <span class="cline-any cline-yes">96x</span>
178
- <span class="cline-any cline-yes">96x</span>
179
- <span class="cline-any cline-yes">96x</span>
180
- <span class="cline-any cline-yes">96x</span>
181
- <span class="cline-any cline-yes">96x</span>
182
- <span class="cline-any cline-yes">96x</span>
183
- <span class="cline-any cline-yes">1x</span>
184
- <span class="cline-any cline-yes">1x</span>
185
- <span class="cline-any cline-yes">96x</span>
186
- <span class="cline-any cline-yes">27x</span>
187
- <span class="cline-any cline-yes">27x</span>
188
- <span class="cline-any cline-yes">27x</span>
189
- <span class="cline-any cline-yes">27x</span>
190
- <span class="cline-any cline-yes">27x</span>
191
- <span class="cline-any cline-yes">1x</span>
192
- <span class="cline-any cline-yes">1x</span>
193
- <span class="cline-any cline-yes">90x</span>
194
- <span class="cline-any cline-yes">90x</span>
195
- <span class="cline-any cline-yes">90x</span>
196
- <span class="cline-any cline-yes">90x</span>
197
- <span class="cline-any cline-yes">68x</span>
198
- <span class="cline-any cline-yes">90x</span>
199
- <span class="cline-any cline-yes">90x</span>
200
- <span class="cline-any cline-yes">90x</span>
201
- <span class="cline-any cline-yes">21x</span>
202
- <span class="cline-any cline-yes">21x</span>
203
- <span class="cline-any cline-yes">21x</span>
204
- <span class="cline-any cline-yes">21x</span>
205
- <span class="cline-any cline-yes">21x</span>
206
- <span class="cline-any cline-yes">21x</span>
207
- <span class="cline-any cline-yes">90x</span>
205
+ <span class="cline-any cline-yes">91x</span>
206
+ <span class="cline-any cline-yes">91x</span>
207
+ <span class="cline-any cline-yes">91x</span>
208
+ <span class="cline-any cline-yes">91x</span>
209
+ <span class="cline-any cline-yes">91x</span>
210
+ <span class="cline-any cline-yes">91x</span>
211
+ <span class="cline-any cline-yes">91x</span>
212
+ <span class="cline-any cline-yes">91x</span>
213
+ <span class="cline-any cline-yes">91x</span>
214
+ <span class="cline-any cline-yes">91x</span>
215
+ <span class="cline-any cline-yes">1x</span>
208
216
  <span class="cline-any cline-yes">1x</span>
217
+ <span class="cline-any cline-yes">91x</span>
218
+ <span class="cline-any cline-yes">18x</span>
219
+ <span class="cline-any cline-yes">18x</span>
220
+ <span class="cline-any cline-yes">18x</span>
221
+ <span class="cline-any cline-yes">18x</span>
222
+ <span class="cline-any cline-yes">18x</span>
209
223
  <span class="cline-any cline-yes">1x</span>
210
- <span class="cline-any cline-yes">90x</span>
211
- <span class="cline-any cline-yes">89x</span>
212
- <span class="cline-any cline-yes">89x</span>
213
- <span class="cline-any cline-yes">90x</span>
214
- <span class="cline-any cline-yes">68x</span>
215
- <span class="cline-any cline-yes">68x</span>
216
- <span class="cline-any cline-yes">68x</span>
224
+ <span class="cline-any cline-yes">1x</span>
225
+ <span class="cline-any cline-yes">73x</span>
226
+ <span class="cline-any cline-yes">73x</span>
227
+ <span class="cline-any cline-yes">73x</span>
228
+ <span class="cline-any cline-yes">73x</span>
229
+ <span class="cline-any cline-yes">51x</span>
230
+ <span class="cline-any cline-yes">73x</span>
231
+ <span class="cline-any cline-yes">73x</span>
232
+ <span class="cline-any cline-yes">73x</span>
233
+ <span class="cline-any cline-yes">18x</span>
234
+ <span class="cline-any cline-yes">18x</span>
235
+ <span class="cline-any cline-yes">18x</span>
236
+ <span class="cline-any cline-yes">18x</span>
237
+ <span class="cline-any cline-yes">18x</span>
238
+ <span class="cline-any cline-yes">18x</span>
239
+ <span class="cline-any cline-yes">73x</span>
240
+ <span class="cline-any cline-yes">1x</span>
241
+ <span class="cline-any cline-yes">1x</span>
242
+ <span class="cline-any cline-yes">73x</span>
243
+ <span class="cline-any cline-yes">72x</span>
244
+ <span class="cline-any cline-yes">72x</span>
245
+ <span class="cline-any cline-yes">73x</span>
246
+ <span class="cline-any cline-yes">51x</span>
247
+ <span class="cline-any cline-yes">51x</span>
248
+ <span class="cline-any cline-yes">51x</span>
217
249
  <span class="cline-any cline-yes">21x</span>
218
250
  <span class="cline-any cline-yes">21x</span>
219
- <span class="cline-any cline-yes">51x</span>
220
- <span class="cline-any cline-yes">17x</span>
251
+ <span class="cline-any cline-yes">23x</span>
252
+ <span class="cline-any cline-yes">1x</span>
221
253
  <span class="cline-any cline-yes">1x</span>
222
254
  <span class="cline-any cline-yes">1x</span>
223
- <span class="cline-any cline-yes">16x</span>
224
- <span class="cline-any cline-yes">16x</span>
225
- <span class="cline-any cline-yes">90x</span>
255
+ <span class="cline-any cline-no">&nbsp;</span>
256
+ <span class="cline-any cline-no">&nbsp;</span>
257
+ <span class="cline-any cline-yes">73x</span>
226
258
  <span class="cline-any cline-yes">1x</span>
227
259
  <span class="cline-any cline-yes">1x</span>
228
- <span class="cline-any cline-yes">96x</span>
229
- <span class="cline-any cline-yes">96x</span>
230
- <span class="cline-any cline-yes">96x</span>
231
- <span class="cline-any cline-yes">90x</span>
232
- <span class="cline-any cline-yes">90x</span>
233
- <span class="cline-any cline-yes">96x</span>
234
- <span class="cline-any cline-yes">96x</span>
260
+ <span class="cline-any cline-yes">91x</span>
261
+ <span class="cline-any cline-yes">91x</span>
262
+ <span class="cline-any cline-yes">91x</span>
263
+ <span class="cline-any cline-yes">70x</span>
264
+ <span class="cline-any cline-yes">83x</span>
265
+ <span class="cline-any cline-yes">10x</span>
266
+ <span class="cline-any cline-yes">10x</span>
267
+ <span class="cline-any cline-yes">10x</span>
268
+ <span class="cline-any cline-yes">10x</span>
269
+ <span class="cline-any cline-yes">10x</span>
270
+ <span class="cline-any cline-yes">60x</span>
271
+ <span class="cline-any cline-yes">91x</span>
272
+ <span class="cline-any cline-yes">91x</span>
235
273
  <span class="cline-any cline-yes">1x</span>
236
274
  <span class="cline-any cline-yes">1x</span>
237
275
  <span class="cline-any cline-yes">1x</span>
@@ -239,6 +277,32 @@
239
277
  <span class="cline-any cline-yes">1x</span>
240
278
  <span class="cline-any cline-yes">1x</span>
241
279
  <span class="cline-any cline-yes">1x</span>
280
+ <span class="cline-any cline-yes">1x</span>
281
+ <span class="cline-any cline-no">&nbsp;</span>
282
+ <span class="cline-any cline-no">&nbsp;</span>
283
+ <span class="cline-any cline-no">&nbsp;</span>
284
+ <span class="cline-any cline-no">&nbsp;</span>
285
+ <span class="cline-any cline-no">&nbsp;</span>
286
+ <span class="cline-any cline-no">&nbsp;</span>
287
+ <span class="cline-any cline-no">&nbsp;</span>
288
+ <span class="cline-any cline-no">&nbsp;</span>
289
+ <span class="cline-any cline-yes">1x</span>
290
+ <span class="cline-any cline-yes">1x</span>
291
+ <span class="cline-any cline-yes">1x</span>
292
+ <span class="cline-any cline-yes">1x</span>
293
+ <span class="cline-any cline-yes">59x</span>
294
+ <span class="cline-any cline-no">&nbsp;</span>
295
+ <span class="cline-any cline-no">&nbsp;</span>
296
+ <span class="cline-any cline-no">&nbsp;</span>
297
+ <span class="cline-any cline-no">&nbsp;</span>
298
+ <span class="cline-any cline-no">&nbsp;</span>
299
+ <span class="cline-any cline-yes">59x</span>
300
+ <span class="cline-any cline-yes">59x</span>
301
+ <span class="cline-any cline-yes">1x</span>
302
+ <span class="cline-any cline-yes">1x</span>
303
+ <span class="cline-any cline-yes">1x</span>
304
+ <span class="cline-any cline-yes">1x</span>
305
+ <span class="cline-any cline-yes">1x</span>
242
306
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">export default class InsigniaClient {
243
307
  #baseUrl;
244
308
  #cookies = new Map();
@@ -307,9 +371,9 @@
307
371
  } catch (error) {
308
372
  if (error instanceof SyntaxError &amp;&amp; error.message.includes('Unexpected end')) {
309
373
  return null;
310
- }
311
- throw error;
312
- }
374
+ <span class="branch-0 cbranch-no" title="branch not covered" > }</span>
375
+ <span class="cstat-no" title="statement not covered" > throw error;</span>
376
+ <span class="cstat-no" title="statement not covered" > }</span>
313
377
  }
314
378
  &nbsp;
315
379
  async #request(method, path, body = null) {
@@ -317,11 +381,43 @@
317
381
  if (body !== null) options.body = JSON.stringify(body);
318
382
  const response = await fetch(`${this.#baseUrl}${path}`, options);
319
383
  this.#storeCookies(response);
384
+ if (!response.ok) {
385
+ const err = new Error(`HTTP ${response.status}`);
386
+ err.status = response.status;
387
+ try { err.data = await this.#parseResponse(response); } <span class="branch-0 cbranch-no" title="branch not covered" >catch { /* body wasn't parseable — leave err.data unset */ }</span>
388
+ throw err;
389
+ }
320
390
  const data = await this.#parseResponse(response);
321
391
  return data?.success ? data.response : data;
322
392
  }
323
393
  &nbsp;
324
- get(path) { return this.#request('GET', path); }
394
+ async upload(path, formData) {
395
+ const headers = { 'Accept': 'application/json' };
396
+ const cookie = this.#cookieHeader();
397
+ if (cookie) headers.Cookie = cookie;
398
+ const response = await fetch(`${this.#baseUrl}${path}`, {
399
+ method: 'PUT', headers, credentials: 'include', body: formData,
400
+ })<span class="branch-0 cbranch-no" title="branch not covered" >;</span>
401
+ <span class="cstat-no" title="statement not covered" > this.#storeCookies(response);</span>
402
+ <span class="cstat-no" title="statement not covered" > if (!response.ok) {</span>
403
+ <span class="cstat-no" title="statement not covered" > const err = new Error(`HTTP ${response.status}`);</span>
404
+ <span class="cstat-no" title="statement not covered" > err.status = response.status;</span>
405
+ <span class="cstat-no" title="statement not covered" > try { err.data = await this.#parseResponse(response); } catch { /* body wasn't parseable — leave err.data unset */ }</span>
406
+ <span class="cstat-no" title="statement not covered" > throw err;</span>
407
+ <span class="cstat-no" title="statement not covered" > }</span>
408
+ <span class="cstat-no" title="statement not covered" > const data = await this.#parseResponse(response);</span>
409
+ return data?.success<span class="branch-0 cbranch-no" title="branch not covered" > ? data.response<span class="branch-0 cbranch-no" title="branch not covered" > </span>: data;</span>
410
+ }
411
+ &nbsp;
412
+ get(path, params = null) {
413
+ if (params<span class="branch-0 cbranch-no" title="branch not covered" > &amp;&amp; typeof params === 'object')</span> <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
414
+ <span class="cstat-no" title="statement not covered" > const qs = new URLSearchParams(</span>
415
+ <span class="cstat-no" title="statement not covered" > Object.entries(params).filter(([, v]) =&gt; v !== undefined &amp;&amp; v !== null)</span>
416
+ <span class="cstat-no" title="statement not covered" > ).toString();</span>
417
+ <span class="cstat-no" title="statement not covered" > if (qs) path += (path.includes('?') ? '&amp;' : '?') + qs;</span>
418
+ <span class="cstat-no" title="statement not covered" > }</span>
419
+ return this.#request('GET', path);
420
+ }
325
421
  post(path, body = null) { return this.#request('POST', path, body); }
326
422
  put(path, body = null) { return this.#request('PUT', path, body); }
327
423
  patch(path, body = null){ return this.#request('PATCH', path, body); }
@@ -334,7 +430,7 @@
334
430
  <div class='footer quiet pad2 space-top1 center small'>
335
431
  Code coverage generated by
336
432
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
337
- at 2026-05-19T21:22:09.562Z
433
+ at 2026-07-20T23:00:44.070Z
338
434
  </div>
339
435
  <script src="../prettify.js"></script>
340
436
  <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 2026-05-19T21:22:09.562Z
104
+ at 2026-07-20T23:00:44.070Z
105
105
  </div>
106
106
  <script src="../../prettify.js"></script>
107
107
  <script>
@@ -112,7 +112,7 @@ export default class InsigniaApi extends Insignia {
112
112
  <div class='footer quiet pad2 space-top1 center small'>
113
113
  Code coverage generated by
114
114
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
115
- at 2026-05-19T21:22:09.562Z
115
+ at 2026-07-20T23:00:44.070Z
116
116
  </div>
117
117
  <script src="../../prettify.js"></script>
118
118
  <script>
@@ -136,7 +136,7 @@
136
136
  <div class='footer quiet pad2 space-top1 center small'>
137
137
  Code coverage generated by
138
138
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
139
- at 2026-05-19T21:22:09.562Z
139
+ at 2026-07-20T23:00:44.070Z
140
140
  </div>
141
141
  <script src="../../../prettify.js"></script>
142
142
  <script>
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>15/15</span>
28
+ <span class='fraction'>22/22</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">44.44% </span>
40
+ <span class="strong">25% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>4/9</span>
42
+ <span class='fraction'>4/16</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>15/15</span>
49
+ <span class='fraction'>22/22</span>
50
50
  </div>
51
51
 
52
52
 
@@ -78,7 +78,14 @@
78
78
  <a name='L13'></a><a href='#L13'>13</a>
79
79
  <a name='L14'></a><a href='#L14'>14</a>
80
80
  <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
82
89
  <span class="cline-any cline-yes">1x</span>
83
90
  <span class="cline-any cline-yes">1x</span>
84
91
  <span class="cline-any cline-yes">1x</span>
@@ -93,6 +100,13 @@
93
100
  <span class="cline-any cline-yes">1x</span>
94
101
  <span class="cline-any cline-yes">1x</span>
95
102
  <span class="cline-any cline-yes">1x</span>
103
+ <span class="cline-any cline-yes">1x</span>
104
+ <span class="cline-any cline-yes">1x</span>
105
+ <span class="cline-any cline-yes">1x</span>
106
+ <span class="cline-any cline-yes">1x</span>
107
+ <span class="cline-any cline-yes">1x</span>
108
+ <span class="cline-any cline-yes">1x</span>
109
+ <span class="cline-any cline-yes">1x</span>
96
110
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">export default class Auth {
97
111
  #client;
98
112
  &nbsp;
@@ -107,6 +121,13 @@
107
121
  <span class="fstat-no" title="function not covered" > refresh() { return this.#client.post('/auth/refresh'); }</span>
108
122
  logout() { return this.#client.post('/auth/logout'); }
109
123
  <span class="fstat-no" title="function not covered" > user() { return this.#client.get('/auth/user'); }</span>
124
+ <span class="fstat-no" title="function not covered" > forgotPassword(email) { return this.#client.post('/auth/forgot-password', { email }); }</span>
125
+ <span class="fstat-no" title="function not covered" > resetPassword(data) { return this.#client.post('/auth/reset-password', data); }</span>
126
+ <span class="fstat-no" title="function not covered" > magicLinkSend(email) { return this.#client.post('/auth/magic-link/send', { email }); }</span>
127
+ <span class="fstat-no" title="function not covered" > magicLinkVerify(data) { return this.#client.post('/auth/magic-link/verify', data); }</span>
128
+ <span class="fstat-no" title="function not covered" > facebookLogin(data) { return this.#client.post('/auth/facebook', data); }</span>
129
+ <span class="fstat-no" title="function not covered" > emailVerify(data) { return this.#client.post('/auth/email-verify', data); }</span>
130
+ <span class="fstat-no" title="function not covered" > twoFactor(data) { return this.#client.post('/auth/2fa', data); }</span>
110
131
  }
111
132
  &nbsp;</pre></td></tr></table></pre>
112
133
 
@@ -115,7 +136,7 @@
115
136
  <div class='footer quiet pad2 space-top1 center small'>
116
137
  Code coverage generated by
117
138
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
118
- at 2026-05-19T21:22:09.562Z
139
+ at 2026-07-20T23:00:44.070Z
119
140
  </div>
120
141
  <script src="../../../prettify.js"></script>
121
142
  <script>
@@ -106,7 +106,7 @@
106
106
  <div class='footer quiet pad2 space-top1 center small'>
107
107
  Code coverage generated by
108
108
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
109
- at 2026-05-19T21:22:09.562Z
109
+ at 2026-07-20T23:00:44.070Z
110
110
  </div>
111
111
  <script src="../../../prettify.js"></script>
112
112
  <script>
@@ -103,7 +103,7 @@
103
103
  <div class='footer quiet pad2 space-top1 center small'>
104
104
  Code coverage generated by
105
105
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
106
- at 2026-05-19T21:22:09.562Z
106
+ at 2026-07-20T23:00:44.070Z
107
107
  </div>
108
108
  <script src="../../../prettify.js"></script>
109
109
  <script>
@@ -106,7 +106,7 @@
106
106
  <div class='footer quiet pad2 space-top1 center small'>
107
107
  Code coverage generated by
108
108
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
109
- at 2026-05-19T21:22:09.562Z
109
+ at 2026-07-20T23:00:44.070Z
110
110
  </div>
111
111
  <script src="../../../prettify.js"></script>
112
112
  <script>
@@ -106,7 +106,7 @@
106
106
  <div class='footer quiet pad2 space-top1 center small'>
107
107
  Code coverage generated by
108
108
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
109
- at 2026-05-19T21:22:09.562Z
109
+ at 2026-07-20T23:00:44.070Z
110
110
  </div>
111
111
  <script src="../../../prettify.js"></script>
112
112
  <script>
@@ -106,7 +106,7 @@
106
106
  <div class='footer quiet pad2 space-top1 center small'>
107
107
  Code coverage generated by
108
108
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
109
- at 2026-05-19T21:22:09.562Z
109
+ at 2026-07-20T23:00:44.070Z
110
110
  </div>
111
111
  <script src="../../../prettify.js"></script>
112
112
  <script>
@@ -97,7 +97,7 @@
97
97
  <div class='footer quiet pad2 space-top1 center small'>
98
98
  Code coverage generated by
99
99
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
100
- at 2026-05-19T21:22:09.562Z
100
+ at 2026-07-20T23:00:44.070Z
101
101
  </div>
102
102
  <script src="../../../prettify.js"></script>
103
103
  <script>
@@ -106,7 +106,7 @@
106
106
  <div class='footer quiet pad2 space-top1 center small'>
107
107
  Code coverage generated by
108
108
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
109
- at 2026-05-19T21:22:09.562Z
109
+ at 2026-07-20T23:00:44.070Z
110
110
  </div>
111
111
  <script src="../../../prettify.js"></script>
112
112
  <script>