@dynamicore/jumio-sdk 1.0.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.
@@ -0,0 +1,252 @@
1
+ import { AxiosInstance } from 'axios';
2
+
3
+ /**
4
+ * Estados posibles del flujo de verificación en Jumio.
5
+ */
6
+ type JumioWorkflowStatus = "PENDING" | "INITIATED" | "ACQUIRED" | "SUBMITTED" | "PROCESSED" | "APPROVED_VERIFIED" | "REJECTED" | "FAILED" | "ERROR" | "DENIED" | "EXPIRED" | "ABANDONED" | (string & {});
7
+ /**
8
+ * Tipos de entrada soportados para las imágenes del documento.
9
+ */
10
+ type ImageSource = string | Blob | File | ArrayBuffer | Uint8Array | {
11
+ url?: unknown;
12
+ } | {
13
+ [key: string]: unknown;
14
+ };
15
+ /**
16
+ * Función personalizada para firmar URLs de S3 o descargar recursos privados.
17
+ */
18
+ type S3SignerFunction = (pathOrUrl: string, expires?: number) => Promise<string | {
19
+ url?: unknown;
20
+ } | unknown>;
21
+ /**
22
+ * Función o valor para proveer el token de autenticación.
23
+ */
24
+ type AuthTokenProvider = string | (() => string | undefined | null | Promise<string | undefined | null>);
25
+ /**
26
+ * Opciones de configuración para instanciar el cliente JumioClient.
27
+ */
28
+ interface JumioClientConfig {
29
+ /**
30
+ * URL base de la API de DynamiCore / Backend.
31
+ * @default "https://front.dynamicore.io"
32
+ */
33
+ baseUrl?: string;
34
+ /**
35
+ * Endpoint específico del servicio de verificación Jumio.
36
+ * @default "/marketplace/apps/jumio"
37
+ */
38
+ endpoint?: string;
39
+ /**
40
+ * Header de contexto moral / negocio enviado en las peticiones.
41
+ */
42
+ context?: string;
43
+ /**
44
+ * Token de autenticación o función que lo obtiene.
45
+ */
46
+ authToken?: AuthTokenProvider;
47
+ /**
48
+ * Prefijo para el header Authorization (por defecto vacío o "Bearer ").
49
+ * @default ""
50
+ */
51
+ authTokenPrefix?: string;
52
+ /**
53
+ * Timeout en milisegundos para las peticiones POST de verificación.
54
+ * @default 180000 (3 minutos)
55
+ */
56
+ requestTimeout?: number;
57
+ /**
58
+ * Timeout en milisegundos para las peticiones GET de status.
59
+ * @default 120000 (2 minutos)
60
+ */
61
+ statusTimeout?: number;
62
+ /**
63
+ * Número máximo de reintentos ante timeouts o fallas transitorias de red.
64
+ * @default 3
65
+ */
66
+ maxRetries?: number;
67
+ /**
68
+ * Delay base en milisegundos para el backoff exponencial de reintentos.
69
+ * @default 800
70
+ */
71
+ retryDelayMs?: number;
72
+ /**
73
+ * Intervalo en milisegundos entre consultas sucesivas de sondeo (polling).
74
+ * @default 10000 (10 segundos)
75
+ */
76
+ pollingIntervalMs?: number;
77
+ /**
78
+ * Número máximo de intentos de sondeo antes de timeout.
79
+ * @default 20 (20 x 10s = aprox 200 segundos)
80
+ */
81
+ maxPollingAttempts?: number;
82
+ /**
83
+ * Función opcional para firmar rutas u URLs de Amazon S3.
84
+ */
85
+ s3Signer?: S3SignerFunction;
86
+ /**
87
+ * Headers HTTP adicionales para incluir en cada petición.
88
+ */
89
+ customHeaders?: Record<string, string>;
90
+ /**
91
+ * Instancia personalizada de Axios (opcional).
92
+ */
93
+ axiosInstance?: AxiosInstance;
94
+ }
95
+ /**
96
+ * Payload enviado a la API de verificación de Jumio.
97
+ */
98
+ interface JumioVerificationPayload {
99
+ client: string;
100
+ front_image_b64: string;
101
+ back_image_b64: string;
102
+ [key: string]: unknown;
103
+ }
104
+ /**
105
+ * Estructura de respuesta de datos de verificación.
106
+ */
107
+ interface JumioVerificationData {
108
+ valid?: boolean;
109
+ status?: JumioWorkflowStatus;
110
+ workflowStatus?: JumioWorkflowStatus;
111
+ decision?: string;
112
+ accountId?: string;
113
+ workflowId?: string;
114
+ message?: string;
115
+ [key: string]: unknown;
116
+ }
117
+ /**
118
+ * Estructura inicial devuelta al iniciar el flujo de verificación.
119
+ */
120
+ interface JumioIneStartData extends JumioVerificationData {
121
+ accountId?: string;
122
+ workflowId?: string;
123
+ }
124
+ /**
125
+ * Resultado estructurado retornado por el cliente tras una validación.
126
+ */
127
+ interface VerifyIneResult {
128
+ /**
129
+ * Indica si la validación fue exitosa (true) o fallida/rechazada (false).
130
+ */
131
+ valid: boolean;
132
+ /**
133
+ * Estado actual o final del flujo de Jumio.
134
+ */
135
+ status?: JumioWorkflowStatus;
136
+ /**
137
+ * Identificador de cuenta en Jumio.
138
+ */
139
+ accountId?: string;
140
+ /**
141
+ * Identificador del workflow en Jumio.
142
+ */
143
+ workflowId?: string;
144
+ /**
145
+ * Datos completos devueltos por la API de Jumio/DynamiCore.
146
+ */
147
+ data: unknown;
148
+ /**
149
+ * Mensaje descriptivo o de error si la validación falló.
150
+ */
151
+ errorMessage?: string;
152
+ }
153
+ /**
154
+ * Callback ejecutado cuando el sondeo resuelve un estado final.
155
+ */
156
+ type JumioStatusResolvedCallback = (result: VerifyIneResult) => void;
157
+ /**
158
+ * Callback ejecutado si ocurre un error durante el sondeo o la petición.
159
+ */
160
+ type JumioStatusErrorCallback = (error: Error) => void;
161
+ /**
162
+ * Callback de progreso para reportar avances de conversión o polling.
163
+ */
164
+ type JumioProgressCallback = (stage: string, percent?: number) => void;
165
+ /**
166
+ * Parámetros de entrada para la función `verifyIne`.
167
+ */
168
+ interface VerifyIneInput {
169
+ /**
170
+ * Identificador único del cliente (persona, usuario o ID externo).
171
+ */
172
+ clientId: string;
173
+ /**
174
+ * Imagen frontal del documento (INE): URL, ruta S3, File, Blob o Base64.
175
+ */
176
+ frontImage: ImageSource;
177
+ /**
178
+ * Imagen trasera/reverso del documento (INE): URL, ruta S3, File, Blob o Base64.
179
+ */
180
+ backImage: ImageSource;
181
+ /**
182
+ * Si es `true`, la promesa espera hasta que Jumio resuelva el resultado final (bloqueante).
183
+ * Si es `false` (por defecto), inicia la validación, retorna de inmediato y ejecuta el sondeo en 2do plano.
184
+ * @default false
185
+ */
186
+ awaitFinalStatus?: boolean;
187
+ /**
188
+ * Callback invocado cuando se completa el proceso de validación (síncrono o en segundo plano).
189
+ */
190
+ onStatusResolved?: JumioStatusResolvedCallback;
191
+ /**
192
+ * Callback invocado ante errores no recuperables durante la validación o sondeo.
193
+ */
194
+ onStatusError?: JumioStatusErrorCallback;
195
+ /**
196
+ * Callback opcional para reportar etapas del proceso.
197
+ */
198
+ onProgress?: JumioProgressCallback;
199
+ /**
200
+ * Señal de cancelación (AbortSignal) para abortar peticiones o sondeo activo.
201
+ */
202
+ signal?: AbortSignal;
203
+ }
204
+ /**
205
+ * Opciones para el método de polling de estado.
206
+ */
207
+ interface PollStatusOptions {
208
+ pollingIntervalMs?: number;
209
+ maxAttempts?: number;
210
+ signal?: AbortSignal;
211
+ onAttempt?: (attempt: number, maxAttempts: number, lastData: unknown) => void;
212
+ }
213
+
214
+ /**
215
+ * Cliente principal para gestionar validaciones de identidad mediante Jumio.
216
+ */
217
+ declare class JumioClient {
218
+ private readonly http;
219
+ private readonly config;
220
+ constructor(config?: JumioClientConfig);
221
+ /**
222
+ * Inicia el proceso de verificación convirtiendo las imágenes y enviando el payload inicial a Jumio.
223
+ */
224
+ startIneVerification(params: {
225
+ clientId: string;
226
+ frontImage: ImageSource;
227
+ backImage: ImageSource;
228
+ signal?: AbortSignal;
229
+ onProgress?: JumioProgressCallback;
230
+ }): Promise<JumioIneStartData>;
231
+ /**
232
+ * Consulta una única vez el estado actual de la validación.
233
+ */
234
+ getIneStatus(accountId: string, workflowId: string, signal?: AbortSignal): Promise<JumioVerificationData>;
235
+ /**
236
+ * Sondea periódicamente el estado hasta obtener un resultado definitivo.
237
+ */
238
+ pollIneStatus(accountId: string, workflowId: string, options?: PollStatusOptions): Promise<VerifyIneResult>;
239
+ /**
240
+ * Ejecuta el flujo completo de validación de INE.
241
+ *
242
+ * @param input Parámetros de validación y callbacks.
243
+ * @returns `VerifyIneResult` con el resultado inicial o definitivo según `awaitFinalStatus`.
244
+ */
245
+ verifyIne(input: VerifyIneInput): Promise<VerifyIneResult>;
246
+ }
247
+ /**
248
+ * Fábrica para crear una nueva instancia de `JumioClient`.
249
+ */
250
+ declare function createJumioClient(config?: JumioClientConfig): JumioClient;
251
+
252
+ export { type AuthTokenProvider as A, type ImageSource as I, JumioClient as J, type PollStatusOptions as P, type S3SignerFunction as S, type VerifyIneInput as V, type JumioClientConfig as a, type JumioIneStartData as b, type JumioProgressCallback as c, type JumioStatusErrorCallback as d, type JumioStatusResolvedCallback as e, type JumioVerificationData as f, type JumioVerificationPayload as g, type JumioWorkflowStatus as h, type VerifyIneResult as i, createJumioClient as j };
@@ -0,0 +1,204 @@
1
+ import { f as JumioVerificationData, I as ImageSource, S as S3SignerFunction, a as JumioClientConfig, P as PollStatusOptions, i as VerifyIneResult } from '../client-BR1xIZ0X.mjs';
2
+ export { A as AuthTokenProvider, J as JumioClient, b as JumioIneStartData, c as JumioProgressCallback, d as JumioStatusErrorCallback, e as JumioStatusResolvedCallback, g as JumioVerificationPayload, h as JumioWorkflowStatus, V as VerifyIneInput, j as createJumioClient } from '../client-BR1xIZ0X.mjs';
3
+ import 'axios';
4
+
5
+ /**
6
+ * Error base para todas las excepciones emitidas por el SDK de Jumio.
7
+ */
8
+ declare class JumioError extends Error {
9
+ readonly isJumioError = true;
10
+ readonly statusCode?: number;
11
+ readonly rawData?: unknown;
12
+ readonly code?: string;
13
+ constructor(message: string, options?: {
14
+ statusCode?: number;
15
+ rawData?: unknown;
16
+ code?: string;
17
+ cause?: unknown;
18
+ });
19
+ }
20
+ /**
21
+ * Error lanzado ante demoras excesivas o timeouts del servicio de verificación.
22
+ */
23
+ declare class JumioTimeoutError extends JumioError {
24
+ constructor(message?: string, rawData?: unknown);
25
+ }
26
+ /**
27
+ * Error lanzado cuando no hay conectividad de red o falla el transporte HTTP.
28
+ */
29
+ declare class JumioNetworkError extends JumioError {
30
+ constructor(message?: string, cause?: unknown);
31
+ }
32
+ /**
33
+ * Error lanzado cuando la validación del documento es rechazada o no pasa los criterios.
34
+ */
35
+ declare class JumioValidationError extends JumioError {
36
+ constructor(message?: string, rawData?: unknown);
37
+ }
38
+ /**
39
+ * Error lanzado cuando ocurre un fallo al obtener, descargar o procesar una imagen (frente o reverso).
40
+ */
41
+ declare class JumioImageProcessingError extends JumioError {
42
+ constructor(message: string, cause?: unknown);
43
+ }
44
+ /**
45
+ * Error lanzado cuando el sondeo (polling) agota los intentos máximos sin un estado definitivo.
46
+ */
47
+ declare class JumioPollingTimeoutError extends JumioError {
48
+ readonly attempts: number;
49
+ constructor(attempts: number, message?: string, rawData?: unknown);
50
+ }
51
+ /**
52
+ * Error lanzado cuando la operación es cancelada explícitamente mediante un AbortSignal.
53
+ */
54
+ declare class JumioAbortError extends JumioError {
55
+ constructor(message?: string);
56
+ }
57
+ /**
58
+ * Verifica si un error dado es una instancia de JumioError.
59
+ */
60
+ declare function isJumioError(error: unknown): error is JumioError;
61
+
62
+ /**
63
+ * Lista de estados considerados finales en el flujo de Jumio.
64
+ */
65
+ declare const FINAL_JUMIO_STATUSES: readonly ["PROCESSED", "APPROVED_VERIFIED", "REJECTED", "FAILED", "ERROR", "DENIED", "EXPIRED", "ABANDONED", "DONE", "COMPLETED", "NOT_READABLE", "FRAUD", "UNSUPPORTED_ID_TYPE"];
66
+ /**
67
+ * Lista de estados considerados exitosos (aprobados) de forma inequívoca.
68
+ *
69
+ * Nota: `PROCESSED` no se considera aprobado por sí solo: en la gateway
70
+ * DynamiCore/Jumio significa únicamente que el workflow terminó de procesar.
71
+ * El veredicto real se reporta en los campos `valid` y `decision`
72
+ * (p. ej. `decision: "NOT_EXECUTED"` con `workflowStatus: "PROCESSED"` es un rechazo).
73
+ */
74
+ declare const APPROVED_JUMIO_STATUSES: readonly ["APPROVED_VERIFIED", "DONE", "COMPLETED"];
75
+ /**
76
+ * Convierte un valor a texto en minúsculas sin espacios extremos.
77
+ */
78
+ declare function toLowerText(value: unknown): string;
79
+ /**
80
+ * Convierte un valor a texto en mayúsculas sin espacios extremos.
81
+ */
82
+ declare function toUpperText(value: unknown): string;
83
+ /**
84
+ * Desempaqueta el envoltorio estándar `{ data: ... }` si está presente en la respuesta.
85
+ */
86
+ declare function extractEnvelopeData<T>(responseData: unknown): T;
87
+ /**
88
+ * Desempaqueta recursivamente múltiples niveles de anidación `{ data: { data: ... } }`.
89
+ */
90
+ declare function extractNestedData(source: unknown, maxDepth?: number): unknown;
91
+ /**
92
+ * Extrae de forma inteligente el mensaje de error o descripción contenido en una respuesta de Jumio o Axios.
93
+ */
94
+ declare function extractJumioMessage(source: unknown): string;
95
+ /**
96
+ * Determina si el estado de workflow reportado por Jumio es definitivo (ha terminado su procesamiento).
97
+ */
98
+ declare function isFinalJumioStatus(status: unknown): boolean;
99
+ /**
100
+ * Determina si el estado reportado indica una verificación aprobada y válida.
101
+ */
102
+ declare function isApprovedJumioStatus(status: unknown): boolean;
103
+ /**
104
+ * Determina si la decisión final de Jumio indica un documento aprobado.
105
+ * La decisión es el veredicto real reportado por la gateway
106
+ * (p. ej. `PASSED` = aprobado, `NOT_EXECUTED` / `REJECTED` / `FAILED` = rechazado).
107
+ */
108
+ declare function isPassedJumioDecision(decision: unknown): boolean;
109
+ /**
110
+ * Resuelve la validez final de una verificación priorizando los campos
111
+ * explícitos (`valid`, `decision`) sobre el estado del workflow:
112
+ *
113
+ * 1. `valid` booleano explícito (fuente de verdad de la gateway).
114
+ * 2. `decision` presente (`PASSED` = válido, cualquier otro valor = inválido).
115
+ * 3. Fallback conservador basado en el estado del workflow.
116
+ */
117
+ declare function resolveVerificationValidity(data: Pick<JumioVerificationData, "valid" | "decision">, fallbackStatus: unknown): boolean;
118
+
119
+ interface RetryOptions {
120
+ maxRetries?: number;
121
+ initialDelayMs?: number;
122
+ maxDelayMs?: number;
123
+ factor?: number;
124
+ shouldRetry?: (error: unknown) => boolean;
125
+ signal?: AbortSignal;
126
+ onRetry?: (attempt: number, error: unknown, delayMs: number) => void;
127
+ }
128
+ /**
129
+ * Espera una cantidad dada de milisegundos con soporte para cancelación vía AbortSignal.
130
+ */
131
+ declare function delay(ms: number, signal?: AbortSignal): Promise<void>;
132
+ /**
133
+ * Evalúa si un mensaje o error es atribuible a fallos transitorios o timeouts de Jumio que ameritan reintento.
134
+ */
135
+ declare function shouldRetryJumio(errorOrMessage: unknown): boolean;
136
+ /**
137
+ * Ejecuta una operación asíncrona con reintentos automáticos y backoff exponencial.
138
+ */
139
+ declare function withRetry<T>(operation: (attempt: number) => Promise<T>, options?: RetryOptions): Promise<T>;
140
+
141
+ /**
142
+ * Elimina el prefijo data URI (ej. "data:image/jpeg;base64,") si existe.
143
+ */
144
+ declare function stripDataUrlPrefix(dataUrl: string): string;
145
+ /**
146
+ * Verifica si una cadena parece ser Base64 directo o Data URL.
147
+ */
148
+ declare function isBase64String(input: string): boolean;
149
+ /**
150
+ * Extrae la URL utilizable a partir de un objeto candidato devuelto por endpoints de S3 u objetos de formulario.
151
+ */
152
+ declare function normalizeSignedUrl(input: unknown, fallback?: string): string;
153
+ /**
154
+ * Convierte un Blob o File en una cadena Base64 pura.
155
+ */
156
+ declare function blobToBase64(blob: Blob): Promise<string>;
157
+ /**
158
+ * Convierte un ArrayBuffer o Uint8Array a cadena Base64 pura.
159
+ */
160
+ declare function arrayBufferToBase64(buffer: ArrayBuffer | Uint8Array): string;
161
+ /**
162
+ * Descarga una imagen desde una URL HTTP/HTTPS/Blob y la retorna como Base64 puro.
163
+ */
164
+ declare function fetchUrlAsBase64(url: string, signal?: AbortSignal): Promise<string>;
165
+ /**
166
+ * Resuelve cualquier tipo de entrada de imagen (URL, ruta S3, File, Blob, Base64) a una cadena Base64 pura.
167
+ */
168
+ declare function resolveImageSourceToBase64(source: ImageSource, s3Signer?: S3SignerFunction, signal?: AbortSignal): Promise<string>;
169
+
170
+ declare class JumioHttpClient {
171
+ private readonly client;
172
+ private readonly config;
173
+ constructor(config?: JumioClientConfig);
174
+ /**
175
+ * Resuelve los headers dinámicos (token de auth y context).
176
+ */
177
+ private resolveHeaders;
178
+ /**
179
+ * Normaliza cualquier error de Axios a una excepción tipada JumioError.
180
+ */
181
+ private normalizeError;
182
+ /**
183
+ * Ejecuta una petición POST al endpoint de Jumio para iniciar o procesar la verificación.
184
+ */
185
+ postVerification<T>(payload: unknown, options?: {
186
+ signal?: AbortSignal;
187
+ timeout?: number;
188
+ }): Promise<T>;
189
+ /**
190
+ * Ejecuta una petición GET para consultar el estado actual de una verificación de INE.
191
+ */
192
+ getVerificationStatus<T>(accountId: string, workflowId: string, options?: {
193
+ signal?: AbortSignal;
194
+ timeout?: number;
195
+ }): Promise<T>;
196
+ getConfig(): Readonly<JumioClientConfig>;
197
+ }
198
+
199
+ /**
200
+ * Sondea activamente el estado de verificación de un workflow de Jumio hasta alcanzar un estado definitivo.
201
+ */
202
+ declare function pollJumioStatus(http: JumioHttpClient, accountId: string, workflowId: string, options?: PollStatusOptions): Promise<VerifyIneResult>;
203
+
204
+ export { APPROVED_JUMIO_STATUSES, FINAL_JUMIO_STATUSES, ImageSource, JumioAbortError, JumioClientConfig, JumioError, JumioHttpClient, JumioImageProcessingError, JumioNetworkError, JumioPollingTimeoutError, JumioTimeoutError, JumioValidationError, JumioVerificationData, PollStatusOptions, type RetryOptions, S3SignerFunction, VerifyIneResult, arrayBufferToBase64, blobToBase64, delay, extractEnvelopeData, extractJumioMessage, extractNestedData, fetchUrlAsBase64, isApprovedJumioStatus, isBase64String, isFinalJumioStatus, isJumioError, isPassedJumioDecision, normalizeSignedUrl, pollJumioStatus, resolveImageSourceToBase64, resolveVerificationValidity, shouldRetryJumio, stripDataUrlPrefix, toLowerText, toUpperText, withRetry };
@@ -0,0 +1,204 @@
1
+ import { f as JumioVerificationData, I as ImageSource, S as S3SignerFunction, a as JumioClientConfig, P as PollStatusOptions, i as VerifyIneResult } from '../client-BR1xIZ0X.js';
2
+ export { A as AuthTokenProvider, J as JumioClient, b as JumioIneStartData, c as JumioProgressCallback, d as JumioStatusErrorCallback, e as JumioStatusResolvedCallback, g as JumioVerificationPayload, h as JumioWorkflowStatus, V as VerifyIneInput, j as createJumioClient } from '../client-BR1xIZ0X.js';
3
+ import 'axios';
4
+
5
+ /**
6
+ * Error base para todas las excepciones emitidas por el SDK de Jumio.
7
+ */
8
+ declare class JumioError extends Error {
9
+ readonly isJumioError = true;
10
+ readonly statusCode?: number;
11
+ readonly rawData?: unknown;
12
+ readonly code?: string;
13
+ constructor(message: string, options?: {
14
+ statusCode?: number;
15
+ rawData?: unknown;
16
+ code?: string;
17
+ cause?: unknown;
18
+ });
19
+ }
20
+ /**
21
+ * Error lanzado ante demoras excesivas o timeouts del servicio de verificación.
22
+ */
23
+ declare class JumioTimeoutError extends JumioError {
24
+ constructor(message?: string, rawData?: unknown);
25
+ }
26
+ /**
27
+ * Error lanzado cuando no hay conectividad de red o falla el transporte HTTP.
28
+ */
29
+ declare class JumioNetworkError extends JumioError {
30
+ constructor(message?: string, cause?: unknown);
31
+ }
32
+ /**
33
+ * Error lanzado cuando la validación del documento es rechazada o no pasa los criterios.
34
+ */
35
+ declare class JumioValidationError extends JumioError {
36
+ constructor(message?: string, rawData?: unknown);
37
+ }
38
+ /**
39
+ * Error lanzado cuando ocurre un fallo al obtener, descargar o procesar una imagen (frente o reverso).
40
+ */
41
+ declare class JumioImageProcessingError extends JumioError {
42
+ constructor(message: string, cause?: unknown);
43
+ }
44
+ /**
45
+ * Error lanzado cuando el sondeo (polling) agota los intentos máximos sin un estado definitivo.
46
+ */
47
+ declare class JumioPollingTimeoutError extends JumioError {
48
+ readonly attempts: number;
49
+ constructor(attempts: number, message?: string, rawData?: unknown);
50
+ }
51
+ /**
52
+ * Error lanzado cuando la operación es cancelada explícitamente mediante un AbortSignal.
53
+ */
54
+ declare class JumioAbortError extends JumioError {
55
+ constructor(message?: string);
56
+ }
57
+ /**
58
+ * Verifica si un error dado es una instancia de JumioError.
59
+ */
60
+ declare function isJumioError(error: unknown): error is JumioError;
61
+
62
+ /**
63
+ * Lista de estados considerados finales en el flujo de Jumio.
64
+ */
65
+ declare const FINAL_JUMIO_STATUSES: readonly ["PROCESSED", "APPROVED_VERIFIED", "REJECTED", "FAILED", "ERROR", "DENIED", "EXPIRED", "ABANDONED", "DONE", "COMPLETED", "NOT_READABLE", "FRAUD", "UNSUPPORTED_ID_TYPE"];
66
+ /**
67
+ * Lista de estados considerados exitosos (aprobados) de forma inequívoca.
68
+ *
69
+ * Nota: `PROCESSED` no se considera aprobado por sí solo: en la gateway
70
+ * DynamiCore/Jumio significa únicamente que el workflow terminó de procesar.
71
+ * El veredicto real se reporta en los campos `valid` y `decision`
72
+ * (p. ej. `decision: "NOT_EXECUTED"` con `workflowStatus: "PROCESSED"` es un rechazo).
73
+ */
74
+ declare const APPROVED_JUMIO_STATUSES: readonly ["APPROVED_VERIFIED", "DONE", "COMPLETED"];
75
+ /**
76
+ * Convierte un valor a texto en minúsculas sin espacios extremos.
77
+ */
78
+ declare function toLowerText(value: unknown): string;
79
+ /**
80
+ * Convierte un valor a texto en mayúsculas sin espacios extremos.
81
+ */
82
+ declare function toUpperText(value: unknown): string;
83
+ /**
84
+ * Desempaqueta el envoltorio estándar `{ data: ... }` si está presente en la respuesta.
85
+ */
86
+ declare function extractEnvelopeData<T>(responseData: unknown): T;
87
+ /**
88
+ * Desempaqueta recursivamente múltiples niveles de anidación `{ data: { data: ... } }`.
89
+ */
90
+ declare function extractNestedData(source: unknown, maxDepth?: number): unknown;
91
+ /**
92
+ * Extrae de forma inteligente el mensaje de error o descripción contenido en una respuesta de Jumio o Axios.
93
+ */
94
+ declare function extractJumioMessage(source: unknown): string;
95
+ /**
96
+ * Determina si el estado de workflow reportado por Jumio es definitivo (ha terminado su procesamiento).
97
+ */
98
+ declare function isFinalJumioStatus(status: unknown): boolean;
99
+ /**
100
+ * Determina si el estado reportado indica una verificación aprobada y válida.
101
+ */
102
+ declare function isApprovedJumioStatus(status: unknown): boolean;
103
+ /**
104
+ * Determina si la decisión final de Jumio indica un documento aprobado.
105
+ * La decisión es el veredicto real reportado por la gateway
106
+ * (p. ej. `PASSED` = aprobado, `NOT_EXECUTED` / `REJECTED` / `FAILED` = rechazado).
107
+ */
108
+ declare function isPassedJumioDecision(decision: unknown): boolean;
109
+ /**
110
+ * Resuelve la validez final de una verificación priorizando los campos
111
+ * explícitos (`valid`, `decision`) sobre el estado del workflow:
112
+ *
113
+ * 1. `valid` booleano explícito (fuente de verdad de la gateway).
114
+ * 2. `decision` presente (`PASSED` = válido, cualquier otro valor = inválido).
115
+ * 3. Fallback conservador basado en el estado del workflow.
116
+ */
117
+ declare function resolveVerificationValidity(data: Pick<JumioVerificationData, "valid" | "decision">, fallbackStatus: unknown): boolean;
118
+
119
+ interface RetryOptions {
120
+ maxRetries?: number;
121
+ initialDelayMs?: number;
122
+ maxDelayMs?: number;
123
+ factor?: number;
124
+ shouldRetry?: (error: unknown) => boolean;
125
+ signal?: AbortSignal;
126
+ onRetry?: (attempt: number, error: unknown, delayMs: number) => void;
127
+ }
128
+ /**
129
+ * Espera una cantidad dada de milisegundos con soporte para cancelación vía AbortSignal.
130
+ */
131
+ declare function delay(ms: number, signal?: AbortSignal): Promise<void>;
132
+ /**
133
+ * Evalúa si un mensaje o error es atribuible a fallos transitorios o timeouts de Jumio que ameritan reintento.
134
+ */
135
+ declare function shouldRetryJumio(errorOrMessage: unknown): boolean;
136
+ /**
137
+ * Ejecuta una operación asíncrona con reintentos automáticos y backoff exponencial.
138
+ */
139
+ declare function withRetry<T>(operation: (attempt: number) => Promise<T>, options?: RetryOptions): Promise<T>;
140
+
141
+ /**
142
+ * Elimina el prefijo data URI (ej. "data:image/jpeg;base64,") si existe.
143
+ */
144
+ declare function stripDataUrlPrefix(dataUrl: string): string;
145
+ /**
146
+ * Verifica si una cadena parece ser Base64 directo o Data URL.
147
+ */
148
+ declare function isBase64String(input: string): boolean;
149
+ /**
150
+ * Extrae la URL utilizable a partir de un objeto candidato devuelto por endpoints de S3 u objetos de formulario.
151
+ */
152
+ declare function normalizeSignedUrl(input: unknown, fallback?: string): string;
153
+ /**
154
+ * Convierte un Blob o File en una cadena Base64 pura.
155
+ */
156
+ declare function blobToBase64(blob: Blob): Promise<string>;
157
+ /**
158
+ * Convierte un ArrayBuffer o Uint8Array a cadena Base64 pura.
159
+ */
160
+ declare function arrayBufferToBase64(buffer: ArrayBuffer | Uint8Array): string;
161
+ /**
162
+ * Descarga una imagen desde una URL HTTP/HTTPS/Blob y la retorna como Base64 puro.
163
+ */
164
+ declare function fetchUrlAsBase64(url: string, signal?: AbortSignal): Promise<string>;
165
+ /**
166
+ * Resuelve cualquier tipo de entrada de imagen (URL, ruta S3, File, Blob, Base64) a una cadena Base64 pura.
167
+ */
168
+ declare function resolveImageSourceToBase64(source: ImageSource, s3Signer?: S3SignerFunction, signal?: AbortSignal): Promise<string>;
169
+
170
+ declare class JumioHttpClient {
171
+ private readonly client;
172
+ private readonly config;
173
+ constructor(config?: JumioClientConfig);
174
+ /**
175
+ * Resuelve los headers dinámicos (token de auth y context).
176
+ */
177
+ private resolveHeaders;
178
+ /**
179
+ * Normaliza cualquier error de Axios a una excepción tipada JumioError.
180
+ */
181
+ private normalizeError;
182
+ /**
183
+ * Ejecuta una petición POST al endpoint de Jumio para iniciar o procesar la verificación.
184
+ */
185
+ postVerification<T>(payload: unknown, options?: {
186
+ signal?: AbortSignal;
187
+ timeout?: number;
188
+ }): Promise<T>;
189
+ /**
190
+ * Ejecuta una petición GET para consultar el estado actual de una verificación de INE.
191
+ */
192
+ getVerificationStatus<T>(accountId: string, workflowId: string, options?: {
193
+ signal?: AbortSignal;
194
+ timeout?: number;
195
+ }): Promise<T>;
196
+ getConfig(): Readonly<JumioClientConfig>;
197
+ }
198
+
199
+ /**
200
+ * Sondea activamente el estado de verificación de un workflow de Jumio hasta alcanzar un estado definitivo.
201
+ */
202
+ declare function pollJumioStatus(http: JumioHttpClient, accountId: string, workflowId: string, options?: PollStatusOptions): Promise<VerifyIneResult>;
203
+
204
+ export { APPROVED_JUMIO_STATUSES, FINAL_JUMIO_STATUSES, ImageSource, JumioAbortError, JumioClientConfig, JumioError, JumioHttpClient, JumioImageProcessingError, JumioNetworkError, JumioPollingTimeoutError, JumioTimeoutError, JumioValidationError, JumioVerificationData, PollStatusOptions, type RetryOptions, S3SignerFunction, VerifyIneResult, arrayBufferToBase64, blobToBase64, delay, extractEnvelopeData, extractJumioMessage, extractNestedData, fetchUrlAsBase64, isApprovedJumioStatus, isBase64String, isFinalJumioStatus, isJumioError, isPassedJumioDecision, normalizeSignedUrl, pollJumioStatus, resolveImageSourceToBase64, resolveVerificationValidity, shouldRetryJumio, stripDataUrlPrefix, toLowerText, toUpperText, withRetry };