@fiado/type-kit 3.410.0 → 3.412.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/loanCredit/dtos/listMessagingCandidates.test.ts +97 -0
- package/_test_/unit/messagesConnector/NotificationQueueMessageRequestV2.test.ts +49 -0
- package/_test_/unit/messagesConnector/TemplateMessageUpdateRequest.test.ts +51 -0
- package/_test_/unit/messagesConnector/messagingEnums.test.ts +37 -0
- package/bin/loanCredit/constants/MessagingCandidateLimits.d.ts +4 -0
- package/bin/loanCredit/constants/MessagingCandidateLimits.js +7 -0
- package/bin/loanCredit/constants/StoreDayPattern.d.ts +3 -0
- package/bin/loanCredit/constants/StoreDayPattern.js +6 -0
- package/bin/loanCredit/dtos/MessagingCandidateItem.d.ts +31 -0
- package/bin/loanCredit/dtos/MessagingCandidateItem.js +10 -0
- package/bin/loanCredit/dtos/requests/ListMessagingCandidatesRequest.d.ts +11 -0
- package/bin/loanCredit/dtos/requests/ListMessagingCandidatesRequest.js +47 -0
- package/bin/loanCredit/dtos/responses/ListMessagingCandidatesResponse.d.ts +7 -0
- package/bin/loanCredit/dtos/responses/ListMessagingCandidatesResponse.js +7 -0
- package/bin/loanCredit/index.d.ts +6 -0
- package/bin/loanCredit/index.js +10 -1
- package/bin/messagesConnector/dtos/NotificationQueueMessageRequestV2.d.ts +5 -0
- package/bin/messagesConnector/dtos/NotificationQueueMessageRequestV2.js +13 -0
- package/bin/messagesConnector/dtos/TemplateMessageCreateRequest.d.ts +12 -5
- package/bin/messagesConnector/dtos/TemplateMessageCreateRequest.js +24 -4
- package/bin/messagesConnector/dtos/TemplateMessageListFiltersRequest.d.ts +4 -2
- package/bin/messagesConnector/dtos/TemplateMessageListFiltersRequest.js +8 -2
- package/bin/messagesConnector/dtos/TemplateMessageResponse.d.ts +9 -2
- package/bin/messagesConnector/dtos/TemplateMessageResponse.js +13 -0
- package/bin/messagesConnector/dtos/TemplateMessageUpdateRequest.d.ts +5 -1
- package/bin/messagesConnector/dtos/TemplateMessageUpdateRequest.js +14 -1
- package/bin/messagesConnector/enums/DeliveryChannelExtendedEnum.d.ts +3 -1
- package/bin/messagesConnector/enums/DeliveryChannelExtendedEnum.js +2 -0
- package/bin/messagesConnector/enums/MessagingSlotEnum.d.ts +9 -0
- package/bin/messagesConnector/enums/MessagingSlotEnum.js +13 -0
- package/bin/messagesConnector/enums/NotificationOriginEnum.d.ts +9 -0
- package/bin/messagesConnector/enums/NotificationOriginEnum.js +13 -0
- package/bin/messagesConnector/index.d.ts +2 -0
- package/bin/messagesConnector/index.js +2 -0
- package/bin/messaging/dtos/MessageDeliveryRequest.d.ts +5 -0
- package/bin/messaging/dtos/MessageDeliveryRequest.js +6 -0
- package/bin/twilioConnector/dtos/SelectedProvider.d.ts +1 -1
- package/package.json +1 -1
- package/src/loanCredit/constants/MessagingCandidateLimits.ts +5 -0
- package/src/loanCredit/constants/StoreDayPattern.ts +4 -0
- package/src/loanCredit/dtos/MessagingCandidateItem.ts +40 -0
- package/src/loanCredit/dtos/requests/ListMessagingCandidatesRequest.ts +33 -0
- package/src/loanCredit/dtos/responses/ListMessagingCandidatesResponse.ts +9 -0
- package/src/loanCredit/index.ts +10 -0
- package/src/messagesConnector/dtos/NotificationQueueMessageRequestV2.ts +13 -0
- package/src/messagesConnector/dtos/TemplateMessageCreateRequest.ts +27 -7
- package/src/messagesConnector/dtos/TemplateMessageListFiltersRequest.ts +9 -3
- package/src/messagesConnector/dtos/TemplateMessageResponse.ts +15 -2
- package/src/messagesConnector/dtos/TemplateMessageUpdateRequest.ts +15 -2
- package/src/messagesConnector/enums/DeliveryChannelExtendedEnum.ts +2 -0
- package/src/messagesConnector/enums/MessagingSlotEnum.ts +9 -0
- package/src/messagesConnector/enums/NotificationOriginEnum.ts +9 -0
- package/src/messagesConnector/index.ts +2 -0
- package/src/messaging/dtos/MessageDeliveryRequest.ts +10 -1
- package/src/twilioConnector/dtos/SelectedProvider.ts +1 -1
|
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.TemplateMessageResponse = void 0;
|
|
13
13
|
const class_transformer_1 = require("class-transformer");
|
|
14
14
|
const messaging_1 = require("../../messaging");
|
|
15
|
+
const DeliveryChannelExtendedEnum_1 = require("../enums/DeliveryChannelExtendedEnum");
|
|
15
16
|
/**
|
|
16
17
|
* Forma del template retornada por GET /templates/{id}, POST, PUT.
|
|
17
18
|
* El `id` es opaco (base64url de la PK compuesta) y el cliente lo trata como
|
|
@@ -29,6 +30,10 @@ __decorate([
|
|
|
29
30
|
(0, class_transformer_1.Expose)(),
|
|
30
31
|
__metadata("design:type", String)
|
|
31
32
|
], TemplateMessageResponse.prototype, "pk", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
(0, class_transformer_1.Expose)(),
|
|
35
|
+
__metadata("design:type", String)
|
|
36
|
+
], TemplateMessageResponse.prototype, "tenantId", void 0);
|
|
32
37
|
__decorate([
|
|
33
38
|
(0, class_transformer_1.Expose)(),
|
|
34
39
|
__metadata("design:type", String)
|
|
@@ -61,6 +66,14 @@ __decorate([
|
|
|
61
66
|
(0, class_transformer_1.Expose)(),
|
|
62
67
|
__metadata("design:type", String)
|
|
63
68
|
], TemplateMessageResponse.prototype, "subject", void 0);
|
|
69
|
+
__decorate([
|
|
70
|
+
(0, class_transformer_1.Expose)(),
|
|
71
|
+
__metadata("design:type", String)
|
|
72
|
+
], TemplateMessageResponse.prototype, "providerTemplateId", void 0);
|
|
73
|
+
__decorate([
|
|
74
|
+
(0, class_transformer_1.Expose)(),
|
|
75
|
+
__metadata("design:type", Array)
|
|
76
|
+
], TemplateMessageResponse.prototype, "slotVariables", void 0);
|
|
64
77
|
__decorate([
|
|
65
78
|
(0, class_transformer_1.Expose)(),
|
|
66
79
|
__metadata("design:type", Number)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ContentTypeEnum } from '../../messaging';
|
|
2
2
|
/**
|
|
3
3
|
* Body para PUT /templates/{id} (backoffice). Solo campos no-key son mutables.
|
|
4
|
-
* Los componentes del PK (messageType, channelType, language, country) viven
|
|
4
|
+
* Los componentes del PK (tenantId, messageType, channelType, language, country) viven
|
|
5
5
|
* en el `{id}` opaco del path y NO se aceptan en el body (PK structurally
|
|
6
6
|
* immutable - ver spec seccion "Mutabilidad PK").
|
|
7
7
|
*
|
|
@@ -13,4 +13,8 @@ export declare class TemplateMessageUpdateRequest {
|
|
|
13
13
|
template?: string;
|
|
14
14
|
contentType?: ContentTypeEnum;
|
|
15
15
|
subject?: string;
|
|
16
|
+
/** contentSid HX de Twilio. Solo en plantillas de WhatsApp. */
|
|
17
|
+
providerTemplateId?: string;
|
|
18
|
+
/** Que variable va en cada slot posicional de Twilio. Solo en plantillas de WhatsApp. */
|
|
19
|
+
slotVariables?: string[];
|
|
16
20
|
}
|
|
@@ -16,7 +16,7 @@ const messaging_1 = require("../../messaging");
|
|
|
16
16
|
const IsTemplatePlaceholders_1 = require("../validators/IsTemplatePlaceholders");
|
|
17
17
|
/**
|
|
18
18
|
* Body para PUT /templates/{id} (backoffice). Solo campos no-key son mutables.
|
|
19
|
-
* Los componentes del PK (messageType, channelType, language, country) viven
|
|
19
|
+
* Los componentes del PK (tenantId, messageType, channelType, language, country) viven
|
|
20
20
|
* en el `{id}` opaco del path y NO se aceptan en el body (PK structurally
|
|
21
21
|
* immutable - ver spec seccion "Mutabilidad PK").
|
|
22
22
|
*
|
|
@@ -54,3 +54,16 @@ __decorate([
|
|
|
54
54
|
(0, class_validator_1.Validate)(IsTemplatePlaceholders_1.IsTemplatePlaceholders),
|
|
55
55
|
__metadata("design:type", String)
|
|
56
56
|
], TemplateMessageUpdateRequest.prototype, "subject", void 0);
|
|
57
|
+
__decorate([
|
|
58
|
+
(0, class_transformer_1.Expose)(),
|
|
59
|
+
(0, class_validator_1.IsOptional)(),
|
|
60
|
+
(0, class_validator_1.IsString)(),
|
|
61
|
+
__metadata("design:type", String)
|
|
62
|
+
], TemplateMessageUpdateRequest.prototype, "providerTemplateId", void 0);
|
|
63
|
+
__decorate([
|
|
64
|
+
(0, class_transformer_1.Expose)(),
|
|
65
|
+
(0, class_validator_1.IsOptional)(),
|
|
66
|
+
(0, class_validator_1.IsArray)(),
|
|
67
|
+
(0, class_validator_1.IsString)({ each: true }),
|
|
68
|
+
__metadata("design:type", Array)
|
|
69
|
+
], TemplateMessageUpdateRequest.prototype, "slotVariables", void 0);
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export declare enum DeliveryChannelExtendedEnum {
|
|
2
2
|
SMS = "SMS",
|
|
3
3
|
MAIL = "MAIL",
|
|
4
|
-
PUSH_NOTIFICATION = "PUSH_NOTIFICATION"
|
|
4
|
+
PUSH_NOTIFICATION = "PUSH_NOTIFICATION",
|
|
5
|
+
/** Aviso en la pantalla del equipo financiado. Se entrega por IMEI, no por teléfono ni correo. */
|
|
6
|
+
MDM = "MDM"
|
|
5
7
|
}
|
|
@@ -6,4 +6,6 @@ var DeliveryChannelExtendedEnum;
|
|
|
6
6
|
DeliveryChannelExtendedEnum["SMS"] = "SMS";
|
|
7
7
|
DeliveryChannelExtendedEnum["MAIL"] = "MAIL";
|
|
8
8
|
DeliveryChannelExtendedEnum["PUSH_NOTIFICATION"] = "PUSH_NOTIFICATION";
|
|
9
|
+
/** Aviso en la pantalla del equipo financiado. Se entrega por IMEI, no por teléfono ni correo. */
|
|
10
|
+
DeliveryChannelExtendedEnum["MDM"] = "MDM";
|
|
9
11
|
})(DeliveryChannelExtendedEnum || (exports.DeliveryChannelExtendedEnum = DeliveryChannelExtendedEnum = {}));
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Momento del día en que corre una agenda de mensajería.
|
|
3
|
+
* Es el nombre del momento, nunca la hora: la hora vive en la agenda de cada tenant y cambia sin desplegar.
|
|
4
|
+
*/
|
|
5
|
+
export declare enum MessagingSlotEnum {
|
|
6
|
+
MORNING = "MORNING",
|
|
7
|
+
AFTERNOON = "AFTERNOON",
|
|
8
|
+
EVENING = "EVENING"
|
|
9
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MessagingSlotEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Momento del día en que corre una agenda de mensajería.
|
|
6
|
+
* Es el nombre del momento, nunca la hora: la hora vive en la agenda de cada tenant y cambia sin desplegar.
|
|
7
|
+
*/
|
|
8
|
+
var MessagingSlotEnum;
|
|
9
|
+
(function (MessagingSlotEnum) {
|
|
10
|
+
MessagingSlotEnum["MORNING"] = "MORNING";
|
|
11
|
+
MessagingSlotEnum["AFTERNOON"] = "AFTERNOON";
|
|
12
|
+
MessagingSlotEnum["EVENING"] = "EVENING";
|
|
13
|
+
})(MessagingSlotEnum || (exports.MessagingSlotEnum = MessagingSlotEnum = {}));
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Quien disparo la notificacion. Su ausencia significa EVENT. */
|
|
2
|
+
export declare enum NotificationOriginEnum {
|
|
3
|
+
/** Un admin lo disparo a mano desde el backoffice. */
|
|
4
|
+
MANUAL = "MANUAL",
|
|
5
|
+
/** Envio de prueba del editor de plantillas, a un solo destinatario. */
|
|
6
|
+
TEST = "TEST",
|
|
7
|
+
/** Lo publico un productor del ciclo de vida. */
|
|
8
|
+
EVENT = "EVENT"
|
|
9
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NotificationOriginEnum = void 0;
|
|
4
|
+
/** Quien disparo la notificacion. Su ausencia significa EVENT. */
|
|
5
|
+
var NotificationOriginEnum;
|
|
6
|
+
(function (NotificationOriginEnum) {
|
|
7
|
+
/** Un admin lo disparo a mano desde el backoffice. */
|
|
8
|
+
NotificationOriginEnum["MANUAL"] = "MANUAL";
|
|
9
|
+
/** Envio de prueba del editor de plantillas, a un solo destinatario. */
|
|
10
|
+
NotificationOriginEnum["TEST"] = "TEST";
|
|
11
|
+
/** Lo publico un productor del ciclo de vida. */
|
|
12
|
+
NotificationOriginEnum["EVENT"] = "EVENT";
|
|
13
|
+
})(NotificationOriginEnum || (exports.NotificationOriginEnum = NotificationOriginEnum = {}));
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export * from './enums/DeliveryChannelExtendedEnum';
|
|
2
|
+
export * from './enums/NotificationOriginEnum';
|
|
3
|
+
export * from './enums/MessagingSlotEnum';
|
|
2
4
|
export * from './validators/IsStringValueRecord';
|
|
3
5
|
export * from './dtos/NotificationQueueMessageRequestV2';
|
|
4
6
|
export * from './dtos/SendMessageRequest';
|
|
@@ -15,6 +15,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./enums/DeliveryChannelExtendedEnum"), exports);
|
|
18
|
+
__exportStar(require("./enums/NotificationOriginEnum"), exports);
|
|
19
|
+
__exportStar(require("./enums/MessagingSlotEnum"), exports);
|
|
18
20
|
__exportStar(require("./validators/IsStringValueRecord"), exports);
|
|
19
21
|
__exportStar(require("./dtos/NotificationQueueMessageRequestV2"), exports);
|
|
20
22
|
__exportStar(require("./dtos/SendMessageRequest"), exports);
|
|
@@ -6,4 +6,9 @@ export declare class MessageDeliveryRequest {
|
|
|
6
6
|
subject: string;
|
|
7
7
|
message: string;
|
|
8
8
|
contentType: ContentTypeEnum;
|
|
9
|
+
/**
|
|
10
|
+
* Remitente ya resuelto: direccion From de SES para MAIL, sender ID de SNS para SMS.
|
|
11
|
+
* Si se omite, el connector usa su remitente por defecto.
|
|
12
|
+
*/
|
|
13
|
+
sender?: string;
|
|
9
14
|
}
|
|
@@ -45,3 +45,9 @@ __decorate([
|
|
|
45
45
|
(0, class_validator_1.IsEnum)(ContentTypeEnum_1.ContentTypeEnum),
|
|
46
46
|
__metadata("design:type", String)
|
|
47
47
|
], MessageDeliveryRequest.prototype, "contentType", void 0);
|
|
48
|
+
__decorate([
|
|
49
|
+
(0, class_transformer_1.Expose)(),
|
|
50
|
+
(0, class_validator_1.IsOptional)(),
|
|
51
|
+
(0, class_validator_1.IsString)(),
|
|
52
|
+
__metadata("design:type", String)
|
|
53
|
+
], MessageDeliveryRequest.prototype, "sender", void 0);
|
|
@@ -13,7 +13,7 @@ export declare class SelectedProvider {
|
|
|
13
13
|
contentVariables?: Record<string, string>;
|
|
14
14
|
/**
|
|
15
15
|
* Referencia (nombre/ARN) al secret de Secrets Manager con las credenciales
|
|
16
|
-
* de la cuenta de Twilio de este `(tenant, channel)`. Ej: "twilio
|
|
16
|
+
* de la cuenta de Twilio de este `(tenant, channel)`. Ej: "twilio-<tenant>-credentials".
|
|
17
17
|
* El connector resuelve el secret real con esta referencia justo antes de enviar.
|
|
18
18
|
* Opcional: si se omite, el connector usa su secret por defecto (TWILIO_SECRET_NAME).
|
|
19
19
|
*/
|
package/package.json
CHANGED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { DeliveryChannelExtendedEnum, MessagingSlotEnum } from '../../messagesConnector/index';
|
|
2
|
+
import { MdmProviderEnum } from '../../mdm/enums/MdmProviderEnum';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Un candidato a recibir un mensaje: a quién, qué momento le toca y por dónde sale.
|
|
6
|
+
* Mensajería no resuelve nada de dominio con este ítem: solo elige la plantilla y entrega.
|
|
7
|
+
*/
|
|
8
|
+
export class MessagingCandidateItem {
|
|
9
|
+
/** El destinatario es la PERSONA. Siempre viaja. */
|
|
10
|
+
personId!: string;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* El crédito es el motivo del mensaje, no a quién se le manda.
|
|
14
|
+
* Va vacío en los avisos que no cuelgan de un crédito.
|
|
15
|
+
*/
|
|
16
|
+
creditId?: string;
|
|
17
|
+
|
|
18
|
+
/** Momento del catálogo de plantillas — parte de la PK de `TemplateMessages_GT`. */
|
|
19
|
+
messageType!: string;
|
|
20
|
+
|
|
21
|
+
/** Momento de la corrida que produjo este candidato. */
|
|
22
|
+
slot!: MessagingSlotEnum;
|
|
23
|
+
|
|
24
|
+
channel!: DeliveryChannelExtendedEnum;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Variables del texto YA RESUELTAS. Mensajería no sabe qué es un crédito:
|
|
28
|
+
* si aquí viajara un id para que ella lo resuelva, cada mensaje sería otra llamada entre lambdas.
|
|
29
|
+
*/
|
|
30
|
+
variables!: Record<string, string>;
|
|
31
|
+
|
|
32
|
+
/** Referencia de rastreo del candidato; el consumidor la usa para deduplicar. */
|
|
33
|
+
reference!: string;
|
|
34
|
+
|
|
35
|
+
/** IMEI del equipo. Solo viaja cuando `channel` es `MDM`. */
|
|
36
|
+
imei?: string;
|
|
37
|
+
|
|
38
|
+
/** Proveedor MDM del equipo. Solo viaja cuando `channel` es `MDM`. */
|
|
39
|
+
mdmProvider?: MdmProviderEnum;
|
|
40
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Expose, Type } from 'class-transformer';
|
|
2
|
+
import { IsEnum, IsInt, IsNotEmpty, IsOptional, IsString, Matches, Max, Min } from 'class-validator';
|
|
3
|
+
import { MessagingSlotEnum } from '../../../messagesConnector/index';
|
|
4
|
+
import { MESSAGING_CANDIDATES_MAX_LIMIT } from '../../constants/MessagingCandidateLimits';
|
|
5
|
+
import { STORE_DAY_MESSAGE, STORE_DAY_PATTERN } from '../../constants/StoreDayPattern';
|
|
6
|
+
|
|
7
|
+
/** Body de `POST /private/messaging/candidates` (loan-credit-business). Pide una página de candidatos. */
|
|
8
|
+
export class ListMessagingCandidatesRequest {
|
|
9
|
+
/** Qué horario disparó la corrida. El nombre del momento, nunca la hora. */
|
|
10
|
+
@Expose()
|
|
11
|
+
@IsEnum(MessagingSlotEnum)
|
|
12
|
+
slot!: MessagingSlotEnum;
|
|
13
|
+
|
|
14
|
+
/** Día de tienda de la corrida. Lo manda el caller: el cupo no puede salir del reloj del lambda. */
|
|
15
|
+
@Expose()
|
|
16
|
+
@Matches(STORE_DAY_PATTERN, { message: STORE_DAY_MESSAGE })
|
|
17
|
+
runDate!: string;
|
|
18
|
+
|
|
19
|
+
/** Cursor opaco de la página anterior. Ausente en la primera página. */
|
|
20
|
+
@Expose()
|
|
21
|
+
@IsOptional()
|
|
22
|
+
@IsString()
|
|
23
|
+
@IsNotEmpty()
|
|
24
|
+
cursor?: string;
|
|
25
|
+
|
|
26
|
+
@Expose()
|
|
27
|
+
@IsOptional()
|
|
28
|
+
@Type(() => Number)
|
|
29
|
+
@IsInt()
|
|
30
|
+
@Min(1)
|
|
31
|
+
@Max(MESSAGING_CANDIDATES_MAX_LIMIT)
|
|
32
|
+
limit?: number;
|
|
33
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { MessagingCandidateItem } from '../MessagingCandidateItem';
|
|
2
|
+
|
|
3
|
+
/** Response de `POST /private/messaging/candidates`. Una página de candidatos. */
|
|
4
|
+
export class ListMessagingCandidatesResponse {
|
|
5
|
+
items!: MessagingCandidateItem[];
|
|
6
|
+
|
|
7
|
+
/** Cursor de la siguiente página. `null` significa que ya no queda nadie — nunca `undefined`. */
|
|
8
|
+
nextCursor!: string | null;
|
|
9
|
+
}
|
package/src/loanCredit/index.ts
CHANGED
|
@@ -98,3 +98,13 @@ export * from './dtos/responses/LoanDeviceReleaseResult';
|
|
|
98
98
|
export * from './dtos/responses/LoanDeviceReleaseResponse';
|
|
99
99
|
|
|
100
100
|
export * from './validators/IsFutureIso8601DateTime';
|
|
101
|
+
|
|
102
|
+
// Candidatos de mensajería — contrato de `POST /private/messaging/candidates`
|
|
103
|
+
// Re-export del enum canónico del momento (owner: messagesConnector — un solo origen de verdad).
|
|
104
|
+
export { MessagingSlotEnum } from '../messagesConnector/enums/MessagingSlotEnum';
|
|
105
|
+
export * from './constants/MessagingCandidateLimits';
|
|
106
|
+
export * from './constants/StoreDayPattern';
|
|
107
|
+
export * from './dtos/MessagingCandidateItem';
|
|
108
|
+
export * from './dtos/requests/ListMessagingCandidatesRequest';
|
|
109
|
+
export * from './dtos/responses/ListMessagingCandidatesResponse';
|
|
110
|
+
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
import { IsEnum, IsNotEmpty, IsObject, IsOptional, IsString, Validate } from 'class-validator';
|
|
2
2
|
import { Expose } from 'class-transformer';
|
|
3
3
|
import { DeliveryChannelExtendedEnum } from '../enums/DeliveryChannelExtendedEnum';
|
|
4
|
+
import { NotificationOriginEnum } from '../enums/NotificationOriginEnum';
|
|
4
5
|
import { IsStringValueRecord } from '../validators/IsStringValueRecord';
|
|
5
6
|
|
|
6
7
|
export class NotificationQueueMessageRequestV2 {
|
|
8
|
+
/** Tenant emisor del mensaje. Si se omite, messages-business asume FIADO. */
|
|
9
|
+
@Expose()
|
|
10
|
+
@IsOptional()
|
|
11
|
+
@IsString()
|
|
12
|
+
tenantId?: string;
|
|
13
|
+
|
|
7
14
|
@Expose()
|
|
8
15
|
@IsString()
|
|
9
16
|
@IsNotEmpty()
|
|
@@ -51,4 +58,10 @@ export class NotificationQueueMessageRequestV2 {
|
|
|
51
58
|
@Expose()
|
|
52
59
|
@IsOptional()
|
|
53
60
|
data?: unknown;
|
|
61
|
+
|
|
62
|
+
/** Quien disparo la notificacion. Sin default: su ausencia ya significa EVENT. */
|
|
63
|
+
@Expose()
|
|
64
|
+
@IsOptional()
|
|
65
|
+
@IsEnum(NotificationOriginEnum)
|
|
66
|
+
origin?: NotificationOriginEnum;
|
|
54
67
|
}
|
|
@@ -1,22 +1,29 @@
|
|
|
1
1
|
import { Expose } from 'class-transformer';
|
|
2
|
-
import { IsEnum, IsNotEmpty, IsOptional, IsString, Validate } from 'class-validator';
|
|
3
|
-
import { ContentTypeEnum
|
|
2
|
+
import { IsArray, IsEnum, IsNotEmpty, IsOptional, IsString, Validate } from 'class-validator';
|
|
3
|
+
import { ContentTypeEnum } from '../../messaging';
|
|
4
|
+
import { DeliveryChannelExtendedEnum } from '../enums/DeliveryChannelExtendedEnum';
|
|
4
5
|
import { IsTemplatePlaceholders } from '../validators/IsTemplatePlaceholders';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
|
-
* Body para POST /templates (backoffice). Identifica un template por sus
|
|
8
|
-
* componentes de PK (messageType, channelType, language, country) +
|
|
9
|
-
* de contenido. `typeOfDirectoryId` es campo no-key del Row (ver TD pendiente).
|
|
8
|
+
* Body para POST /templates (backoffice). Identifica un template por sus 5
|
|
9
|
+
* componentes de PK (tenantId, messageType, channelType, language, country) +
|
|
10
|
+
* campos de contenido. `typeOfDirectoryId` es campo no-key del Row (ver TD pendiente).
|
|
10
11
|
*/
|
|
11
12
|
export class TemplateMessageCreateRequest {
|
|
13
|
+
/** Tenant al que pertenece la plantilla. Si se omite, se asume FIADO. */
|
|
14
|
+
@Expose()
|
|
15
|
+
@IsOptional()
|
|
16
|
+
@IsString()
|
|
17
|
+
tenantId?: string;
|
|
18
|
+
|
|
12
19
|
@Expose()
|
|
13
20
|
@IsString()
|
|
14
21
|
@IsNotEmpty()
|
|
15
22
|
messageType!: string;
|
|
16
23
|
|
|
17
24
|
@Expose()
|
|
18
|
-
@IsEnum(
|
|
19
|
-
channelType!:
|
|
25
|
+
@IsEnum(DeliveryChannelExtendedEnum)
|
|
26
|
+
channelType!: DeliveryChannelExtendedEnum;
|
|
20
27
|
|
|
21
28
|
@Expose()
|
|
22
29
|
@IsString()
|
|
@@ -48,4 +55,17 @@ export class TemplateMessageCreateRequest {
|
|
|
48
55
|
@IsString()
|
|
49
56
|
@Validate(IsTemplatePlaceholders)
|
|
50
57
|
subject?: string;
|
|
58
|
+
|
|
59
|
+
/** contentSid HX de Twilio. Solo en plantillas de WhatsApp. */
|
|
60
|
+
@Expose()
|
|
61
|
+
@IsOptional()
|
|
62
|
+
@IsString()
|
|
63
|
+
providerTemplateId?: string;
|
|
64
|
+
|
|
65
|
+
/** Que variable va en cada slot posicional de Twilio. Solo en plantillas de WhatsApp. */
|
|
66
|
+
@Expose()
|
|
67
|
+
@IsOptional()
|
|
68
|
+
@IsArray()
|
|
69
|
+
@IsString({ each: true })
|
|
70
|
+
slotVariables?: string[];
|
|
51
71
|
}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import { Expose, Type } from 'class-transformer';
|
|
2
2
|
import { IsEnum, IsInt, IsOptional, IsString, Max, Min } from 'class-validator';
|
|
3
|
-
import {
|
|
3
|
+
import { DeliveryChannelExtendedEnum } from '../enums/DeliveryChannelExtendedEnum';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Query string de GET /templates. Todos los filtros son opcionales; si todos
|
|
7
7
|
* estan vacios, lista todo (scan paginado). `limit` default 20, max 100.
|
|
8
8
|
*/
|
|
9
9
|
export class TemplateMessageListFiltersRequest {
|
|
10
|
+
/** Filtra por tenant. Si se omite, no filtra por tenant. */
|
|
11
|
+
@Expose()
|
|
12
|
+
@IsOptional()
|
|
13
|
+
@IsString()
|
|
14
|
+
tenantId?: string;
|
|
15
|
+
|
|
10
16
|
@Expose()
|
|
11
17
|
@IsOptional()
|
|
12
18
|
@IsString()
|
|
@@ -14,8 +20,8 @@ export class TemplateMessageListFiltersRequest {
|
|
|
14
20
|
|
|
15
21
|
@Expose()
|
|
16
22
|
@IsOptional()
|
|
17
|
-
@IsEnum(
|
|
18
|
-
channelType?:
|
|
23
|
+
@IsEnum(DeliveryChannelExtendedEnum)
|
|
24
|
+
channelType?: DeliveryChannelExtendedEnum;
|
|
19
25
|
|
|
20
26
|
@Expose()
|
|
21
27
|
@IsOptional()
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Expose } from 'class-transformer';
|
|
2
|
-
import { ContentTypeEnum
|
|
2
|
+
import { ContentTypeEnum } from '../../messaging';
|
|
3
|
+
import { DeliveryChannelExtendedEnum } from '../enums/DeliveryChannelExtendedEnum';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Forma del template retornada por GET /templates/{id}, POST, PUT.
|
|
@@ -14,11 +15,15 @@ export class TemplateMessageResponse {
|
|
|
14
15
|
@Expose()
|
|
15
16
|
pk!: string;
|
|
16
17
|
|
|
18
|
+
/** Tenant al que pertenece la plantilla. Ausente en las plantillas legacy de FIADO. */
|
|
19
|
+
@Expose()
|
|
20
|
+
tenantId?: string;
|
|
21
|
+
|
|
17
22
|
@Expose()
|
|
18
23
|
messageType!: string;
|
|
19
24
|
|
|
20
25
|
@Expose()
|
|
21
|
-
channelType!:
|
|
26
|
+
channelType!: DeliveryChannelExtendedEnum;
|
|
22
27
|
|
|
23
28
|
@Expose()
|
|
24
29
|
language!: string;
|
|
@@ -38,6 +43,14 @@ export class TemplateMessageResponse {
|
|
|
38
43
|
@Expose()
|
|
39
44
|
subject?: string;
|
|
40
45
|
|
|
46
|
+
/** contentSid HX de Twilio. Solo en plantillas de WhatsApp. */
|
|
47
|
+
@Expose()
|
|
48
|
+
providerTemplateId?: string;
|
|
49
|
+
|
|
50
|
+
/** Que variable va en cada slot posicional de Twilio. Solo en plantillas de WhatsApp. */
|
|
51
|
+
@Expose()
|
|
52
|
+
slotVariables?: string[];
|
|
53
|
+
|
|
41
54
|
@Expose()
|
|
42
55
|
createdAt!: number;
|
|
43
56
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Expose } from 'class-transformer';
|
|
2
|
-
import { IsEnum, IsNotEmpty, IsOptional, IsString, Validate } from 'class-validator';
|
|
2
|
+
import { IsArray, IsEnum, IsNotEmpty, IsOptional, IsString, Validate } from 'class-validator';
|
|
3
3
|
import { ContentTypeEnum } from '../../messaging';
|
|
4
4
|
import { IsTemplatePlaceholders } from '../validators/IsTemplatePlaceholders';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Body para PUT /templates/{id} (backoffice). Solo campos no-key son mutables.
|
|
8
|
-
* Los componentes del PK (messageType, channelType, language, country) viven
|
|
8
|
+
* Los componentes del PK (tenantId, messageType, channelType, language, country) viven
|
|
9
9
|
* en el `{id}` opaco del path y NO se aceptan en el body (PK structurally
|
|
10
10
|
* immutable - ver spec seccion "Mutabilidad PK").
|
|
11
11
|
*
|
|
@@ -36,4 +36,17 @@ export class TemplateMessageUpdateRequest {
|
|
|
36
36
|
@IsString()
|
|
37
37
|
@Validate(IsTemplatePlaceholders)
|
|
38
38
|
subject?: string;
|
|
39
|
+
|
|
40
|
+
/** contentSid HX de Twilio. Solo en plantillas de WhatsApp. */
|
|
41
|
+
@Expose()
|
|
42
|
+
@IsOptional()
|
|
43
|
+
@IsString()
|
|
44
|
+
providerTemplateId?: string;
|
|
45
|
+
|
|
46
|
+
/** Que variable va en cada slot posicional de Twilio. Solo en plantillas de WhatsApp. */
|
|
47
|
+
@Expose()
|
|
48
|
+
@IsOptional()
|
|
49
|
+
@IsArray()
|
|
50
|
+
@IsString({ each: true })
|
|
51
|
+
slotVariables?: string[];
|
|
39
52
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Momento del día en que corre una agenda de mensajería.
|
|
3
|
+
* Es el nombre del momento, nunca la hora: la hora vive en la agenda de cada tenant y cambia sin desplegar.
|
|
4
|
+
*/
|
|
5
|
+
export enum MessagingSlotEnum {
|
|
6
|
+
MORNING = 'MORNING',
|
|
7
|
+
AFTERNOON = 'AFTERNOON',
|
|
8
|
+
EVENING = 'EVENING',
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Quien disparo la notificacion. Su ausencia significa EVENT. */
|
|
2
|
+
export enum NotificationOriginEnum {
|
|
3
|
+
/** Un admin lo disparo a mano desde el backoffice. */
|
|
4
|
+
MANUAL = 'MANUAL',
|
|
5
|
+
/** Envio de prueba del editor de plantillas, a un solo destinatario. */
|
|
6
|
+
TEST = 'TEST',
|
|
7
|
+
/** Lo publico un productor del ciclo de vida. */
|
|
8
|
+
EVENT = 'EVENT',
|
|
9
|
+
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export * from './enums/DeliveryChannelExtendedEnum';
|
|
2
|
+
export * from './enums/NotificationOriginEnum';
|
|
3
|
+
export * from './enums/MessagingSlotEnum';
|
|
2
4
|
export * from './validators/IsStringValueRecord';
|
|
3
5
|
export * from './dtos/NotificationQueueMessageRequestV2';
|
|
4
6
|
export * from './dtos/SendMessageRequest';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Expose } from 'class-transformer';
|
|
2
|
-
import { IsEnum, Validate, ValidateIf } from 'class-validator';
|
|
2
|
+
import { IsEnum, IsOptional, IsString, Validate, ValidateIf } from 'class-validator';
|
|
3
3
|
import { DeliveryChannelEnum } from '../enums/DeliveryChannelEnum';
|
|
4
4
|
import { ContentTypeEnum } from '../enums/ContentTypeEnum';
|
|
5
5
|
import { IsDestinationByChannel } from '../validators/IsDestinationByChannel';
|
|
@@ -26,4 +26,13 @@ export class MessageDeliveryRequest {
|
|
|
26
26
|
@Expose()
|
|
27
27
|
@IsEnum(ContentTypeEnum)
|
|
28
28
|
contentType: ContentTypeEnum;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Remitente ya resuelto: direccion From de SES para MAIL, sender ID de SNS para SMS.
|
|
32
|
+
* Si se omite, el connector usa su remitente por defecto.
|
|
33
|
+
*/
|
|
34
|
+
@Expose()
|
|
35
|
+
@IsOptional()
|
|
36
|
+
@IsString()
|
|
37
|
+
sender?: string;
|
|
29
38
|
}
|
|
@@ -19,7 +19,7 @@ export class SelectedProvider {
|
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* Referencia (nombre/ARN) al secret de Secrets Manager con las credenciales
|
|
22
|
-
* de la cuenta de Twilio de este `(tenant, channel)`. Ej: "twilio
|
|
22
|
+
* de la cuenta de Twilio de este `(tenant, channel)`. Ej: "twilio-<tenant>-credentials".
|
|
23
23
|
* El connector resuelve el secret real con esta referencia justo antes de enviar.
|
|
24
24
|
* Opcional: si se omite, el connector usa su secret por defecto (TWILIO_SECRET_NAME).
|
|
25
25
|
*/
|