@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.
@@ -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
+ });
@@ -0,0 +1,10 @@
1
+ /** Nueva URL firmada para un documento ya guardado. */
2
+ export declare class DocumentUrlResponse {
3
+ key: string;
4
+ url: string;
5
+ /** ISO-8601. */
6
+ expiresAt: string;
7
+ sha256: string;
8
+ pages: number;
9
+ bytes: number;
10
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DocumentUrlResponse = void 0;
4
+ /** Nueva URL firmada para un documento ya guardado. */
5
+ class DocumentUrlResponse {
6
+ }
7
+ exports.DocumentUrlResponse = DocumentUrlResponse;
@@ -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
- base64: string;
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);
@@ -10,3 +10,4 @@ export * from './dtos/PublishTemplateResponse';
10
10
  export * from './dtos/UploadAssetRequest';
11
11
  export * from './dtos/UploadAssetResponse';
12
12
  export * from './dtos/TemplateSummaryResponse';
13
+ export * from './dtos/DocumentUrlResponse';
@@ -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,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.524.0",
3
+ "version": "3.526.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -0,0 +1,10 @@
1
+ /** Nueva URL firmada para un documento ya guardado. */
2
+ export class DocumentUrlResponse {
3
+ key!: string;
4
+ url!: string;
5
+ /** ISO-8601. */
6
+ expiresAt!: string;
7
+ sha256!: string;
8
+ pages!: number;
9
+ bytes!: number;
10
+ }
@@ -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
- base64!: string;
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
  }
@@ -11,3 +11,4 @@ export * from './dtos/PublishTemplateResponse';
11
11
  export * from './dtos/UploadAssetRequest';
12
12
  export * from './dtos/UploadAssetResponse';
13
13
  export * from './dtos/TemplateSummaryResponse';
14
+ export * from './dtos/DocumentUrlResponse';