@fiado/type-kit 3.11.0 → 3.12.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.
|
@@ -15,6 +15,12 @@ export declare class AuthorizeBenefitsMarketplaceTransactionRequest {
|
|
|
15
15
|
* Reusa entradas existentes en `ProductCatalog_GT` del procesador
|
|
16
16
|
* (`MEX_TOPUP`, `MEX_SERVICE_PAYMENT`, …). No se agregan entradas nuevas
|
|
17
17
|
* en Fase 2 (ver doc §10).
|
|
18
|
+
*
|
|
19
|
+
* El factory dinámico `TransactionProcessorFactory.getMarketplaceInstance`
|
|
20
|
+
* deriva el token del binding desde aquí (`MEX_<X>` →
|
|
21
|
+
* `BenefitsMarketplace<X>TransactionService`). La regex impone el contrato
|
|
22
|
+
* y permite que el factory falle con 400 en lugar de 500 si llega algo
|
|
23
|
+
* fuera de la convención.
|
|
18
24
|
*/
|
|
19
25
|
productCatalogId: string;
|
|
20
26
|
/**
|
|
@@ -28,14 +34,32 @@ export declare class AuthorizeBenefitsMarketplaceTransactionRequest {
|
|
|
28
34
|
* debe generar `transactionNumber` — por eso este DTO no lo expone.
|
|
29
35
|
*/
|
|
30
36
|
idempotencyKey: string;
|
|
37
|
+
/**
|
|
38
|
+
* Monto en unidad mayor de la moneda (no centavos). Como mucho 2 decimales.
|
|
39
|
+
* El `Max` cap es defensivo — atrapa errores obvios (montos absurdos por
|
|
40
|
+
* bugs de UI) sin restringir casos legítimos. Ajustar si la operatoria
|
|
41
|
+
* requiere techos mayores.
|
|
42
|
+
*/
|
|
31
43
|
amount: number;
|
|
32
44
|
/** ISO numeric (3 chars). Ej: "484" (MXN), "840" (USD). */
|
|
33
45
|
currencyId: string;
|
|
34
46
|
benefitId: string;
|
|
47
|
+
/**
|
|
48
|
+
* `leafId = base64url("<moduleName>::<idServicio>")`. Convención
|
|
49
|
+
* cross-componente del Centro (ver
|
|
50
|
+
* `docs/favorites/05b-favoritos-ligados-a-producto.md`). La regex
|
|
51
|
+
* enforce el charset base64url sin tener que decodificar acá.
|
|
52
|
+
*/
|
|
35
53
|
leafId: string;
|
|
36
54
|
productId: string;
|
|
37
55
|
reference: string;
|
|
38
|
-
/**
|
|
56
|
+
/**
|
|
57
|
+
* Decide a qué conector apuntar dentro del marketplace. Va concatenado
|
|
58
|
+
* a la URL `POST /pay/{moduleName}` del marketplace privado. La regex
|
|
59
|
+
* restringe a charset seguro (kebab-case minúsculas), previene
|
|
60
|
+
* inyecciones de path y matchea la convención de naming de los
|
|
61
|
+
* lambdas Fiado.
|
|
62
|
+
*/
|
|
39
63
|
moduleName: string;
|
|
40
64
|
/** Inputs dinámicos del leaf — opcionales según el servicio. */
|
|
41
65
|
inputs?: Record<string, string | number | boolean>;
|
|
@@ -30,6 +30,9 @@ __decorate([
|
|
|
30
30
|
(0, class_validator_1.IsString)(),
|
|
31
31
|
(0, class_validator_1.IsNotEmpty)(),
|
|
32
32
|
(0, class_validator_1.MaxLength)(64),
|
|
33
|
+
(0, class_validator_1.Matches)(/^MEX_[A-Z][A-Z_]*$/, {
|
|
34
|
+
message: "productCatalogId debe seguir el formato MEX_<UPPER_SNAKE>",
|
|
35
|
+
}),
|
|
33
36
|
__metadata("design:type", String)
|
|
34
37
|
], AuthorizeBenefitsMarketplaceTransactionRequest.prototype, "productCatalogId", void 0);
|
|
35
38
|
__decorate([
|
|
@@ -39,13 +42,16 @@ __decorate([
|
|
|
39
42
|
__metadata("design:type", String)
|
|
40
43
|
], AuthorizeBenefitsMarketplaceTransactionRequest.prototype, "idempotencyKey", void 0);
|
|
41
44
|
__decorate([
|
|
42
|
-
(0, class_validator_1.IsNumber)(),
|
|
45
|
+
(0, class_validator_1.IsNumber)({ maxDecimalPlaces: 2 }),
|
|
43
46
|
(0, class_validator_1.IsPositive)(),
|
|
47
|
+
(0, class_validator_1.Max)(1000000),
|
|
44
48
|
__metadata("design:type", Number)
|
|
45
49
|
], AuthorizeBenefitsMarketplaceTransactionRequest.prototype, "amount", void 0);
|
|
46
50
|
__decorate([
|
|
47
51
|
(0, class_validator_1.IsString)(),
|
|
48
|
-
(0, class_validator_1.
|
|
52
|
+
(0, class_validator_1.Matches)(/^\d{3}$/, {
|
|
53
|
+
message: "currencyId debe ser ISO numérico de 3 dígitos",
|
|
54
|
+
}),
|
|
49
55
|
__metadata("design:type", String)
|
|
50
56
|
], AuthorizeBenefitsMarketplaceTransactionRequest.prototype, "currencyId", void 0);
|
|
51
57
|
__decorate([
|
|
@@ -58,6 +64,9 @@ __decorate([
|
|
|
58
64
|
(0, class_validator_1.IsString)(),
|
|
59
65
|
(0, class_validator_1.IsNotEmpty)(),
|
|
60
66
|
(0, class_validator_1.MaxLength)(256),
|
|
67
|
+
(0, class_validator_1.Matches)(/^[A-Za-z0-9_-]+$/, {
|
|
68
|
+
message: "leafId debe estar codificado en base64url (charset A-Za-z0-9_-)",
|
|
69
|
+
}),
|
|
61
70
|
__metadata("design:type", String)
|
|
62
71
|
], AuthorizeBenefitsMarketplaceTransactionRequest.prototype, "leafId", void 0);
|
|
63
72
|
__decorate([
|
|
@@ -76,6 +85,9 @@ __decorate([
|
|
|
76
85
|
(0, class_validator_1.IsString)(),
|
|
77
86
|
(0, class_validator_1.IsNotEmpty)(),
|
|
78
87
|
(0, class_validator_1.MaxLength)(128),
|
|
88
|
+
(0, class_validator_1.Matches)(/^[a-z][a-z0-9-]*$/, {
|
|
89
|
+
message: "moduleName debe ser kebab-case minúsculas",
|
|
90
|
+
}),
|
|
79
91
|
__metadata("design:type", String)
|
|
80
92
|
], AuthorizeBenefitsMarketplaceTransactionRequest.prototype, "moduleName", void 0);
|
|
81
93
|
__decorate([
|
package/package.json
CHANGED
|
@@ -7,7 +7,8 @@ import {
|
|
|
7
7
|
IsOptional,
|
|
8
8
|
IsPositive,
|
|
9
9
|
IsString,
|
|
10
|
-
|
|
10
|
+
Matches,
|
|
11
|
+
Max,
|
|
11
12
|
MaxLength,
|
|
12
13
|
} from "class-validator";
|
|
13
14
|
|
|
@@ -28,10 +29,19 @@ export class AuthorizeBenefitsMarketplaceTransactionRequest {
|
|
|
28
29
|
* Reusa entradas existentes en `ProductCatalog_GT` del procesador
|
|
29
30
|
* (`MEX_TOPUP`, `MEX_SERVICE_PAYMENT`, …). No se agregan entradas nuevas
|
|
30
31
|
* en Fase 2 (ver doc §10).
|
|
32
|
+
*
|
|
33
|
+
* El factory dinámico `TransactionProcessorFactory.getMarketplaceInstance`
|
|
34
|
+
* deriva el token del binding desde aquí (`MEX_<X>` →
|
|
35
|
+
* `BenefitsMarketplace<X>TransactionService`). La regex impone el contrato
|
|
36
|
+
* y permite que el factory falle con 400 en lugar de 500 si llega algo
|
|
37
|
+
* fuera de la convención.
|
|
31
38
|
*/
|
|
32
39
|
@IsString()
|
|
33
40
|
@IsNotEmpty()
|
|
34
41
|
@MaxLength(64)
|
|
42
|
+
@Matches(/^MEX_[A-Z][A-Z_]*$/, {
|
|
43
|
+
message: "productCatalogId debe seguir el formato MEX_<UPPER_SNAKE>",
|
|
44
|
+
})
|
|
35
45
|
productCatalogId!: string;
|
|
36
46
|
|
|
37
47
|
/**
|
|
@@ -49,13 +59,22 @@ export class AuthorizeBenefitsMarketplaceTransactionRequest {
|
|
|
49
59
|
@MaxLength(64)
|
|
50
60
|
idempotencyKey!: string;
|
|
51
61
|
|
|
52
|
-
|
|
62
|
+
/**
|
|
63
|
+
* Monto en unidad mayor de la moneda (no centavos). Como mucho 2 decimales.
|
|
64
|
+
* El `Max` cap es defensivo — atrapa errores obvios (montos absurdos por
|
|
65
|
+
* bugs de UI) sin restringir casos legítimos. Ajustar si la operatoria
|
|
66
|
+
* requiere techos mayores.
|
|
67
|
+
*/
|
|
68
|
+
@IsNumber({maxDecimalPlaces: 2})
|
|
53
69
|
@IsPositive()
|
|
70
|
+
@Max(1_000_000)
|
|
54
71
|
amount!: number;
|
|
55
72
|
|
|
56
73
|
/** ISO numeric (3 chars). Ej: "484" (MXN), "840" (USD). */
|
|
57
74
|
@IsString()
|
|
58
|
-
@
|
|
75
|
+
@Matches(/^\d{3}$/, {
|
|
76
|
+
message: "currencyId debe ser ISO numérico de 3 dígitos",
|
|
77
|
+
})
|
|
59
78
|
currencyId!: string;
|
|
60
79
|
|
|
61
80
|
// Campos del Centro de Beneficios — first-class, no opcionales
|
|
@@ -65,9 +84,18 @@ export class AuthorizeBenefitsMarketplaceTransactionRequest {
|
|
|
65
84
|
@MaxLength(64)
|
|
66
85
|
benefitId!: string;
|
|
67
86
|
|
|
87
|
+
/**
|
|
88
|
+
* `leafId = base64url("<moduleName>::<idServicio>")`. Convención
|
|
89
|
+
* cross-componente del Centro (ver
|
|
90
|
+
* `docs/favorites/05b-favoritos-ligados-a-producto.md`). La regex
|
|
91
|
+
* enforce el charset base64url sin tener que decodificar acá.
|
|
92
|
+
*/
|
|
68
93
|
@IsString()
|
|
69
94
|
@IsNotEmpty()
|
|
70
95
|
@MaxLength(256)
|
|
96
|
+
@Matches(/^[A-Za-z0-9_-]+$/, {
|
|
97
|
+
message: "leafId debe estar codificado en base64url (charset A-Za-z0-9_-)",
|
|
98
|
+
})
|
|
71
99
|
leafId!: string;
|
|
72
100
|
|
|
73
101
|
@IsString()
|
|
@@ -80,10 +108,19 @@ export class AuthorizeBenefitsMarketplaceTransactionRequest {
|
|
|
80
108
|
@MaxLength(128)
|
|
81
109
|
reference!: string;
|
|
82
110
|
|
|
83
|
-
/**
|
|
111
|
+
/**
|
|
112
|
+
* Decide a qué conector apuntar dentro del marketplace. Va concatenado
|
|
113
|
+
* a la URL `POST /pay/{moduleName}` del marketplace privado. La regex
|
|
114
|
+
* restringe a charset seguro (kebab-case minúsculas), previene
|
|
115
|
+
* inyecciones de path y matchea la convención de naming de los
|
|
116
|
+
* lambdas Fiado.
|
|
117
|
+
*/
|
|
84
118
|
@IsString()
|
|
85
119
|
@IsNotEmpty()
|
|
86
120
|
@MaxLength(128)
|
|
121
|
+
@Matches(/^[a-z][a-z0-9-]*$/, {
|
|
122
|
+
message: "moduleName debe ser kebab-case minúsculas",
|
|
123
|
+
})
|
|
87
124
|
moduleName!: string;
|
|
88
125
|
|
|
89
126
|
/** Inputs dinámicos del leaf — opcionales según el servicio. */
|