@fiado/api-invoker 5.120.0 → 5.122.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 +4 -0
- package/bin/index.d.ts +1 -0
- package/bin/index.js +1 -0
- package/bin/notificationMessages/api/NotificationMessagesApi.d.ts +12 -0
- package/bin/notificationMessages/api/NotificationMessagesApi.js +35 -0
- package/bin/notificationMessages/api/interfaces/INotificationMessagesApi.d.ts +10 -0
- package/bin/notificationMessages/api/interfaces/INotificationMessagesApi.js +1 -0
- package/bin/notificationMessages/index.d.ts +2 -0
- package/bin/notificationMessages/index.js +2 -0
- package/bin/pdf-render-business/api/PdfRenderBusinessApi.d.ts +18 -0
- package/bin/pdf-render-business/api/PdfRenderBusinessApi.js +51 -0
- package/bin/pdf-render-business/api/interfaces/IPdfRenderBusinessApi.d.ts +25 -0
- package/bin/pdf-render-business/api/interfaces/IPdfRenderBusinessApi.js +1 -0
- package/bin/pdf-render-business/index.d.ts +2 -0
- package/bin/pdf-render-business/index.js +2 -0
- package/package.json +2 -2
- package/src/container.config.ts +5 -1
- package/src/index.ts +1 -0
- package/src/notificationMessages/api/NotificationMessagesApi.ts +28 -0
- package/src/notificationMessages/api/interfaces/INotificationMessagesApi.ts +14 -0
- package/src/notificationMessages/index.ts +3 -1
- package/src/pdf-render-business/api/PdfRenderBusinessApi.ts +52 -0
- package/src/pdf-render-business/api/interfaces/IPdfRenderBusinessApi.ts +36 -0
- package/src/pdf-render-business/index.ts +2 -0
package/bin/container.config.js
CHANGED
|
@@ -2,6 +2,7 @@ import { ContainerModule } from "inversify";
|
|
|
2
2
|
import { DirectoryApi } from "./directory/index.js";
|
|
3
3
|
import { IdentityApi } from "./identity/index.js";
|
|
4
4
|
import { FileStorageApi } from "./file-storage/index.js";
|
|
5
|
+
import { NotificationMessagesApi } from "./notificationMessages/index.js";
|
|
5
6
|
import NotificationMessagePublisher from "./notificationMessages/queue/NotificationMessagePublisher.js";
|
|
6
7
|
import TernApi from "./tern/api/TernApi.js";
|
|
7
8
|
import PomeloApi from "./pomelo/api/PomeloApi.js";
|
|
@@ -20,6 +21,7 @@ import { CardApi } from "./card/index.js";
|
|
|
20
21
|
import { TransactionPublisher } from "./transaction/index.js";
|
|
21
22
|
import { ContractGeneratorApi } from "./contract-generator/index.js";
|
|
22
23
|
import ContractBusinessApi from "./contract-business/api/ContractBusinessApi.js";
|
|
24
|
+
import PdfRenderBusinessApi from "./pdf-render-business/api/PdfRenderBusinessApi.js";
|
|
23
25
|
import MilestoneBusinessApi from "./milestone-business/api/MilestoneBusinessApi.js";
|
|
24
26
|
import CreditStatementsApi from "./credit-statements/api/CreditStatementsApi.js";
|
|
25
27
|
import ProductCatalogApi from "./product-catalog/ProductCatalogApi.js";
|
|
@@ -164,6 +166,7 @@ export const apiInvokerBindings = new ContainerModule(({ bind }) => {
|
|
|
164
166
|
bind("IBiometricsBusinessApi").to(BiometricsBusinessApi);
|
|
165
167
|
bind("IAccountFiadoSAApi").to(AccountFiadoSAApi);
|
|
166
168
|
bind("INotificationMessagesPublisher").to(NotificationMessagePublisher);
|
|
169
|
+
bind("INotificationMessagesApi").to(NotificationMessagesApi);
|
|
167
170
|
bind("INotificationWSMessagesPublisher").to(NotificationWSMessagePublisher);
|
|
168
171
|
bind("ISessionActivityPublisher").to(SessionActivityPublisher);
|
|
169
172
|
bind("ITransactionPublisher").to(TransactionPublisher);
|
|
@@ -172,6 +175,7 @@ export const apiInvokerBindings = new ContainerModule(({ bind }) => {
|
|
|
172
175
|
bind("ICardApi").to(CardApi);
|
|
173
176
|
bind("IContractGeneratorApi").to(ContractGeneratorApi);
|
|
174
177
|
bind("IContractBusinessApi").to(ContractBusinessApi);
|
|
178
|
+
bind("IPdfRenderBusinessApi").to(PdfRenderBusinessApi);
|
|
175
179
|
bind("IMilestoneBusinessApi").to(MilestoneBusinessApi);
|
|
176
180
|
bind("ICreditStatementsApi").to(CreditStatementsApi);
|
|
177
181
|
bind("ICollectorApi").to(CollectorApi);
|
package/bin/index.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export * from "./authentication/index.js";
|
|
|
19
19
|
export * from "./transaction/index.js";
|
|
20
20
|
export * from "./contract-generator/index.js";
|
|
21
21
|
export * from "./contract-business/index.js";
|
|
22
|
+
export * from "./pdf-render-business/index.js";
|
|
22
23
|
export * from "./credit-statements/index.js";
|
|
23
24
|
export * from "./product-catalog/index.js";
|
|
24
25
|
export * from "./collector/index.js";
|
package/bin/index.js
CHANGED
|
@@ -19,6 +19,7 @@ export * from "./authentication/index.js";
|
|
|
19
19
|
export * from "./transaction/index.js";
|
|
20
20
|
export * from "./contract-generator/index.js";
|
|
21
21
|
export * from "./contract-business/index.js";
|
|
22
|
+
export * from "./pdf-render-business/index.js";
|
|
22
23
|
export * from "./credit-statements/index.js";
|
|
23
24
|
export * from "./product-catalog/index.js";
|
|
24
25
|
export * from "./collector/index.js";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IHttpRequest } from '@fiado/http-client';
|
|
2
|
+
type FiadoApiResponse<T> = import('@fiado/type-kit/bin/apiResponse/dtos/FiadoApiResponse.js').default<T>;
|
|
3
|
+
import { MomentTemplateListResponse, MomentTemplateResponse, MomentTemplateUpsertRequest } from '@fiado/type-kit/bin/notificationMessages/index.js';
|
|
4
|
+
import { INotificationMessagesApi } from './interfaces/INotificationMessagesApi.js';
|
|
5
|
+
export declare class NotificationMessagesApi implements INotificationMessagesApi {
|
|
6
|
+
private readonly httpRequest;
|
|
7
|
+
private readonly baseUrl;
|
|
8
|
+
constructor(httpRequest: IHttpRequest);
|
|
9
|
+
upsertMomentTemplate(messageType: string, request: MomentTemplateUpsertRequest): Promise<FiadoApiResponse<MomentTemplateResponse>>;
|
|
10
|
+
listMomentTemplates(messageTypes: readonly string[]): Promise<FiadoApiResponse<MomentTemplateListResponse>>;
|
|
11
|
+
}
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
const MOMENT_TEMPLATES_PATH = 'notification-messages/private/moment-templates';
|
|
16
|
+
let NotificationMessagesApi = class NotificationMessagesApi {
|
|
17
|
+
httpRequest;
|
|
18
|
+
baseUrl = process.env.NOTIFICATION_MESSAGES_URL || '';
|
|
19
|
+
constructor(httpRequest) {
|
|
20
|
+
this.httpRequest = httpRequest;
|
|
21
|
+
}
|
|
22
|
+
async upsertMomentTemplate(messageType, request) {
|
|
23
|
+
const url = joinUrl(this.baseUrl, `${MOMENT_TEMPLATES_PATH}/${encodeURIComponent(messageType)}`);
|
|
24
|
+
return await this.httpRequest.put(url, request);
|
|
25
|
+
}
|
|
26
|
+
async listMomentTemplates(messageTypes) {
|
|
27
|
+
return await this.httpRequest.get(joinUrl(this.baseUrl, MOMENT_TEMPLATES_PATH), { messageTypes: messageTypes.join(',') });
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
NotificationMessagesApi = __decorate([
|
|
31
|
+
injectable(),
|
|
32
|
+
__param(0, inject('IHttpRequest')),
|
|
33
|
+
__metadata("design:paramtypes", [Object])
|
|
34
|
+
], NotificationMessagesApi);
|
|
35
|
+
export { NotificationMessagesApi };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type FiadoApiResponse<T> = import('@fiado/type-kit/bin/apiResponse/dtos/FiadoApiResponse.js').default<T>;
|
|
2
|
+
import { MomentTemplateListResponse, MomentTemplateResponse, MomentTemplateUpsertRequest } from '@fiado/type-kit/bin/notificationMessages/index.js';
|
|
3
|
+
/** Plantillas push de los momentos del crédito en notification-messages-business (API privada). */
|
|
4
|
+
export interface INotificationMessagesApi {
|
|
5
|
+
/** Crea o actualiza `ES_<messageType>`. Responde 409 si la fila es del wallet. */
|
|
6
|
+
upsertMomentTemplate(messageType: string, request: MomentTemplateUpsertRequest): Promise<FiadoApiResponse<MomentTemplateResponse>>;
|
|
7
|
+
/** Lectura en lote: la plantilla que no existe no viene en `items`. */
|
|
8
|
+
listMomentTemplates(messageTypes: readonly string[]): Promise<FiadoApiResponse<MomentTemplateListResponse>>;
|
|
9
|
+
}
|
|
10
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { IHttpRequest } from "@fiado/http-client";
|
|
2
|
+
import type { DocumentUrlResponse, GeneratePdfRequest, MergePdfsRequest, PdfDocumentResponse, RenderDocumentRequest, RenderDocumentResponse } from "@fiado/type-kit/bin/pdfRender/index.js";
|
|
3
|
+
import type { IPdfRenderBusinessApi } from "./interfaces/IPdfRenderBusinessApi.js";
|
|
4
|
+
export default class PdfRenderBusinessApi implements IPdfRenderBusinessApi {
|
|
5
|
+
private httpRequest;
|
|
6
|
+
constructor(httpRequest: IHttpRequest);
|
|
7
|
+
render(request: RenderDocumentRequest): Promise<RenderDocumentResponse>;
|
|
8
|
+
generatePdf(request: GeneratePdfRequest): Promise<PdfDocumentResponse>;
|
|
9
|
+
mergePdfs(request: MergePdfsRequest): Promise<PdfDocumentResponse>;
|
|
10
|
+
getDocumentUrl(key: string): Promise<DocumentUrlResponse>;
|
|
11
|
+
/**
|
|
12
|
+
* `@fiado/http-client` devuelve el body HTTP completo, que en este Lambda es el envoltorio
|
|
13
|
+
* `ApiResponse`; el documento generado está en `data`.
|
|
14
|
+
*/
|
|
15
|
+
private post;
|
|
16
|
+
/** La URL base se lee en cada llamada y se normaliza para no duplicar "/" al concatenar. */
|
|
17
|
+
private url;
|
|
18
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
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
|
+
let PdfRenderBusinessApi = class PdfRenderBusinessApi {
|
|
15
|
+
httpRequest;
|
|
16
|
+
constructor(httpRequest) {
|
|
17
|
+
this.httpRequest = httpRequest;
|
|
18
|
+
}
|
|
19
|
+
async render(request) {
|
|
20
|
+
return await this.post("render", request);
|
|
21
|
+
}
|
|
22
|
+
async generatePdf(request) {
|
|
23
|
+
return await this.post("generate-pdf", request);
|
|
24
|
+
}
|
|
25
|
+
async mergePdfs(request) {
|
|
26
|
+
return await this.post("merge-pdfs", request);
|
|
27
|
+
}
|
|
28
|
+
async getDocumentUrl(key) {
|
|
29
|
+
const response = await this.httpRequest.get(this.url("documents/url"), { key });
|
|
30
|
+
return response.data;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* `@fiado/http-client` devuelve el body HTTP completo, que en este Lambda es el envoltorio
|
|
34
|
+
* `ApiResponse`; el documento generado está en `data`.
|
|
35
|
+
*/
|
|
36
|
+
async post(path, body) {
|
|
37
|
+
const response = await this.httpRequest.post(this.url(path), body);
|
|
38
|
+
return response.data;
|
|
39
|
+
}
|
|
40
|
+
/** La URL base se lee en cada llamada y se normaliza para no duplicar "/" al concatenar. */
|
|
41
|
+
url(path) {
|
|
42
|
+
const baseUrl = (process.env.PDF_RENDER_BUSINESS_LAMBDA_URL || "").replace(/\/+$/, "");
|
|
43
|
+
return `${baseUrl}/${path}`;
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
PdfRenderBusinessApi = __decorate([
|
|
47
|
+
injectable(),
|
|
48
|
+
__param(0, inject("IHttpRequest")),
|
|
49
|
+
__metadata("design:paramtypes", [Object])
|
|
50
|
+
], PdfRenderBusinessApi);
|
|
51
|
+
export default PdfRenderBusinessApi;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { DocumentUrlResponse, GeneratePdfRequest, MergePdfsRequest, PdfDocumentResponse, RenderDocumentRequest, RenderDocumentResponse } from "@fiado/type-kit/bin/pdfRender/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Cliente de los endpoints privados de pdf-render-business.
|
|
4
|
+
*
|
|
5
|
+
* El Lambda responde con el envoltorio `ApiResponse` (`{ code, date, msg, data }`); este cliente
|
|
6
|
+
* lo desenvuelve y entrega directamente el contenido de `data`.
|
|
7
|
+
*
|
|
8
|
+
* Cada documento queda guardado en el bucket de contratos con la llave por convención
|
|
9
|
+
* (`{EMPRESA}/{TIPO}/{referenceId}/{uuid}.pdf`); la respuesta trae esa `key`, una URL firmada de
|
|
10
|
+
* 15 minutos y el `sha256`. El base64 sólo viene si el request pide `includeContent: true`.
|
|
11
|
+
*
|
|
12
|
+
* Errores: una respuesta HTTP distinta de 2xx se propaga como el error del cliente HTTP (axios).
|
|
13
|
+
*
|
|
14
|
+
* Variable de entorno requerida en el consumidor: `PDF_RENDER_BUSINESS_LAMBDA_URL`.
|
|
15
|
+
*/
|
|
16
|
+
export interface IPdfRenderBusinessApi {
|
|
17
|
+
/** POST /render — PDF a partir de una plantilla publicada en el bucket de plantillas. */
|
|
18
|
+
render(request: RenderDocumentRequest): Promise<RenderDocumentResponse>;
|
|
19
|
+
/** POST /generate-pdf — PDF en A4 a partir de HTML ya resuelto por el consumidor. */
|
|
20
|
+
generatePdf(request: GeneratePdfRequest): Promise<PdfDocumentResponse>;
|
|
21
|
+
/** POST /merge-pdfs — une los PDFs en el orden recibido. */
|
|
22
|
+
mergePdfs(request: MergePdfsRequest): Promise<PdfDocumentResponse>;
|
|
23
|
+
/** GET /documents/url?key= — nueva URL firmada (15 min) de un documento ya guardado. */
|
|
24
|
+
getDocumentUrl(key: string): Promise<DocumentUrlResponse>;
|
|
25
|
+
}
|
|
@@ -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.122.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.14.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.526.0",
|
|
38
38
|
"dotenv": "^16.4.7"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
package/src/container.config.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { ContainerModule } from "inversify";
|
|
|
2
2
|
import { DirectoryApi, IDirectoryApi } from "./directory/index.js";
|
|
3
3
|
import { IdentityApi, IIdentityApi } from "./identity/index.js";
|
|
4
4
|
import { FileStorageApi, IFileStorageApi } from "./file-storage/index.js";
|
|
5
|
-
import { INotificationMessagesPublisher } from "./notificationMessages/index.js";
|
|
5
|
+
import { INotificationMessagesApi, INotificationMessagesPublisher, NotificationMessagesApi } from "./notificationMessages/index.js";
|
|
6
6
|
import NotificationMessagePublisher from "./notificationMessages/queue/NotificationMessagePublisher.js";
|
|
7
7
|
import { ITernApi } from "./tern/index.js";
|
|
8
8
|
import TernApi from "./tern/api/TernApi.js";
|
|
@@ -30,6 +30,8 @@ import { ITransactionApi, ITransactionPublisher, TransactionPublisher } from "./
|
|
|
30
30
|
import { ContractGeneratorApi, IContractGeneratorApi } from "./contract-generator/index.js";
|
|
31
31
|
import { IContractBusinessApi } from "./contract-business/index.js";
|
|
32
32
|
import ContractBusinessApi from "./contract-business/api/ContractBusinessApi.js";
|
|
33
|
+
import { IPdfRenderBusinessApi } from "./pdf-render-business/index.js";
|
|
34
|
+
import PdfRenderBusinessApi from "./pdf-render-business/api/PdfRenderBusinessApi.js";
|
|
33
35
|
import { IMilestoneBusinessApi } from "./milestone-business/index.js";
|
|
34
36
|
import MilestoneBusinessApi from "./milestone-business/api/MilestoneBusinessApi.js";
|
|
35
37
|
import { ICreditStatementsApi } from "./credit-statements/index.js";
|
|
@@ -237,6 +239,7 @@ export const apiInvokerBindings = new ContainerModule(({ bind }) => {
|
|
|
237
239
|
bind<IBiometricsBusinessApi>("IBiometricsBusinessApi").to(BiometricsBusinessApi);
|
|
238
240
|
bind<IAccountFiadoSAApi>("IAccountFiadoSAApi").to(AccountFiadoSAApi);
|
|
239
241
|
bind<INotificationMessagesPublisher>("INotificationMessagesPublisher").to(NotificationMessagePublisher);
|
|
242
|
+
bind<INotificationMessagesApi>("INotificationMessagesApi").to(NotificationMessagesApi);
|
|
240
243
|
bind<INotificationWSMessagesPublisher>("INotificationWSMessagesPublisher").to(NotificationWSMessagePublisher);
|
|
241
244
|
bind<ISessionActivityPublisher>("ISessionActivityPublisher").to(SessionActivityPublisher);
|
|
242
245
|
bind<ITransactionPublisher>("ITransactionPublisher").to(TransactionPublisher);
|
|
@@ -245,6 +248,7 @@ export const apiInvokerBindings = new ContainerModule(({ bind }) => {
|
|
|
245
248
|
bind<ICardApi>("ICardApi").to(CardApi);
|
|
246
249
|
bind<IContractGeneratorApi>("IContractGeneratorApi").to(ContractGeneratorApi);
|
|
247
250
|
bind<IContractBusinessApi>("IContractBusinessApi").to(ContractBusinessApi);
|
|
251
|
+
bind<IPdfRenderBusinessApi>("IPdfRenderBusinessApi").to(PdfRenderBusinessApi);
|
|
248
252
|
bind<IMilestoneBusinessApi>("IMilestoneBusinessApi").to(MilestoneBusinessApi);
|
|
249
253
|
bind<ICreditStatementsApi>("ICreditStatementsApi").to(CreditStatementsApi);
|
|
250
254
|
bind<ICollectorApi>("ICollectorApi").to(CollectorApi);
|
package/src/index.ts
CHANGED
|
@@ -19,6 +19,7 @@ export * from "./authentication/index.js";
|
|
|
19
19
|
export * from "./transaction/index.js";
|
|
20
20
|
export * from "./contract-generator/index.js";
|
|
21
21
|
export * from "./contract-business/index.js";
|
|
22
|
+
export * from "./pdf-render-business/index.js";
|
|
22
23
|
export * from "./credit-statements/index.js";
|
|
23
24
|
export * from "./product-catalog/index.js";
|
|
24
25
|
export * from "./collector/index.js";
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { inject, injectable } from 'inversify';
|
|
2
|
+
import type { IHttpRequest } from '@fiado/http-client';
|
|
3
|
+
type FiadoApiResponse<T> = import('@fiado/type-kit/bin/apiResponse/dtos/FiadoApiResponse.js').default<T>;
|
|
4
|
+
import {
|
|
5
|
+
MomentTemplateListResponse,
|
|
6
|
+
MomentTemplateResponse,
|
|
7
|
+
MomentTemplateUpsertRequest,
|
|
8
|
+
} from '@fiado/type-kit/bin/notificationMessages/index.js';
|
|
9
|
+
import { INotificationMessagesApi } from './interfaces/INotificationMessagesApi.js';
|
|
10
|
+
import { joinUrl } from '../../utils/joinUrl.js';
|
|
11
|
+
|
|
12
|
+
const MOMENT_TEMPLATES_PATH = 'notification-messages/private/moment-templates';
|
|
13
|
+
|
|
14
|
+
@injectable()
|
|
15
|
+
export class NotificationMessagesApi implements INotificationMessagesApi {
|
|
16
|
+
private readonly baseUrl = process.env.NOTIFICATION_MESSAGES_URL || '';
|
|
17
|
+
|
|
18
|
+
constructor(@inject('IHttpRequest') private readonly httpRequest: IHttpRequest) {}
|
|
19
|
+
|
|
20
|
+
async upsertMomentTemplate(messageType: string, request: MomentTemplateUpsertRequest): Promise<FiadoApiResponse<MomentTemplateResponse>> {
|
|
21
|
+
const url = joinUrl(this.baseUrl, `${MOMENT_TEMPLATES_PATH}/${encodeURIComponent(messageType)}`);
|
|
22
|
+
return await this.httpRequest.put(url, request);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async listMomentTemplates(messageTypes: readonly string[]): Promise<FiadoApiResponse<MomentTemplateListResponse>> {
|
|
26
|
+
return await this.httpRequest.get(joinUrl(this.baseUrl, MOMENT_TEMPLATES_PATH), { messageTypes: messageTypes.join(',') });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type FiadoApiResponse<T> = import('@fiado/type-kit/bin/apiResponse/dtos/FiadoApiResponse.js').default<T>;
|
|
2
|
+
import {
|
|
3
|
+
MomentTemplateListResponse,
|
|
4
|
+
MomentTemplateResponse,
|
|
5
|
+
MomentTemplateUpsertRequest,
|
|
6
|
+
} from '@fiado/type-kit/bin/notificationMessages/index.js';
|
|
7
|
+
|
|
8
|
+
/** Plantillas push de los momentos del crédito en notification-messages-business (API privada). */
|
|
9
|
+
export interface INotificationMessagesApi {
|
|
10
|
+
/** Crea o actualiza `ES_<messageType>`. Responde 409 si la fila es del wallet. */
|
|
11
|
+
upsertMomentTemplate(messageType: string, request: MomentTemplateUpsertRequest): Promise<FiadoApiResponse<MomentTemplateResponse>>;
|
|
12
|
+
/** Lectura en lote: la plantilla que no existe no viene en `items`. */
|
|
13
|
+
listMomentTemplates(messageTypes: readonly string[]): Promise<FiadoApiResponse<MomentTemplateListResponse>>;
|
|
14
|
+
}
|
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
export * from './queue/NotificationMessagePublisher.js';
|
|
2
|
-
export * from './queue/interfaces/INotificationMessagesPublisher.js';
|
|
2
|
+
export * from './queue/interfaces/INotificationMessagesPublisher.js';
|
|
3
|
+
export * from './api/NotificationMessagesApi.js';
|
|
4
|
+
export * from './api/interfaces/INotificationMessagesApi.js';
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { inject, injectable } from "inversify";
|
|
2
|
+
import type { IHttpRequest } from "@fiado/http-client";
|
|
3
|
+
import type {
|
|
4
|
+
DocumentUrlResponse,
|
|
5
|
+
GeneratePdfRequest,
|
|
6
|
+
MergePdfsRequest,
|
|
7
|
+
PdfDocumentResponse,
|
|
8
|
+
RenderDocumentRequest,
|
|
9
|
+
RenderDocumentResponse,
|
|
10
|
+
} from "@fiado/type-kit/bin/pdfRender/index.js";
|
|
11
|
+
import type { IPdfRenderBusinessApi } from "./interfaces/IPdfRenderBusinessApi.js";
|
|
12
|
+
|
|
13
|
+
type FiadoApiResponse<T> = import("@fiado/type-kit/bin/apiResponse/dtos/FiadoApiResponse.js").default<T>;
|
|
14
|
+
|
|
15
|
+
@injectable()
|
|
16
|
+
export default class PdfRenderBusinessApi implements IPdfRenderBusinessApi {
|
|
17
|
+
|
|
18
|
+
constructor(@inject("IHttpRequest") private httpRequest: IHttpRequest) {
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
async render(request: RenderDocumentRequest): Promise<RenderDocumentResponse> {
|
|
22
|
+
return await this.post<RenderDocumentResponse>("render", request);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async generatePdf(request: GeneratePdfRequest): Promise<PdfDocumentResponse> {
|
|
26
|
+
return await this.post<PdfDocumentResponse>("generate-pdf", request);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async mergePdfs(request: MergePdfsRequest): Promise<PdfDocumentResponse> {
|
|
30
|
+
return await this.post<PdfDocumentResponse>("merge-pdfs", request);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async getDocumentUrl(key: string): Promise<DocumentUrlResponse> {
|
|
34
|
+
const response = await this.httpRequest.get<FiadoApiResponse<DocumentUrlResponse>>(this.url("documents/url"), { key });
|
|
35
|
+
return response.data;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* `@fiado/http-client` devuelve el body HTTP completo, que en este Lambda es el envoltorio
|
|
40
|
+
* `ApiResponse`; el documento generado está en `data`.
|
|
41
|
+
*/
|
|
42
|
+
private async post<T>(path: string, body: unknown): Promise<T> {
|
|
43
|
+
const response = await this.httpRequest.post<FiadoApiResponse<T>>(this.url(path), body);
|
|
44
|
+
return response.data;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** La URL base se lee en cada llamada y se normaliza para no duplicar "/" al concatenar. */
|
|
48
|
+
private url(path: string): string {
|
|
49
|
+
const baseUrl = (process.env.PDF_RENDER_BUSINESS_LAMBDA_URL || "").replace(/\/+$/, "");
|
|
50
|
+
return `${baseUrl}/${path}`;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
DocumentUrlResponse,
|
|
3
|
+
GeneratePdfRequest,
|
|
4
|
+
MergePdfsRequest,
|
|
5
|
+
PdfDocumentResponse,
|
|
6
|
+
RenderDocumentRequest,
|
|
7
|
+
RenderDocumentResponse,
|
|
8
|
+
} from "@fiado/type-kit/bin/pdfRender/index.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Cliente de los endpoints privados de pdf-render-business.
|
|
12
|
+
*
|
|
13
|
+
* El Lambda responde con el envoltorio `ApiResponse` (`{ code, date, msg, data }`); este cliente
|
|
14
|
+
* lo desenvuelve y entrega directamente el contenido de `data`.
|
|
15
|
+
*
|
|
16
|
+
* Cada documento queda guardado en el bucket de contratos con la llave por convención
|
|
17
|
+
* (`{EMPRESA}/{TIPO}/{referenceId}/{uuid}.pdf`); la respuesta trae esa `key`, una URL firmada de
|
|
18
|
+
* 15 minutos y el `sha256`. El base64 sólo viene si el request pide `includeContent: true`.
|
|
19
|
+
*
|
|
20
|
+
* Errores: una respuesta HTTP distinta de 2xx se propaga como el error del cliente HTTP (axios).
|
|
21
|
+
*
|
|
22
|
+
* Variable de entorno requerida en el consumidor: `PDF_RENDER_BUSINESS_LAMBDA_URL`.
|
|
23
|
+
*/
|
|
24
|
+
export interface IPdfRenderBusinessApi {
|
|
25
|
+
/** POST /render — PDF a partir de una plantilla publicada en el bucket de plantillas. */
|
|
26
|
+
render(request: RenderDocumentRequest): Promise<RenderDocumentResponse>;
|
|
27
|
+
|
|
28
|
+
/** POST /generate-pdf — PDF en A4 a partir de HTML ya resuelto por el consumidor. */
|
|
29
|
+
generatePdf(request: GeneratePdfRequest): Promise<PdfDocumentResponse>;
|
|
30
|
+
|
|
31
|
+
/** POST /merge-pdfs — une los PDFs en el orden recibido. */
|
|
32
|
+
mergePdfs(request: MergePdfsRequest): Promise<PdfDocumentResponse>;
|
|
33
|
+
|
|
34
|
+
/** GET /documents/url?key= — nueva URL firmada (15 min) de un documento ya guardado. */
|
|
35
|
+
getDocumentUrl(key: string): Promise<DocumentUrlResponse>;
|
|
36
|
+
}
|