chromiumly 4.5.0 → 5.1.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 (55) hide show
  1. package/README.md +199 -13
  2. package/dist/chromium/converters/html.converter.js +1 -1
  3. package/dist/chromium/converters/html.converter.js.map +1 -1
  4. package/dist/chromium/converters/markdown.converter.js +1 -1
  5. package/dist/chromium/converters/markdown.converter.js.map +1 -1
  6. package/dist/chromium/converters/url.converter.js +1 -1
  7. package/dist/chromium/converters/url.converter.js.map +1 -1
  8. package/dist/chromium/interfaces/common.types.d.ts +1 -0
  9. package/dist/chromium/screenshots/html.screenshot.js +1 -1
  10. package/dist/chromium/screenshots/html.screenshot.js.map +1 -1
  11. package/dist/chromium/screenshots/markdown.screenshot.js +1 -1
  12. package/dist/chromium/screenshots/markdown.screenshot.js.map +1 -1
  13. package/dist/chromium/screenshots/url.screenshot.js +1 -1
  14. package/dist/chromium/screenshots/url.screenshot.js.map +1 -1
  15. package/dist/chromium/utils/converter.utils.js +3 -0
  16. package/dist/chromium/utils/converter.utils.js.map +1 -1
  17. package/dist/chromium/utils/screenshot.utils.js +3 -0
  18. package/dist/chromium/utils/screenshot.utils.js.map +1 -1
  19. package/dist/common/gotenberg.utils.d.ts +5 -5
  20. package/dist/common/gotenberg.utils.js +9 -6
  21. package/dist/common/gotenberg.utils.js.map +1 -1
  22. package/dist/common/index.d.ts +1 -1
  23. package/dist/gotenberg.d.ts +5 -0
  24. package/dist/gotenberg.js +10 -0
  25. package/dist/gotenberg.js.map +1 -1
  26. package/dist/libre-office/interfaces/libre-office.types.d.ts +15 -0
  27. package/dist/libre-office/libre-office.d.ts +1 -1
  28. package/dist/libre-office/libre-office.js +17 -2
  29. package/dist/libre-office/libre-office.js.map +1 -1
  30. package/dist/libre-office/utils/libre-office.utils.js +45 -0
  31. package/dist/libre-office/utils/libre-office.utils.js.map +1 -1
  32. package/dist/main.config.d.ts +37 -2
  33. package/dist/main.config.js +57 -3
  34. package/dist/main.config.js.map +1 -1
  35. package/dist/main.d.ts +1 -0
  36. package/dist/main.js +3 -1
  37. package/dist/main.js.map +1 -1
  38. package/dist/pdf-engines/pdf-engines.js +8 -8
  39. package/dist/pdf-engines/pdf-engines.js.map +1 -1
  40. package/dist/templates/generators/generator.d.ts +18 -0
  41. package/dist/templates/generators/generator.js +25 -0
  42. package/dist/templates/generators/generator.js.map +1 -0
  43. package/dist/templates/generators/templates.d.ts +8 -0
  44. package/dist/templates/generators/templates.js +44 -0
  45. package/dist/templates/generators/templates.js.map +1 -0
  46. package/dist/templates/index.d.ts +2 -0
  47. package/dist/templates/index.js +6 -0
  48. package/dist/templates/index.js.map +1 -0
  49. package/dist/templates/interfaces/templates.types.d.ts +46 -0
  50. package/dist/templates/interfaces/templates.types.js +3 -0
  51. package/dist/templates/interfaces/templates.types.js.map +1 -0
  52. package/dist/templates/validators/templates.validators.d.ts +6 -0
  53. package/dist/templates/validators/templates.validators.js +63 -0
  54. package/dist/templates/validators/templates.validators.js.map +1 -0
  55. package/package.json +4 -4
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Templates = void 0;
4
+ const main_config_1 = require("../../main.config");
5
+ const templates_validators_1 = require("../validators/templates.validators");
6
+ const generator_1 = require("./generator");
7
+ class Templates extends generator_1.Generator {
8
+ constructor() {
9
+ super(main_config_1.TemplatesRoute.GENERATE);
10
+ }
11
+ async generate(request, options) {
12
+ const apiKey = main_config_1.Chromiumly.getGotenbergApiKey();
13
+ if (!apiKey) {
14
+ throw new Error('Templates requires an API key. Please configure it via Chromiumly.configure({ apiKey: "..." }).');
15
+ }
16
+ if (options?.validate) {
17
+ const validator = templates_validators_1.templateValidators[request.type];
18
+ if (validator && !validator(request.data)) {
19
+ throw new Error(`Invalid template data for type "${request.type}". Please ensure it matches the expected structure.`);
20
+ }
21
+ }
22
+ const response = await fetch(this.endpoint, {
23
+ method: 'POST',
24
+ headers: {
25
+ 'X-Api-Key': apiKey,
26
+ 'Content-Type': 'application/json'
27
+ },
28
+ body: JSON.stringify(request)
29
+ });
30
+ if (!response.ok) {
31
+ const body = await response.text();
32
+ const trace = response.headers.get('gotenberg-trace');
33
+ throw new Error(`Gotenberg API Error:\n` +
34
+ `Endpoint: ${this.endpoint}\n` +
35
+ `Status: ${response.status} ${response.statusText}\n` +
36
+ `Trace: ${trace || 'No trace'}\n` +
37
+ `Body: ${body}`);
38
+ }
39
+ const arrayBuffer = await response.arrayBuffer();
40
+ return Buffer.from(arrayBuffer);
41
+ }
42
+ }
43
+ exports.Templates = Templates;
44
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/templates/generators/templates.ts"],"names":[],"mappings":";;;AAAA,mDAA+D;AAE/D,6EAAwE;AACxE,2CAAwC;AAExC,MAAa,SAAU,SAAQ,qBAAS;IACpC;QACI,KAAK,CAAC,4BAAc,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,QAAQ,CACjB,OAA+B,EAC/B,OAAgC;QAEhC,MAAM,MAAM,GAAG,wBAAU,CAAC,kBAAkB,EAAE,CAAC;QAE/C,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACX,iGAAiG,CACpG,CAAC;QACN,CAAC;QAED,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,yCAAkB,CAAC,OAAO,CAAC,IAAI,CAElC,CAAC;YAEhB,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CACX,mCAAmC,OAAO,CAAC,IAAI,qDAAqD,CACvG,CAAC;YACN,CAAC;QACL,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;YACxC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,WAAW,EAAE,MAAM;gBACnB,cAAc,EAAE,kBAAkB;aACrC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAChC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAEtD,MAAM,IAAI,KAAK,CACX,wBAAwB;gBACpB,aAAa,IAAI,CAAC,QAAQ,IAAI;gBAC9B,WAAW,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,IAAI;gBACrD,UAAU,KAAK,IAAI,UAAU,IAAI;gBACjC,SAAS,IAAI,EAAE,CACtB,CAAC;QACN,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;QACjD,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;CACJ;AAtDD,8BAsDC"}
@@ -0,0 +1,2 @@
1
+ export { type Currency, type TemplateType, type TemplateRequest, type InvoiceSaasTemplateData, type InvoiceClassicTemplateData, type TemplateDataByType, type InvoiceItem, type TemplateParty } from './interfaces/templates.types';
2
+ export { Templates } from './generators/templates';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Templates = void 0;
4
+ var templates_1 = require("./generators/templates");
5
+ Object.defineProperty(exports, "Templates", { enumerable: true, get: function () { return templates_1.Templates; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":";;;AAWA,oDAAmD;AAA1C,sGAAA,SAAS,OAAA"}
@@ -0,0 +1,46 @@
1
+ export type Currency = 'USD' | 'EUR' | 'GBP' | 'JPY' | 'CNY' | 'CHF' | 'CAD' | 'AUD' | 'INR' | 'BRL' | 'MXN' | 'SGD' | 'HKD' | 'NOK' | 'SEK' | 'DKK' | 'NZD' | 'ZAR' | 'AED' | 'SAR' | 'KWD' | 'QAR' | 'BHD' | 'OMR' | 'JOD' | 'EGP' | 'MAD' | 'TND' | 'NGN' | 'KES' | 'GHS' | 'TZS' | 'UGX' | 'ETB' | 'XOF' | 'XAF' | 'TRY' | 'RUB' | 'PLN' | 'CZK' | 'HUF' | 'RON' | 'BGN' | 'HRK' | 'RSD' | 'UAH' | 'ILS' | 'PKR' | 'BDT' | 'LKR' | 'NPR' | 'MMK' | 'THB' | 'VND' | 'IDR' | 'MYR' | 'PHP' | 'KRW' | 'TWD' | 'MNT' | 'KZT' | 'UZS' | 'GEL' | 'AMD' | 'AZN' | 'IRR' | 'IQD' | 'CLP' | 'COP' | 'ARS' | 'PEN' | 'UYU' | 'BOB' | 'PYG' | 'VES' | 'CRC' | 'GTQ' | 'HNL' | 'NIO' | 'DOP' | 'CUP' | 'JMD' | 'TTD' | 'BBD' | 'XCD';
2
+ export type TemplateType = 'invoice_freelancer' | 'invoice_saas' | 'invoice_classic' | 'invoice_minimal' | 'invoice_modern';
3
+ export interface TemplateParty {
4
+ name: string;
5
+ addressLine1: string;
6
+ addressLine2?: string;
7
+ tax?: string;
8
+ iban?: string;
9
+ bic?: string;
10
+ }
11
+ export interface InvoiceItem {
12
+ description: string;
13
+ qty: number;
14
+ unitPrice: string;
15
+ amount: string;
16
+ }
17
+ export interface InvoiceSaasTemplateData {
18
+ invoiceNumber: string;
19
+ createdDate: string;
20
+ dueDate: string;
21
+ companyLogo?: string;
22
+ sender: TemplateParty;
23
+ receiver: TemplateParty;
24
+ items: InvoiceItem[];
25
+ currency: Currency;
26
+ subTotal: string;
27
+ taxRate: number;
28
+ taxAmount: string;
29
+ total: string;
30
+ footerNote: string;
31
+ footerDisclaimer?: string;
32
+ }
33
+ export interface InvoiceClassicTemplateData extends Omit<InvoiceSaasTemplateData, 'companyLogo'> {
34
+ companyLogo: string;
35
+ }
36
+ export interface TemplateDataByType {
37
+ invoice_saas: InvoiceSaasTemplateData;
38
+ invoice_freelancer: InvoiceSaasTemplateData;
39
+ invoice_classic: InvoiceClassicTemplateData;
40
+ invoice_minimal: InvoiceSaasTemplateData;
41
+ invoice_modern: InvoiceSaasTemplateData;
42
+ }
43
+ export type TemplateRequest<TType extends TemplateType> = {
44
+ type: TType;
45
+ data: TemplateDataByType[TType];
46
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=templates.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.types.js","sourceRoot":"","sources":["../../../src/templates/interfaces/templates.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import { TemplateDataByType, TemplateType } from '../interfaces/templates.types';
2
+ type Validator<T> = (data: unknown) => data is T;
3
+ export declare const templateValidators: {
4
+ [T in TemplateType]?: Validator<TemplateDataByType[T]>;
5
+ };
6
+ export {};
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.templateValidators = void 0;
4
+ const isObject = (value) => typeof value === 'object' && value !== null;
5
+ const hasString = (obj, key) => typeof obj[key] === 'string' && obj[key] !== '';
6
+ const hasNumber = (obj, key) => typeof obj[key] === 'number';
7
+ const isValidUrl = (value) => {
8
+ if (typeof value !== 'string' || value === '')
9
+ return false;
10
+ try {
11
+ new URL(value);
12
+ return true;
13
+ }
14
+ catch {
15
+ return false;
16
+ }
17
+ };
18
+ const validateInvoiceSaas = (data) => {
19
+ if (!isObject(data)) {
20
+ return false;
21
+ }
22
+ if (!hasString(data, 'invoiceNumber') ||
23
+ !hasString(data, 'createdDate') ||
24
+ !hasString(data, 'dueDate') ||
25
+ !hasString(data, 'currency') ||
26
+ !hasString(data, 'subTotal') ||
27
+ !hasNumber(data, 'taxRate') ||
28
+ !hasString(data, 'taxAmount') ||
29
+ !hasString(data, 'total') ||
30
+ !hasString(data, 'footerNote')) {
31
+ return false;
32
+ }
33
+ if (data.companyLogo !== undefined && !isValidUrl(data.companyLogo)) {
34
+ return false;
35
+ }
36
+ if (!Array.isArray(data.items) || data.items.length === 0) {
37
+ return false;
38
+ }
39
+ if (!isObject(data.sender) || !isObject(data.receiver)) {
40
+ return false;
41
+ }
42
+ const validateParty = (party) => hasString(party, 'name') && hasString(party, 'addressLine1');
43
+ if (!validateParty(data.sender) ||
44
+ !validateParty(data.receiver)) {
45
+ return false;
46
+ }
47
+ return data.items.every((item) => {
48
+ if (!isObject(item)) {
49
+ return false;
50
+ }
51
+ return (hasString(item, 'description') &&
52
+ hasNumber(item, 'qty') &&
53
+ hasString(item, 'unitPrice') &&
54
+ hasString(item, 'amount'));
55
+ });
56
+ };
57
+ const validateInvoiceClassic = (data) => validateInvoiceSaas(data) &&
58
+ isValidUrl(data['companyLogo']);
59
+ exports.templateValidators = {
60
+ invoice_saas: validateInvoiceSaas,
61
+ invoice_classic: validateInvoiceClassic
62
+ };
63
+ //# sourceMappingURL=templates.validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.validators.js","sourceRoot":"","sources":["../../../src/templates/validators/templates.validators.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chromiumly",
3
- "version": "4.5.0",
3
+ "version": "5.1.0",
4
4
  "description": "A lightweight Typescript library that interacts with Gotenberg's different modules to convert a variety of document formats to PDF files.",
5
5
  "main": "dist/main.js",
6
6
  "types": "dist/main.d.ts",
@@ -55,8 +55,8 @@
55
55
  "@types/dotenv": "8.2.3",
56
56
  "@types/jest": "30.0.0",
57
57
  "@types/node": "24.12.0",
58
- "@typescript-eslint/eslint-plugin": "8.57.1",
59
- "@typescript-eslint/parser": "8.57.1",
58
+ "@typescript-eslint/eslint-plugin": "8.57.2",
59
+ "@typescript-eslint/parser": "8.57.2",
60
60
  "commitizen": "4.3.1",
61
61
  "eslint": "8.57.0",
62
62
  "eslint-config-prettier": "^10.0.0",
@@ -70,7 +70,7 @@
70
70
  "ts-jest": "29.4.6",
71
71
  "ts-node": "10.9.2",
72
72
  "tslib": "2.8.1",
73
- "typescript": "5.9.3"
73
+ "typescript": "6.0.2"
74
74
  },
75
75
  "optionalDependencies": {
76
76
  "config": "4.x",