@fiado/api-invoker 5.76.0 → 5.78.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/bin/container.config.js +5 -0
- package/bin/index.d.ts +1 -0
- package/bin/index.js +1 -0
- package/bin/messages-business/api/MessagesBusinessApi.d.ts +1 -2
- package/bin/messages-business/api/MessagesBusinessApi.js +0 -3
- package/bin/messages-business/api/interfaces/IMessagesBusinessApi.d.ts +1 -13
- package/bin/messages-business/queue/MessagesBusinessPublisher.d.ts +4 -1
- package/bin/messages-business/queue/MessagesBusinessPublisher.js +10 -2
- package/bin/messages-business/queue/interfaces/IMessagesBusinessPublisher.d.ts +6 -1
- package/bin/whatsapp-connector/api/WhatsappConnectorApi.d.ts +11 -0
- package/bin/whatsapp-connector/api/WhatsappConnectorApi.js +31 -0
- package/bin/whatsapp-connector/api/interfaces/IWhatsappConnectorApi.d.ts +10 -0
- package/bin/whatsapp-connector/api/interfaces/IWhatsappConnectorApi.js +1 -0
- package/bin/whatsapp-connector/index.d.ts +2 -0
- package/bin/whatsapp-connector/index.js +2 -0
- package/package.json +2 -2
- package/src/container.config.ts +6 -0
- package/src/index.ts +1 -0
- package/src/messages-business/api/MessagesBusinessApi.ts +0 -5
- package/src/messages-business/api/interfaces/IMessagesBusinessApi.ts +0 -14
- package/src/messages-business/queue/MessagesBusinessPublisher.ts +18 -3
- package/src/messages-business/queue/interfaces/IMessagesBusinessPublisher.ts +10 -1
- package/src/whatsapp-connector/api/WhatsappConnectorApi.ts +19 -0
- package/src/whatsapp-connector/api/interfaces/IWhatsappConnectorApi.ts +11 -0
- package/src/whatsapp-connector/index.ts +2 -0
package/bin/container.config.js
CHANGED
|
@@ -124,6 +124,8 @@ import { WalletFundingRulesApi } from "./wallet-funding-rules/index.js";
|
|
|
124
124
|
import { SnsSesConnectorApi } from "./sns-ses-connector/index.js";
|
|
125
125
|
// Twilio connector — envío WhatsApp/SMS por Twilio (lee TWILIO_CONNECTOR_LAMBDA_URL)
|
|
126
126
|
import { TwilioConnectorApi } from "./twilio-connector/index.js";
|
|
127
|
+
// Whatsapp connector — envío WhatsApp por Meta (lee WHATSAPP_CONNECTOR_LAMBDA_URL)
|
|
128
|
+
import { WhatsappConnectorApi } from "./whatsapp-connector/index.js";
|
|
127
129
|
// Remittance business — pricingResolve (Dashboard Ops Fase B, puente de resolución de precio en send-time)
|
|
128
130
|
import { RemittanceBusinessApi } from "./remittance-business/index.js";
|
|
129
131
|
import { BeneficiaryApi } from "./beneficiary/index.js";
|
|
@@ -274,6 +276,9 @@ export const apiInvokerBindings = new ContainerModule(({ bind }) => {
|
|
|
274
276
|
// Twilio connector — envío WhatsApp/SMS por Twilio, elegido por el `provider` del senderConfig.
|
|
275
277
|
// El consumidor necesita TWILIO_CONNECTOR_LAMBDA_URL desde el SSM `fiado-twilio-connector`.
|
|
276
278
|
bind("ITwilioConnectorApi").to(TwilioConnectorApi);
|
|
279
|
+
// Whatsapp connector — envío WhatsApp por Meta, elegido por el `provider` del senderConfig.
|
|
280
|
+
// El consumidor necesita WHATSAPP_CONNECTOR_LAMBDA_URL desde el SSM `whatsapp-connector`.
|
|
281
|
+
bind("IWhatsappConnectorApi").to(WhatsappConnectorApi);
|
|
277
282
|
// Remittance business — pricingResolve (Dashboard Ops Fase B, puente de resolución de precio en send-time)
|
|
278
283
|
bind("IRemittanceBusinessApi").to(RemittanceBusinessApi);
|
|
279
284
|
// Borrado en cascada del directorio — deleteByDirectoryId por dominio
|
package/bin/index.d.ts
CHANGED
|
@@ -104,6 +104,7 @@ export * from "./walletFundingSettlement/index.js";
|
|
|
104
104
|
export * from "./wallet-funding-rules/index.js";
|
|
105
105
|
export * from "./sns-ses-connector/index.js";
|
|
106
106
|
export * from "./twilio-connector/index.js";
|
|
107
|
+
export * from "./whatsapp-connector/index.js";
|
|
107
108
|
export * from "./remittance-business/index.js";
|
|
108
109
|
export * from "./modelias-connector/index.js";
|
|
109
110
|
export * from "./beneficiary/index.js";
|
package/bin/index.js
CHANGED
|
@@ -104,6 +104,7 @@ export * from "./walletFundingSettlement/index.js";
|
|
|
104
104
|
export * from "./wallet-funding-rules/index.js";
|
|
105
105
|
export * from "./sns-ses-connector/index.js";
|
|
106
106
|
export * from "./twilio-connector/index.js";
|
|
107
|
+
export * from "./whatsapp-connector/index.js";
|
|
107
108
|
export * from "./remittance-business/index.js";
|
|
108
109
|
export * from "./modelias-connector/index.js";
|
|
109
110
|
export * from "./beneficiary/index.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { IHttpRequest } from '@fiado/http-client';
|
|
2
2
|
type FiadoApiResponse<T> = import('@fiado/type-kit/bin/apiResponse/dtos/FiadoApiResponse.js').default<T>;
|
|
3
|
-
import { SendMessageRequest, SendMessageResponse, VerifyOtpRequest, VerifyOtpResponse, OtpValidatedResponse, TemplateMessageCreateRequest, TemplateMessageUpdateRequest, TemplateMessageResponse, TemplateMessageListResponse, TemplateMessageListFiltersRequest
|
|
3
|
+
import { SendMessageRequest, SendMessageResponse, VerifyOtpRequest, VerifyOtpResponse, OtpValidatedResponse, TemplateMessageCreateRequest, TemplateMessageUpdateRequest, TemplateMessageResponse, TemplateMessageListResponse, TemplateMessageListFiltersRequest } from '@fiado/type-kit/bin/messagesConnector/index.js';
|
|
4
4
|
import { IMessagesBusinessApi } from './interfaces/IMessagesBusinessApi.js';
|
|
5
5
|
export declare class MessagesBusinessApi implements IMessagesBusinessApi {
|
|
6
6
|
private readonly httpRequest;
|
|
@@ -9,7 +9,6 @@ export declare class MessagesBusinessApi implements IMessagesBusinessApi {
|
|
|
9
9
|
sendMessage(request: SendMessageRequest): Promise<FiadoApiResponse<SendMessageResponse>>;
|
|
10
10
|
verifyOtp(request: VerifyOtpRequest): Promise<FiadoApiResponse<VerifyOtpResponse>>;
|
|
11
11
|
getValidatedOtp(directoryId: string, otpCode: string): Promise<FiadoApiResponse<OtpValidatedResponse>>;
|
|
12
|
-
notifyMdmDevices(request: MdmNotifyRequest): Promise<FiadoApiResponse<MdmNotifyBatchResponse>>;
|
|
13
12
|
createTemplate(tenantId: string, request: TemplateMessageCreateRequest): Promise<FiadoApiResponse<TemplateMessageResponse>>;
|
|
14
13
|
listTemplates(tenantId: string, filters: TemplateMessageListFiltersRequest): Promise<FiadoApiResponse<TemplateMessageListResponse>>;
|
|
15
14
|
getTemplate(tenantId: string, id: string): Promise<FiadoApiResponse<TemplateMessageResponse>>;
|
|
@@ -29,9 +29,6 @@ let MessagesBusinessApi = class MessagesBusinessApi {
|
|
|
29
29
|
async getValidatedOtp(directoryId, otpCode) {
|
|
30
30
|
return await this.httpRequest.get(`${this.baseUrl}messages/otp/validated`, { directoryId, otpCode }, { 'operationName': 'privateGetValidatedOtp' });
|
|
31
31
|
}
|
|
32
|
-
async notifyMdmDevices(request) {
|
|
33
|
-
return await this.httpRequest.post(joinUrl(this.baseUrl, 'messages/mdm-notify'), request, { 'operationName': 'privateNotifyMdmDevices' });
|
|
34
|
-
}
|
|
35
32
|
async createTemplate(tenantId, request) {
|
|
36
33
|
const url = this.withTenantId(joinUrl(this.baseUrl, 'templates'), tenantId);
|
|
37
34
|
return await this.httpRequest.post(url, request, { 'operationName': 'backofficeCreateTemplate' });
|
|
@@ -1,21 +1,9 @@
|
|
|
1
1
|
type FiadoApiResponse<T> = import('@fiado/type-kit/bin/apiResponse/dtos/FiadoApiResponse.js').default<T>;
|
|
2
|
-
import { SendMessageRequest, SendMessageResponse, VerifyOtpRequest, VerifyOtpResponse, OtpValidatedResponse, TemplateMessageCreateRequest, TemplateMessageUpdateRequest, TemplateMessageResponse, TemplateMessageListResponse, TemplateMessageListFiltersRequest
|
|
2
|
+
import { SendMessageRequest, SendMessageResponse, VerifyOtpRequest, VerifyOtpResponse, OtpValidatedResponse, TemplateMessageCreateRequest, TemplateMessageUpdateRequest, TemplateMessageResponse, TemplateMessageListResponse, TemplateMessageListFiltersRequest } from '@fiado/type-kit/bin/messagesConnector/index.js';
|
|
3
3
|
export interface IMessagesBusinessApi {
|
|
4
4
|
sendMessage(request: SendMessageRequest): Promise<FiadoApiResponse<SendMessageResponse>>;
|
|
5
5
|
verifyOtp(request: VerifyOtpRequest): Promise<FiadoApiResponse<VerifyOtpResponse>>;
|
|
6
6
|
getValidatedOtp(directoryId: string, otpCode: string): Promise<FiadoApiResponse<OtpValidatedResponse>>;
|
|
7
|
-
/**
|
|
8
|
-
* Avisa en la pantalla del equipo financiado. Puerta aparte del lote a proposito: el item
|
|
9
|
-
* lleva IMEI y proveedor en vez de destinatario y variables.
|
|
10
|
-
*
|
|
11
|
-
* Mensajeria resuelve el texto del `noticeType` contra el catalogo, agrupa por proveedor y
|
|
12
|
-
* hace UN `notifyDevices()` por grupo. Responde 202 con un resultado por IMEI; el proveedor
|
|
13
|
-
* caido llega como ERROR de ese item, nunca como dato invalido.
|
|
14
|
-
*
|
|
15
|
-
* Los mensajes normales NO entran por aqui ni por HTTP: se encolan con
|
|
16
|
-
* `IMessagesBusinessPublisher`, y `referenceMessageId` es su llave de idempotencia.
|
|
17
|
-
*/
|
|
18
|
-
notifyMdmDevices(request: MdmNotifyRequest): Promise<FiadoApiResponse<MdmNotifyBatchResponse>>;
|
|
19
7
|
/**
|
|
20
8
|
* CRUD de plantillas. Los cinco viven en la API privada sin authorizer, asi que el `tenantId`
|
|
21
9
|
* es obligatorio y explicito: el lambda responde 400 TENANT_ID_REQUIRED si no llega.
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import { NotificationQueueMessageRequestV2 } from '@fiado/type-kit/bin/messagesConnector/index.js';
|
|
1
|
+
import { MdmNotifyQueueMessageRequest, NotificationQueueMessageRequestV2 } from '@fiado/type-kit/bin/messagesConnector/index.js';
|
|
2
2
|
import { IMessagesBusinessPublisher } from './interfaces/IMessagesBusinessPublisher.js';
|
|
3
3
|
export default class MessagesBusinessPublisher implements IMessagesBusinessPublisher {
|
|
4
4
|
private readonly queueUrl;
|
|
5
5
|
private readonly sqsClient;
|
|
6
6
|
publish(message: NotificationQueueMessageRequestV2): Promise<void>;
|
|
7
|
+
publishMdmNotifyBatch(message: MdmNotifyQueueMessageRequest): Promise<void>;
|
|
8
|
+
/** Encola el mensaje serializado y deja el rastro de la operacion que lo publico. */
|
|
9
|
+
private send;
|
|
7
10
|
}
|
|
@@ -11,13 +11,21 @@ let MessagesBusinessPublisher = class MessagesBusinessPublisher {
|
|
|
11
11
|
queueUrl = process.env.MESSAGES_BUSINESS_QUEUE_URL;
|
|
12
12
|
sqsClient = new SQSClient({ region: process.env.AWS_REGION });
|
|
13
13
|
async publish(message) {
|
|
14
|
+
await this.send('publish', message);
|
|
15
|
+
}
|
|
16
|
+
// El lote MDM viaja por la misma cola que el mensaje suelto; lo distingue su forma, no el destino.
|
|
17
|
+
async publishMdmNotifyBatch(message) {
|
|
18
|
+
await this.send('publishMdmNotifyBatch', message);
|
|
19
|
+
}
|
|
20
|
+
/** Encola el mensaje serializado y deja el rastro de la operacion que lo publico. */
|
|
21
|
+
async send(operation, message) {
|
|
14
22
|
const t0 = Date.now();
|
|
15
23
|
try {
|
|
16
24
|
const result = await this.sqsClient.send(new SendMessageCommand({
|
|
17
25
|
QueueUrl: this.queueUrl,
|
|
18
26
|
MessageBody: JSON.stringify(message),
|
|
19
27
|
}));
|
|
20
|
-
log.info(
|
|
28
|
+
log.info(`MessagesBusinessPublisher.${operation} ok`, {
|
|
21
29
|
messageId: result.MessageId,
|
|
22
30
|
latencyMs: Date.now() - t0,
|
|
23
31
|
});
|
|
@@ -25,7 +33,7 @@ let MessagesBusinessPublisher = class MessagesBusinessPublisher {
|
|
|
25
33
|
catch (error) {
|
|
26
34
|
// Propaga el error crudo del SQSClient (NO envolver en new Error(string) = antipatron).
|
|
27
35
|
// Log de contexto + re-throw para que el caller decida.
|
|
28
|
-
log.error(
|
|
36
|
+
log.error(`MessagesBusinessPublisher.${operation} failed`, {
|
|
29
37
|
latencyMs: Date.now() - t0,
|
|
30
38
|
errorName: error?.name,
|
|
31
39
|
});
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import { NotificationQueueMessageRequestV2 } from '@fiado/type-kit/bin/messagesConnector/index.js';
|
|
1
|
+
import { MdmNotifyQueueMessageRequest, NotificationQueueMessageRequestV2 } from '@fiado/type-kit/bin/messagesConnector/index.js';
|
|
2
2
|
export interface IMessagesBusinessPublisher {
|
|
3
3
|
publish(message: NotificationQueueMessageRequestV2): Promise<void>;
|
|
4
|
+
/**
|
|
5
|
+
* Encola el lote de avisos MDM que se muestran en la pantalla del equipo financiado.
|
|
6
|
+
* Reemplaza al `POST /private/messages/mdm-notify`, que se retira.
|
|
7
|
+
*/
|
|
8
|
+
publishMdmNotifyBatch(message: MdmNotifyQueueMessageRequest): Promise<void>;
|
|
4
9
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { IHttpRequest } from "@fiado/http-client";
|
|
2
|
+
import { ConnectorSendMessageRequest, ConnectorSendMessageResponse } from "@fiado/type-kit/bin/whatsappConnector/index.js";
|
|
3
|
+
import { IWhatsappConnectorApi } from "./interfaces/IWhatsappConnectorApi.js";
|
|
4
|
+
type FiadoApiResponse<T> = import("@fiado/type-kit/bin/apiResponse/dtos/FiadoApiResponse.js").default<T>;
|
|
5
|
+
export default class WhatsappConnectorApi implements IWhatsappConnectorApi {
|
|
6
|
+
private httpRequest;
|
|
7
|
+
private readonly baseUrl;
|
|
8
|
+
constructor(httpRequest: IHttpRequest);
|
|
9
|
+
send(request: ConnectorSendMessageRequest): Promise<FiadoApiResponse<ConnectorSendMessageResponse>>;
|
|
10
|
+
}
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
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;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
+
};
|
|
13
|
+
import { inject, injectable } from "inversify";
|
|
14
|
+
import { joinUrl } from "../../utils/joinUrl.js";
|
|
15
|
+
let WhatsappConnectorApi = class WhatsappConnectorApi {
|
|
16
|
+
httpRequest;
|
|
17
|
+
baseUrl = process.env.WHATSAPP_CONNECTOR_LAMBDA_URL || "";
|
|
18
|
+
constructor(httpRequest) {
|
|
19
|
+
this.httpRequest = httpRequest;
|
|
20
|
+
}
|
|
21
|
+
async send(request) {
|
|
22
|
+
const url = joinUrl(this.baseUrl, "messages/send");
|
|
23
|
+
return await this.httpRequest.post(url, request, { operationName: "privateSendMessage" });
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
WhatsappConnectorApi = __decorate([
|
|
27
|
+
injectable(),
|
|
28
|
+
__param(0, inject("IHttpRequest")),
|
|
29
|
+
__metadata("design:paramtypes", [Object])
|
|
30
|
+
], WhatsappConnectorApi);
|
|
31
|
+
export default WhatsappConnectorApi;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ConnectorSendMessageRequest, ConnectorSendMessageResponse } from "@fiado/type-kit/bin/whatsappConnector/index.js";
|
|
2
|
+
type FiadoApiResponse<T> = import("@fiado/type-kit/bin/apiResponse/dtos/FiadoApiResponse.js").default<T>;
|
|
3
|
+
export interface IWhatsappConnectorApi {
|
|
4
|
+
/**
|
|
5
|
+
* Envía un mensaje ya resuelto al whatsapp-connector (POST /messages/send).
|
|
6
|
+
* messages-business resuelve plantilla y proveedor; el connector solo transmite a Meta.
|
|
7
|
+
*/
|
|
8
|
+
send(request: ConnectorSendMessageRequest): Promise<FiadoApiResponse<ConnectorSendMessageResponse>>;
|
|
9
|
+
}
|
|
10
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fiado/api-invoker",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.78.0",
|
|
4
4
|
"description": "Sirve como un puente entre diferentes funciones lambda, facilitando la comunicación entre ellas a través de invocaciones http",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "bin/index.js",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"@fiado/gateway-adapter": "^3.9.0",
|
|
35
35
|
"@fiado/http-client": "^2.0.1",
|
|
36
36
|
"@fiado/logger": "^1.1.3",
|
|
37
|
-
"@fiado/type-kit": "^3.
|
|
37
|
+
"@fiado/type-kit": "^3.422.0",
|
|
38
38
|
"dotenv": "^16.4.7"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
package/src/container.config.ts
CHANGED
|
@@ -189,6 +189,8 @@ import { IWalletFundingRulesApi, WalletFundingRulesApi } from "./wallet-funding-
|
|
|
189
189
|
import { ISnsSesConnectorApi, SnsSesConnectorApi } from "./sns-ses-connector/index.js";
|
|
190
190
|
// Twilio connector — envío WhatsApp/SMS por Twilio (lee TWILIO_CONNECTOR_LAMBDA_URL)
|
|
191
191
|
import { ITwilioConnectorApi, TwilioConnectorApi } from "./twilio-connector/index.js";
|
|
192
|
+
// Whatsapp connector — envío WhatsApp por Meta (lee WHATSAPP_CONNECTOR_LAMBDA_URL)
|
|
193
|
+
import { IWhatsappConnectorApi, WhatsappConnectorApi } from "./whatsapp-connector/index.js";
|
|
192
194
|
// Remittance business — pricingResolve (Dashboard Ops Fase B, puente de resolución de precio en send-time)
|
|
193
195
|
import { IRemittanceBusinessApi, RemittanceBusinessApi } from "./remittance-business/index.js";
|
|
194
196
|
import { IBeneficiaryApi, BeneficiaryApi } from "./beneficiary/index.js";
|
|
@@ -366,6 +368,10 @@ export const apiInvokerBindings = new ContainerModule(({ bind }) => {
|
|
|
366
368
|
// El consumidor necesita TWILIO_CONNECTOR_LAMBDA_URL desde el SSM `fiado-twilio-connector`.
|
|
367
369
|
bind<ITwilioConnectorApi>("ITwilioConnectorApi").to(TwilioConnectorApi);
|
|
368
370
|
|
|
371
|
+
// Whatsapp connector — envío WhatsApp por Meta, elegido por el `provider` del senderConfig.
|
|
372
|
+
// El consumidor necesita WHATSAPP_CONNECTOR_LAMBDA_URL desde el SSM `whatsapp-connector`.
|
|
373
|
+
bind<IWhatsappConnectorApi>("IWhatsappConnectorApi").to(WhatsappConnectorApi);
|
|
374
|
+
|
|
369
375
|
// Remittance business — pricingResolve (Dashboard Ops Fase B, puente de resolución de precio en send-time)
|
|
370
376
|
bind<IRemittanceBusinessApi>("IRemittanceBusinessApi").to(RemittanceBusinessApi);
|
|
371
377
|
|
package/src/index.ts
CHANGED
|
@@ -104,6 +104,7 @@ export * from "./walletFundingSettlement/index.js";
|
|
|
104
104
|
export * from "./wallet-funding-rules/index.js";
|
|
105
105
|
export * from "./sns-ses-connector/index.js";
|
|
106
106
|
export * from "./twilio-connector/index.js";
|
|
107
|
+
export * from "./whatsapp-connector/index.js";
|
|
107
108
|
export * from "./remittance-business/index.js";
|
|
108
109
|
export * from "./modelias-connector/index.js";
|
|
109
110
|
export * from "./beneficiary/index.js";
|
|
@@ -7,7 +7,6 @@ import {
|
|
|
7
7
|
OtpValidatedResponse,
|
|
8
8
|
TemplateMessageCreateRequest, TemplateMessageUpdateRequest,
|
|
9
9
|
TemplateMessageResponse, TemplateMessageListResponse, TemplateMessageListFiltersRequest,
|
|
10
|
-
MdmNotifyRequest, MdmNotifyBatchResponse,
|
|
11
10
|
} from '@fiado/type-kit/bin/messagesConnector/index.js';
|
|
12
11
|
import { IMessagesBusinessApi } from './interfaces/IMessagesBusinessApi.js';
|
|
13
12
|
import { joinUrl } from '../../utils/joinUrl.js';
|
|
@@ -32,10 +31,6 @@ export class MessagesBusinessApi implements IMessagesBusinessApi {
|
|
|
32
31
|
return await this.httpRequest.get(`${this.baseUrl}messages/otp/validated`, { directoryId, otpCode }, { 'operationName': 'privateGetValidatedOtp' });
|
|
33
32
|
}
|
|
34
33
|
|
|
35
|
-
async notifyMdmDevices(request: MdmNotifyRequest): Promise<FiadoApiResponse<MdmNotifyBatchResponse>> {
|
|
36
|
-
return await this.httpRequest.post(joinUrl(this.baseUrl, 'messages/mdm-notify'), request, { 'operationName': 'privateNotifyMdmDevices' });
|
|
37
|
-
}
|
|
38
|
-
|
|
39
34
|
async createTemplate(tenantId: string, request: TemplateMessageCreateRequest): Promise<FiadoApiResponse<TemplateMessageResponse>> {
|
|
40
35
|
const url = this.withTenantId(joinUrl(this.baseUrl, 'templates'), tenantId);
|
|
41
36
|
return await this.httpRequest.post(url, request, { 'operationName': 'backofficeCreateTemplate' });
|
|
@@ -5,7 +5,6 @@ import {
|
|
|
5
5
|
OtpValidatedResponse,
|
|
6
6
|
TemplateMessageCreateRequest, TemplateMessageUpdateRequest,
|
|
7
7
|
TemplateMessageResponse, TemplateMessageListResponse, TemplateMessageListFiltersRequest,
|
|
8
|
-
MdmNotifyRequest, MdmNotifyBatchResponse,
|
|
9
8
|
} from '@fiado/type-kit/bin/messagesConnector/index.js';
|
|
10
9
|
|
|
11
10
|
export interface IMessagesBusinessApi {
|
|
@@ -13,19 +12,6 @@ export interface IMessagesBusinessApi {
|
|
|
13
12
|
verifyOtp(request: VerifyOtpRequest): Promise<FiadoApiResponse<VerifyOtpResponse>>;
|
|
14
13
|
getValidatedOtp(directoryId: string, otpCode: string): Promise<FiadoApiResponse<OtpValidatedResponse>>;
|
|
15
14
|
|
|
16
|
-
/**
|
|
17
|
-
* Avisa en la pantalla del equipo financiado. Puerta aparte del lote a proposito: el item
|
|
18
|
-
* lleva IMEI y proveedor en vez de destinatario y variables.
|
|
19
|
-
*
|
|
20
|
-
* Mensajeria resuelve el texto del `noticeType` contra el catalogo, agrupa por proveedor y
|
|
21
|
-
* hace UN `notifyDevices()` por grupo. Responde 202 con un resultado por IMEI; el proveedor
|
|
22
|
-
* caido llega como ERROR de ese item, nunca como dato invalido.
|
|
23
|
-
*
|
|
24
|
-
* Los mensajes normales NO entran por aqui ni por HTTP: se encolan con
|
|
25
|
-
* `IMessagesBusinessPublisher`, y `referenceMessageId` es su llave de idempotencia.
|
|
26
|
-
*/
|
|
27
|
-
notifyMdmDevices(request: MdmNotifyRequest): Promise<FiadoApiResponse<MdmNotifyBatchResponse>>;
|
|
28
|
-
|
|
29
15
|
/**
|
|
30
16
|
* CRUD de plantillas. Los cinco viven en la API privada sin authorizer, asi que el `tenantId`
|
|
31
17
|
* es obligatorio y explicito: el lambda responde 400 TENANT_ID_REQUIRED si no llega.
|
|
@@ -1,29 +1,44 @@
|
|
|
1
1
|
import { injectable } from 'inversify';
|
|
2
2
|
import { SendMessageCommand, SQSClient } from '@aws-sdk/client-sqs';
|
|
3
3
|
import { log } from '@fiado/logger';
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
MdmNotifyQueueMessageRequest,
|
|
6
|
+
NotificationQueueMessageRequestV2,
|
|
7
|
+
} from '@fiado/type-kit/bin/messagesConnector/index.js';
|
|
5
8
|
import { IMessagesBusinessPublisher } from './interfaces/IMessagesBusinessPublisher.js';
|
|
6
9
|
|
|
10
|
+
type MessagesBusinessQueueMessage = NotificationQueueMessageRequestV2 | MdmNotifyQueueMessageRequest;
|
|
11
|
+
|
|
7
12
|
@injectable()
|
|
8
13
|
export default class MessagesBusinessPublisher implements IMessagesBusinessPublisher {
|
|
9
14
|
private readonly queueUrl = process.env.MESSAGES_BUSINESS_QUEUE_URL!;
|
|
10
15
|
private readonly sqsClient = new SQSClient({ region: process.env.AWS_REGION });
|
|
11
16
|
|
|
12
17
|
async publish(message: NotificationQueueMessageRequestV2): Promise<void> {
|
|
18
|
+
await this.send('publish', message);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// El lote MDM viaja por la misma cola que el mensaje suelto; lo distingue su forma, no el destino.
|
|
22
|
+
async publishMdmNotifyBatch(message: MdmNotifyQueueMessageRequest): Promise<void> {
|
|
23
|
+
await this.send('publishMdmNotifyBatch', message);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Encola el mensaje serializado y deja el rastro de la operacion que lo publico. */
|
|
27
|
+
private async send(operation: string, message: MessagesBusinessQueueMessage): Promise<void> {
|
|
13
28
|
const t0 = Date.now();
|
|
14
29
|
try {
|
|
15
30
|
const result = await this.sqsClient.send(new SendMessageCommand({
|
|
16
31
|
QueueUrl: this.queueUrl,
|
|
17
32
|
MessageBody: JSON.stringify(message),
|
|
18
33
|
}));
|
|
19
|
-
log.info(
|
|
34
|
+
log.info(`MessagesBusinessPublisher.${operation} ok`, {
|
|
20
35
|
messageId: result.MessageId,
|
|
21
36
|
latencyMs: Date.now() - t0,
|
|
22
37
|
});
|
|
23
38
|
} catch (error) {
|
|
24
39
|
// Propaga el error crudo del SQSClient (NO envolver en new Error(string) = antipatron).
|
|
25
40
|
// Log de contexto + re-throw para que el caller decida.
|
|
26
|
-
log.error(
|
|
41
|
+
log.error(`MessagesBusinessPublisher.${operation} failed`, {
|
|
27
42
|
latencyMs: Date.now() - t0,
|
|
28
43
|
errorName: (error as Error)?.name,
|
|
29
44
|
});
|
|
@@ -1,5 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
MdmNotifyQueueMessageRequest,
|
|
3
|
+
NotificationQueueMessageRequestV2,
|
|
4
|
+
} from '@fiado/type-kit/bin/messagesConnector/index.js';
|
|
2
5
|
|
|
3
6
|
export interface IMessagesBusinessPublisher {
|
|
4
7
|
publish(message: NotificationQueueMessageRequestV2): Promise<void>;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Encola el lote de avisos MDM que se muestran en la pantalla del equipo financiado.
|
|
11
|
+
* Reemplaza al `POST /private/messages/mdm-notify`, que se retira.
|
|
12
|
+
*/
|
|
13
|
+
publishMdmNotifyBatch(message: MdmNotifyQueueMessageRequest): Promise<void>;
|
|
5
14
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { inject, injectable } from "inversify";
|
|
2
|
+
import type { IHttpRequest } from "@fiado/http-client";
|
|
3
|
+
import { ConnectorSendMessageRequest, ConnectorSendMessageResponse } from "@fiado/type-kit/bin/whatsappConnector/index.js";
|
|
4
|
+
import { IWhatsappConnectorApi } from "./interfaces/IWhatsappConnectorApi.js";
|
|
5
|
+
import { joinUrl } from "../../utils/joinUrl.js";
|
|
6
|
+
|
|
7
|
+
type FiadoApiResponse<T> = import("@fiado/type-kit/bin/apiResponse/dtos/FiadoApiResponse.js").default<T>;
|
|
8
|
+
|
|
9
|
+
@injectable()
|
|
10
|
+
export default class WhatsappConnectorApi implements IWhatsappConnectorApi {
|
|
11
|
+
private readonly baseUrl = process.env.WHATSAPP_CONNECTOR_LAMBDA_URL || "";
|
|
12
|
+
|
|
13
|
+
constructor(@inject("IHttpRequest") private httpRequest: IHttpRequest) {}
|
|
14
|
+
|
|
15
|
+
async send(request: ConnectorSendMessageRequest): Promise<FiadoApiResponse<ConnectorSendMessageResponse>> {
|
|
16
|
+
const url = joinUrl(this.baseUrl, "messages/send");
|
|
17
|
+
return await this.httpRequest.post(url, request, { operationName: "privateSendMessage" });
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ConnectorSendMessageRequest, ConnectorSendMessageResponse } from "@fiado/type-kit/bin/whatsappConnector/index.js";
|
|
2
|
+
|
|
3
|
+
type FiadoApiResponse<T> = import("@fiado/type-kit/bin/apiResponse/dtos/FiadoApiResponse.js").default<T>;
|
|
4
|
+
|
|
5
|
+
export interface IWhatsappConnectorApi {
|
|
6
|
+
/**
|
|
7
|
+
* Envía un mensaje ya resuelto al whatsapp-connector (POST /messages/send).
|
|
8
|
+
* messages-business resuelve plantilla y proveedor; el connector solo transmite a Meta.
|
|
9
|
+
*/
|
|
10
|
+
send(request: ConnectorSendMessageRequest): Promise<FiadoApiResponse<ConnectorSendMessageResponse>>;
|
|
11
|
+
}
|