apacuana-sdk-core 0.9.0 → 0.11.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 (56) hide show
  1. package/README.md +320 -236
  2. package/coverage/clover.xml +341 -212
  3. package/coverage/coverage-final.json +9 -7
  4. package/coverage/lcov-report/index.html +34 -19
  5. package/coverage/lcov-report/src/api/certs.js.html +493 -37
  6. package/coverage/lcov-report/src/api/faceLiveness.js.html +496 -0
  7. package/coverage/lcov-report/src/api/index.html +43 -28
  8. package/coverage/lcov-report/src/api/revocations.js.html +103 -106
  9. package/coverage/lcov-report/src/api/signatures.js.html +25 -253
  10. package/coverage/lcov-report/src/api/users.js.html +7 -13
  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 +1 -1
  16. package/coverage/lcov-report/src/index.js.html +48 -3
  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 +591 -352
  24. package/dist/api/certs.d.ts +13 -30
  25. package/dist/api/faceLiveness.d.ts +6 -0
  26. package/dist/api/revocations.d.ts +3 -42
  27. package/dist/api/signatures.d.ts +11 -153
  28. package/dist/index.d.ts +10 -0
  29. package/dist/index.js +630 -214
  30. package/dist/index.js.map +1 -1
  31. package/dist/index.mjs +630 -214
  32. package/dist/index.mjs.map +1 -1
  33. package/dist/success/index.d.ts +7 -0
  34. package/dist/types/certs.d.ts +97 -0
  35. package/dist/types/faceLiveness.d.ts +10 -0
  36. package/dist/types/revocations.d.ts +40 -0
  37. package/dist/types/signatures.d.ts +152 -0
  38. package/dist/types/users.d.ts +260 -0
  39. package/package.json +1 -1
  40. package/src/api/certs.js +175 -23
  41. package/src/api/faceLiveness.js +137 -0
  42. package/src/api/revocations.js +66 -67
  43. package/src/api/signatures.js +21 -97
  44. package/src/api/users.js +4 -6
  45. package/src/index.js +16 -1
  46. package/src/success/index.js +8 -0
  47. package/src/types/certs.js +56 -0
  48. package/src/types/faceLiveness.js +7 -0
  49. package/src/types/revocations.js +25 -0
  50. package/src/types/signatures.js +77 -0
  51. package/src/types/users.js +73 -0
  52. package/tests/api/certs.test.js +209 -4
  53. package/tests/api/faceLiveness.test.js +172 -0
  54. package/tests/api/revocations.test.js +37 -37
  55. package/tests/api/signatures.test.js +11 -5
  56. package/tests/api/users.test.js +3 -2
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,377 +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)
130
-
131
- Obtiene el estado actual del certificado del usuario.
145
+ ### `getCertStatus(isCertificateInDevice)`
132
146
 
133
- **Parámetros:**
147
+ Obtiene el estado del certificado del usuario.
134
148
 
135
- - `isCertificateInDevice` (Boolean, opcional): Indica si el certificado ya se encuentra en el dispositivo. Por defecto es `false`.
149
+ - **`isCertificateInDevice`**: Booleano que indica si el certificado está en el dispositivo.
136
150
 
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
- ### addSigner(signerData)
162
+ ### `getCertTypes()`
144
163
 
145
- Agrega un firmante a un documento. El comportamiento y la estructura del objeto `signerData` varían según el `integrationType`.
164
+ Obtiene los tipos de certificados disponibles.
146
165
 
147
- **Parámetros:**
166
+ **Ejemplo:**
148
167
 
149
- - `signerData` (`OnboardingSignerData` | `object`): Un objeto que contiene la información del firmante.
168
+ ```javascript
169
+ try {
170
+ const response = await apacuana.getCertTypes();
171
+ console.log("Tipos de certificados:", response.data);
172
+ } catch (error) {
173
+ console.error("Error al obtener los tipos de certificado:", error.message);
174
+ }
175
+ ```
150
176
 
151
- ---
177
+ ### `getRequerimentsByTypeUser(params)`
152
178
 
153
- #### Flujo de Integración: ONBOARDING
179
+ Obtiene los requisitos para un tipo de usuario.
154
180
 
155
- 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.
181
+ - **`params`**: Objeto con la propiedad `type` (numérico).
156
182
 
157
- **Estructura de `signerData` para ONBOARDING:**
183
+ **Ejemplo:**
158
184
 
159
- ```json
160
- {
161
- "name": "Nombre del Documento",
162
- "reference": "Referencia Externa",
163
- "typedoc": "V",
164
- "doc": "26122862",
165
- "signature": [
166
- {
167
- "page": 1,
168
- "x": 0.5,
169
- "y": 0.85
170
- }
171
- ]
185
+ ```javascript
186
+ try {
187
+ const response = await apacuana.getRequerimentsByTypeUser({ type: 1 });
188
+ console.log("Requisitos:", response.data);
189
+ } catch (error) {
190
+ console.error("Error al obtener los requisitos:", error.message);
172
191
  }
173
192
  ```
174
193
 
175
- **Campos de `signerData`:**
194
+ ### `requestCertificate(params)`
176
195
 
177
- - **`name`** (`string`, requerido): Nombre del documento.
178
- - **`reference`** (`string`, requerido): Referencia externa del documento en el gestor documental.
179
- - **`typedoc`** (`string`, requerido): Tipo de documento de identidad. Valores permitidos: `V`, `P`, `E`.
180
- - **`doc`** (`string`, requerido): Número del documento de identidad.
181
- - **`signature`** (`Array<SignaturePosition>`, requerido): Un array de objetos que definen la posición de la firma.
182
- - **`page`** (`number`, requerido): Número de página (entero positivo).
183
- - **`x`** (`number`, requerido): Coordenada X (entre 0 y 1).
184
- - **`y`** (`number`, requerido): Coordenada Y (entre 0 y 1).
196
+ Solicita un certificado.
185
197
 
186
- ---
198
+ - **`params`**: Objeto con las propiedades `type` (numérico) y `documents` (array).
187
199
 
188
- #### Flujo de Integración: ONPREMISE
200
+ **Ejemplo:**
201
+
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);
209
+ }
210
+ ```
189
211
 
190
- 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`.
212
+ ### `addSigner(signerData)`
191
213
 
192
- ---
214
+ Añade un firmante a un documento.
193
215
 
194
- **Retorna:**
216
+ - **`signerData`**: Objeto con los datos del firmante.
195
217
 
196
- - `Promise<AddSignerResponse>` que se resuelve con un objeto que contiene:
197
- - `signer` (String): Un identificador del firmante, construido a partir de `typedoc` y `doc`.
198
- - `success` (Boolean): Indicador de éxito de la operación.
218
+ **Ejemplo:**
199
219
 
200
- ### 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
+ ```
201
235
 
202
- 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)`
203
237
 
204
- **Parámetros:**
238
+ Obtiene una lista paginada de documentos.
205
239
 
206
- - `signData` (`GetDigestData`): Objeto que contiene los datos para la firma.
207
- - `cert` (String): Certificado del firmante en formato PEM (codificado en base64).
208
- - `signatureId` (String): Identificador único del proceso de firma.
240
+ - **`data`**: Objeto con parámetros de paginación (`page`, `size`) y filtro (`status`).
209
241
 
210
- **Retorna:**
242
+ **Ejemplo:**
211
243
 
212
- - `Promise<GetDigestResponse>`: Un objeto que contiene:
213
- - `digest` (String): El digest del documento a firmar.
214
- - `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
+ ```
215
253
 
216
- ### signDocument(signData)
254
+ ### `getDigest(signData)`
217
255
 
218
- 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.
219
257
 
220
- **Parámetros:**
258
+ - **`signData`**: Objeto con `cert` y `signatureId`.
221
259
 
222
- - `signData` (`SignDocumentData`): Un objeto que contiene los datos necesarios para la firma.
223
- - `signature` (Object): Objeto con información de la firma.
224
- - `id` (String): ID de la firma.
225
- - `positions` (Array<Object>): Posiciones de la firma en el documento.
226
- - `cert` (String): El certificado del firmante en formato base64.
227
- - `signedDigest` (String): El digest del documento, ya firmado.
260
+ **Ejemplo:**
228
261
 
229
- **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
+ ```
230
271
 
231
- - `Promise<object>`: Una promesa que se resuelve con la respuesta de la API tras completar la firma.
272
+ ### `signDocument(signData)`
232
273
 
233
- ### requestRevocation(reasonCode)
274
+ Firma un documento.
234
275
 
235
- Solicita la revocación de un certificado.
276
+ - **`signData`**: Objeto con `signature`, `cert` y `signedDigest`.
236
277
 
237
- **Parámetros:**
278
+ **Ejemplo:**
238
279
 
239
- - `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
+ ```
240
293
 
241
- **Retorna:**
294
+ ### `uploadSignatureVariant(data)`
242
295
 
243
- - `Promise<RequestRevocationResponse>` que se resuelve con un objeto que contiene:
244
- - `revocationStatus` (String): El estado de la solicitud (ej. "pending").
245
- - `requestId` (String | Number): El ID de la solicitud de revocación.
296
+ Sube una imagen de firma.
246
297
 
247
- ### getRevocationReasons()
298
+ - **`data`**: Objeto con la propiedad `file` (instancia de `File`, tipo `image/png`).
248
299
 
249
- Obtiene la lista de códigos de motivo de revocación disponibles que se pueden usar en la función `requestRevocation`.
300
+ **Ejemplo:**
250
301
 
251
- **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
+ ```
252
312
 
253
- **Retorna:**
313
+ ### `getSignatureVariant()`
254
314
 
255
- - `Promise<RevocationReasonsResponse>`: Un objeto que contiene:
256
- - `reasons` (Array<Object>): Un array de objetos, donde cada objeto representa un motivo de revocación con `code` y `description`.
257
- - `success` (Boolean): Indicador de éxito de la operación.
315
+ Obtiene la imagen de la firma del usuario.
258
316
 
259
- **Comportamiento por `integrationType`:**
317
+ **Ejemplo:**
260
318
 
261
- - **`ONBOARDING`**: Obtiene la lista de motivos desde la API.
262
- - **`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
+ ```
263
328
 
264
- ### uploadSignatureVariant(data)
329
+ ### `deleteSignatureVariant()`
265
330
 
266
- 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.
267
332
 
268
- **Parámetros:**
333
+ **Ejemplo:**
269
334
 
270
- - `data` (`UploadSignatureVariantData`): Objeto que contiene los datos para la subida.
271
- - `file` (`File`): El archivo de imagen de la firma. Debe ser una instancia de `File` y de tipo `image/png`.
272
- - `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
+ ```
273
343
 
274
- **Retorna:**
344
+ ### `createFaceLivenessSession()`
275
345
 
276
- - `Promise<UploadSignatureVariantResponse>`: Un objeto que contiene:
277
- - `message` (String): Un mensaje de confirmación.
278
- - `success` (Boolean): Indicador de éxito de la operación.
346
+ Crea una sesión de prueba de vida.
279
347
 
280
- **Comportamiento por `integrationType`:**
348
+ **Ejemplo:**
281
349
 
282
- - **`ONBOARDING`**: Sube el archivo a la API.
283
- - **`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
+ ```
284
358
 
285
- ### getSignatureVariant()
359
+ ### `requestRevocation(params)`
286
360
 
287
- Obtiene la variante de firma (imagen) de un firmante.
361
+ Solicita la revocación de un certificado.
288
362
 
289
- **Parámetros:** Ninguno
363
+ - **`params`**: Objeto con la propiedad `reasonCode` (numérico).
290
364
 
291
- **Retorna:**
365
+ **Ejemplo:**
292
366
 
293
- - `Promise<GetSignatureVariantResponse>`: Un objeto que contiene:
294
- - `file` (String): La imagen de la firma en formato base64.
295
- - `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
+ ```
296
375
 
297
- **Comportamiento por `integrationType`:**
376
+ ### `getRevocationReasons()`
298
377
 
299
- - **`ONBOARDING`**: Realiza una petición `GET` para obtener la imagen.
300
- - **`ONPREMISE`**: No soportado. Lanza una `ApacuanaAPIError` con el código `NOT_IMPLEMENTED`.
378
+ Obtiene la lista de razones para la revocación.
301
379
 
302
380
  **Ejemplo:**
303
381
 
304
382
  ```javascript
305
383
  try {
306
- const { file, success } = await apacuana.getSignatureVariant();
307
- if (success) {
308
- console.log("Imagen de la firma obtenida.");
309
- // Puedes usar 'file' para mostrar la imagen, por ejemplo:
310
- // const img = document.createElement('img');
311
- // img.src = `data:image/png;base64,${file}`;
312
- // document.body.appendChild(img);
313
- }
384
+ const response = await apacuana.getRevocationReasons();
385
+ console.log("Razones de revocación:", response.data);
314
386
  } catch (error) {
315
- console.error("Error al obtener la variante de firma:", error.message);
387
+ console.error("Error al obtener las razones de revocación:", error.message);
316
388
  }
317
389
  ```
318
390
 
319
- ### deleteSignatureVariant()
320
-
321
- Elimina la variante de firma (imagen) de un firmante.
391
+ ## Manejo de Errores
322
392
 
323
- **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.
324
394
 
325
- **Retorna:**
395
+ ### `ApacuanaSuccess`
326
396
 
327
- - `Promise<DeleteSignatureVariantResponse>`: Un objeto que contiene:
328
- - `message` (String): Un mensaje de confirmación.
329
- - `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.
330
398
 
331
- **Comportamiento por `integrationType`:**
399
+ **Propiedades:**
332
400
 
333
- - **`ONBOARDING`**: Realiza una petición `DELETE` para eliminar la imagen.
334
- - **`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.
335
404
 
336
- **Ejemplo:**
405
+ **Ejemplo de uso:**
337
406
 
338
407
  ```javascript
339
408
  try {
340
- const { message, success } = await apacuana.deleteSignatureVariant();
341
- if (success) {
342
- console.log(message); // "Signature variant deleted successfully."
343
- }
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);
344
414
  } catch (error) {
345
- console.error("Error al eliminar la variante de firma:", error.message);
415
+ // Manejo de errores (ver abajo)
416
+ console.error(error);
346
417
  }
347
418
  ```
348
419
 
349
- ### getDocs(data)
350
-
351
- Obtiene una lista de documentos paginada.
352
-
353
- **Parámetros:**
354
-
355
- - `data` (`GetDocsParams`): Objeto que contiene los parámetros para la consulta.
356
- - `page` (Number): Número de página.
357
- - `size` (Number): Cantidad de resultados por página.
358
- - `status` (Number, opcional): Filtra por estado (`-1`: Rechazado, `0`: Pendiente, `1`: Firmado, `2`: En proceso).
420
+ ### `ApacuanaAPIError`
359
421
 
360
- **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.
361
423
 
362
- - `Promise<GetDocsResponse>`: Un objeto que contiene:
363
- - `totalRecords` (Number): El número total de documentos.
364
- - `records` (Array<Object>): Un array de documentos.
365
- - `success` (Boolean): Indicador de éxito de la operación.
424
+ **Propiedades:**
366
425
 
367
- ## 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.
368
430
 
369
- - `PENDING`: Pendiente de generación.
370
- - `ACTIVE`: Activo y listo para usar.
371
- - `EXPIRED`: Caducado.
372
- - `REVOKED`: Revocado.
373
- - `SUSPENDED`: Suspendido temporalmente.
431
+ **Ejemplo de manejo de errores:**
374
432
 
375
- ## 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
+ ```
376
449
 
377
- - `ONBOARDING`: Proceso de registro y generación de certificado gestionado por Apacuana.
378
- - `ONPREMISE`: Integración donde el cliente gestiona su propia infraestructura.
450
+ ### Listado de Códigos de Error
379
451
 
380
- ## Manejo de Errores
452
+ A continuación se muestra una lista de los `errorCode` más comunes que puede devolver el SDK:
381
453
 
382
- 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. |
383
467
 
384
468
  ## Licencia
385
469
 
386
- 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.