@insignia-education/api-sdk-js 0.15.60 → 0.15.62

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 (86) hide show
  1. package/.github/workflows/npm-publish-github-packages.yml +95 -12
  2. package/coverage/clover.xml +578 -566
  3. package/coverage/coverage-final.json +45 -47
  4. package/coverage/lcov-report/Client.js.html +463 -0
  5. package/coverage/lcov-report/index.html +33 -33
  6. package/coverage/lcov-report/src/Client.js.html +141 -132
  7. package/coverage/lcov-report/src/api/index.html +1 -1
  8. package/coverage/lcov-report/src/api/index.js.html +8 -8
  9. package/coverage/lcov-report/src/api/v1/Accounts.js.html +3 -3
  10. package/coverage/lcov-report/src/api/v1/Admin.js.html +3 -3
  11. package/coverage/lcov-report/src/api/v1/Auth.js.html +7 -7
  12. package/coverage/lcov-report/src/api/v1/Categories.js.html +8 -8
  13. package/coverage/lcov-report/src/api/v1/Changelogs.js.html +8 -8
  14. package/coverage/lcov-report/src/api/v1/Configs.js.html +8 -8
  15. package/coverage/lcov-report/src/api/v1/ContactForms.js.html +8 -8
  16. package/coverage/lcov-report/src/api/v1/ConversationalTopics.js.html +8 -8
  17. package/coverage/lcov-report/src/api/v1/Countries.js.html +8 -8
  18. package/coverage/lcov-report/src/api/v1/Coupons.js.html +16 -16
  19. package/coverage/lcov-report/src/api/v1/Courses.js.html +27 -27
  20. package/coverage/lcov-report/src/api/v1/Currencies.js.html +10 -10
  21. package/coverage/lcov-report/src/api/v1/Dashboard.js.html +3 -3
  22. package/coverage/lcov-report/src/api/v1/EducationCenter.js.html +3 -3
  23. package/coverage/lcov-report/src/api/v1/Employee.js.html +5 -5
  24. package/coverage/lcov-report/src/api/v1/Files.js.html +8 -8
  25. package/coverage/lcov-report/src/api/v1/Forums.js.html +8 -8
  26. package/coverage/lcov-report/src/api/v1/Hashes.js.html +16 -13
  27. package/coverage/lcov-report/src/api/v1/Insignias.js.html +8 -8
  28. package/coverage/lcov-report/src/api/v1/Languages.js.html +8 -8
  29. package/coverage/lcov-report/src/api/v1/MailBlacklist.js.html +8 -8
  30. package/coverage/lcov-report/src/api/v1/MailingLists.js.html +3 -3
  31. package/coverage/lcov-report/src/api/v1/Offers.js.html +16 -16
  32. package/coverage/lcov-report/src/api/v1/Organizations.js.html +52 -52
  33. package/coverage/lcov-report/src/api/v1/PaymentMethods.js.html +7 -7
  34. package/coverage/lcov-report/src/api/v1/Payments.js.html +3 -3
  35. package/coverage/lcov-report/src/api/v1/Premiums.js.html +3 -3
  36. package/coverage/lcov-report/src/api/v1/Quizzes.js.html +42 -42
  37. package/coverage/lcov-report/src/api/v1/Sales.js.html +3 -3
  38. package/coverage/lcov-report/src/api/v1/Search.js.html +3 -3
  39. package/coverage/lcov-report/src/api/v1/ShortLinks.js.html +8 -8
  40. package/coverage/lcov-report/src/api/v1/Surveys.js.html +8 -8
  41. package/coverage/lcov-report/src/api/v1/Taxes.js.html +8 -8
  42. package/coverage/lcov-report/src/api/v1/Teacher.js.html +100 -70
  43. package/coverage/lcov-report/src/api/v1/Telegram.js.html +3 -3
  44. package/coverage/lcov-report/src/api/v1/TwoFactor.js.html +3 -3
  45. package/coverage/lcov-report/src/api/v1/UserSessionTypes.js.html +3 -3
  46. package/coverage/lcov-report/src/api/v1/UserTypes.js.html +8 -8
  47. package/coverage/lcov-report/src/api/v1/Users.js.html +112 -16
  48. package/coverage/lcov-report/src/api/v1/Utm.js.html +3 -3
  49. package/coverage/lcov-report/src/api/v1/Webauthn.js.html +3 -3
  50. package/coverage/lcov-report/src/api/v1/Zoom.js.html +19 -19
  51. package/coverage/lcov-report/src/api/v1/index.html +154 -184
  52. package/coverage/lcov-report/src/api/v1/index.js.html +52 -64
  53. package/coverage/lcov-report/src/index.html +21 -21
  54. package/coverage/lcov-report/src/index.js.html +3 -3
  55. package/coverage/lcov-report/tests/helpers.js.html +11 -11
  56. package/coverage/lcov-report/tests/index.html +7 -7
  57. package/coverage/lcov.info +990 -879
  58. package/coverage/test-report.html +586 -10
  59. package/jest.config.mjs +12 -1
  60. package/package.json +2 -2
  61. package/src/Client.js +4 -1
  62. package/src/api/v1/Coupons.js +11 -0
  63. package/src/api/v1/Hashes.js +3 -2
  64. package/src/api/v1/index.js +0 -4
  65. package/tests/integration/api/v1/accounts.test.js +5 -11
  66. package/tests/integration/api/v1/auth/login.test.js +18 -34
  67. package/tests/integration/api/v1/conversational-topics.test.js +3 -5
  68. package/tests/integration/api/v1/countries.test.js +1 -1
  69. package/tests/integration/api/v1/coupons.test.js +2 -9
  70. package/tests/integration/api/v1/currencies/index.test.js +1 -1
  71. package/tests/integration/api/v1/files.test.js +18 -15
  72. package/tests/integration/api/v1/hashes.test.js +2 -10
  73. package/tests/integration/api/v1/mail-blacklist.test.js +2 -9
  74. package/tests/integration/api/v1/offers.test.js +2 -9
  75. package/tests/integration/api/v1/organizations.test.js +8 -8
  76. package/tests/integration/api/v1/quizzes/index.test.js +0 -2
  77. package/tests/integration/api/v1/short-links.test.js +2 -9
  78. package/tests/integration/api/v1/taxes.test.js +2 -3
  79. package/tests/integration/api/v1/teacher/index.test.js +1 -1
  80. package/tests/integration/api/v1/user-types.test.js +2 -4
  81. package/tests/integration/api/v1/users/index.test.js +10 -13
  82. package/tests/integration/api/v1/zoom.test.js +2 -9
  83. package/src/api/v1/Categories.js +0 -12
  84. package/src/api/v1/Configs.js +0 -12
  85. package/tests/integration/api/v1/categories.test.js +0 -19
  86. package/tests/integration/api/v1/configs.test.js +0 -20
@@ -30,16 +30,16 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
33
+ <span class="strong">75% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>2/2</span>
35
+ <span class='fraction'>3/4</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">22.22% </span>
40
+ <span class="strong">33.33% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>2/9</span>
42
+ <span class='fraction'>3/9</span>
43
43
  </div>
44
44
 
45
45
 
@@ -97,8 +97,8 @@
97
97
  <span class="cline-any cline-yes">1x</span>
98
98
  <span class="cline-any cline-yes">1x</span>
99
99
  <span class="cline-any cline-yes">1x</span>
100
- <span class="cline-any cline-yes">1x</span>
101
- <span class="cline-any cline-yes">1x</span>
100
+ <span class="cline-any cline-yes">30x</span>
101
+ <span class="cline-any cline-yes">30x</span>
102
102
  <span class="cline-any cline-yes">1x</span>
103
103
  <span class="cline-any cline-yes">1x</span>
104
104
  <span class="cline-any cline-yes">1x</span>
@@ -130,7 +130,7 @@
130
130
  this.#client = client;
131
131
  }
132
132
  &nbsp;
133
- <span class="fstat-no" title="function not covered" > get(id = null) { return id ? this.#client.get(`/forums/${id}`) : this.#client.get('/forums'); }</span>
133
+ get(id = null) { return id<span class="branch-0 cbranch-no" title="branch not covered" > ? this.#client.get(`/forums/${id}`) </span>: this.#client.get('/forums'); }
134
134
  <span class="fstat-no" title="function not covered" > forLesson({ course_id, course_level_id, course_level_lesson_id }) {</span>
135
135
  <span class="cstat-no" title="statement not covered" > return this.#client.get('/forums/for-lesson', { course_id, course_level_id, course_level_lesson_id });</span>
136
136
  <span class="cstat-no" title="statement not covered" > }</span>
@@ -160,7 +160,7 @@
160
160
  <div class='footer quiet pad2 space-top1 center small'>
161
161
  Code coverage generated by
162
162
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
163
- at 2026-08-03T13:22:45.069Z
163
+ at 2026-08-09T19:41:47.271Z
164
164
  </div>
165
165
  <script src="../../../prettify.js"></script>
166
166
  <script>
@@ -25,28 +25,28 @@
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'>11/11</span>
28
+ <span class='fraction'>12/12</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
33
+ <span class="strong">75% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>2/2</span>
35
+ <span class='fraction'>3/4</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">40% </span>
40
+ <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>2/5</span>
42
+ <span class='fraction'>3/3</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'>11/11</span>
49
+ <span class='fraction'>12/12</span>
50
50
  </div>
51
51
 
52
52
 
@@ -74,27 +74,30 @@
74
74
  <a name='L9'></a><a href='#L9'>9</a>
75
75
  <a name='L10'></a><a href='#L10'>10</a>
76
76
  <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
78
- <span class="cline-any cline-yes">1x</span>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
79
79
  <span class="cline-any cline-yes">1x</span>
80
80
  <span class="cline-any cline-yes">1x</span>
81
81
  <span class="cline-any cline-yes">1x</span>
82
82
  <span class="cline-any cline-yes">1x</span>
83
83
  <span class="cline-any cline-yes">1x</span>
84
84
  <span class="cline-any cline-yes">1x</span>
85
+ <span class="cline-any cline-yes">30x</span>
86
+ <span class="cline-any cline-yes">30x</span>
85
87
  <span class="cline-any cline-yes">1x</span>
86
88
  <span class="cline-any cline-yes">1x</span>
87
89
  <span class="cline-any cline-yes">1x</span>
88
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">export default class Hashes {
90
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">// Read-only hashes (password-reset/verify/phantom-login tokens etc.) are
91
+ // created and deleted exclusively by their owning flows (forgot-password,
92
+ // email-verify, admin phantom-login), never through a generic public API.
93
+ export default class Hashes {
89
94
  #client;
90
95
  &nbsp;
91
96
  constructor(client) {
92
97
  this.#client = client;
93
98
  }
94
99
  &nbsp;
95
- <span class="fstat-no" title="function not covered" > get(id = null) { return id ? this.#client.get(`/hashes/${id}`) : this.#client.get('/hashes'); }</span>
96
- <span class="fstat-no" title="function not covered" > generate(data) { return this.#client.put('/hashes/generate', data); }</span>
97
- <span class="fstat-no" title="function not covered" > delete(id) { return this.#client.del(`/hashes/${id}`); }</span>
100
+ get(id = null) { return id<span class="branch-0 cbranch-no" title="branch not covered" > ? this.#client.get(`/hashes/${id}`) </span>: this.#client.get('/hashes'); }
98
101
  }
99
102
  &nbsp;</pre></td></tr></table></pre>
100
103
 
@@ -103,7 +106,7 @@
103
106
  <div class='footer quiet pad2 space-top1 center small'>
104
107
  Code coverage generated by
105
108
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
106
- at 2026-08-03T13:22:45.069Z
109
+ at 2026-08-09T19:41:47.271Z
107
110
  </div>
108
111
  <script src="../../../prettify.js"></script>
109
112
  <script>
@@ -30,16 +30,16 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
33
+ <span class="strong">75% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>2/2</span>
35
+ <span class='fraction'>3/4</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">33.33% </span>
40
+ <span class="strong">50% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>2/6</span>
42
+ <span class='fraction'>3/6</span>
43
43
  </div>
44
44
 
45
45
 
@@ -79,8 +79,8 @@
79
79
  <span class="cline-any cline-yes">1x</span>
80
80
  <span class="cline-any cline-yes">1x</span>
81
81
  <span class="cline-any cline-yes">1x</span>
82
- <span class="cline-any cline-yes">1x</span>
83
- <span class="cline-any cline-yes">1x</span>
82
+ <span class="cline-any cline-yes">30x</span>
83
+ <span class="cline-any cline-yes">30x</span>
84
84
  <span class="cline-any cline-yes">1x</span>
85
85
  <span class="cline-any cline-yes">1x</span>
86
86
  <span class="cline-any cline-yes">1x</span>
@@ -94,7 +94,7 @@
94
94
  this.#client = client;
95
95
  }
96
96
  &nbsp;
97
- <span class="fstat-no" title="function not covered" > get(id = null) { return id ? this.#client.get(`/insignias/${id}`) : this.#client.get('/insignias'); }</span>
97
+ get(id = null) { return id<span class="branch-0 cbranch-no" title="branch not covered" > ? this.#client.get(`/insignias/${id}`) </span>: this.#client.get('/insignias'); }
98
98
  <span class="fstat-no" title="function not covered" > create(data) { return this.#client.put('/insignias', data); }</span>
99
99
  <span class="fstat-no" title="function not covered" > edit(id, data) { return this.#client.patch(`/insignias/${id}`, data); }</span>
100
100
  <span class="fstat-no" title="function not covered" > delete(id) { return this.#client.del(`/insignias/${id}`); }</span>
@@ -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-08-03T13:22:45.069Z
109
+ at 2026-08-09T19:41:47.271Z
110
110
  </div>
111
111
  <script src="../../../prettify.js"></script>
112
112
  <script>
@@ -30,16 +30,16 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
33
+ <span class="strong">75% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>2/2</span>
35
+ <span class='fraction'>3/4</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">33.33% </span>
40
+ <span class="strong">50% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>2/6</span>
42
+ <span class='fraction'>3/6</span>
43
43
  </div>
44
44
 
45
45
 
@@ -79,8 +79,8 @@
79
79
  <span class="cline-any cline-yes">1x</span>
80
80
  <span class="cline-any cline-yes">1x</span>
81
81
  <span class="cline-any cline-yes">1x</span>
82
- <span class="cline-any cline-yes">1x</span>
83
- <span class="cline-any cline-yes">1x</span>
82
+ <span class="cline-any cline-yes">30x</span>
83
+ <span class="cline-any cline-yes">30x</span>
84
84
  <span class="cline-any cline-yes">1x</span>
85
85
  <span class="cline-any cline-yes">1x</span>
86
86
  <span class="cline-any cline-yes">1x</span>
@@ -94,7 +94,7 @@
94
94
  this.#client = client;
95
95
  }
96
96
  &nbsp;
97
- <span class="fstat-no" title="function not covered" > get(id = null) { return id ? this.#client.get(`/languages/${id}`) : this.#client.get('/languages'); }</span>
97
+ get(id = null) { return id<span class="branch-0 cbranch-no" title="branch not covered" > ? this.#client.get(`/languages/${id}`) </span>: this.#client.get('/languages'); }
98
98
  <span class="fstat-no" title="function not covered" > create(data) { return this.#client.put('/languages', data); }</span>
99
99
  <span class="fstat-no" title="function not covered" > edit(id, data) { return this.#client.patch(`/languages/${id}`, data); }</span>
100
100
  <span class="fstat-no" title="function not covered" > delete(id) { return this.#client.del(`/languages/${id}`); }</span>
@@ -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-08-03T13:22:45.069Z
109
+ at 2026-08-09T19:41:47.271Z
110
110
  </div>
111
111
  <script src="../../../prettify.js"></script>
112
112
  <script>
@@ -30,16 +30,16 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
33
+ <span class="strong">75% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>2/2</span>
35
+ <span class='fraction'>3/4</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">40% </span>
40
+ <span class="strong">60% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>2/5</span>
42
+ <span class='fraction'>3/5</span>
43
43
  </div>
44
44
 
45
45
 
@@ -78,8 +78,8 @@
78
78
  <span class="cline-any cline-yes">1x</span>
79
79
  <span class="cline-any cline-yes">1x</span>
80
80
  <span class="cline-any cline-yes">1x</span>
81
- <span class="cline-any cline-yes">1x</span>
82
- <span class="cline-any cline-yes">1x</span>
81
+ <span class="cline-any cline-yes">30x</span>
82
+ <span class="cline-any cline-yes">30x</span>
83
83
  <span class="cline-any cline-yes">1x</span>
84
84
  <span class="cline-any cline-yes">1x</span>
85
85
  <span class="cline-any cline-yes">1x</span>
@@ -92,7 +92,7 @@
92
92
  this.#client = client;
93
93
  }
94
94
  &nbsp;
95
- <span class="fstat-no" title="function not covered" > get(id = null) { return id ? this.#client.get(`/mail-blacklist/${id}`) : this.#client.get('/mail-blacklist'); }</span>
95
+ get(id = null) { return id<span class="branch-0 cbranch-no" title="branch not covered" > ? this.#client.get(`/mail-blacklist/${id}`) </span>: this.#client.get('/mail-blacklist'); }
96
96
  <span class="fstat-no" title="function not covered" > create(data) { return this.#client.put('/mail-blacklist', data); }</span>
97
97
  <span class="fstat-no" title="function not covered" > delete(id) { return this.#client.del(`/mail-blacklist/${id}`); }</span>
98
98
  }
@@ -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-08-03T13:22:45.069Z
106
+ at 2026-08-09T19:41:47.271Z
107
107
  </div>
108
108
  <script src="../../../prettify.js"></script>
109
109
  <script>
@@ -81,8 +81,8 @@
81
81
  <span class="cline-any cline-yes">1x</span>
82
82
  <span class="cline-any cline-yes">1x</span>
83
83
  <span class="cline-any cline-yes">1x</span>
84
- <span class="cline-any cline-yes">1x</span>
85
- <span class="cline-any cline-yes">1x</span>
84
+ <span class="cline-any cline-yes">30x</span>
85
+ <span class="cline-any cline-yes">30x</span>
86
86
  <span class="cline-any cline-yes">1x</span>
87
87
  <span class="cline-any cline-yes">1x</span>
88
88
  <span class="cline-any cline-yes">1x</span>
@@ -112,7 +112,7 @@
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-08-03T13:22:45.069Z
115
+ at 2026-08-09T19:41:47.271Z
116
116
  </div>
117
117
  <script src="../../../prettify.js"></script>
118
118
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">84.21% </span>
26
+ <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>16/19</span>
28
+ <span class='fraction'>19/19</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
33
+ <span class="strong">75% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>2/2</span>
35
+ <span class='fraction'>3/4</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">28.57% </span>
40
+ <span class="strong">42.85% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>2/7</span>
42
+ <span class='fraction'>3/7</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">84.21% </span>
47
+ <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>16/19</span>
49
+ <span class='fraction'>19/19</span>
50
50
  </div>
51
51
 
52
52
 
@@ -86,14 +86,14 @@
86
86
  <span class="cline-any cline-yes">1x</span>
87
87
  <span class="cline-any cline-yes">1x</span>
88
88
  <span class="cline-any cline-yes">1x</span>
89
+ <span class="cline-any cline-yes">30x</span>
90
+ <span class="cline-any cline-yes">30x</span>
91
+ <span class="cline-any cline-yes">1x</span>
89
92
  <span class="cline-any cline-yes">1x</span>
90
93
  <span class="cline-any cline-yes">1x</span>
91
94
  <span class="cline-any cline-yes">1x</span>
92
95
  <span class="cline-any cline-yes">1x</span>
93
96
  <span class="cline-any cline-yes">1x</span>
94
- <span class="cline-any cline-no">&nbsp;</span>
95
- <span class="cline-any cline-no">&nbsp;</span>
96
- <span class="cline-any cline-no">&nbsp;</span>
97
97
  <span class="cline-any cline-yes">1x</span>
98
98
  <span class="cline-any cline-yes">1x</span>
99
99
  <span class="cline-any cline-yes">1x</span>
@@ -109,10 +109,10 @@
109
109
  }
110
110
  &nbsp;
111
111
  /** Sales-only paginated + title-searchable list when called without an id. */
112
- <span class="fstat-no" title="function not covered" > get(id = null, { search = null, page = 1, perPage = 15 } = {}) {</span>
113
- <span class="cstat-no" title="statement not covered" > if (id) return this.#client.get(`/offers/${id}`);</span>
114
- <span class="cstat-no" title="statement not covered" > return this.#client.get('/offers', { search, page, per_page: perPage });</span>
115
- <span class="cstat-no" title="statement not covered" > }</span>
112
+ get(id = null, { search = null, page = 1, perPage = 15 } = {}) {
113
+ if (id) <span class="branch-0 cbranch-no" title="branch not covered" >return this.#client.get(`/offers/${id}`);</span>
114
+ return this.#client.get('/offers', { search, page, per_page: perPage });
115
+ }
116
116
  <span class="fstat-no" title="function not covered" > create(data) { return this.#client.put('/offers', data); }</span>
117
117
  <span class="fstat-no" title="function not covered" > edit(id, data) { return this.#client.patch(`/offers/${id}`, data); }</span>
118
118
  <span class="fstat-no" title="function not covered" > delete(id) { return this.#client.del(`/offers/${id}`); }</span>
@@ -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 2026-08-03T13:22:45.069Z
130
+ at 2026-08-09T19:41:47.271Z
131
131
  </div>
132
132
  <script src="../../../prettify.js"></script>
133
133
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">50% </span>
26
+ <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>19/38</span>
28
+ <span class='fraction'>38/38</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
33
  <span class="strong">100% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>2/2</span>
35
+ <span class='fraction'>11/11</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">28.57% </span>
40
+ <span class="strong">69.23% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>2/7</span>
42
+ <span class='fraction'>9/13</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">50% </span>
47
+ <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>19/38</span>
49
+ <span class='fraction'>38/38</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line medium'></div>
64
+ <div class='status-line high'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -105,15 +105,15 @@
105
105
  <span class="cline-any cline-yes">1x</span>
106
106
  <span class="cline-any cline-yes">1x</span>
107
107
  <span class="cline-any cline-yes">1x</span>
108
+ <span class="cline-any cline-yes">30x</span>
109
+ <span class="cline-any cline-yes">30x</span>
108
110
  <span class="cline-any cline-yes">1x</span>
109
111
  <span class="cline-any cline-yes">1x</span>
110
112
  <span class="cline-any cline-yes">1x</span>
113
+ <span class="cline-any cline-yes">2x</span>
111
114
  <span class="cline-any cline-yes">1x</span>
112
- <span class="cline-any cline-yes">1x</span>
113
- <span class="cline-any cline-no">&nbsp;</span>
114
- <span class="cline-any cline-no">&nbsp;</span>
115
- <span class="cline-any cline-no">&nbsp;</span>
116
- <span class="cline-any cline-no">&nbsp;</span>
115
+ <span class="cline-any cline-yes">2x</span>
116
+ <span class="cline-any cline-yes">2x</span>
117
117
  <span class="cline-any cline-yes">1x</span>
118
118
  <span class="cline-any cline-yes">1x</span>
119
119
  <span class="cline-any cline-yes">1x</span>
@@ -123,21 +123,21 @@
123
123
  <span class="cline-any cline-yes">1x</span>
124
124
  <span class="cline-any cline-yes">1x</span>
125
125
  <span class="cline-any cline-yes">1x</span>
126
- <span class="cline-any cline-no">&nbsp;</span>
127
- <span class="cline-any cline-no">&nbsp;</span>
128
- <span class="cline-any cline-no">&nbsp;</span>
129
- <span class="cline-any cline-no">&nbsp;</span>
130
- <span class="cline-any cline-no">&nbsp;</span>
131
- <span class="cline-any cline-no">&nbsp;</span>
132
- <span class="cline-any cline-no">&nbsp;</span>
133
- <span class="cline-any cline-no">&nbsp;</span>
134
- <span class="cline-any cline-no">&nbsp;</span>
135
- <span class="cline-any cline-no">&nbsp;</span>
136
- <span class="cline-any cline-no">&nbsp;</span>
137
- <span class="cline-any cline-no">&nbsp;</span>
138
- <span class="cline-any cline-no">&nbsp;</span>
139
- <span class="cline-any cline-no">&nbsp;</span>
140
- <span class="cline-any cline-no">&nbsp;</span>
126
+ <span class="cline-any cline-yes">3x</span>
127
+ <span class="cline-any cline-yes">3x</span>
128
+ <span class="cline-any cline-yes">3x</span>
129
+ <span class="cline-any cline-yes">3x</span>
130
+ <span class="cline-any cline-yes">3x</span>
131
+ <span class="cline-any cline-yes">3x</span>
132
+ <span class="cline-any cline-yes">3x</span>
133
+ <span class="cline-any cline-yes">3x</span>
134
+ <span class="cline-any cline-yes">3x</span>
135
+ <span class="cline-any cline-yes">3x</span>
136
+ <span class="cline-any cline-yes">3x</span>
137
+ <span class="cline-any cline-yes">3x</span>
138
+ <span class="cline-any cline-yes">3x</span>
139
+ <span class="cline-any cline-yes">3x</span>
140
+ <span class="cline-any cline-yes">3x</span>
141
141
  <span class="cline-any cline-yes">1x</span>
142
142
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">export default class Organizations {
143
143
  #client;
@@ -147,35 +147,35 @@
147
147
  }
148
148
  &nbsp;
149
149
  /** No id: "my organizations" (all organizations if employee+, else only owned), paginated. */
150
- <span class="fstat-no" title="function not covered" > get(id = null, { page = 1, perPage = 15 } = {}) {</span>
151
- <span class="cstat-no" title="statement not covered" > return id</span>
152
- <span class="cstat-no" title="statement not covered" > ? this.#client.get(`/organizations/${id}`)</span>
153
- <span class="cstat-no" title="statement not covered" > : this.#client.get('/organizations', { page, per_page: perPage });</span>
154
- <span class="cstat-no" title="statement not covered" > }</span>
150
+ get(id = null, { page = 1, perPage = 15 } = {}) {
151
+ return id
152
+ ? this.#client.get(`/organizations/${id}`)
153
+ : this.#client.get('/organizations', { page, per_page: perPage });
154
+ }
155
155
  /** Organization-and-above (owner creates their own org; employee-and-above may pass user_id to set another owner). */
156
- <span class="fstat-no" title="function not covered" > create(data) { return this.#client.put('/organizations', data); }</span>
156
+ create(data) { return this.#client.put('/organizations', data); }
157
157
  /** user_id (owner reassignment) is applied only when the caller is employee-and-above. */
158
- <span class="fstat-no" title="function not covered" > edit(id, data) { return this.#client.patch(`/organizations/${id}`, data); }</span>
158
+ edit(id, data) { return this.#client.patch(`/organizations/${id}`, data); }
159
159
  &nbsp;
160
160
  /** Confirms a pending member invite from the emailed link — logs the user in on success. */
161
161
  <span class="fstat-no" title="function not covered" > confirmInvite(id, { username, hash }) { return this.#client.post(`/organizations/${id}/members/invite/confirm`, { username, hash }); }</span>
162
162
  &nbsp;
163
- <span class="fstat-no" title="function not covered" > members(id) {</span>
164
- <span class="cstat-no" title="statement not covered" > const base = `/organizations/${id}/members`;</span>
165
- <span class="cstat-no" title="statement not covered" > const client = this.#client;</span>
166
- <span class="cstat-no" title="statement not covered" > return {</span>
167
- <span class="cstat-no" title="statement not covered" > get: () =&gt; client.get(base),</span>
168
- <span class="cstat-no" title="statement not covered" > courses: (userId) =&gt; client.get(`${base}/${userId}/courses`),</span>
169
- <span class="cstat-no" title="statement not covered" > /** Users matching `q` not already invited/members — for the invite search box. */</span>
170
- <span class="cstat-no" title="statement not covered" > search: (q) =&gt; client.get(`${base}/search`, { q }),</span>
171
- <span class="cstat-no" title="statement not covered" > /** Creates a pending invite and emails the user a confirm link. */</span>
172
- <span class="cstat-no" title="statement not covered" > invite: (userId) =&gt; client.post(`${base}/invite`, { user_id: userId }),</span>
173
- <span class="cstat-no" title="statement not covered" > /** Re-sends the invite email to a still-pending member with a fresh link. */</span>
174
- <span class="cstat-no" title="statement not covered" > resendInvite: (userId) =&gt; client.post(`${base}/${userId}/resend-invite`),</span>
175
- <span class="cstat-no" title="statement not covered" > /** Creates a real UserPayment for this member — same payload shape as users(id).payments().create(). */</span>
176
- <span class="cstat-no" title="statement not covered" > createPayment: (userId, data) =&gt; client.put(`${base}/${userId}/payments`, data),</span>
177
- <span class="cstat-no" title="statement not covered" > };</span>
178
- <span class="cstat-no" title="statement not covered" > }</span>
163
+ members(id) {
164
+ const base = `/organizations/${id}/members`;
165
+ const client = this.#client;
166
+ return {
167
+ get: () =&gt; client.get(base),
168
+ courses: (userId) =&gt; client.get(`${base}/${userId}/courses`),
169
+ /** Users matching `q` not already invited/members — for the invite search box. */
170
+ search: (<span class="fstat-no" title="function not covered" >q) =&gt; client.get(`${base}/search`, { q }),</span>
171
+ /** Creates a pending invite and emails the user a confirm link. */
172
+ invite: (<span class="fstat-no" title="function not covered" >userId) =&gt; client.post(`${base}/invite`, { user_id: userId }),</span>
173
+ /** Re-sends the invite email to a still-pending member with a fresh link. */
174
+ resendInvite: (<span class="fstat-no" title="function not covered" >userId) =&gt; client.post(`${base}/${userId}/resend-invite`),</span>
175
+ /** Creates a real UserPayment for this member — same payload shape as users(id).payments().create(). */
176
+ createPayment: (userId, data) =&gt; client.put(`${base}/${userId}/payments`, data),
177
+ };
178
+ }
179
179
  }
180
180
  &nbsp;</pre></td></tr></table></pre>
181
181
 
@@ -184,7 +184,7 @@
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 2026-08-03T13:22:45.069Z
187
+ at 2026-08-09T19:41:47.271Z
188
188
  </div>
189
189
  <script src="../../../prettify.js"></script>
190
190
  <script>
@@ -32,14 +32,14 @@
32
32
  <div class='fl pad1y space-right2'>
33
33
  <span class="strong">100% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>2/2</span>
35
+ <span class='fraction'>3/3</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">50% </span>
40
+ <span class="strong">75% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>2/4</span>
42
+ <span class='fraction'>3/4</span>
43
43
  </div>
44
44
 
45
45
 
@@ -79,8 +79,8 @@
79
79
  <span class="cline-any cline-yes">1x</span>
80
80
  <span class="cline-any cline-yes">1x</span>
81
81
  <span class="cline-any cline-yes">1x</span>
82
- <span class="cline-any cline-yes">1x</span>
83
- <span class="cline-any cline-yes">1x</span>
82
+ <span class="cline-any cline-yes">30x</span>
83
+ <span class="cline-any cline-yes">30x</span>
84
84
  <span class="cline-any cline-yes">1x</span>
85
85
  <span class="cline-any cline-yes">1x</span>
86
86
  <span class="cline-any cline-yes">1x</span>
@@ -94,7 +94,7 @@
94
94
  this.#client = client;
95
95
  }
96
96
  &nbsp;
97
- <span class="fstat-no" title="function not covered" > byCurrency(currency_id) { return this.#client.get(`/payment-methods/by-currency/${currency_id}`); }</span>
97
+ byCurrency(currency_id) { return this.#client.get(`/payment-methods/by-currency/${currency_id}`); }
98
98
  &nbsp;
99
99
  /** All payment methods, unscoped by currency — used by the admin Offer form's payment-method select. */
100
100
  <span class="fstat-no" title="function not covered" > getAll() { return this.#client.get('/payment-methods'); }</span>
@@ -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-08-03T13:22:45.069Z
109
+ at 2026-08-09T19:41:47.271Z
110
110
  </div>
111
111
  <script src="../../../prettify.js"></script>
112
112
  <script>