@fiado/type-kit 3.561.0 → 3.562.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/_test_/unit/directDeposit/directDepositDtos.test.ts +38 -0
- package/_test_/unit/pdfGenerator/pdfGeneratorDtos.test.ts +29 -0
- package/bin/directDeposit/dtos/DirectDepositFormatResponse.d.ts +4 -0
- package/bin/directDeposit/dtos/DirectDepositFormatResponse.js +7 -0
- package/bin/directDeposit/dtos/GetDirectDepositFormatByDirectoryRequest.d.ts +6 -0
- package/bin/directDeposit/dtos/GetDirectDepositFormatByDirectoryRequest.js +31 -0
- package/bin/directDeposit/dtos/GetDirectDepositFormatRequest.d.ts +5 -0
- package/bin/directDeposit/dtos/GetDirectDepositFormatRequest.js +26 -0
- package/bin/directDeposit/index.d.ts +3 -0
- package/bin/directDeposit/index.js +20 -0
- package/bin/pdfGenerator/dtos/PdfGeneratorPageConfig.d.ts +28 -0
- package/bin/pdfGenerator/dtos/PdfGeneratorPageConfig.js +14 -0
- package/bin/pdfGenerator/dtos/PdfGeneratorRequest.d.ts +9 -0
- package/bin/pdfGenerator/dtos/PdfGeneratorRequest.js +33 -0
- package/bin/pdfGenerator/dtos/PdfGeneratorResponse.d.ts +4 -0
- package/bin/pdfGenerator/dtos/PdfGeneratorResponse.js +7 -0
- package/bin/pdfGenerator/index.d.ts +3 -0
- package/bin/pdfGenerator/index.js +20 -0
- package/package.json +1 -1
- package/src/directDeposit/dtos/DirectDepositFormatResponse.ts +4 -0
- package/src/directDeposit/dtos/GetDirectDepositFormatByDirectoryRequest.ts +12 -0
- package/src/directDeposit/dtos/GetDirectDepositFormatRequest.ts +9 -0
- package/src/directDeposit/index.ts +4 -0
- package/src/pdfGenerator/dtos/PdfGeneratorPageConfig.ts +22 -0
- package/src/pdfGenerator/dtos/PdfGeneratorRequest.ts +16 -0
- package/src/pdfGenerator/dtos/PdfGeneratorResponse.ts +4 -0
- package/src/pdfGenerator/index.ts +4 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { plainToInstance } from 'class-transformer';
|
|
3
|
+
import { validate } from 'class-validator';
|
|
4
|
+
import { GetDirectDepositFormatByDirectoryRequest, GetDirectDepositFormatRequest } from '../../../src/directDeposit';
|
|
5
|
+
|
|
6
|
+
const parse = async <T extends object>(cls: new () => T, query: unknown) => {
|
|
7
|
+
const instance = plainToInstance(cls, query);
|
|
8
|
+
const errors = (await validate(instance as object, { whitelist: true })).map(e => e.property);
|
|
9
|
+
return { instance, errors };
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
describe('GetDirectDepositFormatRequest (app: el directoryId sale del token)', () => {
|
|
13
|
+
it('convierte percentage de string (query) a número', async () => {
|
|
14
|
+
const { instance, errors } = await parse(GetDirectDepositFormatRequest, { percentage: '50' });
|
|
15
|
+
expect(errors).toEqual([]);
|
|
16
|
+
expect(instance.percentage).toBe(50);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('percentage es opcional', async () => {
|
|
20
|
+
expect((await parse(GetDirectDepositFormatRequest, {})).errors).toEqual([]);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it.each(['0', '101', '12.5', 'abc'])('rechaza percentage=%s', async (percentage) => {
|
|
24
|
+
expect((await parse(GetDirectDepositFormatRequest, { percentage })).errors).toEqual(['percentage']);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
describe('GetDirectDepositFormatByDirectoryRequest (agentes y backoffice)', () => {
|
|
29
|
+
it('acepta directoryId con percentage', async () => {
|
|
30
|
+
const { instance, errors } = await parse(GetDirectDepositFormatByDirectoryRequest, { directoryId: 'dir-1', percentage: '30' });
|
|
31
|
+
expect(errors).toEqual([]);
|
|
32
|
+
expect(instance.percentage).toBe(30);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it.each([[{}], [{ directoryId: '' }]])('directoryId es obligatorio (%j)', async (query) => {
|
|
36
|
+
expect((await parse(GetDirectDepositFormatByDirectoryRequest, query)).errors).toEqual(['directoryId']);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { plainToInstance } from 'class-transformer';
|
|
3
|
+
import { validate } from 'class-validator';
|
|
4
|
+
import { PdfGeneratorRequest } from '../../../src/pdfGenerator';
|
|
5
|
+
|
|
6
|
+
const errorsOf = async (body: unknown) =>
|
|
7
|
+
(await validate(plainToInstance(PdfGeneratorRequest, body) as object, { whitelist: true })).map(e => e.property);
|
|
8
|
+
|
|
9
|
+
describe('pdfGenerator DTOs', () => {
|
|
10
|
+
it('acepta html con page y provider', async () => {
|
|
11
|
+
expect(await errorsOf({
|
|
12
|
+
html: '<p>x</p>',
|
|
13
|
+
page: { size: 'A4', margin: { top: '45pt', right: '45pt', bottom: '45pt', left: '45pt' } },
|
|
14
|
+
provider: 'pdflib',
|
|
15
|
+
})).toEqual([]);
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('acepta solo html', async () => {
|
|
19
|
+
expect(await errorsOf({ html: '<p>x</p>' })).toEqual([]);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('rechaza html vacío y provider desconocido', async () => {
|
|
23
|
+
expect((await errorsOf({ html: '', provider: 'chrome' })).sort()).toEqual(['html', 'provider']);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('rechaza page que no es objeto', async () => {
|
|
27
|
+
expect(await errorsOf({ html: '<p>x</p>', page: 'A4' })).toEqual(['page']);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DirectDepositFormatResponse = void 0;
|
|
4
|
+
/** `data` de la respuesta: el PDF del formato Direct Deposit en base64. */
|
|
5
|
+
class DirectDepositFormatResponse {
|
|
6
|
+
}
|
|
7
|
+
exports.DirectDepositFormatResponse = DirectDepositFormatResponse;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Query de GET /agents/direct-deposit y /backoffice/direct-deposit (+ /v2): formato de un tercero. */
|
|
2
|
+
export declare class GetDirectDepositFormatByDirectoryRequest {
|
|
3
|
+
directoryId: string;
|
|
4
|
+
/** Porcentaje del cheque a depositar (1–100). Default 100. */
|
|
5
|
+
percentage?: number;
|
|
6
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
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.GetDirectDepositFormatByDirectoryRequest = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
/** Query de GET /agents/direct-deposit y /backoffice/direct-deposit (+ /v2): formato de un tercero. */
|
|
16
|
+
class GetDirectDepositFormatByDirectoryRequest {
|
|
17
|
+
}
|
|
18
|
+
exports.GetDirectDepositFormatByDirectoryRequest = GetDirectDepositFormatByDirectoryRequest;
|
|
19
|
+
__decorate([
|
|
20
|
+
(0, class_validator_1.IsString)(),
|
|
21
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
22
|
+
__metadata("design:type", String)
|
|
23
|
+
], GetDirectDepositFormatByDirectoryRequest.prototype, "directoryId", void 0);
|
|
24
|
+
__decorate([
|
|
25
|
+
(0, class_validator_1.IsOptional)(),
|
|
26
|
+
(0, class_transformer_1.Type)(() => Number),
|
|
27
|
+
(0, class_validator_1.IsInt)(),
|
|
28
|
+
(0, class_validator_1.Min)(1),
|
|
29
|
+
(0, class_validator_1.Max)(100),
|
|
30
|
+
__metadata("design:type", Number)
|
|
31
|
+
], GetDirectDepositFormatByDirectoryRequest.prototype, "percentage", void 0);
|
|
@@ -0,0 +1,26 @@
|
|
|
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.GetDirectDepositFormatRequest = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
/** Query de GET /direct-deposit (app) de direct-deposit-export-business. El directoryId sale del token. */
|
|
16
|
+
class GetDirectDepositFormatRequest {
|
|
17
|
+
}
|
|
18
|
+
exports.GetDirectDepositFormatRequest = GetDirectDepositFormatRequest;
|
|
19
|
+
__decorate([
|
|
20
|
+
(0, class_validator_1.IsOptional)(),
|
|
21
|
+
(0, class_transformer_1.Type)(() => Number),
|
|
22
|
+
(0, class_validator_1.IsInt)(),
|
|
23
|
+
(0, class_validator_1.Min)(1),
|
|
24
|
+
(0, class_validator_1.Max)(100),
|
|
25
|
+
__metadata("design:type", Number)
|
|
26
|
+
], GetDirectDepositFormatRequest.prototype, "percentage", void 0);
|
|
@@ -0,0 +1,20 @@
|
|
|
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/GetDirectDepositFormatRequest"), exports);
|
|
19
|
+
__exportStar(require("./dtos/GetDirectDepositFormatByDirectoryRequest"), exports);
|
|
20
|
+
__exportStar(require("./dtos/DirectDepositFormatResponse"), exports);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** Tamaño nombrado o personalizado en puntos PDF (1pt = 1/72in). */
|
|
2
|
+
export type PdfGeneratorPageSize = 'LETTER' | 'A4' | 'LEGAL' | {
|
|
3
|
+
width: number;
|
|
4
|
+
height: number;
|
|
5
|
+
};
|
|
6
|
+
/** Texto por página en el margen; acepta los tokens {page} y {pages}. */
|
|
7
|
+
export declare class PdfGeneratorPageBoxText {
|
|
8
|
+
left?: string;
|
|
9
|
+
center?: string;
|
|
10
|
+
right?: string;
|
|
11
|
+
fontSize?: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Configuración de hoja de pdf-generator-business. Las longitudes de margen llevan unidad
|
|
15
|
+
* (mm, cm, in, pt, px). Sin `page`, el lambda usa el @page de la plantilla o A4 con 2 mm.
|
|
16
|
+
*/
|
|
17
|
+
export declare class PdfGeneratorPageConfig {
|
|
18
|
+
size?: PdfGeneratorPageSize;
|
|
19
|
+
orientation?: 'portrait' | 'landscape';
|
|
20
|
+
margin?: {
|
|
21
|
+
top?: string;
|
|
22
|
+
right?: string;
|
|
23
|
+
bottom?: string;
|
|
24
|
+
left?: string;
|
|
25
|
+
};
|
|
26
|
+
header?: PdfGeneratorPageBoxText;
|
|
27
|
+
footer?: PdfGeneratorPageBoxText;
|
|
28
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PdfGeneratorPageConfig = exports.PdfGeneratorPageBoxText = void 0;
|
|
4
|
+
/** Texto por página en el margen; acepta los tokens {page} y {pages}. */
|
|
5
|
+
class PdfGeneratorPageBoxText {
|
|
6
|
+
}
|
|
7
|
+
exports.PdfGeneratorPageBoxText = PdfGeneratorPageBoxText;
|
|
8
|
+
/**
|
|
9
|
+
* Configuración de hoja de pdf-generator-business. Las longitudes de margen llevan unidad
|
|
10
|
+
* (mm, cm, in, pt, px). Sin `page`, el lambda usa el @page de la plantilla o A4 con 2 mm.
|
|
11
|
+
*/
|
|
12
|
+
class PdfGeneratorPageConfig {
|
|
13
|
+
}
|
|
14
|
+
exports.PdfGeneratorPageConfig = PdfGeneratorPageConfig;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { PdfGeneratorPageConfig } from './PdfGeneratorPageConfig';
|
|
2
|
+
/** POST /generate-pdf de pdf-generator-business: HTML ya armado → PDF en base64. */
|
|
3
|
+
export declare class PdfGeneratorRequest {
|
|
4
|
+
html: string;
|
|
5
|
+
/** La valida a fondo el propio lambda (400 con el campo que falla). */
|
|
6
|
+
page?: PdfGeneratorPageConfig;
|
|
7
|
+
/** Override del motor para este request (default del lambda: pdflib). */
|
|
8
|
+
provider?: 'pdflib' | 'puppeteer';
|
|
9
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
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.PdfGeneratorRequest = void 0;
|
|
13
|
+
const class_validator_1 = require("class-validator");
|
|
14
|
+
const PdfGeneratorPageConfig_1 = require("./PdfGeneratorPageConfig");
|
|
15
|
+
/** POST /generate-pdf de pdf-generator-business: HTML ya armado → PDF en base64. */
|
|
16
|
+
class PdfGeneratorRequest {
|
|
17
|
+
}
|
|
18
|
+
exports.PdfGeneratorRequest = PdfGeneratorRequest;
|
|
19
|
+
__decorate([
|
|
20
|
+
(0, class_validator_1.IsString)(),
|
|
21
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
22
|
+
__metadata("design:type", String)
|
|
23
|
+
], PdfGeneratorRequest.prototype, "html", void 0);
|
|
24
|
+
__decorate([
|
|
25
|
+
(0, class_validator_1.IsOptional)(),
|
|
26
|
+
(0, class_validator_1.IsObject)(),
|
|
27
|
+
__metadata("design:type", PdfGeneratorPageConfig_1.PdfGeneratorPageConfig)
|
|
28
|
+
], PdfGeneratorRequest.prototype, "page", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
(0, class_validator_1.IsOptional)(),
|
|
31
|
+
(0, class_validator_1.IsIn)(['pdflib', 'puppeteer']),
|
|
32
|
+
__metadata("design:type", String)
|
|
33
|
+
], PdfGeneratorRequest.prototype, "provider", void 0);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PdfGeneratorResponse = void 0;
|
|
4
|
+
/** Respuesta de POST /generate-pdf. El header X-Pdf-Provider indica el motor usado. */
|
|
5
|
+
class PdfGeneratorResponse {
|
|
6
|
+
}
|
|
7
|
+
exports.PdfGeneratorResponse = PdfGeneratorResponse;
|
|
@@ -0,0 +1,20 @@
|
|
|
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/PdfGeneratorPageConfig"), exports);
|
|
19
|
+
__exportStar(require("./dtos/PdfGeneratorRequest"), exports);
|
|
20
|
+
__exportStar(require("./dtos/PdfGeneratorResponse"), exports);
|
package/package.json
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Type } from 'class-transformer';
|
|
2
|
+
import { IsInt, IsNotEmpty, IsOptional, IsString, Max, Min } from 'class-validator';
|
|
3
|
+
|
|
4
|
+
/** Query de GET /agents/direct-deposit y /backoffice/direct-deposit (+ /v2): formato de un tercero. */
|
|
5
|
+
export class GetDirectDepositFormatByDirectoryRequest {
|
|
6
|
+
@IsString() @IsNotEmpty()
|
|
7
|
+
directoryId!: string;
|
|
8
|
+
|
|
9
|
+
/** Porcentaje del cheque a depositar (1–100). Default 100. */
|
|
10
|
+
@IsOptional() @Type(() => Number) @IsInt() @Min(1) @Max(100)
|
|
11
|
+
percentage?: number;
|
|
12
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Type } from 'class-transformer';
|
|
2
|
+
import { IsInt, IsOptional, Max, Min } from 'class-validator';
|
|
3
|
+
|
|
4
|
+
/** Query de GET /direct-deposit (app) de direct-deposit-export-business. El directoryId sale del token. */
|
|
5
|
+
export class GetDirectDepositFormatRequest {
|
|
6
|
+
/** Porcentaje del cheque a depositar (1–100). Default 100. */
|
|
7
|
+
@IsOptional() @Type(() => Number) @IsInt() @Min(1) @Max(100)
|
|
8
|
+
percentage?: number;
|
|
9
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Tamaño nombrado o personalizado en puntos PDF (1pt = 1/72in). */
|
|
2
|
+
export type PdfGeneratorPageSize = 'LETTER' | 'A4' | 'LEGAL' | { width: number; height: number };
|
|
3
|
+
|
|
4
|
+
/** Texto por página en el margen; acepta los tokens {page} y {pages}. */
|
|
5
|
+
export class PdfGeneratorPageBoxText {
|
|
6
|
+
left?: string;
|
|
7
|
+
center?: string;
|
|
8
|
+
right?: string;
|
|
9
|
+
fontSize?: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Configuración de hoja de pdf-generator-business. Las longitudes de margen llevan unidad
|
|
14
|
+
* (mm, cm, in, pt, px). Sin `page`, el lambda usa el @page de la plantilla o A4 con 2 mm.
|
|
15
|
+
*/
|
|
16
|
+
export class PdfGeneratorPageConfig {
|
|
17
|
+
size?: PdfGeneratorPageSize;
|
|
18
|
+
orientation?: 'portrait' | 'landscape';
|
|
19
|
+
margin?: { top?: string; right?: string; bottom?: string; left?: string };
|
|
20
|
+
header?: PdfGeneratorPageBoxText;
|
|
21
|
+
footer?: PdfGeneratorPageBoxText;
|
|
22
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { IsIn, IsNotEmpty, IsObject, IsOptional, IsString } from 'class-validator';
|
|
2
|
+
import { PdfGeneratorPageConfig } from './PdfGeneratorPageConfig';
|
|
3
|
+
|
|
4
|
+
/** POST /generate-pdf de pdf-generator-business: HTML ya armado → PDF en base64. */
|
|
5
|
+
export class PdfGeneratorRequest {
|
|
6
|
+
@IsString() @IsNotEmpty()
|
|
7
|
+
html!: string;
|
|
8
|
+
|
|
9
|
+
/** La valida a fondo el propio lambda (400 con el campo que falla). */
|
|
10
|
+
@IsOptional() @IsObject()
|
|
11
|
+
page?: PdfGeneratorPageConfig;
|
|
12
|
+
|
|
13
|
+
/** Override del motor para este request (default del lambda: pdflib). */
|
|
14
|
+
@IsOptional() @IsIn(['pdflib', 'puppeteer'])
|
|
15
|
+
provider?: 'pdflib' | 'puppeteer';
|
|
16
|
+
}
|