@fiado/api-invoker 4.6.0 → 4.7.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 +6 -0
- package/bin/index.d.ts +1 -0
- package/bin/index.js +1 -0
- package/bin/messages-business/api/MessagesBusinessApi.d.ts +17 -0
- package/bin/messages-business/api/MessagesBusinessApi.js +53 -0
- package/bin/messages-business/api/interfaces/IMessagesBusinessApi.d.ts +12 -0
- package/bin/messages-business/api/interfaces/IMessagesBusinessApi.js +2 -0
- package/bin/messages-business/index.d.ts +4 -0
- package/bin/messages-business/index.js +25 -0
- package/bin/messages-business/queue/MessagesBusinessPublisher.d.ts +7 -0
- package/bin/messages-business/queue/MessagesBusinessPublisher.js +41 -0
- package/bin/messages-business/queue/interfaces/IMessagesBusinessPublisher.d.ts +4 -0
- package/bin/messages-business/queue/interfaces/IMessagesBusinessPublisher.js +2 -0
- package/package.json +3 -2
- package/src/container.config.ts +8 -0
- package/src/index.ts +1 -0
- package/src/messages-business/api/MessagesBusinessApi.ts +50 -0
- package/src/messages-business/api/interfaces/IMessagesBusinessApi.ts +20 -0
- package/src/messages-business/index.ts +4 -0
- package/src/messages-business/queue/MessagesBusinessPublisher.ts +33 -0
- package/src/messages-business/queue/interfaces/IMessagesBusinessPublisher.ts +5 -0
package/bin/container.config.js
CHANGED
|
@@ -104,6 +104,9 @@ const BenefitsMarketplaceApi_1 = __importDefault(require("./benefits-marketplace
|
|
|
104
104
|
const uniteller_connector_1 = require("./uniteller-connector");
|
|
105
105
|
const CognitoBackofficeConnectorApi_1 = __importDefault(require("./cognitoBackofficeConnector/api/CognitoBackofficeConnectorApi"));
|
|
106
106
|
const PlatformRbacBusinessApi_1 = __importDefault(require("./platformRbac/api/PlatformRbacBusinessApi"));
|
|
107
|
+
// Messages business — API client + OTP/notifications SQS publisher (Fase 0 SureKeep)
|
|
108
|
+
const messages_business_1 = require("./messages-business");
|
|
109
|
+
const MessagesBusinessPublisher_1 = __importDefault(require("./messages-business/queue/MessagesBusinessPublisher"));
|
|
107
110
|
exports.apiInvokerBindings = new inversify_1.ContainerModule(({ bind }) => {
|
|
108
111
|
// UTILS bindings
|
|
109
112
|
bind("InvokerUtils").to(InvokerUtils_1.InvokerUtils);
|
|
@@ -213,4 +216,7 @@ exports.apiInvokerBindings = new inversify_1.ContainerModule(({ bind }) => {
|
|
|
213
216
|
bind("ICognitoBackofficeConnectorApi").to(CognitoBackofficeConnectorApi_1.default);
|
|
214
217
|
// Platform RBAC business — Custom Auth Challenge endpoints (Fase 0 SureKeep)
|
|
215
218
|
bind("IPlatformRbacBusinessApi").to(PlatformRbacBusinessApi_1.default);
|
|
219
|
+
// Messages business — API client + OTP/notifications SQS publisher (Fase 0 SureKeep)
|
|
220
|
+
bind("IMessagesBusinessApi").to(messages_business_1.MessagesBusinessApi);
|
|
221
|
+
bind("IMessagesBusinessPublisher").to(MessagesBusinessPublisher_1.default);
|
|
216
222
|
});
|
package/bin/index.d.ts
CHANGED
package/bin/index.js
CHANGED
|
@@ -91,3 +91,4 @@ __exportStar(require("./benefits-marketplace"), exports);
|
|
|
91
91
|
__exportStar(require("./milestone-business"), exports);
|
|
92
92
|
__exportStar(require("./cognitoBackofficeConnector"), exports);
|
|
93
93
|
__exportStar(require("./platformRbac"), exports);
|
|
94
|
+
__exportStar(require("./messages-business"), exports);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { IHttpRequest } from '@fiado/http-client';
|
|
2
|
+
import FiadoApiResponse from '@fiado/type-kit/bin/apiResponse/dtos/FiadoApiResponse';
|
|
3
|
+
import { SendMessageRequest, SendMessageResponse, VerifyOtpRequest, VerifyOtpResponse, OtpValidatedResponse, TemplateMessageCreateRequest, TemplateMessageUpdateRequest, TemplateMessageResponse, TemplateMessageListResponse, TemplateMessageListFiltersRequest } from '@fiado/type-kit/bin/messagesConnector';
|
|
4
|
+
import { IMessagesBusinessApi } from './interfaces/IMessagesBusinessApi';
|
|
5
|
+
export declare class MessagesBusinessApi implements IMessagesBusinessApi {
|
|
6
|
+
private readonly httpRequest;
|
|
7
|
+
private readonly baseUrl;
|
|
8
|
+
constructor(httpRequest: IHttpRequest);
|
|
9
|
+
sendMessage(request: SendMessageRequest): Promise<FiadoApiResponse<SendMessageResponse>>;
|
|
10
|
+
verifyOtp(request: VerifyOtpRequest): Promise<FiadoApiResponse<VerifyOtpResponse>>;
|
|
11
|
+
getValidatedOtp(directoryId: string, otpCode: string): Promise<FiadoApiResponse<OtpValidatedResponse>>;
|
|
12
|
+
createTemplate(request: TemplateMessageCreateRequest): Promise<FiadoApiResponse<TemplateMessageResponse>>;
|
|
13
|
+
listTemplates(filters: TemplateMessageListFiltersRequest): Promise<FiadoApiResponse<TemplateMessageListResponse>>;
|
|
14
|
+
getTemplate(id: string): Promise<FiadoApiResponse<TemplateMessageResponse>>;
|
|
15
|
+
updateTemplate(id: string, request: TemplateMessageUpdateRequest): Promise<FiadoApiResponse<TemplateMessageResponse>>;
|
|
16
|
+
deleteTemplate(id: string): Promise<FiadoApiResponse<void>>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
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
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.MessagesBusinessApi = void 0;
|
|
16
|
+
const inversify_1 = require("inversify");
|
|
17
|
+
let MessagesBusinessApi = class MessagesBusinessApi {
|
|
18
|
+
httpRequest;
|
|
19
|
+
baseUrl = process.env.MESSAGES_BUSINESS_URL || '';
|
|
20
|
+
constructor(httpRequest) {
|
|
21
|
+
this.httpRequest = httpRequest;
|
|
22
|
+
}
|
|
23
|
+
async sendMessage(request) {
|
|
24
|
+
return await this.httpRequest.post(`${this.baseUrl}messages/send`, request, { 'operationName': 'privateSendMessage' });
|
|
25
|
+
}
|
|
26
|
+
async verifyOtp(request) {
|
|
27
|
+
return await this.httpRequest.post(`${this.baseUrl}messages/otp/verify`, request, { 'operationName': 'privateVerifyOtp' });
|
|
28
|
+
}
|
|
29
|
+
async getValidatedOtp(directoryId, otpCode) {
|
|
30
|
+
return await this.httpRequest.get(`${this.baseUrl}messages/otp/validated`, { directoryId, otpCode }, { 'operationName': 'privateGetValidatedOtp' });
|
|
31
|
+
}
|
|
32
|
+
async createTemplate(request) {
|
|
33
|
+
return await this.httpRequest.post(`${this.baseUrl}templates`, request, { 'operationName': 'backofficeCreateTemplate' });
|
|
34
|
+
}
|
|
35
|
+
async listTemplates(filters) {
|
|
36
|
+
return await this.httpRequest.get(`${this.baseUrl}templates`, filters, { 'operationName': 'backofficeListTemplates' });
|
|
37
|
+
}
|
|
38
|
+
async getTemplate(id) {
|
|
39
|
+
return await this.httpRequest.get(`${this.baseUrl}templates/${id}`, undefined, { 'operationName': 'backofficeGetTemplate' });
|
|
40
|
+
}
|
|
41
|
+
async updateTemplate(id, request) {
|
|
42
|
+
return await this.httpRequest.put(`${this.baseUrl}templates/${id}`, request, { 'operationName': 'backofficeUpdateTemplate' });
|
|
43
|
+
}
|
|
44
|
+
async deleteTemplate(id) {
|
|
45
|
+
return await this.httpRequest.delete(`${this.baseUrl}templates/${id}`, undefined, { 'operationName': 'backofficeDeleteTemplate' });
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
exports.MessagesBusinessApi = MessagesBusinessApi;
|
|
49
|
+
exports.MessagesBusinessApi = MessagesBusinessApi = __decorate([
|
|
50
|
+
(0, inversify_1.injectable)(),
|
|
51
|
+
__param(0, (0, inversify_1.inject)('IHttpRequest')),
|
|
52
|
+
__metadata("design:paramtypes", [Object])
|
|
53
|
+
], MessagesBusinessApi);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import FiadoApiResponse from '@fiado/type-kit/bin/apiResponse/dtos/FiadoApiResponse';
|
|
2
|
+
import { SendMessageRequest, SendMessageResponse, VerifyOtpRequest, VerifyOtpResponse, OtpValidatedResponse, TemplateMessageCreateRequest, TemplateMessageUpdateRequest, TemplateMessageResponse, TemplateMessageListResponse, TemplateMessageListFiltersRequest } from '@fiado/type-kit/bin/messagesConnector';
|
|
3
|
+
export interface IMessagesBusinessApi {
|
|
4
|
+
sendMessage(request: SendMessageRequest): Promise<FiadoApiResponse<SendMessageResponse>>;
|
|
5
|
+
verifyOtp(request: VerifyOtpRequest): Promise<FiadoApiResponse<VerifyOtpResponse>>;
|
|
6
|
+
getValidatedOtp(directoryId: string, otpCode: string): Promise<FiadoApiResponse<OtpValidatedResponse>>;
|
|
7
|
+
createTemplate(request: TemplateMessageCreateRequest): Promise<FiadoApiResponse<TemplateMessageResponse>>;
|
|
8
|
+
listTemplates(filters: TemplateMessageListFiltersRequest): Promise<FiadoApiResponse<TemplateMessageListResponse>>;
|
|
9
|
+
getTemplate(id: string): Promise<FiadoApiResponse<TemplateMessageResponse>>;
|
|
10
|
+
updateTemplate(id: string, request: TemplateMessageUpdateRequest): Promise<FiadoApiResponse<TemplateMessageResponse>>;
|
|
11
|
+
deleteTemplate(id: string): Promise<FiadoApiResponse<void>>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.MessagesBusinessPublisher = void 0;
|
|
21
|
+
__exportStar(require("./api/MessagesBusinessApi"), exports);
|
|
22
|
+
__exportStar(require("./api/interfaces/IMessagesBusinessApi"), exports);
|
|
23
|
+
var MessagesBusinessPublisher_1 = require("./queue/MessagesBusinessPublisher");
|
|
24
|
+
Object.defineProperty(exports, "MessagesBusinessPublisher", { enumerable: true, get: function () { return __importDefault(MessagesBusinessPublisher_1).default; } });
|
|
25
|
+
__exportStar(require("./queue/interfaces/IMessagesBusinessPublisher"), exports);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { NotificationQueueMessageRequestV2 } from '@fiado/type-kit/bin/messagesConnector';
|
|
2
|
+
import { IMessagesBusinessPublisher } from './interfaces/IMessagesBusinessPublisher';
|
|
3
|
+
export default class MessagesBusinessPublisher implements IMessagesBusinessPublisher {
|
|
4
|
+
private readonly queueUrl;
|
|
5
|
+
private readonly sqsClient;
|
|
6
|
+
publish(message: NotificationQueueMessageRequestV2): Promise<void>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
const inversify_1 = require("inversify");
|
|
10
|
+
const client_sqs_1 = require("@aws-sdk/client-sqs");
|
|
11
|
+
const logger_1 = require("@fiado/logger");
|
|
12
|
+
let MessagesBusinessPublisher = class MessagesBusinessPublisher {
|
|
13
|
+
queueUrl = process.env.MESSAGES_BUSINESS_QUEUE_URL;
|
|
14
|
+
sqsClient = new client_sqs_1.SQSClient({ region: process.env.AWS_REGION });
|
|
15
|
+
async publish(message) {
|
|
16
|
+
const t0 = Date.now();
|
|
17
|
+
try {
|
|
18
|
+
const result = await this.sqsClient.send(new client_sqs_1.SendMessageCommand({
|
|
19
|
+
QueueUrl: this.queueUrl,
|
|
20
|
+
MessageBody: JSON.stringify(message),
|
|
21
|
+
}));
|
|
22
|
+
logger_1.log.info('MessagesBusinessPublisher.publish ok', {
|
|
23
|
+
messageId: result.MessageId,
|
|
24
|
+
latencyMs: Date.now() - t0,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
// Propaga el error crudo del SQSClient (NO envolver en new Error(string) = antipatron).
|
|
29
|
+
// Log de contexto + re-throw para que el caller decida.
|
|
30
|
+
logger_1.log.error('MessagesBusinessPublisher.publish failed', {
|
|
31
|
+
latencyMs: Date.now() - t0,
|
|
32
|
+
errorName: error?.name,
|
|
33
|
+
});
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
MessagesBusinessPublisher = __decorate([
|
|
39
|
+
(0, inversify_1.injectable)()
|
|
40
|
+
], MessagesBusinessPublisher);
|
|
41
|
+
exports.default = MessagesBusinessPublisher;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fiado/api-invoker",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.7.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
|
"main": "bin/index.js",
|
|
6
6
|
"types": "bin/index.d.ts",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"@fiado/gateway-adapter": "^2.0.0",
|
|
18
18
|
"@fiado/http-client": "^2.0.0",
|
|
19
19
|
"@fiado/logger": "^1.0.3",
|
|
20
|
-
"@fiado/type-kit": "^3.
|
|
20
|
+
"@fiado/type-kit": "^3.45.0",
|
|
21
21
|
"dotenv": "^16.4.7"
|
|
22
22
|
},
|
|
23
23
|
"peerDependencies": {
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@types/jest": "^30.0.0",
|
|
29
29
|
"@types/node": "^25.9.1",
|
|
30
|
+
"aws-sdk-client-mock": "^4.1.0",
|
|
30
31
|
"inversify": "^8.1.0",
|
|
31
32
|
"jest": "^30.4.2",
|
|
32
33
|
"reflect-metadata": "^0.2.2",
|
package/src/container.config.ts
CHANGED
|
@@ -156,6 +156,10 @@ import { ICognitoBackofficeConnectorApi } from "./cognitoBackofficeConnector";
|
|
|
156
156
|
import CognitoBackofficeConnectorApi from "./cognitoBackofficeConnector/api/CognitoBackofficeConnectorApi";
|
|
157
157
|
import { IPlatformRbacBusinessApi } from "./platformRbac";
|
|
158
158
|
import PlatformRbacBusinessApi from "./platformRbac/api/PlatformRbacBusinessApi";
|
|
159
|
+
// Messages business — API client + OTP/notifications SQS publisher (Fase 0 SureKeep)
|
|
160
|
+
import { IMessagesBusinessApi, MessagesBusinessApi } from "./messages-business";
|
|
161
|
+
import MessagesBusinessPublisher from "./messages-business/queue/MessagesBusinessPublisher";
|
|
162
|
+
import { IMessagesBusinessPublisher } from "./messages-business/queue/interfaces/IMessagesBusinessPublisher";
|
|
159
163
|
|
|
160
164
|
export const apiInvokerBindings = new ContainerModule(({ bind }) => {
|
|
161
165
|
// UTILS bindings
|
|
@@ -278,4 +282,8 @@ export const apiInvokerBindings = new ContainerModule(({ bind }) => {
|
|
|
278
282
|
|
|
279
283
|
// Platform RBAC business — Custom Auth Challenge endpoints (Fase 0 SureKeep)
|
|
280
284
|
bind<IPlatformRbacBusinessApi>("IPlatformRbacBusinessApi").to(PlatformRbacBusinessApi);
|
|
285
|
+
|
|
286
|
+
// Messages business — API client + OTP/notifications SQS publisher (Fase 0 SureKeep)
|
|
287
|
+
bind<IMessagesBusinessApi>("IMessagesBusinessApi").to(MessagesBusinessApi);
|
|
288
|
+
bind<IMessagesBusinessPublisher>("IMessagesBusinessPublisher").to(MessagesBusinessPublisher);
|
|
281
289
|
});
|
package/src/index.ts
CHANGED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { inject, injectable } from 'inversify';
|
|
2
|
+
import type { IHttpRequest } from '@fiado/http-client';
|
|
3
|
+
import FiadoApiResponse from '@fiado/type-kit/bin/apiResponse/dtos/FiadoApiResponse';
|
|
4
|
+
import {
|
|
5
|
+
SendMessageRequest, SendMessageResponse,
|
|
6
|
+
VerifyOtpRequest, VerifyOtpResponse,
|
|
7
|
+
OtpValidatedResponse,
|
|
8
|
+
TemplateMessageCreateRequest, TemplateMessageUpdateRequest,
|
|
9
|
+
TemplateMessageResponse, TemplateMessageListResponse, TemplateMessageListFiltersRequest,
|
|
10
|
+
} from '@fiado/type-kit/bin/messagesConnector';
|
|
11
|
+
import { IMessagesBusinessApi } from './interfaces/IMessagesBusinessApi';
|
|
12
|
+
|
|
13
|
+
@injectable()
|
|
14
|
+
export class MessagesBusinessApi implements IMessagesBusinessApi {
|
|
15
|
+
private readonly baseUrl = process.env.MESSAGES_BUSINESS_URL || '';
|
|
16
|
+
|
|
17
|
+
constructor(@inject('IHttpRequest') private readonly httpRequest: IHttpRequest) {}
|
|
18
|
+
|
|
19
|
+
async sendMessage(request: SendMessageRequest): Promise<FiadoApiResponse<SendMessageResponse>> {
|
|
20
|
+
return await this.httpRequest.post(`${this.baseUrl}messages/send`, request, { 'operationName': 'privateSendMessage' });
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
async verifyOtp(request: VerifyOtpRequest): Promise<FiadoApiResponse<VerifyOtpResponse>> {
|
|
24
|
+
return await this.httpRequest.post(`${this.baseUrl}messages/otp/verify`, request, { 'operationName': 'privateVerifyOtp' });
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async getValidatedOtp(directoryId: string, otpCode: string): Promise<FiadoApiResponse<OtpValidatedResponse>> {
|
|
28
|
+
return await this.httpRequest.get(`${this.baseUrl}messages/otp/validated`, { directoryId, otpCode }, { 'operationName': 'privateGetValidatedOtp' });
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
async createTemplate(request: TemplateMessageCreateRequest): Promise<FiadoApiResponse<TemplateMessageResponse>> {
|
|
32
|
+
return await this.httpRequest.post(`${this.baseUrl}templates`, request, { 'operationName': 'backofficeCreateTemplate' });
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
async listTemplates(filters: TemplateMessageListFiltersRequest): Promise<FiadoApiResponse<TemplateMessageListResponse>> {
|
|
36
|
+
return await this.httpRequest.get(`${this.baseUrl}templates`, filters as Record<string, unknown>, { 'operationName': 'backofficeListTemplates' });
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async getTemplate(id: string): Promise<FiadoApiResponse<TemplateMessageResponse>> {
|
|
40
|
+
return await this.httpRequest.get(`${this.baseUrl}templates/${id}`, undefined, { 'operationName': 'backofficeGetTemplate' });
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async updateTemplate(id: string, request: TemplateMessageUpdateRequest): Promise<FiadoApiResponse<TemplateMessageResponse>> {
|
|
44
|
+
return await this.httpRequest.put(`${this.baseUrl}templates/${id}`, request, { 'operationName': 'backofficeUpdateTemplate' });
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async deleteTemplate(id: string): Promise<FiadoApiResponse<void>> {
|
|
48
|
+
return await this.httpRequest.delete(`${this.baseUrl}templates/${id}`, undefined, { 'operationName': 'backofficeDeleteTemplate' });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import FiadoApiResponse from '@fiado/type-kit/bin/apiResponse/dtos/FiadoApiResponse';
|
|
2
|
+
import {
|
|
3
|
+
SendMessageRequest, SendMessageResponse,
|
|
4
|
+
VerifyOtpRequest, VerifyOtpResponse,
|
|
5
|
+
OtpValidatedResponse,
|
|
6
|
+
TemplateMessageCreateRequest, TemplateMessageUpdateRequest,
|
|
7
|
+
TemplateMessageResponse, TemplateMessageListResponse, TemplateMessageListFiltersRequest,
|
|
8
|
+
} from '@fiado/type-kit/bin/messagesConnector';
|
|
9
|
+
|
|
10
|
+
export interface IMessagesBusinessApi {
|
|
11
|
+
sendMessage(request: SendMessageRequest): Promise<FiadoApiResponse<SendMessageResponse>>;
|
|
12
|
+
verifyOtp(request: VerifyOtpRequest): Promise<FiadoApiResponse<VerifyOtpResponse>>;
|
|
13
|
+
getValidatedOtp(directoryId: string, otpCode: string): Promise<FiadoApiResponse<OtpValidatedResponse>>;
|
|
14
|
+
|
|
15
|
+
createTemplate(request: TemplateMessageCreateRequest): Promise<FiadoApiResponse<TemplateMessageResponse>>;
|
|
16
|
+
listTemplates(filters: TemplateMessageListFiltersRequest): Promise<FiadoApiResponse<TemplateMessageListResponse>>;
|
|
17
|
+
getTemplate(id: string): Promise<FiadoApiResponse<TemplateMessageResponse>>;
|
|
18
|
+
updateTemplate(id: string, request: TemplateMessageUpdateRequest): Promise<FiadoApiResponse<TemplateMessageResponse>>;
|
|
19
|
+
deleteTemplate(id: string): Promise<FiadoApiResponse<void>>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { injectable } from 'inversify';
|
|
2
|
+
import { SendMessageCommand, SQSClient } from '@aws-sdk/client-sqs';
|
|
3
|
+
import { log } from '@fiado/logger';
|
|
4
|
+
import { NotificationQueueMessageRequestV2 } from '@fiado/type-kit/bin/messagesConnector';
|
|
5
|
+
import { IMessagesBusinessPublisher } from './interfaces/IMessagesBusinessPublisher';
|
|
6
|
+
|
|
7
|
+
@injectable()
|
|
8
|
+
export default class MessagesBusinessPublisher implements IMessagesBusinessPublisher {
|
|
9
|
+
private readonly queueUrl = process.env.MESSAGES_BUSINESS_QUEUE_URL!;
|
|
10
|
+
private readonly sqsClient = new SQSClient({ region: process.env.AWS_REGION });
|
|
11
|
+
|
|
12
|
+
async publish(message: NotificationQueueMessageRequestV2): Promise<void> {
|
|
13
|
+
const t0 = Date.now();
|
|
14
|
+
try {
|
|
15
|
+
const result = await this.sqsClient.send(new SendMessageCommand({
|
|
16
|
+
QueueUrl: this.queueUrl,
|
|
17
|
+
MessageBody: JSON.stringify(message),
|
|
18
|
+
}));
|
|
19
|
+
log.info('MessagesBusinessPublisher.publish ok', {
|
|
20
|
+
messageId: result.MessageId,
|
|
21
|
+
latencyMs: Date.now() - t0,
|
|
22
|
+
});
|
|
23
|
+
} catch (error) {
|
|
24
|
+
// Propaga el error crudo del SQSClient (NO envolver en new Error(string) = antipatron).
|
|
25
|
+
// Log de contexto + re-throw para que el caller decida.
|
|
26
|
+
log.error('MessagesBusinessPublisher.publish failed', {
|
|
27
|
+
latencyMs: Date.now() - t0,
|
|
28
|
+
errorName: (error as Error)?.name,
|
|
29
|
+
});
|
|
30
|
+
throw error;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|