apacuana-sdk-core 0.1.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 (35) hide show
  1. package/README.md +175 -55
  2. package/coverage/clover.xml +249 -101
  3. package/coverage/coverage-final.json +9 -6
  4. package/coverage/lcov-report/index.html +45 -30
  5. package/coverage/lcov-report/src/api/certs.js.html +117 -81
  6. package/coverage/lcov-report/src/api/index.html +40 -25
  7. package/coverage/lcov-report/src/api/revocations.js.html +1 -1
  8. package/coverage/lcov-report/src/api/signatures.js.html +546 -72
  9. package/coverage/lcov-report/src/api/users.js.html +25 -61
  10. package/coverage/lcov-report/src/config/index.html +21 -21
  11. package/coverage/lcov-report/src/config/index.js.html +65 -32
  12. package/coverage/lcov-report/src/errors/index.html +5 -5
  13. package/coverage/lcov-report/src/errors/index.js.html +13 -10
  14. package/coverage/lcov-report/src/index.html +1 -1
  15. package/coverage/lcov-report/src/index.js.html +13 -4
  16. package/coverage/lcov-report/src/utils/constant.js.html +4 -4
  17. package/coverage/lcov-report/src/utils/helpers.js.html +290 -116
  18. package/coverage/lcov-report/src/utils/httpClient.js.html +646 -0
  19. package/coverage/lcov-report/src/utils/index.html +30 -15
  20. package/coverage/lcov.info +515 -181
  21. package/dist/index.js +323 -189
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.mjs +323 -189
  24. package/dist/index.mjs.map +1 -1
  25. package/package.json +1 -1
  26. package/src/api/certs.js +49 -37
  27. package/src/api/signatures.js +213 -49
  28. package/src/api/users.js +17 -29
  29. package/src/errors/index.js +1 -0
  30. package/src/index.js +4 -1
  31. package/src/utils/helpers.js +156 -98
  32. package/tests/api/certs.test.js +111 -5
  33. package/tests/api/signatures.test.js +152 -4
  34. package/tests/api/users.test.js +11 -10
  35. package/src/auth/index.js +0 -24
package/README.md CHANGED
@@ -97,43 +97,69 @@ Obtiene la información del cliente utilizando los datos de configuración.
97
97
  **Retorna:**
98
98
 
99
99
  - Promise que se resuelve con un objeto que contiene:
100
- - `token` (String): ID de sesión para autenticación
101
- - `userData` (Object): Datos del usuario
100
+ - `token` (String): ID de sesión para autenticación.
101
+ - `userData` (Object): Datos del usuario.
102
+ - `success` (Boolean): Indicador de éxito de la operación.
102
103
 
103
104
  **Ejemplo:**
104
105
 
105
106
  ```javascript
106
107
  try {
107
- const { token, userData } = await apacuana.getCustomer();
108
- console.log("Token de sesión:", token);
109
- console.log("Datos del usuario:", userData);
108
+ const { token, userData, success } = await apacuana.getCustomer();
109
+ if (success) {
110
+ console.log("Token de sesión:", token);
111
+ console.log("Datos del usuario:", userData);
112
+ }
110
113
  } catch (error) {
111
114
  console.error("Error al obtener información del cliente:", error);
112
115
  }
113
116
  ```
114
117
 
115
- ### generateCert()
118
+ ### generateCert(csr)
116
119
 
117
- Genera un certificado digital basado en el tipo de integración configurado.
120
+ Genera un certificado digital basado en el tipo de integración configurado. Para la integración `ONBOARDING`, esta función valida la Solicitud de Firma de Certificado (CSR) y la envía a la API de Apacuana para su registro.
118
121
 
119
- **Parámetros:** Ninguno (utiliza la configuración previa y datos del usuario)
122
+ **Parámetros:**
123
+
124
+ - `csr` (String): Una cadena de texto en formato Base64 que representa la Solicitud de Firma de Certificado.
125
+
126
+ **Validaciones:**
127
+
128
+ - **csr**:
129
+ - Es un parámetro requerido.
130
+ - Debe ser una cadena de texto (`string`).
131
+ - No puede ser una cadena vacía.
132
+ - Debe estar codificada en formato Base64 válido.
133
+
134
+ Si alguna de estas validaciones falla, la función lanzará una `ApacuanaAPIError` con el código `INVALID_PARAMETER` o `INVALID_PARAMETER_FORMAT`.
120
135
 
121
136
  **Retorna:**
122
137
 
123
- - Promise que se resuelve con la respuesta de la API de generación de certificados
138
+ - `Promise` que se resuelve con un objeto que contiene:
139
+ - `cert` (String): El certificado generado.
140
+ - `success` (Boolean): Indicador de éxito de la operación.
124
141
 
125
142
  **Ejemplo:**
126
143
 
127
144
  ```javascript
145
+ // Asumiendo que 'myBase64Csr' es una variable que contiene tu CSR en formato Base64
146
+ const myBase64Csr = "MIIC...==";
147
+
128
148
  try {
129
- const certificateResponse = await apacuana.generateCert();
130
- console.log("Certificado generado:", certificateResponse);
149
+ const { cert, success } = await apacuana.generateCert(myBase64Csr);
150
+ if (success) {
151
+ console.log("Certificado generado exitosamente:", cert);
152
+ }
131
153
  } catch (error) {
132
- console.error("Error al generar certificado:", error);
154
+ if (error.name === "ApacuanaAPIError") {
155
+ console.error(`Error de API (${error.code}):`, error.message);
156
+ } else {
157
+ console.error("Ocurrió un error inesperado:", error);
158
+ }
133
159
  }
134
160
  ```
135
161
 
136
- ### getCertStatus()
162
+ ### getCertStatus(isCertificateInDevice)
137
163
 
138
164
  Obtiene el estado actual del certificado del usuario.
139
165
 
@@ -141,19 +167,59 @@ Obtiene el estado actual del certificado del usuario.
141
167
 
142
168
  **Retorna:**
143
169
 
144
- - Promise que se resuelve con el estado del certificado (ver sección de Estados de Certificado)
170
+ - Un objeto que contiene:
171
+ - `status` (String): El estado del certificado (ver sección de Estados de Certificado).
172
+ - `success` (Boolean): Indicador de éxito de la operación.
145
173
 
146
174
  **Ejemplo:**
147
175
 
148
176
  ```javascript
149
177
  try {
150
- const status = await apacuana.getCertStatus();
151
- console.log("Estado del certificado:", status);
178
+ const { status, success } = apacuana.getCertStatus(true);
179
+ if (success) {
180
+ console.log("Estado del certificado:", status);
181
+ }
152
182
  } catch (error) {
153
183
  console.error("Error al obtener estado del certificado:", error);
154
184
  }
155
185
  ```
156
186
 
187
+ ### signDocument(signData)
188
+
189
+ Esta función está actualmente deshabilitada y lanzará un error si se invoca.
190
+
191
+ **Parámetros:**
192
+
193
+ - `signData` (Object): Datos para la firma.
194
+
195
+ **Retorna:**
196
+
197
+ - `Promise<void>`
198
+
199
+ **Posibles `ApacuanaAPIError`:**
200
+
201
+ - `NOT_IMPLEMENTED`: La función no está implementada para el tipo de integración.
202
+
203
+ ### getDigest(signData)
204
+
205
+ Obtiene el digest de un documento que se va a firmar.
206
+
207
+ - **Parámetros:**
208
+
209
+ - `signData` (Object): Objeto que contiene los datos para la firma.
210
+ - `cert` (String): Certificado en formato PEM.
211
+ - `signatureId` (String): Identificador único de la firma.
212
+
213
+ - **Retorna:** `Promise<object>` - Un objeto que contiene:
214
+
215
+ - `digest` (String): El digest del documento a firmar.
216
+ - `success` (Boolean): Indicador de éxito de la operación.
217
+
218
+ - **Posibles `ApacuanaAPIError`:**
219
+ - `INVALID_PARAMETER`: Si `cert` o `signatureId` no son válidos.
220
+ - `API_RESPONSE_ERROR`: Si la API no devuelve un digest.
221
+ - `NOT_IMPLEMENTED`: Si se llama con un `integrationType` no soportado.
222
+
157
223
  ### requestRevocation(reasonCode)
158
224
 
159
225
  Solicita la revocación de un certificado.
@@ -177,67 +243,121 @@ try {
177
243
  }
178
244
  ```
179
245
 
180
- ### signDocument(documentData, signatureData)
246
+ #### `getDocs(data)`
247
+
248
+ Obtiene una lista de documentos paginada. El comportamiento de esta función varía según el `integrationType` configurado.
249
+
250
+ - **Parámetros:**
251
+
252
+ - `data` (object): Objeto que contiene los parámetros para la consulta.
253
+ - `page` (number): Número de página para la paginación.
254
+ - `size` (number): Cantidad de resultados por página.
255
+ - `status` (number, opcional): Filtra los documentos por su estado. Los valores permitidos son:
256
+ - `-1`: Rechazado
257
+ - `0`: Pendiente
258
+ - `1`: Firmado
259
+ - `2`: En proceso
260
+
261
+ - **Retorna:** `Promise<object>` - Un objeto que contiene:
262
+
263
+ - `totalRecords` (Number): El número total de documentos que coinciden con la consulta.
264
+ - `records` (Array): Un array de objetos, donde cada objeto es un documento.
265
+ - `success` (Boolean): Indicador de éxito de la operación.
266
+
267
+ - **Comportamiento por `integrationType`:**
268
+
269
+ - **`ONBOARDING`**: Obtiene los documentos asociados al `customerId` configurado.
270
+ - **`ONPREMISE`**: No soportado. Lanza un `ApacuanaAPIError` con el código `NOT_IMPLEMENTED`.
271
+
272
+ - **Ejemplo (`ONBOARDING`):**
273
+
274
+ ```javascript
275
+ try {
276
+ const documents = await apacuana.getDocs({ page: 1, size: 10, status: 1 });
277
+ console.log("Documentos:", documents);
278
+ } catch (error) {
279
+ console.error("Error al obtener documentos:", error.message);
280
+ }
281
+ ```
282
+
283
+ - **Posibles `ApacuanaAPIError`:**
284
+ - `INVALID_PARAMETER`: Si `page`, `size` o `status` no son válidos.
285
+ - `CONFIGURATION_ERROR`: Si el `customerId` no está configurado en la inicialización.
286
+ - `NOT_IMPLEMENTED`: Si se llama con `integrationType` igual a `ONPREMISE`.
287
+
288
+ ### addSigner(signerData)
181
289
 
182
- Firma un documento utilizando el certificado del usuario.
290
+ Agrega un firmante a un documento. El comportamiento de esta función y la estructura del objeto `signerData` varían según el `integrationType` configurado (`ONBOARDING` u `ONPREMISE`).
183
291
 
184
292
  **Parámetros:**
185
293
 
186
- - `documentData` (Object): Datos del documento a firmar
187
- - `signatureData` (Object): Datos de la firma
294
+ - `signerData` (Object): Un objeto que contiene la información del firmante. Su estructura es específica para cada tipo de integración.
188
295
 
189
- **Retorna:**
296
+ ---
190
297
 
191
- - Promise que se resuelve con la respuesta de la API de firma
298
+ #### Flujo de Integración: ONBOARDING
192
299
 
193
- **Ejemplo:**
300
+ Para el tipo de integración `ONBOARDING`, la función espera un objeto `signerData` con la siguiente estructura y realiza validaciones estrictas sobre cada campo.
194
301
 
195
- ```javascript
196
- try {
197
- const documentData = {
198
- id: "doc123",
199
- content: "Base64EncodedContent...",
200
- };
201
-
202
- const signatureData = {
203
- position: { x: 100, y: 200 },
204
- page: 1,
205
- };
206
-
207
- const signResponse = await apacuana.signDocument(documentData, signatureData);
208
- console.log("Documento firmado:", signResponse);
209
- } catch (error) {
210
- console.error("Error al firmar documento:", error);
302
+ **Estructura de `signerData` para ONBOARDING:**
303
+
304
+ ```json
305
+ {
306
+ "name": "Nombre del Documento",
307
+ "reference": "Referencia Externa",
308
+ "typedoc": "V",
309
+ "doc": "26122862",
310
+ "signature": [
311
+ {
312
+ "page": 1,
313
+ "x": 0.5,
314
+ "y": 0.85
315
+ }
316
+ ]
211
317
  }
212
318
  ```
213
319
 
214
- ### addSigner(signerData)
320
+ **Validaciones (ONBOARDING):**
215
321
 
216
- Añade un firmante adicional a un documento.
322
+ - **signerData**: Debe ser un objeto no vacío.
323
+ - **name**: Requerido, `string`.
324
+ - **reference**: Requerido, `string`. (referencia del documento en el gestor documental)
325
+ - **typedoc**: Requerido, debe ser `V`, `P` o `E`.
326
+ - **doc**: Requerido, `string`.
327
+ - **signature**: Requerido, `array` no vacío.
328
+ - Cada objeto en el `array` debe tener:
329
+ - `page`: Requerido, `número` entero positivo.
330
+ - `x`: Requerido, `número` entre 0 y 1.
331
+ - `y`: Requerido, `número` entre 0 y 1.
217
332
 
218
- **Parámetros:**
333
+ Si alguna validación falla, se lanzará una `ApacuanaAPIError` con el código `INVALID_PARAMETER` o `INVALID_PARAMETER_FORMAT`.
219
334
 
220
- - `signerData` (Object): Datos del firmante a añadir
335
+ ---
221
336
 
222
337
  **Retorna:**
223
338
 
224
- - Promise que se resuelve con la respuesta de la API
339
+ - `Promise` que se resuelve con un objeto que contiene el ID del firmante (`signerId`) y el estado (`status`) si la operación es exitosa.
225
340
 
226
- **Ejemplo:**
341
+ **Ejemplo (ONBOARDING):**
227
342
 
228
343
  ```javascript
344
+ const signerInfo = {
345
+ name: "Contrato de Servicios",
346
+ reference: "CS-2024-001",
347
+ typedoc: "V",
348
+ doc: "12345678",
349
+ signature: [{ page: 5, x: 0.25, y: 0.75 }],
350
+ };
351
+
229
352
  try {
230
- const signerData = {
231
- documentId: "doc123",
232
- email: "signer@example.com",
233
- name: "John Doe",
234
- role: "Approver",
235
- };
236
-
237
- const response = await apacuana.addSigner(signerData);
238
- console.log("Firmante añadido:", response);
353
+ const response = await apacuana.addSigner(signerInfo);
354
+ console.log("Firmante agregado exitosamente:", response);
239
355
  } catch (error) {
240
- console.error("Error al añadir firmante:", error);
356
+ if (error.name === "ApacuanaAPIError") {
357
+ console.error(`Error de API (${error.code}):`, error.message);
358
+ } else {
359
+ console.error("Ocurrió un error inesperado:", error);
360
+ }
241
361
  }
242
362
  ```
243
363