@fiado/type-kit 3.57.1 → 3.59.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/cognitoBackofficeConnector/dtos/VerifyPasswordResponse.test.ts +32 -0
- package/bin/cognitoBackofficeConnector/dtos/VerifyPasswordResponse.d.ts +15 -0
- package/bin/cognitoBackofficeConnector/dtos/VerifyPasswordResponse.js +30 -0
- package/bin/remittance/dtos/RemittanceConfirmRequest.d.ts +41 -0
- package/bin/remittance/dtos/RemittanceConfirmRequest.js +2 -0
- package/bin/remittance/dtos/RemittanceSendPreviewResponse.d.ts +15 -0
- package/bin/remittance/dtos/index.d.ts +1 -0
- package/bin/remittance/dtos/index.js +1 -0
- package/package.json +1 -1
- package/src/cognitoBackofficeConnector/dtos/VerifyPasswordResponse.ts +24 -6
- package/src/remittance/dtos/RemittanceConfirmRequest.ts +42 -0
- package/src/remittance/dtos/RemittanceSendPreviewResponse.ts +17 -0
- package/src/remittance/dtos/index.ts +1 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { plainToInstance } from 'class-transformer';
|
|
3
|
+
import { validate } from 'class-validator';
|
|
4
|
+
import { VerifyPasswordResponse } from '../../../../src/cognitoBackofficeConnector/dtos/VerifyPasswordResponse';
|
|
5
|
+
import { CognitoChallengeType } from '../../../../src/cognitoBackofficeConnector/enums/CognitoChallengeType';
|
|
6
|
+
|
|
7
|
+
describe('VerifyPasswordResponse', () => {
|
|
8
|
+
it('solo valid (backward-compatible)', async () => {
|
|
9
|
+
const dto = plainToInstance(VerifyPasswordResponse, { valid: true });
|
|
10
|
+
expect(await validate(dto)).toEqual([]);
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it('valid + challenge nativo NEW_PASSWORD_REQUIRED + session', async () => {
|
|
14
|
+
const dto = plainToInstance(VerifyPasswordResponse, {
|
|
15
|
+
valid: true,
|
|
16
|
+
challengeType: CognitoChallengeType.NEW_PASSWORD_REQUIRED,
|
|
17
|
+
session: 'sess-123',
|
|
18
|
+
challengeParameters: { USER_ID_FOR_SRP: 'sub' },
|
|
19
|
+
});
|
|
20
|
+
expect(await validate(dto)).toEqual([]);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('falla si challengeType no es del enum', async () => {
|
|
24
|
+
const dto = plainToInstance(VerifyPasswordResponse, { valid: true, challengeType: 'BOGUS' });
|
|
25
|
+
expect((await validate(dto)).some(e => e.property === 'challengeType')).toBe(true);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('falla si valid no es boolean', async () => {
|
|
29
|
+
const dto = plainToInstance(VerifyPasswordResponse, { valid: 'yes' });
|
|
30
|
+
expect((await validate(dto)).some(e => e.property === 'valid')).toBe(true);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
import { CognitoChallengeType } from '../enums/CognitoChallengeType';
|
|
2
|
+
/**
|
|
3
|
+
* Respuesta de `POST /auth/verify-password`.
|
|
4
|
+
*
|
|
5
|
+
* `valid` es el único campo siempre presente (consumidores legacy hacen
|
|
6
|
+
* `const { valid } = ...`). Los campos opcionales surfacean el challenge nativo
|
|
7
|
+
* que `ADMIN_USER_PASSWORD_AUTH` devuelve sin throw: para un usuario en
|
|
8
|
+
* `FORCE_CHANGE_PASSWORD`, Cognito responde `ChallengeName:'NEW_PASSWORD_REQUIRED'`
|
|
9
|
+
* + `Session`, y el caller (rbac) los usa para emitir ese challenge nativo FUERA
|
|
10
|
+
* de CUSTOM_AUTH en vez de arrancar el MFA (F-12). Backward-compatible: todos los
|
|
11
|
+
* campos nuevos son opcionales.
|
|
12
|
+
*/
|
|
1
13
|
export declare class VerifyPasswordResponse {
|
|
2
14
|
valid: boolean;
|
|
15
|
+
challengeType?: CognitoChallengeType;
|
|
16
|
+
session?: string;
|
|
17
|
+
challengeParameters?: Record<string, string>;
|
|
3
18
|
}
|
|
@@ -12,6 +12,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.VerifyPasswordResponse = void 0;
|
|
13
13
|
const class_transformer_1 = require("class-transformer");
|
|
14
14
|
const class_validator_1 = require("class-validator");
|
|
15
|
+
const CognitoChallengeType_1 = require("../enums/CognitoChallengeType");
|
|
16
|
+
/**
|
|
17
|
+
* Respuesta de `POST /auth/verify-password`.
|
|
18
|
+
*
|
|
19
|
+
* `valid` es el único campo siempre presente (consumidores legacy hacen
|
|
20
|
+
* `const { valid } = ...`). Los campos opcionales surfacean el challenge nativo
|
|
21
|
+
* que `ADMIN_USER_PASSWORD_AUTH` devuelve sin throw: para un usuario en
|
|
22
|
+
* `FORCE_CHANGE_PASSWORD`, Cognito responde `ChallengeName:'NEW_PASSWORD_REQUIRED'`
|
|
23
|
+
* + `Session`, y el caller (rbac) los usa para emitir ese challenge nativo FUERA
|
|
24
|
+
* de CUSTOM_AUTH en vez de arrancar el MFA (F-12). Backward-compatible: todos los
|
|
25
|
+
* campos nuevos son opcionales.
|
|
26
|
+
*/
|
|
15
27
|
class VerifyPasswordResponse {
|
|
16
28
|
}
|
|
17
29
|
exports.VerifyPasswordResponse = VerifyPasswordResponse;
|
|
@@ -20,3 +32,21 @@ __decorate([
|
|
|
20
32
|
(0, class_validator_1.IsBoolean)(),
|
|
21
33
|
__metadata("design:type", Boolean)
|
|
22
34
|
], VerifyPasswordResponse.prototype, "valid", void 0);
|
|
35
|
+
__decorate([
|
|
36
|
+
(0, class_transformer_1.Expose)(),
|
|
37
|
+
(0, class_validator_1.IsOptional)(),
|
|
38
|
+
(0, class_validator_1.IsEnum)(CognitoChallengeType_1.CognitoChallengeType),
|
|
39
|
+
__metadata("design:type", String)
|
|
40
|
+
], VerifyPasswordResponse.prototype, "challengeType", void 0);
|
|
41
|
+
__decorate([
|
|
42
|
+
(0, class_transformer_1.Expose)(),
|
|
43
|
+
(0, class_validator_1.IsOptional)(),
|
|
44
|
+
(0, class_validator_1.IsString)(),
|
|
45
|
+
__metadata("design:type", String)
|
|
46
|
+
], VerifyPasswordResponse.prototype, "session", void 0);
|
|
47
|
+
__decorate([
|
|
48
|
+
(0, class_transformer_1.Expose)(),
|
|
49
|
+
(0, class_validator_1.IsOptional)(),
|
|
50
|
+
(0, class_validator_1.IsObject)(),
|
|
51
|
+
__metadata("design:type", Object)
|
|
52
|
+
], VerifyPasswordResponse.prototype, "challengeParameters", void 0);
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sobre pre-armado por el backend (benefits) que el front reenvía **verbatim** al
|
|
3
|
+
* procesador `POST /benefitsMarketplace/authorize` para confirmar el envío (F6).
|
|
4
|
+
*
|
|
5
|
+
* Es un subconjunto de `AuthorizeBenefitsMarketplaceTransactionRequest`: el backend
|
|
6
|
+
* llena todo lo que deriva del corredor del beneficiario (`leafId`, `productId`,
|
|
7
|
+
* `amount`, ...) más la taxonomía del marketplace (`benefitId`, `productCatalogId`,
|
|
8
|
+
* `moduleName`). El front **solo agrega `inputs.idempotencyKey`** (que genera él, 1:1
|
|
9
|
+
* con el `previewRef`) antes de postear. El front NO debe construir ni decodificar
|
|
10
|
+
* ninguno de estos campos — los trata como tokens opacos.
|
|
11
|
+
*/
|
|
12
|
+
export interface RemittanceConfirmRequest {
|
|
13
|
+
/** Producto del catálogo del marketplace (ProductCatalog_GT). Constante para remesas: `INTERNATIONAL_REMITTANCE`. */
|
|
14
|
+
productCatalogId: string;
|
|
15
|
+
/** Benefit que aloja remesas en el árbol del marketplace (ej. `ben-7`). */
|
|
16
|
+
benefitId: string;
|
|
17
|
+
/** productId del corredor — monto libre (ej. `GT#GCA10#VAR`). */
|
|
18
|
+
productId: string;
|
|
19
|
+
/** Módulo conector que ejecuta el pago (`uniteller-connector`). */
|
|
20
|
+
moduleName: string;
|
|
21
|
+
/** leafId base64url del corredor: `base64url("<moduleName>::<countryISO>#<payerCode>#<receptionMethodName>")`. */
|
|
22
|
+
leafId: string;
|
|
23
|
+
/** Referencia del beneficiario destino (ej. `BENE#1884512`). */
|
|
24
|
+
reference: string;
|
|
25
|
+
/** Monto USD total **congelado** a debitar del wallet (== total del preview). */
|
|
26
|
+
amount: number;
|
|
27
|
+
/** Moneda de cobro en ISO numérico — siempre USD (`840`) para remesas. */
|
|
28
|
+
currencyId: string;
|
|
29
|
+
/** Datos específicos del módulo que el procesador reenvía al connector. */
|
|
30
|
+
inputs: RemittanceConfirmInputs;
|
|
31
|
+
}
|
|
32
|
+
export interface RemittanceConfirmInputs {
|
|
33
|
+
/** `transactionInternalReference` de UNIR (sale del preview). Requerido para el confirm. */
|
|
34
|
+
previewRef: string;
|
|
35
|
+
/**
|
|
36
|
+
* Idempotencia del tramo mobile→procesador. **Lo genera el front** en el tap de
|
|
37
|
+
* confirmar, 1:1 con el `previewRef`: si re-previewa, nuevo `previewRef` ⇒ nuevo
|
|
38
|
+
* `idempotencyKey`. El backend lo deja vacío en el sobre.
|
|
39
|
+
*/
|
|
40
|
+
idempotencyKey?: string;
|
|
41
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { RemittanceConfirmRequest } from "./RemittanceConfirmRequest";
|
|
1
2
|
export interface RemittanceBeneficiaryDisplay {
|
|
2
3
|
name: string;
|
|
3
4
|
bank?: string;
|
|
@@ -15,4 +16,18 @@ export declare class RemittanceSendPreviewResponse {
|
|
|
15
16
|
beneficiaryDisplay: RemittanceBeneficiaryDisplay;
|
|
16
17
|
/** Epoch ms. Cache 10 min en RemittanceCache_GT (D-F5.4). */
|
|
17
18
|
expiresAt: number;
|
|
19
|
+
/**
|
|
20
|
+
* serviceId del corredor resuelto por el connector: `<countryISO>#<payerCode>#<receptionMethodName>`
|
|
21
|
+
* (ej. `GT#GCA10#Cash Pickup`). Insumo para que benefits codifique el `leafId`.
|
|
22
|
+
* Lo llena el connector; no es para consumo directo del front.
|
|
23
|
+
*/
|
|
24
|
+
serviceId?: string;
|
|
25
|
+
/** productId del corredor (monto libre, ej. `GT#GCA10#VAR`). Lo llena el connector. */
|
|
26
|
+
productId?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Sobre pre-armado por benefits que el front reenvía al procesador para confirmar (F6).
|
|
29
|
+
* Lo completa benefits (encode del `leafId` + taxonomía del marketplace); el connector
|
|
30
|
+
* lo deja vacío. Ver {@link RemittanceConfirmRequest}.
|
|
31
|
+
*/
|
|
32
|
+
confirmRequest?: RemittanceConfirmRequest;
|
|
18
33
|
}
|
|
@@ -10,6 +10,7 @@ export * from "./RemittanceQuoteRequest";
|
|
|
10
10
|
export * from "./RemittanceQuoteResponse";
|
|
11
11
|
export * from "./RemittanceSendPreviewRequest";
|
|
12
12
|
export * from "./RemittanceSendPreviewResponse";
|
|
13
|
+
export * from "./RemittanceConfirmRequest";
|
|
13
14
|
export * from "./RemittancePayRequest";
|
|
14
15
|
export * from "./RemittancePayResponse";
|
|
15
16
|
export * from "./RemittanceTransaction";
|
|
@@ -26,6 +26,7 @@ __exportStar(require("./RemittanceQuoteRequest"), exports);
|
|
|
26
26
|
__exportStar(require("./RemittanceQuoteResponse"), exports);
|
|
27
27
|
__exportStar(require("./RemittanceSendPreviewRequest"), exports);
|
|
28
28
|
__exportStar(require("./RemittanceSendPreviewResponse"), exports);
|
|
29
|
+
__exportStar(require("./RemittanceConfirmRequest"), exports);
|
|
29
30
|
__exportStar(require("./RemittancePayRequest"), exports);
|
|
30
31
|
__exportStar(require("./RemittancePayResponse"), exports);
|
|
31
32
|
__exportStar(require("./RemittanceTransaction"), exports);
|
package/package.json
CHANGED
|
@@ -1,6 +1,24 @@
|
|
|
1
|
-
import { Expose } from 'class-transformer';
|
|
2
|
-
import { IsBoolean } from 'class-validator';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { Expose } from 'class-transformer';
|
|
2
|
+
import { IsBoolean, IsEnum, IsObject, IsOptional, IsString } from 'class-validator';
|
|
3
|
+
import { CognitoChallengeType } from '../enums/CognitoChallengeType';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Respuesta de `POST /auth/verify-password`.
|
|
7
|
+
*
|
|
8
|
+
* `valid` es el único campo siempre presente (consumidores legacy hacen
|
|
9
|
+
* `const { valid } = ...`). Los campos opcionales surfacean el challenge nativo
|
|
10
|
+
* que `ADMIN_USER_PASSWORD_AUTH` devuelve sin throw: para un usuario en
|
|
11
|
+
* `FORCE_CHANGE_PASSWORD`, Cognito responde `ChallengeName:'NEW_PASSWORD_REQUIRED'`
|
|
12
|
+
* + `Session`, y el caller (rbac) los usa para emitir ese challenge nativo FUERA
|
|
13
|
+
* de CUSTOM_AUTH en vez de arrancar el MFA (F-12). Backward-compatible: todos los
|
|
14
|
+
* campos nuevos son opcionales.
|
|
15
|
+
*/
|
|
16
|
+
export class VerifyPasswordResponse {
|
|
17
|
+
@Expose() @IsBoolean() valid!: boolean;
|
|
18
|
+
|
|
19
|
+
@Expose() @IsOptional() @IsEnum(CognitoChallengeType) challengeType?: CognitoChallengeType;
|
|
20
|
+
|
|
21
|
+
@Expose() @IsOptional() @IsString() session?: string;
|
|
22
|
+
|
|
23
|
+
@Expose() @IsOptional() @IsObject() challengeParameters?: Record<string, string>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sobre pre-armado por el backend (benefits) que el front reenvía **verbatim** al
|
|
3
|
+
* procesador `POST /benefitsMarketplace/authorize` para confirmar el envío (F6).
|
|
4
|
+
*
|
|
5
|
+
* Es un subconjunto de `AuthorizeBenefitsMarketplaceTransactionRequest`: el backend
|
|
6
|
+
* llena todo lo que deriva del corredor del beneficiario (`leafId`, `productId`,
|
|
7
|
+
* `amount`, ...) más la taxonomía del marketplace (`benefitId`, `productCatalogId`,
|
|
8
|
+
* `moduleName`). El front **solo agrega `inputs.idempotencyKey`** (que genera él, 1:1
|
|
9
|
+
* con el `previewRef`) antes de postear. El front NO debe construir ni decodificar
|
|
10
|
+
* ninguno de estos campos — los trata como tokens opacos.
|
|
11
|
+
*/
|
|
12
|
+
export interface RemittanceConfirmRequest {
|
|
13
|
+
/** Producto del catálogo del marketplace (ProductCatalog_GT). Constante para remesas: `INTERNATIONAL_REMITTANCE`. */
|
|
14
|
+
productCatalogId: string;
|
|
15
|
+
/** Benefit que aloja remesas en el árbol del marketplace (ej. `ben-7`). */
|
|
16
|
+
benefitId: string;
|
|
17
|
+
/** productId del corredor — monto libre (ej. `GT#GCA10#VAR`). */
|
|
18
|
+
productId: string;
|
|
19
|
+
/** Módulo conector que ejecuta el pago (`uniteller-connector`). */
|
|
20
|
+
moduleName: string;
|
|
21
|
+
/** leafId base64url del corredor: `base64url("<moduleName>::<countryISO>#<payerCode>#<receptionMethodName>")`. */
|
|
22
|
+
leafId: string;
|
|
23
|
+
/** Referencia del beneficiario destino (ej. `BENE#1884512`). */
|
|
24
|
+
reference: string;
|
|
25
|
+
/** Monto USD total **congelado** a debitar del wallet (== total del preview). */
|
|
26
|
+
amount: number;
|
|
27
|
+
/** Moneda de cobro en ISO numérico — siempre USD (`840`) para remesas. */
|
|
28
|
+
currencyId: string;
|
|
29
|
+
/** Datos específicos del módulo que el procesador reenvía al connector. */
|
|
30
|
+
inputs: RemittanceConfirmInputs;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface RemittanceConfirmInputs {
|
|
34
|
+
/** `transactionInternalReference` de UNIR (sale del preview). Requerido para el confirm. */
|
|
35
|
+
previewRef: string;
|
|
36
|
+
/**
|
|
37
|
+
* Idempotencia del tramo mobile→procesador. **Lo genera el front** en el tap de
|
|
38
|
+
* confirmar, 1:1 con el `previewRef`: si re-previewa, nuevo `previewRef` ⇒ nuevo
|
|
39
|
+
* `idempotencyKey`. El backend lo deja vacío en el sobre.
|
|
40
|
+
*/
|
|
41
|
+
idempotencyKey?: string;
|
|
42
|
+
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { RemittanceConfirmRequest } from "./RemittanceConfirmRequest";
|
|
2
|
+
|
|
1
3
|
export interface RemittanceBeneficiaryDisplay {
|
|
2
4
|
name: string;
|
|
3
5
|
bank?: string;
|
|
@@ -16,4 +18,19 @@ export class RemittanceSendPreviewResponse {
|
|
|
16
18
|
beneficiaryDisplay!: RemittanceBeneficiaryDisplay;
|
|
17
19
|
/** Epoch ms. Cache 10 min en RemittanceCache_GT (D-F5.4). */
|
|
18
20
|
expiresAt!: number;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* serviceId del corredor resuelto por el connector: `<countryISO>#<payerCode>#<receptionMethodName>`
|
|
24
|
+
* (ej. `GT#GCA10#Cash Pickup`). Insumo para que benefits codifique el `leafId`.
|
|
25
|
+
* Lo llena el connector; no es para consumo directo del front.
|
|
26
|
+
*/
|
|
27
|
+
serviceId?: string;
|
|
28
|
+
/** productId del corredor (monto libre, ej. `GT#GCA10#VAR`). Lo llena el connector. */
|
|
29
|
+
productId?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Sobre pre-armado por benefits que el front reenvía al procesador para confirmar (F6).
|
|
32
|
+
* Lo completa benefits (encode del `leafId` + taxonomía del marketplace); el connector
|
|
33
|
+
* lo deja vacío. Ver {@link RemittanceConfirmRequest}.
|
|
34
|
+
*/
|
|
35
|
+
confirmRequest?: RemittanceConfirmRequest;
|
|
19
36
|
}
|
|
@@ -10,6 +10,7 @@ export * from "./RemittanceQuoteRequest";
|
|
|
10
10
|
export * from "./RemittanceQuoteResponse";
|
|
11
11
|
export * from "./RemittanceSendPreviewRequest";
|
|
12
12
|
export * from "./RemittanceSendPreviewResponse";
|
|
13
|
+
export * from "./RemittanceConfirmRequest";
|
|
13
14
|
export * from "./RemittancePayRequest";
|
|
14
15
|
export * from "./RemittancePayResponse";
|
|
15
16
|
export * from "./RemittanceTransaction";
|