@fiado/type-kit 3.523.0 → 3.524.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.
Files changed (44) hide show
  1. package/_test_/unit/pdfRender/pdfRenderDtos.test.ts +66 -0
  2. package/bin/index.d.ts +1 -0
  3. package/bin/index.js +3 -1
  4. package/bin/pdfRender/dtos/GeneratePdfRequest.d.ts +4 -0
  5. package/bin/pdfRender/dtos/GeneratePdfRequest.js +22 -0
  6. package/bin/pdfRender/dtos/MergePdfsRequest.d.ts +4 -0
  7. package/bin/pdfRender/dtos/MergePdfsRequest.js +24 -0
  8. package/bin/pdfRender/dtos/PdfDocumentResponse.d.ts +5 -0
  9. package/bin/pdfRender/dtos/PdfDocumentResponse.js +6 -0
  10. package/bin/pdfRender/dtos/PublishTemplateRequest.d.ts +10 -0
  11. package/bin/pdfRender/dtos/PublishTemplateRequest.js +40 -0
  12. package/bin/pdfRender/dtos/PublishTemplateResponse.d.ts +4 -0
  13. package/bin/pdfRender/dtos/PublishTemplateResponse.js +6 -0
  14. package/bin/pdfRender/dtos/RenderDocumentRequest.d.ts +6 -0
  15. package/bin/pdfRender/dtos/RenderDocumentRequest.js +29 -0
  16. package/bin/pdfRender/dtos/RenderDocumentResponse.d.ts +5 -0
  17. package/bin/pdfRender/dtos/RenderDocumentResponse.js +7 -0
  18. package/bin/pdfRender/dtos/TemplateLocationRequest.d.ts +6 -0
  19. package/bin/pdfRender/dtos/TemplateLocationRequest.js +36 -0
  20. package/bin/pdfRender/dtos/TemplateRefRequest.d.ts +14 -0
  21. package/bin/pdfRender/dtos/TemplateRefRequest.js +54 -0
  22. package/bin/pdfRender/dtos/TemplateSummaryResponse.d.ts +6 -0
  23. package/bin/pdfRender/dtos/TemplateSummaryResponse.js +6 -0
  24. package/bin/pdfRender/dtos/UploadAssetRequest.d.ts +9 -0
  25. package/bin/pdfRender/dtos/UploadAssetRequest.js +49 -0
  26. package/bin/pdfRender/dtos/UploadAssetResponse.d.ts +4 -0
  27. package/bin/pdfRender/dtos/UploadAssetResponse.js +6 -0
  28. package/bin/pdfRender/index.d.ts +12 -0
  29. package/bin/pdfRender/index.js +29 -0
  30. package/package.json +1 -1
  31. package/src/index.ts +3 -0
  32. package/src/pdfRender/dtos/GeneratePdfRequest.ts +7 -0
  33. package/src/pdfRender/dtos/MergePdfsRequest.ts +7 -0
  34. package/src/pdfRender/dtos/PdfDocumentResponse.ts +5 -0
  35. package/src/pdfRender/dtos/PublishTemplateRequest.ts +18 -0
  36. package/src/pdfRender/dtos/PublishTemplateResponse.ts +4 -0
  37. package/src/pdfRender/dtos/RenderDocumentRequest.ts +12 -0
  38. package/src/pdfRender/dtos/RenderDocumentResponse.ts +6 -0
  39. package/src/pdfRender/dtos/TemplateLocationRequest.ts +15 -0
  40. package/src/pdfRender/dtos/TemplateRefRequest.ts +28 -0
  41. package/src/pdfRender/dtos/TemplateSummaryResponse.ts +6 -0
  42. package/src/pdfRender/dtos/UploadAssetRequest.ts +25 -0
  43. package/src/pdfRender/dtos/UploadAssetResponse.ts +4 -0
  44. package/src/pdfRender/index.ts +13 -0
@@ -0,0 +1,66 @@
1
+ import 'reflect-metadata';
2
+ import { plainToInstance } from 'class-transformer';
3
+ import { validate } from 'class-validator';
4
+ import {
5
+ GeneratePdfRequest, MergePdfsRequest, PublishTemplateRequest, RenderDocumentRequest,
6
+ TemplateLocationRequest, UploadAssetRequest,
7
+ } from '../../../src/pdfRender';
8
+
9
+ const errorsOf = async <T extends object>(cls: new () => T, body: unknown) =>
10
+ (await validate(plainToInstance(cls, body) as object, { whitelist: true })).map(e => e.property);
11
+
12
+ describe('pdfRender render DTOs', () => {
13
+ it('accepts a deep template ref with data', async () => {
14
+ expect(await errorsOf(RenderDocumentRequest, {
15
+ template: { enterprise: 'FIADOSA', partnerId: 'UNE', category: 'CREDITS', documentType: 'CREDIT_CONTRATO_SIMPLE', version: '2' },
16
+ data: { cliente: { nombre: 'Ana' } },
17
+ })).toEqual([]);
18
+ });
19
+
20
+ it('accepts a flat template ref without version', async () => {
21
+ expect(await errorsOf(RenderDocumentRequest, { template: { enterprise: 'PAGO_CONFIADO', documentType: 'TERMS_WALLET_PAGO' }, data: {} })).toEqual([]);
22
+ });
23
+
24
+ it('rejects path traversal and slashes in segments', async () => {
25
+ expect(await errorsOf(RenderDocumentRequest, { template: { enterprise: '../FIADOSA', documentType: 'A/B' }, data: {} })).toEqual(['template']);
26
+ });
27
+
28
+ it('rejects a non numeric version', async () => {
29
+ expect(await errorsOf(RenderDocumentRequest, { template: { enterprise: 'FIADOSA', documentType: 'X', version: 'V2' }, data: {} })).toEqual(['template']);
30
+ });
31
+
32
+ it('requires data to be an object', async () => {
33
+ expect(await errorsOf(RenderDocumentRequest, { template: { enterprise: 'FIADOSA', documentType: 'X' }, data: 'nope' })).toEqual(['data']);
34
+ });
35
+
36
+ it('requires non empty html', async () => {
37
+ expect(await errorsOf(GeneratePdfRequest, { html: '' })).toEqual(['html']);
38
+ });
39
+
40
+ it('requires between 1 and 50 pdfs', async () => {
41
+ expect(await errorsOf(MergePdfsRequest, { pdfs: [] })).toEqual(['pdfs']);
42
+ expect(await errorsOf(MergePdfsRequest, { pdfs: Array(51).fill('JVBERi0=') })).toEqual(['pdfs']);
43
+ expect(await errorsOf(MergePdfsRequest, { pdfs: ['JVBERi0='] })).toEqual([]);
44
+ });
45
+ });
46
+
47
+ describe('pdfRender admin DTOs', () => {
48
+ it('publish: requires documentType and html, and drops any version', async () => {
49
+ expect(await errorsOf(PublishTemplateRequest, { template: { enterprise: 'FIADOSA', documentType: 'X' }, html: '<p/>' })).toEqual([]);
50
+ expect(await errorsOf(PublishTemplateRequest, { template: { enterprise: 'FIADOSA', documentType: 'X' }, html: '' })).toEqual(['html']);
51
+ const withVersion = plainToInstance(PublishTemplateRequest, { template: { enterprise: 'FIADOSA', documentType: 'X', version: '9' }, html: '<p/>' });
52
+ await validate(withVersion, { whitelist: true });
53
+ expect((withVersion.template as unknown as Record<string, unknown>).version).toBeUndefined();
54
+ });
55
+
56
+ it('asset: accepts nested folders and known types, rejects traversal and other types', async () => {
57
+ expect(await errorsOf(UploadAssetRequest, { enterprise: 'FIADOSA', path: 'fonts/Carlito-Bold.ttf', contentType: 'font/ttf', contentBase64: 'AAAA' })).toEqual([]);
58
+ expect(await errorsOf(UploadAssetRequest, { enterprise: 'FIADOSA', path: '../x.ttf', contentType: 'font/ttf', contentBase64: 'AAAA' })).toEqual(['path']);
59
+ expect(await errorsOf(UploadAssetRequest, { enterprise: 'FIADOSA', path: 'x.exe', contentType: 'application/x-msdownload', contentBase64: 'AAAA' })).toEqual(['path', 'contentType']);
60
+ });
61
+
62
+ it('location: enterprise required, partnerId optional', async () => {
63
+ expect(await errorsOf(TemplateLocationRequest, { enterprise: 'FIADOSA', partnerId: 'UNE', category: 'CREDITS' })).toEqual([]);
64
+ expect(await errorsOf(TemplateLocationRequest, {})).toEqual(['enterprise']);
65
+ });
66
+ });
package/bin/index.d.ts CHANGED
@@ -125,3 +125,4 @@ export * as DynamicForm from './dynamicForm';
125
125
  export * as Rewards from './rewards';
126
126
  export * as RewardsEligibility from './rewardsEligibility';
127
127
  export * as DatalakeReports from './datalakeReports';
128
+ export * as PdfRender from './pdfRender';
package/bin/index.js CHANGED
@@ -38,7 +38,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.Blacklist = exports.CentralPayments = exports.Helpdesk = exports.FiadoApiResponse = exports.Auth = exports.LegalDocumentsBusiness = exports.Role = exports.STPAccount = exports.RiskProfile = exports.FraudPreventionEngine = exports.BBVARst = exports.Stp = exports.BenefitCenter = exports.BankAccount = exports.P2pContact = exports.CreditContract = exports.Contract = exports.ProductCatalog = exports.ContactInfo = exports.TransactionAnalytics = exports.Transaction = exports.TransactionProcessor = exports.GenericMessage = exports.EventBridgeMessage = exports.SessionActivity = exports.MessageMoments = exports.NotificationMessages = exports.ServicePayment = exports.Header = exports.Identity = exports.UserTags = exports.Group = exports.File = exports.ExchangeRate = exports.Directory = exports.Currency = exports.Country = exports.Card = exports.Authentication = exports.AppContent = exports.App = exports.Offices = exports.Places = exports.Address = exports.Beneficiary = exports.Activity = exports.Biometrics = exports.MetamapConnector = exports.Account = exports.Crypto = void 0;
40
40
  exports.RetailWizard = exports.RetailCustomer = exports.RetailCards = exports.RetailCatalog = exports.RetailCommission = exports.RetailOrg = exports.EmailVerification = exports.NetworkConnector = exports.Modelias = exports.TotpSecurity = exports.Passport = exports.WalletFunding = exports.Remittance = exports.PlatformRbac = exports.CognitoBackofficeConnector = exports.WhatsappConnector = exports.TwilioConnector = exports.MessagesConnector = exports.Mdm = exports.MilestoneBusiness = exports.CirculoCredito = exports.CreditStatements = exports.Sentry = exports.AiEngine = exports.Funnel = exports.TeamsConnector = exports.PlatformErrorEvents = exports.CustomerFile = exports.CreditBackoffice = exports.CreditDashboard = exports.CreditEngine = exports.Credit = exports.ComissionBusiness = exports.ReferralBusiness = exports.ZendeskMessaging = exports.NotificationWS = exports.Event = exports.PayrollBusiness = exports.Cnbv = exports.DirectorySetting = exports.InvoiceCollector = exports.Collector = exports.Pricelist = exports.Company = exports.Services = exports.AccountIssuanceBusiness = exports.AppSelectionData = exports.Device = exports.Observations = exports.IssuanceBusiness = void 0;
41
- exports.DatalakeReports = exports.RewardsEligibility = exports.Rewards = exports.DynamicForm = exports.FileStorage = exports.MoneyTransfer = exports.RetailLoan = exports.Membership = exports.WebhookBusiness = exports.PeopleBusiness = exports.UserConfirmations = exports.Collection = exports.Shipping = exports.PhoneSales = exports.Onboarding = exports.Kyc = exports.LoanScoring = exports.LoanCredit = exports.LoanCollectorAssignment = exports.LoanOfferings = exports.Shortlink = exports.LoanConfig = exports.DatalakeQuery = exports.RetailIntegration = exports.RetailPromotions = void 0;
41
+ exports.PdfRender = exports.DatalakeReports = exports.RewardsEligibility = exports.Rewards = exports.DynamicForm = exports.FileStorage = exports.MoneyTransfer = exports.RetailLoan = exports.Membership = exports.WebhookBusiness = exports.PeopleBusiness = exports.UserConfirmations = exports.Collection = exports.Shipping = exports.PhoneSales = exports.Onboarding = exports.Kyc = exports.LoanScoring = exports.LoanCredit = exports.LoanCollectorAssignment = exports.LoanOfferings = exports.Shortlink = exports.LoanConfig = exports.DatalakeQuery = exports.RetailIntegration = exports.RetailPromotions = void 0;
42
42
  exports.Crypto = __importStar(require("./crypto"));
43
43
  exports.Account = __importStar(require("./account"));
44
44
  exports.MetamapConnector = __importStar(require("./metamapConnector"));
@@ -246,3 +246,5 @@ exports.Rewards = __importStar(require("./rewards"));
246
246
  // servicios emisores: POST /events (request/response) y GET /runs/{id}.
247
247
  exports.RewardsEligibility = __importStar(require("./rewardsEligibility"));
248
248
  exports.DatalakeReports = __importStar(require("./datalakeReports"));
249
+ // PdfRender: DTOs del lambda pdf-render-business (plantilla HTML → PDF multitenant y su backoffice).
250
+ exports.PdfRender = __importStar(require("./pdfRender"));
@@ -0,0 +1,4 @@
1
+ /** HTML ya resuelto por el consumidor; se imprime en A4 con márgenes de 2 mm. */
2
+ export declare class GeneratePdfRequest {
3
+ html: string;
4
+ }
@@ -0,0 +1,22 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.GeneratePdfRequest = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ /** HTML ya resuelto por el consumidor; se imprime en A4 con márgenes de 2 mm. */
15
+ class GeneratePdfRequest {
16
+ }
17
+ exports.GeneratePdfRequest = GeneratePdfRequest;
18
+ __decorate([
19
+ (0, class_validator_1.IsString)(),
20
+ (0, class_validator_1.IsNotEmpty)(),
21
+ __metadata("design:type", String)
22
+ ], GeneratePdfRequest.prototype, "html", void 0);
@@ -0,0 +1,4 @@
1
+ /** PDFs en base64, en el orden en que deben quedar en el documento final. */
2
+ export declare class MergePdfsRequest {
3
+ pdfs: string[];
4
+ }
@@ -0,0 +1,24 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.MergePdfsRequest = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ /** PDFs en base64, en el orden en que deben quedar en el documento final. */
15
+ class MergePdfsRequest {
16
+ }
17
+ exports.MergePdfsRequest = MergePdfsRequest;
18
+ __decorate([
19
+ (0, class_validator_1.IsArray)(),
20
+ (0, class_validator_1.ArrayMinSize)(1),
21
+ (0, class_validator_1.ArrayMaxSize)(50),
22
+ (0, class_validator_1.IsString)({ each: true }),
23
+ __metadata("design:type", Array)
24
+ ], MergePdfsRequest.prototype, "pdfs", void 0);
@@ -0,0 +1,5 @@
1
+ export declare class PdfDocumentResponse {
2
+ base64: string;
3
+ pages: number;
4
+ bytes: number;
5
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PdfDocumentResponse = void 0;
4
+ class PdfDocumentResponse {
5
+ }
6
+ exports.PdfDocumentResponse = PdfDocumentResponse;
@@ -0,0 +1,10 @@
1
+ import { TemplateLocationRequest } from "./TemplateLocationRequest";
2
+ /** Tipo de documento al que se le publica una versión nueva. */
3
+ export declare class PublishTemplateTarget extends TemplateLocationRequest {
4
+ documentType: string;
5
+ }
6
+ /** Publica el HTML como la siguiente versión del tipo de documento. La versión la asigna el servicio. */
7
+ export declare class PublishTemplateRequest {
8
+ template: PublishTemplateTarget;
9
+ html: string;
10
+ }
@@ -0,0 +1,40 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PublishTemplateRequest = exports.PublishTemplateTarget = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const class_transformer_1 = require("class-transformer");
15
+ const TemplateLocationRequest_1 = require("./TemplateLocationRequest");
16
+ /** Tipo de documento al que se le publica una versión nueva. */
17
+ class PublishTemplateTarget extends TemplateLocationRequest_1.TemplateLocationRequest {
18
+ }
19
+ exports.PublishTemplateTarget = PublishTemplateTarget;
20
+ __decorate([
21
+ (0, class_validator_1.IsString)(),
22
+ (0, class_validator_1.IsNotEmpty)(),
23
+ (0, class_validator_1.Matches)(/^[A-Za-z0-9_-]{1,64}$/),
24
+ __metadata("design:type", String)
25
+ ], PublishTemplateTarget.prototype, "documentType", void 0);
26
+ /** Publica el HTML como la siguiente versión del tipo de documento. La versión la asigna el servicio. */
27
+ class PublishTemplateRequest {
28
+ }
29
+ exports.PublishTemplateRequest = PublishTemplateRequest;
30
+ __decorate([
31
+ (0, class_validator_1.IsDefined)(),
32
+ (0, class_validator_1.ValidateNested)(),
33
+ (0, class_transformer_1.Type)(() => PublishTemplateTarget),
34
+ __metadata("design:type", PublishTemplateTarget)
35
+ ], PublishTemplateRequest.prototype, "template", void 0);
36
+ __decorate([
37
+ (0, class_validator_1.IsString)(),
38
+ (0, class_validator_1.IsNotEmpty)(),
39
+ __metadata("design:type", String)
40
+ ], PublishTemplateRequest.prototype, "html", void 0);
@@ -0,0 +1,4 @@
1
+ export declare class PublishTemplateResponse {
2
+ key: string;
3
+ version: string;
4
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PublishTemplateResponse = void 0;
4
+ class PublishTemplateResponse {
5
+ }
6
+ exports.PublishTemplateResponse = PublishTemplateResponse;
@@ -0,0 +1,6 @@
1
+ import { TemplateRefRequest } from "./TemplateRefRequest";
2
+ export declare class RenderDocumentRequest {
3
+ template: TemplateRefRequest;
4
+ /** Variables de la plantilla. Se escapan como HTML salvo que la plantilla use {{{triple}}}. */
5
+ data: Record<string, unknown>;
6
+ }
@@ -0,0 +1,29 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RenderDocumentRequest = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const class_transformer_1 = require("class-transformer");
15
+ const TemplateRefRequest_1 = require("./TemplateRefRequest");
16
+ class RenderDocumentRequest {
17
+ }
18
+ exports.RenderDocumentRequest = RenderDocumentRequest;
19
+ __decorate([
20
+ (0, class_validator_1.IsDefined)(),
21
+ (0, class_validator_1.ValidateNested)(),
22
+ (0, class_transformer_1.Type)(() => TemplateRefRequest_1.TemplateRefRequest),
23
+ __metadata("design:type", TemplateRefRequest_1.TemplateRefRequest)
24
+ ], RenderDocumentRequest.prototype, "template", void 0);
25
+ __decorate([
26
+ (0, class_validator_1.IsDefined)(),
27
+ (0, class_validator_1.IsObject)(),
28
+ __metadata("design:type", Object)
29
+ ], RenderDocumentRequest.prototype, "data", void 0);
@@ -0,0 +1,5 @@
1
+ import { PdfDocumentResponse } from "./PdfDocumentResponse";
2
+ export declare class RenderDocumentResponse extends PdfDocumentResponse {
3
+ templateVersion: string;
4
+ renderMs: number;
5
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RenderDocumentResponse = void 0;
4
+ const PdfDocumentResponse_1 = require("./PdfDocumentResponse");
5
+ class RenderDocumentResponse extends PdfDocumentResponse_1.PdfDocumentResponse {
6
+ }
7
+ exports.RenderDocumentResponse = RenderDocumentResponse;
@@ -0,0 +1,6 @@
1
+ /** Carpeta del bucket de plantillas: empresa, y opcionalmente partner + categoría. */
2
+ export declare class TemplateLocationRequest {
3
+ enterprise: string;
4
+ partnerId?: string;
5
+ category?: string;
6
+ }
@@ -0,0 +1,36 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.TemplateLocationRequest = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const SEGMENT = /^[A-Za-z0-9_-]{1,64}$/;
15
+ /** Carpeta del bucket de plantillas: empresa, y opcionalmente partner + categoría. */
16
+ class TemplateLocationRequest {
17
+ }
18
+ exports.TemplateLocationRequest = TemplateLocationRequest;
19
+ __decorate([
20
+ (0, class_validator_1.IsString)(),
21
+ (0, class_validator_1.IsNotEmpty)(),
22
+ (0, class_validator_1.Matches)(SEGMENT),
23
+ __metadata("design:type", String)
24
+ ], TemplateLocationRequest.prototype, "enterprise", void 0);
25
+ __decorate([
26
+ (0, class_validator_1.IsOptional)(),
27
+ (0, class_validator_1.IsString)(),
28
+ (0, class_validator_1.Matches)(SEGMENT),
29
+ __metadata("design:type", String)
30
+ ], TemplateLocationRequest.prototype, "partnerId", void 0);
31
+ __decorate([
32
+ (0, class_validator_1.IsOptional)(),
33
+ (0, class_validator_1.IsString)(),
34
+ (0, class_validator_1.Matches)(SEGMENT),
35
+ __metadata("design:type", String)
36
+ ], TemplateLocationRequest.prototype, "category", void 0);
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Referencia a una plantilla del bucket de plantillas.
3
+ * Layout profundo: {enterprise}/{partnerId}/{category}/{documentType}/V{version}.html
4
+ * Layout plano: {enterprise}/{documentType}/V{version}.html
5
+ * partnerId y category van juntos o no van.
6
+ */
7
+ export declare class TemplateRefRequest {
8
+ enterprise: string;
9
+ partnerId?: string;
10
+ category?: string;
11
+ documentType: string;
12
+ /** Número de versión sin la "V". Sin valor se usa la versión más alta publicada. */
13
+ version?: string;
14
+ }
@@ -0,0 +1,54 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.TemplateRefRequest = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ /** Segmento de ruta S3 permitido: letras, dígitos, guion y guion bajo. */
15
+ const SEGMENT = /^[A-Za-z0-9_-]{1,64}$/;
16
+ /**
17
+ * Referencia a una plantilla del bucket de plantillas.
18
+ * Layout profundo: {enterprise}/{partnerId}/{category}/{documentType}/V{version}.html
19
+ * Layout plano: {enterprise}/{documentType}/V{version}.html
20
+ * partnerId y category van juntos o no van.
21
+ */
22
+ class TemplateRefRequest {
23
+ }
24
+ exports.TemplateRefRequest = TemplateRefRequest;
25
+ __decorate([
26
+ (0, class_validator_1.IsString)(),
27
+ (0, class_validator_1.IsNotEmpty)(),
28
+ (0, class_validator_1.Matches)(SEGMENT),
29
+ __metadata("design:type", String)
30
+ ], TemplateRefRequest.prototype, "enterprise", void 0);
31
+ __decorate([
32
+ (0, class_validator_1.IsOptional)(),
33
+ (0, class_validator_1.IsString)(),
34
+ (0, class_validator_1.Matches)(SEGMENT),
35
+ __metadata("design:type", String)
36
+ ], TemplateRefRequest.prototype, "partnerId", void 0);
37
+ __decorate([
38
+ (0, class_validator_1.IsOptional)(),
39
+ (0, class_validator_1.IsString)(),
40
+ (0, class_validator_1.Matches)(SEGMENT),
41
+ __metadata("design:type", String)
42
+ ], TemplateRefRequest.prototype, "category", void 0);
43
+ __decorate([
44
+ (0, class_validator_1.IsString)(),
45
+ (0, class_validator_1.IsNotEmpty)(),
46
+ (0, class_validator_1.Matches)(SEGMENT),
47
+ __metadata("design:type", String)
48
+ ], TemplateRefRequest.prototype, "documentType", void 0);
49
+ __decorate([
50
+ (0, class_validator_1.IsOptional)(),
51
+ (0, class_validator_1.IsString)(),
52
+ (0, class_validator_1.Matches)(/^[0-9]{1,6}$/),
53
+ __metadata("design:type", String)
54
+ ], TemplateRefRequest.prototype, "version", void 0);
@@ -0,0 +1,6 @@
1
+ export declare class TemplateSummaryResponse {
2
+ documentType: string;
3
+ /** Versiones publicadas, de menor a mayor. */
4
+ versions: string[];
5
+ latestVersion: string;
6
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TemplateSummaryResponse = void 0;
4
+ class TemplateSummaryResponse {
5
+ }
6
+ exports.TemplateSummaryResponse = TemplateSummaryResponse;
@@ -0,0 +1,9 @@
1
+ export declare const ASSET_CONTENT_TYPES: string[];
2
+ /** Fuente, imagen u hoja de estilo para la carpeta _assets de una empresa o partner. */
3
+ export declare class UploadAssetRequest {
4
+ enterprise: string;
5
+ partnerId?: string;
6
+ path: string;
7
+ contentType: string;
8
+ contentBase64: string;
9
+ }
@@ -0,0 +1,49 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.UploadAssetRequest = exports.ASSET_CONTENT_TYPES = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const SEGMENT = /^[A-Za-z0-9_-]{1,64}$/;
15
+ /** Ruta relativa dentro de _assets/: hasta 4 carpetas y un archivo, sin "..", con extensión permitida. */
16
+ const ASSET_PATH = /^(?!.*\.\.)([A-Za-z0-9_-]+\/){0,4}[A-Za-z0-9_.()-]+\.(ttf|otf|woff|woff2|png|jpg|jpeg|svg|gif|css)$/;
17
+ exports.ASSET_CONTENT_TYPES = ['font/ttf', 'font/otf', 'font/woff', 'font/woff2', 'image/png', 'image/jpeg', 'image/svg+xml', 'image/gif', 'text/css'];
18
+ /** Fuente, imagen u hoja de estilo para la carpeta _assets de una empresa o partner. */
19
+ class UploadAssetRequest {
20
+ }
21
+ exports.UploadAssetRequest = UploadAssetRequest;
22
+ __decorate([
23
+ (0, class_validator_1.IsString)(),
24
+ (0, class_validator_1.IsNotEmpty)(),
25
+ (0, class_validator_1.Matches)(SEGMENT),
26
+ __metadata("design:type", String)
27
+ ], UploadAssetRequest.prototype, "enterprise", void 0);
28
+ __decorate([
29
+ (0, class_validator_1.IsOptional)(),
30
+ (0, class_validator_1.IsString)(),
31
+ (0, class_validator_1.Matches)(SEGMENT),
32
+ __metadata("design:type", String)
33
+ ], UploadAssetRequest.prototype, "partnerId", void 0);
34
+ __decorate([
35
+ (0, class_validator_1.IsString)(),
36
+ (0, class_validator_1.Matches)(ASSET_PATH),
37
+ __metadata("design:type", String)
38
+ ], UploadAssetRequest.prototype, "path", void 0);
39
+ __decorate([
40
+ (0, class_validator_1.IsString)(),
41
+ (0, class_validator_1.IsIn)(exports.ASSET_CONTENT_TYPES),
42
+ __metadata("design:type", String)
43
+ ], UploadAssetRequest.prototype, "contentType", void 0);
44
+ __decorate([
45
+ (0, class_validator_1.IsString)(),
46
+ (0, class_validator_1.IsNotEmpty)(),
47
+ (0, class_validator_1.IsBase64)(),
48
+ __metadata("design:type", String)
49
+ ], UploadAssetRequest.prototype, "contentBase64", void 0);
@@ -0,0 +1,4 @@
1
+ export declare class UploadAssetResponse {
2
+ key: string;
3
+ bytes: number;
4
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UploadAssetResponse = void 0;
4
+ class UploadAssetResponse {
5
+ }
6
+ exports.UploadAssetResponse = UploadAssetResponse;
@@ -0,0 +1,12 @@
1
+ export * from './dtos/TemplateRefRequest';
2
+ export * from './dtos/RenderDocumentRequest';
3
+ export * from './dtos/GeneratePdfRequest';
4
+ export * from './dtos/MergePdfsRequest';
5
+ export * from './dtos/PdfDocumentResponse';
6
+ export * from './dtos/RenderDocumentResponse';
7
+ export * from './dtos/TemplateLocationRequest';
8
+ export * from './dtos/PublishTemplateRequest';
9
+ export * from './dtos/PublishTemplateResponse';
10
+ export * from './dtos/UploadAssetRequest';
11
+ export * from './dtos/UploadAssetResponse';
12
+ export * from './dtos/TemplateSummaryResponse';
@@ -0,0 +1,29 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ //dtos
18
+ __exportStar(require("./dtos/TemplateRefRequest"), exports);
19
+ __exportStar(require("./dtos/RenderDocumentRequest"), exports);
20
+ __exportStar(require("./dtos/GeneratePdfRequest"), exports);
21
+ __exportStar(require("./dtos/MergePdfsRequest"), exports);
22
+ __exportStar(require("./dtos/PdfDocumentResponse"), exports);
23
+ __exportStar(require("./dtos/RenderDocumentResponse"), exports);
24
+ __exportStar(require("./dtos/TemplateLocationRequest"), exports);
25
+ __exportStar(require("./dtos/PublishTemplateRequest"), exports);
26
+ __exportStar(require("./dtos/PublishTemplateResponse"), exports);
27
+ __exportStar(require("./dtos/UploadAssetRequest"), exports);
28
+ __exportStar(require("./dtos/UploadAssetResponse"), exports);
29
+ __exportStar(require("./dtos/TemplateSummaryResponse"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.523.0",
3
+ "version": "3.524.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
package/src/index.ts CHANGED
@@ -209,3 +209,6 @@ export * as Rewards from './rewards';
209
209
  // servicios emisores: POST /events (request/response) y GET /runs/{id}.
210
210
  export * as RewardsEligibility from './rewardsEligibility';
211
211
  export * as DatalakeReports from './datalakeReports';
212
+
213
+ // PdfRender: DTOs del lambda pdf-render-business (plantilla HTML → PDF multitenant y su backoffice).
214
+ export * as PdfRender from './pdfRender';
@@ -0,0 +1,7 @@
1
+ import { IsNotEmpty, IsString } from "class-validator";
2
+
3
+ /** HTML ya resuelto por el consumidor; se imprime en A4 con márgenes de 2 mm. */
4
+ export class GeneratePdfRequest {
5
+ @IsString() @IsNotEmpty()
6
+ html!: string;
7
+ }
@@ -0,0 +1,7 @@
1
+ import { ArrayMaxSize, ArrayMinSize, IsArray, IsString } from "class-validator";
2
+
3
+ /** PDFs en base64, en el orden en que deben quedar en el documento final. */
4
+ export class MergePdfsRequest {
5
+ @IsArray() @ArrayMinSize(1) @ArrayMaxSize(50) @IsString({ each: true })
6
+ pdfs!: string[];
7
+ }
@@ -0,0 +1,5 @@
1
+ export class PdfDocumentResponse {
2
+ base64!: string;
3
+ pages!: number;
4
+ bytes!: number;
5
+ }
@@ -0,0 +1,18 @@
1
+ import { IsDefined, IsNotEmpty, IsString, Matches, ValidateNested } from "class-validator";
2
+ import { Type } from "class-transformer";
3
+ import { TemplateLocationRequest } from "./TemplateLocationRequest";
4
+
5
+ /** Tipo de documento al que se le publica una versión nueva. */
6
+ export class PublishTemplateTarget extends TemplateLocationRequest {
7
+ @IsString() @IsNotEmpty() @Matches(/^[A-Za-z0-9_-]{1,64}$/)
8
+ documentType!: string;
9
+ }
10
+
11
+ /** Publica el HTML como la siguiente versión del tipo de documento. La versión la asigna el servicio. */
12
+ export class PublishTemplateRequest {
13
+ @IsDefined() @ValidateNested() @Type(() => PublishTemplateTarget)
14
+ template!: PublishTemplateTarget;
15
+
16
+ @IsString() @IsNotEmpty()
17
+ html!: string;
18
+ }
@@ -0,0 +1,4 @@
1
+ export class PublishTemplateResponse {
2
+ key!: string;
3
+ version!: string;
4
+ }
@@ -0,0 +1,12 @@
1
+ import { IsDefined, IsObject, ValidateNested } from "class-validator";
2
+ import { Type } from "class-transformer";
3
+ import { TemplateRefRequest } from "./TemplateRefRequest";
4
+
5
+ export class RenderDocumentRequest {
6
+ @IsDefined() @ValidateNested() @Type(() => TemplateRefRequest)
7
+ template!: TemplateRefRequest;
8
+
9
+ /** Variables de la plantilla. Se escapan como HTML salvo que la plantilla use {{{triple}}}. */
10
+ @IsDefined() @IsObject()
11
+ data!: Record<string, unknown>;
12
+ }
@@ -0,0 +1,6 @@
1
+ import { PdfDocumentResponse } from "./PdfDocumentResponse";
2
+
3
+ export class RenderDocumentResponse extends PdfDocumentResponse {
4
+ templateVersion!: string;
5
+ renderMs!: number;
6
+ }
@@ -0,0 +1,15 @@
1
+ import { IsNotEmpty, IsOptional, IsString, Matches } from "class-validator";
2
+
3
+ const SEGMENT = /^[A-Za-z0-9_-]{1,64}$/;
4
+
5
+ /** Carpeta del bucket de plantillas: empresa, y opcionalmente partner + categoría. */
6
+ export class TemplateLocationRequest {
7
+ @IsString() @IsNotEmpty() @Matches(SEGMENT)
8
+ enterprise!: string;
9
+
10
+ @IsOptional() @IsString() @Matches(SEGMENT)
11
+ partnerId?: string;
12
+
13
+ @IsOptional() @IsString() @Matches(SEGMENT)
14
+ category?: string;
15
+ }
@@ -0,0 +1,28 @@
1
+ import { IsNotEmpty, IsOptional, IsString, Matches } from "class-validator";
2
+
3
+ /** Segmento de ruta S3 permitido: letras, dígitos, guion y guion bajo. */
4
+ const SEGMENT = /^[A-Za-z0-9_-]{1,64}$/;
5
+
6
+ /**
7
+ * Referencia a una plantilla del bucket de plantillas.
8
+ * Layout profundo: {enterprise}/{partnerId}/{category}/{documentType}/V{version}.html
9
+ * Layout plano: {enterprise}/{documentType}/V{version}.html
10
+ * partnerId y category van juntos o no van.
11
+ */
12
+ export class TemplateRefRequest {
13
+ @IsString() @IsNotEmpty() @Matches(SEGMENT)
14
+ enterprise!: string;
15
+
16
+ @IsOptional() @IsString() @Matches(SEGMENT)
17
+ partnerId?: string;
18
+
19
+ @IsOptional() @IsString() @Matches(SEGMENT)
20
+ category?: string;
21
+
22
+ @IsString() @IsNotEmpty() @Matches(SEGMENT)
23
+ documentType!: string;
24
+
25
+ /** Número de versión sin la "V". Sin valor se usa la versión más alta publicada. */
26
+ @IsOptional() @IsString() @Matches(/^[0-9]{1,6}$/)
27
+ version?: string;
28
+ }
@@ -0,0 +1,6 @@
1
+ export class TemplateSummaryResponse {
2
+ documentType!: string;
3
+ /** Versiones publicadas, de menor a mayor. */
4
+ versions!: string[];
5
+ latestVersion!: string;
6
+ }
@@ -0,0 +1,25 @@
1
+ import { IsBase64, IsIn, IsNotEmpty, IsOptional, IsString, Matches } from "class-validator";
2
+
3
+ const SEGMENT = /^[A-Za-z0-9_-]{1,64}$/;
4
+ /** Ruta relativa dentro de _assets/: hasta 4 carpetas y un archivo, sin "..", con extensión permitida. */
5
+ const ASSET_PATH = /^(?!.*\.\.)([A-Za-z0-9_-]+\/){0,4}[A-Za-z0-9_.()-]+\.(ttf|otf|woff|woff2|png|jpg|jpeg|svg|gif|css)$/;
6
+
7
+ export const ASSET_CONTENT_TYPES = ['font/ttf', 'font/otf', 'font/woff', 'font/woff2', 'image/png', 'image/jpeg', 'image/svg+xml', 'image/gif', 'text/css'];
8
+
9
+ /** Fuente, imagen u hoja de estilo para la carpeta _assets de una empresa o partner. */
10
+ export class UploadAssetRequest {
11
+ @IsString() @IsNotEmpty() @Matches(SEGMENT)
12
+ enterprise!: string;
13
+
14
+ @IsOptional() @IsString() @Matches(SEGMENT)
15
+ partnerId?: string;
16
+
17
+ @IsString() @Matches(ASSET_PATH)
18
+ path!: string;
19
+
20
+ @IsString() @IsIn(ASSET_CONTENT_TYPES)
21
+ contentType!: string;
22
+
23
+ @IsString() @IsNotEmpty() @IsBase64()
24
+ contentBase64!: string;
25
+ }
@@ -0,0 +1,4 @@
1
+ export class UploadAssetResponse {
2
+ key!: string;
3
+ bytes!: number;
4
+ }
@@ -0,0 +1,13 @@
1
+ //dtos
2
+ export * from './dtos/TemplateRefRequest';
3
+ export * from './dtos/RenderDocumentRequest';
4
+ export * from './dtos/GeneratePdfRequest';
5
+ export * from './dtos/MergePdfsRequest';
6
+ export * from './dtos/PdfDocumentResponse';
7
+ export * from './dtos/RenderDocumentResponse';
8
+ export * from './dtos/TemplateLocationRequest';
9
+ export * from './dtos/PublishTemplateRequest';
10
+ export * from './dtos/PublishTemplateResponse';
11
+ export * from './dtos/UploadAssetRequest';
12
+ export * from './dtos/UploadAssetResponse';
13
+ export * from './dtos/TemplateSummaryResponse';