@fiado/type-kit 3.69.0 → 3.70.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 (28) hide show
  1. package/bin/index.d.ts +1 -0
  2. package/bin/index.js +2 -1
  3. package/bin/milestone-business/dtos/Milestone.d.ts +24 -0
  4. package/bin/milestone-business/dtos/Milestone.js +2 -0
  5. package/bin/milestone-business/dtos/MilestonesByDirectoryIdsRequest.d.ts +19 -0
  6. package/bin/milestone-business/dtos/MilestonesByDirectoryIdsRequest.js +39 -0
  7. package/bin/milestone-business/dtos/MilestonesByDirectoryIdsResponse.d.ts +10 -0
  8. package/bin/milestone-business/dtos/MilestonesByDirectoryIdsResponse.js +2 -0
  9. package/bin/milestone-business/index.d.ts +3 -0
  10. package/bin/milestone-business/index.js +4 -0
  11. package/bin/twilioConnector/dtos/ConnectorSendMessageRequest.d.ts +27 -0
  12. package/bin/twilioConnector/dtos/ConnectorSendMessageRequest.js +62 -0
  13. package/bin/twilioConnector/dtos/ConnectorSendMessageResponse.d.ts +9 -0
  14. package/bin/twilioConnector/dtos/ConnectorSendMessageResponse.js +30 -0
  15. package/bin/twilioConnector/dtos/SelectedProvider.d.ts +21 -0
  16. package/bin/twilioConnector/dtos/SelectedProvider.js +47 -0
  17. package/bin/twilioConnector/index.d.ts +3 -0
  18. package/bin/twilioConnector/index.js +19 -0
  19. package/package.json +1 -1
  20. package/src/index.ts +1 -0
  21. package/src/milestone-business/dtos/Milestone.ts +24 -0
  22. package/src/milestone-business/dtos/MilestonesByDirectoryIdsRequest.ts +26 -0
  23. package/src/milestone-business/dtos/MilestonesByDirectoryIdsResponse.ts +11 -0
  24. package/src/milestone-business/index.ts +6 -0
  25. package/src/twilioConnector/dtos/ConnectorSendMessageRequest.ts +34 -0
  26. package/src/twilioConnector/dtos/ConnectorSendMessageResponse.ts +13 -0
  27. package/src/twilioConnector/dtos/SelectedProvider.ts +27 -0
  28. package/src/twilioConnector/index.ts +3 -0
package/bin/index.d.ts CHANGED
@@ -74,6 +74,7 @@ export * as CirculoCredito from './circuloCredito';
74
74
  export * as MilestoneBusiness from './milestone-business';
75
75
  export * as Mdm from './mdm';
76
76
  export * as MessagesConnector from './messagesConnector';
77
+ export * as TwilioConnector from './twilioConnector';
77
78
  export * as CognitoBackofficeConnector from './cognitoBackofficeConnector';
78
79
  export * as PlatformRbac from './platformRbac';
79
80
  export * as Remittance from './remittance';
package/bin/index.js CHANGED
@@ -37,7 +37,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.Company = exports.Services = exports.AccountIssuanceBusiness = exports.AppSelectionData = exports.Device = exports.Observations = exports.IssuanceBusiness = exports.Blacklist = exports.CentralPayments = exports.Helpdesk = exports.FiadoApiResponse = exports.Auth = exports.LegalDocumentsBusiness = exports.Role = exports.STPAccount = exports.RiskProfile = exports.FraudPreventionEngine = exports.BBVARst = exports.Stp = exports.BenefitCenter = exports.BankAccount = exports.P2pContact = exports.CreditContract = exports.Contract = exports.ProductCatalog = exports.ContactInfo = exports.TransactionAnalytics = exports.Transaction = exports.TransactionProcessor = exports.GenericMessage = exports.EventBridgeMessage = exports.SessionActivity = exports.NotificationMessages = exports.ServicePayment = exports.Header = exports.Identity = exports.Group = exports.File = exports.ExchangeRate = exports.Directory = exports.Currency = exports.Country = exports.Card = exports.Authentication = exports.App = exports.Address = exports.Beneficiary = exports.Activity = exports.Account = exports.Crypto = void 0;
40
- exports.TotpSecurity = exports.WalletFunding = exports.Remittance = exports.PlatformRbac = exports.CognitoBackofficeConnector = exports.MessagesConnector = exports.Mdm = exports.MilestoneBusiness = exports.CirculoCredito = exports.CreditStatements = exports.Sentry = exports.AiEngine = exports.Funnel = exports.TeamsConnector = exports.PlatformErrorEvents = exports.CustomerFile = exports.CreditBackoffice = exports.CreditDashboard = exports.CreditEngine = exports.Credit = exports.ComissionBusiness = exports.ReferralBusiness = exports.ZendeskMessaging = exports.NotificationWS = exports.Event = exports.PayrollBusiness = exports.Cnbv = exports.DirectorySetting = exports.InvoiceCollector = exports.Collector = exports.Pricelist = void 0;
40
+ exports.TotpSecurity = exports.WalletFunding = exports.Remittance = exports.PlatformRbac = exports.CognitoBackofficeConnector = exports.TwilioConnector = exports.MessagesConnector = exports.Mdm = exports.MilestoneBusiness = exports.CirculoCredito = exports.CreditStatements = exports.Sentry = exports.AiEngine = exports.Funnel = exports.TeamsConnector = exports.PlatformErrorEvents = exports.CustomerFile = exports.CreditBackoffice = exports.CreditDashboard = exports.CreditEngine = exports.Credit = exports.ComissionBusiness = exports.ReferralBusiness = exports.ZendeskMessaging = exports.NotificationWS = exports.Event = exports.PayrollBusiness = exports.Cnbv = exports.DirectorySetting = exports.InvoiceCollector = exports.Collector = exports.Pricelist = void 0;
41
41
  exports.Crypto = __importStar(require("./crypto"));
42
42
  exports.Account = __importStar(require("./account"));
43
43
  exports.Activity = __importStar(require("./activity"));
@@ -114,6 +114,7 @@ exports.CirculoCredito = __importStar(require("./circuloCredito"));
114
114
  exports.MilestoneBusiness = __importStar(require("./milestone-business"));
115
115
  exports.Mdm = __importStar(require("./mdm"));
116
116
  exports.MessagesConnector = __importStar(require("./messagesConnector"));
117
+ exports.TwilioConnector = __importStar(require("./twilioConnector"));
117
118
  exports.CognitoBackofficeConnector = __importStar(require("./cognitoBackofficeConnector"));
118
119
  // PlatformRbac: módulo del lambda platform-rbac-business (Fase 0 SureKeep).
119
120
  // Contiene Permission enum + AuthContext + RoleAssignmentInfo + PermissionScope +
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Forma completa de un Milestone tal como lo persiste y devuelve el lambda
3
+ * `milestone-business`. Es la representación canónica del item de la tabla DDB
4
+ * `Milestones` expuesta a consumers server-to-server (api-invoker).
5
+ *
6
+ * `value` es metadata libre asociada al evento (objeto de forma variable).
7
+ * `createdAt` / `updatedAt` son epoch ms (Dynamoose `timestamps: true`).
8
+ */
9
+ export interface Milestone {
10
+ /** Identificador único del milestone. Determinístico: `${directoryId}#${eventKey}`. */
11
+ id: string;
12
+ /** directoryId del usuario al que pertenece el evento. */
13
+ directoryId: string;
14
+ /** Fecha en la que ocurrió el evento (epoch en milisegundos). */
15
+ eventDate: number;
16
+ /** Llave que identifica el tipo de evento/milestone. */
17
+ eventKey: string;
18
+ /** Metadata libre asociada al milestone (objeto con forma variable). */
19
+ value?: Record<string, unknown>;
20
+ /** Epoch ms de creación (Dynamoose timestamps). */
21
+ createdAt?: number;
22
+ /** Epoch ms de última actualización (Dynamoose timestamps). */
23
+ updatedAt?: number;
24
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Cota máxima de directoryIds aceptados por request en el endpoint batch
3
+ * `privateListMilestonesByDirectoryIds`. Protege contra fan-out excesivo
4
+ * (cada directoryId dispara un query GSI con drenado de paginación).
5
+ */
6
+ export declare const MILESTONES_BY_DIRECTORY_IDS_MAX_BATCH = 100;
7
+ /**
8
+ * Body de `POST /private/milestones/by-directory-ids`.
9
+ *
10
+ * Recibe una lista de directoryIds y devuelve, por cada uno, el array COMPLETO
11
+ * de milestones (paginación drenada del lado del lambda). Se usa POST en lugar
12
+ * de GET porque la lista puede ser larga y no cabe cómoda en query string.
13
+ *
14
+ * La cota de tamaño (`MILESTONES_BY_DIRECTORY_IDS_MAX_BATCH`) se valida también
15
+ * en el manager para responder 400 explícito si se excede.
16
+ */
17
+ export declare class MilestonesByDirectoryIdsRequest {
18
+ directoryIds: string[];
19
+ }
@@ -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
+ 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.MilestonesByDirectoryIdsRequest = exports.MILESTONES_BY_DIRECTORY_IDS_MAX_BATCH = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ /**
15
+ * Cota máxima de directoryIds aceptados por request en el endpoint batch
16
+ * `privateListMilestonesByDirectoryIds`. Protege contra fan-out excesivo
17
+ * (cada directoryId dispara un query GSI con drenado de paginación).
18
+ */
19
+ exports.MILESTONES_BY_DIRECTORY_IDS_MAX_BATCH = 100;
20
+ /**
21
+ * Body de `POST /private/milestones/by-directory-ids`.
22
+ *
23
+ * Recibe una lista de directoryIds y devuelve, por cada uno, el array COMPLETO
24
+ * de milestones (paginación drenada del lado del lambda). Se usa POST en lugar
25
+ * de GET porque la lista puede ser larga y no cabe cómoda en query string.
26
+ *
27
+ * La cota de tamaño (`MILESTONES_BY_DIRECTORY_IDS_MAX_BATCH`) se valida también
28
+ * en el manager para responder 400 explícito si se excede.
29
+ */
30
+ class MilestonesByDirectoryIdsRequest {
31
+ }
32
+ exports.MilestonesByDirectoryIdsRequest = MilestonesByDirectoryIdsRequest;
33
+ __decorate([
34
+ (0, class_validator_1.IsArray)(),
35
+ (0, class_validator_1.ArrayNotEmpty)(),
36
+ (0, class_validator_1.ArrayMaxSize)(exports.MILESTONES_BY_DIRECTORY_IDS_MAX_BATCH),
37
+ (0, class_validator_1.IsString)({ each: true }),
38
+ __metadata("design:type", Array)
39
+ ], MilestonesByDirectoryIdsRequest.prototype, "directoryIds", void 0);
@@ -0,0 +1,10 @@
1
+ import { Milestone } from "./Milestone";
2
+ /**
3
+ * Respuesta de `POST /private/milestones/by-directory-ids`.
4
+ *
5
+ * Mapa directoryId -> array COMPLETO de milestones de ese directorio.
6
+ * Cada directoryId solicitado aparece como clave; si un directorio no tiene
7
+ * milestones, su valor es un array vacío `[]` (la clave NO se omite, para que
8
+ * el consumer pueda distinguir "consultado, sin milestones" de "no consultado").
9
+ */
10
+ export type MilestonesByDirectoryIdsResponse = Record<string, Milestone[]>;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1 +1,4 @@
1
1
  export { MilestonesByEventKeyDateRangeParams } from "./dtos/MilestonesByEventKeyDateRangeParams";
2
+ export { Milestone } from "./dtos/Milestone";
3
+ export { MilestonesByDirectoryIdsRequest, MILESTONES_BY_DIRECTORY_IDS_MAX_BATCH, } from "./dtos/MilestonesByDirectoryIdsRequest";
4
+ export { MilestonesByDirectoryIdsResponse } from "./dtos/MilestonesByDirectoryIdsResponse";
@@ -1,2 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MILESTONES_BY_DIRECTORY_IDS_MAX_BATCH = exports.MilestonesByDirectoryIdsRequest = void 0;
4
+ var MilestonesByDirectoryIdsRequest_1 = require("./dtos/MilestonesByDirectoryIdsRequest");
5
+ Object.defineProperty(exports, "MilestonesByDirectoryIdsRequest", { enumerable: true, get: function () { return MilestonesByDirectoryIdsRequest_1.MilestonesByDirectoryIdsRequest; } });
6
+ Object.defineProperty(exports, "MILESTONES_BY_DIRECTORY_IDS_MAX_BATCH", { enumerable: true, get: function () { return MilestonesByDirectoryIdsRequest_1.MILESTONES_BY_DIRECTORY_IDS_MAX_BATCH; } });
@@ -0,0 +1,27 @@
1
+ import { SelectedProvider } from './SelectedProvider';
2
+ /**
3
+ * Contrato de entrada `messages-business → twilio-connector`.
4
+ *
5
+ * messages-business resuelve el proveedor (plantilla, remitente, `secretRef`)
6
+ * desde el `senderConfig` del `(tenant, channel)` y lo manda ya resuelto en
7
+ * `selectedProvider`. El connector NO resuelve plantillas ni elige proveedor:
8
+ * solo transmite a Twilio y resuelve el secret indicado por `secretRef`.
9
+ *
10
+ * NOTA: `channelType` es `string` (no el enum) a proposito: el connector es un
11
+ * transporte tonto y maneja canales como WHATSAPP que aun no estan en
12
+ * `DeliveryChannelEnum`. El alta de WHATSAPP en el enum aplica al lado *inbound*
13
+ * (productor → messages-business), no a este contrato. Ver docs/cross-team en
14
+ * messages-business.
15
+ */
16
+ export declare class ConnectorSendMessageRequest {
17
+ /** Canal de entrega. Ej: "WHATSAPP", "SMS". */
18
+ channelType: string;
19
+ /** Numero destino en formato E.164. Ej: "+50212345678". */
20
+ destination: string;
21
+ /** Tipo de mensaje de dominio. Ej: "OTP_CODE". Solo para logging/trazabilidad. */
22
+ messageType?: string;
23
+ /** Idioma de la plantilla. Ej: "ES". Solo para logging/trazabilidad. */
24
+ language?: string;
25
+ /** Proveedor ya seleccionado y resuelto por messages-business. */
26
+ selectedProvider: SelectedProvider;
27
+ }
@@ -0,0 +1,62 @@
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.ConnectorSendMessageRequest = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ const SelectedProvider_1 = require("./SelectedProvider");
16
+ /**
17
+ * Contrato de entrada `messages-business → twilio-connector`.
18
+ *
19
+ * messages-business resuelve el proveedor (plantilla, remitente, `secretRef`)
20
+ * desde el `senderConfig` del `(tenant, channel)` y lo manda ya resuelto en
21
+ * `selectedProvider`. El connector NO resuelve plantillas ni elige proveedor:
22
+ * solo transmite a Twilio y resuelve el secret indicado por `secretRef`.
23
+ *
24
+ * NOTA: `channelType` es `string` (no el enum) a proposito: el connector es un
25
+ * transporte tonto y maneja canales como WHATSAPP que aun no estan en
26
+ * `DeliveryChannelEnum`. El alta de WHATSAPP en el enum aplica al lado *inbound*
27
+ * (productor → messages-business), no a este contrato. Ver docs/cross-team en
28
+ * messages-business.
29
+ */
30
+ class ConnectorSendMessageRequest {
31
+ }
32
+ exports.ConnectorSendMessageRequest = ConnectorSendMessageRequest;
33
+ __decorate([
34
+ (0, class_transformer_1.Expose)(),
35
+ (0, class_validator_1.IsString)(),
36
+ (0, class_validator_1.IsNotEmpty)(),
37
+ __metadata("design:type", String)
38
+ ], ConnectorSendMessageRequest.prototype, "channelType", void 0);
39
+ __decorate([
40
+ (0, class_transformer_1.Expose)(),
41
+ (0, class_validator_1.IsString)(),
42
+ (0, class_validator_1.IsNotEmpty)(),
43
+ __metadata("design:type", String)
44
+ ], ConnectorSendMessageRequest.prototype, "destination", void 0);
45
+ __decorate([
46
+ (0, class_transformer_1.Expose)(),
47
+ (0, class_validator_1.IsOptional)(),
48
+ (0, class_validator_1.IsString)(),
49
+ __metadata("design:type", String)
50
+ ], ConnectorSendMessageRequest.prototype, "messageType", void 0);
51
+ __decorate([
52
+ (0, class_transformer_1.Expose)(),
53
+ (0, class_validator_1.IsOptional)(),
54
+ (0, class_validator_1.IsString)(),
55
+ __metadata("design:type", String)
56
+ ], ConnectorSendMessageRequest.prototype, "language", void 0);
57
+ __decorate([
58
+ (0, class_transformer_1.Expose)(),
59
+ (0, class_validator_1.ValidateNested)(),
60
+ (0, class_transformer_1.Type)(() => SelectedProvider_1.SelectedProvider),
61
+ __metadata("design:type", SelectedProvider_1.SelectedProvider)
62
+ ], ConnectorSendMessageRequest.prototype, "selectedProvider", void 0);
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Respuesta del twilio-connector tras delegar el envio a Twilio.
3
+ */
4
+ export declare class ConnectorSendMessageResponse {
5
+ /** SID del mensaje generado por Twilio. */
6
+ providerMessageId: string;
7
+ /** Estado reportado por Twilio al momento del envio (queued, sent, ...). */
8
+ status: string;
9
+ }
@@ -0,0 +1,30 @@
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.ConnectorSendMessageResponse = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ /**
16
+ * Respuesta del twilio-connector tras delegar el envio a Twilio.
17
+ */
18
+ class ConnectorSendMessageResponse {
19
+ }
20
+ exports.ConnectorSendMessageResponse = ConnectorSendMessageResponse;
21
+ __decorate([
22
+ (0, class_transformer_1.Expose)(),
23
+ (0, class_validator_1.IsString)(),
24
+ __metadata("design:type", String)
25
+ ], ConnectorSendMessageResponse.prototype, "providerMessageId", void 0);
26
+ __decorate([
27
+ (0, class_transformer_1.Expose)(),
28
+ (0, class_validator_1.IsString)(),
29
+ __metadata("design:type", String)
30
+ ], ConnectorSendMessageResponse.prototype, "status", void 0);
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Proveedor ya resuelto por messages-business desde el `senderConfig` del
3
+ * `(tenant, channel)`. El twilio-connector es transporte tonto: solo transmite
4
+ * estos valores a Twilio. Los nombres son genericos para no acoplar el contrato
5
+ * al vocabulario del proveedor.
6
+ */
7
+ export declare class SelectedProvider {
8
+ /** Plantilla del proveedor ya resuelta. Para Twilio se traduce a `contentSid` (HX...). */
9
+ templateId: string;
10
+ /** Remitente ya resuelto. Para Twilio = Messaging Service SID (MG...) o numero `from`. */
11
+ senderId: string;
12
+ /** Variables de la plantilla ya resueltas, keyeadas por slot posicional. Ej: { "1": "1234" }. */
13
+ contentVariables?: Record<string, string>;
14
+ /**
15
+ * Referencia (nombre/ARN) al secret de Secrets Manager con las credenciales
16
+ * de la cuenta de Twilio de este `(tenant, channel)`. Ej: "twilio/FIADO/credentials".
17
+ * El connector resuelve el secret real con esta referencia justo antes de enviar.
18
+ * Opcional: si se omite, el connector usa su secret por defecto (TWILIO_SECRET_NAME).
19
+ */
20
+ secretRef?: string;
21
+ }
@@ -0,0 +1,47 @@
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.SelectedProvider = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ /**
16
+ * Proveedor ya resuelto por messages-business desde el `senderConfig` del
17
+ * `(tenant, channel)`. El twilio-connector es transporte tonto: solo transmite
18
+ * estos valores a Twilio. Los nombres son genericos para no acoplar el contrato
19
+ * al vocabulario del proveedor.
20
+ */
21
+ class SelectedProvider {
22
+ }
23
+ exports.SelectedProvider = SelectedProvider;
24
+ __decorate([
25
+ (0, class_transformer_1.Expose)(),
26
+ (0, class_validator_1.IsString)(),
27
+ (0, class_validator_1.IsNotEmpty)(),
28
+ __metadata("design:type", String)
29
+ ], SelectedProvider.prototype, "templateId", void 0);
30
+ __decorate([
31
+ (0, class_transformer_1.Expose)(),
32
+ (0, class_validator_1.IsString)(),
33
+ (0, class_validator_1.IsNotEmpty)(),
34
+ __metadata("design:type", String)
35
+ ], SelectedProvider.prototype, "senderId", void 0);
36
+ __decorate([
37
+ (0, class_transformer_1.Expose)(),
38
+ (0, class_validator_1.IsOptional)(),
39
+ (0, class_validator_1.IsObject)(),
40
+ __metadata("design:type", Object)
41
+ ], SelectedProvider.prototype, "contentVariables", void 0);
42
+ __decorate([
43
+ (0, class_transformer_1.Expose)(),
44
+ (0, class_validator_1.IsOptional)(),
45
+ (0, class_validator_1.IsString)(),
46
+ __metadata("design:type", String)
47
+ ], SelectedProvider.prototype, "secretRef", void 0);
@@ -0,0 +1,3 @@
1
+ export * from './dtos/SelectedProvider';
2
+ export * from './dtos/ConnectorSendMessageRequest';
3
+ export * from './dtos/ConnectorSendMessageResponse';
@@ -0,0 +1,19 @@
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("./dtos/SelectedProvider"), exports);
18
+ __exportStar(require("./dtos/ConnectorSendMessageRequest"), exports);
19
+ __exportStar(require("./dtos/ConnectorSendMessageResponse"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.69.0",
3
+ "version": "3.70.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
package/src/index.ts CHANGED
@@ -74,6 +74,7 @@ export * as CirculoCredito from './circuloCredito';
74
74
  export * as MilestoneBusiness from './milestone-business';
75
75
  export * as Mdm from './mdm';
76
76
  export * as MessagesConnector from './messagesConnector';
77
+ export * as TwilioConnector from './twilioConnector';
77
78
  export * as CognitoBackofficeConnector from './cognitoBackofficeConnector';
78
79
  // PlatformRbac: módulo del lambda platform-rbac-business (Fase 0 SureKeep).
79
80
  // Contiene Permission enum + AuthContext + RoleAssignmentInfo + PermissionScope +
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Forma completa de un Milestone tal como lo persiste y devuelve el lambda
3
+ * `milestone-business`. Es la representación canónica del item de la tabla DDB
4
+ * `Milestones` expuesta a consumers server-to-server (api-invoker).
5
+ *
6
+ * `value` es metadata libre asociada al evento (objeto de forma variable).
7
+ * `createdAt` / `updatedAt` son epoch ms (Dynamoose `timestamps: true`).
8
+ */
9
+ export interface Milestone {
10
+ /** Identificador único del milestone. Determinístico: `${directoryId}#${eventKey}`. */
11
+ id: string;
12
+ /** directoryId del usuario al que pertenece el evento. */
13
+ directoryId: string;
14
+ /** Fecha en la que ocurrió el evento (epoch en milisegundos). */
15
+ eventDate: number;
16
+ /** Llave que identifica el tipo de evento/milestone. */
17
+ eventKey: string;
18
+ /** Metadata libre asociada al milestone (objeto con forma variable). */
19
+ value?: Record<string, unknown>;
20
+ /** Epoch ms de creación (Dynamoose timestamps). */
21
+ createdAt?: number;
22
+ /** Epoch ms de última actualización (Dynamoose timestamps). */
23
+ updatedAt?: number;
24
+ }
@@ -0,0 +1,26 @@
1
+ import { ArrayMaxSize, ArrayNotEmpty, IsArray, IsString } from "class-validator";
2
+
3
+ /**
4
+ * Cota máxima de directoryIds aceptados por request en el endpoint batch
5
+ * `privateListMilestonesByDirectoryIds`. Protege contra fan-out excesivo
6
+ * (cada directoryId dispara un query GSI con drenado de paginación).
7
+ */
8
+ export const MILESTONES_BY_DIRECTORY_IDS_MAX_BATCH = 100;
9
+
10
+ /**
11
+ * Body de `POST /private/milestones/by-directory-ids`.
12
+ *
13
+ * Recibe una lista de directoryIds y devuelve, por cada uno, el array COMPLETO
14
+ * de milestones (paginación drenada del lado del lambda). Se usa POST en lugar
15
+ * de GET porque la lista puede ser larga y no cabe cómoda en query string.
16
+ *
17
+ * La cota de tamaño (`MILESTONES_BY_DIRECTORY_IDS_MAX_BATCH`) se valida también
18
+ * en el manager para responder 400 explícito si se excede.
19
+ */
20
+ export class MilestonesByDirectoryIdsRequest {
21
+ @IsArray()
22
+ @ArrayNotEmpty()
23
+ @ArrayMaxSize(MILESTONES_BY_DIRECTORY_IDS_MAX_BATCH)
24
+ @IsString({ each: true })
25
+ directoryIds!: string[];
26
+ }
@@ -0,0 +1,11 @@
1
+ import { Milestone } from "./Milestone";
2
+
3
+ /**
4
+ * Respuesta de `POST /private/milestones/by-directory-ids`.
5
+ *
6
+ * Mapa directoryId -> array COMPLETO de milestones de ese directorio.
7
+ * Cada directoryId solicitado aparece como clave; si un directorio no tiene
8
+ * milestones, su valor es un array vacío `[]` (la clave NO se omite, para que
9
+ * el consumer pueda distinguir "consultado, sin milestones" de "no consultado").
10
+ */
11
+ export type MilestonesByDirectoryIdsResponse = Record<string, Milestone[]>;
@@ -1,2 +1,8 @@
1
1
  // dtos
2
2
  export { MilestonesByEventKeyDateRangeParams } from "./dtos/MilestonesByEventKeyDateRangeParams";
3
+ export { Milestone } from "./dtos/Milestone";
4
+ export {
5
+ MilestonesByDirectoryIdsRequest,
6
+ MILESTONES_BY_DIRECTORY_IDS_MAX_BATCH,
7
+ } from "./dtos/MilestonesByDirectoryIdsRequest";
8
+ export { MilestonesByDirectoryIdsResponse } from "./dtos/MilestonesByDirectoryIdsResponse";
@@ -0,0 +1,34 @@
1
+ import { Expose, Type } from 'class-transformer';
2
+ import { IsNotEmpty, IsOptional, IsString, ValidateNested } from 'class-validator';
3
+ import { SelectedProvider } from './SelectedProvider';
4
+
5
+ /**
6
+ * Contrato de entrada `messages-business → twilio-connector`.
7
+ *
8
+ * messages-business resuelve el proveedor (plantilla, remitente, `secretRef`)
9
+ * desde el `senderConfig` del `(tenant, channel)` y lo manda ya resuelto en
10
+ * `selectedProvider`. El connector NO resuelve plantillas ni elige proveedor:
11
+ * solo transmite a Twilio y resuelve el secret indicado por `secretRef`.
12
+ *
13
+ * NOTA: `channelType` es `string` (no el enum) a proposito: el connector es un
14
+ * transporte tonto y maneja canales como WHATSAPP que aun no estan en
15
+ * `DeliveryChannelEnum`. El alta de WHATSAPP en el enum aplica al lado *inbound*
16
+ * (productor → messages-business), no a este contrato. Ver docs/cross-team en
17
+ * messages-business.
18
+ */
19
+ export class ConnectorSendMessageRequest {
20
+ /** Canal de entrega. Ej: "WHATSAPP", "SMS". */
21
+ @Expose() @IsString() @IsNotEmpty() channelType!: string;
22
+
23
+ /** Numero destino en formato E.164. Ej: "+50212345678". */
24
+ @Expose() @IsString() @IsNotEmpty() destination!: string;
25
+
26
+ /** Tipo de mensaje de dominio. Ej: "OTP_CODE". Solo para logging/trazabilidad. */
27
+ @Expose() @IsOptional() @IsString() messageType?: string;
28
+
29
+ /** Idioma de la plantilla. Ej: "ES". Solo para logging/trazabilidad. */
30
+ @Expose() @IsOptional() @IsString() language?: string;
31
+
32
+ /** Proveedor ya seleccionado y resuelto por messages-business. */
33
+ @Expose() @ValidateNested() @Type(() => SelectedProvider) selectedProvider!: SelectedProvider;
34
+ }
@@ -0,0 +1,13 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsString } from 'class-validator';
3
+
4
+ /**
5
+ * Respuesta del twilio-connector tras delegar el envio a Twilio.
6
+ */
7
+ export class ConnectorSendMessageResponse {
8
+ /** SID del mensaje generado por Twilio. */
9
+ @Expose() @IsString() providerMessageId!: string;
10
+
11
+ /** Estado reportado por Twilio al momento del envio (queued, sent, ...). */
12
+ @Expose() @IsString() status!: string;
13
+ }
@@ -0,0 +1,27 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsNotEmpty, IsObject, IsOptional, IsString } from 'class-validator';
3
+
4
+ /**
5
+ * Proveedor ya resuelto por messages-business desde el `senderConfig` del
6
+ * `(tenant, channel)`. El twilio-connector es transporte tonto: solo transmite
7
+ * estos valores a Twilio. Los nombres son genericos para no acoplar el contrato
8
+ * al vocabulario del proveedor.
9
+ */
10
+ export class SelectedProvider {
11
+ /** Plantilla del proveedor ya resuelta. Para Twilio se traduce a `contentSid` (HX...). */
12
+ @Expose() @IsString() @IsNotEmpty() templateId!: string;
13
+
14
+ /** Remitente ya resuelto. Para Twilio = Messaging Service SID (MG...) o numero `from`. */
15
+ @Expose() @IsString() @IsNotEmpty() senderId!: string;
16
+
17
+ /** Variables de la plantilla ya resueltas, keyeadas por slot posicional. Ej: { "1": "1234" }. */
18
+ @Expose() @IsOptional() @IsObject() contentVariables?: Record<string, string>;
19
+
20
+ /**
21
+ * Referencia (nombre/ARN) al secret de Secrets Manager con las credenciales
22
+ * de la cuenta de Twilio de este `(tenant, channel)`. Ej: "twilio/FIADO/credentials".
23
+ * El connector resuelve el secret real con esta referencia justo antes de enviar.
24
+ * Opcional: si se omite, el connector usa su secret por defecto (TWILIO_SECRET_NAME).
25
+ */
26
+ @Expose() @IsOptional() @IsString() secretRef?: string;
27
+ }
@@ -0,0 +1,3 @@
1
+ export * from './dtos/SelectedProvider';
2
+ export * from './dtos/ConnectorSendMessageRequest';
3
+ export * from './dtos/ConnectorSendMessageResponse';