@fiado/type-kit 3.148.0 → 3.150.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/platformRbac/auth/PrepareChallengeRequest.test.ts +64 -0
- package/bin/cognitoBackofficeConnector/dtos/MfaPoolConfig.d.ts +7 -0
- package/bin/{platformRbac/dtos/ResendSelfRegisterOtpRequest.js → cognitoBackofficeConnector/dtos/MfaPoolConfig.js} +18 -18
- package/bin/cognitoBackofficeConnector/dtos/PoolConfigResponse.d.ts +20 -0
- package/bin/cognitoBackofficeConnector/dtos/PoolConfigResponse.js +11 -0
- package/bin/cognitoBackofficeConnector/dtos/PoolsListResponse.d.ts +4 -0
- package/bin/cognitoBackofficeConnector/dtos/PoolsListResponse.js +6 -0
- package/bin/cognitoBackofficeConnector/validators/MfaTypesRequiresOne.d.ts +17 -0
- package/bin/cognitoBackofficeConnector/validators/MfaTypesRequiresOne.js +39 -0
- package/bin/platformRbac/auth/PrepareChallengeRequest.d.ts +1 -1
- package/bin/platformRbac/auth/PrepareChallengeRequest.js +1 -0
- package/bin/rbac/enums/PoolKind.d.ts +16 -0
- package/bin/rbac/enums/PoolKind.js +20 -0
- package/bin/rbac/index.d.ts +1 -0
- package/bin/rbac/index.js +17 -0
- package/bin/remittance/dtos/RemittanceCommittee.d.ts +61 -0
- package/bin/remittance/dtos/RemittanceCommittee.js +83 -0
- package/bin/remittance/dtos/index.d.ts +1 -0
- package/bin/remittance/dtos/index.js +1 -0
- package/bin/walletFunding/dtos/CancelFundingReferenceRequest.d.ts +5 -0
- package/bin/walletFunding/dtos/CancelFundingReferenceRequest.js +31 -0
- package/bin/walletFunding/dtos/CancelFundingReferenceResponse.d.ts +7 -0
- package/bin/walletFunding/dtos/CancelFundingReferenceResponse.js +6 -0
- package/bin/walletFunding/dtos/CancelFundingRequest.d.ts +11 -0
- package/bin/{platformRbac/dtos/ResendOtpRequest.js → walletFunding/dtos/CancelFundingRequest.js} +13 -16
- package/bin/walletFunding/dtos/CancelFundingResponse.d.ts +14 -0
- package/bin/walletFunding/dtos/CancelFundingResponse.js +12 -0
- package/bin/walletFunding/dtos/CancelWalletFundingRequest.d.ts +3 -0
- package/bin/walletFunding/dtos/CancelWalletFundingRequest.js +21 -0
- package/bin/walletFunding/dtos/CancelWalletFundingResponse.d.ts +7 -0
- package/bin/walletFunding/dtos/CancelWalletFundingResponse.js +6 -0
- package/package.json +1 -1
- package/src/platformRbac/auth/PrepareChallengeRequest.ts +8 -2
- package/src/remittance/dtos/RemittanceCommittee.ts +87 -0
- package/src/remittance/dtos/index.ts +1 -0
- package/bin/platformRbac/dtos/ResendOtpRequest.d.ts +0 -22
- package/bin/platformRbac/dtos/ResendSelfRegisterOtpRequest.d.ts +0 -11
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { plainToInstance } from 'class-transformer';
|
|
3
|
+
import { validate } from 'class-validator';
|
|
4
|
+
import { PrepareChallengeRequest } from '../../../../src/platformRbac/auth/PrepareChallengeRequest';
|
|
5
|
+
import { ChallengeNameEnum } from '../../../../src/platformRbac/enums/ChallengeNameEnum';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* DEC-RBAC-093: `email` es opcional y robusto a string vacío. Un usuario phone-primario
|
|
9
|
+
* (sin email) hace login MFA (SMS_OTP / TOTP) sin email — el trigger CreateAuthChallenge
|
|
10
|
+
* ya no manda `''`. `@ValidateIf` saltea undefined/null/'' (`@IsOptional` NO saltea `''`).
|
|
11
|
+
* La rama EMAIL_OTP del preparer sigue necesitando email en runtime — eso NO lo valida el DTO.
|
|
12
|
+
*/
|
|
13
|
+
describe('PrepareChallengeRequest', () => {
|
|
14
|
+
const base = {
|
|
15
|
+
cognitoSub: 'f4586478-20c1-700c-c40a-2396db1affe3',
|
|
16
|
+
challengeName: ChallengeNameEnum.SMS_OTP,
|
|
17
|
+
phone: '+524422194128',
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
it('valida SMS_OTP sin email (undefined)', async () => {
|
|
21
|
+
const dto = plainToInstance(PrepareChallengeRequest, { ...base });
|
|
22
|
+
const errors = await validate(dto);
|
|
23
|
+
expect(errors).toEqual([]);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('valida SMS_OTP con email = "" (string vacío del trigger legacy)', async () => {
|
|
27
|
+
const dto = plainToInstance(PrepareChallengeRequest, { ...base, email: '' });
|
|
28
|
+
const errors = await validate(dto);
|
|
29
|
+
expect(errors).toEqual([]);
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it('valida SMS_OTP con email = null', async () => {
|
|
33
|
+
const dto = plainToInstance(PrepareChallengeRequest, { ...base, email: null });
|
|
34
|
+
const errors = await validate(dto);
|
|
35
|
+
expect(errors).toEqual([]);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('valida cuando email SÍ viene y es un email válido', async () => {
|
|
39
|
+
const dto = plainToInstance(PrepareChallengeRequest, {
|
|
40
|
+
...base,
|
|
41
|
+
challengeName: ChallengeNameEnum.EMAIL_OTP,
|
|
42
|
+
email: 'user@dominio.com',
|
|
43
|
+
});
|
|
44
|
+
const errors = await validate(dto);
|
|
45
|
+
expect(errors).toEqual([]);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('falla cuando email viene pero NO es un email válido', async () => {
|
|
49
|
+
const dto = plainToInstance(PrepareChallengeRequest, { ...base, email: 'no-es-email' });
|
|
50
|
+
const errors = await validate(dto);
|
|
51
|
+
expect(errors.length).toBeGreaterThan(0);
|
|
52
|
+
expect(errors[0].property).toBe('email');
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it('falla si challengeName no es un valor del enum', async () => {
|
|
56
|
+
const dto = plainToInstance(PrepareChallengeRequest, {
|
|
57
|
+
...base,
|
|
58
|
+
challengeName: 'BOGUS' as ChallengeNameEnum,
|
|
59
|
+
});
|
|
60
|
+
const errors = await validate(dto);
|
|
61
|
+
expect(errors.length).toBeGreaterThan(0);
|
|
62
|
+
expect(errors[0].property).toBe('challengeName');
|
|
63
|
+
});
|
|
64
|
+
});
|
|
@@ -9,28 +9,28 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.
|
|
12
|
+
exports.MfaPoolConfig = void 0;
|
|
13
13
|
const class_transformer_1 = require("class-transformer");
|
|
14
14
|
const class_validator_1 = require("class-validator");
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class
|
|
15
|
+
const MfaTypesRequiresOne_1 = require("../validators/MfaTypesRequiresOne");
|
|
16
|
+
// EMAIL_OTP removido (3.41.0): el cognito-backoffice-connector no provisiona
|
|
17
|
+
// EmailMfaConfiguration a nivel pool (requiere infra SES que no está montada
|
|
18
|
+
// y la integración con messages-lambda aún no tiene diseño). Ver TD-020 +
|
|
19
|
+
// DEC-001 en cognito-backoffice-connector/docs/. Si se reintroduce, agregar
|
|
20
|
+
// 'EMAIL_OTP' a este array.
|
|
21
|
+
const ALLOWED_MFA_TYPES = ['SOFTWARE_TOKEN_MFA'];
|
|
22
|
+
class MfaPoolConfig {
|
|
23
23
|
}
|
|
24
|
-
exports.
|
|
24
|
+
exports.MfaPoolConfig = MfaPoolConfig;
|
|
25
25
|
__decorate([
|
|
26
26
|
(0, class_transformer_1.Expose)(),
|
|
27
|
-
(0, class_validator_1.
|
|
28
|
-
(
|
|
29
|
-
|
|
30
|
-
], ResendSelfRegisterOtpRequest.prototype, "tenantId", void 0);
|
|
27
|
+
(0, class_validator_1.IsBoolean)(),
|
|
28
|
+
__metadata("design:type", Boolean)
|
|
29
|
+
], MfaPoolConfig.prototype, "requireMfa", void 0);
|
|
31
30
|
__decorate([
|
|
32
31
|
(0, class_transformer_1.Expose)(),
|
|
33
|
-
(0, class_validator_1.
|
|
34
|
-
(0, class_validator_1.
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
(0, class_validator_1.IsArray)(),
|
|
33
|
+
(0, class_validator_1.IsIn)(ALLOWED_MFA_TYPES, { each: true }),
|
|
34
|
+
(0, class_validator_1.Validate)(MfaTypesRequiresOne_1.MfaTypesRequiresOne),
|
|
35
|
+
__metadata("design:type", Array)
|
|
36
|
+
], MfaPoolConfig.prototype, "mfaTypes", void 0);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { PoolKind } from '../../rbac/enums/PoolKind';
|
|
2
|
+
/**
|
|
3
|
+
* Shape del `PoolConfigRow` expuesto al caller (BFF M18 / otros lambdas Fiado).
|
|
4
|
+
* Refleja la configuración de un Cognito User Pool registrado en la tabla
|
|
5
|
+
* `PoolConfigs_GT` del lambda `cognito-backoffice-connector`.
|
|
6
|
+
*/
|
|
7
|
+
export declare class PoolConfigResponse {
|
|
8
|
+
userPoolId: string;
|
|
9
|
+
userPoolArn: string;
|
|
10
|
+
region: string;
|
|
11
|
+
poolKind: PoolKind;
|
|
12
|
+
displayName: string;
|
|
13
|
+
appClients: Record<string, {
|
|
14
|
+
clientId: string;
|
|
15
|
+
clientName: string;
|
|
16
|
+
}>;
|
|
17
|
+
status: 'active' | 'deprecated';
|
|
18
|
+
createdAt: number;
|
|
19
|
+
updatedAt: number;
|
|
20
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PoolConfigResponse = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Shape del `PoolConfigRow` expuesto al caller (BFF M18 / otros lambdas Fiado).
|
|
6
|
+
* Refleja la configuración de un Cognito User Pool registrado en la tabla
|
|
7
|
+
* `PoolConfigs_GT` del lambda `cognito-backoffice-connector`.
|
|
8
|
+
*/
|
|
9
|
+
class PoolConfigResponse {
|
|
10
|
+
}
|
|
11
|
+
exports.PoolConfigResponse = PoolConfigResponse;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ValidatorConstraintInterface, ValidationArguments } from 'class-validator';
|
|
2
|
+
/**
|
|
3
|
+
* Cross-field validator: si `requireMfa: true`, entonces `mfaTypes` debe tener
|
|
4
|
+
* al menos 1 elemento. Si `requireMfa: false`, `mfaTypes` puede ser vacío.
|
|
5
|
+
*
|
|
6
|
+
* Razón: cuando el pool nace con MFA habilitado, el connector llama
|
|
7
|
+
* `SetUserPoolMfaConfigCommand` con la lista de tipos del DTO. Si el array
|
|
8
|
+
* llega vacío con `requireMfa: true`, el SDK rechaza con InvalidParameterException
|
|
9
|
+
* y el pool queda en estado inconsistente (MfaConfiguration:'ON' sin tipos).
|
|
10
|
+
* Mejor rechazar en validación del DTO antes de tocar AWS.
|
|
11
|
+
*
|
|
12
|
+
* Ver pivote v1.4.1 TD-017 cerrado + spec doc §1 R3.
|
|
13
|
+
*/
|
|
14
|
+
export declare class MfaTypesRequiresOne implements ValidatorConstraintInterface {
|
|
15
|
+
validate(mfaTypes: unknown, args: ValidationArguments): boolean;
|
|
16
|
+
defaultMessage(): string;
|
|
17
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.MfaTypesRequiresOne = void 0;
|
|
10
|
+
const class_validator_1 = require("class-validator");
|
|
11
|
+
/**
|
|
12
|
+
* Cross-field validator: si `requireMfa: true`, entonces `mfaTypes` debe tener
|
|
13
|
+
* al menos 1 elemento. Si `requireMfa: false`, `mfaTypes` puede ser vacío.
|
|
14
|
+
*
|
|
15
|
+
* Razón: cuando el pool nace con MFA habilitado, el connector llama
|
|
16
|
+
* `SetUserPoolMfaConfigCommand` con la lista de tipos del DTO. Si el array
|
|
17
|
+
* llega vacío con `requireMfa: true`, el SDK rechaza con InvalidParameterException
|
|
18
|
+
* y el pool queda en estado inconsistente (MfaConfiguration:'ON' sin tipos).
|
|
19
|
+
* Mejor rechazar en validación del DTO antes de tocar AWS.
|
|
20
|
+
*
|
|
21
|
+
* Ver pivote v1.4.1 TD-017 cerrado + spec doc §1 R3.
|
|
22
|
+
*/
|
|
23
|
+
let MfaTypesRequiresOne = class MfaTypesRequiresOne {
|
|
24
|
+
validate(mfaTypes, args) {
|
|
25
|
+
const obj = args.object;
|
|
26
|
+
if (obj.requireMfa === true) {
|
|
27
|
+
return Array.isArray(mfaTypes) && mfaTypes.length >= 1;
|
|
28
|
+
}
|
|
29
|
+
// requireMfa: false → cualquier mfaTypes pasa.
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
defaultMessage() {
|
|
33
|
+
return 'mfaTypes requiere al menos un tipo cuando requireMfa=true';
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
exports.MfaTypesRequiresOne = MfaTypesRequiresOne;
|
|
37
|
+
exports.MfaTypesRequiresOne = MfaTypesRequiresOne = __decorate([
|
|
38
|
+
(0, class_validator_1.ValidatorConstraint)({ name: 'MfaTypesRequiresOneWhenMfaRequired', async: false })
|
|
39
|
+
], MfaTypesRequiresOne);
|
|
@@ -24,6 +24,7 @@ __decorate([
|
|
|
24
24
|
__metadata("design:type", String)
|
|
25
25
|
], PrepareChallengeRequest.prototype, "challengeName", void 0);
|
|
26
26
|
__decorate([
|
|
27
|
+
(0, class_validator_1.ValidateIf)((o) => o.email !== undefined && o.email !== null && o.email !== ''),
|
|
27
28
|
(0, class_validator_1.IsEmail)(),
|
|
28
29
|
__metadata("design:type", String)
|
|
29
30
|
], PrepareChallengeRequest.prototype, "email", void 0);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tipo de User Pool de Cognito desde la perspectiva del modelo RBAC Fiado.
|
|
3
|
+
*
|
|
4
|
+
* Origen: spec del proyecto `cognito-backoffice-connector` (Fase 0, componente 01
|
|
5
|
+
* documento `docs/superpowers/specs/2026-05-26-cognito-connector-decisiones-pendientes-design.md`).
|
|
6
|
+
*
|
|
7
|
+
* Decisión (TD-003): el proyecto converge en estos 2 valores. El documento componente 03
|
|
8
|
+
* lista 3 valores (incluyendo una variante adicional) pero queda como outlier — la
|
|
9
|
+
* decisión vigente en los 6 docs restantes y en el plan de implementación es 2 valores:
|
|
10
|
+
* - BACKOFFICE_PLATFORM — pool del backoffice de plataforma (cross-tenant)
|
|
11
|
+
* - BACKOFFICE_TENANT — pool por tenant (multi-tenant isolation)
|
|
12
|
+
*/
|
|
13
|
+
export declare enum PoolKind {
|
|
14
|
+
BACKOFFICE_PLATFORM = "BACKOFFICE_PLATFORM",
|
|
15
|
+
BACKOFFICE_TENANT = "BACKOFFICE_TENANT"
|
|
16
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PoolKind = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Tipo de User Pool de Cognito desde la perspectiva del modelo RBAC Fiado.
|
|
6
|
+
*
|
|
7
|
+
* Origen: spec del proyecto `cognito-backoffice-connector` (Fase 0, componente 01
|
|
8
|
+
* documento `docs/superpowers/specs/2026-05-26-cognito-connector-decisiones-pendientes-design.md`).
|
|
9
|
+
*
|
|
10
|
+
* Decisión (TD-003): el proyecto converge en estos 2 valores. El documento componente 03
|
|
11
|
+
* lista 3 valores (incluyendo una variante adicional) pero queda como outlier — la
|
|
12
|
+
* decisión vigente en los 6 docs restantes y en el plan de implementación es 2 valores:
|
|
13
|
+
* - BACKOFFICE_PLATFORM — pool del backoffice de plataforma (cross-tenant)
|
|
14
|
+
* - BACKOFFICE_TENANT — pool por tenant (multi-tenant isolation)
|
|
15
|
+
*/
|
|
16
|
+
var PoolKind;
|
|
17
|
+
(function (PoolKind) {
|
|
18
|
+
PoolKind["BACKOFFICE_PLATFORM"] = "BACKOFFICE_PLATFORM";
|
|
19
|
+
PoolKind["BACKOFFICE_TENANT"] = "BACKOFFICE_TENANT";
|
|
20
|
+
})(PoolKind || (exports.PoolKind = PoolKind = {}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './enums/PoolKind';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./enums/PoolKind"), exports);
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DTOs de Comités (Dashboard Ops · Configuración §1).
|
|
3
|
+
*
|
|
4
|
+
* Un comité es un grupo de OPERADORES de backoffice (DirectoryBackoffice_GT) que
|
|
5
|
+
* recibe notificación de cambios/alarmas sensibles. CRUD libre (no comités fijos).
|
|
6
|
+
* Los miembros se persisten POR REFERENCIA (ids) y se resuelven en runtime contra
|
|
7
|
+
* el catálogo de operadores ACTIVE (vía IDirectoriesApi.getBackofficeDirectoryList);
|
|
8
|
+
* los inactivos se omiten del display y se depuran en el próximo Save.
|
|
9
|
+
*
|
|
10
|
+
* Canal MVP = solo email (config inerte hasta que exista el disparador — Reglas B3).
|
|
11
|
+
*/
|
|
12
|
+
/** Operador de backoffice resuelto (catálogo del picker y miembros del comité). */
|
|
13
|
+
export declare class BackofficeOperator {
|
|
14
|
+
/** DirectoryBackoffice_GT.id */
|
|
15
|
+
id: string;
|
|
16
|
+
fullName: string;
|
|
17
|
+
email: string;
|
|
18
|
+
/** Rol mostrado en la UI (puesto del operador). */
|
|
19
|
+
jobTitle: string;
|
|
20
|
+
}
|
|
21
|
+
/** Referencia a una regla que notifica al comité (Reglas · B3). Vacío en MVP. */
|
|
22
|
+
export declare class CommitteeRuleRef {
|
|
23
|
+
id: string;
|
|
24
|
+
name: string;
|
|
25
|
+
category: string;
|
|
26
|
+
}
|
|
27
|
+
/** Body de POST /backoffice/config/committees. */
|
|
28
|
+
export declare class CreateCommitteeRequest {
|
|
29
|
+
name: string;
|
|
30
|
+
/** Ids de DirectoryBackoffice_GT (referencia; puede ser []). */
|
|
31
|
+
members: string[];
|
|
32
|
+
/** Canal email on/off (único canal del MVP; inerte hasta B3). */
|
|
33
|
+
emailNotifications: boolean;
|
|
34
|
+
}
|
|
35
|
+
/** Body de PUT /backoffice/config/committees/{id} (reemplazo completo). */
|
|
36
|
+
export declare class UpdateCommitteeRequest {
|
|
37
|
+
name: string;
|
|
38
|
+
members: string[];
|
|
39
|
+
emailNotifications: boolean;
|
|
40
|
+
}
|
|
41
|
+
/** Comité completo (response) — members ya RESUELTOS a operadores. */
|
|
42
|
+
export declare class Committee {
|
|
43
|
+
id: string;
|
|
44
|
+
name: string;
|
|
45
|
+
members: BackofficeOperator[];
|
|
46
|
+
emailNotifications: boolean;
|
|
47
|
+
/** Reglas que notifican a este comité (B3) — siempre [] en MVP. */
|
|
48
|
+
rulesNotifying: CommitteeRuleRef[];
|
|
49
|
+
createdAt: string;
|
|
50
|
+
updatedAt: string;
|
|
51
|
+
createdBy: string;
|
|
52
|
+
updatedBy: string;
|
|
53
|
+
}
|
|
54
|
+
/** Response de GET /backoffice/config/committees. */
|
|
55
|
+
export declare class CommitteeListResponse {
|
|
56
|
+
items: Committee[];
|
|
57
|
+
}
|
|
58
|
+
/** Response de GET /backoffice/config/committees/operators (solo ACTIVE). */
|
|
59
|
+
export declare class CommitteeOperatorsResponse {
|
|
60
|
+
items: BackofficeOperator[];
|
|
61
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
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.CommitteeOperatorsResponse = exports.CommitteeListResponse = exports.Committee = exports.UpdateCommitteeRequest = exports.CreateCommitteeRequest = exports.CommitteeRuleRef = exports.BackofficeOperator = void 0;
|
|
13
|
+
const class_validator_1 = require("class-validator");
|
|
14
|
+
const class_validator_2 = require("class-validator");
|
|
15
|
+
/**
|
|
16
|
+
* DTOs de Comités (Dashboard Ops · Configuración §1).
|
|
17
|
+
*
|
|
18
|
+
* Un comité es un grupo de OPERADORES de backoffice (DirectoryBackoffice_GT) que
|
|
19
|
+
* recibe notificación de cambios/alarmas sensibles. CRUD libre (no comités fijos).
|
|
20
|
+
* Los miembros se persisten POR REFERENCIA (ids) y se resuelven en runtime contra
|
|
21
|
+
* el catálogo de operadores ACTIVE (vía IDirectoriesApi.getBackofficeDirectoryList);
|
|
22
|
+
* los inactivos se omiten del display y se depuran en el próximo Save.
|
|
23
|
+
*
|
|
24
|
+
* Canal MVP = solo email (config inerte hasta que exista el disparador — Reglas B3).
|
|
25
|
+
*/
|
|
26
|
+
/** Operador de backoffice resuelto (catálogo del picker y miembros del comité). */
|
|
27
|
+
class BackofficeOperator {
|
|
28
|
+
}
|
|
29
|
+
exports.BackofficeOperator = BackofficeOperator;
|
|
30
|
+
/** Referencia a una regla que notifica al comité (Reglas · B3). Vacío en MVP. */
|
|
31
|
+
class CommitteeRuleRef {
|
|
32
|
+
}
|
|
33
|
+
exports.CommitteeRuleRef = CommitteeRuleRef;
|
|
34
|
+
/** Body de POST /backoffice/config/committees. */
|
|
35
|
+
class CreateCommitteeRequest {
|
|
36
|
+
}
|
|
37
|
+
exports.CreateCommitteeRequest = CreateCommitteeRequest;
|
|
38
|
+
__decorate([
|
|
39
|
+
(0, class_validator_2.IsString)(),
|
|
40
|
+
(0, class_validator_1.Length)(3, 100),
|
|
41
|
+
__metadata("design:type", String)
|
|
42
|
+
], CreateCommitteeRequest.prototype, "name", void 0);
|
|
43
|
+
__decorate([
|
|
44
|
+
(0, class_validator_1.IsArray)(),
|
|
45
|
+
(0, class_validator_1.IsUUID)("4", { each: true }),
|
|
46
|
+
(0, class_validator_1.ArrayMaxSize)(100),
|
|
47
|
+
__metadata("design:type", Array)
|
|
48
|
+
], CreateCommitteeRequest.prototype, "members", void 0);
|
|
49
|
+
__decorate([
|
|
50
|
+
(0, class_validator_1.IsBoolean)(),
|
|
51
|
+
__metadata("design:type", Boolean)
|
|
52
|
+
], CreateCommitteeRequest.prototype, "emailNotifications", void 0);
|
|
53
|
+
/** Body de PUT /backoffice/config/committees/{id} (reemplazo completo). */
|
|
54
|
+
class UpdateCommitteeRequest {
|
|
55
|
+
}
|
|
56
|
+
exports.UpdateCommitteeRequest = UpdateCommitteeRequest;
|
|
57
|
+
__decorate([
|
|
58
|
+
(0, class_validator_2.IsString)(),
|
|
59
|
+
(0, class_validator_1.Length)(3, 100),
|
|
60
|
+
__metadata("design:type", String)
|
|
61
|
+
], UpdateCommitteeRequest.prototype, "name", void 0);
|
|
62
|
+
__decorate([
|
|
63
|
+
(0, class_validator_1.IsArray)(),
|
|
64
|
+
(0, class_validator_1.IsUUID)("4", { each: true }),
|
|
65
|
+
(0, class_validator_1.ArrayMaxSize)(100),
|
|
66
|
+
__metadata("design:type", Array)
|
|
67
|
+
], UpdateCommitteeRequest.prototype, "members", void 0);
|
|
68
|
+
__decorate([
|
|
69
|
+
(0, class_validator_1.IsBoolean)(),
|
|
70
|
+
__metadata("design:type", Boolean)
|
|
71
|
+
], UpdateCommitteeRequest.prototype, "emailNotifications", void 0);
|
|
72
|
+
/** Comité completo (response) — members ya RESUELTOS a operadores. */
|
|
73
|
+
class Committee {
|
|
74
|
+
}
|
|
75
|
+
exports.Committee = Committee;
|
|
76
|
+
/** Response de GET /backoffice/config/committees. */
|
|
77
|
+
class CommitteeListResponse {
|
|
78
|
+
}
|
|
79
|
+
exports.CommitteeListResponse = CommitteeListResponse;
|
|
80
|
+
/** Response de GET /backoffice/config/committees/operators (solo ACTIVE). */
|
|
81
|
+
class CommitteeOperatorsResponse {
|
|
82
|
+
}
|
|
83
|
+
exports.CommitteeOperatorsResponse = CommitteeOperatorsResponse;
|
|
@@ -55,3 +55,4 @@ __exportStar(require("./RemittanceKyc"), exports);
|
|
|
55
55
|
__exportStar(require("./RemittanceCohort"), exports);
|
|
56
56
|
__exportStar(require("./RemittanceAuditLog"), exports);
|
|
57
57
|
__exportStar(require("./RemittanceSegment"), exports);
|
|
58
|
+
__exportStar(require("./RemittanceCommittee"), exports);
|
|
@@ -0,0 +1,31 @@
|
|
|
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.CancelFundingReferenceRequest = void 0;
|
|
13
|
+
const class_validator_1 = require("class-validator");
|
|
14
|
+
class CancelFundingReferenceRequest {
|
|
15
|
+
}
|
|
16
|
+
exports.CancelFundingReferenceRequest = CancelFundingReferenceRequest;
|
|
17
|
+
__decorate([
|
|
18
|
+
(0, class_validator_1.IsString)(),
|
|
19
|
+
(0, class_validator_1.MaxLength)(64),
|
|
20
|
+
__metadata("design:type", String)
|
|
21
|
+
], CancelFundingReferenceRequest.prototype, "fundingId", void 0);
|
|
22
|
+
__decorate([
|
|
23
|
+
(0, class_validator_1.IsString)(),
|
|
24
|
+
(0, class_validator_1.MaxLength)(64),
|
|
25
|
+
__metadata("design:type", String)
|
|
26
|
+
], CancelFundingReferenceRequest.prototype, "directoryId", void 0);
|
|
27
|
+
__decorate([
|
|
28
|
+
(0, class_validator_1.IsString)(),
|
|
29
|
+
(0, class_validator_1.MaxLength)(64),
|
|
30
|
+
__metadata("design:type", String)
|
|
31
|
+
], CancelFundingReferenceRequest.prototype, "idempotencyKey", void 0);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { BenefitPaymentStatusEnum } from "../../benefitCenter/enums/BenefitPaymentStatusEnum";
|
|
2
|
+
import { WalletFundingErrorCodeEnum } from "../enums/WalletFundingErrorCodeEnum";
|
|
3
|
+
export declare class CancelFundingReferenceResponse {
|
|
4
|
+
fundingId: string;
|
|
5
|
+
status: BenefitPaymentStatusEnum;
|
|
6
|
+
errorCode?: WalletFundingErrorCodeEnum;
|
|
7
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request del cancel via Centro de Beneficios (spec 13 v2.0).
|
|
3
|
+
* `fundingId` viaja en el path, `directoryId` se resuelve del JWT.
|
|
4
|
+
* `providerModuleName` permite al marketplace rutear al publisher correcto
|
|
5
|
+
* sin tener que persistir el mapping (el wallet-app sabe el moduleName
|
|
6
|
+
* porque vino en la respuesta del authorize).
|
|
7
|
+
*/
|
|
8
|
+
export declare class CancelFundingRequest {
|
|
9
|
+
idempotencyKey: string;
|
|
10
|
+
providerModuleName: string;
|
|
11
|
+
}
|
package/bin/{platformRbac/dtos/ResendOtpRequest.js → walletFunding/dtos/CancelFundingRequest.js}
RENAMED
|
@@ -9,28 +9,25 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.
|
|
13
|
-
const class_transformer_1 = require("class-transformer");
|
|
12
|
+
exports.CancelFundingRequest = void 0;
|
|
14
13
|
const class_validator_1 = require("class-validator");
|
|
15
14
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
15
|
+
* Request del cancel via Centro de Beneficios (spec 13 v2.0).
|
|
16
|
+
* `fundingId` viaja en el path, `directoryId` se resuelve del JWT.
|
|
17
|
+
* `providerModuleName` permite al marketplace rutear al publisher correcto
|
|
18
|
+
* sin tener que persistir el mapping (el wallet-app sabe el moduleName
|
|
19
|
+
* porque vino en la respuesta del authorize).
|
|
21
20
|
*/
|
|
22
|
-
class
|
|
21
|
+
class CancelFundingRequest {
|
|
23
22
|
}
|
|
24
|
-
exports.
|
|
23
|
+
exports.CancelFundingRequest = CancelFundingRequest;
|
|
25
24
|
__decorate([
|
|
26
|
-
(0,
|
|
27
|
-
(0, class_validator_1.
|
|
28
|
-
(0, class_validator_1.IsNotEmpty)(),
|
|
25
|
+
(0, class_validator_1.IsString)(),
|
|
26
|
+
(0, class_validator_1.MaxLength)(64),
|
|
29
27
|
__metadata("design:type", String)
|
|
30
|
-
],
|
|
28
|
+
], CancelFundingRequest.prototype, "idempotencyKey", void 0);
|
|
31
29
|
__decorate([
|
|
32
|
-
(0, class_transformer_1.Expose)(),
|
|
33
30
|
(0, class_validator_1.IsString)(),
|
|
34
|
-
(0, class_validator_1.
|
|
31
|
+
(0, class_validator_1.MaxLength)(128),
|
|
35
32
|
__metadata("design:type", String)
|
|
36
|
-
],
|
|
33
|
+
], CancelFundingRequest.prototype, "providerModuleName", void 0);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BenefitPaymentStatusEnum } from "../../benefitCenter/enums/BenefitPaymentStatusEnum";
|
|
2
|
+
import { WalletFundingErrorCodeEnum } from "../enums/WalletFundingErrorCodeEnum";
|
|
3
|
+
/**
|
|
4
|
+
* Response del cancel via Centro de Beneficios (spec 13 v2.0).
|
|
5
|
+
* `status` reusa `BenefitPaymentStatusEnum` (APPROVED = cancel aceptado;
|
|
6
|
+
* REJECTED = no se pudo) para consistencia con `CancelFundingReferenceResponse`
|
|
7
|
+
* (marketplace ↔ connector). Idempotente: re-cancelar devuelve APPROVED.
|
|
8
|
+
*/
|
|
9
|
+
export declare class CancelFundingResponse {
|
|
10
|
+
fundingId: string;
|
|
11
|
+
status: BenefitPaymentStatusEnum;
|
|
12
|
+
errorCode?: WalletFundingErrorCodeEnum;
|
|
13
|
+
message?: string;
|
|
14
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CancelFundingResponse = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Response del cancel via Centro de Beneficios (spec 13 v2.0).
|
|
6
|
+
* `status` reusa `BenefitPaymentStatusEnum` (APPROVED = cancel aceptado;
|
|
7
|
+
* REJECTED = no se pudo) para consistencia con `CancelFundingReferenceResponse`
|
|
8
|
+
* (marketplace ↔ connector). Idempotente: re-cancelar devuelve APPROVED.
|
|
9
|
+
*/
|
|
10
|
+
class CancelFundingResponse {
|
|
11
|
+
}
|
|
12
|
+
exports.CancelFundingResponse = CancelFundingResponse;
|
|
@@ -0,0 +1,21 @@
|
|
|
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.CancelWalletFundingRequest = void 0;
|
|
13
|
+
const class_validator_1 = require("class-validator");
|
|
14
|
+
class CancelWalletFundingRequest {
|
|
15
|
+
}
|
|
16
|
+
exports.CancelWalletFundingRequest = CancelWalletFundingRequest;
|
|
17
|
+
__decorate([
|
|
18
|
+
(0, class_validator_1.IsString)(),
|
|
19
|
+
(0, class_validator_1.MaxLength)(64),
|
|
20
|
+
__metadata("design:type", String)
|
|
21
|
+
], CancelWalletFundingRequest.prototype, "idempotencyKey", void 0);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { BenefitPaymentStatusEnum } from "../../benefitCenter/enums/BenefitPaymentStatusEnum";
|
|
2
|
+
import { WalletFundingErrorCodeEnum } from "../enums/WalletFundingErrorCodeEnum";
|
|
3
|
+
export declare class CancelWalletFundingResponse {
|
|
4
|
+
status: BenefitPaymentStatusEnum;
|
|
5
|
+
errorCode?: WalletFundingErrorCodeEnum;
|
|
6
|
+
fundingId?: string;
|
|
7
|
+
}
|
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IsEmail, IsEnum, IsOptional, IsString } from 'class-validator';
|
|
1
|
+
import { IsEmail, IsEnum, IsOptional, IsString, ValidateIf } from 'class-validator';
|
|
2
2
|
import { ChallengeNameEnum } from '../enums/ChallengeNameEnum';
|
|
3
3
|
|
|
4
4
|
export class PrepareChallengeRequest {
|
|
@@ -8,8 +8,14 @@ export class PrepareChallengeRequest {
|
|
|
8
8
|
@IsEnum(ChallengeNameEnum)
|
|
9
9
|
challengeName!: ChallengeNameEnum;
|
|
10
10
|
|
|
11
|
+
// DEC-RBAC-093: email OPCIONAL y robusto a string vacío. Un usuario phone-primario (sin email)
|
|
12
|
+
// hace login MFA (SMS_OTP/TOTP) sin email; el trigger CreateAuthChallenge ya no manda ''. Se usa
|
|
13
|
+
// @ValidateIf (no @IsOptional) porque @IsOptional NO saltea '' — acá necesitamos que undefined,
|
|
14
|
+
// null y '' NO rompan la validación. Cuando email SÍ trae valor no vacío, debe ser un email válido.
|
|
15
|
+
// La rama EMAIL_OTP del preparer sigue exigiendo email en runtime (no se fuerza en el DTO). Ver DECISIONES.md.
|
|
16
|
+
@ValidateIf((o) => o.email !== undefined && o.email !== null && o.email !== '')
|
|
11
17
|
@IsEmail()
|
|
12
|
-
email
|
|
18
|
+
email?: string;
|
|
13
19
|
|
|
14
20
|
// DEC-RBAC-083: teléfono destino del challenge SMS_OTP. Lo popula el trigger CreateAuthChallenge
|
|
15
21
|
// (JWTAuth-cognito) desde el atributo phone_number de Cognito, igual que email. Opcional: ausente
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { ArrayMaxSize, IsArray, IsBoolean, IsUUID, Length } from "class-validator";
|
|
2
|
+
import { IsString } from "class-validator";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* DTOs de Comités (Dashboard Ops · Configuración §1).
|
|
6
|
+
*
|
|
7
|
+
* Un comité es un grupo de OPERADORES de backoffice (DirectoryBackoffice_GT) que
|
|
8
|
+
* recibe notificación de cambios/alarmas sensibles. CRUD libre (no comités fijos).
|
|
9
|
+
* Los miembros se persisten POR REFERENCIA (ids) y se resuelven en runtime contra
|
|
10
|
+
* el catálogo de operadores ACTIVE (vía IDirectoriesApi.getBackofficeDirectoryList);
|
|
11
|
+
* los inactivos se omiten del display y se depuran en el próximo Save.
|
|
12
|
+
*
|
|
13
|
+
* Canal MVP = solo email (config inerte hasta que exista el disparador — Reglas B3).
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/** Operador de backoffice resuelto (catálogo del picker y miembros del comité). */
|
|
17
|
+
export class BackofficeOperator {
|
|
18
|
+
/** DirectoryBackoffice_GT.id */
|
|
19
|
+
id!: string;
|
|
20
|
+
fullName!: string;
|
|
21
|
+
email!: string;
|
|
22
|
+
/** Rol mostrado en la UI (puesto del operador). */
|
|
23
|
+
jobTitle!: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Referencia a una regla que notifica al comité (Reglas · B3). Vacío en MVP. */
|
|
27
|
+
export class CommitteeRuleRef {
|
|
28
|
+
id!: string;
|
|
29
|
+
name!: string;
|
|
30
|
+
category!: string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** Body de POST /backoffice/config/committees. */
|
|
34
|
+
export class CreateCommitteeRequest {
|
|
35
|
+
@IsString()
|
|
36
|
+
@Length(3, 100)
|
|
37
|
+
name!: string;
|
|
38
|
+
|
|
39
|
+
/** Ids de DirectoryBackoffice_GT (referencia; puede ser []). */
|
|
40
|
+
@IsArray()
|
|
41
|
+
@IsUUID("4", { each: true })
|
|
42
|
+
@ArrayMaxSize(100)
|
|
43
|
+
members!: string[];
|
|
44
|
+
|
|
45
|
+
/** Canal email on/off (único canal del MVP; inerte hasta B3). */
|
|
46
|
+
@IsBoolean()
|
|
47
|
+
emailNotifications!: boolean;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** Body de PUT /backoffice/config/committees/{id} (reemplazo completo). */
|
|
51
|
+
export class UpdateCommitteeRequest {
|
|
52
|
+
@IsString()
|
|
53
|
+
@Length(3, 100)
|
|
54
|
+
name!: string;
|
|
55
|
+
|
|
56
|
+
@IsArray()
|
|
57
|
+
@IsUUID("4", { each: true })
|
|
58
|
+
@ArrayMaxSize(100)
|
|
59
|
+
members!: string[];
|
|
60
|
+
|
|
61
|
+
@IsBoolean()
|
|
62
|
+
emailNotifications!: boolean;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** Comité completo (response) — members ya RESUELTOS a operadores. */
|
|
66
|
+
export class Committee {
|
|
67
|
+
id!: string;
|
|
68
|
+
name!: string;
|
|
69
|
+
members!: BackofficeOperator[];
|
|
70
|
+
emailNotifications!: boolean;
|
|
71
|
+
/** Reglas que notifican a este comité (B3) — siempre [] en MVP. */
|
|
72
|
+
rulesNotifying!: CommitteeRuleRef[];
|
|
73
|
+
createdAt!: string;
|
|
74
|
+
updatedAt!: string;
|
|
75
|
+
createdBy!: string;
|
|
76
|
+
updatedBy!: string;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** Response de GET /backoffice/config/committees. */
|
|
80
|
+
export class CommitteeListResponse {
|
|
81
|
+
items!: Committee[];
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/** Response de GET /backoffice/config/committees/operators (solo ACTIVE). */
|
|
85
|
+
export class CommitteeOperatorsResponse {
|
|
86
|
+
items!: BackofficeOperator[];
|
|
87
|
+
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { MfaMethodEnum } from '../enums/MfaMethodEnum';
|
|
2
|
-
/**
|
|
3
|
-
* Body del POST /auth/resend-otp (público, anónimo). DEC-RBAC-054.
|
|
4
|
-
* Reenvía el OTP del login re-disparando el challenge real CUSTOM_AUTH (EMAIL_OTP) para la
|
|
5
|
-
* identidad SIN password. `tenantId` obligatorio (DEC-064 — el picker ya lo resolvió, NO "solo email").
|
|
6
|
-
* El email se normaliza lowercase server-side. Postura anti-enumeración: respuesta 200 genérica
|
|
7
|
-
* siempre, sin filtrar existencia (ver AuthLoginManager.resendChallengeOtp).
|
|
8
|
-
*/
|
|
9
|
-
export declare class ResendOtpRequest {
|
|
10
|
-
email: string;
|
|
11
|
-
tenantId: string;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Respuesta del resend-otp. `session`/`mfaMethod` frescos del nuevo challenge CUSTOM_AUTH.
|
|
15
|
-
* Plain sin validators (no validamos lo que mandamos al cliente — fiado-validation-and-dtos § 7).
|
|
16
|
-
* Ambos opcionales: en los caminos de rechazo silencioso (anti-enumeración) o ramas sin CUSTOM_AUTH
|
|
17
|
-
* el server responde 200 genérico sin session ni método.
|
|
18
|
-
*/
|
|
19
|
-
export interface ResendOtpResponse {
|
|
20
|
-
session?: string;
|
|
21
|
-
mfaMethod?: MfaMethodEnum;
|
|
22
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Body del POST /self-register/resend-otp (público, anónimo). DEC-RBAC-054.
|
|
3
|
-
* Re-envía el OTP del autoregistro (mecanismo messages-business, NO Cognito) tras validar un
|
|
4
|
-
* `pending` existente. Misma postura anti-enumeración del start. El email se normaliza lowercase
|
|
5
|
-
* server-side. DTO propio por endpoint (NO reusa SelfRegisterStartRequest, que exige roleId/scope/
|
|
6
|
-
* scopeRef, ni SelfRegisterVerifyOtpRequest, que exige otp).
|
|
7
|
-
*/
|
|
8
|
-
export declare class ResendSelfRegisterOtpRequest {
|
|
9
|
-
tenantId: string;
|
|
10
|
-
email: string;
|
|
11
|
-
}
|