@veriko-mx/sdk 0.4.10 → 0.4.12
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 +51 -0
- package/README.md +237 -41
- package/dist/cjs/client.d.ts +6 -3
- package/dist/cjs/client.d.ts.map +1 -1
- package/dist/cjs/client.js +6 -3
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/generated/openapi.d.ts +835 -33
- package/dist/cjs/generated/openapi.d.ts.map +1 -1
- package/dist/cjs/http.d.ts +2 -0
- package/dist/cjs/http.d.ts.map +1 -1
- package/dist/cjs/http.js +1 -1
- package/dist/cjs/http.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +6 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/resources.d.ts +88 -4
- package/dist/cjs/resources.d.ts.map +1 -1
- package/dist/cjs/resources.js +166 -8
- package/dist/cjs/resources.js.map +1 -1
- package/dist/cjs/types.d.ts +129 -13
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/types.js +6 -0
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/webhooks.d.ts +41 -1
- package/dist/cjs/webhooks.d.ts.map +1 -1
- package/dist/cjs/webhooks.js +94 -6
- package/dist/cjs/webhooks.js.map +1 -1
- package/dist/esm/client.d.ts +6 -3
- package/dist/esm/client.d.ts.map +1 -1
- package/dist/esm/client.js +6 -3
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/generated/openapi.d.ts +835 -33
- package/dist/esm/generated/openapi.d.ts.map +1 -1
- package/dist/esm/http.d.ts +2 -0
- package/dist/esm/http.d.ts.map +1 -1
- package/dist/esm/http.js +1 -1
- package/dist/esm/http.js.map +1 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/resources.d.ts +88 -4
- package/dist/esm/resources.d.ts.map +1 -1
- package/dist/esm/resources.js +166 -8
- package/dist/esm/resources.js.map +1 -1
- package/dist/esm/types.d.ts +129 -13
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/types.js +6 -0
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/webhooks.d.ts +41 -1
- package/dist/esm/webhooks.d.ts.map +1 -1
- package/dist/esm/webhooks.js +91 -5
- package/dist/esm/webhooks.js.map +1 -1
- package/package.json +1 -1
package/dist/cjs/webhooks.js
CHANGED
|
@@ -13,18 +13,31 @@
|
|
|
13
13
|
* el escape de los caracteres no ASCII no se conservan, y la firma deja de
|
|
14
14
|
* cuadrar. En Express, eso significa `express.raw()` en la ruta del webhook.
|
|
15
15
|
*
|
|
16
|
+
* Cada entrega lleva además una segunda firma que incluye la hora del intento:
|
|
17
|
+
*
|
|
18
|
+
* X-Webhook-Signature-Timestamped: t=<segundos>,v1=<hex>
|
|
19
|
+
*
|
|
20
|
+
* `v1` es el HMAC-SHA256 de `<t>.<cuerpo>`. Con ella el receptor puede descartar
|
|
21
|
+
* una entrega vieja que alguien vuelva a enviar.
|
|
22
|
+
*
|
|
16
23
|
* @see https://docs.veriko.mx/es/concepts/webhooks-architecture
|
|
17
24
|
*/
|
|
18
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.TIMESTAMP_HEADER = exports.DELIVERY_ID_HEADER = exports.EVENT_HEADER = exports.SIGNATURE_HEADER = void 0;
|
|
26
|
+
exports.TIMESTAMP_HEADER = exports.DELIVERY_ID_HEADER = exports.EVENT_HEADER = exports.DEFAULT_TOLERANCE_SECONDS = exports.TIMESTAMPED_SIGNATURE_HEADER = exports.SIGNATURE_HEADER = void 0;
|
|
20
27
|
exports.computeSignature = computeSignature;
|
|
21
28
|
exports.verifyWebhook = verifyWebhook;
|
|
29
|
+
exports.verifyWebhookTimestamped = verifyWebhookTimestamped;
|
|
22
30
|
exports.signatureFromHeaders = signatureFromHeaders;
|
|
31
|
+
exports.timestampedSignatureFromHeaders = timestampedSignatureFromHeaders;
|
|
23
32
|
exports.parseWebhook = parseWebhook;
|
|
24
33
|
const node_crypto_1 = require("node:crypto");
|
|
25
34
|
const errors_js_1 = require("./errors.js");
|
|
26
35
|
/** Cabecera de la firma. */
|
|
27
36
|
exports.SIGNATURE_HEADER = 'X-Webhook-Signature';
|
|
37
|
+
/** Cabecera de la firma que incluye la hora del intento. */
|
|
38
|
+
exports.TIMESTAMPED_SIGNATURE_HEADER = 'X-Webhook-Signature-Timestamped';
|
|
39
|
+
/** Ventana recomendada entre `t` y el reloj del receptor, en segundos. */
|
|
40
|
+
exports.DEFAULT_TOLERANCE_SECONDS = 300;
|
|
28
41
|
/** Otras cabeceras de una entrega. */
|
|
29
42
|
exports.EVENT_HEADER = 'X-Veriko-Event';
|
|
30
43
|
exports.DELIVERY_ID_HEADER = 'X-Veriko-Delivery-Id';
|
|
@@ -66,14 +79,76 @@ function verifyWebhook(payload, signature, secret) {
|
|
|
66
79
|
return false;
|
|
67
80
|
return (0, node_crypto_1.timingSafeEqual)(receivedBuffer, expectedBuffer);
|
|
68
81
|
}
|
|
82
|
+
const UNIX_SECONDS = /^[0-9]{1,15}$/;
|
|
69
83
|
/**
|
|
70
|
-
*
|
|
84
|
+
* Separa `t=<segundos>,v1=<hex>` en la hora y las firmas `v1`.
|
|
71
85
|
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
86
|
+
* Admite varias `v1` y descarta las claves que no conoce. Devuelve `undefined`
|
|
87
|
+
* cuando falta `t`, cuando trae más de una, o cuando no es un entero de segundos.
|
|
74
88
|
*/
|
|
75
|
-
function
|
|
76
|
-
const
|
|
89
|
+
function parseTimestamped(header) {
|
|
90
|
+
const times = [];
|
|
91
|
+
const digests = [];
|
|
92
|
+
for (const part of header.split(',')) {
|
|
93
|
+
const separator = part.indexOf('=');
|
|
94
|
+
if (separator === -1)
|
|
95
|
+
continue;
|
|
96
|
+
const key = part.slice(0, separator).trim();
|
|
97
|
+
const value = part.slice(separator + 1).trim();
|
|
98
|
+
if (key === 't')
|
|
99
|
+
times.push(value);
|
|
100
|
+
else if (key === 'v1')
|
|
101
|
+
digests.push(value.toLowerCase());
|
|
102
|
+
}
|
|
103
|
+
const timestamp = times[0];
|
|
104
|
+
if (times.length !== 1 || timestamp === undefined || !UNIX_SECONDS.test(timestamp)) {
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
return { timestamp, digests };
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Comprueba la firma con marca de tiempo de una entrega. Devuelve `true` o
|
|
111
|
+
* `false`, sin lanzar.
|
|
112
|
+
*
|
|
113
|
+
* Acepta el valor de la cabecera `X-Webhook-Signature-Timestamped`:
|
|
114
|
+
* `t=<segundos>,v1=<hex>`. Calcula el HMAC-SHA256 de `<t>.<cuerpo>`, lo compara
|
|
115
|
+
* en tiempo constante con cada `v1` y rechaza la entrega cuando `t` se aleja del
|
|
116
|
+
* reloj del receptor más de `toleranceSeconds`.
|
|
117
|
+
*
|
|
118
|
+
* La ventana se mide contra `t`, la hora de ese intento, y no contra el campo
|
|
119
|
+
* `timestamp` del cuerpo, que es la hora del evento. Un reintento llega hasta
|
|
120
|
+
* unas 8,6 horas después del evento, pero con una `t` nueva.
|
|
121
|
+
*
|
|
122
|
+
* @param payload El cuerpo crudo de la petición, sin reserializar.
|
|
123
|
+
* @param header El valor de la cabecera `X-Webhook-Signature-Timestamped`.
|
|
124
|
+
* @param secret El secreto del endpoint, entregado al registrarlo.
|
|
125
|
+
* @param options La ventana y la hora actual.
|
|
126
|
+
*/
|
|
127
|
+
function verifyWebhookTimestamped(payload, header, secret, options = {}) {
|
|
128
|
+
if (!header || !secret)
|
|
129
|
+
return false;
|
|
130
|
+
const parsed = parseTimestamped(header);
|
|
131
|
+
if (!parsed)
|
|
132
|
+
return false;
|
|
133
|
+
const tolerance = options.toleranceSeconds ?? exports.DEFAULT_TOLERANCE_SECONDS;
|
|
134
|
+
const nowSeconds = (options.now ?? new Date()).getTime() / 1000;
|
|
135
|
+
if (!(Math.abs(nowSeconds - Number(parsed.timestamp)) <= tolerance))
|
|
136
|
+
return false;
|
|
137
|
+
const signed = Buffer.concat([Buffer.from(`${parsed.timestamp}.`, 'utf8'), toBuffer(payload)]);
|
|
138
|
+
const expected = Buffer.from((0, node_crypto_1.createHmac)('sha256', secret).update(signed).digest('hex'), 'utf8');
|
|
139
|
+
// Se comparan todas, sin cortar en la primera que cuadra.
|
|
140
|
+
let matched = false;
|
|
141
|
+
for (const digest of parsed.digests) {
|
|
142
|
+
const received = Buffer.from(digest, 'utf8');
|
|
143
|
+
if (received.length === expected.length && (0, node_crypto_1.timingSafeEqual)(received, expected)) {
|
|
144
|
+
matched = true;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return matched;
|
|
148
|
+
}
|
|
149
|
+
/** El valor de una cabecera, sin distinguir mayúsculas. */
|
|
150
|
+
function headerValue(headers, header) {
|
|
151
|
+
const wanted = header.toLowerCase();
|
|
77
152
|
for (const [name, value] of Object.entries(headers)) {
|
|
78
153
|
if (name.toLowerCase() !== wanted)
|
|
79
154
|
continue;
|
|
@@ -81,6 +156,19 @@ function signatureFromHeaders(headers) {
|
|
|
81
156
|
}
|
|
82
157
|
return undefined;
|
|
83
158
|
}
|
|
159
|
+
/**
|
|
160
|
+
* Busca la cabecera de firma en cualquiera de sus grafías.
|
|
161
|
+
*
|
|
162
|
+
* Los nombres de cabecera no distinguen mayúsculas, y cada framework los
|
|
163
|
+
* entrega a su manera.
|
|
164
|
+
*/
|
|
165
|
+
function signatureFromHeaders(headers) {
|
|
166
|
+
return headerValue(headers, exports.SIGNATURE_HEADER);
|
|
167
|
+
}
|
|
168
|
+
/** Busca la cabecera de la firma con marca de tiempo en cualquiera de sus grafías. */
|
|
169
|
+
function timestampedSignatureFromHeaders(headers) {
|
|
170
|
+
return headerValue(headers, exports.TIMESTAMPED_SIGNATURE_HEADER);
|
|
171
|
+
}
|
|
84
172
|
/**
|
|
85
173
|
* Verifica la firma y devuelve el evento ya interpretado.
|
|
86
174
|
*
|
package/dist/cjs/webhooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/webhooks.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/webhooks.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/client.d.ts
CHANGED
|
@@ -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.
|
|
10
|
+
export declare const VERSION = "0.4.12";
|
|
11
11
|
export interface VerikoOptions {
|
|
12
12
|
/** La clave de API. Por omisión, `VERIKO_API_KEY`. */
|
|
13
13
|
apiKey?: string;
|
|
@@ -95,8 +95,11 @@ 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 `
|
|
99
|
-
*
|
|
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
|
|
100
|
+
* `referenciaNumerica`. Enviar las dos últimas precisa la búsqueda. La fecha
|
|
101
|
+
* es la de envío, en `YYYY-MM-DD`. `clientRef` es una referencia propia que
|
|
102
|
+
* vuelve en la validación y en los webhooks.
|
|
100
103
|
*
|
|
101
104
|
* Un `not_found` inmediato no equivale a una transferencia inexistente: un
|
|
102
105
|
* CEP tarda en publicarse. `retryPolicy` deja a la API consultando de nuevo y
|
package/dist/esm/client.d.ts.map
CHANGED
|
@@ -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
|
|
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"}
|
package/dist/esm/client.js
CHANGED
|
@@ -6,7 +6,7 @@ export const DEFAULT_TIMEOUT_MS = 30_000;
|
|
|
6
6
|
export const API_KEY_ENV_VAR = 'VERIKO_API_KEY';
|
|
7
7
|
export const BASE_URL_ENV_VAR = 'VERIKO_BASE_URL';
|
|
8
8
|
/** La versión que viaja en el `User-Agent`. `test/client.test.ts` la compara con `package.json`. */
|
|
9
|
-
export const VERSION = '0.4.
|
|
9
|
+
export const VERSION = '0.4.12';
|
|
10
10
|
/**
|
|
11
11
|
* Cliente de la API de Veriko.
|
|
12
12
|
*
|
|
@@ -104,8 +104,11 @@ export class Veriko {
|
|
|
104
104
|
* Devuelve el veredicto en `attributes.status`: `valid`, `not_found`,
|
|
105
105
|
* `cep_unavailable`, `returned` o `error`.
|
|
106
106
|
*
|
|
107
|
-
* La operación exige `
|
|
108
|
-
*
|
|
107
|
+
* La operación exige `cuentaBeneficiaria`, o `cuentasCandidatas` cuando no se
|
|
108
|
+
* sabe cuál fue la cuenta (una de las dos, no las dos), y `claveRastreo` o
|
|
109
|
+
* `referenciaNumerica`. Enviar las dos últimas precisa la búsqueda. La fecha
|
|
110
|
+
* es la de envío, en `YYYY-MM-DD`. `clientRef` es una referencia propia que
|
|
111
|
+
* vuelve en la validación y en los webhooks.
|
|
109
112
|
*
|
|
110
113
|
* Un `not_found` inmediato no equivale a una transferencia inexistente: un
|
|
111
114
|
* CEP tarda en publicarse. `retryPolicy` deja a la API consultando de nuevo y
|
package/dist/esm/client.js.map
CHANGED
|
@@ -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":"AAAA,mEAAmE;AAEnE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAoB,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,GACT,MAAM,gBAAgB,CAAC;AAUxB,MAAM,CAAC,MAAM,gBAAgB,GAAG,0BAA0B,CAAC;AAC3D,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AACzC,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAChD,MAAM,CAAC,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAElD,oGAAoG;AACpG,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC;AAuBhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,OAAO,MAAM;IACA,SAAS,CAAY;IAEtC,kDAAkD;IACzC,WAAW,CAAc;IAClC,uDAAuD;IAC9C,QAAQ,CAAW;IAC5B,2DAA2D;IAClD,OAAO,CAAU;IAC1B,+DAA+D;IACtD,aAAa,CAAgB;IACtC,8CAA8C;IACrC,KAAK,CAAQ;IACtB,sDAAsD;IAC7C,OAAO,CAAU;IAC1B,yBAAyB;IAChB,SAAS,CAAY;IAC9B,kCAAkC;IACzB,KAAK,CAAQ;IACtB,uCAAuC;IAC9B,QAAQ,CAAW;IAC5B,yCAAyC;IAChC,OAAO,CAAU;IAC1B,uCAAuC;IAC9B,OAAO,CAAU;IAE1B,YAAY,UAAyB,EAAE;QACrC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,IAAI,CAAC,SAAS;YACZ,OAAO,CAAC,SAAS;gBACjB,IAAI,SAAS,CAAC;oBACZ,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,gBAAgB;oBAC7E,MAAM;oBACN,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,kBAAkB;oBAClD,KAAK,EAAE;wBACL,GAAG,aAAa;wBAChB,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC/E,GAAG,OAAO,CAAC,KAAK;qBACjB;oBACD,SAAS,EAAE,aAAa,OAAO,kDAAkD,MAAM,EAAE;oBACzF,cAAc,EAAE,OAAO,CAAC,cAAc;iBACvC,CAAC,CAAC;QAEL,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;IAChC,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,gBAAgB,CAAC,MAA8B;QAC7C,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;;;OAOG;IACH,aAAa,CACX,YAAoB,EACpB,UAAgC,EAAE;QAElC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,YAAoB,EAAE,UAAkC,EAAE;QAC/D,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;CACF"}
|