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,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">95.83% </span>
26
+ <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>23/24</span>
28
+ <span class='fraction'>25/25</span>
29
29
  </div>
30
30
 
31
31
 
@@ -39,14 +39,14 @@
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>3/3</span>
42
+ <span class='fraction'>4/4</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">95.83% </span>
47
+ <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>23/24</span>
49
+ <span class='fraction'>25/25</span>
50
50
  </div>
51
51
 
52
52
 
@@ -130,17 +130,32 @@
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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
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>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
134
149
  <span class="cline-any cline-neutral">&nbsp;</span>
135
150
  <span class="cline-any cline-neutral">&nbsp;</span>
136
151
  <span class="cline-any cline-neutral">&nbsp;</span>
137
152
  <span class="cline-any cline-neutral">&nbsp;</span>
138
153
  <span class="cline-any cline-neutral">&nbsp;</span>
139
154
  <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>
155
+ <span class="cline-any cline-yes">4x</span>
156
+ <span class="cline-any cline-yes">4x</span>
142
157
  <span class="cline-any cline-neutral">&nbsp;</span>
143
- <span class="cline-any cline-yes">2x</span>
158
+ <span class="cline-any cline-yes">4x</span>
144
159
  <span class="cline-any cline-neutral">&nbsp;</span>
145
160
  <span class="cline-any cline-neutral">&nbsp;</span>
146
161
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -157,21 +172,35 @@
157
172
  <span class="cline-any cline-yes">1x</span>
158
173
  <span class="cline-any cline-neutral">&nbsp;</span>
159
174
  <span class="cline-any cline-neutral">&nbsp;</span>
175
+ <span class="cline-any cline-yes">3x</span>
176
+ <span class="cline-any cline-yes">2x</span>
177
+ <span class="cline-any cline-neutral">&nbsp;</span>
160
178
  <span class="cline-any cline-yes">1x</span>
179
+ <span class="cline-any cline-neutral">&nbsp;</span>
180
+ <span class="cline-any cline-neutral">&nbsp;</span>
181
+ <span class="cline-any cline-neutral">&nbsp;</span>
182
+ <span class="cline-any cline-yes">2x</span>
161
183
  <span class="cline-any cline-yes">1x</span>
162
184
  <span class="cline-any cline-neutral">&nbsp;</span>
163
- <span class="cline-any cline-no">&nbsp;</span>
185
+ <span class="cline-any cline-neutral">&nbsp;</span>
186
+ <span class="cline-any cline-neutral">&nbsp;</span>
187
+ <span class="cline-any cline-neutral">&nbsp;</span>
188
+ <span class="cline-any cline-neutral">&nbsp;</span>
189
+ <span class="cline-any cline-neutral">&nbsp;</span>
190
+ <span class="cline-any cline-neutral">&nbsp;</span>
191
+ <span class="cline-any cline-neutral">&nbsp;</span>
192
+ <span class="cline-any cline-neutral">&nbsp;</span>
193
+ <span class="cline-any cline-neutral">&nbsp;</span>
164
194
  <span class="cline-any cline-neutral">&nbsp;</span>
165
195
  <span class="cline-any cline-neutral">&nbsp;</span>
166
196
  <span class="cline-any cline-neutral">&nbsp;</span>
167
197
  <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>
198
+ <span class="cline-any cline-yes">6x</span>
199
+ <span class="cline-any cline-yes">6x</span>
200
+ <span class="cline-any cline-yes">6x</span>
170
201
  <span class="cline-any cline-yes">4x</span>
171
- <span class="cline-any cline-yes">2x</span>
172
202
  <span class="cline-any cline-neutral">&nbsp;</span>
173
203
  <span class="cline-any cline-yes">2x</span>
174
- <span class="cline-any cline-neutral">&nbsp;</span>
175
204
  <span class="cline-any cline-yes">1x</span>
176
205
  <span class="cline-any cline-neutral">&nbsp;</span>
177
206
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -179,7 +208,8 @@
179
208
  <span class="cline-any cline-neutral">&nbsp;</span>
180
209
  <span class="cline-any cline-neutral">&nbsp;</span>
181
210
  <span class="cline-any cline-neutral">&nbsp;</span>
182
- <span class="cline-any cline-yes">1x</span>
211
+ <span class="cline-any cline-neutral">&nbsp;</span>
212
+ <span class="cline-any cline-neutral">&nbsp;</span>
183
213
  <span class="cline-any cline-neutral">&nbsp;</span>
184
214
  <span class="cline-any cline-neutral">&nbsp;</span>
185
215
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -215,7 +245,7 @@ const generateCertOnBoarding = async (csr = <span class="branch-0 cbranch-no" ti
215
245
  const { cert } = response;
216
246
  if (!cert) {
217
247
  throw new ApacuanaAPIError(
218
- "La respuesta de la API no contiene el certificado.",
248
+ "The API response does not contain the certificate.",
219
249
  response.status,
220
250
  "INVALID_API_RESPONSE"
221
251
  );
@@ -223,36 +253,51 @@ const generateCertOnBoarding = async (csr = <span class="branch-0 cbranch-no" ti
223
253
  &nbsp;
224
254
  return { cert, success: true };
225
255
  } catch (error) {
226
- // Se lanza el error capturado, que ya será de tipo ApacuanaAPIError o un Error nativo.
227
- <span class="missing-if-branch" title="else path not taken" >E</span>if (error instanceof ApacuanaAPIError) {
256
+ // The captured error is re-thrown, which will already be of type ApacuanaAPIError or a native Error.
257
+ if (error instanceof ApacuanaAPIError) {
228
258
  throw error;
229
259
  }
230
- <span class="cstat-no" title="statement not covered" > throw new Error(`Fallo en la generación del certificado: ${error.message}`);</span>
260
+ throw new Error(`Certificate generation failed: ${error.message}`);
231
261
  }
232
262
  };
233
263
  &nbsp;
234
- export const generateCert = async (csr = undefined) =&gt; {
264
+ const generateCertOnPremise = async () =&gt; {
265
+ throw new ApacuanaAPIError(
266
+ "Certificate generation is not supported for integration type: ONPREMISE",
267
+ 501,
268
+ "NOT_IMPLEMENTED"
269
+ );
270
+ };
271
+ &nbsp;
272
+ /**
273
+ * Generates a digital certificate.
274
+ * @param {string} [csr] - Optional Certificate Signing Request (CSR).
275
+ * @returns {Promise&lt;{cert: string, success: boolean}&gt;} Object with the generated certificate and a success indicator.
276
+ * @throws {ApacuanaAPIError} If the CSR is invalid, if the API response does not contain the certificate, or if the integration type is not supported.
277
+ * @throws {Error} If certificate generation fails for another reason.
278
+ */
279
+ export const generateCert = async (csr = <span class="branch-0 cbranch-no" title="branch not covered" >undefined)</span> =&gt; {
235
280
  const { integrationType } = getConfig();
236
281
  helpers.validateCsr(csr);
237
282
  if (integrationType === INTEGRATION_TYPE.ONBOARDING) {
238
283
  return generateCertOnBoarding(csr);
239
284
  }
240
285
  if (integrationType === INTEGRATION_TYPE.ONPREMISE) {
241
- // eslint-disable-next-line no-console
242
- console.log("-&gt; Lógica para On-premise");
243
- // Aquí iría la llamada a httpRequest para el endpoint de on-premise
244
- // return httpRequest('/certs/generate-onpremise', data);
245
- return Promise.resolve(); // Retornar una promesa resuelta para consistencia
286
+ return generateCertOnPremise();
246
287
  }
247
288
  &nbsp;
248
- // Lanzar un error si el tipo de integración no es soportado
249
289
  throw new ApacuanaAPIError(
250
- `Tipo de integración no soportado: ${integrationType}`,
290
+ `Unsupported integration type: ${integrationType}`,
251
291
  400,
252
292
  "UNSUPPORTED_INTEGRATION_TYPE"
253
293
  );
254
294
  };
255
295
  &nbsp;
296
+ /**
297
+ * Gets the user's certificate status.
298
+ * @param {boolean} [isCertificateInDevice=false] - Indicates if the certificate is already on the device.
299
+ * @returns {{status: string, success: boolean}} Object with the certificate status and a success indicator.
300
+ */
256
301
  export const getCertStatus = (isCertificateInDevice = <span class="branch-0 cbranch-no" title="branch not covered" >false)</span> =&gt; {
257
302
  const config = getConfig();
258
303
  const status = helpers.getCertificateStatus(
@@ -271,7 +316,7 @@ export const getCertStatus = (isCertificateInDevice = <span class="branch-0 cbra
271
316
  <div class='footer quiet pad2 space-top1 center small'>
272
317
  Code coverage generated by
273
318
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
274
- at 2025-08-22T15:34:11.195Z
319
+ at 2025-08-22T21:07:16.060Z
275
320
  </div>
276
321
  <script src="../../prettify.js"></script>
277
322
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">79.56% </span>
26
+ <span class="strong">65.32% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>74/93</span>
28
+ <span class='fraction'>81/124</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">66.66% </span>
33
+ <span class="strong">51.51% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>34/51</span>
35
+ <span class='fraction'>34/66</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">90.9% </span>
40
+ <span class="strong">61.11% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>10/11</span>
42
+ <span class='fraction'>11/18</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">79.56% </span>
47
+ <span class="strong">65.32% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>74/93</span>
49
+ <span class='fraction'>81/124</span>
50
50
  </div>
51
51
 
52
52
 
@@ -80,17 +80,17 @@
80
80
  </thead>
81
81
  <tbody><tr>
82
82
  <td class="file high" data-value="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>
83
+ <td data-value="100" class="pic high">
84
+ <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
85
85
  </td>
86
- <td data-value="95.83" class="pct high">95.83%</td>
87
- <td data-value="24" class="abs high">23/24</td>
86
+ <td data-value="100" class="pct high">100%</td>
87
+ <td data-value="25" class="abs high">25/25</td>
88
88
  <td data-value="72.72" class="pct medium">72.72%</td>
89
89
  <td data-value="11" class="abs medium">8/11</td>
90
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>
91
+ <td data-value="4" class="abs high">4/4</td>
92
+ <td data-value="100" class="pct high">100%</td>
93
+ <td data-value="25" class="abs high">25/25</td>
94
94
  </tr>
95
95
 
96
96
  <tr>
@@ -109,18 +109,18 @@
109
109
  </tr>
110
110
 
111
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>
112
+ <td class="file medium" data-value="signatures.js"><a href="signatures.js.html">signatures.js</a></td>
113
+ <td data-value="56.75" class="pic medium">
114
+ <div class="chart"><div class="cover-fill" style="width: 56%"></div><div class="cover-empty" style="width: 44%"></div></div>
115
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>
116
+ <td data-value="56.75" class="pct medium">56.75%</td>
117
+ <td data-value="74" class="abs medium">42/74</td>
118
+ <td data-value="42.85" class="pct low">42.85%</td>
119
+ <td data-value="35" class="abs low">15/35</td>
120
+ <td data-value="50" class="pct medium">50%</td>
121
+ <td data-value="12" class="abs medium">6/12</td>
122
+ <td data-value="56.75" class="pct medium">56.75%</td>
123
+ <td data-value="74" class="abs medium">42/74</td>
124
124
  </tr>
125
125
 
126
126
  <tr>
@@ -129,13 +129,13 @@
129
129
  <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
130
130
  </td>
131
131
  <td data-value="100" class="pct high">100%</td>
132
- <td data-value="17" class="abs high">17/17</td>
133
- <td data-value="92.3" class="pct high">92.3%</td>
134
- <td data-value="13" class="abs high">12/13</td>
132
+ <td data-value="13" class="abs high">13/13</td>
133
+ <td data-value="91.66" class="pct high">91.66%</td>
134
+ <td data-value="12" class="abs high">11/12</td>
135
135
  <td data-value="100" class="pct high">100%</td>
136
136
  <td data-value="1" class="abs high">1/1</td>
137
137
  <td data-value="100" class="pct high">100%</td>
138
- <td data-value="17" class="abs high">17/17</td>
138
+ <td data-value="13" class="abs high">13/13</td>
139
139
  </tr>
140
140
 
141
141
  </tbody>
@@ -146,7 +146,7 @@
146
146
  <div class='footer quiet pad2 space-top1 center small'>
147
147
  Code coverage generated by
148
148
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
149
- at 2025-08-22T15:34:11.195Z
149
+ at 2025-08-22T21:07:16.060Z
150
150
  </div>
151
151
  <script src="../../prettify.js"></script>
152
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-22T15:34:11.195Z
202
+ at 2025-08-22T21:07:16.060Z
203
203
  </div>
204
204
  <script src="../../prettify.js"></script>
205
205
  <script>