apacuana-sdk-core 0.10.0 → 0.12.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 (58) hide show
  1. package/README.md +305 -286
  2. package/coverage/clover.xml +345 -248
  3. package/coverage/coverage-final.json +9 -7
  4. package/coverage/lcov-report/index.html +41 -26
  5. package/coverage/lcov-report/src/api/certs.js.html +162 -87
  6. package/coverage/lcov-report/src/api/faceLiveness.js.html +523 -0
  7. package/coverage/lcov-report/src/api/index.html +43 -28
  8. package/coverage/lcov-report/src/api/revocations.js.html +132 -90
  9. package/coverage/lcov-report/src/api/signatures.js.html +25 -253
  10. package/coverage/lcov-report/src/api/users.js.html +23 -14
  11. package/coverage/lcov-report/src/config/index.html +1 -1
  12. package/coverage/lcov-report/src/config/index.js.html +1 -1
  13. package/coverage/lcov-report/src/errors/index.html +1 -1
  14. package/coverage/lcov-report/src/errors/index.js.html +8 -8
  15. package/coverage/lcov-report/src/index.html +13 -13
  16. package/coverage/lcov-report/src/index.js.html +96 -12
  17. package/coverage/lcov-report/src/success/index.html +116 -0
  18. package/coverage/lcov-report/src/success/index.js.html +106 -0
  19. package/coverage/lcov-report/src/utils/constant.js.html +4 -4
  20. package/coverage/lcov-report/src/utils/helpers.js.html +1 -1
  21. package/coverage/lcov-report/src/utils/httpClient.js.html +1 -1
  22. package/coverage/lcov-report/src/utils/index.html +1 -1
  23. package/coverage/lcov.info +597 -414
  24. package/dist/api/certs.d.ts +9 -70
  25. package/dist/api/faceLiveness.d.ts +6 -0
  26. package/dist/api/revocations.d.ts +6 -42
  27. package/dist/api/signatures.d.ts +11 -153
  28. package/dist/api/users.d.ts +16 -6
  29. package/dist/index.d.ts +6 -0
  30. package/dist/index.js +513 -259
  31. package/dist/index.js.map +1 -1
  32. package/dist/index.mjs +513 -259
  33. package/dist/index.mjs.map +1 -1
  34. package/dist/success/index.d.ts +7 -0
  35. package/dist/types/certs.d.ts +97 -0
  36. package/dist/types/faceLiveness.d.ts +11 -0
  37. package/dist/types/revocations.d.ts +51 -0
  38. package/dist/types/signatures.d.ts +147 -0
  39. package/dist/types/users.d.ts +260 -0
  40. package/package.json +1 -1
  41. package/src/api/certs.js +74 -49
  42. package/src/api/faceLiveness.js +146 -0
  43. package/src/api/revocations.js +76 -62
  44. package/src/api/signatures.js +21 -97
  45. package/src/api/users.js +12 -9
  46. package/src/index.js +33 -5
  47. package/src/success/index.js +8 -0
  48. package/src/types/certs.js +56 -0
  49. package/src/types/faceLiveness.js +16 -0
  50. package/src/types/revocations.js +45 -0
  51. package/src/types/signatures.js +91 -0
  52. package/src/types/users.js +73 -0
  53. package/tests/api/certs.test.js +99 -6
  54. package/tests/api/faceLiveness.test.js +170 -0
  55. package/tests/api/revocations.test.js +35 -35
  56. package/tests/api/signatures.test.js +11 -5
  57. package/tests/api/users.test.js +3 -2
  58. package/tests/index.test.js +16 -8
@@ -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">86.11% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>19/19</span>
28
+ <span class='fraction'>31/36</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">80% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>8/8</span>
35
+ <span class='fraction'>16/20</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
40
+ <span class="strong">83.33% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>2/2</span>
42
+ <span class='fraction'>5/6</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">86.11% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>19/19</span>
49
+ <span class='fraction'>31/36</span>
50
50
  </div>
51
51
 
52
52
 
@@ -158,7 +158,21 @@
158
158
  <a name='L93'></a><a href='#L93'>93</a>
159
159
  <a name='L94'></a><a href='#L94'>94</a>
160
160
  <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
162
176
  <span class="cline-any cline-neutral">&nbsp;</span>
163
177
  <span class="cline-any cline-neutral">&nbsp;</span>
164
178
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -167,15 +181,24 @@
167
181
  <span class="cline-any cline-neutral">&nbsp;</span>
168
182
  <span class="cline-any cline-neutral">&nbsp;</span>
169
183
  <span class="cline-any cline-neutral">&nbsp;</span>
184
+ <span class="cline-any cline-yes">2x</span>
185
+ <span class="cline-any cline-yes">3x</span>
186
+ <span class="cline-any cline-yes">3x</span>
170
187
  <span class="cline-any cline-neutral">&nbsp;</span>
171
188
  <span class="cline-any cline-neutral">&nbsp;</span>
172
189
  <span class="cline-any cline-neutral">&nbsp;</span>
173
190
  <span class="cline-any cline-neutral">&nbsp;</span>
191
+ <span class="cline-any cline-yes">1x</span>
174
192
  <span class="cline-any cline-neutral">&nbsp;</span>
193
+ <span class="cline-any cline-yes">2x</span>
194
+ <span class="cline-any cline-yes">1x</span>
175
195
  <span class="cline-any cline-neutral">&nbsp;</span>
196
+ <span class="cline-any cline-yes">1x</span>
176
197
  <span class="cline-any cline-neutral">&nbsp;</span>
177
198
  <span class="cline-any cline-neutral">&nbsp;</span>
178
199
  <span class="cline-any cline-neutral">&nbsp;</span>
200
+ <span class="cline-any cline-yes">2x</span>
201
+ <span class="cline-any cline-no">&nbsp;</span>
179
202
  <span class="cline-any cline-neutral">&nbsp;</span>
180
203
  <span class="cline-any cline-neutral">&nbsp;</span>
181
204
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -189,42 +212,48 @@
189
212
  <span class="cline-any cline-neutral">&nbsp;</span>
190
213
  <span class="cline-any cline-neutral">&nbsp;</span>
191
214
  <span class="cline-any cline-neutral">&nbsp;</span>
215
+ <span class="cline-any cline-yes">2x</span>
216
+ <span class="cline-any cline-yes">5x</span>
217
+ <span class="cline-any cline-yes">2x</span>
192
218
  <span class="cline-any cline-neutral">&nbsp;</span>
193
219
  <span class="cline-any cline-neutral">&nbsp;</span>
194
220
  <span class="cline-any cline-neutral">&nbsp;</span>
195
221
  <span class="cline-any cline-neutral">&nbsp;</span>
222
+ <span class="cline-any cline-yes">3x</span>
196
223
  <span class="cline-any cline-neutral">&nbsp;</span>
224
+ <span class="cline-any cline-yes">3x</span>
225
+ <span class="cline-any cline-yes">3x</span>
197
226
  <span class="cline-any cline-neutral">&nbsp;</span>
227
+ <span class="cline-any cline-no">&nbsp;</span>
228
+ <span class="cline-any cline-no">&nbsp;</span>
198
229
  <span class="cline-any cline-neutral">&nbsp;</span>
230
+ <span class="cline-any cline-no">&nbsp;</span>
199
231
  <span class="cline-any cline-neutral">&nbsp;</span>
200
232
  <span class="cline-any cline-neutral">&nbsp;</span>
201
- <span class="cline-any cline-yes">2x</span>
202
- <span class="cline-any cline-yes">3x</span>
203
- <span class="cline-any cline-yes">1x</span>
204
233
  <span class="cline-any cline-neutral">&nbsp;</span>
205
234
  <span class="cline-any cline-neutral">&nbsp;</span>
206
- <span class="cline-any cline-yes">2x</span>
207
- <span class="cline-any cline-yes">2x</span>
208
235
  <span class="cline-any cline-neutral">&nbsp;</span>
209
236
  <span class="cline-any cline-neutral">&nbsp;</span>
237
+ <span class="cline-any cline-yes">2x</span>
238
+ <span class="cline-any cline-yes">4x</span>
239
+ <span class="cline-any cline-yes">4x</span>
210
240
  <span class="cline-any cline-neutral">&nbsp;</span>
211
241
  <span class="cline-any cline-neutral">&nbsp;</span>
212
242
  <span class="cline-any cline-neutral">&nbsp;</span>
213
- <span class="cline-any cline-yes">1x</span>
214
243
  <span class="cline-any cline-neutral">&nbsp;</span>
244
+ <span class="cline-any cline-yes">2x</span>
215
245
  <span class="cline-any cline-yes">1x</span>
216
246
  <span class="cline-any cline-neutral">&nbsp;</span>
247
+ <span class="cline-any cline-yes">1x</span>
217
248
  <span class="cline-any cline-neutral">&nbsp;</span>
249
+ <span class="cline-any cline-yes">3x</span>
250
+ <span class="cline-any cline-yes">2x</span>
218
251
  <span class="cline-any cline-neutral">&nbsp;</span>
219
- <span class="cline-any cline-neutral">&nbsp;</span>
220
- <span class="cline-any cline-neutral">&nbsp;</span>
252
+ <span class="cline-any cline-yes">1x</span>
221
253
  <span class="cline-any cline-neutral">&nbsp;</span>
222
254
  <span class="cline-any cline-neutral">&nbsp;</span>
223
255
  <span class="cline-any cline-neutral">&nbsp;</span>
224
256
  <span class="cline-any cline-yes">2x</span>
225
- <span class="cline-any cline-yes">5x</span>
226
- <span class="cline-any cline-neutral">&nbsp;</span>
227
- <span class="cline-any cline-yes">5x</span>
228
257
  <span class="cline-any cline-yes">1x</span>
229
258
  <span class="cline-any cline-neutral">&nbsp;</span>
230
259
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -232,121 +261,134 @@
232
261
  <span class="cline-any cline-neutral">&nbsp;</span>
233
262
  <span class="cline-any cline-neutral">&nbsp;</span>
234
263
  <span class="cline-any cline-neutral">&nbsp;</span>
235
- <span class="cline-any cline-yes">4x</span>
236
- <span class="cline-any cline-yes">4x</span>
237
264
  <span class="cline-any cline-neutral">&nbsp;</span>
238
265
  <span class="cline-any cline-neutral">&nbsp;</span>
239
266
  <span class="cline-any cline-neutral">&nbsp;</span>
240
267
  <span class="cline-any cline-neutral">&nbsp;</span>
241
268
  <span class="cline-any cline-neutral">&nbsp;</span>
242
269
  <span class="cline-any cline-yes">2x</span>
243
- <span class="cline-any cline-yes">1x</span>
270
+ <span class="cline-any cline-yes">5x</span>
244
271
  <span class="cline-any cline-neutral">&nbsp;</span>
272
+ <span class="cline-any cline-yes">5x</span>
273
+ <span class="cline-any cline-yes">4x</span>
245
274
  <span class="cline-any cline-neutral">&nbsp;</span>
246
275
  <span class="cline-any cline-yes">1x</span>
276
+ <span class="cline-any cline-yes">1x</span>
247
277
  <span class="cline-any cline-neutral">&nbsp;</span>
248
- <span class="cline-any cline-yes">3x</span>
249
- <span class="cline-any cline-yes">2x</span>
278
+ <span class="cline-any cline-no">&nbsp;</span>
250
279
  <span class="cline-any cline-neutral">&nbsp;</span>
251
- <span class="cline-any cline-yes">1x</span>
252
280
  <span class="cline-any cline-neutral">&nbsp;</span>
253
281
  <span class="cline-any cline-neutral">&nbsp;</span>
254
282
  <span class="cline-any cline-neutral">&nbsp;</span>
255
283
  <span class="cline-any cline-neutral">&nbsp;</span>
256
284
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { httpRequest } from "../utils/httpClient";
257
- import { ApacuanaAPIError } from "../errors/index";
258
285
  import { getConfig } from "../config";
259
286
  import { INTEGRATION_TYPE } from "../utils/constant";
287
+ import { ApacuanaAPIError } from "../errors";
288
+ import ApacuanaSuccess from "../success";
260
289
  &nbsp;
261
- /**
262
- * @typedef {object} RequestRevocationResponse
263
- * @property {string} revocationStatus - El estado de la solicitud de revocación (e.g., "pending").
264
- * @property {string|number} requestId - El ID de la solicitud de revocación.
265
- */
266
- &nbsp;
267
- /**
268
- * Simula la solicitud de revocación de un certificado.
269
- * @param {string} reasonCode - Código o descripción del motivo de la revocación.
270
- * @returns {Promise&lt;RequestRevocationResponse&gt;} Objeto con el estado de la solicitud de revocación.
271
- */
272
- /**
273
- * @typedef {object} RevocationResponse
274
- * @property {boolean} success - Indicates if the revocation request was successful.
275
- * @property {string} [message] - A message providing details about the outcome.
276
- */
277
- &nbsp;
278
- /**
279
- * @typedef {object} RevocationReason
280
- * @property {string} code - The code for the revocation reason.
281
- * @property {string} description - The description of the revocation reason.
282
- */
283
- &nbsp;
284
- /**
285
- * @typedef {object} RevocationReasonsResponse
286
- * @property {boolean} success - Indicates if the request was successful.
287
- * @property {RevocationReason[]} reasons - A list of revocation reasons.
288
- */
289
- &nbsp;
290
- /**
291
- * Requests the revocation of a certificate.
292
- * @param {number} reasonCode - Código o descripción del motivo de la revocación.
293
- * @returns {Promise&lt;RevocationResponse&gt;} An object indicating the success of the request.
294
- * @throws {ApacuanaAPIError} If the revocation request fails.
295
- */
296
- export const requestRevocation = async (reasonCode) =&gt; {
297
- if (!reasonCode) {
298
- throw new Error("Código de motivo es requerido para requestRevocation.");
299
- }
290
+ /** @typedef {import("../types/revocations").RequestRevocationResponse} RequestRevocationResponse */
291
+ /** @typedef {import("../types/revocations").GetRevocationReasonsResponse} GetRevocationReasonsResponse */
300
292
  &nbsp;
293
+ const requestRevocationOnBoarding = async (params) =&gt; {
301
294
  try {
302
295
  const response = await httpRequest(
303
296
  "services/api/onboardingclient/requestcert",
304
- { reason: reasonCode },
297
+ params,
305
298
  "POST"
306
299
  );
307
- &nbsp;
308
- return response;
300
+ return new ApacuanaSuccess(response);
309
301
  } catch (error) {
310
- throw new Error(`Fallo en la solicitud de revocación: ${error.message}`);
302
+ if (error instanceof ApacuanaAPIError) {
303
+ throw error;
304
+ }
305
+ throw new Error(`Failed to request revocation: ${error.message}`);
311
306
  }
312
307
  };
313
308
  &nbsp;
309
+ const requestRevocationOnPremise = <span class="fstat-no" title="function not covered" >as</span>ync () =&gt; {
310
+ <span class="cstat-no" title="statement not covered" > throw new ApacuanaAPIError(</span>
311
+ "Requesting revocation is not supported for integration type: ONPREMISE",
312
+ 501,
313
+ "NOT_IMPLEMENTED"
314
+ );
315
+ };
316
+ &nbsp;
314
317
  /**
315
- * Retrieves the available reasons for certificate revocation.
316
- * @returns {Promise&lt;RevocationReasonsResponse&gt;} An object containing the list of revocation reasons.
317
- * @throws {ApacuanaAPIError} If fetching the reasons fails.
318
+ * Solicita la revocación de un certificado.
319
+ * @param {object} params - Parámetros para la solicitud.
320
+ * @param {number} params.reasonCode - El código de la razón de la revocación.
321
+ * @returns {Promise&lt;RequestRevocationResponse&gt;} Una promesa que resuelve con la confirmación de la solicitud.
322
+ * @throws {Error} Si los parámetros son inválidos.
318
323
  */
319
- export const getRevocationReasons = async () =&gt; {
324
+ export const requestRevocation = async (params) =&gt; {
325
+ if (!params || typeof params.reasonCode !== "number") {
326
+ throw new Error(
327
+ 'The "params" object with a numeric "reasonCode" property is required.'
328
+ );
329
+ }
330
+ &nbsp;
320
331
  const { integrationType } = getConfig();
321
332
  &nbsp;
322
- if (integrationType === INTEGRATION_TYPE.ONPREMISE) {
323
- throw new ApacuanaAPIError(
324
- `Get revocation reasons is not supported for integration type: ${integrationType}`,
325
- 501,
326
- "NOT_IMPLEMENTED"
327
- );
333
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (integrationType === INTEGRATION_TYPE.ONBOARDING) {
334
+ return requestRevocationOnBoarding(params);
335
+ }
336
+ <span class="cstat-no" title="statement not covered" > if (integrationType === INTEGRATION_TYPE.ONPREMISE) {</span>
337
+ <span class="cstat-no" title="statement not covered" > return requestRevocationOnPremise(params);</span>
328
338
  }
339
+ <span class="cstat-no" title="statement not covered" > throw new ApacuanaAPIError(</span>
340
+ `Unsupported integration type: ${integrationType}`,
341
+ 400,
342
+ "UNSUPPORTED_INTEGRATION_TYPE"
343
+ );
344
+ };
329
345
  &nbsp;
346
+ const getRevocationReasonsOnBoarding = async () =&gt; {
330
347
  try {
331
348
  const response = await httpRequest(
332
- "GET",
333
349
  "config/api/revocation/reasonsonboarding",
334
- {}
350
+ {},
351
+ "GET"
335
352
  );
336
- &nbsp;
337
- if (!response.records) {
353
+ if (!response || !response.records) {
338
354
  throw new ApacuanaAPIError("Failed to fetch revocation reasons.");
339
355
  }
340
- &nbsp;
341
- return response.records;
356
+ return new ApacuanaSuccess({ reasons: response.records });
342
357
  } catch (error) {
343
358
  if (error instanceof ApacuanaAPIError) {
344
359
  throw error;
345
360
  }
346
- throw new Error(
347
- "Failed to get revocation reasons. Please try again later."
348
- );
361
+ throw new Error(`Failed to get revocation reasons: ${error.message}`);
362
+ }
363
+ };
364
+ &nbsp;
365
+ const getRevocationReasonsOnPremise = async () =&gt; {
366
+ throw new ApacuanaAPIError(
367
+ "Getting revocation reasons is not supported for integration type: ONPREMISE",
368
+ 501,
369
+ "NOT_IMPLEMENTED"
370
+ );
371
+ };
372
+ &nbsp;
373
+ /**
374
+ * Obtiene la lista de razones de revocación de certificados.
375
+ * @returns {Promise&lt;GetRevocationReasonsResponse&gt;} Una promesa que resuelve con la lista de razones de revocación.
376
+ * @throws {ApacuanaAPIError} Si la llamada a la API falla o el tipo de integración no es soportado.
377
+ */
378
+ export const getRevocationReasons = async () =&gt; {
379
+ const { integrationType } = getConfig();
380
+ &nbsp;
381
+ if (integrationType === INTEGRATION_TYPE.ONBOARDING) {
382
+ return getRevocationReasonsOnBoarding();
383
+ }
384
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (integrationType === INTEGRATION_TYPE.ONPREMISE) {
385
+ return getRevocationReasonsOnPremise();
349
386
  }
387
+ <span class="cstat-no" title="statement not covered" > throw new ApacuanaAPIError(</span>
388
+ `Unsupported integration type: ${integrationType}`,
389
+ 400,
390
+ "UNSUPPORTED_INTEGRATION_TYPE"
391
+ );
350
392
  };
351
393
  &nbsp;</pre></td></tr></table></pre>
352
394
 
@@ -355,7 +397,7 @@ export const getRevocationReasons = async () =&gt; {
355
397
  <div class='footer quiet pad2 space-top1 center small'>
356
398
  Code coverage generated by
357
399
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
358
- at 2025-09-05T15:19:06.305Z
400
+ at 2025-09-15T18:35:33.013Z
359
401
  </div>
360
402
  <script src="../../prettify.js"></script>
361
403
  <script>