apacuana-sdk-core 0.2.0 → 0.3.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 (32) hide show
  1. package/README.md +64 -15
  2. package/coverage/clover.xml +145 -111
  3. package/coverage/coverage-final.json +6 -6
  4. package/coverage/lcov-report/index.html +30 -30
  5. package/coverage/lcov-report/src/api/certs.js.html +73 -28
  6. package/coverage/lcov-report/src/api/index.html +31 -31
  7. package/coverage/lcov-report/src/api/revocations.js.html +1 -1
  8. package/coverage/lcov-report/src/api/signatures.js.html +186 -159
  9. package/coverage/lcov-report/src/api/users.js.html +24 -63
  10. package/coverage/lcov-report/src/config/index.html +1 -1
  11. package/coverage/lcov-report/src/config/index.js.html +1 -1
  12. package/coverage/lcov-report/src/errors/index.html +1 -1
  13. package/coverage/lcov-report/src/errors/index.js.html +8 -8
  14. package/coverage/lcov-report/src/index.html +1 -1
  15. package/coverage/lcov-report/src/index.js.html +1 -1
  16. package/coverage/lcov-report/src/utils/constant.js.html +4 -4
  17. package/coverage/lcov-report/src/utils/helpers.js.html +101 -50
  18. package/coverage/lcov-report/src/utils/httpClient.js.html +1 -1
  19. package/coverage/lcov-report/src/utils/index.html +19 -19
  20. package/coverage/lcov.info +277 -205
  21. package/dist/index.js +136 -242
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.mjs +136 -242
  24. package/dist/index.mjs.map +1 -1
  25. package/package.json +1 -1
  26. package/src/api/certs.js +25 -10
  27. package/src/api/signatures.js +106 -97
  28. package/src/api/users.js +16 -29
  29. package/src/utils/helpers.js +17 -0
  30. package/tests/api/certs.test.js +58 -74
  31. package/tests/api/signatures.test.js +18 -73
  32. package/tests/api/users.test.js +10 -10
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">82.5% </span>
26
+ <span class="strong">56.75% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>33/40</span>
28
+ <span class='fraction'>42/74</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">73.68% </span>
33
+ <span class="strong">42.85% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>14/19</span>
35
+ <span class='fraction'>15/35</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">50% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>6/6</span>
42
+ <span class='fraction'>6/12</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">82.5% </span>
47
+ <span class="strong">56.75% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>33/40</span>
49
+ <span class='fraction'>42/74</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 high'></div>
64
+ <div class='status-line medium'></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>
@@ -295,61 +295,32 @@
295
295
  <a name='L230'></a><a href='#L230'>230</a>
296
296
  <a name='L231'></a><a href='#L231'>231</a>
297
297
  <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
299
- <span class="cline-any cline-neutral">&nbsp;</span>
300
- <span class="cline-any cline-neutral">&nbsp;</span>
301
- <span class="cline-any cline-neutral">&nbsp;</span>
302
- <span class="cline-any cline-neutral">&nbsp;</span>
303
- <span class="cline-any cline-neutral">&nbsp;</span>
304
- <span class="cline-any cline-neutral">&nbsp;</span>
305
- <span class="cline-any cline-neutral">&nbsp;</span>
306
- <span class="cline-any cline-neutral">&nbsp;</span>
307
- <span class="cline-any cline-neutral">&nbsp;</span>
308
- <span class="cline-any cline-neutral">&nbsp;</span>
309
- <span class="cline-any cline-neutral">&nbsp;</span>
310
- <span class="cline-any cline-neutral">&nbsp;</span>
311
- <span class="cline-any cline-neutral">&nbsp;</span>
312
- <span class="cline-any cline-neutral">&nbsp;</span>
313
- <span class="cline-any cline-neutral">&nbsp;</span>
314
- <span class="cline-any cline-neutral">&nbsp;</span>
315
- <span class="cline-any cline-neutral">&nbsp;</span>
316
- <span class="cline-any cline-neutral">&nbsp;</span>
317
- <span class="cline-any cline-neutral">&nbsp;</span>
318
- <span class="cline-any cline-neutral">&nbsp;</span>
319
- <span class="cline-any cline-neutral">&nbsp;</span>
320
- <span class="cline-any cline-neutral">&nbsp;</span>
321
- <span class="cline-any cline-neutral">&nbsp;</span>
322
- <span class="cline-any cline-neutral">&nbsp;</span>
323
- <span class="cline-any cline-neutral">&nbsp;</span>
324
- <span class="cline-any cline-neutral">&nbsp;</span>
325
- <span class="cline-any cline-neutral">&nbsp;</span>
326
- <span class="cline-any cline-neutral">&nbsp;</span>
327
- <span class="cline-any cline-neutral">&nbsp;</span>
328
- <span class="cline-any cline-neutral">&nbsp;</span>
329
- <span class="cline-any cline-neutral">&nbsp;</span>
330
- <span class="cline-any cline-neutral">&nbsp;</span>
331
- <span class="cline-any cline-neutral">&nbsp;</span>
332
- <span class="cline-any cline-neutral">&nbsp;</span>
333
- <span class="cline-any cline-neutral">&nbsp;</span>
334
- <span class="cline-any cline-neutral">&nbsp;</span>
335
- <span class="cline-any cline-neutral">&nbsp;</span>
336
- <span class="cline-any cline-neutral">&nbsp;</span>
337
- <span class="cline-any cline-neutral">&nbsp;</span>
338
- <span class="cline-any cline-neutral">&nbsp;</span>
339
- <span class="cline-any cline-neutral">&nbsp;</span>
340
- <span class="cline-any cline-neutral">&nbsp;</span>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
341
308
  <span class="cline-any cline-neutral">&nbsp;</span>
342
309
  <span class="cline-any cline-neutral">&nbsp;</span>
343
310
  <span class="cline-any cline-neutral">&nbsp;</span>
344
311
  <span class="cline-any cline-neutral">&nbsp;</span>
345
312
  <span class="cline-any cline-neutral">&nbsp;</span>
346
313
  <span class="cline-any cline-neutral">&nbsp;</span>
314
+ <span class="cline-any cline-yes">2x</span>
315
+ <span class="cline-any cline-no">&nbsp;</span>
347
316
  <span class="cline-any cline-neutral">&nbsp;</span>
348
317
  <span class="cline-any cline-neutral">&nbsp;</span>
349
318
  <span class="cline-any cline-neutral">&nbsp;</span>
350
319
  <span class="cline-any cline-neutral">&nbsp;</span>
351
320
  <span class="cline-any cline-neutral">&nbsp;</span>
352
321
  <span class="cline-any cline-neutral">&nbsp;</span>
322
+ <span class="cline-any cline-yes">2x</span>
323
+ <span class="cline-any cline-no">&nbsp;</span>
353
324
  <span class="cline-any cline-neutral">&nbsp;</span>
354
325
  <span class="cline-any cline-neutral">&nbsp;</span>
355
326
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -362,36 +333,55 @@
362
333
  <span class="cline-any cline-neutral">&nbsp;</span>
363
334
  <span class="cline-any cline-neutral">&nbsp;</span>
364
335
  <span class="cline-any cline-neutral">&nbsp;</span>
336
+ <span class="cline-any cline-yes">2x</span>
337
+ <span class="cline-any cline-no">&nbsp;</span>
365
338
  <span class="cline-any cline-neutral">&nbsp;</span>
339
+ <span class="cline-any cline-no">&nbsp;</span>
340
+ <span class="cline-any cline-no">&nbsp;</span>
366
341
  <span class="cline-any cline-neutral">&nbsp;</span>
367
342
  <span class="cline-any cline-neutral">&nbsp;</span>
343
+ <span class="cline-any cline-no">&nbsp;</span>
344
+ <span class="cline-any cline-no">&nbsp;</span>
368
345
  <span class="cline-any cline-neutral">&nbsp;</span>
369
346
  <span class="cline-any cline-neutral">&nbsp;</span>
347
+ <span class="cline-any cline-no">&nbsp;</span>
370
348
  <span class="cline-any cline-neutral">&nbsp;</span>
371
349
  <span class="cline-any cline-neutral">&nbsp;</span>
372
350
  <span class="cline-any cline-neutral">&nbsp;</span>
373
351
  <span class="cline-any cline-neutral">&nbsp;</span>
374
352
  <span class="cline-any cline-neutral">&nbsp;</span>
375
353
  <span class="cline-any cline-neutral">&nbsp;</span>
354
+ <span class="cline-any cline-yes">2x</span>
355
+ <span class="cline-any cline-no">&nbsp;</span>
356
+ <span class="cline-any cline-no">&nbsp;</span>
376
357
  <span class="cline-any cline-neutral">&nbsp;</span>
377
358
  <span class="cline-any cline-neutral">&nbsp;</span>
378
359
  <span class="cline-any cline-neutral">&nbsp;</span>
379
360
  <span class="cline-any cline-neutral">&nbsp;</span>
380
361
  <span class="cline-any cline-neutral">&nbsp;</span>
381
362
  <span class="cline-any cline-neutral">&nbsp;</span>
363
+ <span class="cline-any cline-no">&nbsp;</span>
364
+ <span class="cline-any cline-no">&nbsp;</span>
365
+ <span class="cline-any cline-no">&nbsp;</span>
382
366
  <span class="cline-any cline-neutral">&nbsp;</span>
383
367
  <span class="cline-any cline-neutral">&nbsp;</span>
384
368
  <span class="cline-any cline-neutral">&nbsp;</span>
385
369
  <span class="cline-any cline-neutral">&nbsp;</span>
386
370
  <span class="cline-any cline-neutral">&nbsp;</span>
387
371
  <span class="cline-any cline-neutral">&nbsp;</span>
372
+ <span class="cline-any cline-no">&nbsp;</span>
388
373
  <span class="cline-any cline-neutral">&nbsp;</span>
374
+ <span class="cline-any cline-no">&nbsp;</span>
375
+ <span class="cline-any cline-no">&nbsp;</span>
389
376
  <span class="cline-any cline-neutral">&nbsp;</span>
377
+ <span class="cline-any cline-no">&nbsp;</span>
390
378
  <span class="cline-any cline-neutral">&nbsp;</span>
391
379
  <span class="cline-any cline-neutral">&nbsp;</span>
392
380
  <span class="cline-any cline-neutral">&nbsp;</span>
393
381
  <span class="cline-any cline-neutral">&nbsp;</span>
394
382
  <span class="cline-any cline-neutral">&nbsp;</span>
383
+ <span class="cline-any cline-yes">2x</span>
384
+ <span class="cline-any cline-no">&nbsp;</span>
395
385
  <span class="cline-any cline-neutral">&nbsp;</span>
396
386
  <span class="cline-any cline-neutral">&nbsp;</span>
397
387
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -404,12 +394,20 @@
404
394
  <span class="cline-any cline-neutral">&nbsp;</span>
405
395
  <span class="cline-any cline-neutral">&nbsp;</span>
406
396
  <span class="cline-any cline-neutral">&nbsp;</span>
397
+ <span class="cline-any cline-yes">2x</span>
398
+ <span class="cline-any cline-no">&nbsp;</span>
407
399
  <span class="cline-any cline-neutral">&nbsp;</span>
400
+ <span class="cline-any cline-no">&nbsp;</span>
408
401
  <span class="cline-any cline-neutral">&nbsp;</span>
402
+ <span class="cline-any cline-no">&nbsp;</span>
403
+ <span class="cline-any cline-no">&nbsp;</span>
409
404
  <span class="cline-any cline-neutral">&nbsp;</span>
410
405
  <span class="cline-any cline-neutral">&nbsp;</span>
406
+ <span class="cline-any cline-no">&nbsp;</span>
407
+ <span class="cline-any cline-no">&nbsp;</span>
411
408
  <span class="cline-any cline-neutral">&nbsp;</span>
412
409
  <span class="cline-any cline-neutral">&nbsp;</span>
410
+ <span class="cline-any cline-no">&nbsp;</span>
413
411
  <span class="cline-any cline-neutral">&nbsp;</span>
414
412
  <span class="cline-any cline-neutral">&nbsp;</span>
415
413
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -440,6 +438,12 @@
440
438
  <span class="cline-any cline-neutral">&nbsp;</span>
441
439
  <span class="cline-any cline-neutral">&nbsp;</span>
442
440
  <span class="cline-any cline-neutral">&nbsp;</span>
441
+ <span class="cline-any cline-neutral">&nbsp;</span>
442
+ <span class="cline-any cline-neutral">&nbsp;</span>
443
+ <span class="cline-any cline-neutral">&nbsp;</span>
444
+ <span class="cline-any cline-neutral">&nbsp;</span>
445
+ <span class="cline-any cline-neutral">&nbsp;</span>
446
+ <span class="cline-any cline-neutral">&nbsp;</span>
443
447
  <span class="cline-any cline-yes">2x</span>
444
448
  <span class="cline-any cline-yes">4x</span>
445
449
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -491,9 +495,22 @@
491
495
  <span class="cline-any cline-yes">1x</span>
492
496
  <span class="cline-any cline-yes">1x</span>
493
497
  <span class="cline-any cline-neutral">&nbsp;</span>
498
+ <span class="cline-any cline-neutral">&nbsp;</span>
499
+ <span class="cline-any cline-neutral">&nbsp;</span>
500
+ <span class="cline-any cline-neutral">&nbsp;</span>
501
+ <span class="cline-any cline-neutral">&nbsp;</span>
494
502
  <span class="cline-any cline-yes">1x</span>
495
503
  <span class="cline-any cline-yes">1x</span>
496
504
  <span class="cline-any cline-neutral">&nbsp;</span>
505
+ <span class="cline-any cline-neutral">&nbsp;</span>
506
+ <span class="cline-any cline-yes">1x</span>
507
+ <span class="cline-any cline-yes">1x</span>
508
+ <span class="cline-any cline-yes">1x</span>
509
+ <span class="cline-any cline-neutral">&nbsp;</span>
510
+ <span class="cline-any cline-neutral">&nbsp;</span>
511
+ <span class="cline-any cline-neutral">&nbsp;</span>
512
+ <span class="cline-any cline-neutral">&nbsp;</span>
513
+ <span class="cline-any cline-neutral">&nbsp;</span>
497
514
  <span class="cline-any cline-no">&nbsp;</span>
498
515
  <span class="cline-any cline-no">&nbsp;</span>
499
516
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -508,6 +525,7 @@
508
525
  <span class="cline-any cline-neutral">&nbsp;</span>
509
526
  <span class="cline-any cline-neutral">&nbsp;</span>
510
527
  <span class="cline-any cline-neutral">&nbsp;</span>
528
+ <span class="cline-any cline-neutral">&nbsp;</span>
511
529
  <span class="cline-any cline-yes">2x</span>
512
530
  <span class="cline-any cline-yes">5x</span>
513
531
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -534,124 +552,113 @@ import { ApacuanaAPIError } from "../errors";
534
552
  import helpers from "../utils/helpers";
535
553
  import { INTEGRATION_TYPE } from "../utils/constant";
536
554
  &nbsp;
537
- /*
538
- const signDocumentOnBoarding = async (documentData, signatureData) =&gt; {
539
- try {
540
- const response = await httpRequest(
541
- "/docs/sign",
542
- { documentData, signatureData },
543
- "POST"
544
- );
545
- if (!response.success) {
546
- throw new ApacuanaAPIError(
547
- response.message || "Error desconocido al firmar documento."
548
- );
549
- }
550
- return { signedDocId: response.id, status: response.message };
551
- } catch (error) {
552
- if (error.name === "ApacuanaAPIError") {
553
- throw error;
554
- }
555
- throw new ApacuanaAPIError(
556
- `Fallo en la firma del documento (on-boarding): ${error.message}`
557
- );
558
- }
555
+ const signDocumentOnBoarding = <span class="fstat-no" title="function not covered" >as</span>ync () =&gt; {
556
+ <span class="cstat-no" title="statement not covered" > throw new ApacuanaAPIError(</span>
557
+ "Document signing is not supported for integration type: ONBOARDING",
558
+ 501,
559
+ "NOT_IMPLEMENTED"
560
+ );
559
561
  };
560
562
  &nbsp;
561
- const signDocumentOnPremise = async (signature, cert, privateKey) =&gt; {
562
- helpers.validateSignOnPremiseData({ signature, cert, privateKey });
563
- try {
564
- const digestBody = {
565
- publickey: cert,
566
- };
563
+ const signDocumentOnPremise = <span class="fstat-no" title="function not covered" >as</span>ync () =&gt; {
564
+ <span class="cstat-no" title="statement not covered" > throw new ApacuanaAPIError(</span>
565
+ "Document signing is not supported for integration type: ONPREMISE",
566
+ 501,
567
+ "NOT_IMPLEMENTED"
568
+ );
569
+ };
567
570
  &nbsp;
568
- const digestResponse = await httpRequest(
569
- `services/api/documents/getdigest/${signature.id}`,
570
- digestBody,
571
- "POST"
572
- );
571
+ /**
572
+ * Signs a PDF document with a digital certificate.
573
+ * @param {object} data - Data for the signature. For 'on-boarding', it must contain {documentData, signatureData}. For 'on-premise', it must contain {signature, cert, privateKey}.
574
+ * @returns {Promise&lt;{digest: string}&gt;} Object with the document's digest.
575
+ * @throws {ApacuanaAPIError} If the integration type is not supported or the function is not implemented for the integration type.
576
+ */
577
+ export const signDocument = <span class="fstat-no" title="function not covered" >as</span>ync () =&gt; {
578
+ const { integrationType } = <span class="cstat-no" title="statement not covered" >getConfig();</span>
573
579
  &nbsp;
574
- const digest = digestResponse.data?.digest || digestResponse.digest;
575
- if (!digest) {
576
- throw new ApacuanaAPIError(
577
- "La generación de firma ha fallado: no se pudo obtener el digest del documento."
578
- );
579
- }
580
+ <span class="cstat-no" title="statement not covered" > if (integrationType === INTEGRATION_TYPE.ONBOARDING) {</span>
581
+ <span class="cstat-no" title="statement not covered" > return signDocumentOnBoarding();</span>
582
+ }
580
583
  &nbsp;
581
- const signedDigest = await helpers.signDigest(digest, privateKey);
584
+ <span class="cstat-no" title="statement not covered" > if (integrationType === INTEGRATION_TYPE.ONPREMISE) {</span>
585
+ <span class="cstat-no" title="statement not covered" > return signDocumentOnPremise();</span>
586
+ }
582
587
  &nbsp;
583
- const signBody = {
584
- positions: JSON.stringify(
585
- signature.positions.map((p) =&gt; ({
586
- x: p.x,
587
- y: p.y,
588
- page: p.page,
589
- status: 1,
590
- }))
591
- ),
592
- publickey: cert,
593
- signeddigest: signedDigest,
594
- };
588
+ <span class="cstat-no" title="statement not covered" > throw new ApacuanaAPIError(</span>
589
+ `Unsupported integration type: ${integrationType}`,
590
+ 400,
591
+ "UNSUPPORTED_INTEGRATION_TYPE"
592
+ );
593
+ };
595
594
  &nbsp;
596
- const signResponse = await httpRequest(
597
- `services/api/documents/sign/${signature.id}`,
598
- signBody,
599
- "PUT"
595
+ const getDigestToSignOnBoarding = <span class="fstat-no" title="function not covered" >as</span>ync (signData) =&gt; {
596
+ <span class="cstat-no" title="statement not covered" > try {</span>
597
+ const response = <span class="cstat-no" title="statement not covered" >await httpRequest(</span>
598
+ `services/api/documents/getdigest/${signData.signatureId}`,
599
+ {
600
+ publickey: signData.cert,
601
+ },
602
+ "POST"
600
603
  );
604
+ const digest = <span class="cstat-no" title="statement not covered" >response.data?.digest || response.digest;</span>
605
+ <span class="cstat-no" title="statement not covered" > if (!digest) {</span>
606
+ <span class="cstat-no" title="statement not covered" > throw new ApacuanaAPIError(</span>
607
+ "Signature generation failed: digest not found in the response.",
608
+ 500,
609
+ "API_RESPONSE_ERROR"
610
+ );
611
+ }
601
612
  &nbsp;
602
- return signResponse;
613
+ <span class="cstat-no" title="statement not covered" > return { digest, success: true };</span>
603
614
  } catch (error) {
604
- if (error.name === "ApacuanaAPIError") {
605
- throw error;
615
+ <span class="cstat-no" title="statement not covered" > if (error.name === "ApacuanaAPIError") {</span>
616
+ <span class="cstat-no" title="statement not covered" > throw error;</span>
606
617
  }
607
- throw new ApacuanaAPIError(
608
- `Fallo en la firma del documento (on-premise): ${error.message}`
618
+ <span class="cstat-no" title="statement not covered" > throw new ApacuanaAPIError(</span>
619
+ `Failed to sign document (on-boarding): ${error.message}`
609
620
  );
610
621
  }
611
622
  };
612
- */
623
+ &nbsp;
624
+ const getDigestToSignOnPremise = <span class="fstat-no" title="function not covered" >as</span>ync () =&gt; {
625
+ <span class="cstat-no" title="statement not covered" > throw new ApacuanaAPIError(</span>
626
+ "Digest retrieval is not supported for integration type: ONPREMISE",
627
+ 501,
628
+ "NOT_IMPLEMENTED"
629
+ );
630
+ };
613
631
  &nbsp;
614
632
  /**
615
- * Firma un documento PDF con un certificado digital.
616
- * @param {object} data - Datos para la firma. Para 'on-boarding', debe contener {documentData, signatureData}. Para 'on-premise', debe contener {signature, cert, privateKey}.
617
- * @returns {Promise&lt;object&gt;} Objeto con el resultado de la firma.
633
+ * Gets the digest of a document to be signed.
634
+ * @param {object} signData - Data for the signature. Must contain { cert, signatureId }.
635
+ * @returns {Promise&lt;{digest: string, success: boolean}&gt;} Object with the document's digest.
636
+ * @throws {ApacuanaAPIError} If the input data is invalid, if the API call fails, or if the integration type is not supported.
618
637
  */
619
- /*
620
- export const signDocument = async (signData) =&gt; {
621
- if (
622
- !signData ||
623
- typeof signData !== "object" ||
624
- Object.keys(signData).length === 0
625
- ) {
626
- throw new ApacuanaAPIError(
627
- "El parámetro 'data' es requerido y debe ser un objeto no vacío.",
628
- 400,
629
- "INVALID_PARAMETER"
630
- );
631
- }
638
+ export const getDigest = <span class="fstat-no" title="function not covered" >as</span>ync (signData) =&gt; {
639
+ <span class="cstat-no" title="statement not covered" > helpers.validateGetDigestData(signData);</span>
632
640
  &nbsp;
633
- const { integrationType } = getConfig();
641
+ const { integrationType } = <span class="cstat-no" title="statement not covered" >getConfig();</span>
634
642
  &nbsp;
635
- if (integrationType === INTEGRATION_TYPE.ONBOARDING) {
636
- return signDocumentOnBoarding(signData);
643
+ <span class="cstat-no" title="statement not covered" > if (integrationType === INTEGRATION_TYPE.ONBOARDING) {</span>
644
+ <span class="cstat-no" title="statement not covered" > return getDigestToSignOnBoarding(signData);</span>
637
645
  }
638
646
  &nbsp;
639
- if (integrationType === INTEGRATION_TYPE.ONPREMISE) {
640
- return signDocumentOnPremise(signData);
647
+ <span class="cstat-no" title="statement not covered" > if (integrationType === INTEGRATION_TYPE.ONPREMISE) {</span>
648
+ <span class="cstat-no" title="statement not covered" > return getDigestToSignOnPremise();</span>
641
649
  }
642
650
  &nbsp;
643
- throw new ApacuanaAPIError(
644
- `Tipo de integración no soportado: ${integrationType}`,
645
- 400,
646
- "UNSUPPORTED_INTEGRATION_TYPE"
651
+ <span class="cstat-no" title="statement not covered" > throw new ApacuanaAPIError(</span>
652
+ `Document retrieval is not supported for an unknown integration type: ${integrationType}`,
653
+ 501,
654
+ "NOT_IMPLEMENTED"
647
655
  );
648
656
  };
649
- */
650
657
  &nbsp;
651
658
  const addSignerOnBoarding = async (signerData) =&gt; {
652
659
  helpers.validateOnBoardingSignerData(signerData);
653
660
  try {
654
- // La lógica actual de httpRequest se mueve aquí
661
+ // Current httpRequest logic is moved here
655
662
  await httpRequest("services/api/documents/signing", signerData, "POST");
656
663
  return { signer: signerData.typedoc + signerData.doc, success: true };
657
664
  } catch (error) {
@@ -659,18 +666,24 @@ const addSignerOnBoarding = async (signerData) =&gt; {
659
666
  <span class="cstat-no" title="statement not covered" > throw error;</span>
660
667
  }
661
668
  <span class="cstat-no" title="statement not covered" > throw new Error(</span>
662
- `Fallo al agregar firmante en On-Boarding: ${error.message}`
669
+ `Failed to add signer in On-Boarding: ${error.message}`
663
670
  );
664
671
  }
665
672
  };
666
673
  &nbsp;
667
- const addSignerOnPremise = async () =&gt;
668
- Promise.resolve({ signerId: "on-premise-signer-id", status: "added" });
674
+ const addSignerOnPremise = async () =&gt; {
675
+ throw new ApacuanaAPIError(
676
+ "Adding signers is not supported for integration type: ONPREMISE",
677
+ 501,
678
+ "NOT_IMPLEMENTED"
679
+ );
680
+ };
669
681
  &nbsp;
670
682
  /**
671
- * Agrega un firmante a un documento, manejando diferentes tipos de integración.
672
- * @param {object} signerData - Datos del firmante a agregar.
673
- * @returns {Promise&lt;object&gt;} Objeto con el resultado de agregar el firmante.
683
+ * Adds a signer to a document, handling different integration types.
684
+ * @param {object} signerData - Data of the signer to be added.
685
+ * @returns {Promise&lt;{signer: string, success: boolean}&gt;} Object with the result of adding the signer.
686
+ * @throws {ApacuanaAPIError} If the signer data is invalid, if the API call fails, or if the integration type is not supported.
674
687
  */
675
688
  export const addSigner = async (signerData) =&gt; {
676
689
  if (
@@ -679,7 +692,7 @@ export const addSigner = async (signerData) =&gt; {
679
692
  Object.keys(signerData).length === 0
680
693
  ) {
681
694
  throw new ApacuanaAPIError(
682
- "Los datos del firmante (signerData) son requeridos y deben ser un objeto no vacío.",
695
+ "Signer data (signerData) is required and must be a non-empty object.",
683
696
  400,
684
697
  "INVALID_PARAMETER"
685
698
  );
@@ -696,7 +709,7 @@ export const addSigner = async (signerData) =&gt; {
696
709
  }
697
710
  &nbsp;
698
711
  throw new ApacuanaAPIError(
699
- `Tipo de integración no soportado: ${integrationType}`,
712
+ `Unsupported integration type: ${integrationType}`,
700
713
  400,
701
714
  "UNSUPPORTED_INTEGRATION_TYPE"
702
715
  );
@@ -704,7 +717,7 @@ export const addSigner = async (signerData) =&gt; {
704
717
  &nbsp;
705
718
  const getDocsOnPremise = async () =&gt; {
706
719
  throw new ApacuanaAPIError(
707
- "La obtención de documentos no está soportada para el tipo de integración: ONBOARDING",
720
+ "Document retrieval is not supported for integration type: ONBOARDING",
708
721
  501,
709
722
  "NOT_IMPLEMENTED"
710
723
  );
@@ -714,31 +727,45 @@ const getDocsOnBoarding = async (data) =&gt; {
714
727
  const { customerId } = getConfig();
715
728
  if (!customerId) {
716
729
  throw new ApacuanaAPIError(
717
- "El 'customerId' no está configurado. Por favor, configure el SDK.",
730
+ "'customerId' is not configured. Please configure the SDK.",
718
731
  400,
719
732
  "CONFIGURATION_ERROR"
720
733
  );
721
734
  }
722
735
  &nbsp;
723
736
  try {
724
- const apiUrl = `services/api/documents/listcustomer?page=${data.page}&amp;customerid=${customerId}&amp;size=${data.size}&amp;status=${data.status}`;
737
+ const params = new URLSearchParams({
738
+ page: data.page,
739
+ customerid: customerId,
740
+ size: data.size,
741
+ });
725
742
  &nbsp;
743
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (typeof data.status !== "undefined") {
744
+ params.append("status", data.status);
745
+ }
746
+ &nbsp;
747
+ const apiUrl = `services/api/documents/listcustomer?${params.toString()}`;
726
748
  const response = await httpRequest(apiUrl, {}, "GET");
727
- return response;
749
+ return {
750
+ totalRecords: response.numofrecords,
751
+ records: response.records,
752
+ success: true,
753
+ };
728
754
  } catch (error) {
729
755
  <span class="cstat-no" title="statement not covered" > if (error.name === "ApacuanaAPIError") {</span>
730
756
  <span class="cstat-no" title="statement not covered" > throw error;</span>
731
757
  }
732
758
  <span class="cstat-no" title="statement not covered" > throw new ApacuanaAPIError(</span>
733
- `Fallo al obtener la lista de documentos (on-premise): ${error.message}`
759
+ `Failed to get document list (on-premise): ${error.message}`
734
760
  );
735
761
  }
736
762
  };
737
763
  &nbsp;
738
764
  /**
739
- * Obtiene una lista de documentos.
740
- * @param {object} data - Objeto con los parámetros de paginación. Debe contener {page, size}.
741
- * @returns {Promise&lt;object&gt;} Objeto con la lista de documentos.
765
+ * Gets a list of documents.
766
+ * @param {object} data - Object with pagination parameters. Must contain {page, size}.
767
+ * @returns {Promise&lt;{totalRecords: number, records:any[], success: boolean}&gt;} Object with the list of documents.
768
+ * @throws {ApacuanaAPIError} If pagination parameters are invalid, if 'customerId' is not configured, if the API call fails, or if the integration type is not supported.
742
769
  */
743
770
  export const getDocs = async (data) =&gt; {
744
771
  helpers.validateGetDocsData(data);
@@ -754,7 +781,7 @@ export const getDocs = async (data) =&gt; {
754
781
  }
755
782
  &nbsp;
756
783
  <span class="cstat-no" title="statement not covered" > throw new ApacuanaAPIError(</span>
757
- `La obtención de documentos no está soportada para un tipo de integración desconocido: ${integrationType}`,
784
+ `Document retrieval is not supported for an unknown integration type: ${integrationType}`,
758
785
  501,
759
786
  "NOT_IMPLEMENTED"
760
787
  );
@@ -766,7 +793,7 @@ export const getDocs = async (data) =&gt; {
766
793
  <div class='footer quiet pad2 space-top1 center small'>
767
794
  Code coverage generated by
768
795
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
769
- at 2025-08-22T15:34:11.195Z
796
+ at 2025-08-22T21:07:16.060Z
770
797
  </div>
771
798
  <script src="../../prettify.js"></script>
772
799
  <script>