@fiado/type-kit 3.524.0 → 3.526.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/pdfRender/pdfRenderDtos.test.ts +20 -0
- package/bin/pdfRender/dtos/DocumentUrlResponse.d.ts +10 -0
- package/bin/pdfRender/dtos/DocumentUrlResponse.js +7 -0
- package/bin/pdfRender/dtos/GeneratePdfRequest.d.ts +12 -0
- package/bin/pdfRender/dtos/GeneratePdfRequest.js +23 -0
- package/bin/pdfRender/dtos/MergePdfsRequest.d.ts +12 -0
- package/bin/pdfRender/dtos/MergePdfsRequest.js +23 -0
- package/bin/pdfRender/dtos/PdfDocumentResponse.d.ts +13 -1
- package/bin/pdfRender/dtos/PdfDocumentResponse.js +5 -0
- package/bin/pdfRender/dtos/RenderDocumentRequest.d.ts +8 -0
- package/bin/pdfRender/dtos/RenderDocumentRequest.js +11 -0
- package/bin/pdfRender/index.d.ts +1 -0
- package/bin/pdfRender/index.js +1 -0
- package/package.json +1 -1
- package/src/pdfRender/dtos/DocumentUrlResponse.ts +10 -0
- package/src/pdfRender/dtos/GeneratePdfRequest.ts +21 -1
- package/src/pdfRender/dtos/MergePdfsRequest.ts +21 -1
- package/src/pdfRender/dtos/PdfDocumentResponse.ts +13 -1
- package/src/pdfRender/dtos/RenderDocumentRequest.ts +13 -1
- package/src/pdfRender/index.ts +1 -0
|
@@ -64,3 +64,23 @@ describe('pdfRender admin DTOs', () => {
|
|
|
64
64
|
expect(await errorsOf(TemplateLocationRequest, {})).toEqual(['enterprise']);
|
|
65
65
|
});
|
|
66
66
|
});
|
|
67
|
+
|
|
68
|
+
describe('pdfRender includeContent', () => {
|
|
69
|
+
it('is optional and must be boolean on the three generation requests', async () => {
|
|
70
|
+
const template = { enterprise: 'FIADOSA', documentType: 'X' };
|
|
71
|
+
expect(await errorsOf(RenderDocumentRequest, { template, data: {}, includeContent: true })).toEqual([]);
|
|
72
|
+
expect(await errorsOf(RenderDocumentRequest, { template, data: {}, includeContent: 'yes' })).toEqual(['includeContent']);
|
|
73
|
+
expect(await errorsOf(GeneratePdfRequest, { html: '<p/>', includeContent: false })).toEqual([]);
|
|
74
|
+
expect(await errorsOf(MergePdfsRequest, { pdfs: ['JVBERi0='], includeContent: 1 })).toEqual(['includeContent']);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
describe('pdfRender referenceId', () => {
|
|
79
|
+
it('accepts the owner id and folder fields, and rejects unsafe segments', async () => {
|
|
80
|
+
const template = { enterprise: 'SUREKEEP', documentType: 'CREDITO_CONTRATO' };
|
|
81
|
+
expect(await errorsOf(RenderDocumentRequest, { template, data: {}, referenceId: '01JX9KAB12' })).toEqual([]);
|
|
82
|
+
expect(await errorsOf(RenderDocumentRequest, { template, data: {}, referenceId: '../x' })).toEqual(['referenceId']);
|
|
83
|
+
expect(await errorsOf(GeneratePdfRequest, { html: '<p/>', enterprise: 'SUREKEEP', documentType: 'CREDITO_RESUMEN', referenceId: 'abc' })).toEqual([]);
|
|
84
|
+
expect(await errorsOf(MergePdfsRequest, { pdfs: ['JVBERi0='], enterprise: 'A/B' })).toEqual(['enterprise']);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
/** HTML ya resuelto por el consumidor; se imprime en A4 con márgenes de 2 mm. */
|
|
2
2
|
export declare class GeneratePdfRequest {
|
|
3
3
|
html: string;
|
|
4
|
+
/** Además de la URL, devuelve el PDF en base64 en la respuesta (tope de 4 MiB). */
|
|
5
|
+
includeContent?: boolean;
|
|
6
|
+
/** Empresa (tenant) dueña del documento; sin ella se guarda en una carpeta común. */
|
|
7
|
+
enterprise?: string;
|
|
8
|
+
/** Tipo de documento (carpeta en S3), p. ej. CREDITO_CONTRATO. */
|
|
9
|
+
documentType?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Id de la entidad dueña del documento (crédito, cliente...). Forma parte de la llave en S3, igual
|
|
12
|
+
* que en el resto del bucket de contratos: {EMPRESA}/{TIPO}/{referenceId}/{uuid}.pdf, o con partner
|
|
13
|
+
* {EMPRESA}/{PARTNER}/{CATEGORIA}/{referenceId}/{TIPO}/{uuid}.pdf.
|
|
14
|
+
*/
|
|
15
|
+
referenceId?: string;
|
|
4
16
|
}
|
|
@@ -20,3 +20,26 @@ __decorate([
|
|
|
20
20
|
(0, class_validator_1.IsNotEmpty)(),
|
|
21
21
|
__metadata("design:type", String)
|
|
22
22
|
], GeneratePdfRequest.prototype, "html", void 0);
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, class_validator_1.IsOptional)(),
|
|
25
|
+
(0, class_validator_1.IsBoolean)(),
|
|
26
|
+
__metadata("design:type", Boolean)
|
|
27
|
+
], GeneratePdfRequest.prototype, "includeContent", void 0);
|
|
28
|
+
__decorate([
|
|
29
|
+
(0, class_validator_1.IsOptional)(),
|
|
30
|
+
(0, class_validator_1.IsString)(),
|
|
31
|
+
(0, class_validator_1.Matches)(/^[A-Za-z0-9_-]{1,64}$/),
|
|
32
|
+
__metadata("design:type", String)
|
|
33
|
+
], GeneratePdfRequest.prototype, "enterprise", void 0);
|
|
34
|
+
__decorate([
|
|
35
|
+
(0, class_validator_1.IsOptional)(),
|
|
36
|
+
(0, class_validator_1.IsString)(),
|
|
37
|
+
(0, class_validator_1.Matches)(/^[A-Za-z0-9_-]{1,64}$/),
|
|
38
|
+
__metadata("design:type", String)
|
|
39
|
+
], GeneratePdfRequest.prototype, "documentType", void 0);
|
|
40
|
+
__decorate([
|
|
41
|
+
(0, class_validator_1.IsOptional)(),
|
|
42
|
+
(0, class_validator_1.IsString)(),
|
|
43
|
+
(0, class_validator_1.Matches)(/^[A-Za-z0-9_-]{1,64}$/),
|
|
44
|
+
__metadata("design:type", String)
|
|
45
|
+
], GeneratePdfRequest.prototype, "referenceId", void 0);
|
|
@@ -1,4 +1,16 @@
|
|
|
1
1
|
/** PDFs en base64, en el orden en que deben quedar en el documento final. */
|
|
2
2
|
export declare class MergePdfsRequest {
|
|
3
3
|
pdfs: string[];
|
|
4
|
+
/** Además de la URL, devuelve el PDF en base64 en la respuesta (tope de 4 MiB). */
|
|
5
|
+
includeContent?: boolean;
|
|
6
|
+
/** Empresa (tenant) dueña del documento; sin ella se guarda en una carpeta común. */
|
|
7
|
+
enterprise?: string;
|
|
8
|
+
/** Tipo de documento (carpeta en S3), p. ej. CREDITO_CONTRATO. */
|
|
9
|
+
documentType?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Id de la entidad dueña del documento (crédito, cliente...). Forma parte de la llave en S3, igual
|
|
12
|
+
* que en el resto del bucket de contratos: {EMPRESA}/{TIPO}/{referenceId}/{uuid}.pdf, o con partner
|
|
13
|
+
* {EMPRESA}/{PARTNER}/{CATEGORIA}/{referenceId}/{TIPO}/{uuid}.pdf.
|
|
14
|
+
*/
|
|
15
|
+
referenceId?: string;
|
|
4
16
|
}
|
|
@@ -22,3 +22,26 @@ __decorate([
|
|
|
22
22
|
(0, class_validator_1.IsString)({ each: true }),
|
|
23
23
|
__metadata("design:type", Array)
|
|
24
24
|
], MergePdfsRequest.prototype, "pdfs", void 0);
|
|
25
|
+
__decorate([
|
|
26
|
+
(0, class_validator_1.IsOptional)(),
|
|
27
|
+
(0, class_validator_1.IsBoolean)(),
|
|
28
|
+
__metadata("design:type", Boolean)
|
|
29
|
+
], MergePdfsRequest.prototype, "includeContent", void 0);
|
|
30
|
+
__decorate([
|
|
31
|
+
(0, class_validator_1.IsOptional)(),
|
|
32
|
+
(0, class_validator_1.IsString)(),
|
|
33
|
+
(0, class_validator_1.Matches)(/^[A-Za-z0-9_-]{1,64}$/),
|
|
34
|
+
__metadata("design:type", String)
|
|
35
|
+
], MergePdfsRequest.prototype, "enterprise", void 0);
|
|
36
|
+
__decorate([
|
|
37
|
+
(0, class_validator_1.IsOptional)(),
|
|
38
|
+
(0, class_validator_1.IsString)(),
|
|
39
|
+
(0, class_validator_1.Matches)(/^[A-Za-z0-9_-]{1,64}$/),
|
|
40
|
+
__metadata("design:type", String)
|
|
41
|
+
], MergePdfsRequest.prototype, "documentType", void 0);
|
|
42
|
+
__decorate([
|
|
43
|
+
(0, class_validator_1.IsOptional)(),
|
|
44
|
+
(0, class_validator_1.IsString)(),
|
|
45
|
+
(0, class_validator_1.Matches)(/^[A-Za-z0-9_-]{1,64}$/),
|
|
46
|
+
__metadata("design:type", String)
|
|
47
|
+
], MergePdfsRequest.prototype, "referenceId", void 0);
|
|
@@ -1,5 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Documento PDF generado y guardado por pdf-render-business.
|
|
3
|
+
* `key` es la ubicación del documento por convención ({EMPRESA}/{TIPO}/{aaaa}/{mm}/{uuid}.pdf) y
|
|
4
|
+
* es lo que se guarda para pedir una URL nueva con GET /documents/url?key=... cuando venza la actual.
|
|
5
|
+
*/
|
|
1
6
|
export declare class PdfDocumentResponse {
|
|
2
|
-
|
|
7
|
+
key: string;
|
|
8
|
+
url: string;
|
|
9
|
+
/** ISO-8601. */
|
|
10
|
+
expiresAt: string;
|
|
11
|
+
/** SHA-256 en hexadecimal del PDF exacto que quedó guardado. */
|
|
12
|
+
sha256: string;
|
|
3
13
|
pages: number;
|
|
4
14
|
bytes: number;
|
|
15
|
+
/** Sólo cuando el request pidió `includeContent: true`. */
|
|
16
|
+
base64?: string;
|
|
5
17
|
}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PdfDocumentResponse = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Documento PDF generado y guardado por pdf-render-business.
|
|
6
|
+
* `key` es la ubicación del documento por convención ({EMPRESA}/{TIPO}/{aaaa}/{mm}/{uuid}.pdf) y
|
|
7
|
+
* es lo que se guarda para pedir una URL nueva con GET /documents/url?key=... cuando venza la actual.
|
|
8
|
+
*/
|
|
4
9
|
class PdfDocumentResponse {
|
|
5
10
|
}
|
|
6
11
|
exports.PdfDocumentResponse = PdfDocumentResponse;
|
|
@@ -3,4 +3,12 @@ export declare class RenderDocumentRequest {
|
|
|
3
3
|
template: TemplateRefRequest;
|
|
4
4
|
/** Variables de la plantilla. Se escapan como HTML salvo que la plantilla use {{{triple}}}. */
|
|
5
5
|
data: Record<string, unknown>;
|
|
6
|
+
/** Además de la URL, devuelve el PDF en base64 en la respuesta (tope de 4 MiB). */
|
|
7
|
+
includeContent?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Id de la entidad dueña del documento (crédito, cliente...). Forma parte de la llave en S3, igual
|
|
10
|
+
* que en el resto del bucket de contratos: {EMPRESA}/{TIPO}/{referenceId}/{uuid}.pdf, o con partner
|
|
11
|
+
* {EMPRESA}/{PARTNER}/{CATEGORIA}/{referenceId}/{TIPO}/{uuid}.pdf.
|
|
12
|
+
*/
|
|
13
|
+
referenceId?: string;
|
|
6
14
|
}
|
|
@@ -27,3 +27,14 @@ __decorate([
|
|
|
27
27
|
(0, class_validator_1.IsObject)(),
|
|
28
28
|
__metadata("design:type", Object)
|
|
29
29
|
], RenderDocumentRequest.prototype, "data", void 0);
|
|
30
|
+
__decorate([
|
|
31
|
+
(0, class_validator_1.IsOptional)(),
|
|
32
|
+
(0, class_validator_1.IsBoolean)(),
|
|
33
|
+
__metadata("design:type", Boolean)
|
|
34
|
+
], RenderDocumentRequest.prototype, "includeContent", void 0);
|
|
35
|
+
__decorate([
|
|
36
|
+
(0, class_validator_1.IsOptional)(),
|
|
37
|
+
(0, class_validator_1.IsString)(),
|
|
38
|
+
(0, class_validator_1.Matches)(/^[A-Za-z0-9_-]{1,64}$/),
|
|
39
|
+
__metadata("design:type", String)
|
|
40
|
+
], RenderDocumentRequest.prototype, "referenceId", void 0);
|
package/bin/pdfRender/index.d.ts
CHANGED
package/bin/pdfRender/index.js
CHANGED
|
@@ -27,3 +27,4 @@ __exportStar(require("./dtos/PublishTemplateResponse"), exports);
|
|
|
27
27
|
__exportStar(require("./dtos/UploadAssetRequest"), exports);
|
|
28
28
|
__exportStar(require("./dtos/UploadAssetResponse"), exports);
|
|
29
29
|
__exportStar(require("./dtos/TemplateSummaryResponse"), exports);
|
|
30
|
+
__exportStar(require("./dtos/DocumentUrlResponse"), exports);
|
package/package.json
CHANGED
|
@@ -1,7 +1,27 @@
|
|
|
1
|
-
import { IsNotEmpty, IsString } from "class-validator";
|
|
1
|
+
import { IsBoolean, IsNotEmpty, IsOptional, IsString, Matches } from "class-validator";
|
|
2
2
|
|
|
3
3
|
/** HTML ya resuelto por el consumidor; se imprime en A4 con márgenes de 2 mm. */
|
|
4
4
|
export class GeneratePdfRequest {
|
|
5
5
|
@IsString() @IsNotEmpty()
|
|
6
6
|
html!: string;
|
|
7
|
+
|
|
8
|
+
/** Además de la URL, devuelve el PDF en base64 en la respuesta (tope de 4 MiB). */
|
|
9
|
+
@IsOptional() @IsBoolean()
|
|
10
|
+
includeContent?: boolean;
|
|
11
|
+
|
|
12
|
+
/** Empresa (tenant) dueña del documento; sin ella se guarda en una carpeta común. */
|
|
13
|
+
@IsOptional() @IsString() @Matches(/^[A-Za-z0-9_-]{1,64}$/)
|
|
14
|
+
enterprise?: string;
|
|
15
|
+
|
|
16
|
+
/** Tipo de documento (carpeta en S3), p. ej. CREDITO_CONTRATO. */
|
|
17
|
+
@IsOptional() @IsString() @Matches(/^[A-Za-z0-9_-]{1,64}$/)
|
|
18
|
+
documentType?: string;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Id de la entidad dueña del documento (crédito, cliente...). Forma parte de la llave en S3, igual
|
|
22
|
+
* que en el resto del bucket de contratos: {EMPRESA}/{TIPO}/{referenceId}/{uuid}.pdf, o con partner
|
|
23
|
+
* {EMPRESA}/{PARTNER}/{CATEGORIA}/{referenceId}/{TIPO}/{uuid}.pdf.
|
|
24
|
+
*/
|
|
25
|
+
@IsOptional() @IsString() @Matches(/^[A-Za-z0-9_-]{1,64}$/)
|
|
26
|
+
referenceId?: string;
|
|
7
27
|
}
|
|
@@ -1,7 +1,27 @@
|
|
|
1
|
-
import { ArrayMaxSize, ArrayMinSize, IsArray, IsString } from "class-validator";
|
|
1
|
+
import { ArrayMaxSize, ArrayMinSize, IsArray, IsBoolean, IsOptional, IsString, Matches } from "class-validator";
|
|
2
2
|
|
|
3
3
|
/** PDFs en base64, en el orden en que deben quedar en el documento final. */
|
|
4
4
|
export class MergePdfsRequest {
|
|
5
5
|
@IsArray() @ArrayMinSize(1) @ArrayMaxSize(50) @IsString({ each: true })
|
|
6
6
|
pdfs!: string[];
|
|
7
|
+
|
|
8
|
+
/** Además de la URL, devuelve el PDF en base64 en la respuesta (tope de 4 MiB). */
|
|
9
|
+
@IsOptional() @IsBoolean()
|
|
10
|
+
includeContent?: boolean;
|
|
11
|
+
|
|
12
|
+
/** Empresa (tenant) dueña del documento; sin ella se guarda en una carpeta común. */
|
|
13
|
+
@IsOptional() @IsString() @Matches(/^[A-Za-z0-9_-]{1,64}$/)
|
|
14
|
+
enterprise?: string;
|
|
15
|
+
|
|
16
|
+
/** Tipo de documento (carpeta en S3), p. ej. CREDITO_CONTRATO. */
|
|
17
|
+
@IsOptional() @IsString() @Matches(/^[A-Za-z0-9_-]{1,64}$/)
|
|
18
|
+
documentType?: string;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Id de la entidad dueña del documento (crédito, cliente...). Forma parte de la llave en S3, igual
|
|
22
|
+
* que en el resto del bucket de contratos: {EMPRESA}/{TIPO}/{referenceId}/{uuid}.pdf, o con partner
|
|
23
|
+
* {EMPRESA}/{PARTNER}/{CATEGORIA}/{referenceId}/{TIPO}/{uuid}.pdf.
|
|
24
|
+
*/
|
|
25
|
+
@IsOptional() @IsString() @Matches(/^[A-Za-z0-9_-]{1,64}$/)
|
|
26
|
+
referenceId?: string;
|
|
7
27
|
}
|
|
@@ -1,5 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Documento PDF generado y guardado por pdf-render-business.
|
|
3
|
+
* `key` es la ubicación del documento por convención ({EMPRESA}/{TIPO}/{aaaa}/{mm}/{uuid}.pdf) y
|
|
4
|
+
* es lo que se guarda para pedir una URL nueva con GET /documents/url?key=... cuando venza la actual.
|
|
5
|
+
*/
|
|
1
6
|
export class PdfDocumentResponse {
|
|
2
|
-
|
|
7
|
+
key!: string;
|
|
8
|
+
url!: string;
|
|
9
|
+
/** ISO-8601. */
|
|
10
|
+
expiresAt!: string;
|
|
11
|
+
/** SHA-256 en hexadecimal del PDF exacto que quedó guardado. */
|
|
12
|
+
sha256!: string;
|
|
3
13
|
pages!: number;
|
|
4
14
|
bytes!: number;
|
|
15
|
+
/** Sólo cuando el request pidió `includeContent: true`. */
|
|
16
|
+
base64?: string;
|
|
5
17
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IsDefined, IsObject, ValidateNested } from "class-validator";
|
|
1
|
+
import { IsBoolean, IsDefined, IsObject, IsOptional, IsString, Matches, ValidateNested } from "class-validator";
|
|
2
2
|
import { Type } from "class-transformer";
|
|
3
3
|
import { TemplateRefRequest } from "./TemplateRefRequest";
|
|
4
4
|
|
|
@@ -9,4 +9,16 @@ export class RenderDocumentRequest {
|
|
|
9
9
|
/** Variables de la plantilla. Se escapan como HTML salvo que la plantilla use {{{triple}}}. */
|
|
10
10
|
@IsDefined() @IsObject()
|
|
11
11
|
data!: Record<string, unknown>;
|
|
12
|
+
|
|
13
|
+
/** Además de la URL, devuelve el PDF en base64 en la respuesta (tope de 4 MiB). */
|
|
14
|
+
@IsOptional() @IsBoolean()
|
|
15
|
+
includeContent?: boolean;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Id de la entidad dueña del documento (crédito, cliente...). Forma parte de la llave en S3, igual
|
|
19
|
+
* que en el resto del bucket de contratos: {EMPRESA}/{TIPO}/{referenceId}/{uuid}.pdf, o con partner
|
|
20
|
+
* {EMPRESA}/{PARTNER}/{CATEGORIA}/{referenceId}/{TIPO}/{uuid}.pdf.
|
|
21
|
+
*/
|
|
22
|
+
@IsOptional() @IsString() @Matches(/^[A-Za-z0-9_-]{1,64}$/)
|
|
23
|
+
referenceId?: string;
|
|
12
24
|
}
|
package/src/pdfRender/index.ts
CHANGED