@fiado/type-kit 3.252.0 → 3.253.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_test_/unit/biometrics/BiometricVerificationChangedV1.test.ts +96 -0
- package/_test_/unit/biometrics/CreateBiometricVerificationRequest.test.ts +109 -0
- package/bin/benefitCenter/enums/BenefitFlowEnum.d.ts +11 -0
- package/bin/benefitCenter/enums/BenefitFlowEnum.js +15 -0
- package/bin/biometrics/dtos/BiometricDelivery.d.ts +65 -0
- package/bin/biometrics/dtos/BiometricDelivery.js +89 -0
- package/bin/biometrics/dtos/BiometricSubject.d.ts +43 -0
- package/bin/biometrics/dtos/BiometricSubject.js +63 -0
- package/bin/biometrics/dtos/requests/CreateBiometricVerificationRequest.d.ts +73 -0
- package/bin/biometrics/dtos/requests/CreateBiometricVerificationRequest.js +81 -0
- package/bin/biometrics/dtos/responses/BiometricVerificationResponse.d.ts +87 -0
- package/bin/biometrics/dtos/responses/BiometricVerificationResponse.js +131 -0
- package/bin/biometrics/enums/BiometricDeliveryModeEnum.d.ts +29 -0
- package/bin/biometrics/enums/BiometricDeliveryModeEnum.js +33 -0
- package/bin/biometrics/enums/BiometricEventTypeEnum.d.ts +28 -0
- package/bin/biometrics/enums/BiometricEventTypeEnum.js +32 -0
- package/bin/biometrics/enums/BiometricProviderEnum.d.ts +25 -0
- package/bin/biometrics/enums/BiometricProviderEnum.js +29 -0
- package/bin/biometrics/enums/BiometricResultEnum.d.ts +25 -0
- package/bin/biometrics/enums/BiometricResultEnum.js +29 -0
- package/bin/biometrics/enums/BiometricTypeEnum.d.ts +20 -0
- package/bin/biometrics/enums/BiometricTypeEnum.js +24 -0
- package/bin/biometrics/enums/BiometricVerificationStatusEnum.d.ts +33 -0
- package/bin/biometrics/enums/BiometricVerificationStatusEnum.js +37 -0
- package/bin/biometrics/events/BiometricVerificationChangedV1.d.ts +80 -0
- package/bin/biometrics/events/BiometricVerificationChangedV1.js +98 -0
- package/bin/biometrics/index.d.ts +11 -0
- package/bin/biometrics/index.js +35 -0
- package/bin/index.d.ts +1 -0
- package/bin/index.js +4 -3
- package/bin/loanConfig/enums/ModifiableByRoleEnum.d.ts +11 -0
- package/bin/loanConfig/enums/ModifiableByRoleEnum.js +15 -0
- package/bin/places/dtos/CashInFeeDto.d.ts +17 -0
- package/bin/places/dtos/CashInFeeDto.js +12 -0
- package/bin/platformRbac/dtos/ResendOtpRequest.d.ts +22 -0
- package/bin/platformRbac/dtos/ResendOtpRequest.js +36 -0
- package/bin/platformRbac/dtos/ResendSelfRegisterOtpRequest.d.ts +11 -0
- package/bin/platformRbac/dtos/ResendSelfRegisterOtpRequest.js +36 -0
- package/package.json +1 -1
- package/src/biometrics/dtos/BiometricDelivery.ts +81 -0
- package/src/biometrics/dtos/BiometricSubject.ts +54 -0
- package/src/biometrics/dtos/requests/CreateBiometricVerificationRequest.ts +101 -0
- package/src/biometrics/dtos/responses/BiometricVerificationResponse.ts +133 -0
- package/src/biometrics/enums/BiometricDeliveryModeEnum.ts +31 -0
- package/src/biometrics/enums/BiometricEventTypeEnum.ts +31 -0
- package/src/biometrics/enums/BiometricProviderEnum.ts +28 -0
- package/src/biometrics/enums/BiometricResultEnum.ts +28 -0
- package/src/biometrics/enums/BiometricTypeEnum.ts +23 -0
- package/src/biometrics/enums/BiometricVerificationStatusEnum.ts +37 -0
- package/src/biometrics/events/BiometricVerificationChangedV1.ts +114 -0
- package/src/biometrics/index.ts +24 -0
- package/src/index.ts +1 -0
- package/bin/loanCredit/dtos/requests/UpdateActivationChecklistRequest.d.ts +0 -11
- package/bin/loanCredit/dtos/requests/UpdateActivationChecklistRequest.js +0 -46
- package/bin/loanCredit/enums/ClientLevelEnum.d.ts +0 -11
- package/bin/loanCredit/enums/ClientLevelEnum.js +0 -15
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { BiometricDeliveryModeEnum } from '../../enums/BiometricDeliveryModeEnum';
|
|
2
|
+
import { BiometricProviderEnum } from '../../enums/BiometricProviderEnum';
|
|
3
|
+
import { BiometricResultEnum } from '../../enums/BiometricResultEnum';
|
|
4
|
+
import { BiometricTypeEnum } from '../../enums/BiometricTypeEnum';
|
|
5
|
+
import { BiometricVerificationStatusEnum } from '../../enums/BiometricVerificationStatusEnum';
|
|
6
|
+
import type { BiometricDelivery } from '../BiometricDelivery';
|
|
7
|
+
/**
|
|
8
|
+
* El estado completo de una verificación biométrica.
|
|
9
|
+
*
|
|
10
|
+
* 🔴 **El MISMO tipo lo devuelven el `POST` y el `GET`** (DEC-012). Es una excepción consciente a
|
|
11
|
+
* "1 DTO por endpoint": el `POST` devuelve el estado inicial del MISMO recurso que el `GET` expone
|
|
12
|
+
* después. Duplicar el tipo garantizaría drift entre los dos — la clase de bug donde el `GET` gana
|
|
13
|
+
* un campo y el `POST` no, y el caller descubre la diferencia en producción. Queda registrado acá
|
|
14
|
+
* para que no haya que re-discutirlo en cada PR.
|
|
15
|
+
*
|
|
16
|
+
* `biometrics-business` — Entrega 1.
|
|
17
|
+
*/
|
|
18
|
+
export declare class BiometricVerificationResponse {
|
|
19
|
+
/**
|
|
20
|
+
* La llave de todo. Se genera al crear, viaja dentro de la metadata del proveedor, y vuelve
|
|
21
|
+
* ECOADA en cada webhook — **por eso la correlación es un `get` por PK y no una búsqueda**.
|
|
22
|
+
*/
|
|
23
|
+
biometricVerificationId: string;
|
|
24
|
+
/** Eco de lo que pediste. */
|
|
25
|
+
type: BiometricTypeEnum;
|
|
26
|
+
/** Eco de lo que pediste. */
|
|
27
|
+
provider: BiometricProviderEnum;
|
|
28
|
+
/** Eco de lo que pediste. */
|
|
29
|
+
directoryId: string;
|
|
30
|
+
/** Dónde va el PROCESO. Ver `BiometricVerificationStatusEnum`. */
|
|
31
|
+
status: BiometricVerificationStatusEnum;
|
|
32
|
+
/**
|
|
33
|
+
* Qué dijo el BIOMÉTRICO. Ver `BiometricResultEnum`.
|
|
34
|
+
*
|
|
35
|
+
* ⚠️ Puede venir poblado con `status` todavía en `IN_PROGRESS`: el veredicto del facematch llega
|
|
36
|
+
* en el `step_completed`, antes del cierre de la verificación. Eso no es una inconsistencia, es
|
|
37
|
+
* exactamente la razón de que `status` y `result` sean campos distintos.
|
|
38
|
+
*/
|
|
39
|
+
result: BiometricResultEnum;
|
|
40
|
+
/** Discriminador de `delivery`. Ver `BiometricDeliveryModeEnum`. */
|
|
41
|
+
deliveryMode: BiometricDeliveryModeEnum;
|
|
42
|
+
/**
|
|
43
|
+
* Lo que necesitas para ejecutar el biométrico. Su forma depende de `deliveryMode` — haz el
|
|
44
|
+
* `switch`, no leas `link` a ciegas.
|
|
45
|
+
*
|
|
46
|
+
* Sin decorador de validación a propósito: es una unión discriminada y `class-validator` no
|
|
47
|
+
* sabe validar uniones sin un `@Type()` con discriminador que acá agregaría más ceremonia que
|
|
48
|
+
* seguridad. El contrato lo garantiza el productor, que es un solo lambda.
|
|
49
|
+
*/
|
|
50
|
+
delivery: BiometricDelivery;
|
|
51
|
+
/**
|
|
52
|
+
* Similitud reportada por el proveedor, 0–100, cuando la expone. Rekognition da score; Metamap
|
|
53
|
+
* responde pass/fail y esto viene ausente.
|
|
54
|
+
*
|
|
55
|
+
* ⚠️ **No lo uses para decidir tú el umbral.** El proveedor ya aplicó el suyo y eso es lo que
|
|
56
|
+
* dice `result`. Esto es para diagnóstico y para calibrar, no para re-juzgar.
|
|
57
|
+
*/
|
|
58
|
+
score?: number;
|
|
59
|
+
/** Umbral que aplicó el proveedor, cuando lo expone. Contexto para leer el `score`. */
|
|
60
|
+
threshold?: number;
|
|
61
|
+
/**
|
|
62
|
+
* El id de la verificación del lado del proveedor (en Metamap, su `verificationId`). Para
|
|
63
|
+
* soporte y reconciliación: es lo que se busca en el panel del proveedor.
|
|
64
|
+
*/
|
|
65
|
+
providerRef?: string;
|
|
66
|
+
/** Tu correlación, tal cual la mandaste. */
|
|
67
|
+
callerContext?: string;
|
|
68
|
+
/**
|
|
69
|
+
* Por qué falló, solo con `status = FAILED`. Texto OPERACIONAL, sin PII y sin nada del
|
|
70
|
+
* proveedor: describe qué se rompió de nuestro lado (DEC-013).
|
|
71
|
+
*/
|
|
72
|
+
failureReason?: string;
|
|
73
|
+
/**
|
|
74
|
+
* Todas las marcas de tiempo son **`string` ISO-8601 UTC con `Z`**.
|
|
75
|
+
*
|
|
76
|
+
* ⚠️ En la tabla se persisten como `Number` (dynamoose serializa `Date` a number, y un GSI
|
|
77
|
+
* declarado `S` sobre un timestamp se rompe en silencio). El mapeo Row → DTO es explícito. Si
|
|
78
|
+
* copias este tipo para el `Row`, rompes el índice.
|
|
79
|
+
*/
|
|
80
|
+
createdAt: string;
|
|
81
|
+
/** Última vez que cambió algo. ISO-8601 UTC con `Z`. */
|
|
82
|
+
updatedAt: string;
|
|
83
|
+
/** Cuándo vence la entrega. Es lo que el `GET` compara para persistir `EXPIRED` (DEC-015). */
|
|
84
|
+
expiresAt: string;
|
|
85
|
+
/** Cuándo alcanzó un estado terminal. Ausente mientras siga viva. */
|
|
86
|
+
completedAt?: string;
|
|
87
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.BiometricVerificationResponse = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
const BiometricDeliveryModeEnum_1 = require("../../enums/BiometricDeliveryModeEnum");
|
|
16
|
+
const BiometricProviderEnum_1 = require("../../enums/BiometricProviderEnum");
|
|
17
|
+
const BiometricResultEnum_1 = require("../../enums/BiometricResultEnum");
|
|
18
|
+
const BiometricTypeEnum_1 = require("../../enums/BiometricTypeEnum");
|
|
19
|
+
const BiometricVerificationStatusEnum_1 = require("../../enums/BiometricVerificationStatusEnum");
|
|
20
|
+
/**
|
|
21
|
+
* El estado completo de una verificación biométrica.
|
|
22
|
+
*
|
|
23
|
+
* 🔴 **El MISMO tipo lo devuelven el `POST` y el `GET`** (DEC-012). Es una excepción consciente a
|
|
24
|
+
* "1 DTO por endpoint": el `POST` devuelve el estado inicial del MISMO recurso que el `GET` expone
|
|
25
|
+
* después. Duplicar el tipo garantizaría drift entre los dos — la clase de bug donde el `GET` gana
|
|
26
|
+
* un campo y el `POST` no, y el caller descubre la diferencia en producción. Queda registrado acá
|
|
27
|
+
* para que no haya que re-discutirlo en cada PR.
|
|
28
|
+
*
|
|
29
|
+
* `biometrics-business` — Entrega 1.
|
|
30
|
+
*/
|
|
31
|
+
class BiometricVerificationResponse {
|
|
32
|
+
}
|
|
33
|
+
exports.BiometricVerificationResponse = BiometricVerificationResponse;
|
|
34
|
+
__decorate([
|
|
35
|
+
(0, class_transformer_1.Expose)(),
|
|
36
|
+
(0, class_validator_1.IsString)(),
|
|
37
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
38
|
+
__metadata("design:type", String)
|
|
39
|
+
], BiometricVerificationResponse.prototype, "biometricVerificationId", void 0);
|
|
40
|
+
__decorate([
|
|
41
|
+
(0, class_transformer_1.Expose)(),
|
|
42
|
+
(0, class_validator_1.IsEnum)(BiometricTypeEnum_1.BiometricTypeEnum),
|
|
43
|
+
__metadata("design:type", String)
|
|
44
|
+
], BiometricVerificationResponse.prototype, "type", void 0);
|
|
45
|
+
__decorate([
|
|
46
|
+
(0, class_transformer_1.Expose)(),
|
|
47
|
+
(0, class_validator_1.IsEnum)(BiometricProviderEnum_1.BiometricProviderEnum),
|
|
48
|
+
__metadata("design:type", String)
|
|
49
|
+
], BiometricVerificationResponse.prototype, "provider", void 0);
|
|
50
|
+
__decorate([
|
|
51
|
+
(0, class_transformer_1.Expose)(),
|
|
52
|
+
(0, class_validator_1.IsString)(),
|
|
53
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
54
|
+
__metadata("design:type", String)
|
|
55
|
+
], BiometricVerificationResponse.prototype, "directoryId", void 0);
|
|
56
|
+
__decorate([
|
|
57
|
+
(0, class_transformer_1.Expose)(),
|
|
58
|
+
(0, class_validator_1.IsEnum)(BiometricVerificationStatusEnum_1.BiometricVerificationStatusEnum),
|
|
59
|
+
__metadata("design:type", String)
|
|
60
|
+
], BiometricVerificationResponse.prototype, "status", void 0);
|
|
61
|
+
__decorate([
|
|
62
|
+
(0, class_transformer_1.Expose)(),
|
|
63
|
+
(0, class_validator_1.IsEnum)(BiometricResultEnum_1.BiometricResultEnum),
|
|
64
|
+
__metadata("design:type", String)
|
|
65
|
+
], BiometricVerificationResponse.prototype, "result", void 0);
|
|
66
|
+
__decorate([
|
|
67
|
+
(0, class_transformer_1.Expose)(),
|
|
68
|
+
(0, class_validator_1.IsEnum)(BiometricDeliveryModeEnum_1.BiometricDeliveryModeEnum),
|
|
69
|
+
__metadata("design:type", String)
|
|
70
|
+
], BiometricVerificationResponse.prototype, "deliveryMode", void 0);
|
|
71
|
+
__decorate([
|
|
72
|
+
(0, class_transformer_1.Expose)(),
|
|
73
|
+
__metadata("design:type", Object)
|
|
74
|
+
], BiometricVerificationResponse.prototype, "delivery", void 0);
|
|
75
|
+
__decorate([
|
|
76
|
+
(0, class_transformer_1.Expose)(),
|
|
77
|
+
(0, class_validator_1.IsOptional)(),
|
|
78
|
+
(0, class_validator_1.IsNumber)(),
|
|
79
|
+
(0, class_validator_1.Min)(0),
|
|
80
|
+
(0, class_validator_1.Max)(100),
|
|
81
|
+
__metadata("design:type", Number)
|
|
82
|
+
], BiometricVerificationResponse.prototype, "score", void 0);
|
|
83
|
+
__decorate([
|
|
84
|
+
(0, class_transformer_1.Expose)(),
|
|
85
|
+
(0, class_validator_1.IsOptional)(),
|
|
86
|
+
(0, class_validator_1.IsNumber)(),
|
|
87
|
+
(0, class_validator_1.Min)(0),
|
|
88
|
+
(0, class_validator_1.Max)(100),
|
|
89
|
+
__metadata("design:type", Number)
|
|
90
|
+
], BiometricVerificationResponse.prototype, "threshold", void 0);
|
|
91
|
+
__decorate([
|
|
92
|
+
(0, class_transformer_1.Expose)(),
|
|
93
|
+
(0, class_validator_1.IsOptional)(),
|
|
94
|
+
(0, class_validator_1.IsString)(),
|
|
95
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
96
|
+
__metadata("design:type", String)
|
|
97
|
+
], BiometricVerificationResponse.prototype, "providerRef", void 0);
|
|
98
|
+
__decorate([
|
|
99
|
+
(0, class_transformer_1.Expose)(),
|
|
100
|
+
(0, class_validator_1.IsOptional)(),
|
|
101
|
+
(0, class_validator_1.IsString)(),
|
|
102
|
+
(0, class_validator_1.MaxLength)(256),
|
|
103
|
+
__metadata("design:type", String)
|
|
104
|
+
], BiometricVerificationResponse.prototype, "callerContext", void 0);
|
|
105
|
+
__decorate([
|
|
106
|
+
(0, class_transformer_1.Expose)(),
|
|
107
|
+
(0, class_validator_1.IsOptional)(),
|
|
108
|
+
(0, class_validator_1.IsString)(),
|
|
109
|
+
__metadata("design:type", String)
|
|
110
|
+
], BiometricVerificationResponse.prototype, "failureReason", void 0);
|
|
111
|
+
__decorate([
|
|
112
|
+
(0, class_transformer_1.Expose)(),
|
|
113
|
+
(0, class_validator_1.IsISO8601)({ strict: true }),
|
|
114
|
+
__metadata("design:type", String)
|
|
115
|
+
], BiometricVerificationResponse.prototype, "createdAt", void 0);
|
|
116
|
+
__decorate([
|
|
117
|
+
(0, class_transformer_1.Expose)(),
|
|
118
|
+
(0, class_validator_1.IsISO8601)({ strict: true }),
|
|
119
|
+
__metadata("design:type", String)
|
|
120
|
+
], BiometricVerificationResponse.prototype, "updatedAt", void 0);
|
|
121
|
+
__decorate([
|
|
122
|
+
(0, class_transformer_1.Expose)(),
|
|
123
|
+
(0, class_validator_1.IsISO8601)({ strict: true }),
|
|
124
|
+
__metadata("design:type", String)
|
|
125
|
+
], BiometricVerificationResponse.prototype, "expiresAt", void 0);
|
|
126
|
+
__decorate([
|
|
127
|
+
(0, class_transformer_1.Expose)(),
|
|
128
|
+
(0, class_validator_1.IsOptional)(),
|
|
129
|
+
(0, class_validator_1.IsISO8601)({ strict: true }),
|
|
130
|
+
__metadata("design:type", String)
|
|
131
|
+
], BiometricVerificationResponse.prototype, "completedAt", void 0);
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CÓMO se le entrega al caller lo que necesita para ejecutar el biométrico. **Es el discriminador
|
|
3
|
+
* de `BiometricVerificationResponse.delivery`.**
|
|
4
|
+
*
|
|
5
|
+
* 🔴 **Esta es la pieza que hace genérico al contrato, y la razón de que exista este servicio.**
|
|
6
|
+
* Los proveedores no se parecen en nada:
|
|
7
|
+
*
|
|
8
|
+
* | Proveedor | Qué entrega | Quién ejecuta | Cómo vuelve el resultado |
|
|
9
|
+
* |---|---|---|---|
|
|
10
|
+
* | Metamap | un link hospedado | el navegador del usuario | webhook async |
|
|
11
|
+
* | Apple/Google | un challenge + nonce | el dispositivo, on-device | attestation que devuelve el cliente |
|
|
12
|
+
* | Amazon | nada (se mandan imágenes) | nuestro servidor | síncrono, con score |
|
|
13
|
+
*
|
|
14
|
+
* Si la respuesta fuera `{ link }` a secas, **solo Metamap entraría** y el día que llegue Apple
|
|
15
|
+
* habría que romper el contrato con todos los callers ya escritos. Discriminar por el MODO —y no
|
|
16
|
+
* por el proveedor— deja que entre cualquiera de los tres sin tocar a nadie.
|
|
17
|
+
*
|
|
18
|
+
* El `GET` de polling NO cambia entre modos: devuelve estado, no mecanismo.
|
|
19
|
+
*
|
|
20
|
+
* `biometrics-business` — Entrega 1 (solo `REDIRECT` produce valores reales).
|
|
21
|
+
*/
|
|
22
|
+
export declare enum BiometricDeliveryModeEnum {
|
|
23
|
+
/** `delivery` trae `{ link, expiresAt }`. El usuario abre el link y ejecuta ahí. */
|
|
24
|
+
REDIRECT = "REDIRECT",
|
|
25
|
+
/** `delivery` trae `{ challenge, nonce, expiresAt }`. El dispositivo firma y devuelve. */
|
|
26
|
+
CHALLENGE = "CHALLENGE",
|
|
27
|
+
/** `delivery` viene vacío: el biométrico ya corrió y `result` viene poblado en la misma respuesta. */
|
|
28
|
+
IMMEDIATE = "IMMEDIATE"
|
|
29
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BiometricDeliveryModeEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* CÓMO se le entrega al caller lo que necesita para ejecutar el biométrico. **Es el discriminador
|
|
6
|
+
* de `BiometricVerificationResponse.delivery`.**
|
|
7
|
+
*
|
|
8
|
+
* 🔴 **Esta es la pieza que hace genérico al contrato, y la razón de que exista este servicio.**
|
|
9
|
+
* Los proveedores no se parecen en nada:
|
|
10
|
+
*
|
|
11
|
+
* | Proveedor | Qué entrega | Quién ejecuta | Cómo vuelve el resultado |
|
|
12
|
+
* |---|---|---|---|
|
|
13
|
+
* | Metamap | un link hospedado | el navegador del usuario | webhook async |
|
|
14
|
+
* | Apple/Google | un challenge + nonce | el dispositivo, on-device | attestation que devuelve el cliente |
|
|
15
|
+
* | Amazon | nada (se mandan imágenes) | nuestro servidor | síncrono, con score |
|
|
16
|
+
*
|
|
17
|
+
* Si la respuesta fuera `{ link }` a secas, **solo Metamap entraría** y el día que llegue Apple
|
|
18
|
+
* habría que romper el contrato con todos los callers ya escritos. Discriminar por el MODO —y no
|
|
19
|
+
* por el proveedor— deja que entre cualquiera de los tres sin tocar a nadie.
|
|
20
|
+
*
|
|
21
|
+
* El `GET` de polling NO cambia entre modos: devuelve estado, no mecanismo.
|
|
22
|
+
*
|
|
23
|
+
* `biometrics-business` — Entrega 1 (solo `REDIRECT` produce valores reales).
|
|
24
|
+
*/
|
|
25
|
+
var BiometricDeliveryModeEnum;
|
|
26
|
+
(function (BiometricDeliveryModeEnum) {
|
|
27
|
+
/** `delivery` trae `{ link, expiresAt }`. El usuario abre el link y ejecuta ahí. */
|
|
28
|
+
BiometricDeliveryModeEnum["REDIRECT"] = "REDIRECT";
|
|
29
|
+
/** `delivery` trae `{ challenge, nonce, expiresAt }`. El dispositivo firma y devuelve. */
|
|
30
|
+
BiometricDeliveryModeEnum["CHALLENGE"] = "CHALLENGE";
|
|
31
|
+
/** `delivery` viene vacío: el biométrico ya corrió y `result` viene poblado en la misma respuesta. */
|
|
32
|
+
BiometricDeliveryModeEnum["IMMEDIATE"] = "IMMEDIATE";
|
|
33
|
+
})(BiometricDeliveryModeEnum || (exports.BiometricDeliveryModeEnum = BiometricDeliveryModeEnum = {}));
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Qué le pasó a la verificación, según el proveedor. Viaja en `BiometricVerificationChangedV1` y es
|
|
3
|
+
* lo que el consumer usa para decidir la transición de estado.
|
|
4
|
+
*
|
|
5
|
+
* Es el vocabulario NUESTRO, no el de Metamap: `kyc-metamap-webhook` traduce sus `eventName` a
|
|
6
|
+
* estos cuatro antes de publicar. Así el consumer no aprende el catálogo de un proveedor externo, y
|
|
7
|
+
* el día que entre otro proveedor traduce a los mismos cuatro.
|
|
8
|
+
*
|
|
9
|
+
* `biometrics-business` — Entrega 1.
|
|
10
|
+
*/
|
|
11
|
+
export declare enum BiometricEventTypeEnum {
|
|
12
|
+
/** El usuario arrancó la verificación. → `IN_PROGRESS`. */
|
|
13
|
+
VERIFICATION_STARTED = "VERIFICATION_STARTED",
|
|
14
|
+
/**
|
|
15
|
+
* Cerró una estación con resultado. Es el que trae el veredicto del facematch, ANTES del cierre:
|
|
16
|
+
* por eso `result` puede quedar poblado con `status` todavía en `IN_PROGRESS`.
|
|
17
|
+
*/
|
|
18
|
+
STEP_COMPLETED = "STEP_COMPLETED",
|
|
19
|
+
/** El proveedor cerró la verificación. → `COMPLETED`. */
|
|
20
|
+
VERIFICATION_COMPLETED = "VERIFICATION_COMPLETED",
|
|
21
|
+
/**
|
|
22
|
+
* El proveedor la dio por vencida. → `EXPIRED`.
|
|
23
|
+
*
|
|
24
|
+
* ⚠️ **No se depende de este evento para expirar.** El `GET` persiste `EXPIRED` comparando
|
|
25
|
+
* contra `expiresAt` (DEC-015), así que una verificación vence aunque este evento nunca llegue.
|
|
26
|
+
*/
|
|
27
|
+
VERIFICATION_EXPIRED = "VERIFICATION_EXPIRED"
|
|
28
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BiometricEventTypeEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Qué le pasó a la verificación, según el proveedor. Viaja en `BiometricVerificationChangedV1` y es
|
|
6
|
+
* lo que el consumer usa para decidir la transición de estado.
|
|
7
|
+
*
|
|
8
|
+
* Es el vocabulario NUESTRO, no el de Metamap: `kyc-metamap-webhook` traduce sus `eventName` a
|
|
9
|
+
* estos cuatro antes de publicar. Así el consumer no aprende el catálogo de un proveedor externo, y
|
|
10
|
+
* el día que entre otro proveedor traduce a los mismos cuatro.
|
|
11
|
+
*
|
|
12
|
+
* `biometrics-business` — Entrega 1.
|
|
13
|
+
*/
|
|
14
|
+
var BiometricEventTypeEnum;
|
|
15
|
+
(function (BiometricEventTypeEnum) {
|
|
16
|
+
/** El usuario arrancó la verificación. → `IN_PROGRESS`. */
|
|
17
|
+
BiometricEventTypeEnum["VERIFICATION_STARTED"] = "VERIFICATION_STARTED";
|
|
18
|
+
/**
|
|
19
|
+
* Cerró una estación con resultado. Es el que trae el veredicto del facematch, ANTES del cierre:
|
|
20
|
+
* por eso `result` puede quedar poblado con `status` todavía en `IN_PROGRESS`.
|
|
21
|
+
*/
|
|
22
|
+
BiometricEventTypeEnum["STEP_COMPLETED"] = "STEP_COMPLETED";
|
|
23
|
+
/** El proveedor cerró la verificación. → `COMPLETED`. */
|
|
24
|
+
BiometricEventTypeEnum["VERIFICATION_COMPLETED"] = "VERIFICATION_COMPLETED";
|
|
25
|
+
/**
|
|
26
|
+
* El proveedor la dio por vencida. → `EXPIRED`.
|
|
27
|
+
*
|
|
28
|
+
* ⚠️ **No se depende de este evento para expirar.** El `GET` persiste `EXPIRED` comparando
|
|
29
|
+
* contra `expiresAt` (DEC-015), así que una verificación vence aunque este evento nunca llegue.
|
|
30
|
+
*/
|
|
31
|
+
BiometricEventTypeEnum["VERIFICATION_EXPIRED"] = "VERIFICATION_EXPIRED";
|
|
32
|
+
})(BiometricEventTypeEnum || (exports.BiometricEventTypeEnum = BiometricEventTypeEnum = {}));
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QUIÉN ejecuta el biométrico. Ortogonal a `BiometricTypeEnum`: el mismo `FACEMATCH` lo puede
|
|
3
|
+
* resolver Metamap con un link o Amazon con una llamada síncrona.
|
|
4
|
+
*
|
|
5
|
+
* 🔴 **Es OBLIGATORIO en el request** (DEC-004, decisión de Andres 2026-07-30). El caller nombra al
|
|
6
|
+
* proveedor en vez de dejar que `biometrics-business` resuelva un default.
|
|
7
|
+
*
|
|
8
|
+
* **Consecuencia registrada (TD-001):** cambiar de proveedor obliga a tocar y redesplegar a TODOS
|
|
9
|
+
* los callers. Se aceptó a cambio de que la elección sea explícita y auditable en cada request.
|
|
10
|
+
*
|
|
11
|
+
* Solo `METAMAP` está implementado. Los otros tres cambian el MODO DE ENTREGA, no solo el
|
|
12
|
+
* proveedor — por eso existe `BiometricDeliveryModeEnum`.
|
|
13
|
+
*
|
|
14
|
+
* `biometrics-business` — Entrega 1.
|
|
15
|
+
*/
|
|
16
|
+
export declare enum BiometricProviderEnum {
|
|
17
|
+
/** El único implementado. Entrega por link hospedado + webhook async → `REDIRECT`. */
|
|
18
|
+
METAMAP = "METAMAP",
|
|
19
|
+
/** Face ID, on-device. Entregaría un challenge y recibiría una attestation → `CHALLENGE`. */
|
|
20
|
+
APPLE = "APPLE",
|
|
21
|
+
/** Biometría de Android, on-device. Mismo modo que Apple → `CHALLENGE`. */
|
|
22
|
+
GOOGLE = "GOOGLE",
|
|
23
|
+
/** Rekognition: comparación en servidor, con score. Respuesta síncrona → `IMMEDIATE`. */
|
|
24
|
+
AWS = "AWS"
|
|
25
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BiometricProviderEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* QUIÉN ejecuta el biométrico. Ortogonal a `BiometricTypeEnum`: el mismo `FACEMATCH` lo puede
|
|
6
|
+
* resolver Metamap con un link o Amazon con una llamada síncrona.
|
|
7
|
+
*
|
|
8
|
+
* 🔴 **Es OBLIGATORIO en el request** (DEC-004, decisión de Andres 2026-07-30). El caller nombra al
|
|
9
|
+
* proveedor en vez de dejar que `biometrics-business` resuelva un default.
|
|
10
|
+
*
|
|
11
|
+
* **Consecuencia registrada (TD-001):** cambiar de proveedor obliga a tocar y redesplegar a TODOS
|
|
12
|
+
* los callers. Se aceptó a cambio de que la elección sea explícita y auditable en cada request.
|
|
13
|
+
*
|
|
14
|
+
* Solo `METAMAP` está implementado. Los otros tres cambian el MODO DE ENTREGA, no solo el
|
|
15
|
+
* proveedor — por eso existe `BiometricDeliveryModeEnum`.
|
|
16
|
+
*
|
|
17
|
+
* `biometrics-business` — Entrega 1.
|
|
18
|
+
*/
|
|
19
|
+
var BiometricProviderEnum;
|
|
20
|
+
(function (BiometricProviderEnum) {
|
|
21
|
+
/** El único implementado. Entrega por link hospedado + webhook async → `REDIRECT`. */
|
|
22
|
+
BiometricProviderEnum["METAMAP"] = "METAMAP";
|
|
23
|
+
/** Face ID, on-device. Entregaría un challenge y recibiría una attestation → `CHALLENGE`. */
|
|
24
|
+
BiometricProviderEnum["APPLE"] = "APPLE";
|
|
25
|
+
/** Biometría de Android, on-device. Mismo modo que Apple → `CHALLENGE`. */
|
|
26
|
+
BiometricProviderEnum["GOOGLE"] = "GOOGLE";
|
|
27
|
+
/** Rekognition: comparación en servidor, con score. Respuesta síncrona → `IMMEDIATE`. */
|
|
28
|
+
BiometricProviderEnum["AWS"] = "AWS";
|
|
29
|
+
})(BiometricProviderEnum || (exports.BiometricProviderEnum = BiometricProviderEnum = {}));
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Qué dijo el BIOMÉTRICO. Ortogonal a `BiometricVerificationStatusEnum`, que dice dónde va el
|
|
3
|
+
* proceso — ver el comentario de ese enum para por qué van separados.
|
|
4
|
+
*
|
|
5
|
+
* `biometrics-business` — Entrega 1.
|
|
6
|
+
*/
|
|
7
|
+
export declare enum BiometricResultEnum {
|
|
8
|
+
/**
|
|
9
|
+
* Todavía no hay veredicto. Es el valor inicial y también el de los terminales que cierran sin
|
|
10
|
+
* resultado (`EXPIRED`, `FAILED`).
|
|
11
|
+
*
|
|
12
|
+
* ⚠️ `UNKNOWN` **no es** `NO_MATCH`. Tratarlos igual convierte "el usuario nunca abrió el link"
|
|
13
|
+
* en "el usuario no es quien dice ser" — que es una acusación, no un dato.
|
|
14
|
+
*/
|
|
15
|
+
UNKNOWN = "UNKNOWN",
|
|
16
|
+
/** Coincide con la referencia. En Metamap: el step `facematch-service-validation` sin `error`. */
|
|
17
|
+
MATCH = "MATCH",
|
|
18
|
+
/** No coincide. Es un veredicto real del proveedor, no una falla de proceso. */
|
|
19
|
+
NO_MATCH = "NO_MATCH",
|
|
20
|
+
/**
|
|
21
|
+
* El biométrico corrió pero no concluye (mala iluminación, foto de referencia pobre, score en la
|
|
22
|
+
* zona gris). Distinto de `UNKNOWN`: acá sí hubo intento.
|
|
23
|
+
*/
|
|
24
|
+
INCONCLUSIVE = "INCONCLUSIVE"
|
|
25
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BiometricResultEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Qué dijo el BIOMÉTRICO. Ortogonal a `BiometricVerificationStatusEnum`, que dice dónde va el
|
|
6
|
+
* proceso — ver el comentario de ese enum para por qué van separados.
|
|
7
|
+
*
|
|
8
|
+
* `biometrics-business` — Entrega 1.
|
|
9
|
+
*/
|
|
10
|
+
var BiometricResultEnum;
|
|
11
|
+
(function (BiometricResultEnum) {
|
|
12
|
+
/**
|
|
13
|
+
* Todavía no hay veredicto. Es el valor inicial y también el de los terminales que cierran sin
|
|
14
|
+
* resultado (`EXPIRED`, `FAILED`).
|
|
15
|
+
*
|
|
16
|
+
* ⚠️ `UNKNOWN` **no es** `NO_MATCH`. Tratarlos igual convierte "el usuario nunca abrió el link"
|
|
17
|
+
* en "el usuario no es quien dice ser" — que es una acusación, no un dato.
|
|
18
|
+
*/
|
|
19
|
+
BiometricResultEnum["UNKNOWN"] = "UNKNOWN";
|
|
20
|
+
/** Coincide con la referencia. En Metamap: el step `facematch-service-validation` sin `error`. */
|
|
21
|
+
BiometricResultEnum["MATCH"] = "MATCH";
|
|
22
|
+
/** No coincide. Es un veredicto real del proveedor, no una falla de proceso. */
|
|
23
|
+
BiometricResultEnum["NO_MATCH"] = "NO_MATCH";
|
|
24
|
+
/**
|
|
25
|
+
* El biométrico corrió pero no concluye (mala iluminación, foto de referencia pobre, score en la
|
|
26
|
+
* zona gris). Distinto de `UNKNOWN`: acá sí hubo intento.
|
|
27
|
+
*/
|
|
28
|
+
BiometricResultEnum["INCONCLUSIVE"] = "INCONCLUSIVE";
|
|
29
|
+
})(BiometricResultEnum || (exports.BiometricResultEnum = BiometricResultEnum = {}));
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QUÉ biométrico se pide. Es el discriminador del caso de uso, independiente de quién lo ejecute
|
|
3
|
+
* (eso lo dice `BiometricProviderEnum`).
|
|
4
|
+
*
|
|
5
|
+
* 🔴 **Solo `FACEMATCH` está implementado.** Los demás están declarados a propósito: el contrato
|
|
6
|
+
* nace genérico para que agregar un biométrico no obligue a romperlo. Pedir uno no implementado
|
|
7
|
+
* devuelve `BIOMETRIC_NOT_SUPPORTED` (422) — un error explícito y accionable, nunca un 500.
|
|
8
|
+
*
|
|
9
|
+
* `biometrics-business` — Entrega 1.
|
|
10
|
+
*/
|
|
11
|
+
export declare enum BiometricTypeEnum {
|
|
12
|
+
/** Comparar la selfie del momento contra una foto de referencia ya registrada. */
|
|
13
|
+
FACEMATCH = "FACEMATCH",
|
|
14
|
+
/** ¿Hay una persona viva frente a la cámara? Declarado, sin implementar. */
|
|
15
|
+
LIVENESS = "LIVENESS",
|
|
16
|
+
/** Verificación por voz. Declarado, sin implementar. */
|
|
17
|
+
VOICE = "VOICE",
|
|
18
|
+
/** Comparar la cara contra la foto impresa en el documento. Declarado, sin implementar. */
|
|
19
|
+
DOCUMENT_MATCH = "DOCUMENT_MATCH"
|
|
20
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BiometricTypeEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* QUÉ biométrico se pide. Es el discriminador del caso de uso, independiente de quién lo ejecute
|
|
6
|
+
* (eso lo dice `BiometricProviderEnum`).
|
|
7
|
+
*
|
|
8
|
+
* 🔴 **Solo `FACEMATCH` está implementado.** Los demás están declarados a propósito: el contrato
|
|
9
|
+
* nace genérico para que agregar un biométrico no obligue a romperlo. Pedir uno no implementado
|
|
10
|
+
* devuelve `BIOMETRIC_NOT_SUPPORTED` (422) — un error explícito y accionable, nunca un 500.
|
|
11
|
+
*
|
|
12
|
+
* `biometrics-business` — Entrega 1.
|
|
13
|
+
*/
|
|
14
|
+
var BiometricTypeEnum;
|
|
15
|
+
(function (BiometricTypeEnum) {
|
|
16
|
+
/** Comparar la selfie del momento contra una foto de referencia ya registrada. */
|
|
17
|
+
BiometricTypeEnum["FACEMATCH"] = "FACEMATCH";
|
|
18
|
+
/** ¿Hay una persona viva frente a la cámara? Declarado, sin implementar. */
|
|
19
|
+
BiometricTypeEnum["LIVENESS"] = "LIVENESS";
|
|
20
|
+
/** Verificación por voz. Declarado, sin implementar. */
|
|
21
|
+
BiometricTypeEnum["VOICE"] = "VOICE";
|
|
22
|
+
/** Comparar la cara contra la foto impresa en el documento. Declarado, sin implementar. */
|
|
23
|
+
BiometricTypeEnum["DOCUMENT_MATCH"] = "DOCUMENT_MATCH";
|
|
24
|
+
})(BiometricTypeEnum || (exports.BiometricTypeEnum = BiometricTypeEnum = {}));
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dónde va el PROCESO de la verificación. **No dice cómo salió el biométrico** — eso es
|
|
3
|
+
* `BiometricResultEnum`.
|
|
4
|
+
*
|
|
5
|
+
* 🔴 **Están separados a propósito.** Aplastar los dos en un solo campo hace ambiguo un caso real y
|
|
6
|
+
* frecuente: el facematch ya dio `MATCH` (llegó el `step_completed`) pero la verificación todavía no
|
|
7
|
+
* cerró (falta el `verification_completed`). Con un campo único no hay forma de decir eso sin
|
|
8
|
+
* mentir en alguna dirección.
|
|
9
|
+
*
|
|
10
|
+
* **Los terminales no retroceden.** `COMPLETED`, `EXPIRED` y `FAILED` no vuelven a `IN_PROGRESS`
|
|
11
|
+
* aunque llegue un evento posterior — SQS no garantiza orden y la cola es at-least-once.
|
|
12
|
+
*
|
|
13
|
+
* `biometrics-business` — Entrega 1.
|
|
14
|
+
*/
|
|
15
|
+
export declare enum BiometricVerificationStatusEnum {
|
|
16
|
+
/** Se emitió la entrega (link/challenge) y nadie la ha ejecutado todavía. */
|
|
17
|
+
PENDING = "PENDING",
|
|
18
|
+
/** El usuario arrancó. Puede haber resultados parciales de estaciones. */
|
|
19
|
+
IN_PROGRESS = "IN_PROGRESS",
|
|
20
|
+
/** El proveedor cerró la verificación. `result` tiene el veredicto final. */
|
|
21
|
+
COMPLETED = "COMPLETED",
|
|
22
|
+
/**
|
|
23
|
+
* Venció sin completarse. Lo escribe el proveedor (`verification_expired`) **o** el propio `GET`
|
|
24
|
+
* al detectar `now > expiresAt` — y en ese caso lo PERSISTE (DEC-015). Si se calculara sin
|
|
25
|
+
* persistir, un cierre tardío escribiría `COMPLETED` sobre algo que el caller ya vio `EXPIRED`.
|
|
26
|
+
*/
|
|
27
|
+
EXPIRED = "EXPIRED",
|
|
28
|
+
/**
|
|
29
|
+
* Falla interna procesando la verificación. **El proveedor NO lo produce**: el catálogo de
|
|
30
|
+
* eventos de Metamap no tiene ninguno de error (DEC-013). `failureReason` es nuestro.
|
|
31
|
+
*/
|
|
32
|
+
FAILED = "FAILED"
|
|
33
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BiometricVerificationStatusEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Dónde va el PROCESO de la verificación. **No dice cómo salió el biométrico** — eso es
|
|
6
|
+
* `BiometricResultEnum`.
|
|
7
|
+
*
|
|
8
|
+
* 🔴 **Están separados a propósito.** Aplastar los dos en un solo campo hace ambiguo un caso real y
|
|
9
|
+
* frecuente: el facematch ya dio `MATCH` (llegó el `step_completed`) pero la verificación todavía no
|
|
10
|
+
* cerró (falta el `verification_completed`). Con un campo único no hay forma de decir eso sin
|
|
11
|
+
* mentir en alguna dirección.
|
|
12
|
+
*
|
|
13
|
+
* **Los terminales no retroceden.** `COMPLETED`, `EXPIRED` y `FAILED` no vuelven a `IN_PROGRESS`
|
|
14
|
+
* aunque llegue un evento posterior — SQS no garantiza orden y la cola es at-least-once.
|
|
15
|
+
*
|
|
16
|
+
* `biometrics-business` — Entrega 1.
|
|
17
|
+
*/
|
|
18
|
+
var BiometricVerificationStatusEnum;
|
|
19
|
+
(function (BiometricVerificationStatusEnum) {
|
|
20
|
+
/** Se emitió la entrega (link/challenge) y nadie la ha ejecutado todavía. */
|
|
21
|
+
BiometricVerificationStatusEnum["PENDING"] = "PENDING";
|
|
22
|
+
/** El usuario arrancó. Puede haber resultados parciales de estaciones. */
|
|
23
|
+
BiometricVerificationStatusEnum["IN_PROGRESS"] = "IN_PROGRESS";
|
|
24
|
+
/** El proveedor cerró la verificación. `result` tiene el veredicto final. */
|
|
25
|
+
BiometricVerificationStatusEnum["COMPLETED"] = "COMPLETED";
|
|
26
|
+
/**
|
|
27
|
+
* Venció sin completarse. Lo escribe el proveedor (`verification_expired`) **o** el propio `GET`
|
|
28
|
+
* al detectar `now > expiresAt` — y en ese caso lo PERSISTE (DEC-015). Si se calculara sin
|
|
29
|
+
* persistir, un cierre tardío escribiría `COMPLETED` sobre algo que el caller ya vio `EXPIRED`.
|
|
30
|
+
*/
|
|
31
|
+
BiometricVerificationStatusEnum["EXPIRED"] = "EXPIRED";
|
|
32
|
+
/**
|
|
33
|
+
* Falla interna procesando la verificación. **El proveedor NO lo produce**: el catálogo de
|
|
34
|
+
* eventos de Metamap no tiene ninguno de error (DEC-013). `failureReason` es nuestro.
|
|
35
|
+
*/
|
|
36
|
+
BiometricVerificationStatusEnum["FAILED"] = "FAILED";
|
|
37
|
+
})(BiometricVerificationStatusEnum || (exports.BiometricVerificationStatusEnum = BiometricVerificationStatusEnum = {}));
|