@fiado/api-invoker 4.6.0 → 4.8.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/cognitoBackofficeConnector/api/CognitoBackofficeConnectorApi.d.ts +3 -2
- package/bin/cognitoBackofficeConnector/api/CognitoBackofficeConnectorApi.js +5 -1
- package/bin/cognitoBackofficeConnector/api/interfaces/ICognitoBackofficeConnectorApi.d.ts +7 -1
- 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/cognitoBackofficeConnector/api/CognitoBackofficeConnectorApi.ts +11 -2
- package/src/cognitoBackofficeConnector/api/interfaces/ICognitoBackofficeConnectorApi.ts +12 -1
- 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
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { IHttpRequest } from "@fiado/http-client";
|
|
1
|
+
import type { IHttpRequest } from "@fiado/http-client";
|
|
2
2
|
import { ApiGatewayResponse } from "@fiado/gateway-adapter";
|
|
3
|
-
import { CreateUserRequest, CreateUserResponse, UpdateUserAttributesRequest, UserActionRequest, ResendInvitationRequest, UserDetailResponse, AuthEventsRequest, AuthEventResponse, InitiateAuthRequest, InitiateAuthResponse, RespondToChallengeRequest, RespondToChallengeResponse, RefreshTokensRequest, RefreshTokensResponse, ForgotPasswordRequest, ConfirmForgotPasswordRequest, ResendConfirmationRequest, ChangePasswordRequest, TotpBeginRequest, TotpBeginResponse, TotpVerifyRequest, MfaVerifyResponse, SetMfaPreferenceRequest, MfaResetRequest, UpdateEmailRequest, VerifyEmailRequest, UpdateProfileRequest, CreatePoolRequest, CreatePoolResponse, HealthcheckResponse } from "@fiado/type-kit/bin/cognitoBackofficeConnector";
|
|
3
|
+
import { CreateUserRequest, CreateUserResponse, UpdateUserAttributesRequest, UserActionRequest, ResendInvitationRequest, UserDetailResponse, AuthEventsRequest, AuthEventResponse, InitiateAuthRequest, InitiateAuthResponse, RespondToChallengeRequest, RespondToChallengeResponse, RefreshTokensRequest, RefreshTokensResponse, ForgotPasswordRequest, ConfirmForgotPasswordRequest, ResendConfirmationRequest, ChangePasswordRequest, TotpBeginRequest, TotpBeginResponse, TotpVerifyRequest, MfaVerifyResponse, SetMfaPreferenceRequest, MfaResetRequest, UpdateEmailRequest, VerifyEmailRequest, UpdateProfileRequest, CreatePoolRequest, CreatePoolResponse, HealthcheckResponse, VerifyPasswordRequest, VerifyPasswordResponse } from "@fiado/type-kit/bin/cognitoBackofficeConnector";
|
|
4
4
|
import { ICognitoBackofficeConnectorApi } from "./interfaces/ICognitoBackofficeConnectorApi";
|
|
5
5
|
/**
|
|
6
6
|
* Publisher HTTP del lambda `cognito-backoffice-connector` (componente 05 SureKeep Fase 0).
|
|
@@ -36,6 +36,7 @@ export default class CognitoBackofficeConnectorApi implements ICognitoBackoffice
|
|
|
36
36
|
setMfaPreference(input: SetMfaPreferenceRequest): Promise<ApiGatewayResponse<void>>;
|
|
37
37
|
resetUserMfa(cognitoSub: string, input: MfaResetRequest): Promise<ApiGatewayResponse<void>>;
|
|
38
38
|
authInitiate(input: InitiateAuthRequest): Promise<ApiGatewayResponse<InitiateAuthResponse>>;
|
|
39
|
+
authVerifyPassword(input: VerifyPasswordRequest): Promise<ApiGatewayResponse<VerifyPasswordResponse>>;
|
|
39
40
|
authRespondChallenge(input: RespondToChallengeRequest): Promise<ApiGatewayResponse<RespondToChallengeResponse>>;
|
|
40
41
|
authRefreshTokens(input: RefreshTokensRequest): Promise<ApiGatewayResponse<RefreshTokensResponse>>;
|
|
41
42
|
authForgotPassword(input: ForgotPasswordRequest): Promise<ApiGatewayResponse<void>>;
|
|
@@ -86,11 +86,15 @@ let CognitoBackofficeConnectorApi = class CognitoBackofficeConnectorApi {
|
|
|
86
86
|
const url = `${this.baseUrl}/users/${encodeURIComponent(cognitoSub)}/mfa/reset`;
|
|
87
87
|
return await this.httpRequest.post(url, input);
|
|
88
88
|
}
|
|
89
|
-
// ============= Auth flow no-admin BFF M18 (
|
|
89
|
+
// ============= Auth flow no-admin BFF M18 (8) =============
|
|
90
90
|
async authInitiate(input) {
|
|
91
91
|
const url = `${this.baseUrl}/auth/initiate`;
|
|
92
92
|
return await this.httpRequest.post(url, input);
|
|
93
93
|
}
|
|
94
|
+
async authVerifyPassword(input) {
|
|
95
|
+
const url = `${this.baseUrl}/auth/verify-password`;
|
|
96
|
+
return await this.httpRequest.post(url, input);
|
|
97
|
+
}
|
|
94
98
|
async authRespondChallenge(input) {
|
|
95
99
|
const url = `${this.baseUrl}/auth/respond-challenge`;
|
|
96
100
|
return await this.httpRequest.post(url, input);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ApiGatewayResponse } from "@fiado/gateway-adapter";
|
|
2
|
-
import { CreateUserRequest, CreateUserResponse, UpdateUserAttributesRequest, UserActionRequest, ResendInvitationRequest, UserDetailResponse, AuthEventsRequest, AuthEventResponse, InitiateAuthRequest, InitiateAuthResponse, RespondToChallengeRequest, RespondToChallengeResponse, RefreshTokensRequest, RefreshTokensResponse, ForgotPasswordRequest, ConfirmForgotPasswordRequest, ResendConfirmationRequest, ChangePasswordRequest, TotpBeginRequest, TotpBeginResponse, TotpVerifyRequest, MfaVerifyResponse, SetMfaPreferenceRequest, MfaResetRequest, UpdateEmailRequest, VerifyEmailRequest, UpdateProfileRequest, CreatePoolRequest, CreatePoolResponse, HealthcheckResponse } from "@fiado/type-kit/bin/cognitoBackofficeConnector";
|
|
2
|
+
import { CreateUserRequest, CreateUserResponse, UpdateUserAttributesRequest, UserActionRequest, ResendInvitationRequest, UserDetailResponse, AuthEventsRequest, AuthEventResponse, InitiateAuthRequest, InitiateAuthResponse, RespondToChallengeRequest, RespondToChallengeResponse, RefreshTokensRequest, RefreshTokensResponse, ForgotPasswordRequest, ConfirmForgotPasswordRequest, ResendConfirmationRequest, ChangePasswordRequest, TotpBeginRequest, TotpBeginResponse, TotpVerifyRequest, MfaVerifyResponse, SetMfaPreferenceRequest, MfaResetRequest, UpdateEmailRequest, VerifyEmailRequest, UpdateProfileRequest, CreatePoolRequest, CreatePoolResponse, HealthcheckResponse, VerifyPasswordRequest, VerifyPasswordResponse } from "@fiado/type-kit/bin/cognitoBackofficeConnector";
|
|
3
3
|
/**
|
|
4
4
|
* Contrato del publisher HTTP del lambda `cognito-backoffice-connector` (componente 05 SureKeep Fase 0).
|
|
5
5
|
*
|
|
@@ -44,6 +44,12 @@ export interface ICognitoBackofficeConnectorApi {
|
|
|
44
44
|
resetUserMfa(cognitoSub: string, input: MfaResetRequest): Promise<ApiGatewayResponse<void>>;
|
|
45
45
|
/** POST /auth/initiate — inicia auth flow no-admin (devuelve tokens o challenge). */
|
|
46
46
|
authInitiate(input: InitiateAuthRequest): Promise<ApiGatewayResponse<InitiateAuthResponse>>;
|
|
47
|
+
/**
|
|
48
|
+
* POST /auth/verify-password — valida un password contra Cognito (DEC-AUTH-012).
|
|
49
|
+
* El connector encapsula el mecanismo (hoy ADMIN_USER_PASSWORD_AUTH) y devuelve
|
|
50
|
+
* solo un veredicto `{ valid }`. El caller (rbac) NO conoce el mecanismo.
|
|
51
|
+
*/
|
|
52
|
+
authVerifyPassword(input: VerifyPasswordRequest): Promise<ApiGatewayResponse<VerifyPasswordResponse>>;
|
|
47
53
|
/** POST /auth/respond-challenge — responde a challenge pendiente (devuelve tokens o nuevo challenge). */
|
|
48
54
|
authRespondChallenge(input: RespondToChallengeRequest): Promise<ApiGatewayResponse<RespondToChallengeResponse>>;
|
|
49
55
|
/** POST /auth/refresh-tokens — refresca accessToken+idToken usando refreshToken. */
|
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.8.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.46.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",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { inject, injectable } from "inversify";
|
|
2
|
-
import { IHttpRequest } from "@fiado/http-client";
|
|
2
|
+
import type { IHttpRequest } from "@fiado/http-client";
|
|
3
3
|
import { ApiGatewayResponse } from "@fiado/gateway-adapter";
|
|
4
4
|
import {
|
|
5
5
|
CreateUserRequest,
|
|
@@ -33,6 +33,8 @@ import {
|
|
|
33
33
|
CreatePoolResponse,
|
|
34
34
|
DeletePoolRequest,
|
|
35
35
|
HealthcheckResponse,
|
|
36
|
+
VerifyPasswordRequest,
|
|
37
|
+
VerifyPasswordResponse,
|
|
36
38
|
} from "@fiado/type-kit/bin/cognitoBackofficeConnector";
|
|
37
39
|
import { ICognitoBackofficeConnectorApi } from "./interfaces/ICognitoBackofficeConnectorApi";
|
|
38
40
|
|
|
@@ -159,7 +161,7 @@ export default class CognitoBackofficeConnectorApi implements ICognitoBackoffice
|
|
|
159
161
|
return await this.httpRequest.post(url, input);
|
|
160
162
|
}
|
|
161
163
|
|
|
162
|
-
// ============= Auth flow no-admin BFF M18 (
|
|
164
|
+
// ============= Auth flow no-admin BFF M18 (8) =============
|
|
163
165
|
|
|
164
166
|
async authInitiate(
|
|
165
167
|
input: InitiateAuthRequest,
|
|
@@ -168,6 +170,13 @@ export default class CognitoBackofficeConnectorApi implements ICognitoBackoffice
|
|
|
168
170
|
return await this.httpRequest.post(url, input);
|
|
169
171
|
}
|
|
170
172
|
|
|
173
|
+
async authVerifyPassword(
|
|
174
|
+
input: VerifyPasswordRequest,
|
|
175
|
+
): Promise<ApiGatewayResponse<VerifyPasswordResponse>> {
|
|
176
|
+
const url = `${this.baseUrl}/auth/verify-password`;
|
|
177
|
+
return await this.httpRequest.post(url, input);
|
|
178
|
+
}
|
|
179
|
+
|
|
171
180
|
async authRespondChallenge(
|
|
172
181
|
input: RespondToChallengeRequest,
|
|
173
182
|
): Promise<ApiGatewayResponse<RespondToChallengeResponse>> {
|
|
@@ -31,6 +31,8 @@ import {
|
|
|
31
31
|
CreatePoolResponse,
|
|
32
32
|
DeletePoolRequest,
|
|
33
33
|
HealthcheckResponse,
|
|
34
|
+
VerifyPasswordRequest,
|
|
35
|
+
VerifyPasswordResponse,
|
|
34
36
|
} from "@fiado/type-kit/bin/cognitoBackofficeConnector";
|
|
35
37
|
|
|
36
38
|
/**
|
|
@@ -110,11 +112,20 @@ export interface ICognitoBackofficeConnectorApi {
|
|
|
110
112
|
input: MfaResetRequest,
|
|
111
113
|
): Promise<ApiGatewayResponse<void>>;
|
|
112
114
|
|
|
113
|
-
// ============= Auth flow no-admin BFF M18 (
|
|
115
|
+
// ============= Auth flow no-admin BFF M18 (8) =============
|
|
114
116
|
|
|
115
117
|
/** POST /auth/initiate — inicia auth flow no-admin (devuelve tokens o challenge). */
|
|
116
118
|
authInitiate(input: InitiateAuthRequest): Promise<ApiGatewayResponse<InitiateAuthResponse>>;
|
|
117
119
|
|
|
120
|
+
/**
|
|
121
|
+
* POST /auth/verify-password — valida un password contra Cognito (DEC-AUTH-012).
|
|
122
|
+
* El connector encapsula el mecanismo (hoy ADMIN_USER_PASSWORD_AUTH) y devuelve
|
|
123
|
+
* solo un veredicto `{ valid }`. El caller (rbac) NO conoce el mecanismo.
|
|
124
|
+
*/
|
|
125
|
+
authVerifyPassword(
|
|
126
|
+
input: VerifyPasswordRequest,
|
|
127
|
+
): Promise<ApiGatewayResponse<VerifyPasswordResponse>>;
|
|
128
|
+
|
|
118
129
|
/** POST /auth/respond-challenge — responde a challenge pendiente (devuelve tokens o nuevo challenge). */
|
|
119
130
|
authRespondChallenge(
|
|
120
131
|
input: RespondToChallengeRequest,
|
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
|
+
}
|