@veriko-mx/sdk 0.4.11 → 0.4.13

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 (45) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +196 -38
  3. package/dist/cjs/client.d.ts +3 -2
  4. package/dist/cjs/client.d.ts.map +1 -1
  5. package/dist/cjs/client.js +3 -2
  6. package/dist/cjs/client.js.map +1 -1
  7. package/dist/cjs/generated/openapi.d.ts +1353 -195
  8. package/dist/cjs/generated/openapi.d.ts.map +1 -1
  9. package/dist/cjs/http.d.ts +2 -0
  10. package/dist/cjs/http.d.ts.map +1 -1
  11. package/dist/cjs/http.js +1 -1
  12. package/dist/cjs/http.js.map +1 -1
  13. package/dist/cjs/index.d.ts +1 -1
  14. package/dist/cjs/index.d.ts.map +1 -1
  15. package/dist/cjs/index.js.map +1 -1
  16. package/dist/cjs/resources.d.ts +104 -16
  17. package/dist/cjs/resources.d.ts.map +1 -1
  18. package/dist/cjs/resources.js +233 -34
  19. package/dist/cjs/resources.js.map +1 -1
  20. package/dist/cjs/types.d.ts +182 -22
  21. package/dist/cjs/types.d.ts.map +1 -1
  22. package/dist/cjs/types.js +6 -0
  23. package/dist/cjs/types.js.map +1 -1
  24. package/dist/esm/client.d.ts +3 -2
  25. package/dist/esm/client.d.ts.map +1 -1
  26. package/dist/esm/client.js +3 -2
  27. package/dist/esm/client.js.map +1 -1
  28. package/dist/esm/generated/openapi.d.ts +1353 -195
  29. package/dist/esm/generated/openapi.d.ts.map +1 -1
  30. package/dist/esm/http.d.ts +2 -0
  31. package/dist/esm/http.d.ts.map +1 -1
  32. package/dist/esm/http.js +1 -1
  33. package/dist/esm/http.js.map +1 -1
  34. package/dist/esm/index.d.ts +1 -1
  35. package/dist/esm/index.d.ts.map +1 -1
  36. package/dist/esm/index.js.map +1 -1
  37. package/dist/esm/resources.d.ts +104 -16
  38. package/dist/esm/resources.d.ts.map +1 -1
  39. package/dist/esm/resources.js +232 -34
  40. package/dist/esm/resources.js.map +1 -1
  41. package/dist/esm/types.d.ts +182 -22
  42. package/dist/esm/types.d.ts.map +1 -1
  43. package/dist/esm/types.js +6 -0
  44. package/dist/esm/types.js.map +1 -1
  45. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,52 @@ versiones según [SemVer](https://semver.org/lang/es/).
7
7
 
8
8
  Sin cambios todavía.
9
9
 
10
+ ## [0.4.13] — 2026-10-15
11
+
12
+ ### Añadido
13
+
14
+ - `catalog.speiCalendar()` (`GET /v1/public/spei-calendar/{year}`): el calendario de días inhábiles
15
+ SPEI de un año. Devuelve `SpeiCalendar`, con `non_business_days` y `source` en `attributes` y los
16
+ años con calendario en `coveredYears`. Admite `ifNoneMatch`, y su `ETag` queda en `etag`. No
17
+ consume cuota. Un año sin calendario se lanza como `NotFoundError` con
18
+ `spei_calendar_year_not_covered`.
19
+ - `validations.validateOcr()` y `validations.enqueueOcr()` aceptan `bancoEmisor` y `bancoReceptor`:
20
+ la clave SPEI de 4 o 5 dígitos sustituye al banco leído del comprobante antes de consultar a
21
+ Banxico.
22
+ - `validations.list()`, `validations.stats()` y `validations.export()` aceptan `banks`, hasta 50
23
+ claves SPEI en lista o separadas por comas; filtra por banco emisor o receptor.
24
+ - `webhooks.deliveries()`, `webhooks.iterDeliveries()` y `webhooks.exportDeliveries()` aceptan
25
+ `responseStatus`, `validationId`, `q`, `from`, `to`, `minAttempt` y `minResponseTimeMs`.
26
+ `status`, `eventType` y `responseStatus` admiten una lista, y el endpoint una lista de hasta 20.
27
+ Nuevo tipo `DeliveryFilters`.
28
+
29
+ ## [0.4.12] — 2026-10-02
30
+
31
+ ### Añadido
32
+
33
+ - `validations.recheck()` (`POST /v1/validations/{id}/recheck`): vuelve a consultar a Banxico el
34
+ estado de pago de una validación `valid` creada hace 72 horas como máximo, sin consumir cuota.
35
+ Devuelve `RecheckResult` con la validación y con `checkedAt`, `changed` y `previousStatus`. Si
36
+ Banxico reporta la devolución, la validación pasa a `returned`. No se reintenta sola.
37
+ - `validations.preparePurge()` y `validations.executePurge()`: el borrado definitivo de una
38
+ validación, en dos pasos. Devuelven `PurgePreparation` y `PurgeResult`. `executePurge()` no se
39
+ reintenta sola. Los tipos de `Validation` añaden `purged_at`.
40
+ - `cuentasCandidatas` en `validateTransfer()`, `validations.validate()`, `validations.validateOcr()`,
41
+ `validations.enqueue()` y `validations.enqueueOcr()`: de 2 a 3 cuentas en una sola validación y con
42
+ una sola unidad de cuota. Los tipos de `Validation` añaden `candidate_match`, con la posición y los
43
+ últimos 4 dígitos de la cuenta que coincidió.
44
+ - `retainImage` en `validations.validateOcr()` y `validations.enqueueOcr()`, y `image_retained` en los
45
+ tipos de `Validation`: con `retainImage: false` la plataforma no conserva el archivo del
46
+ comprobante.
47
+ - El evento `validation.returned` en `WEBHOOK_EVENTS`, que avisa cuando una validación `valid` pasa
48
+ después a `returned`, y `payment_status` (`PaymentStatus`) en `evento.data.attributes`.
49
+
50
+ ### Cambiado
51
+
52
+ - `cuentaBeneficiaria` deja de ser obligatoria cuando se envía `cuentasCandidatas`. Sin ninguna de
53
+ las dos, el SDK lanza `InvalidRequestError` con `cuenta_required`, y con las dos, con
54
+ `cuenta_y_candidatas_excluyentes`. En los dos casos no llama a la API.
55
+
10
56
  ## [0.4.11] — 2026-10-01
11
57
 
12
58
  ### Añadido
package/README.md CHANGED
@@ -46,25 +46,27 @@ La API consulta el CEP y devuelve un veredicto en el campo `status`:
46
46
  | `invalid` | Los datos enviados no forman una consulta válida |
47
47
  | `error` | Fallo durante el procesamiento; el motivo viaja en `error_code` |
48
48
 
49
- Con veredicto `valid`, el comprobante queda disponible en XML y en PDF.
49
+ Con veredicto `valid`, el comprobante queda disponible en XML y en PDF. Un `valid` es el veredicto
50
+ del momento de la consulta: Banxico puede reportar la devolución hasta 72 horas después, y la
51
+ validación pasa a `returned`.
50
52
 
51
53
  ## Las familias de operaciones
52
54
 
53
- El cliente agrupa las 66 operaciones M2M de la API en once familias:
54
-
55
- | familia | qué cubre |
56
- | ---------------------- | --------------------------------------------------------------------------------------------------------------------- |
57
- | `client.validations` | Validar por campos o por imagen, consultar, listar, exportar, la política de reintentos y la descarga del comprobante |
58
- | `client.webhooks` | Registrar endpoints, rotar su secreto, enviar un evento de prueba y leer el historial de entregas |
59
- | `client.catalog` | Catálogo de bancos SPEI, banco emisor de una tarjeta y estado del servicio de Banxico |
60
- | `client.beneficiaries` | Cuentas beneficiarias guardadas y la importación masiva, como ciclo completo |
61
- | `client.usage` | Cuota de validaciones, límites de tasa y registro de actividad de la API |
62
- | `client.account` | Perfil y política de reintentos predeterminada de la cuenta |
63
- | `client.dashboard` | Resumen del panel |
64
- | `client.plans` | Catálogo y comparación de planes públicos, sin clave de API |
65
- | `client.insights` | Resumen, tendencias, bancos y beneficiarios principales |
66
- | `client.finance` | Resumen, estado de cuenta, vistas previas y descargas financieras |
67
- | `client.billing` | Suscripción activa |
55
+ El cliente agrupa las 70 operaciones M2M de la API en once familias:
56
+
57
+ | familia | qué cubre |
58
+ | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
59
+ | `client.validations` | Validar por campos o por imagen, consultar, listar, exportar, revisar el estado de pago, borrar, la política de reintentos y la descarga del comprobante |
60
+ | `client.webhooks` | Registrar endpoints, rotar su secreto, enviar un evento de prueba y leer el historial de entregas |
61
+ | `client.catalog` | Catálogo de bancos SPEI, calendario de días inhábiles SPEI, banco emisor de una tarjeta y estado del servicio de Banxico |
62
+ | `client.beneficiaries` | Cuentas beneficiarias guardadas y la importación masiva, como ciclo completo |
63
+ | `client.usage` | Cuota de validaciones, límites de tasa y registro de actividad de la API |
64
+ | `client.account` | Perfil y política de reintentos predeterminada de la cuenta |
65
+ | `client.dashboard` | Resumen del panel |
66
+ | `client.plans` | Catálogo y comparación de planes públicos, sin clave de API |
67
+ | `client.insights` | Resumen, tendencias, bancos y beneficiarios principales |
68
+ | `client.finance` | Resumen, estado de cuenta, vistas previas y descargas financieras |
69
+ | `client.billing` | Suscripción activa |
68
70
 
69
71
  Las tres operaciones de uso más frecuente están también en la raíz del cliente, como atajo:
70
72
  `validateTransfer()`, `getValidation()` y `getCep()`.
@@ -102,7 +104,8 @@ const client = new Veriko({ apiKey: 'veriko_tu_clave_aqui' });
102
104
  La operación exige la fecha de envío, el importe, la cuenta beneficiaria y **la clave de rastreo
103
105
  o la referencia numérica**. Enviar las dos precisa la búsqueda. El banco emisor y el receptor son
104
106
  opcionales y mejoran la identificación. La API rechaza con `422` (`preflight_failed`) una petición
105
- sin `cuenta_beneficiaria`: no la busca entre los beneficiarios guardados.
107
+ sin cuenta: no la busca entre los beneficiarios guardados. Cuando no se sabe cuál fue la cuenta,
108
+ `cuentasCandidatas` sustituye a `cuentaBeneficiaria`.
106
109
 
107
110
  ```ts
108
111
  import { Veriko } from '@veriko-mx/sdk';
@@ -142,6 +145,12 @@ El SDK lee el archivo y lo codifica en base64. `imageUrl` recibe un comprobante
142
145
  HTTPS, y si se envían `image` e `imageUrl`, la API sólo considera `image`. Formatos: JPEG, PNG, WebP
143
146
  o PDF de 1 a 3 páginas, de hasta 12 MB.
144
147
 
148
+ `cuentasCandidatas` reemplaza a `cuentaBeneficiaria` cuando la imagen no muestra la cuenta.
149
+
150
+ `bancoEmisor` y `bancoReceptor` corrigen el banco que se leyó del comprobante. Llevan la clave SPEI
151
+ de 4 o 5 dígitos (`'40012'`), que sustituye a la leída antes de consultar a Banxico; un valor con
152
+ otro formato, como un nombre, se ignora y se conserva el leído.
153
+
145
154
  El comprobante de una validación por OCR se descarga con `client.validations.image(id)`.
146
155
 
147
156
  ### Sin esperar al veredicto
@@ -203,6 +212,50 @@ dígitos de la cuenta enviada (`sent_last4`) y de la que muestra la imagen (`rea
203
212
  validación por OCR. Ninguno cambia el veredicto, y los dos están ausentes cuando la API no los
204
213
  informa.
205
214
 
215
+ ### Varias cuentas candidatas
216
+
217
+ `cuentasCandidatas` lleva de 2 a 3 cuentas en una sola validación, con una sola unidad de cuota.
218
+
219
+ ```ts
220
+ const validation = await client.validateTransfer({
221
+ fecha: '2025-03-15',
222
+ monto: 15000.5,
223
+ claveRastreo: 'MXBA20250315001234',
224
+ cuentasCandidatas: ['012180004412345678', '002010077777777771'],
225
+ });
226
+
227
+ console.log(validation.attributes.candidate_match?.index); // posición en la lista enviada, desde 0
228
+ console.log(validation.attributes.candidate_match?.account_last4); // 7771
229
+ ```
230
+
231
+ `validateOcr()`, `enqueue()` y `enqueueOcr()` también la aceptan. La API consulta las cuentas en el
232
+ orden enviado y adopta la primera que coincide con la transferencia. `attributes.candidate_match`
233
+ trae su posición y sus últimos 4 dígitos, y la cuenta completa queda en
234
+ `attributes.normalized_data.cuenta_beneficiaria`. El veredicto no cambia.
235
+
236
+ Se envía una de las dos formas, no las dos: el tipo de los argumentos lo impide, y con
237
+ `cuentaBeneficiaria` y `cuentasCandidatas` juntas, o sin ninguna, el SDK lanza
238
+ `InvalidRequestError` (`cuenta_y_candidatas_excluyentes` o `cuenta_required`) y no llama a la API.
239
+ Una lista que no cumple se rechaza con `422` (`cuentas_candidatas_invalidas`).
240
+
241
+ ### Conservar el comprobante
242
+
243
+ La plataforma conserva el archivo de una validación por imagen, y `client.validations.image(id)` lo
244
+ descarga. Con `retainImage: false` lo borra en cuanto la validación llega a un estado terminal del
245
+ que ya no lo necesita. El veredicto y los datos extraídos se conservan.
246
+
247
+ ```ts
248
+ const validation = await client.validations.validateOcr({
249
+ image: 'comprobante.png',
250
+ retainImage: false,
251
+ });
252
+ console.log(validation.attributes.image_retained); // false
253
+ ```
254
+
255
+ `enqueueOcr()` también acepta `retainImage`. `image()` responde `410` con `image_not_retained`
256
+ cuando el archivo no se conserva, y la API rechaza con `422` (`invalid_retain_image`) un valor que
257
+ no es booleano.
258
+
206
259
  ### Listar y recorrer el historial
207
260
 
208
261
  ```ts
@@ -219,9 +272,10 @@ for await (const item of client.validations.iter({ from: '2025-03-01', to: '2025
219
272
  `totalPages` y `hasNext`.
220
273
 
221
274
  Los filtros (`status`, `type`, `from`, `to`, `search`, `playground`, `withDeleted`, `batchId`,
222
- `bank`, `amountMin`, `amountMax`, `clientRef` y `retryState`) van en `camelCase`. `status` acepta un estado o una
275
+ `bank`, `banks`, `amountMin`, `amountMax`, `clientRef` y `retryState`) van en `camelCase`. `status` acepta un estado o una
223
276
  lista, y `withDeleted: true` devuelve sólo las validaciones retiradas, mientras que `false` devuelve
224
- sólo las activas.
277
+ sólo las activas. `banks` filtra por varios bancos a la vez: hasta 50 claves SPEI, en lista o
278
+ separadas por comas, y devuelve las validaciones cuyo banco emisor o receptor sea cualquiera de ellos.
225
279
 
226
280
  Un listado trae menos campos que `get()`: no incluye los datos enviados, el resultado de Banxico ni
227
281
  los enlaces al comprobante.
@@ -248,6 +302,59 @@ con `cep_not_available` y el SDK lanza `NotFoundError`.
248
302
  Las descargas y las exportaciones devuelven el archivo y no un enlace: `content`, `contentType` y
249
303
  el `filename` que propone la API en `Content-Disposition`.
250
304
 
305
+ ## Revisar el pago después
306
+
307
+ `client.validations.recheck(id)` vuelve a consultar a Banxico el estado de pago de una validación
308
+ `valid` creada hace 72 horas como máximo, sin consumir cuota.
309
+
310
+ ```ts
311
+ const result = await client.validations.recheck(validation.id);
312
+
313
+ console.log(result.changed); // true si pasó de valid a returned
314
+ console.log(result.previousStatus); // 'valid'
315
+ console.log(result.validation.attributes.status); // 'returned'
316
+ ```
317
+
318
+ Si Banxico reporta `devuelto` o `en_proceso_devolucion`, la validación pasa a `returned`, conserva su
319
+ CEP y la API emite el webhook `validation.returned`. El estado del pago queda en
320
+ `attributes.banxico_result._payment_status`. Una validación que ya estaba en `returned` responde su
321
+ estado actual sin consultar a Banxico, y `checkedAt` vale `null`.
322
+
323
+ Cada validación admite una consulta cada 10 minutos: antes, el SDK lanza `RateLimitError` con
324
+ `recheck_rate_limited`, y `retryAfter` trae los segundos que faltan. Una validación en otro estado,
325
+ o con más de 72 horas, lanza `InvalidRequestError` con `recheck_not_eligible` o
326
+ `recheck_window_expired`. Si Banxico no entrega un estado legible, lanza `ServerError` con
327
+ `recheck_unavailable`: la validación conserva su intervalo y se puede reintentar de inmediato.
328
+
329
+ ## Borrar una validación
330
+
331
+ `client.validations.delete(id)` retira una validación del historial, pero el registro, el CEP, los
332
+ datos extraídos y el archivo del comprobante siguen existiendo. El borrado definitivo los elimina en
333
+ dos pasos: el primero describe lo que se borraría y emite un token de un solo uso, y el segundo lo
334
+ confirma.
335
+
336
+ ```ts
337
+ const preparation = await client.validations.preparePurge(validation.id);
338
+
339
+ console.log(preparation.attributes.will_delete); // lo que se borraría
340
+ console.log(preparation.attributes.expires_in); // segundos de vigencia del token
341
+
342
+ const result = await client.validations.executePurge(validation.id, {
343
+ confirmationToken: preparation.attributes.confirmation_token,
344
+ });
345
+ console.log(result.attributes.purged_at, result.attributes.file_removal);
346
+ ```
347
+
348
+ **El borrado es irreversible y no devuelve cuota.** La validación queda como una lápida: conserva el
349
+ veredicto, las fechas y el monto, y trae `attributes.purged_at`. Después, el CEP, el comprobante, los
350
+ reintentos y `recheck()` responden `410` con `validation_purged`. `file_removal` vale `pending`
351
+ cuando algún archivo no se pudo borrar en ese momento y el barrido diario lo termina.
352
+
353
+ Una validación en curso lanza `ConflictError` con `purge_validation_in_progress`. Un token vencido,
354
+ mal formado o de otra validación lanza `InvalidRequestError`, y uno ya usado, `ConflictError` con
355
+ `confirmation_token_already_used`. Si la respuesta de `executePurge()` no llega,
356
+ `client.getValidation(id)` dice si el borrado se completó.
357
+
251
358
  ## Registrar un webhook
252
359
 
253
360
  ```ts
@@ -269,13 +376,29 @@ tres seguidos. Cuando eso pasa, el estado queda en `auto_disabled` y se reactiva
269
376
 
270
377
  El historial de intentos está en `client.webhooks.deliveries()`, con o sin identificador de
271
378
  endpoint, y se recorre con `iterDeliveries()`. `exportDeliveries()` lo descarga en CSV o en XLSX.
272
- Los filtros `status` y `eventType` sólo existen en el listado global: con un endpoint y un filtro,
273
- el SDK consulta ese listado con `endpoint_id`.
379
+ Los filtros sólo existen en el listado global: con un endpoint y un filtro, o con una lista de hasta
380
+ 20 endpoints, el SDK consulta ese listado con `endpoint_id`.
381
+
382
+ ```ts
383
+ const failed = await client.webhooks.deliveries({
384
+ status: ['failed', 'retrying'],
385
+ responseStatus: ['5xx', 'none'],
386
+ from: '2026-10-01',
387
+ minAttempt: 2,
388
+ });
389
+ ```
390
+
391
+ `status`, `eventType` y `responseStatus` aceptan un valor o una lista. `responseStatus` admite un
392
+ código exacto (`404`), una familia (`'5xx'`) o `'none'` para las entregas sin respuesta. `from` y
393
+ `to` acotan la fecha de creación, `validationId` deja las de una validación, `minResponseTimeMs` las
394
+ respuestas lentas y `q` busca en el identificador, el endpoint, el evento, la validación y el código
395
+ HTTP. `exportDeliveries()` acepta los mismos filtros y `limit`.
274
396
 
275
397
  ## Catálogo y estado de Banxico
276
398
 
277
399
  ```ts
278
400
  const banks = await client.catalog.banks(); // instituciones SPEI con su código
401
+ const calendar = await client.catalog.speiCalendar(2026); // días inhábiles SPEI del año
279
402
  const card = await client.catalog.binLookup('455632'); // banco emisor de una tarjeta
280
403
  const status = await client.catalog.banxicoStatus();
281
404
 
@@ -285,6 +408,12 @@ console.log(status.attributes.status); // 'operational'
285
408
  `banxicoStatus()` sirve para distinguir un `cep_unavailable` propio de la transferencia de una caída
286
409
  del servicio, y `banxicoTimeseries()` devuelve la serie de latencia o de veredictos por ventana.
287
410
 
411
+ `speiCalendar()` devuelve `SpeiCalendar`: `attributes.non_business_days` trae los días inhábiles de
412
+ lunes a viernes (`YYYY-MM-DD`), `attributes.source` la disposición de la CNBV publicada en el DOF y
413
+ `coveredYears` los años con calendario. Los sábados y los domingos son inhábiles siempre y no se
414
+ repiten en la lista. La consulta no consume cuota. Un año sin calendario se lanza como
415
+ `NotFoundError` con `spei_calendar_year_not_covered`.
416
+
288
417
  ## Beneficiarios
289
418
 
290
419
  `client.beneficiaries` guarda las cuentas a las que se paga: CLABE, tarjeta o celular DiMo. El tipo
@@ -345,9 +474,9 @@ cuota. `breakdown()`, `heatmap()` y `apiUsage()` desglosan el consumo, y
345
474
 
346
475
  ## Lecturas condicionales
347
476
 
348
- `client.validations.get()` y `client.catalog.banks()` admiten `ifNoneMatch`. La respuesta trae el
349
- `ETag` en `etag`, y cuando nada cambió la API responde `304`, que el SDK lanza como `ApiError` con
350
- `status` 304.
477
+ `client.validations.get()`, `client.catalog.banks()` y `client.catalog.speiCalendar()` admiten
478
+ `ifNoneMatch`. La respuesta trae el `ETag` en `etag`, y cuando nada cambió la API responde `304`,
479
+ que el SDK lanza como `ApiError` con `status` 304.
351
480
 
352
481
  ```ts
353
482
  import { ApiError } from '@veriko-mx/sdk';
@@ -403,6 +532,32 @@ para decidir el código de respuesta aparte. La comparación es en tiempo consta
403
532
 
404
533
  El receptor completo está en [`examples/express-webhook.mjs`](examples/express-webhook.mjs).
405
534
 
535
+ ### Una devolución posterior
536
+
537
+ `validation.returned` avisa cuando una validación que había salido `valid` pasa después a
538
+ `returned`. El endpoint recibe sólo los eventos a los que se suscribió, así que hay que añadirlo
539
+ además de `validation.completed`:
540
+
541
+ ```ts
542
+ const endpoint = await client.webhooks.create({
543
+ url: 'https://miapp.example.com/hooks/pagos',
544
+ events: ['validation.completed', 'validation.returned'],
545
+ });
546
+ ```
547
+
548
+ El cuerpo es el de `validation.completed` más `attributes.payment_status`, que `parseWebhook()`
549
+ entrega en `evento.data.attributes.payment_status`:
550
+
551
+ ```ts
552
+ if (evento.event === 'validation.returned') {
553
+ console.log(evento.data?.attributes.payment_status?.code); // devuelto o en_proceso_devolucion
554
+ }
555
+ ```
556
+
557
+ `checked_at` es el instante de la consulta. En el resto de los eventos `payment_status` está
558
+ ausente. El evento no se emite al crear la validación: una operación que llega ya devuelta se
559
+ entrega con `validation.completed` y `status=returned`.
560
+
406
561
  ### Lo que Banxico confirmó
407
562
 
408
563
  Cuando `banxico_status` es `valid`, o `returned` con CEP descargado, `evento.data.attributes`
@@ -460,7 +615,9 @@ Hay dos mecanismos distintos con el mismo nombre.
460
615
 
461
616
  **Los del cliente** repiten una petición que falló por causas pasajeras. El SDK reintenta los
462
617
  `5xx`, el `408` y el `429`, y respeta el `Retry-After` de la respuesta cuando lo trae. El resto de
463
- los `4xx` no se reintenta, porque la petición hay que corregirla antes de repetirla.
618
+ los `4xx` no se reintenta, porque la petición hay que corregirla antes de repetirla. `recheck()` y
619
+ `executePurge()` no se reintentan solas: la primera tiene su propio tope de una consulta cada 10
620
+ minutos, y el borrado es irreversible.
464
621
 
465
622
  ```ts
466
623
  const client = new Veriko({ maxRetries: 3 }); // 0 los desactiva; por omisión son 2
@@ -538,18 +695,19 @@ try {
538
695
  }
539
696
  ```
540
697
 
541
- | excepción | estado |
542
- | ---------------------------- | ----------------------------------------------- |
543
- | `AuthenticationError` | `401` |
544
- | `ForbiddenError` | `403` |
545
- | `NotFoundError` | `404` |
546
- | `ConflictError` | `409` |
547
- | `InvalidRequestError` | `400`, `413`, `422` |
548
- | `RateLimitError` | `429` |
549
- | `ServerError` | `5xx` |
550
- | `ConnectionError` | Sin respuesta, con los reintentos agotados |
551
- | `TimeoutError` | `waitFor()` o `importWait()` agotaron su tiempo |
552
- | `SignatureVerificationError` | La firma de un webhook no cuadra |
698
+ | excepción | estado |
699
+ | ---------------------------- | -------------------------------------------------- |
700
+ | `AuthenticationError` | `401` |
701
+ | `ForbiddenError` | `403` |
702
+ | `NotFoundError` | `404` |
703
+ | `ConflictError` | `409` |
704
+ | `InvalidRequestError` | `400`, `413`, `422` |
705
+ | `RateLimitError` | `429` |
706
+ | `ServerError` | `5xx` |
707
+ | `ApiError` | Cualquier otro estado de la API, por ejemplo `410` |
708
+ | `ConnectionError` | Sin respuesta, con los reintentos agotados |
709
+ | `TimeoutError` | `waitFor()` o `importWait()` agotaron su tiempo |
710
+ | `SignatureVerificationError` | La firma de un webhook no cuadra |
553
711
 
554
712
  Cada error de la API trae `requestId`, que identifica la petición en los registros del sistema.
555
713
 
@@ -581,7 +739,7 @@ completos, por si hace falta una operación que el SDK todavía no envuelve.
581
739
 
582
740
  ## Superficie M2M
583
741
 
584
- El SDK cubre exactamente las 66 operaciones del spec público: `security: []` para las públicas y
742
+ El SDK cubre exactamente las 70 operaciones del spec público: `security: []` para las públicas y
585
743
  `ApiKeyAuth` para las autenticadas.
586
744
 
587
745
  Entre ellas están el perfil y su política de reintentos, el resumen del panel, los dos endpoints
@@ -7,7 +7,7 @@ export declare const DEFAULT_TIMEOUT_MS = 30000;
7
7
  export declare const API_KEY_ENV_VAR = "VERIKO_API_KEY";
8
8
  export declare const BASE_URL_ENV_VAR = "VERIKO_BASE_URL";
9
9
  /** La versión que viaja en el `User-Agent`. `test/client.test.ts` la compara con `package.json`. */
10
- export declare const VERSION = "0.4.11";
10
+ export declare const VERSION = "0.4.13";
11
11
  export interface VerikoOptions {
12
12
  /** La clave de API. Por omisión, `VERIKO_API_KEY`. */
13
13
  apiKey?: string;
@@ -95,7 +95,8 @@ export declare class Veriko {
95
95
  * Devuelve el veredicto en `attributes.status`: `valid`, `not_found`,
96
96
  * `cep_unavailable`, `returned` o `error`.
97
97
  *
98
- * La operación exige `cuentaBeneficiaria`, y `claveRastreo` o
98
+ * La operación exige `cuentaBeneficiaria`, o `cuentasCandidatas` cuando no se
99
+ * sabe cuál fue la cuenta (una de las dos, no las dos), y `claveRastreo` o
99
100
  * `referenciaNumerica`. Enviar las dos últimas precisa la búsqueda. La fecha
100
101
  * es la de envío, en `YYYY-MM-DD`. `clientRef` es una referencia propia que
101
102
  * vuelve en la validación y en los webhooks.
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAEnE,OAAO,EAAiB,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EACL,OAAO,EACP,aAAa,EACb,OAAO,EACP,OAAO,EACP,SAAS,EACT,OAAO,EACP,QAAQ,EACR,KAAK,EACL,KAAK,EACL,WAAW,EACX,QAAQ,EACT,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,oBAAoB,EACpB,sBAAsB,EACtB,UAAU,EACV,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,gBAAgB,6BAA6B,CAAC;AAC3D,eAAO,MAAM,kBAAkB,QAAS,CAAC;AACzC,eAAO,MAAM,eAAe,mBAAmB,CAAC;AAChD,eAAO,MAAM,gBAAgB,oBAAoB,CAAC;AAElD,oGAAoG;AACpG,eAAO,MAAM,OAAO,WAAW,CAAC;AAEhC,MAAM,WAAW,aAAa;IAC5B,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IAEtC,kDAAkD;IAClD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,+DAA+D;IAC/D,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,sDAAsD;IACtD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,yBAAyB;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,kCAAkC;IAClC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,uCAAuC;IACvC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,yCAAyC;IACzC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,uCAAuC;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;gBAEd,OAAO,GAAE,aAAkB;IA+BvC,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC;IAIrE;;;;;;;OAOG;IACH,aAAa,CACX,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,kBAAkB,CAAC;IAI9B;;;;;;OAMG;IACH,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,SAAS,CAAA;KAAO,GAAG,OAAO,CAAC,WAAW,CAAC;CAGzF"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAEnE,OAAO,EAAiB,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EACL,OAAO,EACP,aAAa,EACb,OAAO,EACP,OAAO,EACP,SAAS,EACT,OAAO,EACP,QAAQ,EACR,KAAK,EACL,KAAK,EACL,WAAW,EACX,QAAQ,EACT,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,oBAAoB,EACpB,sBAAsB,EACtB,UAAU,EACV,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,gBAAgB,6BAA6B,CAAC;AAC3D,eAAO,MAAM,kBAAkB,QAAS,CAAC;AACzC,eAAO,MAAM,eAAe,mBAAmB,CAAC;AAChD,eAAO,MAAM,gBAAgB,oBAAoB,CAAC;AAElD,oGAAoG;AACpG,eAAO,MAAM,OAAO,WAAW,CAAC;AAEhC,MAAM,WAAW,aAAa;IAC5B,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IAEtC,kDAAkD;IAClD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,+DAA+D;IAC/D,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,sDAAsD;IACtD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,yBAAyB;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,kCAAkC;IAClC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,uCAAuC;IACvC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,yCAAyC;IACzC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,uCAAuC;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;gBAEd,OAAO,GAAE,aAAkB;IA+BvC,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC;IAIrE;;;;;;;OAOG;IACH,aAAa,CACX,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,kBAAkB,CAAC;IAI9B;;;;;;OAMG;IACH,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,SAAS,CAAA;KAAO,GAAG,OAAO,CAAC,WAAW,CAAC;CAGzF"}
@@ -9,7 +9,7 @@ exports.DEFAULT_TIMEOUT_MS = 30_000;
9
9
  exports.API_KEY_ENV_VAR = 'VERIKO_API_KEY';
10
10
  exports.BASE_URL_ENV_VAR = 'VERIKO_BASE_URL';
11
11
  /** La versión que viaja en el `User-Agent`. `test/client.test.ts` la compara con `package.json`. */
12
- exports.VERSION = '0.4.11';
12
+ exports.VERSION = '0.4.13';
13
13
  /**
14
14
  * Cliente de la API de Veriko.
15
15
  *
@@ -107,7 +107,8 @@ class Veriko {
107
107
  * Devuelve el veredicto en `attributes.status`: `valid`, `not_found`,
108
108
  * `cep_unavailable`, `returned` o `error`.
109
109
  *
110
- * La operación exige `cuentaBeneficiaria`, y `claveRastreo` o
110
+ * La operación exige `cuentaBeneficiaria`, o `cuentasCandidatas` cuando no se
111
+ * sabe cuál fue la cuenta (una de las dos, no las dos), y `claveRastreo` o
111
112
  * `referenciaNumerica`. Enviar las dos últimas precisa la búsqueda. La fecha
112
113
  * es la de envío, en `YYYY-MM-DD`. `clientRef` es una referencia propia que
113
114
  * vuelve en la validación y en los webhooks.
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}