apacuana-sdk-core 0.14.0 → 0.15.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.
- package/README.md +606 -179
- package/coverage/clover.xml +2 -2
- package/coverage/lcov-report/index.html +1 -1
- package/coverage/lcov-report/src/api/certs.js.html +1 -1
- package/coverage/lcov-report/src/api/faceLiveness.js.html +1 -1
- package/coverage/lcov-report/src/api/index.html +1 -1
- package/coverage/lcov-report/src/api/revocations.js.html +1 -1
- package/coverage/lcov-report/src/api/signatures.js.html +1 -1
- package/coverage/lcov-report/src/api/users.js.html +1 -1
- package/coverage/lcov-report/src/config/index.html +1 -1
- package/coverage/lcov-report/src/config/index.js.html +1 -1
- package/coverage/lcov-report/src/errors/index.html +1 -1
- package/coverage/lcov-report/src/errors/index.js.html +1 -1
- package/coverage/lcov-report/src/index.html +1 -1
- package/coverage/lcov-report/src/index.js.html +1 -1
- package/coverage/lcov-report/src/success/index.html +1 -1
- package/coverage/lcov-report/src/success/index.js.html +1 -1
- package/coverage/lcov-report/src/utils/constant.js.html +1 -1
- package/coverage/lcov-report/src/utils/helpers.js.html +1 -1
- package/coverage/lcov-report/src/utils/httpClient.js.html +1 -1
- package/coverage/lcov-report/src/utils/index.html +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
# Apacuana SDK Core
|
|
2
2
|
|
|
3
3
|
## Descripción
|
|
4
|
+
|
|
4
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.
|
|
5
6
|
|
|
6
7
|
## Tabla de Contenidos
|
|
8
|
+
|
|
7
9
|
- [Instalación](#instalación)
|
|
8
10
|
- [Inicialización](#inicialización)
|
|
9
11
|
- [Conceptos Clave](#conceptos-clave)
|
|
@@ -12,11 +14,13 @@
|
|
|
12
14
|
- [Licencia](#licencia)
|
|
13
15
|
|
|
14
16
|
## Instalación
|
|
17
|
+
|
|
15
18
|
```bash
|
|
16
19
|
npm install apacuana-sdk-core
|
|
17
20
|
```
|
|
18
21
|
|
|
19
22
|
## Inicialización
|
|
23
|
+
|
|
20
24
|
Antes de utilizar el SDK, debes inicializarlo con tu configuración.
|
|
21
25
|
|
|
22
26
|
```javascript
|
|
@@ -40,7 +44,9 @@ try {
|
|
|
40
44
|
```
|
|
41
45
|
|
|
42
46
|
## Conceptos Clave
|
|
47
|
+
|
|
43
48
|
### Tipos de Integración
|
|
49
|
+
|
|
44
50
|
El SDK soporta dos tipos de integración (`integrationType`) que determinan cómo se interactúa con la plataforma de Apacuana:
|
|
45
51
|
|
|
46
52
|
- **`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.
|
|
@@ -49,101 +55,267 @@ El SDK soporta dos tipos de integración (`integrationType`) que determinan cóm
|
|
|
49
55
|
|
|
50
56
|
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.
|
|
51
57
|
|
|
58
|
+
### Inicialización y acceso a funciones públicas/privadas
|
|
59
|
+
|
|
60
|
+
El SDK puede inicializarse sin el parámetro `customerId`, lo que permite el acceso únicamente a las funciones públicas. Para acceder a las funciones privadas, es necesario inicializar el SDK incluyendo el `customerId` en la configuración.
|
|
61
|
+
|
|
62
|
+
**Funciones públicas disponibles sin `customerId`:**
|
|
63
|
+
|
|
64
|
+
- `getConfig()`
|
|
65
|
+
- `getCertTypes()`
|
|
66
|
+
- `getRequerimentsByTypeUser(params)`
|
|
67
|
+
- `createApacuanaUser(userData)`
|
|
68
|
+
|
|
69
|
+
**Funciones privadas (requieren `customerId`):**
|
|
70
|
+
|
|
71
|
+
- `getCustomer()`
|
|
72
|
+
- `generateCert(encryptedCSR)`
|
|
73
|
+
- `getCertStatus(isCertificateInDevice)`
|
|
74
|
+
- `addSigner(signerData)`
|
|
75
|
+
- `getDocs(data)`
|
|
76
|
+
- `getDigest(signData)`
|
|
77
|
+
- `signDocument(signData)`
|
|
78
|
+
- `uploadSignatureVariant(data)`
|
|
79
|
+
- `getSignatureVariant()`
|
|
80
|
+
- `deleteSignatureVariant()`
|
|
81
|
+
- `createFaceLivenessSession()`
|
|
82
|
+
- `validateFaceLiveness({ sessionId })`
|
|
83
|
+
- `requestRevocation(params)`
|
|
84
|
+
- `getRevocationReasons()`
|
|
85
|
+
|
|
86
|
+
El SDK valida automáticamente si tienes acceso a cada función según la configuración actual, y lanzará un error si intentas acceder a una función privada sin haber inicializado correctamente con el `customerId`.
|
|
87
|
+
|
|
52
88
|
## Interfaz Pública
|
|
89
|
+
|
|
53
90
|
Todas las funciones asíncronas devuelven una instancia de `ApacuanaSuccess` si tienen éxito, o lanzan una `ApacuanaAPIError` si fallan.
|
|
54
91
|
|
|
55
92
|
### `init(config)`
|
|
93
|
+
|
|
56
94
|
Inicializa el SDK.
|
|
57
95
|
|
|
58
|
-
|
|
96
|
+
#### Parámetros requeridos en `config`:
|
|
97
|
+
|
|
98
|
+
| Propiedad | Tipo | Descripción |
|
|
99
|
+
| ----------------- | ------ | ------------------------------------------------------------------------ |
|
|
100
|
+
| `apiUrl` | String | URL base de la API de Apacuana. |
|
|
101
|
+
| `secretKey` | String | Clave secreta proporcionada por Apacuana. |
|
|
102
|
+
| `apiKey` | String | API Key proporcionada por Apacuana. |
|
|
103
|
+
| `verificationId` | String | Identificador de verificación del cliente. |
|
|
104
|
+
| `integrationType` | String | Tipo de integración. Valores permitidos: `ONBOARDING`, `ONPREMISE`. |
|
|
105
|
+
| `customerId` | String | (Opcional) Identificador del usuario. Requerido para funciones privadas. |
|
|
106
|
+
|
|
107
|
+
#### Comportamiento:
|
|
108
|
+
|
|
109
|
+
- Si se inicializa **sin** `customerId`, el SDK solo permite el uso de funciones públicas.
|
|
110
|
+
- Si se inicializa **con** `customerId`, el SDK obtiene el token y los datos del usuario, permitiendo el acceso a funciones privadas.
|
|
111
|
+
- Si falta algún campo obligatorio o el `integrationType` no es válido, se lanzará un error.
|
|
112
|
+
|
|
113
|
+
#### Ejemplo:
|
|
114
|
+
|
|
115
|
+
```javascript
|
|
116
|
+
import apacuana from "apacuana-sdk-core";
|
|
117
|
+
|
|
118
|
+
const config = {
|
|
119
|
+
apiUrl: "https://api.url",
|
|
120
|
+
secretKey: "tu-secret-key",
|
|
121
|
+
apiKey: "tu-api-key",
|
|
122
|
+
verificationId: "tu-verification-id",
|
|
123
|
+
integrationType: "ONBOARDING", // o "ONPREMISE"
|
|
124
|
+
customerId: "tu-customer-id", // Opcional
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
try {
|
|
128
|
+
await apacuana.init(config);
|
|
129
|
+
console.log("SDK inicializado correctamente.");
|
|
130
|
+
} catch (error) {
|
|
131
|
+
console.error("Error al inicializar el SDK:", error);
|
|
132
|
+
}
|
|
133
|
+
```
|
|
59
134
|
|
|
60
135
|
### `close()`
|
|
136
|
+
|
|
61
137
|
Cierra la sesión del SDK y limpia la configuración.
|
|
62
138
|
|
|
63
139
|
**Ejemplo:**
|
|
140
|
+
|
|
64
141
|
```javascript
|
|
65
142
|
apacuana.close();
|
|
66
143
|
console.log("Sesión del SDK cerrada.");
|
|
67
144
|
```
|
|
68
145
|
|
|
69
146
|
### `getConfig()`
|
|
147
|
+
|
|
70
148
|
Devuelve la configuración actual.
|
|
71
149
|
|
|
72
150
|
**Ejemplo:**
|
|
151
|
+
|
|
73
152
|
```javascript
|
|
74
153
|
const currentConfig = apacuana.getConfig();
|
|
75
154
|
console.log("Configuración actual:", currentConfig);
|
|
76
155
|
```
|
|
77
156
|
|
|
78
157
|
### `getCustomer()`
|
|
79
|
-
Obtiene los datos del cliente. Este método es el punto de entrada para iniciar una sesión y obtener el token y la información del usuario.
|
|
80
158
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
159
|
+
Obtiene los datos del usuario autenticado (customer) y su token de sesión. Este método solo está disponible si el SDK fue inicializado con customerId. No requiere parámetros de entrada. El resultado vendrá en el objeto `data` del response, incluyendo información relevante del usuario y el token de autenticación.
|
|
160
|
+
|
|
161
|
+
**Ejemplo de uso:**
|
|
162
|
+
|
|
163
|
+
```js
|
|
164
|
+
const result = await apacuana.getCustomer();
|
|
165
|
+
// result.data contendrá los datos del usuario y el token
|
|
89
166
|
```
|
|
90
167
|
|
|
91
168
|
### `generateCert(encryptedCSR)`
|
|
169
|
+
|
|
92
170
|
Genera un nuevo certificado digital.
|
|
93
171
|
|
|
94
|
-
|
|
95
|
-
|
|
172
|
+
#### Parámetros:
|
|
173
|
+
|
|
174
|
+
- `encryptedCSR`: Objeto con la propiedad obligatoria:
|
|
175
|
+
- `csr` (String): Certificate Signing Request encriptado (por ejemplo, en formato Base64).
|
|
176
|
+
|
|
177
|
+
#### Comportamiento:
|
|
178
|
+
|
|
179
|
+
- Solo disponible para `integrationType: ONBOARDING`. Si se usa con `ONPREMISE`, lanzará un error `NOT_IMPLEMENTED`.
|
|
180
|
+
- Realiza una solicitud a la API y devuelve una instancia de `ApacuanaSuccess`.
|
|
181
|
+
|
|
182
|
+
#### Respuesta:
|
|
183
|
+
|
|
184
|
+
```js
|
|
185
|
+
{
|
|
186
|
+
success: true,
|
|
187
|
+
data: {
|
|
188
|
+
cert: "...", // Certificado generado en formato string
|
|
189
|
+
certifiedid: "..." // ID del certificado generado
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
#### Ejemplo:
|
|
96
195
|
|
|
97
|
-
**Ejemplo:**
|
|
98
196
|
```javascript
|
|
99
197
|
try {
|
|
100
198
|
const csr = { csr: "MIIC...==" }; // CSR en formato Base64
|
|
101
199
|
const response = await apacuana.generateCert(csr);
|
|
102
|
-
console.log("Certificado generado:", response.data);
|
|
200
|
+
console.log("Certificado generado:", response.data.cert);
|
|
201
|
+
console.log("ID del certificado:", response.data.certifiedid);
|
|
103
202
|
} catch (error) {
|
|
104
203
|
console.error("Error al generar el certificado:", error.message);
|
|
105
204
|
}
|
|
106
205
|
```
|
|
107
206
|
|
|
108
207
|
### `getCertStatus(isCertificateInDevice)`
|
|
208
|
+
|
|
109
209
|
Obtiene el estado del certificado del usuario.
|
|
110
210
|
|
|
111
|
-
|
|
211
|
+
#### Parámetros:
|
|
212
|
+
|
|
213
|
+
- `isCertificateInDevice` (Boolean): Indica si el certificado ya está almacenado localmente en el dispositivo.
|
|
214
|
+
|
|
215
|
+
#### Respuesta:
|
|
216
|
+
|
|
217
|
+
```js
|
|
218
|
+
{
|
|
219
|
+
success: true,
|
|
220
|
+
data: {
|
|
221
|
+
status: {
|
|
222
|
+
text: "...", // Estado legible del certificado
|
|
223
|
+
descriptionText: "..." // Descripción adicional (puede ser undefined)
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Los posibles valores de `text` incluyen:
|
|
230
|
+
|
|
231
|
+
- "Por verificar"
|
|
232
|
+
- "En revisión"
|
|
233
|
+
- "Por generar"
|
|
234
|
+
- "Vigente"
|
|
235
|
+
- "Por revocar"
|
|
236
|
+
- "Revocado"
|
|
237
|
+
- "Verificado"
|
|
238
|
+
- "Certificado expirado"
|
|
239
|
+
|
|
240
|
+
#### Ejemplo:
|
|
112
241
|
|
|
113
|
-
**Ejemplo:**
|
|
114
242
|
```javascript
|
|
115
243
|
try {
|
|
116
244
|
const response = await apacuana.getCertStatus(false);
|
|
117
|
-
console.log("Estado del certificado:", response.data);
|
|
245
|
+
console.log("Estado del certificado:", response.data.status.text);
|
|
246
|
+
if (response.data.status.descriptionText) {
|
|
247
|
+
console.log("Descripción:", response.data.status.descriptionText);
|
|
248
|
+
}
|
|
118
249
|
} catch (error) {
|
|
119
250
|
console.error("Error al obtener el estado del certificado:", error.message);
|
|
120
251
|
}
|
|
121
252
|
```
|
|
122
253
|
|
|
123
254
|
### `getCertTypes()`
|
|
255
|
+
|
|
124
256
|
Obtiene los tipos de certificados disponibles.
|
|
125
257
|
|
|
126
|
-
|
|
258
|
+
#### Comportamiento:
|
|
259
|
+
|
|
260
|
+
- Solo disponible para `integrationType: ONBOARDING`. Si se usa con `ONPREMISE`, lanzará un error `NOT_IMPLEMENTED`.
|
|
261
|
+
- Devuelve una instancia de `ApacuanaSuccess` con la propiedad `types`, que es un array de tipos de certificado.
|
|
262
|
+
|
|
263
|
+
#### Respuesta:
|
|
264
|
+
|
|
265
|
+
```js
|
|
266
|
+
{
|
|
267
|
+
success: true,
|
|
268
|
+
data: {
|
|
269
|
+
types: [
|
|
270
|
+
{ ... },
|
|
271
|
+
// ...otros tipos de certificado
|
|
272
|
+
]
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
#### Ejemplo:
|
|
278
|
+
|
|
127
279
|
```javascript
|
|
128
280
|
try {
|
|
129
281
|
const response = await apacuana.getCertTypes();
|
|
130
|
-
console.log("Tipos de certificados:", response.data);
|
|
282
|
+
console.log("Tipos de certificados:", response.data.types);
|
|
131
283
|
} catch (error) {
|
|
132
284
|
console.error("Error al obtener los tipos de certificado:", error.message);
|
|
133
285
|
}
|
|
134
286
|
```
|
|
135
287
|
|
|
136
288
|
### `getRequerimentsByTypeUser(params)`
|
|
289
|
+
|
|
137
290
|
Obtiene los requisitos para un tipo de certificado y usuario.
|
|
138
291
|
|
|
139
|
-
|
|
292
|
+
#### Parámetros:
|
|
293
|
+
|
|
294
|
+
- `params`: Objeto con la propiedad obligatoria:
|
|
140
295
|
- `type` (Number): El tipo de certificado.
|
|
141
296
|
|
|
142
|
-
|
|
297
|
+
#### Comportamiento:
|
|
298
|
+
|
|
299
|
+
- Solo disponible para `integrationType: ONBOARDING`. Si se usa con `ONPREMISE`, lanzará un error `NOT_IMPLEMENTED`.
|
|
300
|
+
- Devuelve una instancia de `ApacuanaSuccess`
|
|
301
|
+
|
|
302
|
+
#### Respuesta:
|
|
303
|
+
|
|
304
|
+
```js
|
|
305
|
+
{
|
|
306
|
+
success: true,
|
|
307
|
+
data: {
|
|
308
|
+
...
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
#### Ejemplo:
|
|
314
|
+
|
|
143
315
|
```javascript
|
|
144
316
|
try {
|
|
145
317
|
const response = await apacuana.getRequerimentsByTypeUser({ type: 1 });
|
|
146
|
-
console.log("Requisitos:", response.data);
|
|
318
|
+
console.log("Requisitos:", response.data.requirements);
|
|
147
319
|
} catch (error) {
|
|
148
320
|
console.error("Error al obtener los requisitos:", error.message);
|
|
149
321
|
}
|
|
@@ -151,170 +323,203 @@ try {
|
|
|
151
323
|
|
|
152
324
|
### `addSigner(signerData)`
|
|
153
325
|
|
|
154
|
-
Añade un firmante a un documento. El comportamiento
|
|
155
|
-
|
|
156
|
-
- **Para `integrationType: 'ONBOARDING'`**:
|
|
157
|
-
Esta integración requiere que el documento se envíe como un archivo (`File` object). La validación de los datos se realiza a través de un helper que exige los siguientes campos:
|
|
158
|
-
|
|
159
|
-
- **`signerData`**: Objeto con los datos del firmante y el documento.
|
|
160
|
-
- `name` (String, **obligatorio**): Nombre del documento.
|
|
161
|
-
- `document` (File, **obligatorio**): El archivo del documento a firmar (ej. un PDF). No se puede usar junto con `reference`.
|
|
162
|
-
- `reference` (String, **obligatorio**): Referencia única para un documento ya existente en la plataforma. No se puede usar junto con `document`.
|
|
163
|
-
- `typedoc` (String, **obligatorio**): Tipo de documento de identidad del firmante. Valores permitidos: `"V"`, `"P"`, `"E"`.
|
|
164
|
-
- `doc` (String, **obligatorio**): Número de documento de identidad del firmante.
|
|
165
|
-
- `signature` (Array, **obligatorio**): Un array de objetos que definen la posición de la firma. Debe contener al menos un objeto con:
|
|
166
|
-
- `page` (Number, **obligatorio**): Página donde se estampará la firma (entero positivo).
|
|
167
|
-
- `x` (Number, **obligatorio**): Coordenada X (de 0 a 1).
|
|
168
|
-
- `y` (Number, **obligatorio**): Coordenada Y (de 0 a 1).
|
|
169
|
-
|
|
170
|
-
**Ejemplo (`ONBOARDING`):**
|
|
171
|
-
```javascript
|
|
172
|
-
try {
|
|
173
|
-
// documentFile debe ser una instancia de File
|
|
174
|
-
const documentFile = new File(["contenido"], "contrato.pdf", { type: "application/pdf" });
|
|
175
|
-
|
|
176
|
-
const signer = {
|
|
177
|
-
name: "Contrato",
|
|
178
|
-
document: documentFile,
|
|
179
|
-
typedoc: "V",
|
|
180
|
-
doc: "12345678",
|
|
181
|
-
signature: [{ page: 1, x: 0.5, y: 0.5 }],
|
|
182
|
-
};
|
|
183
|
-
const response = await apacuana.addSigner(signer);
|
|
184
|
-
console.log("Firmante añadido:", response.data);
|
|
185
|
-
} catch (error) {
|
|
186
|
-
console.error("Error al añadir firmante:", error.message);
|
|
187
|
-
}
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
- **Para `integrationType: 'onpremise'`**:
|
|
191
|
-
En esta integración, el `signerData` se envía como un objeto JSON. El documento no se envía como un archivo. La validación es más flexible en el lado del cliente.
|
|
192
|
-
|
|
193
|
-
- **`signerData`**: Objeto con los datos del firmante.
|
|
194
|
-
- `name` (String): Nombre del documento.
|
|
195
|
-
- `reference` (String): Referencia única para el documento.
|
|
196
|
-
- `typedoc` (String): Tipo de documento de identidad del firmante.
|
|
197
|
-
- `doc` (String): Número de documento de identidad del firmante.
|
|
198
|
-
- `signature` (Array): Posición de la firma.
|
|
199
|
-
|
|
200
|
-
**Ejemplo (`onpremise`):**
|
|
201
|
-
```javascript
|
|
202
|
-
try {
|
|
203
|
-
const signer = {
|
|
204
|
-
name: "Contrato",
|
|
205
|
-
reference: "REF-001",
|
|
206
|
-
typedoc: "V",
|
|
207
|
-
doc: "12345678",
|
|
208
|
-
signature: [{ page: 1, x: 0.5, y: 0.5 }],
|
|
209
|
-
};
|
|
210
|
-
const response = await apacuana.addSigner(signer);
|
|
211
|
-
console.log("Firmante añadido:", response.data);
|
|
212
|
-
} catch (error) {
|
|
213
|
-
console.error("Error al añadir firmante:", error.message);
|
|
214
|
-
}
|
|
215
|
-
```
|
|
326
|
+
Añade un firmante a un documento. El comportamiento y los campos obligatorios dependen del `integrationType` configurado durante la inicialización.
|
|
216
327
|
|
|
217
|
-
|
|
218
|
-
Obtiene una lista paginada de documentos.
|
|
328
|
+
#### Parámetros:
|
|
219
329
|
|
|
220
|
-
-
|
|
330
|
+
- **`signerData`**: Objeto con los datos del firmante y el documento.
|
|
331
|
+
- `name` (String, **obligatorio**): Nombre del documento.
|
|
332
|
+
- `document` (File, **opcional**): El archivo del documento a firmar (ej. un PDF). No puede coexistir con `reference`.
|
|
333
|
+
- `reference` (String, **opcional**): Referencia única para un documento ya existente en la plataforma. No puede coexistir con `document`.
|
|
334
|
+
- `typedoc` (String, **obligatorio**): Tipo de documento de identidad del firmante. Valores permitidos: "V", "P", "E".
|
|
335
|
+
- `doc` (String, **obligatorio**): Número de documento de identidad del firmante.
|
|
336
|
+
- `signature` (Array, **obligatorio**): Un array de objetos que definen la posición de la firma. Debe contener al menos un objeto con:
|
|
337
|
+
- `page` (Number, **obligatorio**): Página donde se estampará la firma (entero positivo).
|
|
338
|
+
- `x` (Number, **obligatorio**): Coordenada X (de 0 a 1, porcentual respecto al ancho del PDF).
|
|
339
|
+
- `y` (Number, **obligatorio**): Coordenada Y (de 0 a 1, porcentual respecto al alto del PDF).
|
|
221
340
|
|
|
222
|
-
**
|
|
223
|
-
```javascript
|
|
224
|
-
try {
|
|
225
|
-
const params = { page: 1, size: 10, status: 0 };
|
|
226
|
-
const response = await apacuana.getDocs(params);
|
|
227
|
-
console.log("Documentos:", response.data);
|
|
228
|
-
} catch (error) {
|
|
229
|
-
console.error("Error al obtener los documentos:", error.message);
|
|
230
|
-
}
|
|
231
|
-
```
|
|
341
|
+
**Notas sobre `document` y `reference`:**
|
|
232
342
|
|
|
233
|
-
|
|
234
|
-
|
|
343
|
+
- Solo uno de estos parámetros debe ser enviado. Si el cliente tiene integración con el gestor documental de Apacuana, se debe usar `reference` para referenciar el documento existente en la plataforma.
|
|
344
|
+
- Si no existe integración documental, se debe enviar el archivo `document` (File). Este archivo será posteriormente solicitado para la firma del documento luego de ser asignado.
|
|
235
345
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
346
|
+
**Notas sobre posicionamiento:**
|
|
347
|
+
|
|
348
|
+
- Las coordenadas `x` e `y` son porcentuales y van de 0 a 1.
|
|
349
|
+
- El origen (0,0) está en la esquina superior izquierda del PDF.
|
|
350
|
+
- Ejemplos de posicionamiento:
|
|
351
|
+
- Esquina superior izquierda: `{ x: 0, y: 0 }`
|
|
352
|
+
- Esquina superior derecha: `{ x: 1, y: 0 }`
|
|
353
|
+
- Esquina inferior izquierda: `{ x: 0, y: 1 }`
|
|
354
|
+
- Centro de la página: `{ x: 0.5, y: 0.5 }`
|
|
355
|
+
|
|
356
|
+
#### Ejemplo:
|
|
239
357
|
|
|
240
|
-
**Ejemplo:**
|
|
241
358
|
```javascript
|
|
242
359
|
try {
|
|
243
|
-
const
|
|
244
|
-
|
|
245
|
-
|
|
360
|
+
const signer = {
|
|
361
|
+
name: "Contrato",
|
|
362
|
+
document: documentFile, // Instancia de File
|
|
363
|
+
typedoc: "V",
|
|
364
|
+
doc: "12345678",
|
|
365
|
+
signature: [
|
|
366
|
+
{ page: 1, x: 0, y: 0 }, // Esquina superior izquierda
|
|
367
|
+
{ page: 1, x: 1, y: 0 }, // Esquina superior derecha
|
|
368
|
+
{ page: 1, x: 0, y: 1 }, // Esquina inferior izquierda
|
|
369
|
+
{ page: 1, x: 0.5, y: 0.5 }, // Centro de la página
|
|
370
|
+
],
|
|
246
371
|
};
|
|
247
|
-
const response = await apacuana.
|
|
248
|
-
console.log("
|
|
372
|
+
const response = await apacuana.addSigner(signer);
|
|
373
|
+
console.log("Firmante añadido:", response.data);
|
|
249
374
|
} catch (error) {
|
|
250
|
-
console.error("Error al
|
|
375
|
+
console.error("Error al añadir firmante:", error.message);
|
|
251
376
|
}
|
|
252
377
|
```
|
|
253
378
|
|
|
254
|
-
### `
|
|
255
|
-
|
|
379
|
+
### `getDocs(data)`
|
|
380
|
+
|
|
381
|
+
Obtiene una lista paginada de documentos asociados al usuario autenticado, permitiendo aplicar filtros avanzados.
|
|
256
382
|
|
|
257
|
-
-
|
|
258
|
-
- `signature` (Object, **obligatorio**): Objeto que contiene el ID de la firma y las posiciones.
|
|
259
|
-
- `id` (String, **obligatorio**): El ID de la firma.
|
|
260
|
-
- `positions` (Array, **obligatorio**): Un array de objetos para ajustar la posición de la firma.
|
|
261
|
-
- `cert` (String, **obligatorio**): El certificado en formato Base64.
|
|
262
|
-
- `signedDigest` (String, **obligatorio**): El digest del documento ya firmado.
|
|
263
|
-
- `document` (File, opcional): El archivo del documento, si es necesario para la integración.
|
|
383
|
+
- `data`: Objeto con parámetros de paginación (`page`, `size`) y filtros opcionales (`status`, `type`, `dateFrom`, `dateTo`, `reference`, etc.). Puedes combinar estos filtros para obtener solo los documentos que cumplan con los criterios deseados.
|
|
264
384
|
|
|
265
385
|
**Ejemplo:**
|
|
386
|
+
|
|
266
387
|
```javascript
|
|
267
388
|
try {
|
|
268
389
|
const params = {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
},
|
|
273
|
-
cert: "MIIC...==",
|
|
274
|
-
signedDigest: "abc...",
|
|
390
|
+
page: 1,
|
|
391
|
+
size: 10,
|
|
392
|
+
status: 0, // Estado del documento
|
|
275
393
|
};
|
|
276
|
-
const response = await apacuana.
|
|
277
|
-
console.log("
|
|
394
|
+
const response = await apacuana.getDocs(params);
|
|
395
|
+
console.log("Documentos filtrados:", response.data);
|
|
278
396
|
} catch (error) {
|
|
279
|
-
console.error("Error al
|
|
397
|
+
console.error("Error al obtener los documentos:", error.message);
|
|
280
398
|
}
|
|
281
399
|
```
|
|
282
400
|
|
|
401
|
+
**Notas:**
|
|
402
|
+
|
|
403
|
+
- Si no se especifican filtros, se devolverán todos los documentos paginados.
|
|
404
|
+
- Los filtros disponibles pueden variar según la integración y la versión de la API.
|
|
405
|
+
|
|
406
|
+
### `getDigest(signData)`
|
|
407
|
+
|
|
408
|
+
Obtiene el digest (resumen criptográfico) de un documento para el usuario autenticado. Este método requiere que el SDK esté inicializado con customerId.
|
|
409
|
+
|
|
410
|
+
El parámetro `signData` debe incluir:
|
|
411
|
+
|
|
412
|
+
- `cert` (String, obligatorio): Certificado en formato Base64.
|
|
413
|
+
- `signatureId` (String, obligatorio): ID de la firma que se está procesando.
|
|
414
|
+
- `document` (File, opcional): Archivo del documento a firmar.
|
|
415
|
+
|
|
416
|
+
**Importante:**
|
|
417
|
+
|
|
418
|
+
- Si en el método `addSigner` se utilizó el parámetro `reference`, no es necesario incluir el archivo `document` al obtener el digest, ya que el documento está referenciado en la plataforma.
|
|
419
|
+
- Si en `addSigner` se utilizó el parámetro `document` (archivo), será necesario proporcionar nuevamente el archivo en este método para obtener el digest.
|
|
420
|
+
|
|
421
|
+
Ejemplo de uso:
|
|
422
|
+
|
|
423
|
+
```js
|
|
424
|
+
// Caso con documento referenciado
|
|
425
|
+
const result = await apacuana.getDigest({
|
|
426
|
+
cert: "MIIC...==",
|
|
427
|
+
signatureId: "sig-123",
|
|
428
|
+
// No se requiere document
|
|
429
|
+
});
|
|
430
|
+
|
|
431
|
+
// Caso con documento por archivo
|
|
432
|
+
const result = await apacuana.getDigest({
|
|
433
|
+
cert: "MIIC...==",
|
|
434
|
+
signatureId: "sig-123",
|
|
435
|
+
document: documentFile, // Instancia de File
|
|
436
|
+
});
|
|
437
|
+
// result.data contendrá el digest y detalles para la firma
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
### `signDocument(signData)`
|
|
441
|
+
|
|
442
|
+
Firma un documento utilizando el digest firmado y los datos de la firma. Este método requiere que el SDK esté inicializado con customerId.
|
|
443
|
+
|
|
444
|
+
El parámetro `signData` debe incluir:
|
|
445
|
+
|
|
446
|
+
- `signature` (Object, obligatorio):
|
|
447
|
+
- `id` (String): ID de la firma.
|
|
448
|
+
- `positions` (Array): Posiciones de la firma en el documento.
|
|
449
|
+
- `cert` (String, obligatorio): Certificado en formato Base64.
|
|
450
|
+
- `signedDigest` (String, obligatorio): Digest firmado del documento.
|
|
451
|
+
- `document` (File, opcional): Archivo del documento a firmar.
|
|
452
|
+
|
|
453
|
+
**Importante:**
|
|
454
|
+
|
|
455
|
+
- Si en el método `addSigner` se utilizó el parámetro `reference`, no es necesario incluir el archivo `document` al firmar, ya que el documento está referenciado en la plataforma.
|
|
456
|
+
- Si en `addSigner` se utilizó el parámetro `document` (archivo), será necesario proporcionar nuevamente el archivo en este método para completar la firma.
|
|
457
|
+
|
|
458
|
+
Ejemplo de uso:
|
|
459
|
+
|
|
460
|
+
```js
|
|
461
|
+
// Caso con documento referenciado
|
|
462
|
+
const result = await apacuana.signDocument({
|
|
463
|
+
signature: { id: "sig-123", positions: [{ page: 1, x: 0.5, y: 0.5 }] },
|
|
464
|
+
cert: "MIIC...==",
|
|
465
|
+
signedDigest: "abc...",
|
|
466
|
+
// No se requiere document
|
|
467
|
+
});
|
|
468
|
+
|
|
469
|
+
// Caso con documento por archivo
|
|
470
|
+
const result = await apacuana.signDocument({
|
|
471
|
+
signature: { id: "sig-123", positions: [{ page: 1, x: 0.5, y: 0.5 }] },
|
|
472
|
+
cert: "MIIC...==",
|
|
473
|
+
signedDigest: "abc...",
|
|
474
|
+
document: documentFile, // Instancia de File
|
|
475
|
+
});
|
|
476
|
+
// result.data contendrá la información del documento firmado
|
|
477
|
+
```
|
|
478
|
+
|
|
283
479
|
### `uploadSignatureVariant(data)`
|
|
284
|
-
Sube una imagen de firma.
|
|
285
480
|
|
|
286
|
-
|
|
481
|
+
Sube una imagen de variante de firma para el usuario autenticado. Este método requiere que el SDK esté inicializado con customerId.
|
|
287
482
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
483
|
+
El parámetro `data` debe incluir:
|
|
484
|
+
|
|
485
|
+
- `file` (File, obligatorio): Archivo de imagen en formato PNG (`image/png`).
|
|
486
|
+
|
|
487
|
+
**Notas importantes:**
|
|
488
|
+
|
|
489
|
+
- El archivo debe ser una instancia de `File` y tener el tipo MIME `image/png`.
|
|
490
|
+
|
|
491
|
+
Ejemplo de uso:
|
|
492
|
+
|
|
493
|
+
```js
|
|
494
|
+
// En un entorno de navegador
|
|
495
|
+
const imageFile = new File(
|
|
496
|
+
[
|
|
497
|
+
/* datos */
|
|
498
|
+
],
|
|
499
|
+
"firma.png",
|
|
500
|
+
{ type: "image/png" }
|
|
501
|
+
);
|
|
502
|
+
const result = await apacuana.uploadSignatureVariant({ file: imageFile });
|
|
503
|
+
// result.data contendrá la información de la variante subida
|
|
298
504
|
```
|
|
299
505
|
|
|
300
506
|
### `getSignatureVariant()`
|
|
301
|
-
Obtiene la imagen de la firma del usuario.
|
|
302
507
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
console.error("Error al obtener la firma:", error.message);
|
|
311
|
-
}
|
|
508
|
+
Obtiene la imagen de la variante de firma registrada para el usuario autenticado. Este método solo está disponible si el SDK fue inicializado con customerId. No requiere parámetros de entrada. El resultado vendrá en el objeto `data` del response, normalmente como una cadena en formato Base64 que representa la imagen de la firma.
|
|
509
|
+
|
|
510
|
+
Ejemplo de uso:
|
|
511
|
+
|
|
512
|
+
```js
|
|
513
|
+
const result = await apacuana.getSignatureVariant();
|
|
514
|
+
// result.data contendrá la imagen en Base64
|
|
312
515
|
```
|
|
313
516
|
|
|
314
517
|
### `deleteSignatureVariant()`
|
|
315
|
-
|
|
518
|
+
|
|
519
|
+
Elimina la variante de firma almacenada para el usuario autenticado. Este método solo está disponible si el SDK fue inicializado con un customerId. No requiere parámetros de entrada. Si la operación es exitosa, el resultado vendrá en el objeto `data` del response. Si no existe una variante de firma registrada, la operación no tendrá efecto y el resultado indicará el estado actual.
|
|
316
520
|
|
|
317
521
|
**Ejemplo:**
|
|
522
|
+
|
|
318
523
|
```javascript
|
|
319
524
|
try {
|
|
320
525
|
const response = await apacuana.deleteSignatureVariant();
|
|
@@ -325,27 +530,29 @@ try {
|
|
|
325
530
|
```
|
|
326
531
|
|
|
327
532
|
### `createFaceLivenessSession()`
|
|
328
|
-
Crea una sesión de prueba de vida.
|
|
329
533
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
}
|
|
534
|
+
Crea una nueva sesión de prueba de vida (face liveness) para el usuario autenticado. Este método solo está disponible si el SDK fue inicializado con customerId. No requiere parámetros de entrada. El resultado vendrá en el objeto `data` del response, incluyendo el identificador único de la sesión creada.
|
|
535
|
+
|
|
536
|
+
Ejemplo de uso:
|
|
537
|
+
|
|
538
|
+
```js
|
|
539
|
+
const result = await apacuana.createFaceLivenessSession();
|
|
540
|
+
// result.data contendrá el ID de la sesión de prueba de vida
|
|
338
541
|
```
|
|
339
542
|
|
|
340
543
|
### `validateFaceLiveness({ sessionId })`
|
|
544
|
+
|
|
341
545
|
Valida el resultado de una sesión de prueba de vida.
|
|
342
546
|
|
|
343
547
|
- `sessionId` (String, **obligatorio**): El ID de la sesión de prueba de vida que se va a validar.
|
|
344
548
|
|
|
345
549
|
**Ejemplo:**
|
|
550
|
+
|
|
346
551
|
```javascript
|
|
347
552
|
try {
|
|
348
|
-
const response = await apacuana.validateFaceLiveness({
|
|
553
|
+
const response = await apacuana.validateFaceLiveness({
|
|
554
|
+
sessionId: "your-session-id",
|
|
555
|
+
});
|
|
349
556
|
console.log("Resultado de la validación:", response.data);
|
|
350
557
|
} catch (error) {
|
|
351
558
|
console.error("Error al validar la sesión de prueba de vida:", error.message);
|
|
@@ -353,11 +560,109 @@ try {
|
|
|
353
560
|
```
|
|
354
561
|
|
|
355
562
|
### `requestRevocation(params)`
|
|
356
|
-
Solicita la revocación de un certificado.
|
|
357
563
|
|
|
358
|
-
|
|
564
|
+
Solicita la revocación de un certificado. Este método puede llamarse varias veces para ir completando la información de forma parcial; no es necesario enviar todos los documentos en una sola llamada. Sin embargo, en cada actualización es obligatorio enviar el número de documento de identidad (`doc`). El registro inicial debe incluir el documento de identidad.
|
|
565
|
+
|
|
566
|
+
Los documentos requeridos se obtienen previamente usando el método `getRequerimentsByTypeUser`. Deben enviarse bajo la estructura `{ file-ID: File }`, donde cada clave corresponde al identificador del documento y el valor es el archivo correspondiente.
|
|
567
|
+
|
|
568
|
+
Ejemplo de estructura de parámetros:
|
|
569
|
+
|
|
570
|
+
```js
|
|
571
|
+
{
|
|
572
|
+
reasonCode: 1, // Código de la razón de revocación
|
|
573
|
+
doc: "12345678", // Documento de identidad (obligatorio en cada llamada)
|
|
574
|
+
files: {
|
|
575
|
+
"file-1": file1, // Instancia de File
|
|
576
|
+
"file-2": file2
|
|
577
|
+
// ...otros documentos según los requerimientos
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
```
|
|
581
|
+
|
|
582
|
+
El objeto completo de usuario que puede acompañar la solicitud es:
|
|
583
|
+
|
|
584
|
+
```js
|
|
585
|
+
{
|
|
586
|
+
email: "usuario@correo.com",
|
|
587
|
+
typeuser: 1,
|
|
588
|
+
name: "Nombre",
|
|
589
|
+
lastname: "Apellido",
|
|
590
|
+
kinddoc: "V",
|
|
591
|
+
doc: 12345678,
|
|
592
|
+
birthdate: "1990-01-01",
|
|
593
|
+
kindrif: "V",
|
|
594
|
+
gender: "M",
|
|
595
|
+
rif: 12345678,
|
|
596
|
+
phone: 4121234567,
|
|
597
|
+
kindphone: "0424",
|
|
598
|
+
state: "Estado",
|
|
599
|
+
municipality: "Municipio",
|
|
600
|
+
parish: "Parroquia",
|
|
601
|
+
postalcode: "1010",
|
|
602
|
+
address: "Dirección",
|
|
603
|
+
fiscaladdress: "Dirección fiscal",
|
|
604
|
+
fiscalkindphone: "0424",
|
|
605
|
+
fiscalphone: 4121234567,
|
|
606
|
+
occupation: "Ocupación",
|
|
607
|
+
degree: "Título",
|
|
608
|
+
university: "Universidad",
|
|
609
|
+
graduationyear: "2010",
|
|
610
|
+
collegiatenumber: "12345",
|
|
611
|
+
collegiateyear: "2011",
|
|
612
|
+
companyname: "Empresa",
|
|
613
|
+
companykindrif: "J",
|
|
614
|
+
companyrif: "J12345678",
|
|
615
|
+
companystate: "Estado",
|
|
616
|
+
companymunicipality: "Municipio",
|
|
617
|
+
companyparish: "Parroquia",
|
|
618
|
+
companyaddress: "Dirección empresa",
|
|
619
|
+
companykindphone: "0212",
|
|
620
|
+
companyphone: "2121234567",
|
|
621
|
+
companypostalcode: "1010",
|
|
622
|
+
companywebpage: "https://empresa.com",
|
|
623
|
+
companycommercialregister: "Registro comercial",
|
|
624
|
+
companyregisterdate: "2015-01-01",
|
|
625
|
+
companyregisternumber: "123456",
|
|
626
|
+
companyconstitutiondate: "2015-01-01",
|
|
627
|
+
companypublishdate: "2015-01-01",
|
|
628
|
+
companyconstitutiondecree: "Decreto",
|
|
629
|
+
companynumberdecree: "123",
|
|
630
|
+
positionprivate: "Cargo privado",
|
|
631
|
+
departmentprivate: "Departamento privado",
|
|
632
|
+
authorizedprivate: "Autorizado privado",
|
|
633
|
+
functionsprivate: "Funciones privado",
|
|
634
|
+
publishprivate: "2015-01-01",
|
|
635
|
+
issuedateprivate: "2015-01-01",
|
|
636
|
+
kindphoneprivate: "0424",
|
|
637
|
+
phoneprivate: 4121234567,
|
|
638
|
+
positionpublic: "Cargo público",
|
|
639
|
+
departmentpublic: "Departamento público",
|
|
640
|
+
authorizedpublic: "Autorizado público",
|
|
641
|
+
functionspublic: "Funciones público",
|
|
642
|
+
publishpublic: "2015-01-01",
|
|
643
|
+
issuedatepublic: "2015-01-01",
|
|
644
|
+
kindphonepublic: "0424",
|
|
645
|
+
phonepublic: 4121234567,
|
|
646
|
+
companyid: "uuid-empresa"
|
|
647
|
+
}
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
#### Comportamiento:
|
|
651
|
+
|
|
652
|
+
- Solo disponible para `integrationType: ONBOARDING`. Si se usa con `ONPREMISE`, lanzará un error `NOT_IMPLEMENTED`.
|
|
653
|
+
- Realiza una solicitud a la API y devuelve una instancia de `ApacuanaSuccess` con un mensaje de confirmación.
|
|
654
|
+
|
|
655
|
+
#### Respuesta:
|
|
656
|
+
|
|
657
|
+
```js
|
|
658
|
+
{
|
|
659
|
+
success: true,
|
|
660
|
+
data: {}
|
|
661
|
+
}
|
|
662
|
+
```
|
|
663
|
+
|
|
664
|
+
#### Ejemplo:
|
|
359
665
|
|
|
360
|
-
**Ejemplo:**
|
|
361
666
|
```javascript
|
|
362
667
|
try {
|
|
363
668
|
const response = await apacuana.requestRevocation({ reasonCode: 1 });
|
|
@@ -368,39 +673,160 @@ try {
|
|
|
368
673
|
```
|
|
369
674
|
|
|
370
675
|
### `getRevocationReasons()`
|
|
371
|
-
Obtiene la lista de razones para la revocación.
|
|
372
676
|
|
|
373
|
-
|
|
677
|
+
Obtiene la lista de razones para la revocación de certificados.
|
|
678
|
+
|
|
679
|
+
#### Comportamiento:
|
|
680
|
+
|
|
681
|
+
- Solo disponible para `integrationType: ONBOARDING`. Si se usa con `ONPREMISE`, lanzará un error `NOT_IMPLEMENTED`.
|
|
682
|
+
- Devuelve una instancia de `ApacuanaSuccess` con un array de razones.
|
|
683
|
+
|
|
684
|
+
#### Respuesta:
|
|
685
|
+
|
|
686
|
+
```js
|
|
687
|
+
{
|
|
688
|
+
success: true,
|
|
689
|
+
data: {
|
|
690
|
+
reasons: [ /* array de razones de revocación proporcionadas por la API */ ]
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
```
|
|
694
|
+
|
|
695
|
+
#### Ejemplo:
|
|
696
|
+
|
|
374
697
|
```javascript
|
|
375
698
|
try {
|
|
376
699
|
const response = await apacuana.getRevocationReasons();
|
|
377
|
-
console.log("Razones de revocación:", response.data);
|
|
700
|
+
console.log("Razones de revocación:", response.data.reasons);
|
|
378
701
|
} catch (error) {
|
|
379
702
|
console.error("Error al obtener las razones de revocación:", error.message);
|
|
380
703
|
}
|
|
381
704
|
```
|
|
382
705
|
|
|
706
|
+
### `createApacuanaUser(userData)`
|
|
707
|
+
|
|
708
|
+
Crea un nuevo usuario en la plataforma de Apacuana. Este método puede llamarse varias veces para ir completando la información de forma parcial; no es necesario enviar todos los datos en una sola llamada. Sin embargo, en cada actualización es obligatorio enviar el número de documento de identidad (`kinddoc+doc`). El registro inicial debe incluir el documento de identidad.
|
|
709
|
+
|
|
710
|
+
Los documentos requeridos para el usuario se obtienen previamente usando el método `getRequerimentsByTypeUser` y deben enviarse bajo la estructura `{ file-ID: File }`, donde cada clave corresponde al identificador del documento y el valor es el archivo correspondiente.
|
|
711
|
+
|
|
712
|
+
El objeto completo de usuario que puede acompañar la solicitud es:
|
|
713
|
+
|
|
714
|
+
```js
|
|
715
|
+
{
|
|
716
|
+
email: "usuario@correo.com",
|
|
717
|
+
typeuser: 1,
|
|
718
|
+
name: "Nombre",
|
|
719
|
+
lastname: "Apellido",
|
|
720
|
+
kinddoc: "V",
|
|
721
|
+
doc: 12345678,
|
|
722
|
+
birthdate: "1990-01-01",
|
|
723
|
+
kindrif: "V",
|
|
724
|
+
gender: "M",
|
|
725
|
+
rif: 12345678,
|
|
726
|
+
phone: 4121234567,
|
|
727
|
+
kindphone: "0424",
|
|
728
|
+
state: "Estado",
|
|
729
|
+
municipality: "Municipio",
|
|
730
|
+
parish: "Parroquia",
|
|
731
|
+
postalcode: "1010",
|
|
732
|
+
address: "Dirección",
|
|
733
|
+
fiscaladdress: "Dirección fiscal",
|
|
734
|
+
fiscalkindphone: "0424",
|
|
735
|
+
fiscalphone: 4121234567,
|
|
736
|
+
occupation: "Ocupación",
|
|
737
|
+
degree: "Título",
|
|
738
|
+
university: "Universidad",
|
|
739
|
+
graduationyear: "2010",
|
|
740
|
+
collegiatenumber: "12345",
|
|
741
|
+
collegiateyear: "2011",
|
|
742
|
+
companyname: "Empresa",
|
|
743
|
+
companykindrif: "J",
|
|
744
|
+
companyrif: "J12345678",
|
|
745
|
+
companystate: "Estado",
|
|
746
|
+
companymunicipality: "Municipio",
|
|
747
|
+
companyparish: "Parroquia",
|
|
748
|
+
companyaddress: "Dirección empresa",
|
|
749
|
+
companykindphone: "0212",
|
|
750
|
+
companyphone: "2121234567",
|
|
751
|
+
companypostalcode: "1010",
|
|
752
|
+
companywebpage: "https://empresa.com",
|
|
753
|
+
companycommercialregister: "Registro comercial",
|
|
754
|
+
companyregisterdate: "2015-01-01",
|
|
755
|
+
companyregisternumber: "123456",
|
|
756
|
+
companyconstitutiondate: "2015-01-01",
|
|
757
|
+
companypublishdate: "2015-01-01",
|
|
758
|
+
companyconstitutiondecree: "Decreto",
|
|
759
|
+
companynumberdecree: "123",
|
|
760
|
+
positionprivate: "Cargo privado",
|
|
761
|
+
departmentprivate: "Departamento privado",
|
|
762
|
+
authorizedprivate: "Autorizado privado",
|
|
763
|
+
functionsprivate: "Funciones privado",
|
|
764
|
+
publishprivate: "2015-01-01",
|
|
765
|
+
issuedateprivate: "2015-01-01",
|
|
766
|
+
kindphoneprivate: "0424",
|
|
767
|
+
phoneprivate: 4121234567,
|
|
768
|
+
positionpublic: "Cargo público",
|
|
769
|
+
departmentpublic: "Departamento público",
|
|
770
|
+
authorizedpublic: "Autorizado público",
|
|
771
|
+
functionspublic: "Funciones público",
|
|
772
|
+
publishpublic: "2015-01-01",
|
|
773
|
+
issuedatepublic: "2015-01-01",
|
|
774
|
+
kindphonepublic: "0424",
|
|
775
|
+
phonepublic: 4121234567,
|
|
776
|
+
companyid: "uuid-empresa"
|
|
777
|
+
}
|
|
778
|
+
```
|
|
779
|
+
|
|
780
|
+
**Ejemplo:**
|
|
781
|
+
|
|
782
|
+
```javascript
|
|
783
|
+
try {
|
|
784
|
+
const userData = {
|
|
785
|
+
usr: "usuario@correo.com",
|
|
786
|
+
pwd: "contraseñaSegura123",
|
|
787
|
+
kinddoc: "V",
|
|
788
|
+
doc: "12345678",
|
|
789
|
+
// ...otros campos opcionales
|
|
790
|
+
files: {
|
|
791
|
+
"file-1": file1, // Instancia de File
|
|
792
|
+
"file-2": file2,
|
|
793
|
+
// ...otros documentos según los requerimientos
|
|
794
|
+
},
|
|
795
|
+
};
|
|
796
|
+
const response = await apacuana.createApacuanaUser(userData);
|
|
797
|
+
console.log("Usuario creado:", response.data);
|
|
798
|
+
} catch (error) {
|
|
799
|
+
console.error("Error al crear el usuario:", error.message);
|
|
800
|
+
}
|
|
801
|
+
```
|
|
802
|
+
|
|
383
803
|
## Manejo de Errores
|
|
804
|
+
|
|
384
805
|
El SDK utiliza dos clases personalizadas para gestionar los resultados: `ApacuanaSuccess` para éxitos y `ApacuanaAPIError` para fallos.
|
|
385
806
|
|
|
386
807
|
### `ApacuanaSuccess`
|
|
808
|
+
|
|
387
809
|
Cuando una operación se completa correctamente, la promesa se resuelve con una instancia de `ApacuanaSuccess`.
|
|
388
810
|
|
|
389
811
|
**Propiedades:**
|
|
812
|
+
|
|
390
813
|
- `success` (Boolean): Siempre `true`.
|
|
391
814
|
- `statusCode` (Number): El código de estado HTTP de la respuesta (ej. `200`).
|
|
392
815
|
- `data` (Object): El cuerpo de la respuesta de la API.
|
|
393
816
|
|
|
394
817
|
### `ApacuanaAPIError`
|
|
818
|
+
|
|
395
819
|
Cuando la API devuelve un error, la promesa es rechazada con una instancia de `ApacuanaAPIError`.
|
|
396
820
|
|
|
397
821
|
**Propiedades:**
|
|
822
|
+
|
|
398
823
|
- `success` (Boolean): Siempre `false`.
|
|
399
824
|
- `statusCode` (Number): El código de estado HTTP del error (ej. `400`, `404`, `500`).
|
|
400
825
|
- `errorCode` (String): Un código de error específico de Apacuana (ej. `INVALID_PARAMS`).
|
|
401
826
|
- `message` (String): Una descripción legible del error.
|
|
402
827
|
|
|
403
828
|
**Ejemplo de manejo de errores:**
|
|
829
|
+
|
|
404
830
|
```javascript
|
|
405
831
|
try {
|
|
406
832
|
// Forzamos un error
|
|
@@ -419,19 +845,20 @@ try {
|
|
|
419
845
|
|
|
420
846
|
### Listado de Códigos de Error
|
|
421
847
|
|
|
422
|
-
| `errorCode`
|
|
423
|
-
|
|
|
424
|
-
| `CONFIGURATION_ERROR`
|
|
425
|
-
| `INVALID_API_RESPONSE`
|
|
426
|
-
| `INVALID_PARAMETER`
|
|
427
|
-
| `INVALID_PARAMETER_FORMAT`
|
|
428
|
-
| `LOGICAL_API_ERROR`
|
|
429
|
-
| `NETWORK_ERROR`
|
|
430
|
-
| `NOT_IMPLEMENTED`
|
|
431
|
-
| `UNSUPPORTED_HTTP_METHOD`
|
|
432
|
-
| `UNSUPPORTED_INTEGRATION_TYPE` | El `integrationType` no es válido.
|
|
433
|
-
| `UNKNOWN_REQUEST_ERROR`
|
|
434
|
-
| `API_RESPONSE_ERROR`
|
|
848
|
+
| `errorCode` | Descripción |
|
|
849
|
+
| :----------------------------- | :---------------------------------------------------------------------- |
|
|
850
|
+
| `CONFIGURATION_ERROR` | Error en la configuración del SDK (ej. falta `apiKey`). |
|
|
851
|
+
| `INVALID_API_RESPONSE` | La respuesta de la API no tiene el formato esperado. |
|
|
852
|
+
| `INVALID_PARAMETER` | Uno o más parámetros de la función son inválidos. |
|
|
853
|
+
| `INVALID_PARAMETER_FORMAT` | El formato de un parámetro es incorrecto. |
|
|
854
|
+
| `LOGICAL_API_ERROR` | Error lógico devuelto por la API. |
|
|
855
|
+
| `NETWORK_ERROR` | Error de red, CORS o timeout. |
|
|
856
|
+
| `NOT_IMPLEMENTED` | La funcionalidad no está implementada para el `integrationType` actual. |
|
|
857
|
+
| `UNSUPPORTED_HTTP_METHOD` | Se utilizó un método HTTP no soportado. |
|
|
858
|
+
| `UNSUPPORTED_INTEGRATION_TYPE` | El `integrationType` no es válido. |
|
|
859
|
+
| `UNKNOWN_REQUEST_ERROR` | Error desconocido durante la petición. |
|
|
860
|
+
| `API_RESPONSE_ERROR` | La respuesta de la API contiene un error. |
|
|
435
861
|
|
|
436
862
|
## Licencia
|
|
863
|
+
|
|
437
864
|
Este SDK está distribuido bajo una licencia propietaria. Para más detalles, contacte con el equipo de Apacuana.
|
package/coverage/clover.xml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<coverage generated="
|
|
3
|
-
<project timestamp="
|
|
2
|
+
<coverage generated="1758816883044" clover="3.2.0">
|
|
3
|
+
<project timestamp="1758816883044" name="All files">
|
|
4
4
|
<metrics statements="563" coveredstatements="324" conditionals="388" coveredconditionals="134" methods="95" coveredmethods="49" elements="1046" coveredelements="507" complexity="0" loc="563" ncloc="563" packages="6" files="12" classes="12"/>
|
|
5
5
|
<package name="src">
|
|
6
6
|
<metrics statements="57" coveredstatements="15" conditionals="15" coveredconditionals="3" methods="20" coveredmethods="1"/>
|
|
@@ -176,7 +176,7 @@
|
|
|
176
176
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
177
177
|
Code coverage generated by
|
|
178
178
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
179
|
-
at 2025-09-
|
|
179
|
+
at 2025-09-25T16:14:42.985Z
|
|
180
180
|
</div>
|
|
181
181
|
<script src="prettify.js"></script>
|
|
182
182
|
<script>
|
|
@@ -835,7 +835,7 @@ export const requestCertificate = async (params) => {
|
|
|
835
835
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
836
836
|
Code coverage generated by
|
|
837
837
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
838
|
-
at 2025-09-
|
|
838
|
+
at 2025-09-25T16:14:42.985Z
|
|
839
839
|
</div>
|
|
840
840
|
<script src="../../prettify.js"></script>
|
|
841
841
|
<script>
|
|
@@ -508,7 +508,7 @@ export const validateFaceLiveness = async ({ sessionId }) => {
|
|
|
508
508
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
509
509
|
Code coverage generated by
|
|
510
510
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
511
|
-
at 2025-09-
|
|
511
|
+
at 2025-09-25T16:14:42.985Z
|
|
512
512
|
</div>
|
|
513
513
|
<script src="../../prettify.js"></script>
|
|
514
514
|
<script>
|
|
@@ -161,7 +161,7 @@
|
|
|
161
161
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
162
162
|
Code coverage generated by
|
|
163
163
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
164
|
-
at 2025-09-
|
|
164
|
+
at 2025-09-25T16:14:42.985Z
|
|
165
165
|
</div>
|
|
166
166
|
<script src="../../prettify.js"></script>
|
|
167
167
|
<script>
|
|
@@ -397,7 +397,7 @@ export const getRevocationReasons = async () => {
|
|
|
397
397
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
398
398
|
Code coverage generated by
|
|
399
399
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
400
|
-
at 2025-09-
|
|
400
|
+
at 2025-09-25T16:14:42.985Z
|
|
401
401
|
</div>
|
|
402
402
|
<script src="../../prettify.js"></script>
|
|
403
403
|
<script>
|
|
@@ -1405,7 +1405,7 @@ export const deleteSignatureVariant = async () => {
|
|
|
1405
1405
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
1406
1406
|
Code coverage generated by
|
|
1407
1407
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1408
|
-
at 2025-09-
|
|
1408
|
+
at 2025-09-25T16:14:42.985Z
|
|
1409
1409
|
</div>
|
|
1410
1410
|
<script src="../../prettify.js"></script>
|
|
1411
1411
|
<script>
|
|
@@ -433,7 +433,7 @@ export const createApacuanaUser = <span class="fstat-no" title="function not cov
|
|
|
433
433
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
434
434
|
Code coverage generated by
|
|
435
435
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
436
|
-
at 2025-09-
|
|
436
|
+
at 2025-09-25T16:14:42.985Z
|
|
437
437
|
</div>
|
|
438
438
|
<script src="../../prettify.js"></script>
|
|
439
439
|
<script>
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
102
102
|
Code coverage generated by
|
|
103
103
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
104
|
-
at 2025-09-
|
|
104
|
+
at 2025-09-25T16:14:42.985Z
|
|
105
105
|
</div>
|
|
106
106
|
<script src="../../prettify.js"></script>
|
|
107
107
|
<script>
|
|
@@ -241,7 +241,7 @@ export const close = <span class="fstat-no" title="function not covered" >()</sp
|
|
|
241
241
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
242
242
|
Code coverage generated by
|
|
243
243
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
244
|
-
at 2025-09-
|
|
244
|
+
at 2025-09-25T16:14:42.985Z
|
|
245
245
|
</div>
|
|
246
246
|
<script src="../../prettify.js"></script>
|
|
247
247
|
<script>
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
102
102
|
Code coverage generated by
|
|
103
103
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
104
|
-
at 2025-09-
|
|
104
|
+
at 2025-09-25T16:14:42.985Z
|
|
105
105
|
</div>
|
|
106
106
|
<script src="../../prettify.js"></script>
|
|
107
107
|
<script>
|
|
@@ -133,7 +133,7 @@ export default ApacuanaAPIError;
|
|
|
133
133
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
134
134
|
Code coverage generated by
|
|
135
135
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
136
|
-
at 2025-09-
|
|
136
|
+
at 2025-09-25T16:14:42.985Z
|
|
137
137
|
</div>
|
|
138
138
|
<script src="../../prettify.js"></script>
|
|
139
139
|
<script>
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
102
102
|
Code coverage generated by
|
|
103
103
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
104
|
-
at 2025-09-
|
|
104
|
+
at 2025-09-25T16:14:42.985Z
|
|
105
105
|
</div>
|
|
106
106
|
<script src="../prettify.js"></script>
|
|
107
107
|
<script>
|
|
@@ -577,7 +577,7 @@ export default apacuana;
|
|
|
577
577
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
578
578
|
Code coverage generated by
|
|
579
579
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
580
|
-
at 2025-09-
|
|
580
|
+
at 2025-09-25T16:14:42.985Z
|
|
581
581
|
</div>
|
|
582
582
|
<script src="../prettify.js"></script>
|
|
583
583
|
<script>
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
102
102
|
Code coverage generated by
|
|
103
103
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
104
|
-
at 2025-09-
|
|
104
|
+
at 2025-09-25T16:14:42.985Z
|
|
105
105
|
</div>
|
|
106
106
|
<script src="../../prettify.js"></script>
|
|
107
107
|
<script>
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
92
92
|
Code coverage generated by
|
|
93
93
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
94
|
-
at 2025-09-
|
|
94
|
+
at 2025-09-25T16:14:42.985Z
|
|
95
95
|
</div>
|
|
96
96
|
<script src="../../prettify.js"></script>
|
|
97
97
|
<script>
|
|
@@ -241,7 +241,7 @@ export const INTEGRATION_TYPE = {
|
|
|
241
241
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
242
242
|
Code coverage generated by
|
|
243
243
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
244
|
-
at 2025-09-
|
|
244
|
+
at 2025-09-25T16:14:42.985Z
|
|
245
245
|
</div>
|
|
246
246
|
<script src="../../prettify.js"></script>
|
|
247
247
|
<script>
|
|
@@ -1108,7 +1108,7 @@ export default {
|
|
|
1108
1108
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
1109
1109
|
Code coverage generated by
|
|
1110
1110
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1111
|
-
at 2025-09-
|
|
1111
|
+
at 2025-09-25T16:14:42.985Z
|
|
1112
1112
|
</div>
|
|
1113
1113
|
<script src="../../prettify.js"></script>
|
|
1114
1114
|
<script>
|
|
@@ -607,7 +607,7 @@ export const httpRequest = <span class="fstat-no" title="function not covered" >
|
|
|
607
607
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
608
608
|
Code coverage generated by
|
|
609
609
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
610
|
-
at 2025-09-
|
|
610
|
+
at 2025-09-25T16:14:42.985Z
|
|
611
611
|
</div>
|
|
612
612
|
<script src="../../prettify.js"></script>
|
|
613
613
|
<script>
|
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
132
132
|
Code coverage generated by
|
|
133
133
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
134
|
-
at 2025-09-
|
|
134
|
+
at 2025-09-25T16:14:42.985Z
|
|
135
135
|
</div>
|
|
136
136
|
<script src="../../prettify.js"></script>
|
|
137
137
|
<script>
|