@veriko-mx/sdk 0.4.5 → 0.4.6

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/CHANGELOG.md CHANGED
@@ -7,6 +7,16 @@ versiones según [SemVer](https://semver.org/lang/es/).
7
7
 
8
8
  Sin cambios todavía.
9
9
 
10
+ ## [0.4.6] — 2026-09-24
11
+
12
+ ### Cambiado
13
+
14
+ - Los tipos siguen la versión 1.60.0 del spec público. Las respuestas `429`
15
+ declaran `meta.retry_after`, con el mismo valor que la cabecera `Retry-After`.
16
+ - Las descripciones de los tipos documentan los códigos de error de validación y
17
+ de filtros: `invalid_bank_code`, `intra_bank_no_cep`, `invalid_field_type`,
18
+ `invalid_filter` y `webhook_description_too_long`.
19
+
10
20
  ## [0.4.5] — 2026-09-22
11
21
 
12
22
  Sin cambios en la API. Actualiza documentación y metadatos.
@@ -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.5";
10
+ export declare const VERSION = "0.4.6";
11
11
  export interface VerikoOptions {
12
12
  /** La clave de API. Por omisión, `VERIKO_API_KEY`. */
13
13
  apiKey?: string;
@@ -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.5';
12
+ exports.VERSION = '0.4.6';
13
13
  /**
14
14
  * Cliente de la API de Veriko.
15
15
  *
@@ -1966,6 +1966,16 @@ export interface components {
1966
1966
  /** @description Identificador del recurso, único dentro de su `type`. Viaja siempre como cadena, incluso cuando su origen es una columna autonumérica. */
1967
1967
  id?: string;
1968
1968
  };
1969
+ /**
1970
+ * Format: date-time
1971
+ * @description Timestamp ISO 8601 en UTC con sufijo `Z` explícito; por ejemplo,
1972
+ * `"2026-05-01T05:14:38Z"`.
1973
+ *
1974
+ * Los campos `*_at`, `*_end`, `*_start` y `*_date` adoptan esta forma.
1975
+ * `meta.datetime` describe el mismo contrato en la respuesta.
1976
+ * @example 2026-05-01T05:14:38Z
1977
+ */
1978
+ TimestampUTC: string;
1969
1979
  /** @description Conjunto consolidado del usuario autenticado que devuelve `GET /v1/users/me`: perfil, metadatos de la clave de API, suscripción activa, estado de la autenticación de 2 factores (2FA), permisos del rol y resumen de notificaciones en una sola llamada. */
1970
1980
  UserMeBundle: {
1971
1981
  /**
@@ -2118,16 +2128,6 @@ export interface components {
2118
2128
  */
2119
2129
  _warnings?: ("subscription_unavailable" | "permissions_unavailable" | "notifications_unread_count_unavailable" | "notifications_push_unavailable" | "notifications_telegram_unavailable" | "legal_accepted_unavailable")[];
2120
2130
  };
2121
- /**
2122
- * Format: date-time
2123
- * @description Timestamp ISO 8601 en UTC con sufijo `Z` explícito; por ejemplo,
2124
- * `"2026-05-01T05:14:38Z"`.
2125
- *
2126
- * Los campos `*_at`, `*_end`, `*_start` y `*_date` adoptan esta forma.
2127
- * `meta.datetime` describe el mismo contrato en la respuesta.
2128
- * @example 2026-05-01T05:14:38Z
2129
- */
2130
- TimestampUTC: string;
2131
2131
  /** @description Política de reintentos de una validación: activación, límite, intervalo y resultados elegibles. */
2132
2132
  RetryPolicy: {
2133
2133
  /**
@@ -2165,12 +2165,12 @@ export interface components {
2165
2165
  fecha: string;
2166
2166
  /**
2167
2167
  * Format: double
2168
- * @description Importe de la transferencia (en pesos mexicanos — MXN), mayor que cero y con hasta dos decimales.
2168
+ * @description Importe de la transferencia (en pesos mexicanos — MXN), mayor que cero y con hasta dos decimales. No se acepta en notación científica (por ejemplo `1e-5`) cuando se envía como texto.
2169
2169
  * @example 15000.5
2170
2170
  */
2171
2171
  monto: number;
2172
2172
  /**
2173
- * @description Clave de rastreo de la transferencia (entre 1 a 30 caracteres). Acepta letras, números, guiones, diagonales y espacios. Requerida si `referencia_numerica` no es enviada; ambas pueden incluirse simultáneamente para mayor precisión de búsqueda.
2173
+ * @description Clave de rastreo de la transferencia (entre 1 a 30 caracteres). Acepta letras, números, guiones, diagonales y espacios. Se recorta y se le quitan caracteres invisibles de ancho cero antes de validarse, para que la misma clave copiada y pegada compare igual en toda la plataforma. Requerida si `referencia_numerica` no es enviada; ambas pueden incluirse simultáneamente para mayor precisión de búsqueda.
2174
2174
  * @example MXBA20250315001234
2175
2175
  */
2176
2176
  clave_rastreo?: string;
@@ -2190,7 +2190,7 @@ export interface components {
2190
2190
  */
2191
2191
  receptor?: string;
2192
2192
  /**
2193
- * @description Cuenta bancaria receptora de la transferencia. Puede ser CLABE (18 dígitos), tarjeta (16 dígitos) o celular DiMo (10 dígitos), y el tipo se identifica por la longitud. Para celular DiMo, si el banco receptor no puede resolverse por el campo `receptor`, por los beneficiarios registrados ni por el directorio de cuentas, la respuesta es un estado HTTP `422` (con `bank_code_unresolvable_for_phone` en el cuerpo).
2193
+ * @description Cuenta bancaria receptora de la transferencia. Puede ser CLABE (18 dígitos), tarjeta (16 dígitos) o celular DiMo (10 dígitos), y el tipo se identifica por la longitud de sus dígitos. Los espacios y guiones que separan grupos ("0121 8000 4412 345678") se ignoran automáticamente antes de contar la longitud. Para celular DiMo, si el banco receptor no puede resolverse por el campo `receptor`, por los beneficiarios registrados ni por el directorio de cuentas, la respuesta es un estado HTTP `422` (con `bank_code_unresolvable_for_phone` en el cuerpo).
2194
2194
  * @example 012180004412345678
2195
2195
  */
2196
2196
  cuenta_beneficiaria?: string;
@@ -3765,7 +3765,7 @@ export interface components {
3765
3765
  /** @description Eventos a los que se suscribe el endpoint webhook. Entre 1 y 10. */
3766
3766
  events: ("validation.completed" | "validation.failed" | "validation.error" | "validation.retry.scheduled" | "validation.retry.resolved" | "validation.retry.exhausted" | "billing.payment_succeeded" | "billing.payment_failed" | "billing.trial_will_end" | "billing.subscription_canceled" | "billing.invoice_upcoming")[];
3767
3767
  /**
3768
- * @description Etiqueta libre para distinguir el endpoint webhook de los demás. `null` la omite; el servicio recorta el texto a 255 caracteres.
3768
+ * @description Etiqueta libre para distinguir el endpoint webhook de los demás. `null` la omite; más de 255 caracteres responde `422 webhook_description_too_long`.
3769
3769
  * @example Alta de pagos en el ERP
3770
3770
  */
3771
3771
  description?: string | null;
@@ -3781,7 +3781,7 @@ export interface components {
3781
3781
  /** @description Nuevos eventos a los que se suscribe el endpoint webhook. Sustituyen a la lista anterior. Entre 1 y 10. */
3782
3782
  events?: ("validation.completed" | "validation.failed" | "validation.error" | "validation.retry.scheduled" | "validation.retry.resolved" | "validation.retry.exhausted" | "billing.payment_succeeded" | "billing.payment_failed" | "billing.trial_will_end" | "billing.subscription_canceled" | "billing.invoice_upcoming")[];
3783
3783
  /**
3784
- * @description Nueva etiqueta libre para distinguir el endpoint webhook de los demás. `null` la elimina; el servicio recorta el texto a 255 caracteres.
3784
+ * @description Nueva etiqueta libre para distinguir el endpoint webhook de los demás. `null` la elimina; más de 255 caracteres responde `422 webhook_description_too_long`.
3785
3785
  * @example Alta de pagos en el ERP
3786
3786
  */
3787
3787
  description?: string | null;
@@ -4992,11 +4992,20 @@ export interface components {
4992
4992
  * ],
4993
4993
  * "meta": {
4994
4994
  * "version": "1.51.0",
4995
- * "request_id": "f7a8b9c0d1e2"
4995
+ * "request_id": "f7a8b9c0d1e2",
4996
+ * "retry_after": 45
4996
4997
  * }
4997
4998
  * }
4998
4999
  */
4999
- "application/json": components["schemas"]["ErrorResponse"];
5000
+ "application/json": components["schemas"]["ErrorResponse"] & {
5001
+ meta?: {
5002
+ /**
5003
+ * @description Segundos a esperar antes de reintentar. Es el mismo valor que la cabecera `Retry-After`, para clientes que no leen cabeceras HTTP.
5004
+ * @example 45
5005
+ */
5006
+ retry_after?: number;
5007
+ };
5008
+ };
5000
5009
  };
5001
5010
  };
5002
5011
  /** @description Validación asíncrona aceptada. Se debe sondear `GET /v1/validations/{id}` hasta uno de los estados terminales (`valid`, `not_found`, `cep_unavailable`, `invalid`, `returned`, `failed`, `error`). `meta.next_poll_after_seconds` indica el intervalo recomendado para el primer sondeo. */
@@ -5238,7 +5247,7 @@ export interface operations {
5238
5247
  401: components["responses"]["Unauthorized"];
5239
5248
  409: components["responses"]["IdempotencyKeyInProgress"];
5240
5249
  413: components["responses"]["PayloadTooLarge"];
5241
- /** @description Falló la validación de la petición. Códigos típicos: `clave_or_ref_required`, `required` (fecha/monto), `invalid_date`, `invalid_amount`, `invalid_account_format`, `invalid_account_length`, `invalid_clabe_checksum`, `invalid_card_luhn`, `invalid_receptor_participante`, `retry_policy_invalid`, `retry_pending_cap_exceeded`. También se emite cuando se reutiliza `Idempotency-Key` con un cuerpo distinto (`idempotency_key_reused`). */
5250
+ /** @description Falló la validación de la petición. Códigos típicos: `clave_or_ref_required`, `required` (fecha/monto), `invalid_date`, `invalid_amount`, `invalid_account_format`, `invalid_account_length`, `invalid_clabe_checksum`, `invalid_card_luhn`, `invalid_bank_code` (`emisor`/`receptor` no reconocidos), `intra_bank_no_cep` (emisor y receptor son el mismo banco), `invalid_field_type` (un campo que debe ser texto llegó como arreglo u objeto — p. ej. `emisor`, `receptor` o `referencia_numerica`), `invalid_receptor_participante`, `retry_policy_invalid`, `retry_pending_cap_exceeded`. También se emite cuando se reutiliza `Idempotency-Key` con un cuerpo distinto (`idempotency_key_reused`). */
5242
5251
  422: {
5243
5252
  headers: {
5244
5253
  [name: string]: unknown;
@@ -5341,17 +5350,17 @@ export interface operations {
5341
5350
  */
5342
5351
  type?: "direct" | "ocr";
5343
5352
  /**
5344
- * @description Filtro — Fecha inicial inclusiva, aplicada sobre la creación de la validación.
5353
+ * @description Filtro — Fecha inicial inclusiva, aplicada sobre la creación de la validación. Enviarlo como lista (`from[]=`) devuelve un estado HTTP `422` con `invalid_filter`.
5345
5354
  * @example 2025-01-01
5346
5355
  */
5347
5356
  from?: string;
5348
5357
  /**
5349
- * @description Filtro — Fecha final inclusiva, aplicada sobre la creación de la validación.
5358
+ * @description Filtro — Fecha final inclusiva, aplicada sobre la creación de la validación. Enviarlo como lista (`to[]=`) devuelve un estado HTTP `422` con `invalid_filter`.
5350
5359
  * @example 2025-03-31
5351
5360
  */
5352
5361
  to?: string;
5353
5362
  /**
5354
- * @description Filtro — Texto buscado, sin distinguir mayúsculas y minúsculas, en los datos enviados, normalizados y devueltos por Banxico. `%` y `_` se tratan como caracteres literales.
5363
+ * @description Filtro — Texto buscado, sin distinguir mayúsculas y minúsculas, en los datos enviados, normalizados y devueltos por Banxico. `%` y `_` se tratan como caracteres literales, y los 100 caracteres se cuentan por carácter (no por byte), así que un acento no se parte a la mitad. Si el texto, sin espacios ni guiones, queda compuesto sólo por dígitos, también se busca esa forma sin separadores contra la cuenta beneficiaria.
5355
5364
  * @example scotiabank
5356
5365
  */
5357
5366
  search?: string;
@@ -5366,22 +5375,22 @@ export interface operations {
5366
5375
  */
5367
5376
  with_deleted?: "0" | "1";
5368
5377
  /**
5369
- * @description Filtro — Identificador del trabajo de importación que generó las validaciones.
5378
+ * @description Filtro — Identificador del trabajo de importación que generó las validaciones. Enviarlo como lista (`batch_id[]=`) devuelve un estado HTTP `422` con `invalid_filter` en vez de ignorarse.
5370
5379
  * @example 42
5371
5380
  */
5372
5381
  batch_id?: number;
5373
5382
  /**
5374
- * @description Filtro — Clave SPEI del banco emisor o receptor en la petición original. Los valores que no tengan de 1 a 5 dígitos se ignoran.
5383
+ * @description Filtro — Clave SPEI del banco emisor o receptor en la petición original. Los valores que no tengan de 1 a 5 dígitos se ignoran; enviarlo como lista (`bank[]=`) devuelve un estado HTTP `422` con `invalid_filter`.
5375
5384
  * @example 012
5376
5385
  */
5377
5386
  bank?: string;
5378
5387
  /**
5379
- * @description Filtro — Importe mínimo inclusivo. Se aplica de forma independiente de `amount_max`.
5388
+ * @description Filtro — Importe mínimo inclusivo, como número. El servidor también tolera enviarlo como texto con separador de miles o símbolo de moneda ("1,000.50", "$500") y lo normaliza con el mismo algoritmo que el resto de la plataforma, pero el contrato es un número: un cliente tipado debe mandarlo así. Un valor no vacío que no se reconozca como número devuelve un estado HTTP `422` con `invalid_filter`, en vez de ignorarse en silencio. Se aplica de forma independiente de `amount_max`.
5380
5389
  * @example 1000.5
5381
5390
  */
5382
5391
  amount_min?: number;
5383
5392
  /**
5384
- * @description Filtro — Importe máximo inclusivo. Se aplica de forma independiente de `amount_min`.
5393
+ * @description Filtro — Importe máximo inclusivo, como número. Mismas reglas de tolerancia de formato y de error que `amount_min`. Se aplica de forma independiente de `amount_min`.
5385
5394
  * @example 50000
5386
5395
  */
5387
5396
  amount_max?: number;
@@ -5421,7 +5430,7 @@ export interface operations {
5421
5430
  };
5422
5431
  };
5423
5432
  401: components["responses"]["Unauthorized"];
5424
- /** @description Valor inválido para `retry_state` (código `invalid_filter`). */
5433
+ /** @description Un filtro no se pudo aplicar (código `invalid_filter`): valor no admitido en `retry_state`, `playground` o `amount_min`/`amount_max` con formato irreconocible; o tipo incorrecto en `from`, `to`, `search`, `bank` o `batch_id` (por ejemplo, enviados como lista `from[]=`). */
5425
5434
  422: {
5426
5435
  headers: {
5427
5436
  [name: string]: unknown;
@@ -6291,7 +6300,7 @@ export interface operations {
6291
6300
  401: components["responses"]["Unauthorized"];
6292
6301
  403: components["responses"]["Forbidden"];
6293
6302
  413: components["responses"]["PayloadTooLarge"];
6294
- /** @description La cuenta no pasó la validación, o el alta chocó con un tope. Los códigos posibles son `account_number_required`, `invalid_account_length`, `clabe_prefix_not_recognized`, `bank_code_required_for_phone`, `beneficiary_already_registered` y `plan_cap_exceeded`. */
6303
+ /** @description La cuenta no pasó la validación, o el alta chocó con un tope. Los códigos posibles son `account_number_required`, `account_number_invalid_type`, `label_invalid_type`, `invalid_account_length`, `clabe_prefix_not_recognized`, `bank_code_required_for_phone`, `beneficiary_already_registered` y `plan_cap_exceeded`. `account_number_invalid_type` y `label_invalid_type` aparecen cuando el campo llega con un tipo distinto de cadena de texto. Todo error de campo trae `source.pointer`. */
6295
6304
  422: {
6296
6305
  headers: {
6297
6306
  [name: string]: unknown;
@@ -6366,7 +6375,7 @@ export interface operations {
6366
6375
  403: components["responses"]["Forbidden"];
6367
6376
  404: components["responses"]["NotFound"];
6368
6377
  413: components["responses"]["PayloadTooLarge"];
6369
- /** @description El cuerpo no pasó la validación. Los códigos posibles son `no_valid_fields`, `invalid_account_length`, `clabe_prefix_not_recognized` y `bank_code_required_for_phone`. */
6378
+ /** @description El cuerpo no pasó la validación. Los códigos posibles son `no_valid_fields`, `invalid_account_length`, `clabe_prefix_not_recognized`, `bank_code_required_for_phone`, `account_number_invalid_type` y `label_invalid_type`. Las dos últimas aparecen cuando `account_number` o `label` llegan con un tipo distinto de cadena de texto (por ejemplo, un número o un arreglo). Todo error de campo trae `source.pointer`. */
6370
6379
  422: {
6371
6380
  headers: {
6372
6381
  [name: string]: unknown;
@@ -7217,7 +7226,7 @@ export interface operations {
7217
7226
  401: components["responses"]["Unauthorized"];
7218
7227
  403: components["responses"]["Forbidden"];
7219
7228
  413: components["responses"]["PayloadTooLarge"];
7220
- /** @description La URL o la lista de eventos no superan la validación, o la cuenta de usuario alcanzó su tope de endpoints. */
7229
+ /** @description La URL, la lista de eventos o `description` no superan la validación, o la cuenta de usuario alcanzó su tope de endpoints. `webhook_url_invalid_type` y `webhook_description_invalid_type` aparecen cuando el campo llega con un tipo distinto de cadena de texto; `webhook_description_too_long` cuando `description` excede 255 caracteres. Todo error de campo trae `source.pointer`. */
7221
7230
  422: {
7222
7231
  headers: {
7223
7232
  [name: string]: unknown;
@@ -7289,7 +7298,7 @@ export interface operations {
7289
7298
  };
7290
7299
  };
7291
7300
  413: components["responses"]["PayloadTooLarge"];
7292
- /** @description Datos inválidos. Códigos posibles: `webhook_url_empty`, `webhook_url_too_long`, `webhook_url_invalid_format`, `webhook_url_not_https`, `webhook_events_required`, `webhook_events_too_many`, `webhook_event_invalid`, `webhook_status_invalid`, `no_valid_fields`. */
7301
+ /** @description Datos inválidos. Códigos posibles: `webhook_url_invalid_type`, `webhook_url_empty`, `webhook_url_too_long`, `webhook_url_invalid_format`, `webhook_url_not_https`, `webhook_events_required`, `webhook_events_too_many`, `webhook_event_invalid`, `webhook_description_invalid_type`, `webhook_description_too_long`, `webhook_status_invalid`, `no_valid_fields`. Una `description` de más de 255 caracteres responde `webhook_description_too_long`. Todo error de campo trae `source.pointer`. */
7293
7302
  422: {
7294
7303
  headers: {
7295
7304
  [name: string]: unknown;