apacuana-sdk-core 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +117 -46
- package/coverage/clover.xml +205 -91
- package/coverage/coverage-final.json +9 -6
- package/coverage/lcov-report/index.html +48 -33
- package/coverage/lcov-report/src/api/certs.js.html +74 -83
- package/coverage/lcov-report/src/api/index.html +36 -21
- package/coverage/lcov-report/src/api/revocations.js.html +1 -1
- package/coverage/lcov-report/src/api/signatures.js.html +528 -81
- package/coverage/lcov-report/src/api/users.js.html +5 -2
- package/coverage/lcov-report/src/config/index.html +21 -21
- package/coverage/lcov-report/src/config/index.js.html +65 -32
- package/coverage/lcov-report/src/errors/index.html +5 -5
- package/coverage/lcov-report/src/errors/index.js.html +13 -10
- package/coverage/lcov-report/src/index.html +1 -1
- package/coverage/lcov-report/src/index.js.html +13 -4
- package/coverage/lcov-report/src/utils/constant.js.html +4 -4
- package/coverage/lcov-report/src/utils/helpers.js.html +268 -145
- package/coverage/lcov-report/src/utils/httpClient.js.html +646 -0
- package/coverage/lcov-report/src/utils/index.html +32 -17
- package/coverage/lcov.info +429 -167
- package/dist/index.js +390 -150
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +390 -150
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/api/certs.js +27 -30
- package/src/api/signatures.js +205 -50
- package/src/api/users.js +1 -0
- package/src/errors/index.js +1 -0
- package/src/index.js +4 -1
- package/src/utils/helpers.js +140 -99
- package/tests/api/certs.test.js +126 -4
- package/tests/api/signatures.test.js +207 -4
- package/tests/api/users.test.js +1 -0
- package/src/auth/index.js +0 -24
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">95.83% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>23/24</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">72.72% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>8/11</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">100% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>3/3</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">95.83% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>23/24</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
|
|
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>
|
|
@@ -130,147 +130,138 @@
|
|
|
130
130
|
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
131
|
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
132
|
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
-
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
-
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
-
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
|
-
<a name='L71'></a><a href='#L71'>71</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
133
|
+
<a name='L68'></a><a href='#L68'>68</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
137
134
|
<span class="cline-any cline-neutral"> </span>
|
|
138
135
|
<span class="cline-any cline-neutral"> </span>
|
|
139
136
|
<span class="cline-any cline-neutral"> </span>
|
|
140
137
|
<span class="cline-any cline-neutral"> </span>
|
|
141
138
|
<span class="cline-any cline-neutral"> </span>
|
|
139
|
+
<span class="cline-any cline-yes">2x</span>
|
|
140
|
+
<span class="cline-any cline-yes">2x</span>
|
|
141
|
+
<span class="cline-any cline-yes">2x</span>
|
|
142
142
|
<span class="cline-any cline-neutral"> </span>
|
|
143
|
-
<span class="cline-any cline-yes">
|
|
144
|
-
<span class="cline-any cline-no"> </span>
|
|
145
|
-
<span class="cline-any cline-no"> </span>
|
|
146
|
-
<span class="cline-any cline-no"> </span>
|
|
147
|
-
<span class="cline-any cline-no"> </span>
|
|
148
|
-
<span class="cline-any cline-no"> </span>
|
|
149
|
-
<span class="cline-any cline-neutral"> </span>
|
|
150
|
-
<span class="cline-any cline-no"> </span>
|
|
143
|
+
<span class="cline-any cline-yes">2x</span>
|
|
151
144
|
<span class="cline-any cline-neutral"> </span>
|
|
152
145
|
<span class="cline-any cline-neutral"> </span>
|
|
153
146
|
<span class="cline-any cline-neutral"> </span>
|
|
154
147
|
<span class="cline-any cline-neutral"> </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>
|
|
155
151
|
<span class="cline-any cline-neutral"> </span>
|
|
156
152
|
<span class="cline-any cline-neutral"> </span>
|
|
157
|
-
<span class="cline-any cline-no"> </span>
|
|
158
153
|
<span class="cline-any cline-neutral"> </span>
|
|
159
154
|
<span class="cline-any cline-neutral"> </span>
|
|
160
155
|
<span class="cline-any cline-neutral"> </span>
|
|
161
156
|
<span class="cline-any cline-neutral"> </span>
|
|
157
|
+
<span class="cline-any cline-yes">1x</span>
|
|
162
158
|
<span class="cline-any cline-neutral"> </span>
|
|
163
|
-
<span class="cline-any cline-no"> </span>
|
|
164
|
-
<span class="cline-any cline-no"> </span>
|
|
165
|
-
<span class="cline-any cline-no"> </span>
|
|
166
159
|
<span class="cline-any cline-neutral"> </span>
|
|
160
|
+
<span class="cline-any cline-yes">1x</span>
|
|
161
|
+
<span class="cline-any cline-yes">1x</span>
|
|
167
162
|
<span class="cline-any cline-neutral"> </span>
|
|
163
|
+
<span class="cline-any cline-no"> </span>
|
|
168
164
|
<span class="cline-any cline-neutral"> </span>
|
|
169
165
|
<span class="cline-any cline-neutral"> </span>
|
|
170
166
|
<span class="cline-any cline-neutral"> </span>
|
|
167
|
+
<span class="cline-any cline-yes">2x</span>
|
|
168
|
+
<span class="cline-any cline-yes">7x</span>
|
|
169
|
+
<span class="cline-any cline-yes">7x</span>
|
|
170
|
+
<span class="cline-any cline-yes">4x</span>
|
|
171
|
+
<span class="cline-any cline-yes">2x</span>
|
|
171
172
|
<span class="cline-any cline-neutral"> </span>
|
|
172
|
-
<span class="cline-any cline-
|
|
173
|
+
<span class="cline-any cline-yes">2x</span>
|
|
173
174
|
<span class="cline-any cline-neutral"> </span>
|
|
175
|
+
<span class="cline-any cline-yes">1x</span>
|
|
174
176
|
<span class="cline-any cline-neutral"> </span>
|
|
175
177
|
<span class="cline-any cline-neutral"> </span>
|
|
176
|
-
<span class="cline-any cline-
|
|
178
|
+
<span class="cline-any cline-yes">1x</span>
|
|
177
179
|
<span class="cline-any cline-neutral"> </span>
|
|
178
180
|
<span class="cline-any cline-neutral"> </span>
|
|
179
|
-
<span class="cline-any cline-no"> </span>
|
|
180
|
-
<span class="cline-any cline-no"> </span>
|
|
181
|
-
<span class="cline-any cline-neutral"> </span>
|
|
182
|
-
<span class="cline-any cline-no"> </span>
|
|
183
181
|
<span class="cline-any cline-neutral"> </span>
|
|
182
|
+
<span class="cline-any cline-yes">1x</span>
|
|
184
183
|
<span class="cline-any cline-neutral"> </span>
|
|
185
184
|
<span class="cline-any cline-neutral"> </span>
|
|
186
|
-
<span class="cline-any cline-yes">1x</span>
|
|
187
|
-
<span class="cline-any cline-no"> </span>
|
|
188
185
|
<span class="cline-any cline-neutral"> </span>
|
|
189
|
-
<span class="cline-any cline-no"> </span>
|
|
190
|
-
<span class="cline-any cline-no"> </span>
|
|
191
|
-
<span class="cline-any cline-no"> </span>
|
|
192
186
|
<span class="cline-any cline-neutral"> </span>
|
|
193
|
-
<span class="cline-any cline-no"> </span>
|
|
194
187
|
<span class="cline-any cline-neutral"> </span>
|
|
195
188
|
<span class="cline-any cline-neutral"> </span>
|
|
189
|
+
<span class="cline-any cline-yes">2x</span>
|
|
190
|
+
<span class="cline-any cline-yes">1x</span>
|
|
191
|
+
<span class="cline-any cline-yes">1x</span>
|
|
196
192
|
<span class="cline-any cline-neutral"> </span>
|
|
197
193
|
<span class="cline-any cline-neutral"> </span>
|
|
198
194
|
<span class="cline-any cline-neutral"> </span>
|
|
199
195
|
<span class="cline-any cline-yes">1x</span>
|
|
200
|
-
<span class="cline-any cline-no"> </span>
|
|
201
|
-
<span class="cline-any cline-no"> </span>
|
|
202
|
-
<span class="cline-any cline-no"> </span>
|
|
203
196
|
<span class="cline-any cline-neutral"> </span>
|
|
204
197
|
<span class="cline-any cline-neutral"> </span>
|
|
205
198
|
<span class="cline-any cline-neutral"> </span>
|
|
206
|
-
<span class="cline-any cline-neutral"> </span
|
|
207
|
-
import { getConfig } from "../config";
|
|
208
|
-
import { INTEGRATION_TYPE } from "../utils/constant";
|
|
209
|
-
import { helpers } from "../utils/helpers";
|
|
210
|
-
import { ApacuanaAPIError } from "../errors/index";
|
|
199
|
+
<span class="cline-any cline-neutral"> </span>
|
|
200
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { getConfig } from "../config/index";
|
|
211
201
|
import { httpRequest } from "../utils/httpClient";
|
|
202
|
+
import helpers from "../utils/helpers";
|
|
203
|
+
import { ApacuanaAPIError } from "../errors";
|
|
204
|
+
import { INTEGRATION_TYPE } from "../utils/constant";
|
|
212
205
|
|
|
213
|
-
const generateCertOnBoarding = <span class="
|
|
214
|
-
|
|
215
|
-
const
|
|
216
|
-
const { userData } = <span class="cstat-no" title="statement not covered" >config;</span>
|
|
217
|
-
const keyPair = <span class="cstat-no" title="statement not covered" >await helpers.generateKeyPair();</span>
|
|
218
|
-
const { csrBase64 } = <span class="cstat-no" title="statement not covered" >await helpers.generateCSR(keyPair, userData);</span>
|
|
219
|
-
|
|
220
|
-
const body = <span class="cstat-no" title="statement not covered" >{</span>
|
|
221
|
-
csr: CryptoJS.AES.encrypt(csrBase64, config.secretKey, {
|
|
222
|
-
mode: CryptoJS.mode.ECB,
|
|
223
|
-
padding: CryptoJS.pad.Pkcs7,
|
|
224
|
-
}).toString(),
|
|
225
|
-
};
|
|
206
|
+
const generateCertOnBoarding = async (csr = <span class="branch-0 cbranch-no" title="branch not covered" >undefined)</span> => {
|
|
207
|
+
try {
|
|
208
|
+
const encryptedCSR = helpers.encryptedCsr(csr);
|
|
226
209
|
|
|
227
|
-
const response =
|
|
210
|
+
const response = await httpRequest(
|
|
228
211
|
"services/api/register/certificate",
|
|
229
|
-
|
|
212
|
+
encryptedCSR,
|
|
230
213
|
"POST"
|
|
231
214
|
);
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
<span class="cstat-no" title="statement not covered" > throw new ApacuanaAPIError(</span>
|
|
215
|
+
const { cert } = response;
|
|
216
|
+
if (!cert) {
|
|
217
|
+
throw new ApacuanaAPIError(
|
|
236
218
|
"La respuesta de la API no contiene el certificado.",
|
|
237
219
|
response.status,
|
|
238
220
|
"INVALID_API_RESPONSE"
|
|
239
221
|
);
|
|
240
222
|
}
|
|
241
223
|
|
|
242
|
-
|
|
243
|
-
keyPair.privateKey
|
|
244
|
-
);
|
|
245
|
-
|
|
246
|
-
<span class="cstat-no" title="statement not covered" > return { cert, privateKey: exportedPrivateKey };</span>
|
|
224
|
+
return { cert, success: true };
|
|
247
225
|
} catch (error) {
|
|
248
226
|
// Se lanza el error capturado, que ya será de tipo ApacuanaAPIError o un Error nativo.
|
|
249
|
-
<span class="
|
|
250
|
-
|
|
227
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (error instanceof ApacuanaAPIError) {
|
|
228
|
+
throw error;
|
|
251
229
|
}
|
|
252
230
|
<span class="cstat-no" title="statement not covered" > throw new Error(`Fallo en la generación del certificado: ${error.message}`);</span>
|
|
253
231
|
}
|
|
254
232
|
};
|
|
255
233
|
|
|
256
|
-
export const generateCert =
|
|
257
|
-
const { integrationType } =
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
}
|
|
234
|
+
export const generateCert = async (csr = undefined) => {
|
|
235
|
+
const { integrationType } = getConfig();
|
|
236
|
+
helpers.validateCsr(csr);
|
|
237
|
+
if (integrationType === INTEGRATION_TYPE.ONBOARDING) {
|
|
238
|
+
return generateCertOnBoarding(csr);
|
|
239
|
+
}
|
|
240
|
+
if (integrationType === INTEGRATION_TYPE.ONPREMISE) {
|
|
262
241
|
// eslint-disable-next-line no-console
|
|
263
|
-
|
|
242
|
+
console.log("-> Lógica para On-premise");
|
|
264
243
|
// Aquí iría la llamada a httpRequest para el endpoint de on-premise
|
|
265
244
|
// return httpRequest('/certs/generate-onpremise', data);
|
|
245
|
+
return Promise.resolve(); // Retornar una promesa resuelta para consistencia
|
|
266
246
|
}
|
|
247
|
+
|
|
248
|
+
// Lanzar un error si el tipo de integración no es soportado
|
|
249
|
+
throw new ApacuanaAPIError(
|
|
250
|
+
`Tipo de integración no soportado: ${integrationType}`,
|
|
251
|
+
400,
|
|
252
|
+
"UNSUPPORTED_INTEGRATION_TYPE"
|
|
253
|
+
);
|
|
267
254
|
};
|
|
268
255
|
|
|
269
|
-
export const getCertStatus = <span class="
|
|
270
|
-
const config =
|
|
271
|
-
const status =
|
|
272
|
-
|
|
256
|
+
export const getCertStatus = (isCertificateInDevice = <span class="branch-0 cbranch-no" title="branch not covered" >false)</span> => {
|
|
257
|
+
const config = getConfig();
|
|
258
|
+
const status = helpers.getCertificateStatus(
|
|
259
|
+
config.userData,
|
|
260
|
+
isCertificateInDevice
|
|
261
|
+
);
|
|
262
|
+
return {
|
|
273
263
|
status,
|
|
264
|
+
success: true,
|
|
274
265
|
};
|
|
275
266
|
};
|
|
276
267
|
</pre></td></tr></table></pre>
|
|
@@ -280,7 +271,7 @@ export const getCertStatus = <span class="fstat-no" title="function not covered"
|
|
|
280
271
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
281
272
|
Code coverage generated by
|
|
282
273
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
283
|
-
at 2025-08-
|
|
274
|
+
at 2025-08-22T15:34:11.195Z
|
|
284
275
|
</div>
|
|
285
276
|
<script src="../../prettify.js"></script>
|
|
286
277
|
<script>
|
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">79.56% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>74/93</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">66.66% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>34/51</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">90.9% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>10/11</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">79.56% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>74/93</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
|
|
64
|
+
<div class='status-line medium'></div>
|
|
65
65
|
<div class="pad1">
|
|
66
66
|
<table class="coverage-summary">
|
|
67
67
|
<thead>
|
|
@@ -79,18 +79,18 @@
|
|
|
79
79
|
</tr>
|
|
80
80
|
</thead>
|
|
81
81
|
<tbody><tr>
|
|
82
|
-
<td class="file
|
|
83
|
-
<td data-value="
|
|
84
|
-
<div class="chart"><div class="cover-fill" style="width:
|
|
82
|
+
<td class="file high" data-value="certs.js"><a href="certs.js.html">certs.js</a></td>
|
|
83
|
+
<td data-value="95.83" class="pic high">
|
|
84
|
+
<div class="chart"><div class="cover-fill" style="width: 95%"></div><div class="cover-empty" style="width: 5%"></div></div>
|
|
85
85
|
</td>
|
|
86
|
-
<td data-value="
|
|
87
|
-
<td data-value="
|
|
88
|
-
<td data-value="
|
|
89
|
-
<td data-value="
|
|
90
|
-
<td data-value="
|
|
91
|
-
<td data-value="3" class="abs
|
|
92
|
-
<td data-value="
|
|
93
|
-
<td data-value="
|
|
86
|
+
<td data-value="95.83" class="pct high">95.83%</td>
|
|
87
|
+
<td data-value="24" class="abs high">23/24</td>
|
|
88
|
+
<td data-value="72.72" class="pct medium">72.72%</td>
|
|
89
|
+
<td data-value="11" class="abs medium">8/11</td>
|
|
90
|
+
<td data-value="100" class="pct high">100%</td>
|
|
91
|
+
<td data-value="3" class="abs high">3/3</td>
|
|
92
|
+
<td data-value="95.83" class="pct high">95.83%</td>
|
|
93
|
+
<td data-value="24" class="abs high">23/24</td>
|
|
94
94
|
</tr>
|
|
95
95
|
|
|
96
96
|
<tr>
|
|
@@ -108,6 +108,21 @@
|
|
|
108
108
|
<td data-value="12" class="abs low">1/12</td>
|
|
109
109
|
</tr>
|
|
110
110
|
|
|
111
|
+
<tr>
|
|
112
|
+
<td class="file high" data-value="signatures.js"><a href="signatures.js.html">signatures.js</a></td>
|
|
113
|
+
<td data-value="82.5" class="pic high">
|
|
114
|
+
<div class="chart"><div class="cover-fill" style="width: 82%"></div><div class="cover-empty" style="width: 18%"></div></div>
|
|
115
|
+
</td>
|
|
116
|
+
<td data-value="82.5" class="pct high">82.5%</td>
|
|
117
|
+
<td data-value="40" class="abs high">33/40</td>
|
|
118
|
+
<td data-value="73.68" class="pct medium">73.68%</td>
|
|
119
|
+
<td data-value="19" class="abs medium">14/19</td>
|
|
120
|
+
<td data-value="100" class="pct high">100%</td>
|
|
121
|
+
<td data-value="6" class="abs high">6/6</td>
|
|
122
|
+
<td data-value="82.5" class="pct high">82.5%</td>
|
|
123
|
+
<td data-value="40" class="abs high">33/40</td>
|
|
124
|
+
</tr>
|
|
125
|
+
|
|
111
126
|
<tr>
|
|
112
127
|
<td class="file high" data-value="users.js"><a href="users.js.html">users.js</a></td>
|
|
113
128
|
<td data-value="100" class="pic high">
|
|
@@ -131,7 +146,7 @@
|
|
|
131
146
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
132
147
|
Code coverage generated by
|
|
133
148
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
134
|
-
at 2025-08-
|
|
149
|
+
at 2025-08-22T15:34:11.195Z
|
|
135
150
|
</div>
|
|
136
151
|
<script src="../../prettify.js"></script>
|
|
137
152
|
<script>
|
|
@@ -199,7 +199,7 @@ export default requestRevocation;
|
|
|
199
199
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
200
200
|
Code coverage generated by
|
|
201
201
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
202
|
-
at 2025-08-
|
|
202
|
+
at 2025-08-22T15:34:11.195Z
|
|
203
203
|
</div>
|
|
204
204
|
<script src="../../prettify.js"></script>
|
|
205
205
|
<script>
|