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
package/README.md CHANGED
@@ -2,7 +2,39 @@
2
2
 
3
3
  ## Descripción
4
4
 
5
- Apacuana SDK Core es una biblioteca JavaScript que proporciona una interfaz para interactuar con los servicios de Apacuana, permitiendo la generación de certificados digitales, verificación de estados, revocaciones y firma de documentos.
5
+ Apacuana SDK Core es una biblioteca de JavaScript que proporciona una interfaz para interactuar con los servicios de Apacuana, permitiendo la generación de certificados digitales, firma de documentos, y otras operaciones relacionadas con la identidad digital.
6
+
7
+ ## Tabla de Contenidos
8
+
9
+ - [Instalación](#instalación)
10
+ - [Inicialización](#inicialización)
11
+ - [Conceptos Clave](#conceptos-clave)
12
+ - [Tipos de Integración](#tipos-de-integración)
13
+ - [Interfaz Pública](#interfaz-pública)
14
+ - [`init(config)`](#initconfig)
15
+ - [`close()`](#close)
16
+ - [`getConfig()`](#getconfig)
17
+ - [`getCustomer()`](#getcustomer)
18
+ - [`generateCert(encryptedCSR)`](#generatecertencryptedcsr)
19
+ - [`getCertStatus(isCertificateInDevice)`](#getcertstatusiscertificateindevice)
20
+ - [`getCertTypes()`](#getcerttypes)
21
+ - [`getRequerimentsByTypeUser(params)`](#getrequerimentsbytypeuserparams)
22
+ - [`requestCertificate(params)`](#requestcertificateparams)
23
+ - [`addSigner(signerData)`](#addsignersignerdata)
24
+ - [`getDocs(data)`](#getdocsdata)
25
+ - [`getDigest(signData)`](#getdigestsigndata)
26
+ - [`signDocument(signData)`](#signdocumentsigndata)
27
+ - [`uploadSignatureVariant(data)`](#uploadsignaturevariantdata)
28
+ - [`getSignatureVariant()`](#getsignaturevariant)
29
+ - [`deleteSignatureVariant()`](#deletesignaturevariant)
30
+ - [`createFaceLivenessSession()`](#createfacelivenesssession)
31
+ - [`requestRevocation(params)`](#requestrevocationparams)
32
+ - [`getRevocationReasons()`](#getrevocationreasons)
33
+ - [Manejo de Errores](#manejo-de-errores)
34
+ - [`ApacuanaSuccess`](#apacuanasuccess)
35
+ - [`ApacuanaAPIError`](#apacuanaapierror)
36
+ - [Listado de Códigos de Error](#listado-de-códigos-de-error)
37
+ - [Licencia](#licencia)
6
38
 
7
39
  ## Instalación
8
40
 
@@ -10,442 +42,429 @@ Apacuana SDK Core es una biblioteca JavaScript que proporciona una interfaz para
10
42
  npm install apacuana-sdk-core
11
43
  ```
12
44
 
13
- ## Requisitos
45
+ ## Inicialización
14
46
 
15
- - Node.js 12 o superior
16
- - Acceso a las credenciales de API de Apacuana (apiKey y secretKey)
47
+ Antes de utilizar el SDK, debes inicializarlo con tu configuración.
17
48
 
18
- ## Configuración Inicial
49
+ ```javascript
50
+ import apacuana from "apacuana-sdk-core";
19
51
 
20
- Antes de utilizar cualquier funcionalidad del SDK, es necesario inicializarlo con la configuración adecuada:
52
+ const config = {
53
+ apiUrl: "https://api.url",
54
+ secretKey: "tu-secret-key",
55
+ apiKey: "tu-api-key",
56
+ verificationId: "tu-verification-id",
57
+ customerId: "tu-customer-id",
58
+ integrationType: "ONBOARDING", // o "ONPREMISE"
59
+ };
21
60
 
22
- ```javascript
23
- const apacuana = require("apacuana-sdk-core");
24
-
25
- // Configuración inicial
26
- await apacuana.init({
27
- apiUrl: "https://api.apacuana.com",
28
- secretKey: "YOUR_SECRET_KEY",
29
- apiKey: "YOUR_API_KEY",
30
- verificationId: "VERIFICATION_ID",
31
- customerId: "CUSTOMER_ID",
32
- integrationType: "ONBOARDING",
33
- });
61
+ try {
62
+ await apacuana.init(config);
63
+ console.log("SDK inicializado correctamente.");
64
+ } catch (error) {
65
+ console.error("Error al inicializar el SDK:", error);
66
+ }
34
67
  ```
35
68
 
36
- ## Métodos Públicos
69
+ ## Conceptos Clave
70
+
71
+ ### Tipos de Integración
37
72
 
38
- ### init(config)
73
+ El SDK soporta dos tipos de integración (`integrationType`) que determinan cómo se interactúa con la plataforma de Apacuana:
39
74
 
40
- Inicializa el SDK con la configuración proporcionada.
75
+ - **`ONBOARDING`**: En este modo, Apacuana gestiona la mayor parte del proceso, como el registro de usuarios y la generación de certificados. Es el modo recomendado y soportado para la mayoría de las integraciones.
76
+ - **`ONPREMISE`**: Este modo de integración no está soportado actualmente y se reserva para uso futuro. La mayoría de las operaciones del SDK lanzarán un error `NOT_IMPLEMENTED` si se utiliza este tipo.
41
77
 
42
- **Parámetros:**
78
+ La elección del `integrationType` en la `init` es fundamental, ya que afecta a la disponibilidad y el comportamiento de muchos de los métodos del SDK.
43
79
 
44
- - `config` (Object): Objeto de configuración con las siguientes propiedades:
45
- - `apiUrl` (String): URL base de la API de Apacuana
46
- - `secretKey` (String): Clave secreta para autenticación
47
- - `apiKey` (String): Clave de API para autenticación
48
- - `verificationId` (String): ID de verificación
49
- - `customerId` (String): ID del cliente
50
- - `integrationType` (String): Tipo de integración (ver sección de Tipos de Integración)
80
+ ## Interfaz Pública
51
81
 
52
- **Retorna:**
82
+ Todas las funciones asíncronas devuelven una instancia de `ApacuanaSuccess` si tienen éxito, o lanzan una `ApacuanaAPIError` si fallan.
53
83
 
54
- - `Promise<boolean>` que se resuelve a `true` cuando la inicialización es exitosa.
84
+ ### `init(config)`
55
85
 
56
- ### close()
86
+ Inicializa el SDK.
57
87
 
58
- Cierra la sesión actual del SDK y restablece la configuración a sus valores por defecto, dejando la instancia lista para una nueva inicialización.
88
+ - **`config`**: Objeto de configuración.
59
89
 
60
- **Parámetros:** Ninguno
90
+ ### `close()`
61
91
 
62
- **Retorna:** Nada
92
+ Cierra la sesión del SDK y limpia la configuración.
63
93
 
64
94
  **Ejemplo:**
65
95
 
66
96
  ```javascript
67
97
  apacuana.close();
68
- console.log("La sesión del SDK ha sido cerrada.");
98
+ console.log("Sesión del SDK cerrada.");
69
99
  ```
70
100
 
71
- ### getConfig()
72
-
73
- Obtiene la configuración actual del SDK.
74
-
75
- **Parámetros:** Ninguno
101
+ ### `getConfig()`
76
102
 
77
- **Retorna:**
103
+ Devuelve la configuración actual.
78
104
 
79
- - `Object`: Configuración actual del SDK
80
-
81
- ### getCustomer()
82
-
83
- Obtiene la información del cliente utilizando los datos de configuración.
84
-
85
- **Parámetros:** Ninguno
86
-
87
- **Retorna:**
88
-
89
- - `Promise<GetCustomerResponse>` que se resuelve con un objeto que contiene:
90
- - `token` (String): ID de sesión para autenticación.
91
- - `userData` (Object): Datos del usuario.
92
- - `success` (Boolean): Indicador de éxito de la operación.
105
+ **Ejemplo:**
93
106
 
94
- ### generateCert(encryptedCSR)
107
+ ```javascript
108
+ const currentConfig = apacuana.getConfig();
109
+ console.log("Configuración actual:", currentConfig);
110
+ ```
95
111
 
96
- Genera un certificado digital. El comportamiento y el parámetro esperado varían según el `integrationType`.
112
+ ### `getCustomer()`
97
113
 
98
- **Parámetros:**
114
+ Obtiene los datos del cliente.
99
115
 
100
- - `encryptedCSR` (`EncryptedCSRObject`): Un objeto que contiene la Solicitud de Firma de Certificado (CSR) encriptada.
101
- - `csr` (String): La CSR en formato Base64.
116
+ **Ejemplo:**
102
117
 
103
- **Comportamiento por `integrationType`:**
118
+ ```javascript
119
+ try {
120
+ const response = await apacuana.getCustomer();
121
+ console.log("Datos del cliente:", response.data);
122
+ } catch (error) {
123
+ console.error("Error al obtener el cliente:", error.message);
124
+ }
125
+ ```
104
126
 
105
- - **`ONBOARDING`**: Valida la CSR y la envía a la API para su registro.
106
- - **`ONPREMISE`**: No soportado. Lanza una `ApacuanaAPIError` con el código `NOT_IMPLEMENTED`.
127
+ ### `generateCert(encryptedCSR)`
107
128
 
108
- **Retorna:**
129
+ Genera un nuevo certificado digital.
109
130
 
110
- - `Promise<GenerateCertResponse>` que se resuelve con un objeto que contiene:
111
- - `cert` (String): El certificado generado.
112
- - `success` (Boolean): Indicador de éxito de la operación.
131
+ - **`encryptedCSR`**: Objeto con la CSR encriptada.
113
132
 
114
133
  **Ejemplo:**
115
134
 
116
135
  ```javascript
117
- const myCsrObject = { csr: "MIIC...==" };
118
-
119
136
  try {
120
- const { cert, success } = await apacuana.generateCert(myCsrObject);
121
- if (success) {
122
- console.log("Certificado generado exitosamente:", cert);
123
- }
137
+ const csr = { csr: "MIIC...==" }; // CSR en formato Base64
138
+ const response = await apacuana.generateCert(csr);
139
+ console.log("Certificado generado:", response.data);
124
140
  } catch (error) {
125
141
  console.error("Error al generar el certificado:", error.message);
126
142
  }
127
143
  ```
128
144
 
129
- ### getCertStatus(isCertificateInDevice)
145
+ ### `getCertStatus(isCertificateInDevice)`
130
146
 
131
- Obtiene el estado actual del certificado del usuario.
147
+ Obtiene el estado del certificado del usuario.
132
148
 
133
- **Parámetros:**
149
+ - **`isCertificateInDevice`**: Booleano que indica si el certificado está en el dispositivo.
134
150
 
135
- - `isCertificateInDevice` (Boolean, opcional): Indica si el certificado ya se encuentra en el dispositivo. Por defecto es `false`.
136
-
137
- **Retorna:**
151
+ **Ejemplo:**
138
152
 
139
- - `GetCertStatusResponse`: Un objeto que contiene:
140
- - `status` (String): El estado del certificado (ver sección de Estados de Certificado).
141
- - `success` (Boolean): Indicador de éxito de la operación.
153
+ ```javascript
154
+ try {
155
+ const response = await apacuana.getCertStatus(false);
156
+ console.log("Estado del certificado:", response.data);
157
+ } catch (error) {
158
+ console.error("Error al obtener el estado del certificado:", error.message);
159
+ }
160
+ ```
142
161
 
143
- ### getCertTypes()
162
+ ### `getCertTypes()`
144
163
 
145
164
  Obtiene los tipos de certificados disponibles.
146
165
 
147
- **Parámetros:** Ninguno
148
-
149
- **Retorna:**
150
-
151
- - `Promise<GetCertTypesResponse>`: Un objeto que contiene:
152
- - `types` (Array<Object>): Una lista de los tipos de certificados disponibles.
153
- - `success` (Boolean): Indicador de éxito de la operación.
154
-
155
- **Comportamiento por `integrationType`:**
156
-
157
- - **`ONBOARDING`**: Realiza una petición `GET` para obtener los tipos de certificados.
158
- - **`ONPREMISE`**: No soportado. Lanza una `ApacuanaAPIError` con el código `NOT_IMPLEMENTED`.
159
-
160
166
  **Ejemplo:**
161
167
 
162
168
  ```javascript
163
169
  try {
164
- const { types, success } = await apacuana.getCertTypes();
165
- if (success) {
166
- console.log("Tipos de certificados:", types);
167
- }
170
+ const response = await apacuana.getCertTypes();
171
+ console.log("Tipos de certificados:", response.data);
168
172
  } catch (error) {
169
- console.error("Error al obtener los tipos de certificados:", error.message);
173
+ console.error("Error al obtener los tipos de certificado:", error.message);
170
174
  }
171
175
  ```
172
176
 
173
- ### getRequerimentsByTypeUser(params)
174
-
175
- Obtiene los requisitos para un tipo de usuario determinado.
176
-
177
- **Parámetros:**
178
-
179
- - `params` (Object): Objeto de parámetros.
180
- - `type` (Number): El tipo de usuario para el que se obtienen los requisitos.
177
+ ### `getRequerimentsByTypeUser(params)`
181
178
 
182
- **Retorna:**
179
+ Obtiene los requisitos para un tipo de usuario.
183
180
 
184
- - `Promise<GetRequirementsResponse>`: Un objeto que contiene:
185
- - `requirements` (Array<Object>): Una lista de los requisitos.
186
- - `success` (Boolean): Indicador de éxito de la operación.
187
-
188
- **Comportamiento por `integrationType`:**
189
-
190
- - **`ONBOARDING`**: Realiza una petición `GET` para obtener los requisitos.
191
- - **`ONPREMISE`**: No soportado. Lanza una `ApacuanaAPIError` con el código `NOT_IMPLEMENTED`.
181
+ - **`params`**: Objeto con la propiedad `type` (numérico).
192
182
 
193
183
  **Ejemplo:**
194
184
 
195
185
  ```javascript
196
186
  try {
197
- const { requirements, success } = await apacuana.getRequerimentsByTypeUser({
198
- type: 1,
199
- });
200
- if (success) {
201
- console.log("Requisitos:", requirements);
202
- }
187
+ const response = await apacuana.getRequerimentsByTypeUser({ type: 1 });
188
+ console.log("Requisitos:", response.data);
203
189
  } catch (error) {
204
190
  console.error("Error al obtener los requisitos:", error.message);
205
191
  }
206
192
  ```
207
193
 
208
- ### addSigner(signerData)
209
-
210
- Agrega un firmante a un documento. El comportamiento y la estructura del objeto `signerData` varían según el `integrationType`.
194
+ ### `requestCertificate(params)`
211
195
 
212
- **Parámetros:**
196
+ Solicita un certificado.
213
197
 
214
- - `signerData` (`OnboardingSignerData` | `object`): Un objeto que contiene la información del firmante.
198
+ - **`params`**: Objeto con las propiedades `type` (numérico) y `documents` (array).
215
199
 
216
- ---
217
-
218
- #### Flujo de Integración: ONBOARDING
219
-
220
- Para el tipo de integración `ONBOARDING`, la función espera un objeto `signerData` con una estructura específica y realiza validaciones estrictas sobre cada campo.
221
-
222
- **Estructura de `signerData` para ONBOARDING:**
200
+ **Ejemplo:**
223
201
 
224
- ```json
225
- {
226
- "name": "Nombre del Documento",
227
- "reference": "Referencia Externa",
228
- "typedoc": "V",
229
- "doc": "26122862",
230
- "signature": [
231
- {
232
- "page": 1,
233
- "x": 0.5,
234
- "y": 0.85
235
- }
236
- ]
202
+ ```javascript
203
+ try {
204
+ const params = { type: 1, documents: ["doc1.pdf", "doc2.pdf"] };
205
+ const response = await apacuana.requestCertificate(params);
206
+ console.log("Solicitud de certificado enviada:", response.data);
207
+ } catch (error) {
208
+ console.error("Error al solicitar el certificado:", error.message);
237
209
  }
238
210
  ```
239
211
 
240
- **Campos de `signerData`:**
241
-
242
- - **`name`** (`string`, requerido): Nombre del documento.
243
- - **`reference`** (`string`, requerido): Referencia externa del documento en el gestor documental.
244
- - **`typedoc`** (`string`, requerido): Tipo de documento de identidad. Valores permitidos: `V`, `P`, `E`.
245
- - **`doc`** (`string`, requerido): Número del documento de identidad.
246
- - **`signature`** (`Array<SignaturePosition>`, requerido): Un array de objetos que definen la posición de la firma.
247
- - **`page`** (`number`, requerido): Número de página (entero positivo).
248
- - **`x`** (`number`, requerido): Coordenada X (entre 0 y 1).
249
- - **`y`** (`number`, requerido): Coordenada Y (entre 0 y 1).
212
+ ### `addSigner(signerData)`
250
213
 
251
- ---
214
+ Añade un firmante a un documento.
252
215
 
253
- #### Flujo de Integración: ONPREMISE
216
+ - **`signerData`**: Objeto con los datos del firmante.
254
217
 
255
- Esta funcionalidad aún no está implementada para el tipo de integración `ONPREMISE`. Invocar `addSigner` en este modo lanzará una `ApacuanaAPIError` con el código `NOT_IMPLEMENTED`.
256
-
257
- ---
258
-
259
- **Retorna:**
260
-
261
- - `Promise<AddSignerResponse>` que se resuelve con un objeto que contiene:
262
- - `signer` (String): Un identificador del firmante, construido a partir de `typedoc` y `doc`.
263
- - `success` (Boolean): Indicador de éxito de la operación.
218
+ **Ejemplo:**
264
219
 
265
- ### getDigest(signData)
220
+ ```javascript
221
+ try {
222
+ const signer = {
223
+ name: "Contrato",
224
+ reference: "REF-001",
225
+ typedoc: "V",
226
+ doc: "12345678",
227
+ signature: [{ page: 1, x: 0.5, y: 0.5 }],
228
+ };
229
+ const response = await apacuana.addSigner(signer);
230
+ console.log("Firmante añadido:", response.data);
231
+ } catch (error) {
232
+ console.error("Error al añadir firmante:", error.message);
233
+ }
234
+ ```
266
235
 
267
- Obtiene el `digest` de un documento que se va a firmar. Este `digest` es un resumen criptográfico del documento que luego debe ser firmado por el cliente.
236
+ ### `getDocs(data)`
268
237
 
269
- **Parámetros:**
238
+ Obtiene una lista paginada de documentos.
270
239
 
271
- - `signData` (`GetDigestData`): Objeto que contiene los datos para la firma.
272
- - `cert` (String): Certificado del firmante en formato PEM (codificado en base64).
273
- - `signatureId` (String): Identificador único del proceso de firma.
240
+ - **`data`**: Objeto con parámetros de paginación (`page`, `size`) y filtro (`status`).
274
241
 
275
- **Retorna:**
242
+ **Ejemplo:**
276
243
 
277
- - `Promise<GetDigestResponse>`: Un objeto que contiene:
278
- - `digest` (String): El digest del documento a firmar.
279
- - `success` (Boolean): Indicador de éxito de la operación.
244
+ ```javascript
245
+ try {
246
+ const params = { page: 1, size: 10, status: 0 };
247
+ const response = await apacuana.getDocs(params);
248
+ console.log("Documentos:", response.data);
249
+ } catch (error) {
250
+ console.error("Error al obtener los documentos:", error.message);
251
+ }
252
+ ```
280
253
 
281
- ### signDocument(signData)
254
+ ### `getDigest(signData)`
282
255
 
283
- Firma un documento utilizando un certificado digital y un digest previamente firmado. Esta función es compatible únicamente con el flujo de integración `ONBOARDING`.
256
+ Obtiene el digest de un documento para ser firmado.
284
257
 
285
- **Parámetros:**
258
+ - **`signData`**: Objeto con `cert` y `signatureId`.
286
259
 
287
- - `signData` (`SignDocumentData`): Un objeto que contiene los datos necesarios para la firma.
288
- - `signature` (Object): Objeto con información de la firma.
289
- - `id` (String): ID de la firma.
290
- - `positions` (Array<Object>): Posiciones de la firma en el documento.
291
- - `cert` (String): El certificado del firmante en formato base64.
292
- - `signedDigest` (String): El digest del documento, ya firmado.
260
+ **Ejemplo:**
293
261
 
294
- **Retorna:**
262
+ ```javascript
263
+ try {
264
+ const params = { cert: "MIIC...==", signatureId: "sig-123" };
265
+ const response = await apacuana.getDigest(params);
266
+ console.log("Digest del documento:", response.data);
267
+ } catch (error) {
268
+ console.error("Error al obtener el digest:", error.message);
269
+ }
270
+ ```
295
271
 
296
- - `Promise<object>`: Una promesa que se resuelve con la respuesta de la API tras completar la firma.
272
+ ### `signDocument(signData)`
297
273
 
298
- ### requestRevocation(reasonCode)
274
+ Firma un documento.
299
275
 
300
- Solicita la revocación de un certificado.
276
+ - **`signData`**: Objeto con `signature`, `cert` y `signedDigest`.
301
277
 
302
- **Parámetros:**
278
+ **Ejemplo:**
303
279
 
304
- - `reasonCode` (String): Código que indica la razón de la revocación (ej. "COMPROMISED").
280
+ ```javascript
281
+ try {
282
+ const params = {
283
+ signature: { id: "sig-123" },
284
+ cert: "MIIC...==",
285
+ signedDigest: "abc...",
286
+ };
287
+ const response = await apacuana.signDocument(params);
288
+ console.log("Documento firmado:", response.data);
289
+ } catch (error) {
290
+ console.error("Error al firmar el documento:", error.message);
291
+ }
292
+ ```
305
293
 
306
- **Retorna:**
294
+ ### `uploadSignatureVariant(data)`
307
295
 
308
- - `Promise<RequestRevocationResponse>` que se resuelve con un objeto que contiene:
309
- - `revocationStatus` (String): El estado de la solicitud (ej. "pending").
310
- - `requestId` (String | Number): El ID de la solicitud de revocación.
296
+ Sube una imagen de firma.
311
297
 
312
- ### getRevocationReasons()
298
+ - **`data`**: Objeto con la propiedad `file` (instancia de `File`, tipo `image/png`).
313
299
 
314
- Obtiene la lista de códigos de motivo de revocación disponibles que se pueden usar en la función `requestRevocation`.
300
+ **Ejemplo:**
315
301
 
316
- **Parámetros:** Ninguno
302
+ ```javascript
303
+ // Este código se ejecutaría en un entorno de navegador
304
+ const imageFile = new File(["..."], "firma.png", { type: "image/png" });
305
+ try {
306
+ const response = await apacuana.uploadSignatureVariant({ file: imageFile });
307
+ console.log(response.data);
308
+ } catch (error) {
309
+ console.error("Error al subir la firma:", error.message);
310
+ }
311
+ ```
317
312
 
318
- **Retorna:**
313
+ ### `getSignatureVariant()`
319
314
 
320
- - `Promise<RevocationReasonsResponse>`: Un objeto que contiene:
321
- - `reasons` (Array<Object>): Un array de objetos, donde cada objeto representa un motivo de revocación con `code` y `description`.
322
- - `success` (Boolean): Indicador de éxito de la operación.
315
+ Obtiene la imagen de la firma del usuario.
323
316
 
324
- **Comportamiento por `integrationType`:**
317
+ **Ejemplo:**
325
318
 
326
- - **`ONBOARDING`**: Obtiene la lista de motivos desde la API.
327
- - **`ONPREMISE`**: No soportado. Lanza una `ApacuanaAPIError` con el código `NOT_IMPLEMENTED`.
319
+ ```javascript
320
+ try {
321
+ const response = await apacuana.getSignatureVariant();
322
+ // La imagen viene en Base64
323
+ console.log("Firma obtenida (Base64):", response.data);
324
+ } catch (error) {
325
+ console.error("Error al obtener la firma:", error.message);
326
+ }
327
+ ```
328
328
 
329
- ### uploadSignatureVariant(data)
329
+ ### `deleteSignatureVariant()`
330
330
 
331
- Sube una variante de firma (imagen) para un firmante específico. Esta imagen se utilizará como la representación gráfica de la firma en los documentos.
331
+ Elimina la imagen de la firma del usuario.
332
332
 
333
- **Parámetros:**
333
+ **Ejemplo:**
334
334
 
335
- - `data` (`UploadSignatureVariantData`): Objeto que contiene los datos para la subida.
336
- - `file` (`File`): El archivo de imagen de la firma. Debe ser una instancia de `File` y de tipo `image/png`.
337
- - `signerId` (`string`): El identificador del firmante al que se asociará la imagen.
335
+ ```javascript
336
+ try {
337
+ const response = await apacuana.deleteSignatureVariant();
338
+ console.log(response.data);
339
+ } catch (error) {
340
+ console.error("Error al eliminar la firma:", error.message);
341
+ }
342
+ ```
338
343
 
339
- **Retorna:**
344
+ ### `createFaceLivenessSession()`
340
345
 
341
- - `Promise<UploadSignatureVariantResponse>`: Un objeto que contiene:
342
- - `message` (String): Un mensaje de confirmación.
343
- - `success` (Boolean): Indicador de éxito de la operación.
346
+ Crea una sesión de prueba de vida.
344
347
 
345
- **Comportamiento por `integrationType`:**
348
+ **Ejemplo:**
346
349
 
347
- - **`ONBOARDING`**: Sube el archivo a la API.
348
- - **`ONPREMISE`**: No soportado. Lanza una `ApacuanaAPIError` con el código `NOT_IMPLEMENTED`.
350
+ ```javascript
351
+ try {
352
+ const response = await apacuana.createFaceLivenessSession();
353
+ console.log("ID de sesión de prueba de vida:", response.data);
354
+ } catch (error) {
355
+ console.error("Error al crear la sesión:", error.message);
356
+ }
357
+ ```
349
358
 
350
- ### getSignatureVariant()
359
+ ### `requestRevocation(params)`
351
360
 
352
- Obtiene la variante de firma (imagen) de un firmante.
361
+ Solicita la revocación de un certificado.
353
362
 
354
- **Parámetros:** Ninguno
363
+ - **`params`**: Objeto con la propiedad `reasonCode` (numérico).
355
364
 
356
- **Retorna:**
365
+ **Ejemplo:**
357
366
 
358
- - `Promise<GetSignatureVariantResponse>`: Un objeto que contiene:
359
- - `file` (String): La imagen de la firma en formato base64.
360
- - `success` (Boolean): Indicador de éxito de la operación.
367
+ ```javascript
368
+ try {
369
+ const response = await apacuana.requestRevocation({ reasonCode: 1 });
370
+ console.log("Solicitud de revocación enviada:", response.data);
371
+ } catch (error) {
372
+ console.error("Error al solicitar la revocación:", error.message);
373
+ }
374
+ ```
361
375
 
362
- **Comportamiento por `integrationType`:**
376
+ ### `getRevocationReasons()`
363
377
 
364
- - **`ONBOARDING`**: Realiza una petición `GET` para obtener la imagen.
365
- - **`ONPREMISE`**: No soportado. Lanza una `ApacuanaAPIError` con el código `NOT_IMPLEMENTED`.
378
+ Obtiene la lista de razones para la revocación.
366
379
 
367
380
  **Ejemplo:**
368
381
 
369
382
  ```javascript
370
383
  try {
371
- const { file, success } = await apacuana.getSignatureVariant();
372
- if (success) {
373
- console.log("Imagen de la firma obtenida.");
374
- // Puedes usar 'file' para mostrar la imagen, por ejemplo:
375
- // const img = document.createElement('img');
376
- // img.src = `data:image/png;base64,${file}`;
377
- // document.body.appendChild(img);
378
- }
384
+ const response = await apacuana.getRevocationReasons();
385
+ console.log("Razones de revocación:", response.data);
379
386
  } catch (error) {
380
- console.error("Error al obtener la variante de firma:", error.message);
387
+ console.error("Error al obtener las razones de revocación:", error.message);
381
388
  }
382
389
  ```
383
390
 
384
- ### deleteSignatureVariant()
385
-
386
- Elimina la variante de firma (imagen) de un firmante.
391
+ ## Manejo de Errores
387
392
 
388
- **Parámetros:** Ninguno
393
+ El SDK utiliza dos clases personalizadas para gestionar los resultados de las operaciones asíncronas: `ApacuanaSuccess` para éxitos y `ApacuanaAPIError` para fallos.
389
394
 
390
- **Retorna:**
395
+ ### `ApacuanaSuccess`
391
396
 
392
- - `Promise<DeleteSignatureVariantResponse>`: Un objeto que contiene:
393
- - `message` (String): Un mensaje de confirmación.
394
- - `success` (Boolean): Indicador de éxito de la operación.
397
+ Cuando una operación se completa correctamente, la promesa se resuelve con una instancia de `ApacuanaSuccess`. Esta clase encapsula la respuesta de la API y proporciona una estructura consistente para los datos devueltos.
395
398
 
396
- **Comportamiento por `integrationType`:**
399
+ **Propiedades:**
397
400
 
398
- - **`ONBOARDING`**: Realiza una petición `DELETE` para eliminar la imagen.
399
- - **`ONPREMISE`**: No soportado. Lanza una `ApacuanaAPIError` con el código `NOT_IMPLEMENTED`.
401
+ - `success` (Boolean): Siempre `true`.
402
+ - `statusCode` (Number): El código de estado HTTP de la respuesta (ej. `200`).
403
+ - `data` (Object): El cuerpo de la respuesta de la API.
400
404
 
401
- **Ejemplo:**
405
+ **Ejemplo de uso:**
402
406
 
403
407
  ```javascript
404
408
  try {
405
- const { message, success } = await apacuana.deleteSignatureVariant();
406
- if (success) {
407
- console.log(message); // "Signature variant deleted successfully."
408
- }
409
+ // getCertTypes devuelve una instancia de ApacuanaSuccess
410
+ const response = await apacuana.getCertTypes();
411
+
412
+ console.log("La operación fue exitosa:", response.success); // true
413
+ console.log("Tipos de certificados:", response.data);
409
414
  } catch (error) {
410
- console.error("Error al eliminar la variante de firma:", error.message);
415
+ // Manejo de errores (ver abajo)
416
+ console.error(error);
411
417
  }
412
418
  ```
413
419
 
414
- ### getDocs(data)
415
-
416
- Obtiene una lista de documentos paginada.
417
-
418
- **Parámetros:**
419
-
420
- - `data` (`GetDocsParams`): Objeto que contiene los parámetros para la consulta.
421
- - `page` (Number): Número de página.
422
- - `size` (Number): Cantidad de resultados por página.
423
- - `status` (Number, opcional): Filtra por estado (`-1`: Rechazado, `0`: Pendiente, `1`: Firmado, `2`: En proceso).
420
+ ### `ApacuanaAPIError`
424
421
 
425
- **Retorna:**
422
+ Cuando la API devuelve un error o ocurre un problema durante la solicitud, la promesa es rechazada con una instancia de `ApacuanaAPIError`. Esta clase extiende el `Error` nativo de JavaScript y añade información contextual sobre el fallo.
426
423
 
427
- - `Promise<GetDocsResponse>`: Un objeto que contiene:
428
- - `totalRecords` (Number): El número total de documentos.
429
- - `records` (Array<Object>): Un array de documentos.
430
- - `success` (Boolean): Indicador de éxito de la operación.
424
+ **Propiedades:**
431
425
 
432
- ## Estados de Certificado
426
+ - `success` (Boolean): Siempre `false`.
427
+ - `statusCode` (Number): El código de estado HTTP del error (ej. `400`, `404`, `500`).
428
+ - `errorCode` (String): Un código de error específico de Apacuana (ej. `INVALID_PARAMS`, `NOT_IMPLEMENTED`).
429
+ - `message` (String): Una descripción legible del error.
433
430
 
434
- - `PENDING`: Pendiente de generación.
435
- - `ACTIVE`: Activo y listo para usar.
436
- - `EXPIRED`: Caducado.
437
- - `REVOKED`: Revocado.
438
- - `SUSPENDED`: Suspendido temporalmente.
431
+ **Ejemplo de manejo de errores:**
439
432
 
440
- ## Tipos de Integración
433
+ ```javascript
434
+ try {
435
+ // Forzamos un error pasando parámetros inválidos
436
+ await apacuana.requestCertificate({ type: 999, documents: [] });
437
+ } catch (error) {
438
+ if (error.name === "ApacuanaAPIError") {
439
+ console.error("Ocurrió un error de la API de Apacuana:");
440
+ console.error("- Mensaje:", error.message);
441
+ console.error("- Código de estado HTTP:", error.statusCode);
442
+ console.error("- Código de error interno:", error.errorCode);
443
+ } else {
444
+ // Captura de otros errores inesperados (ej. problemas de red)
445
+ console.error("Ocurrió un error inesperado:", error);
446
+ }
447
+ }
448
+ ```
441
449
 
442
- - `ONBOARDING`: Proceso de registro y generación de certificado gestionado por Apacuana.
443
- - `ONPREMISE`: Integración donde el cliente gestiona su propia infraestructura.
450
+ ### Listado de Códigos de Error
444
451
 
445
- ## Manejo de Errores
452
+ A continuación se muestra una lista de los `errorCode` más comunes que puede devolver el SDK:
446
453
 
447
- El SDK utiliza la clase `ApacuanaAPIError` para manejar errores específicos de la API, la cual extiende `Error` y añade las propiedades `code` y `details`.
454
+ | `errorCode` | Descripción |
455
+ | :----------------------------- | :---------------------------------------------------------------------- |
456
+ | `CONFIGURATION_ERROR` | Error en la configuración del SDK (ej. falta `apiKey`). |
457
+ | `INVALID_API_RESPONSE` | La respuesta de la API no tiene el formato esperado. |
458
+ | `INVALID_PARAMETER` | Uno o más parámetros de la función son inválidos. |
459
+ | `INVALID_PARAMETER_FORMAT` | El formato de un parámetro es incorrecto. |
460
+ | `LOGICAL_API_ERROR` | Error lógico devuelto por la API. |
461
+ | `NETWORK_ERROR` | Error de red, CORS o timeout. |
462
+ | `NOT_IMPLEMENTED` | La funcionalidad no está implementada para el `integrationType` actual. |
463
+ | `UNSUPPORTED_HTTP_METHOD` | Se utilizó un método HTTP no soportado. |
464
+ | `UNSUPPORTED_INTEGRATION_TYPE` | El `integrationType` no es válido. |
465
+ | `UNKNOWN_REQUEST_ERROR` | Error desconocido durante la petición. |
466
+ | `API_RESPONSE_ERROR` | La respuesta de la API contiene un error. |
448
467
 
449
468
  ## Licencia
450
469
 
451
- Este SDK está licenciado bajo términos propietarios.
470
+ Este SDK está distribuido bajo una licencia propietaria. Para más detalles, contacte con el equipo de Apacuana.