@fiado/api-invoker 5.72.0 → 5.74.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.
@@ -1,6 +1,6 @@
1
1
  import type { IHttpRequest } from "@fiado/http-client";
2
2
  import { StandardResponse } from "@fiado/gateway-adapter";
3
- import { ActivationCheckRequest, ActivationCheckResponse, CreditPaymentAppliedRequest, CreditPaymentAppliedResponse, CreditSettledRequest, CreditSettledResponse, LoanBorrowerResponse, LoanCreditResponse, OriginateLoanCreditRequest, OriginateLoanCreditResponse, QuoteLoanCreditRequest, QuoteLoanCreditResponse, SignLoanCreditRequest, SignLoanCreditResponse, UpsertLoanBorrowerRequest } from "@fiado/type-kit/bin/loanCredit/index.js";
3
+ import { ActivationCheckRequest, ActivationCheckResponse, CreditPaymentAppliedRequest, CreditPaymentAppliedResponse, CreditSettledRequest, CreditSettledResponse, LoanBorrowerResponse, ListMessagingCandidatesRequest, ListMessagingCandidatesResponse, LoanCreditResponse, OriginateLoanCreditRequest, OriginateLoanCreditResponse, QuoteLoanCreditRequest, QuoteLoanCreditResponse, SignLoanCreditRequest, SignLoanCreditResponse, UpsertLoanBorrowerRequest } from "@fiado/type-kit/bin/loanCredit/index.js";
4
4
  import { LoanCreditAnalyticsBatchRequest, LoanCreditAnalyticsBatchResponse } from "./dtos/LoanCreditAnalyticsBatch.js";
5
5
  import { CustomerCreditHistoryResponse } from "./dtos/CustomerCreditHistory.js";
6
6
  import { ILoanCreditBusinessApi } from "./interfaces/ILoanCreditBusinessApi.js";
@@ -32,4 +32,5 @@ export default class LoanCreditBusinessApi implements ILoanCreditBusinessApi {
32
32
  getCustomerCreditHistory(retailCustomerId: string, tenantId: string): Promise<StandardResponse<CustomerCreditHistoryResponse>>;
33
33
  batchGetCreditAnalytics(input: LoanCreditAnalyticsBatchRequest, tenantId: string): Promise<StandardResponse<LoanCreditAnalyticsBatchResponse>>;
34
34
  upsertBorrower(input: UpsertLoanBorrowerRequest, tenantId: string): Promise<StandardResponse<LoanBorrowerResponse>>;
35
+ listMessagingCandidates(input: ListMessagingCandidatesRequest, tenantId: string): Promise<StandardResponse<ListMessagingCandidatesResponse>>;
35
36
  }
@@ -78,6 +78,10 @@ let LoanCreditBusinessApi = class LoanCreditBusinessApi {
78
78
  const url = `${this.baseUrl}/private/borrowers?tenantId=${encodeURIComponent(tenantId)}`;
79
79
  return await this.httpRequest.post(url, input);
80
80
  }
81
+ async listMessagingCandidates(input, tenantId) {
82
+ const url = `${this.baseUrl}/private/messaging/candidates?tenantId=${encodeURIComponent(tenantId)}`;
83
+ return await this.httpRequest.post(url, input);
84
+ }
81
85
  };
82
86
  LoanCreditBusinessApi = __decorate([
83
87
  injectable(),
@@ -1,5 +1,5 @@
1
1
  import { StandardResponse } from "@fiado/gateway-adapter";
2
- import { ActivationCheckRequest, CreditPaymentAppliedRequest, CreditPaymentAppliedResponse, CreditSettledRequest, CreditSettledResponse, ActivationCheckResponse, LoanBorrowerResponse, LoanCreditResponse, OriginateLoanCreditRequest, OriginateLoanCreditResponse, QuoteLoanCreditRequest, QuoteLoanCreditResponse, SignLoanCreditRequest, SignLoanCreditResponse, UpsertLoanBorrowerRequest } from "@fiado/type-kit/bin/loanCredit/index.js";
2
+ import { ActivationCheckRequest, CreditPaymentAppliedRequest, CreditPaymentAppliedResponse, CreditSettledRequest, CreditSettledResponse, ActivationCheckResponse, LoanBorrowerResponse, ListMessagingCandidatesRequest, ListMessagingCandidatesResponse, LoanCreditResponse, OriginateLoanCreditRequest, OriginateLoanCreditResponse, QuoteLoanCreditRequest, QuoteLoanCreditResponse, SignLoanCreditRequest, SignLoanCreditResponse, UpsertLoanBorrowerRequest } from "@fiado/type-kit/bin/loanCredit/index.js";
3
3
  import { LoanCreditAnalyticsBatchRequest, LoanCreditAnalyticsBatchResponse } from "../dtos/LoanCreditAnalyticsBatch.js";
4
4
  import { CustomerCreditHistoryResponse } from "../dtos/CustomerCreditHistory.js";
5
5
  /**
@@ -95,4 +95,13 @@ export interface ILoanCreditBusinessApi {
95
95
  * del evento `CustomerKycVerifiedV1` — fallback operativo mientras la cola no exista).
96
96
  */
97
97
  upsertBorrower(input: UpsertLoanBorrowerRequest, tenantId: string): Promise<StandardResponse<LoanBorrowerResponse>>;
98
+ /**
99
+ * Devuelve UNA PÁGINA de candidatos a mensaje del `slot` y el día de tienda pedidos: la persona,
100
+ * el momento que le toca, el canal y las variables ya resueltas. El motor barre su cartera, aplica
101
+ * el cupo diario y depura qué mensaje le toca a cada quien — el caller no resuelve nada de dominio.
102
+ *
103
+ * El cupo se consume aquí, así que reintentar una página NO manda el mensaje dos veces: quien ya
104
+ * recibió su aviso del día no vuelve a salir. `nextCursor` en `null` significa que ya no queda nadie.
105
+ */
106
+ listMessagingCandidates(input: ListMessagingCandidatesRequest, tenantId: string): Promise<StandardResponse<ListMessagingCandidatesResponse>>;
98
107
  }
@@ -9,10 +9,12 @@ 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
- 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>>;
12
+ createTemplate(tenantId: string, request: TemplateMessageCreateRequest): Promise<FiadoApiResponse<TemplateMessageResponse>>;
13
+ listTemplates(tenantId: string, filters: TemplateMessageListFiltersRequest): Promise<FiadoApiResponse<TemplateMessageListResponse>>;
14
+ getTemplate(tenantId: string, id: string): Promise<FiadoApiResponse<TemplateMessageResponse>>;
15
+ updateTemplate(tenantId: string, id: string, request: TemplateMessageUpdateRequest): Promise<FiadoApiResponse<TemplateMessageResponse>>;
16
+ deleteTemplate(tenantId: string, id: string): Promise<FiadoApiResponse<void>>;
17
+ /** Cuelga el `tenantId` del query string de una URL sin query previo. */
18
+ private withTenantId;
17
19
  }
18
20
  export {};
@@ -11,6 +11,9 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
11
  return function (target, key) { decorator(target, key, paramIndex); }
12
12
  };
13
13
  import { inject, injectable } from 'inversify';
14
+ import { joinUrl } from '../../utils/joinUrl.js';
15
+ // El CRUD de plantillas manda el `tenantId` en el query string. En POST y PUT se cuelga de la URL
16
+ // porque el http-client solo expone canal de params en GET y DELETE.
14
17
  let MessagesBusinessApi = class MessagesBusinessApi {
15
18
  httpRequest;
16
19
  baseUrl = process.env.MESSAGES_BUSINESS_URL || '';
@@ -26,20 +29,28 @@ let MessagesBusinessApi = class MessagesBusinessApi {
26
29
  async getValidatedOtp(directoryId, otpCode) {
27
30
  return await this.httpRequest.get(`${this.baseUrl}messages/otp/validated`, { directoryId, otpCode }, { 'operationName': 'privateGetValidatedOtp' });
28
31
  }
29
- async createTemplate(request) {
30
- return await this.httpRequest.post(`${this.baseUrl}templates`, request, { 'operationName': 'backofficeCreateTemplate' });
32
+ async createTemplate(tenantId, request) {
33
+ const url = this.withTenantId(joinUrl(this.baseUrl, 'templates'), tenantId);
34
+ return await this.httpRequest.post(url, request, { 'operationName': 'backofficeCreateTemplate' });
31
35
  }
32
- async listTemplates(filters) {
33
- return await this.httpRequest.get(`${this.baseUrl}templates`, filters, { 'operationName': 'backofficeListTemplates' });
36
+ async listTemplates(tenantId, filters) {
37
+ // El tenant explicito pisa el que venga en los filtros: si no, viajarian dos `tenantId`.
38
+ const params = { ...filters, tenantId };
39
+ return await this.httpRequest.get(joinUrl(this.baseUrl, 'templates'), params, { 'operationName': 'backofficeListTemplates' });
34
40
  }
35
- async getTemplate(id) {
36
- return await this.httpRequest.get(`${this.baseUrl}templates/${id}`, undefined, { 'operationName': 'backofficeGetTemplate' });
41
+ async getTemplate(tenantId, id) {
42
+ return await this.httpRequest.get(joinUrl(this.baseUrl, `templates/${id}`), { tenantId }, { 'operationName': 'backofficeGetTemplate' });
37
43
  }
38
- async updateTemplate(id, request) {
39
- return await this.httpRequest.put(`${this.baseUrl}templates/${id}`, request, { 'operationName': 'backofficeUpdateTemplate' });
44
+ async updateTemplate(tenantId, id, request) {
45
+ const url = this.withTenantId(joinUrl(this.baseUrl, `templates/${id}`), tenantId);
46
+ return await this.httpRequest.put(url, request, { 'operationName': 'backofficeUpdateTemplate' });
40
47
  }
41
- async deleteTemplate(id) {
42
- return await this.httpRequest.delete(`${this.baseUrl}templates/${id}`, undefined, { 'operationName': 'backofficeDeleteTemplate' });
48
+ async deleteTemplate(tenantId, id) {
49
+ return await this.httpRequest.delete(joinUrl(this.baseUrl, `templates/${id}`), { tenantId }, { 'operationName': 'backofficeDeleteTemplate' });
50
+ }
51
+ /** Cuelga el `tenantId` del query string de una URL sin query previo. */
52
+ withTenantId(url, tenantId) {
53
+ return `${url}?tenantId=${encodeURIComponent(tenantId)}`;
43
54
  }
44
55
  };
45
56
  MessagesBusinessApi = __decorate([
@@ -4,10 +4,14 @@ 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
- 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>>;
7
+ /**
8
+ * CRUD de plantillas. Los cinco viven en la API privada sin authorizer, asi que el `tenantId`
9
+ * es obligatorio y explicito: el lambda responde 400 TENANT_ID_REQUIRED si no llega.
10
+ */
11
+ createTemplate(tenantId: string, request: TemplateMessageCreateRequest): Promise<FiadoApiResponse<TemplateMessageResponse>>;
12
+ listTemplates(tenantId: string, filters: TemplateMessageListFiltersRequest): Promise<FiadoApiResponse<TemplateMessageListResponse>>;
13
+ getTemplate(tenantId: string, id: string): Promise<FiadoApiResponse<TemplateMessageResponse>>;
14
+ updateTemplate(tenantId: string, id: string, request: TemplateMessageUpdateRequest): Promise<FiadoApiResponse<TemplateMessageResponse>>;
15
+ deleteTemplate(tenantId: string, id: string): Promise<FiadoApiResponse<void>>;
12
16
  }
13
17
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/api-invoker",
3
- "version": "5.72.0",
3
+ "version": "5.74.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",
@@ -9,6 +9,8 @@ import {
9
9
  CreditSettledRequest,
10
10
  CreditSettledResponse,
11
11
  LoanBorrowerResponse,
12
+ ListMessagingCandidatesRequest,
13
+ ListMessagingCandidatesResponse,
12
14
  LoanCreditResponse,
13
15
  OriginateLoanCreditRequest,
14
16
  OriginateLoanCreditResponse,
@@ -144,4 +146,12 @@ export default class LoanCreditBusinessApi implements ILoanCreditBusinessApi {
144
146
  const url = `${this.baseUrl}/private/borrowers?tenantId=${encodeURIComponent(tenantId)}`;
145
147
  return await this.httpRequest.post(url, input);
146
148
  }
149
+
150
+ async listMessagingCandidates(
151
+ input: ListMessagingCandidatesRequest,
152
+ tenantId: string,
153
+ ): Promise<StandardResponse<ListMessagingCandidatesResponse>> {
154
+ const url = `${this.baseUrl}/private/messaging/candidates?tenantId=${encodeURIComponent(tenantId)}`;
155
+ return await this.httpRequest.post(url, input);
156
+ }
147
157
  }
@@ -7,6 +7,8 @@ import {
7
7
  CreditSettledResponse,
8
8
  ActivationCheckResponse,
9
9
  LoanBorrowerResponse,
10
+ ListMessagingCandidatesRequest,
11
+ ListMessagingCandidatesResponse,
10
12
  LoanCreditResponse,
11
13
  OriginateLoanCreditRequest,
12
14
  OriginateLoanCreditResponse,
@@ -167,4 +169,17 @@ export interface ILoanCreditBusinessApi {
167
169
  input: UpsertLoanBorrowerRequest,
168
170
  tenantId: string,
169
171
  ): Promise<StandardResponse<LoanBorrowerResponse>>;
172
+
173
+ /**
174
+ * Devuelve UNA PÁGINA de candidatos a mensaje del `slot` y el día de tienda pedidos: la persona,
175
+ * el momento que le toca, el canal y las variables ya resueltas. El motor barre su cartera, aplica
176
+ * el cupo diario y depura qué mensaje le toca a cada quien — el caller no resuelve nada de dominio.
177
+ *
178
+ * El cupo se consume aquí, así que reintentar una página NO manda el mensaje dos veces: quien ya
179
+ * recibió su aviso del día no vuelve a salir. `nextCursor` en `null` significa que ya no queda nadie.
180
+ */
181
+ listMessagingCandidates(
182
+ input: ListMessagingCandidatesRequest,
183
+ tenantId: string,
184
+ ): Promise<StandardResponse<ListMessagingCandidatesResponse>>;
170
185
  }
@@ -9,7 +9,10 @@ import {
9
9
  TemplateMessageResponse, TemplateMessageListResponse, TemplateMessageListFiltersRequest,
10
10
  } from '@fiado/type-kit/bin/messagesConnector/index.js';
11
11
  import { IMessagesBusinessApi } from './interfaces/IMessagesBusinessApi.js';
12
+ import { joinUrl } from '../../utils/joinUrl.js';
12
13
 
14
+ // El CRUD de plantillas manda el `tenantId` en el query string. En POST y PUT se cuelga de la URL
15
+ // porque el http-client solo expone canal de params en GET y DELETE.
13
16
  @injectable()
14
17
  export class MessagesBusinessApi implements IMessagesBusinessApi {
15
18
  private readonly baseUrl = process.env.MESSAGES_BUSINESS_URL || '';
@@ -28,23 +31,32 @@ export class MessagesBusinessApi implements IMessagesBusinessApi {
28
31
  return await this.httpRequest.get(`${this.baseUrl}messages/otp/validated`, { directoryId, otpCode }, { 'operationName': 'privateGetValidatedOtp' });
29
32
  }
30
33
 
31
- async createTemplate(request: TemplateMessageCreateRequest): Promise<FiadoApiResponse<TemplateMessageResponse>> {
32
- return await this.httpRequest.post(`${this.baseUrl}templates`, request, { 'operationName': 'backofficeCreateTemplate' });
34
+ async createTemplate(tenantId: string, request: TemplateMessageCreateRequest): Promise<FiadoApiResponse<TemplateMessageResponse>> {
35
+ const url = this.withTenantId(joinUrl(this.baseUrl, 'templates'), tenantId);
36
+ return await this.httpRequest.post(url, request, { 'operationName': 'backofficeCreateTemplate' });
33
37
  }
34
38
 
35
- async listTemplates(filters: TemplateMessageListFiltersRequest): Promise<FiadoApiResponse<TemplateMessageListResponse>> {
36
- return await this.httpRequest.get(`${this.baseUrl}templates`, filters as Record<string, unknown>, { 'operationName': 'backofficeListTemplates' });
39
+ async listTemplates(tenantId: string, filters: TemplateMessageListFiltersRequest): Promise<FiadoApiResponse<TemplateMessageListResponse>> {
40
+ // El tenant explicito pisa el que venga en los filtros: si no, viajarian dos `tenantId`.
41
+ const params = { ...filters, tenantId } as Record<string, unknown>;
42
+ return await this.httpRequest.get(joinUrl(this.baseUrl, 'templates'), params, { 'operationName': 'backofficeListTemplates' });
37
43
  }
38
44
 
39
- async getTemplate(id: string): Promise<FiadoApiResponse<TemplateMessageResponse>> {
40
- return await this.httpRequest.get(`${this.baseUrl}templates/${id}`, undefined, { 'operationName': 'backofficeGetTemplate' });
45
+ async getTemplate(tenantId: string, id: string): Promise<FiadoApiResponse<TemplateMessageResponse>> {
46
+ return await this.httpRequest.get(joinUrl(this.baseUrl, `templates/${id}`), { tenantId }, { 'operationName': 'backofficeGetTemplate' });
41
47
  }
42
48
 
43
- async updateTemplate(id: string, request: TemplateMessageUpdateRequest): Promise<FiadoApiResponse<TemplateMessageResponse>> {
44
- return await this.httpRequest.put(`${this.baseUrl}templates/${id}`, request, { 'operationName': 'backofficeUpdateTemplate' });
49
+ async updateTemplate(tenantId: string, id: string, request: TemplateMessageUpdateRequest): Promise<FiadoApiResponse<TemplateMessageResponse>> {
50
+ const url = this.withTenantId(joinUrl(this.baseUrl, `templates/${id}`), tenantId);
51
+ return await this.httpRequest.put(url, request, { 'operationName': 'backofficeUpdateTemplate' });
45
52
  }
46
53
 
47
- async deleteTemplate(id: string): Promise<FiadoApiResponse<void>> {
48
- return await this.httpRequest.delete(`${this.baseUrl}templates/${id}`, undefined, { 'operationName': 'backofficeDeleteTemplate' });
54
+ async deleteTemplate(tenantId: string, id: string): Promise<FiadoApiResponse<void>> {
55
+ return await this.httpRequest.delete(joinUrl(this.baseUrl, `templates/${id}`), { tenantId }, { 'operationName': 'backofficeDeleteTemplate' });
56
+ }
57
+
58
+ /** Cuelga el `tenantId` del query string de una URL sin query previo. */
59
+ private withTenantId(url: string, tenantId: string): string {
60
+ return `${url}?tenantId=${encodeURIComponent(tenantId)}`;
49
61
  }
50
62
  }
@@ -12,9 +12,13 @@ export interface IMessagesBusinessApi {
12
12
  verifyOtp(request: VerifyOtpRequest): Promise<FiadoApiResponse<VerifyOtpResponse>>;
13
13
  getValidatedOtp(directoryId: string, otpCode: string): Promise<FiadoApiResponse<OtpValidatedResponse>>;
14
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>>;
15
+ /**
16
+ * CRUD de plantillas. Los cinco viven en la API privada sin authorizer, asi que el `tenantId`
17
+ * es obligatorio y explicito: el lambda responde 400 TENANT_ID_REQUIRED si no llega.
18
+ */
19
+ createTemplate(tenantId: string, request: TemplateMessageCreateRequest): Promise<FiadoApiResponse<TemplateMessageResponse>>;
20
+ listTemplates(tenantId: string, filters: TemplateMessageListFiltersRequest): Promise<FiadoApiResponse<TemplateMessageListResponse>>;
21
+ getTemplate(tenantId: string, id: string): Promise<FiadoApiResponse<TemplateMessageResponse>>;
22
+ updateTemplate(tenantId: string, id: string, request: TemplateMessageUpdateRequest): Promise<FiadoApiResponse<TemplateMessageResponse>>;
23
+ deleteTemplate(tenantId: string, id: string): Promise<FiadoApiResponse<void>>;
20
24
  }