@fiado/type-kit 3.259.0 → 3.261.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.
Files changed (115) hide show
  1. package/_test_/unit/platformRbac/PasswordPolicyInput.test.ts +58 -0
  2. package/_test_/unit/retailWizard/saleFinancier.test.ts +68 -0
  3. package/bin/helpdesk/dtos/ZendeskInternalAlertRequest.d.ts +18 -0
  4. package/bin/{walletFunding/dtos/CancelFundingReferenceRequest.js → helpdesk/dtos/ZendeskInternalAlertRequest.js} +18 -16
  5. package/bin/helpdesk/enums/InternalAlertChannelEnum.d.ts +7 -0
  6. package/bin/helpdesk/enums/InternalAlertChannelEnum.js +11 -0
  7. package/bin/helpdesk/enums/ZendeskAlertKindEnum.d.ts +7 -0
  8. package/bin/helpdesk/enums/ZendeskAlertKindEnum.js +11 -0
  9. package/bin/helpdesk/index.d.ts +4 -0
  10. package/bin/helpdesk/index.js +5 -0
  11. package/bin/helpdesk/interfaces/IZendeskAlertMessage.d.ts +6 -0
  12. package/bin/helpdesk/interfaces/IZendeskAlertMessage.js +2 -0
  13. package/bin/loanConfig/enums/ModifiableByRoleEnum.d.ts +11 -0
  14. package/bin/loanConfig/enums/ModifiableByRoleEnum.js +15 -0
  15. package/bin/platformRbac/application/Application.d.ts +17 -0
  16. package/bin/platformRbac/dtos/CreateTenantRequest.d.ts +12 -0
  17. package/bin/platformRbac/dtos/CreateTenantRequest.js +8 -0
  18. package/bin/platformRbac/dtos/PasswordPolicyInput.d.ts +30 -0
  19. package/bin/platformRbac/dtos/PasswordPolicyInput.js +72 -0
  20. package/bin/platformRbac/dtos/ResendOtpRequest.d.ts +22 -0
  21. package/bin/platformRbac/dtos/{CompleteMyProfileRequest.js → ResendOtpRequest.js} +14 -12
  22. package/bin/platformRbac/dtos/ResendSelfRegisterOtpRequest.d.ts +11 -0
  23. package/bin/platformRbac/dtos/ResendSelfRegisterOtpRequest.js +36 -0
  24. package/bin/platformRbac/index.d.ts +1 -0
  25. package/bin/platformRbac/index.js +3 -0
  26. package/bin/retailWizard/dtos/SaleException.d.ts +54 -0
  27. package/bin/retailWizard/dtos/SaleException.js +2 -0
  28. package/bin/retailWizard/dtos/SaleExceptionEvent.d.ts +18 -0
  29. package/bin/retailWizard/dtos/SaleExceptionEvent.js +2 -0
  30. package/bin/retailWizard/dtos/SaleExceptionPayload.d.ts +19 -0
  31. package/bin/retailWizard/dtos/SaleExceptionPayload.js +2 -0
  32. package/bin/retailWizard/dtos/SaleLogEntry.d.ts +29 -0
  33. package/bin/retailWizard/dtos/SaleLogEntry.js +2 -0
  34. package/bin/retailWizard/dtos/SalesReportDefinition.d.ts +20 -0
  35. package/bin/retailWizard/dtos/SalesReportDefinition.js +2 -0
  36. package/bin/retailWizard/dtos/SalesReportRun.d.ts +39 -0
  37. package/bin/retailWizard/dtos/SalesReportRun.js +2 -0
  38. package/bin/retailWizard/dtos/requests/BackofficeCancelSaleRequest.d.ts +26 -0
  39. package/bin/retailWizard/dtos/requests/BackofficeCancelSaleRequest.js +48 -0
  40. package/bin/retailWizard/dtos/requests/CreateSaleExceptionRequest.d.ts +28 -0
  41. package/bin/retailWizard/dtos/requests/CreateSaleExceptionRequest.js +96 -0
  42. package/bin/retailWizard/dtos/requests/ResolveSaleExceptionRequest.d.ts +15 -0
  43. package/bin/retailWizard/dtos/requests/ResolveSaleExceptionRequest.js +40 -0
  44. package/bin/retailWizard/dtos/requests/RunSalesReportRequest.d.ts +18 -0
  45. package/bin/retailWizard/dtos/requests/RunSalesReportRequest.js +45 -0
  46. package/bin/retailWizard/dtos/responses/BackofficeReportsResponse.d.ts +14 -0
  47. package/bin/retailWizard/dtos/responses/BackofficeReportsResponse.js +2 -0
  48. package/bin/retailWizard/dtos/responses/BackofficeSalesKpisResponse.d.ts +32 -0
  49. package/bin/retailWizard/dtos/responses/BackofficeSalesKpisResponse.js +2 -0
  50. package/bin/retailWizard/dtos/responses/BackofficeSalesStatsResponse.d.ts +26 -0
  51. package/bin/retailWizard/dtos/responses/BackofficeSalesStatsResponse.js +2 -0
  52. package/bin/retailWizard/enums/ReportFormatEnum.d.ts +5 -0
  53. package/bin/retailWizard/enums/ReportFormatEnum.js +9 -0
  54. package/bin/retailWizard/enums/ReportPeriodicityEnum.d.ts +9 -0
  55. package/bin/retailWizard/enums/ReportPeriodicityEnum.js +13 -0
  56. package/bin/retailWizard/enums/ReportRunStatusEnum.d.ts +18 -0
  57. package/bin/retailWizard/enums/ReportRunStatusEnum.js +22 -0
  58. package/bin/retailWizard/enums/SaleExceptionDecisionEnum.d.ts +10 -0
  59. package/bin/retailWizard/enums/SaleExceptionDecisionEnum.js +14 -0
  60. package/bin/retailWizard/enums/SaleExceptionEventKindEnum.d.ts +17 -0
  61. package/bin/retailWizard/enums/SaleExceptionEventKindEnum.js +21 -0
  62. package/bin/retailWizard/enums/SaleExceptionStatusEnum.d.ts +19 -0
  63. package/bin/retailWizard/enums/SaleExceptionStatusEnum.js +23 -0
  64. package/bin/retailWizard/enums/SaleExceptionTypeEnum.d.ts +19 -0
  65. package/bin/retailWizard/enums/SaleExceptionTypeEnum.js +23 -0
  66. package/bin/retailWizard/enums/SaleFinancierEnum.d.ts +18 -0
  67. package/bin/retailWizard/enums/SaleFinancierEnum.js +22 -0
  68. package/bin/retailWizard/enums/SalesReportIdEnum.d.ts +19 -0
  69. package/bin/retailWizard/enums/SalesReportIdEnum.js +23 -0
  70. package/bin/retailWizard/helpers/saleFinancier.d.ts +21 -0
  71. package/bin/retailWizard/helpers/saleFinancier.js +44 -0
  72. package/bin/retailWizard/index.d.ts +23 -0
  73. package/bin/retailWizard/index.js +29 -0
  74. package/package.json +1 -1
  75. package/src/helpdesk/dtos/ZendeskInternalAlertRequest.ts +31 -0
  76. package/src/helpdesk/enums/InternalAlertChannelEnum.ts +7 -0
  77. package/src/helpdesk/enums/ZendeskAlertKindEnum.ts +7 -0
  78. package/src/helpdesk/index.ts +7 -1
  79. package/src/helpdesk/interfaces/IZendeskAlertMessage.ts +7 -0
  80. package/src/platformRbac/application/Application.ts +17 -0
  81. package/src/platformRbac/dtos/CreateTenantRequest.ts +13 -0
  82. package/src/platformRbac/dtos/PasswordPolicyInput.ts +42 -0
  83. package/src/platformRbac/index.ts +3 -0
  84. package/src/retailWizard/dtos/SaleException.ts +55 -0
  85. package/src/retailWizard/dtos/SaleExceptionEvent.ts +19 -0
  86. package/src/retailWizard/dtos/SaleExceptionPayload.ts +19 -0
  87. package/src/retailWizard/dtos/SaleLogEntry.ts +30 -0
  88. package/src/retailWizard/dtos/SalesReportDefinition.ts +21 -0
  89. package/src/retailWizard/dtos/SalesReportRun.ts +40 -0
  90. package/src/retailWizard/dtos/requests/BackofficeCancelSaleRequest.ts +42 -0
  91. package/src/retailWizard/dtos/requests/CreateSaleExceptionRequest.ts +84 -0
  92. package/src/retailWizard/dtos/requests/ResolveSaleExceptionRequest.ts +25 -0
  93. package/src/retailWizard/dtos/requests/RunSalesReportRequest.ts +31 -0
  94. package/src/retailWizard/dtos/responses/BackofficeReportsResponse.ts +15 -0
  95. package/src/retailWizard/dtos/responses/BackofficeSalesKpisResponse.ts +34 -0
  96. package/src/retailWizard/dtos/responses/BackofficeSalesStatsResponse.ts +26 -0
  97. package/src/retailWizard/enums/ReportFormatEnum.ts +5 -0
  98. package/src/retailWizard/enums/ReportPeriodicityEnum.ts +9 -0
  99. package/src/retailWizard/enums/ReportRunStatusEnum.ts +18 -0
  100. package/src/retailWizard/enums/SaleExceptionDecisionEnum.ts +10 -0
  101. package/src/retailWizard/enums/SaleExceptionEventKindEnum.ts +17 -0
  102. package/src/retailWizard/enums/SaleExceptionStatusEnum.ts +19 -0
  103. package/src/retailWizard/enums/SaleExceptionTypeEnum.ts +19 -0
  104. package/src/retailWizard/enums/SaleFinancierEnum.ts +18 -0
  105. package/src/retailWizard/enums/SalesReportIdEnum.ts +19 -0
  106. package/src/retailWizard/helpers/saleFinancier.ts +48 -0
  107. package/src/retailWizard/index.ts +34 -0
  108. package/bin/platformRbac/dtos/CompleteMyProfileRequest.d.ts +0 -9
  109. package/bin/walletFunding/dtos/CancelFundingReferenceRequest.d.ts +0 -14
  110. package/bin/walletFunding/dtos/CancelFundingReferenceResponse.d.ts +0 -15
  111. package/bin/walletFunding/dtos/CancelFundingReferenceResponse.js +0 -13
  112. package/bin/walletFunding/dtos/CancelWalletFundingRequest.d.ts +0 -3
  113. package/bin/walletFunding/dtos/CancelWalletFundingRequest.js +0 -21
  114. package/bin/walletFunding/dtos/CancelWalletFundingResponse.d.ts +0 -7
  115. package/bin/walletFunding/dtos/CancelWalletFundingResponse.js +0 -6
@@ -0,0 +1,58 @@
1
+ import 'reflect-metadata';
2
+ import { plainToInstance } from 'class-transformer';
3
+ import { validateSync } from 'class-validator';
4
+
5
+ import { PasswordPolicyInput } from '../../../src/platformRbac/dtos/PasswordPolicyInput';
6
+
7
+ // DEC-RBAC-111: política de contraseña per-tenant. Los 5 campos son opcionales — un campo ausente
8
+ // cae a la plantilla de la app y, de ahí, a la policy global del lambda.
9
+ describe('PasswordPolicyInput', () => {
10
+ it('acepta los 5 campos válidos', () => {
11
+ const dto = plainToInstance(PasswordPolicyInput, {
12
+ minLength: 16,
13
+ requireUppercase: true,
14
+ requireLowercase: true,
15
+ requireNumber: true,
16
+ requireSymbol: true,
17
+ });
18
+ expect(validateSync(dto)).toHaveLength(0);
19
+ });
20
+
21
+ it('acepta el objeto vacío (todos los campos son opcionales)', () => {
22
+ expect(validateSync(plainToInstance(PasswordPolicyInput, {}))).toHaveLength(0);
23
+ });
24
+
25
+ // Cognito acepta PasswordPolicy.MinimumLength en 6..99. Fuera de ese rango, CreateUserPool tira
26
+ // InvalidParameterException DESPUÉS de que la saga de onboarding ya escribió la ficha del tenant
27
+ // en estado 'provisioning' — o sea el fallo cae en la rama de compensación. Se ataja acá.
28
+ it.each([5, 100, 150])('rechaza minLength %i (fuera del rango 6-99 de Cognito)', (minLength) => {
29
+ const errors = validateSync(plainToInstance(PasswordPolicyInput, { minLength }));
30
+ expect(errors).toHaveLength(1);
31
+ expect(errors[0].property).toBe('minLength');
32
+ });
33
+
34
+ it.each([6, 99])('acepta minLength %i (los bordes del rango de Cognito)', (minLength) => {
35
+ expect(validateSync(plainToInstance(PasswordPolicyInput, { minLength }))).toHaveLength(0);
36
+ });
37
+
38
+ it('rechaza minLength no entero', () => {
39
+ const errors = validateSync(plainToInstance(PasswordPolicyInput, { minLength: 12.5 }));
40
+ expect(errors).toHaveLength(1);
41
+ expect(errors[0].property).toBe('minLength');
42
+ });
43
+
44
+ it('rechaza un require* que no es booleano', () => {
45
+ const errors = validateSync(
46
+ plainToInstance(PasswordPolicyInput, { requireSymbol: 'sí' as unknown as boolean }),
47
+ );
48
+ expect(errors).toHaveLength(1);
49
+ expect(errors[0].property).toBe('requireSymbol');
50
+ });
51
+
52
+ // El piso (que la policy no sea MÁS DÉBIL que la global del lambda) NO se valida acá a propósito:
53
+ // depende de env vars del lambda, así que ponerlo también en el type-kit sería una segunda fuente
54
+ // de verdad en otro repo, que driftea en cuanto alguien cambia la env var.
55
+ it('NO rechaza una policy débil: el piso lo decide el lambda, no el type-kit', () => {
56
+ expect(validateSync(plainToInstance(PasswordPolicyInput, { minLength: 6 }))).toHaveLength(0);
57
+ });
58
+ });
@@ -0,0 +1,68 @@
1
+ import { SaleTypeEnum } from '../../../src/retailWizard/enums/SaleTypeEnum';
2
+ import { ExternalProviderEnum } from '../../../src/retailWizard/enums/ExternalProviderEnum';
3
+ import { SaleFinancierEnum } from '../../../src/retailWizard/enums/SaleFinancierEnum';
4
+ import {
5
+ financierOfSale,
6
+ isSureKeepFinanced,
7
+ isExternallyFinanced,
8
+ } from '../../../src/retailWizard/helpers/saleFinancier';
9
+
10
+ describe('financierOfSale', () => {
11
+ it('el contado no tiene financiera', () => {
12
+ expect(financierOfSale({ type: SaleTypeEnum.CASH, externalProvider: null })).toBe(
13
+ SaleFinancierEnum.NONE,
14
+ );
15
+ });
16
+
17
+ it('el crédito propio es SUREKEEP', () => {
18
+ expect(financierOfSale({ type: SaleTypeEnum.CREDIT, externalProvider: null })).toBe(
19
+ SaleFinancierEnum.SUREKEEP,
20
+ );
21
+ });
22
+
23
+ it.each([
24
+ [ExternalProviderEnum.PAYJOY, SaleFinancierEnum.PAYJOY],
25
+ [ExternalProviderEnum.CREDIYA, SaleFinancierEnum.CREDIYA],
26
+ [ExternalProviderEnum.LESPAGO, SaleFinancierEnum.LESPAGO],
27
+ [ExternalProviderEnum.INNOVA, SaleFinancierEnum.INNOVA],
28
+ ])('la derivación a %s mapea a su financiera', (provider, expected) => {
29
+ expect(financierOfSale({ type: SaleTypeEnum.EXTERNAL_REFERRAL, externalProvider: provider })).toBe(
30
+ expected,
31
+ );
32
+ });
33
+
34
+ it('una derivación sin proveedor cae en NONE, no revienta (ventas viejas sin el campo)', () => {
35
+ expect(financierOfSale({ type: SaleTypeEnum.EXTERNAL_REFERRAL, externalProvider: null })).toBe(
36
+ SaleFinancierEnum.NONE,
37
+ );
38
+ });
39
+
40
+ it('el crédito propio gana sobre un externalProvider colado en la fila', () => {
41
+ expect(
42
+ financierOfSale({ type: SaleTypeEnum.CREDIT, externalProvider: ExternalProviderEnum.PAYJOY }),
43
+ ).toBe(SaleFinancierEnum.SUREKEEP);
44
+ });
45
+ });
46
+
47
+ describe('particiones de los pills del Admin VL', () => {
48
+ it('SUREKEEP y externas son disjuntas', () => {
49
+ const surekeep = { type: SaleTypeEnum.CREDIT, externalProvider: null };
50
+ expect(isSureKeepFinanced(surekeep)).toBe(true);
51
+ expect(isExternallyFinanced(surekeep)).toBe(false);
52
+ });
53
+
54
+ it('una externa cuenta como externa y no como SureKeep', () => {
55
+ const externa = {
56
+ type: SaleTypeEnum.EXTERNAL_REFERRAL,
57
+ externalProvider: ExternalProviderEnum.CREDIYA,
58
+ };
59
+ expect(isExternallyFinanced(externa)).toBe(true);
60
+ expect(isSureKeepFinanced(externa)).toBe(false);
61
+ });
62
+
63
+ it('el contado NO cuenta en ninguna de las dos: no tiene financiera', () => {
64
+ const contado = { type: SaleTypeEnum.CASH, externalProvider: null };
65
+ expect(isSureKeepFinanced(contado)).toBe(false);
66
+ expect(isExternallyFinanced(contado)).toBe(false);
67
+ });
68
+ });
@@ -0,0 +1,18 @@
1
+ import { InternalAlertChannel } from "../enums/InternalAlertChannelEnum";
2
+ /**
3
+ * Alerta interna sobre un usuario. Se publica en la cola de alertamiento y zendesk-business
4
+ * la convierte en una nota interna de Zendesk: solo la ven los agentes, el usuario nunca.
5
+ *
6
+ * El asunto del ticket lo genera zendesk-business — es el único campo que el usuario podría
7
+ * llegar a ver, así que no lo escribe el caller.
8
+ */
9
+ export declare class ZendeskInternalAlertRequest {
10
+ /** Usuario sobre el que se alerta. */
11
+ directoryId: string;
12
+ /** Detalle del problema. Acá va lo sensible: es lo que se escribe como nota interna. */
13
+ note: string;
14
+ /** Decide el ruteo en Zendesk (tag, vista y equipo). */
15
+ channel: InternalAlertChannel;
16
+ /** Id del evento origen, para rastrear la alerta de vuelta. */
17
+ reference?: string;
18
+ }
@@ -9,33 +9,35 @@ 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.CancelFundingReferenceRequest = void 0;
12
+ exports.ZendeskInternalAlertRequest = void 0;
13
13
  const class_validator_1 = require("class-validator");
14
+ const InternalAlertChannelEnum_1 = require("../enums/InternalAlertChannelEnum");
14
15
  /**
15
- * Body para cancelar una referencia de funding ya creada. La referencia/fundingId
16
- * viaja en la URL (`/funding/{moduleName}/{fundingId}/cancel`); este body aporta
17
- * el contexto del solicitante + idempotencia.
16
+ * Alerta interna sobre un usuario. Se publica en la cola de alertamiento y zendesk-business
17
+ * la convierte en una nota interna de Zendesk: solo la ven los agentes, el usuario nunca.
18
18
  *
19
- * NOTA: shape inferido desde el uso en `@fiado/api-invoker`
20
- * (benefits-marketplace / equality-connector) confirmar con el dueño del
21
- * módulo walletFunding / el lambda equality-connector que implementa el cancel.
19
+ * El asunto del ticket lo genera zendesk-business — es el único campo que el usuario podría
20
+ * llegar a ver, así que no lo escribe el caller.
22
21
  */
23
- class CancelFundingReferenceRequest {
22
+ class ZendeskInternalAlertRequest {
24
23
  }
25
- exports.CancelFundingReferenceRequest = CancelFundingReferenceRequest;
24
+ exports.ZendeskInternalAlertRequest = ZendeskInternalAlertRequest;
26
25
  __decorate([
26
+ (0, class_validator_1.IsNotEmpty)(),
27
27
  (0, class_validator_1.IsString)(),
28
- (0, class_validator_1.MaxLength)(64),
29
28
  __metadata("design:type", String)
30
- ], CancelFundingReferenceRequest.prototype, "directoryId", void 0);
29
+ ], ZendeskInternalAlertRequest.prototype, "directoryId", void 0);
31
30
  __decorate([
32
- (0, class_validator_1.IsOptional)(),
31
+ (0, class_validator_1.IsNotEmpty)(),
33
32
  (0, class_validator_1.IsString)(),
34
- (0, class_validator_1.MaxLength)(256),
35
33
  __metadata("design:type", String)
36
- ], CancelFundingReferenceRequest.prototype, "reason", void 0);
34
+ ], ZendeskInternalAlertRequest.prototype, "note", void 0);
35
+ __decorate([
36
+ (0, class_validator_1.IsEnum)(InternalAlertChannelEnum_1.InternalAlertChannel),
37
+ __metadata("design:type", String)
38
+ ], ZendeskInternalAlertRequest.prototype, "channel", void 0);
37
39
  __decorate([
38
40
  (0, class_validator_1.IsString)(),
39
- (0, class_validator_1.MaxLength)(64),
41
+ (0, class_validator_1.IsOptional)(),
40
42
  __metadata("design:type", String)
41
- ], CancelFundingReferenceRequest.prototype, "idempotencyKey", void 0);
43
+ ], ZendeskInternalAlertRequest.prototype, "reference", void 0);
@@ -0,0 +1,7 @@
1
+ /** Canal de una alerta interna: decide el ruteo dentro de Zendesk (tag, vista y equipo). */
2
+ export declare enum InternalAlertChannel {
3
+ /** Alertas operativas que resuelve el equipo interno sin involucrar al usuario. */
4
+ INTERNAL = "INTERNAL",
5
+ /** Alertas de cumplimiento regulatorio. El usuario no puede enterarse. */
6
+ COMPLIANCE = "COMPLIANCE"
7
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InternalAlertChannel = void 0;
4
+ /** Canal de una alerta interna: decide el ruteo dentro de Zendesk (tag, vista y equipo). */
5
+ var InternalAlertChannel;
6
+ (function (InternalAlertChannel) {
7
+ /** Alertas operativas que resuelve el equipo interno sin involucrar al usuario. */
8
+ InternalAlertChannel["INTERNAL"] = "INTERNAL";
9
+ /** Alertas de cumplimiento regulatorio. El usuario no puede enterarse. */
10
+ InternalAlertChannel["COMPLIANCE"] = "COMPLIANCE";
11
+ })(InternalAlertChannel || (exports.InternalAlertChannel = InternalAlertChannel = {}));
@@ -0,0 +1,7 @@
1
+ /** Discrimina qué transporta un mensaje de la cola de alertamiento de Zendesk. */
2
+ export declare enum ZendeskAlertKind {
3
+ /** Nota interna en un ticket: solo la ven los agentes. */
4
+ INTERNAL_NOTE = "INTERNAL_NOTE",
5
+ /** Mensaje proactivo al chat del usuario. */
6
+ PROACTIVE_MESSAGE = "PROACTIVE_MESSAGE"
7
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ZendeskAlertKind = void 0;
4
+ /** Discrimina qué transporta un mensaje de la cola de alertamiento de Zendesk. */
5
+ var ZendeskAlertKind;
6
+ (function (ZendeskAlertKind) {
7
+ /** Nota interna en un ticket: solo la ven los agentes. */
8
+ ZendeskAlertKind["INTERNAL_NOTE"] = "INTERNAL_NOTE";
9
+ /** Mensaje proactivo al chat del usuario. */
10
+ ZendeskAlertKind["PROACTIVE_MESSAGE"] = "PROACTIVE_MESSAGE";
11
+ })(ZendeskAlertKind || (exports.ZendeskAlertKind = ZendeskAlertKind = {}));
@@ -1,2 +1,6 @@
1
1
  export * from './dtos/HelpdeskCreateUserRequest';
2
2
  export * from './dtos/HelpdeskCreateTicketRequest';
3
+ export * from './dtos/ZendeskInternalAlertRequest';
4
+ export * from './enums/InternalAlertChannelEnum';
5
+ export * from './enums/ZendeskAlertKindEnum';
6
+ export * from './interfaces/IZendeskAlertMessage';
@@ -16,3 +16,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./dtos/HelpdeskCreateUserRequest"), exports);
18
18
  __exportStar(require("./dtos/HelpdeskCreateTicketRequest"), exports);
19
+ // Alertamiento interno (cola de Zendesk)
20
+ __exportStar(require("./dtos/ZendeskInternalAlertRequest"), exports);
21
+ __exportStar(require("./enums/InternalAlertChannelEnum"), exports);
22
+ __exportStar(require("./enums/ZendeskAlertKindEnum"), exports);
23
+ __exportStar(require("./interfaces/IZendeskAlertMessage"), exports);
@@ -0,0 +1,6 @@
1
+ import { ZendeskAlertKind } from "../enums/ZendeskAlertKindEnum";
2
+ /** Sobre de un mensaje de la cola de alertamiento: `kind` decide cómo interpretar `payload`. */
3
+ export interface IZendeskAlertMessage<TPayload = unknown> {
4
+ kind: ZendeskAlertKind;
5
+ payload: TPayload;
6
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Rol RBAC mínimo que puede modificar un parámetro (RBAC a nivel de parámetro, modelo-datos §8).
3
+ * `retailer_admin` = "Admin VentasLuga" de M6 §8. Valores = identificadores de rol de RBAC F0.
4
+ * TD-004: confirmar mapeo super_admin ↔ platform_super_admin con el naming real de F0.
5
+ * @enum {string}
6
+ */
7
+ export declare enum ModifiableByRoleEnum {
8
+ SUPER_ADMIN = "super_admin",
9
+ SOFOM_ADMIN = "sofom_admin",
10
+ RETAILER_ADMIN = "retailer_admin"
11
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModifiableByRoleEnum = void 0;
4
+ /**
5
+ * Rol RBAC mínimo que puede modificar un parámetro (RBAC a nivel de parámetro, modelo-datos §8).
6
+ * `retailer_admin` = "Admin VentasLuga" de M6 §8. Valores = identificadores de rol de RBAC F0.
7
+ * TD-004: confirmar mapeo super_admin ↔ platform_super_admin con el naming real de F0.
8
+ * @enum {string}
9
+ */
10
+ var ModifiableByRoleEnum;
11
+ (function (ModifiableByRoleEnum) {
12
+ ModifiableByRoleEnum["SUPER_ADMIN"] = "super_admin";
13
+ ModifiableByRoleEnum["SOFOM_ADMIN"] = "sofom_admin";
14
+ ModifiableByRoleEnum["RETAILER_ADMIN"] = "retailer_admin";
15
+ })(ModifiableByRoleEnum || (exports.ModifiableByRoleEnum = ModifiableByRoleEnum = {}));
@@ -44,6 +44,23 @@ export interface ApplicationDefaults {
44
44
  * UsernameAttributes del pool): true ⇒ pool con ['email','phone_number']. Heredado al tenant.
45
45
  */
46
46
  allowSecondary?: boolean;
47
+ /**
48
+ * DEC-RBAC-111: política de contraseña que heredan los tenants creados desde esta aplicación.
49
+ *
50
+ * TOP-LEVEL (hermano de `autoregister`), NO dentro de `securityPolicy`: en la ficha del tenant
51
+ * ese sub-objeto lo reescribe entero el PUT de security-policy, y acá se mantiene la simetría.
52
+ *
53
+ * La herencia ocurre UNA sola vez, en el onboarding: cambiar este default después NO re-escribe
54
+ * la policy de los tenants ya creados, solo aplica a los futuros. Los 5 campos son opcionales;
55
+ * `tempValidityDays` no es per-tenant y por eso no está.
56
+ */
57
+ passwordPolicy?: {
58
+ minLength?: number;
59
+ requireUppercase?: boolean;
60
+ requireLowercase?: boolean;
61
+ requireNumber?: boolean;
62
+ requireSymbol?: boolean;
63
+ };
47
64
  }
48
65
  export interface SeedRole {
49
66
  roleId: string;
@@ -1,4 +1,5 @@
1
1
  import { TokenValidationMode } from '../enums/TokenValidationMode';
2
+ import { PasswordPolicyInput } from './PasswordPolicyInput';
2
3
  /**
3
4
  * Punto inicial de la política 2FA elegido en el alta del tenant (DEC-RBAC-064). Para el CREATE
4
5
  * ambos campos son OPCIONALES: es un override del punto de partida — si se omite, el onboarding
@@ -47,4 +48,15 @@ export declare class CreateTenantRequest {
47
48
  * onboarding hereda `app.defaults.securityPolicy`. Aditivo, no rompe altas existentes.
48
49
  */
49
50
  securityPolicy?: CreateTenantSecurityPolicy;
51
+ /**
52
+ * DEC-RBAC-111: política de contraseña del tenant. Opcional: ausente ⇒ hereda
53
+ * `app.defaults.passwordPolicy` y, si tampoco está, la policy global del lambda.
54
+ *
55
+ * TOP-LEVEL a propósito, NO dentro de `securityPolicy`: ese sub-objeto lo reescribe entero el
56
+ * PUT de security-policy desde una lectura cacheada, y se llevaría puesta la passwordPolicy.
57
+ *
58
+ * INMUTABLE después del alta: alimenta la política nativa del user pool de Cognito, y no existe
59
+ * un update de pool (ver TD-RBAC-138 del platform-rbac-business).
60
+ */
61
+ passwordPolicy?: PasswordPolicyInput;
50
62
  }
@@ -13,6 +13,7 @@ exports.CreateTenantRequest = exports.CreateTenantSecurityPolicy = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
15
  const TokenValidationMode_1 = require("../enums/TokenValidationMode");
16
+ const PasswordPolicyInput_1 = require("./PasswordPolicyInput");
16
17
  /**
17
18
  * Punto inicial de la política 2FA elegido en el alta del tenant (DEC-RBAC-064). Para el CREATE
18
19
  * ambos campos son OPCIONALES: es un override del punto de partida — si se omite, el onboarding
@@ -106,3 +107,10 @@ __decorate([
106
107
  (0, class_transformer_1.Type)(() => CreateTenantSecurityPolicy),
107
108
  __metadata("design:type", CreateTenantSecurityPolicy)
108
109
  ], CreateTenantRequest.prototype, "securityPolicy", void 0);
110
+ __decorate([
111
+ (0, class_transformer_1.Expose)(),
112
+ (0, class_validator_1.IsOptional)(),
113
+ (0, class_validator_1.ValidateNested)(),
114
+ (0, class_transformer_1.Type)(() => PasswordPolicyInput_1.PasswordPolicyInput),
115
+ __metadata("design:type", PasswordPolicyInput_1.PasswordPolicyInput)
116
+ ], CreateTenantRequest.prototype, "passwordPolicy", void 0);
@@ -0,0 +1,30 @@
1
+ /**
2
+ * DEC-RBAC-111: política de complejidad de contraseña de un tenant.
3
+ *
4
+ * Los 5 campos son OPCIONALES: un campo ausente cae a la plantilla de la aplicación
5
+ * (`ApplicationDefaults.passwordPolicy`) y, de ahí, a la policy global del lambda.
6
+ *
7
+ * Se usa en dos lugares, siempre TOP-LEVEL (nunca dentro de `securityPolicy`):
8
+ * - `CreateTenantRequest.passwordPolicy` — override al crear el tenant.
9
+ * - `ApplicationDefaults.passwordPolicy` — default de la plantilla que el tenant hereda.
10
+ *
11
+ * `tempValidityDays` NO está acá a propósito: la validez de la contraseña temporal no es per-tenant
12
+ * (es el único campo de la policy que no afecta la fuerza de la contraseña). Sale siempre de la
13
+ * env var global del lambda.
14
+ *
15
+ * El rango 6..99 de `minLength` es el que admite `PasswordPolicy.MinimumLength` de Cognito. Se valida
16
+ * ACÁ para que un valor fuera de rango se rechace en el borde: si llegara a `CreateUserPool`, la
17
+ * `InvalidParameterException` caería con la ficha del tenant ya escrita en estado 'provisioning',
18
+ * o sea dentro de la rama de compensación de la saga de onboarding.
19
+ *
20
+ * OJO: acá NO se valida el PISO (que la policy no sea más débil que la global). Ese piso depende de
21
+ * env vars del lambda; declararlo también en el type-kit sería una segunda fuente de verdad, en otro
22
+ * repo, que driftea en cuanto alguien cambia la env var. Lo decide el lambda.
23
+ */
24
+ export declare class PasswordPolicyInput {
25
+ minLength?: number;
26
+ requireUppercase?: boolean;
27
+ requireLowercase?: boolean;
28
+ requireNumber?: boolean;
29
+ requireSymbol?: boolean;
30
+ }
@@ -0,0 +1,72 @@
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.PasswordPolicyInput = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ /**
16
+ * DEC-RBAC-111: política de complejidad de contraseña de un tenant.
17
+ *
18
+ * Los 5 campos son OPCIONALES: un campo ausente cae a la plantilla de la aplicación
19
+ * (`ApplicationDefaults.passwordPolicy`) y, de ahí, a la policy global del lambda.
20
+ *
21
+ * Se usa en dos lugares, siempre TOP-LEVEL (nunca dentro de `securityPolicy`):
22
+ * - `CreateTenantRequest.passwordPolicy` — override al crear el tenant.
23
+ * - `ApplicationDefaults.passwordPolicy` — default de la plantilla que el tenant hereda.
24
+ *
25
+ * `tempValidityDays` NO está acá a propósito: la validez de la contraseña temporal no es per-tenant
26
+ * (es el único campo de la policy que no afecta la fuerza de la contraseña). Sale siempre de la
27
+ * env var global del lambda.
28
+ *
29
+ * El rango 6..99 de `minLength` es el que admite `PasswordPolicy.MinimumLength` de Cognito. Se valida
30
+ * ACÁ para que un valor fuera de rango se rechace en el borde: si llegara a `CreateUserPool`, la
31
+ * `InvalidParameterException` caería con la ficha del tenant ya escrita en estado 'provisioning',
32
+ * o sea dentro de la rama de compensación de la saga de onboarding.
33
+ *
34
+ * OJO: acá NO se valida el PISO (que la policy no sea más débil que la global). Ese piso depende de
35
+ * env vars del lambda; declararlo también en el type-kit sería una segunda fuente de verdad, en otro
36
+ * repo, que driftea en cuanto alguien cambia la env var. Lo decide el lambda.
37
+ */
38
+ class PasswordPolicyInput {
39
+ }
40
+ exports.PasswordPolicyInput = PasswordPolicyInput;
41
+ __decorate([
42
+ (0, class_transformer_1.Expose)(),
43
+ (0, class_validator_1.IsOptional)(),
44
+ (0, class_validator_1.IsInt)(),
45
+ (0, class_validator_1.Min)(6),
46
+ (0, class_validator_1.Max)(99),
47
+ __metadata("design:type", Number)
48
+ ], PasswordPolicyInput.prototype, "minLength", void 0);
49
+ __decorate([
50
+ (0, class_transformer_1.Expose)(),
51
+ (0, class_validator_1.IsOptional)(),
52
+ (0, class_validator_1.IsBoolean)(),
53
+ __metadata("design:type", Boolean)
54
+ ], PasswordPolicyInput.prototype, "requireUppercase", void 0);
55
+ __decorate([
56
+ (0, class_transformer_1.Expose)(),
57
+ (0, class_validator_1.IsOptional)(),
58
+ (0, class_validator_1.IsBoolean)(),
59
+ __metadata("design:type", Boolean)
60
+ ], PasswordPolicyInput.prototype, "requireLowercase", void 0);
61
+ __decorate([
62
+ (0, class_transformer_1.Expose)(),
63
+ (0, class_validator_1.IsOptional)(),
64
+ (0, class_validator_1.IsBoolean)(),
65
+ __metadata("design:type", Boolean)
66
+ ], PasswordPolicyInput.prototype, "requireNumber", void 0);
67
+ __decorate([
68
+ (0, class_transformer_1.Expose)(),
69
+ (0, class_validator_1.IsOptional)(),
70
+ (0, class_validator_1.IsBoolean)(),
71
+ __metadata("design:type", Boolean)
72
+ ], PasswordPolicyInput.prototype, "requireSymbol", void 0);
@@ -0,0 +1,22 @@
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
+ }
@@ -9,26 +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.CompleteMyProfileRequest = void 0;
12
+ exports.ResendOtpRequest = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
15
  /**
16
- * Body del PUT /me/profile/complete (autenticado, gate post-MFA del autoregistro). DEC-RBAC-034.
17
- * Opera sobre el propio usuario (cognitoSub del token). Valida nombre + los `userFieldDefs` requeridos
18
- * del tenant (422 MISSING_REQUIRED_FIELDS si faltan) y flipea `profileComplete=true`.
16
+ * Body del POST /auth/resend-otp (público, anónimo). DEC-RBAC-054.
17
+ * Reenvía el OTP del login re-disparando el challenge real CUSTOM_AUTH (EMAIL_OTP) para la
18
+ * identidad SIN password. `tenantId` obligatorio (DEC-064 el picker ya lo resolvió, NO "solo email").
19
+ * El email se normaliza lowercase server-side. Postura anti-enumeración: respuesta 200 genérica
20
+ * siempre, sin filtrar existencia (ver AuthLoginManager.resendChallengeOtp).
19
21
  */
20
- class CompleteMyProfileRequest {
22
+ class ResendOtpRequest {
21
23
  }
22
- exports.CompleteMyProfileRequest = CompleteMyProfileRequest;
24
+ exports.ResendOtpRequest = ResendOtpRequest;
23
25
  __decorate([
24
26
  (0, class_transformer_1.Expose)(),
25
- (0, class_validator_1.IsString)(),
27
+ (0, class_validator_1.IsEmail)(),
26
28
  (0, class_validator_1.IsNotEmpty)(),
27
29
  __metadata("design:type", String)
28
- ], CompleteMyProfileRequest.prototype, "displayName", void 0);
30
+ ], ResendOtpRequest.prototype, "email", void 0);
29
31
  __decorate([
30
32
  (0, class_transformer_1.Expose)(),
31
- (0, class_validator_1.IsOptional)(),
32
- (0, class_validator_1.IsObject)(),
33
- __metadata("design:type", Object)
34
- ], CompleteMyProfileRequest.prototype, "customFields", void 0);
33
+ (0, class_validator_1.IsString)(),
34
+ (0, class_validator_1.IsNotEmpty)(),
35
+ __metadata("design:type", String)
36
+ ], ResendOtpRequest.prototype, "tenantId", void 0);
@@ -0,0 +1,11 @@
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
+ }
@@ -0,0 +1,36 @@
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.ResendSelfRegisterOtpRequest = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ /**
16
+ * Body del POST /self-register/resend-otp (público, anónimo). DEC-RBAC-054.
17
+ * Re-envía el OTP del autoregistro (mecanismo messages-business, NO Cognito) tras validar un
18
+ * `pending` existente. Misma postura anti-enumeración del start. El email se normaliza lowercase
19
+ * server-side. DTO propio por endpoint (NO reusa SelfRegisterStartRequest, que exige roleId/scope/
20
+ * scopeRef, ni SelfRegisterVerifyOtpRequest, que exige otp).
21
+ */
22
+ class ResendSelfRegisterOtpRequest {
23
+ }
24
+ exports.ResendSelfRegisterOtpRequest = ResendSelfRegisterOtpRequest;
25
+ __decorate([
26
+ (0, class_transformer_1.Expose)(),
27
+ (0, class_validator_1.IsString)(),
28
+ (0, class_validator_1.IsNotEmpty)(),
29
+ __metadata("design:type", String)
30
+ ], ResendSelfRegisterOtpRequest.prototype, "tenantId", void 0);
31
+ __decorate([
32
+ (0, class_transformer_1.Expose)(),
33
+ (0, class_validator_1.IsEmail)(),
34
+ (0, class_validator_1.IsNotEmpty)(),
35
+ __metadata("design:type", String)
36
+ ], ResendSelfRegisterOtpRequest.prototype, "email", void 0);
@@ -27,6 +27,7 @@ export * from './dtos/AuthorizeRequest';
27
27
  export * from './dtos/AuthorizeResponse';
28
28
  export * from './dtos/CreateTenantRequest';
29
29
  export type { CreateTenantResponse } from './dtos/CreateTenantResponse';
30
+ export * from './dtos/PasswordPolicyInput';
30
31
  export type { TenantStatus } from './dtos/TenantStatus';
31
32
  export type { VerifyTenantInfraResponse } from './dtos/VerifyTenantInfraResponse';
32
33
  export type { TenantDetailResponse } from './dtos/TenantDetailResponse';
@@ -63,6 +63,9 @@ __exportStar(require("./dtos/AuthorizeResponse"), exports);
63
63
  // F-11 — onboarding de tenant (POST backoffice createTenant). CreateTenantRequest lleva
64
64
  // decoradores class-validator → export de valor; CreateTenantResponse es interface → type-only.
65
65
  __exportStar(require("./dtos/CreateTenantRequest"), exports);
66
+ // DEC-RBAC-111: policy de contraseña per-tenant. Lleva decoradores class-validator → export de valor.
67
+ // La consumen CreateTenantRequest (override del alta) y ApplicationDefaults (default de la plantilla).
68
+ __exportStar(require("./dtos/PasswordPolicyInput"), exports);
66
69
  // MFA por tenant — methodsAllowed (value-set 'EMAIL'|'TOTP', TD-RBAC-071, DEC-095).
67
70
  // UpdateTenantSecurityPolicyRequest lleva decoradores class-validator → export de valor;
68
71
  // TenantSecurityPolicyResponse es interface plain → type-only.