chromiumly 3.0.1 → 3.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 (54) hide show
  1. package/README.md +40 -2
  2. package/dist/chromium/converters/html.converter.d.ts +4 -2
  3. package/dist/chromium/converters/html.converter.js +5 -3
  4. package/dist/chromium/converters/html.converter.js.map +1 -1
  5. package/dist/chromium/converters/markdown.converter.d.ts +4 -2
  6. package/dist/chromium/converters/markdown.converter.js +5 -3
  7. package/dist/chromium/converters/markdown.converter.js.map +1 -1
  8. package/dist/chromium/converters/url.converter.d.ts +4 -2
  9. package/dist/chromium/converters/url.converter.js +5 -3
  10. package/dist/chromium/converters/url.converter.js.map +1 -1
  11. package/dist/chromium/interfaces/converter.types.d.ts +10 -0
  12. package/dist/chromium/screenshots/html.screenshot.js +1 -1
  13. package/dist/chromium/screenshots/html.screenshot.js.map +1 -1
  14. package/dist/chromium/screenshots/markdown.screenshot.js +1 -1
  15. package/dist/chromium/screenshots/markdown.screenshot.js.map +1 -1
  16. package/dist/chromium/screenshots/url.screenshot.js +1 -1
  17. package/dist/chromium/screenshots/url.screenshot.js.map +1 -1
  18. package/dist/chromium/utils/converter.utils.js +3 -0
  19. package/dist/chromium/utils/converter.utils.js.map +1 -1
  20. package/dist/common/gotenberg.utils.d.ts +3 -1
  21. package/dist/common/gotenberg.utils.js +10 -2
  22. package/dist/common/gotenberg.utils.js.map +1 -1
  23. package/dist/gotenberg.d.ts +12 -3
  24. package/dist/gotenberg.js +28 -7
  25. package/dist/gotenberg.js.map +1 -1
  26. package/dist/libre-office/interfaces/libre-office.types.d.ts +1 -0
  27. package/dist/libre-office/libre-office.js +1 -1
  28. package/dist/libre-office/libre-office.js.map +1 -1
  29. package/dist/libre-office/utils/libre-office.utils.js +3 -0
  30. package/dist/libre-office/utils/libre-office.utils.js.map +1 -1
  31. package/dist/main.config.d.ts +10 -0
  32. package/dist/main.config.js +10 -0
  33. package/dist/main.config.js.map +1 -1
  34. package/dist/pdf-engines/pdf-engines.js +4 -4
  35. package/dist/pdf-engines/pdf-engines.js.map +1 -1
  36. package/package.json +5 -5
  37. package/src/chromium/converters/html.converter.ts +14 -5
  38. package/src/chromium/converters/markdown.converter.ts +14 -5
  39. package/src/chromium/converters/url.converter.ts +14 -5
  40. package/src/chromium/interfaces/converter.types.ts +11 -0
  41. package/src/chromium/screenshots/html.screenshot.ts +7 -2
  42. package/src/chromium/screenshots/markdown.screenshot.ts +7 -2
  43. package/src/chromium/screenshots/url.screenshot.ts +7 -2
  44. package/src/chromium/utils/converter.utils.ts +4 -0
  45. package/src/chromium/utils/tests/converter.utils.test.ts +33 -0
  46. package/src/common/gotenberg.utils.ts +15 -4
  47. package/src/common/tests/gotenberg.utils.test.ts +20 -3
  48. package/src/gotenberg.ts +29 -5
  49. package/src/libre-office/interfaces/libre-office.types.ts +1 -0
  50. package/src/libre-office/libre-office.ts +6 -1
  51. package/src/libre-office/utils/libre-office.utils.ts +7 -0
  52. package/src/libre-office/utils/tests/libre-office.utils.test.ts +15 -0
  53. package/src/main.config.ts +14 -0
  54. package/src/pdf-engines/pdf-engines.ts +24 -4
@@ -29,7 +29,7 @@ class PDFEngines {
29
29
  metadata
30
30
  });
31
31
  const endpoint = `${main_config_1.Chromiumly.GOTENBERG_ENDPOINT}/${main_config_1.Chromiumly.PDF_ENGINES_PATH}/${main_config_1.Chromiumly.PDF_ENGINE_ROUTES.merge}`;
32
- return common_1.GotenbergUtils.fetch(endpoint, data);
32
+ return common_1.GotenbergUtils.fetch(endpoint, data, main_config_1.Chromiumly.GOTENBERG_API_BASIC_AUTH_USERNAME, main_config_1.Chromiumly.GOTENBERG_API_BASIC_AUTH_PASSWORD);
33
33
  });
34
34
  }
35
35
  /**
@@ -50,7 +50,7 @@ class PDFEngines {
50
50
  pdfUA
51
51
  });
52
52
  const endpoint = `${main_config_1.Chromiumly.GOTENBERG_ENDPOINT}/${main_config_1.Chromiumly.LIBRE_OFFICE_PATH}/${main_config_1.Chromiumly.LIBRE_OFFICE_ROUTES.convert}`;
53
- return common_1.GotenbergUtils.fetch(endpoint, data);
53
+ return common_1.GotenbergUtils.fetch(endpoint, data, main_config_1.Chromiumly.GOTENBERG_API_BASIC_AUTH_USERNAME, main_config_1.Chromiumly.GOTENBERG_API_BASIC_AUTH_PASSWORD);
54
54
  });
55
55
  }
56
56
  /**
@@ -64,7 +64,7 @@ class PDFEngines {
64
64
  const data = new form_data_1.default();
65
65
  yield pdf_engines_utils_1.PDFEnginesUtils.addFiles(files, data);
66
66
  const endpoint = `${main_config_1.Chromiumly.GOTENBERG_ENDPOINT}/${main_config_1.Chromiumly.PDF_ENGINES_PATH}/${main_config_1.Chromiumly.PDF_ENGINE_ROUTES.readMetadata}`;
67
- return common_1.GotenbergUtils.fetch(endpoint, data);
67
+ return common_1.GotenbergUtils.fetch(endpoint, data, main_config_1.Chromiumly.GOTENBERG_API_BASIC_AUTH_USERNAME, main_config_1.Chromiumly.GOTENBERG_API_BASIC_AUTH_PASSWORD);
68
68
  });
69
69
  }
70
70
  /**
@@ -80,7 +80,7 @@ class PDFEngines {
80
80
  data.append('metadata', JSON.stringify(metadata));
81
81
  yield pdf_engines_utils_1.PDFEnginesUtils.addFiles(files, data);
82
82
  const endpoint = `${main_config_1.Chromiumly.GOTENBERG_ENDPOINT}/${main_config_1.Chromiumly.PDF_ENGINES_PATH}/${main_config_1.Chromiumly.PDF_ENGINE_ROUTES.writeMetadata}`;
83
- return common_1.GotenbergUtils.fetch(endpoint, data);
83
+ return common_1.GotenbergUtils.fetch(endpoint, data, main_config_1.Chromiumly.GOTENBERG_API_BASIC_AUTH_USERNAME, main_config_1.Chromiumly.GOTENBERG_API_BASIC_AUTH_PASSWORD);
84
84
  });
85
85
  }
86
86
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"pdf-engines.js","sourceRoot":"","sources":["../../src/pdf-engines/pdf-engines.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pdf-engines.js","sourceRoot":"","sources":["../../src/pdf-engines/pdf-engines.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chromiumly",
3
- "version": "3.0.1",
3
+ "version": "3.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",
@@ -50,10 +50,10 @@
50
50
  "@types/dotenv": "8.2.0",
51
51
  "@types/form-data": "2.5.0",
52
52
  "@types/jest": "29.5.12",
53
- "@types/node": "20.12.5",
53
+ "@types/node": "20.12.7",
54
54
  "@types/node-fetch": "2.6.11",
55
- "@typescript-eslint/eslint-plugin": "7.5.0",
56
- "@typescript-eslint/parser": "7.5.0",
55
+ "@typescript-eslint/eslint-plugin": "7.6.0",
56
+ "@typescript-eslint/parser": "7.6.0",
57
57
  "commitizen": "4.3.0",
58
58
  "eslint": "8.57.0",
59
59
  "eslint-config-prettier": "^9.1.0",
@@ -67,7 +67,7 @@
67
67
  "ts-jest": "29.1.2",
68
68
  "ts-node": "10.9.2",
69
69
  "tslib": "2.6.2",
70
- "typescript": "5.4.4"
70
+ "typescript": "5.4.5"
71
71
  },
72
72
  "dependencies": {
73
73
  "config": "3.3.11",
@@ -6,10 +6,10 @@ import {
6
6
  PathLikeOrReadStream,
7
7
  PdfFormat
8
8
  } from '../../common';
9
- import { PageProperties } from '../interfaces/converter.types';
9
+ import { Cookie, PageProperties } from '../interfaces/converter.types';
10
10
  import { ConverterUtils } from '../utils/converter.utils';
11
11
  import { Converter } from './converter';
12
- import { ChromiumRoute } from '../../main.config';
12
+ import { ChromiumRoute, Chromiumly } from '../../main.config';
13
13
  import { EmulatedMediaType } from '../interfaces/common.types';
14
14
 
15
15
  /**
@@ -46,6 +46,7 @@ export class HtmlConverter extends Converter {
46
46
  * @param {boolean} [options.failOnConsoleExceptions] - Whether to fail on console exceptions during conversion.
47
47
  * @param {boolean} [options.skipNetworkIdleEvent] - Whether to skip network idle event.
48
48
  * @param {Metadata} options.metadata - Metadata to be written.
49
+ * @param {Cookie[]} options.cookies - Cookies to be written.
49
50
  * @returns {Promise<Buffer>} A Promise resolving to the converted PDF content as a Buffer.
50
51
  */
51
52
  async convert({
@@ -64,7 +65,8 @@ export class HtmlConverter extends Converter {
64
65
  failOnHttpStatusCodes,
65
66
  failOnConsoleExceptions,
66
67
  skipNetworkIdleEvent,
67
- metadata
68
+ metadata,
69
+ cookies
68
70
  }: {
69
71
  html: PathLikeOrReadStream;
70
72
  assets?: { file: PathLikeOrReadStream; name: string }[];
@@ -90,6 +92,7 @@ export class HtmlConverter extends Converter {
90
92
  failOnConsoleExceptions?: boolean;
91
93
  skipNetworkIdleEvent?: boolean;
92
94
  metadata?: Metadata;
95
+ cookies?: Cookie[];
93
96
  }): Promise<Buffer> {
94
97
  const data = new FormData();
95
98
 
@@ -117,9 +120,15 @@ export class HtmlConverter extends Converter {
117
120
  failOnHttpStatusCodes,
118
121
  failOnConsoleExceptions,
119
122
  skipNetworkIdleEvent,
120
- metadata
123
+ metadata,
124
+ cookies
121
125
  });
122
126
 
123
- return GotenbergUtils.fetch(this.endpoint, data);
127
+ return GotenbergUtils.fetch(
128
+ this.endpoint,
129
+ data,
130
+ Chromiumly.GOTENBERG_API_BASIC_AUTH_USERNAME,
131
+ Chromiumly.GOTENBERG_API_BASIC_AUTH_PASSWORD
132
+ );
124
133
  }
125
134
  }
@@ -6,10 +6,10 @@ import {
6
6
  PathLikeOrReadStream,
7
7
  Metadata
8
8
  } from '../../common';
9
- import { PageProperties } from '../interfaces/converter.types';
9
+ import { Cookie, PageProperties } from '../interfaces/converter.types';
10
10
  import { ConverterUtils } from '../utils/converter.utils';
11
11
  import { Converter } from './converter';
12
- import { ChromiumRoute } from '../../main.config';
12
+ import { ChromiumRoute, Chromiumly } from '../../main.config';
13
13
  import { EmulatedMediaType } from '../interfaces/common.types';
14
14
 
15
15
  /**
@@ -47,6 +47,7 @@ export class MarkdownConverter extends Converter {
47
47
  * @param {boolean} [options.failOnConsoleExceptions] - Whether to fail on console exceptions during conversion.
48
48
  * @param {boolean} [options.skipNetworkIdleEvent] - Whether to skip network idle event.
49
49
  * @param {Metadata} options.metadata - Metadata to be written.
50
+ * @param {Cookie[]} options.cookies - Cookies to be written.
50
51
  * @returns {Promise<Buffer>} A Promise resolving to the converted PDF content as a Buffer.
51
52
  */
52
53
  async convert({
@@ -65,7 +66,8 @@ export class MarkdownConverter extends Converter {
65
66
  failOnHttpStatusCodes,
66
67
  failOnConsoleExceptions,
67
68
  skipNetworkIdleEvent,
68
- metadata
69
+ metadata,
70
+ cookies
69
71
  }: {
70
72
  html: PathLikeOrReadStream;
71
73
  markdown: PathLikeOrReadStream;
@@ -91,6 +93,7 @@ export class MarkdownConverter extends Converter {
91
93
  failOnConsoleExceptions?: boolean;
92
94
  skipNetworkIdleEvent?: boolean;
93
95
  metadata?: Metadata;
96
+ cookies?: Cookie[];
94
97
  }): Promise<Buffer> {
95
98
  const data = new FormData();
96
99
 
@@ -112,9 +115,15 @@ export class MarkdownConverter extends Converter {
112
115
  failOnHttpStatusCodes,
113
116
  failOnConsoleExceptions,
114
117
  skipNetworkIdleEvent,
115
- metadata
118
+ metadata,
119
+ cookies
116
120
  });
117
121
 
118
- return GotenbergUtils.fetch(this.endpoint, data);
122
+ return GotenbergUtils.fetch(
123
+ this.endpoint,
124
+ data,
125
+ Chromiumly.GOTENBERG_API_BASIC_AUTH_USERNAME,
126
+ Chromiumly.GOTENBERG_API_BASIC_AUTH_PASSWORD
127
+ );
119
128
  }
120
129
  }
@@ -6,10 +6,10 @@ import {
6
6
  PathLikeOrReadStream,
7
7
  Metadata
8
8
  } from '../../common';
9
- import { PageProperties } from '../interfaces/converter.types';
9
+ import { Cookie, PageProperties } from '../interfaces/converter.types';
10
10
  import { ConverterUtils } from '../utils/converter.utils';
11
11
  import { Converter } from './converter';
12
- import { ChromiumRoute } from '../../main.config';
12
+ import { ChromiumRoute, Chromiumly } from '../../main.config';
13
13
  import { EmulatedMediaType } from '../interfaces/common.types';
14
14
 
15
15
  /**
@@ -46,6 +46,7 @@ export class UrlConverter extends Converter {
46
46
  * @param {boolean} [options.failOnConsoleExceptions] - Whether to fail on console exceptions during conversion.
47
47
  * @param {boolean} [options.skipNetworkIdleEvent] - Whether to skip network idle event.
48
48
  * @param {Metadata} options.metadata - Metadata to be written.
49
+ * @param {Cookie[]} options.cookies - Cookies to be written.
49
50
  * @returns {Promise<Buffer>} A Promise resolving to the converted PDF content as a Buffer.
50
51
  */
51
52
  async convert({
@@ -63,7 +64,8 @@ export class UrlConverter extends Converter {
63
64
  failOnHttpStatusCodes,
64
65
  failOnConsoleExceptions,
65
66
  skipNetworkIdleEvent,
66
- metadata
67
+ metadata,
68
+ cookies
67
69
  }: {
68
70
  url: string;
69
71
  header?: PathLikeOrReadStream;
@@ -88,6 +90,7 @@ export class UrlConverter extends Converter {
88
90
  failOnConsoleExceptions?: boolean;
89
91
  skipNetworkIdleEvent?: boolean;
90
92
  metadata?: Metadata;
93
+ cookies?: Cookie[];
91
94
  }): Promise<Buffer> {
92
95
  const _url = new URL(url);
93
96
  const data = new FormData();
@@ -108,9 +111,15 @@ export class UrlConverter extends Converter {
108
111
  failOnHttpStatusCodes,
109
112
  failOnConsoleExceptions,
110
113
  skipNetworkIdleEvent,
111
- metadata
114
+ metadata,
115
+ cookies
112
116
  });
113
117
 
114
- return GotenbergUtils.fetch(this.endpoint, data);
118
+ return GotenbergUtils.fetch(
119
+ this.endpoint,
120
+ data,
121
+ Chromiumly.GOTENBERG_API_BASIC_AUTH_USERNAME,
122
+ Chromiumly.GOTENBERG_API_BASIC_AUTH_PASSWORD
123
+ );
115
124
  }
116
125
  }
@@ -25,10 +25,21 @@ export type PageProperties = {
25
25
  nativePageRanges?: { from: number; to: number }; // Page ranges to print
26
26
  };
27
27
 
28
+ export type Cookie = {
29
+ name: string;
30
+ value: string;
31
+ domain: string;
32
+ path?: string;
33
+ secure?: boolean;
34
+ httpOnly?: boolean;
35
+ sameSite?: 'Strict' | 'Lax' | 'None';
36
+ };
37
+
28
38
  export type ConversionOptions = ChromiumOptions & {
29
39
  properties?: PageProperties;
30
40
  pdfFormat?: PdfFormat;
31
41
  pdfUA?: boolean; // Enable PDF for Universal Access for optimal accessibility (default false)
32
42
  userAgent?: string;
33
43
  metadata?: Metadata;
44
+ cookies?: Cookie[];
34
45
  };
@@ -1,7 +1,7 @@
1
1
  import FormData from 'form-data';
2
2
 
3
3
  import { GotenbergUtils, PathLikeOrReadStream } from '../../common';
4
- import { ChromiumRoute } from '../../main.config';
4
+ import { ChromiumRoute, Chromiumly } from '../../main.config';
5
5
  import { EmulatedMediaType } from '../interfaces/common.types';
6
6
  import { ScreenshotUtils } from '../utils/screenshot.utils';
7
7
  import { Screenshot } from './screenshot';
@@ -95,6 +95,11 @@ export class HtmlScreenshot extends Screenshot {
95
95
  optimizeForSpeed
96
96
  });
97
97
 
98
- return GotenbergUtils.fetch(this.endpoint, data);
98
+ return GotenbergUtils.fetch(
99
+ this.endpoint,
100
+ data,
101
+ Chromiumly.GOTENBERG_API_BASIC_AUTH_USERNAME,
102
+ Chromiumly.GOTENBERG_API_BASIC_AUTH_PASSWORD
103
+ );
99
104
  }
100
105
  }
@@ -4,7 +4,7 @@ import { GotenbergUtils, PathLikeOrReadStream } from '../../common';
4
4
  import { ImageProperties } from '../interfaces/screenshot.types';
5
5
  import { ScreenshotUtils } from '../utils/screenshot.utils';
6
6
  import { Screenshot } from './screenshot';
7
- import { ChromiumRoute } from '../../main.config';
7
+ import { ChromiumRoute, Chromiumly } from '../../main.config';
8
8
  import { EmulatedMediaType } from '../interfaces/common.types';
9
9
 
10
10
  /**
@@ -90,6 +90,11 @@ export class MarkdownScreenshot extends Screenshot {
90
90
  optimizeForSpeed
91
91
  });
92
92
 
93
- return GotenbergUtils.fetch(this.endpoint, data);
93
+ return GotenbergUtils.fetch(
94
+ this.endpoint,
95
+ data,
96
+ Chromiumly.GOTENBERG_API_BASIC_AUTH_USERNAME,
97
+ Chromiumly.GOTENBERG_API_BASIC_AUTH_PASSWORD
98
+ );
94
99
  }
95
100
  }
@@ -4,7 +4,7 @@ import { GotenbergUtils, PathLikeOrReadStream } from '../../common';
4
4
  import { ImageProperties } from '../interfaces/screenshot.types';
5
5
  import { ScreenshotUtils } from '../utils/screenshot.utils';
6
6
  import { Screenshot } from './screenshot';
7
- import { ChromiumRoute } from '../../main.config';
7
+ import { ChromiumRoute, Chromiumly } from '../../main.config';
8
8
  import { EmulatedMediaType } from '../interfaces/common.types';
9
9
 
10
10
  /**
@@ -86,6 +86,11 @@ export class UrlScreenshot extends Screenshot {
86
86
  optimizeForSpeed
87
87
  });
88
88
 
89
- return GotenbergUtils.fetch(this.endpoint, data);
89
+ return GotenbergUtils.fetch(
90
+ this.endpoint,
91
+ data,
92
+ Chromiumly.GOTENBERG_API_BASIC_AUTH_USERNAME,
93
+ Chromiumly.GOTENBERG_API_BASIC_AUTH_PASSWORD
94
+ );
90
95
  }
91
96
  }
@@ -179,5 +179,9 @@ export class ConverterUtils {
179
179
  if (options.metadata) {
180
180
  data.append('metadata', JSON.stringify(options.metadata));
181
181
  }
182
+
183
+ if (options.cookies) {
184
+ data.append('cookies', JSON.stringify(options.cookies));
185
+ }
182
186
  }
183
187
  }
@@ -364,6 +364,39 @@ describe('GotenbergUtils', () => {
364
364
  });
365
365
  });
366
366
 
367
+ describe('when cookies parameter is passed', () => {
368
+ it('should append cookies', async () => {
369
+ await ConverterUtils.customize(data, {
370
+ cookies: [
371
+ {
372
+ name: 'sample_id',
373
+ value: 'sample_value',
374
+ domain: 'example.com',
375
+ path: '/',
376
+ secure: true,
377
+ httpOnly: true,
378
+ sameSite: 'Strict'
379
+ }
380
+ ]
381
+ });
382
+ expect(mockFormDataAppend).toHaveBeenCalledTimes(1);
383
+ expect(data.append).toHaveBeenCalledWith(
384
+ 'cookies',
385
+ JSON.stringify([
386
+ {
387
+ name: 'sample_id',
388
+ value: 'sample_value',
389
+ domain: 'example.com',
390
+ path: '/',
391
+ secure: true,
392
+ httpOnly: true,
393
+ sameSite: 'Strict'
394
+ }
395
+ ])
396
+ );
397
+ });
398
+ });
399
+
367
400
  describe('when all options are passed', () => {
368
401
  it('should append all options', async () => {
369
402
  await ConverterUtils.customize(data, {
@@ -27,20 +27,31 @@ export class GotenbergUtils {
27
27
  * Performs a POST request to the specified Gotenberg endpoint with the provided FormData.
28
28
  *
29
29
  * @param {string} endpoint - The Gotenberg endpoint URL.
30
+ * @param {string} username - The username for basic authentication.
31
+ * @param {string} password - The password for basic authentication.
30
32
  * @param {FormData} data - The FormData object to be sent in the POST request.
31
33
  * @returns {Promise<Buffer>} A Promise that resolves to the response body as a Buffer.
32
34
  * @throws {Error} Throws an error if the HTTP response status is not OK.
33
35
  */
34
36
  public static async fetch(
35
37
  endpoint: string,
36
- data: FormData
38
+ data: FormData,
39
+ username?: string,
40
+ password?: string
37
41
  ): Promise<Buffer> {
42
+ const headers: Record<string, string> = { ...data.getHeaders() };
43
+
44
+ if (username && password) {
45
+ const authHeader =
46
+ 'Basic ' +
47
+ Buffer.from(username + ':' + password).toString('base64');
48
+ headers['Authorization'] = authHeader;
49
+ }
50
+
38
51
  const response = await fetch(endpoint, {
39
52
  method: 'post',
40
53
  body: data,
41
- headers: {
42
- ...data.getHeaders()
43
- }
54
+ headers
44
55
  });
45
56
 
46
57
  if (!response.ok) {
@@ -39,11 +39,18 @@ describe('GotenbergUtils', () => {
39
39
  const mockFetch = fetch as jest.MockedFunction<typeof fetch>;
40
40
  const data = new FormData();
41
41
  const endpoint = 'http://localhost:3000/forms/chromium/convert/html';
42
+ const basicAuthUsername = 'username';
43
+ const basicAuthPassword = 'pass';
42
44
 
43
45
  describe('when fetch request succeeds', () => {
44
46
  it('should return a buffer', async () => {
45
47
  mockFetch.mockResolvedValueOnce(new Response('content'));
46
- const response = await GotenbergUtils.fetch(endpoint, data);
48
+ const response = await GotenbergUtils.fetch(
49
+ endpoint,
50
+ data,
51
+ basicAuthUsername,
52
+ basicAuthPassword
53
+ );
47
54
  await expect(response).toEqual(Buffer.from('content'));
48
55
  });
49
56
  });
@@ -57,7 +64,12 @@ describe('GotenbergUtils', () => {
57
64
  new FetchError(errorMessage)
58
65
  );
59
66
  await expect(() =>
60
- GotenbergUtils.fetch(endpoint, data)
67
+ GotenbergUtils.fetch(
68
+ endpoint,
69
+ data,
70
+ basicAuthUsername,
71
+ basicAuthPassword
72
+ )
61
73
  ).rejects.toThrow(errorMessage);
62
74
  });
63
75
  });
@@ -74,7 +86,12 @@ describe('GotenbergUtils', () => {
74
86
  )
75
87
  );
76
88
  await expect(() =>
77
- GotenbergUtils.fetch(endpoint, data)
89
+ GotenbergUtils.fetch(
90
+ endpoint,
91
+ data,
92
+ basicAuthUsername,
93
+ basicAuthPassword
94
+ )
78
95
  ).rejects.toThrow('500 Internal server error');
79
96
  });
80
97
  });
package/src/gotenberg.ts CHANGED
@@ -20,11 +20,35 @@ if (dotenvConfig.error) {
20
20
  */
21
21
  export class Gotenberg {
22
22
  /**
23
- * The Gotenberg service endpoint.
24
- * Defaults to the value from the environment variable `GOTENBERG_ENDPOINT`, or falls back to the configuration file.
23
+ * The endpoint for the Gotenberg service.
25
24
  * @type {string}
26
25
  */
27
- public static endpoint: string =
28
- process.env.GOTENBERG_ENDPOINT ||
29
- config.get<string>('gotenberg.endpoint');
26
+ static get endpoint(): string {
27
+ return (
28
+ process.env.GOTENBERG_ENDPOINT ||
29
+ config.get<string>('gotenberg.endpoint')
30
+ );
31
+ }
32
+
33
+ /**
34
+ * The username for basic authentication with the Gotenberg service.
35
+ * @type {string | undefined}
36
+ */
37
+ static get username(): string | undefined {
38
+ const hasUsername = config.has('gotenberg.api.basicAuth.username');
39
+ return hasUsername
40
+ ? config.get<string>('gotenberg.api.basicAuth.username')
41
+ : process.env.GOTENBERG_API_BASIC_AUTH_USERNAME;
42
+ }
43
+
44
+ /**
45
+ * The password for basic authentication with the Gotenberg service.
46
+ * @type {string | undefined}
47
+ */
48
+ static get password(): string | undefined {
49
+ const hasPassword = config.has('gotenberg.api.basicAuth.password');
50
+ return hasPassword
51
+ ? config.get<string>('gotenberg.api.basicAuth.password')
52
+ : process.env.GOTENBERG_API_BASIC_AUTH_PASSWORD;
53
+ }
30
54
  }
@@ -144,6 +144,7 @@ export type PageProperties = {
144
144
  landscape?: boolean; // Set the paper orientation to landscape (default false)
145
145
  nativePageRanges?: { from: number; to: number }; // Page ranges to print
146
146
  exportFormFields?: boolean; // Set whether to export the form fields or to use the inputted/selected content of the fields (default true)
147
+ singlePageSheets?: boolean; // Set whether to render the entire spreadsheet as a single page. (default false)
147
148
  };
148
149
 
149
150
  export type ConversionOptions = {
@@ -51,6 +51,11 @@ export class LibreOffice {
51
51
 
52
52
  const endpoint = `${Chromiumly.GOTENBERG_ENDPOINT}/${Chromiumly.LIBRE_OFFICE_PATH}/${Chromiumly.LIBRE_OFFICE_ROUTES.convert}`;
53
53
 
54
- return GotenbergUtils.fetch(endpoint, data);
54
+ return GotenbergUtils.fetch(
55
+ endpoint,
56
+ data,
57
+ Chromiumly.GOTENBERG_API_BASIC_AUTH_USERNAME,
58
+ Chromiumly.GOTENBERG_API_BASIC_AUTH_PASSWORD
59
+ );
55
60
  }
56
61
  }
@@ -85,6 +85,13 @@ export class LibreOfficeUtils {
85
85
  String(pageProperties.exportFormFields)
86
86
  );
87
87
  }
88
+
89
+ if (pageProperties.singlePageSheets) {
90
+ data.append(
91
+ 'singlePageSheets',
92
+ String(pageProperties.singlePageSheets)
93
+ );
94
+ }
88
95
  }
89
96
 
90
97
  /**
@@ -137,5 +137,20 @@ describe('LibreOfficeUtils', () => {
137
137
  });
138
138
  });
139
139
  });
140
+
141
+ describe('Single page sheets', () => {
142
+ describe('when singlePageSheets parameter is set', () => {
143
+ it('should append singlePageSheets to data', () => {
144
+ LibreOfficeUtils.addPageProperties(data, {
145
+ singlePageSheets: true
146
+ });
147
+ expect(mockFormDataAppend).toHaveBeenCalledTimes(1);
148
+ expect(data.append).toHaveBeenCalledWith(
149
+ 'singlePageSheets',
150
+ 'true'
151
+ );
152
+ });
153
+ });
154
+ });
140
155
  });
141
156
  });
@@ -38,6 +38,20 @@ export class Chromiumly {
38
38
  */
39
39
  public static readonly GOTENBERG_ENDPOINT = Gotenberg.endpoint;
40
40
 
41
+ /**
42
+ * The username for basic authentication with the Gotenberg service.
43
+ * @type {string | undefined}
44
+ */
45
+ public static readonly GOTENBERG_API_BASIC_AUTH_USERNAME =
46
+ Gotenberg.username;
47
+
48
+ /**
49
+ * The password for basic authentication with the Gotenberg service.
50
+ * @type {string | undefined}
51
+ */
52
+ public static readonly GOTENBERG_API_BASIC_AUTH_PASSWORD =
53
+ Gotenberg.password;
54
+
41
55
  /**
42
56
  * The path for Chromium-related conversions.
43
57
  * @type {string}
@@ -42,7 +42,12 @@ export class PDFEngines {
42
42
  metadata
43
43
  });
44
44
  const endpoint = `${Chromiumly.GOTENBERG_ENDPOINT}/${Chromiumly.PDF_ENGINES_PATH}/${Chromiumly.PDF_ENGINE_ROUTES.merge}`;
45
- return GotenbergUtils.fetch(endpoint, data);
45
+ return GotenbergUtils.fetch(
46
+ endpoint,
47
+ data,
48
+ Chromiumly.GOTENBERG_API_BASIC_AUTH_USERNAME,
49
+ Chromiumly.GOTENBERG_API_BASIC_AUTH_PASSWORD
50
+ );
46
51
  }
47
52
 
48
53
  /**
@@ -73,7 +78,12 @@ export class PDFEngines {
73
78
 
74
79
  const endpoint = `${Chromiumly.GOTENBERG_ENDPOINT}/${Chromiumly.LIBRE_OFFICE_PATH}/${Chromiumly.LIBRE_OFFICE_ROUTES.convert}`;
75
80
 
76
- return GotenbergUtils.fetch(endpoint, data);
81
+ return GotenbergUtils.fetch(
82
+ endpoint,
83
+ data,
84
+ Chromiumly.GOTENBERG_API_BASIC_AUTH_USERNAME,
85
+ Chromiumly.GOTENBERG_API_BASIC_AUTH_PASSWORD
86
+ );
77
87
  }
78
88
 
79
89
  /**
@@ -91,7 +101,12 @@ export class PDFEngines {
91
101
 
92
102
  const endpoint = `${Chromiumly.GOTENBERG_ENDPOINT}/${Chromiumly.PDF_ENGINES_PATH}/${Chromiumly.PDF_ENGINE_ROUTES.readMetadata}`;
93
103
 
94
- return GotenbergUtils.fetch(endpoint, data);
104
+ return GotenbergUtils.fetch(
105
+ endpoint,
106
+ data,
107
+ Chromiumly.GOTENBERG_API_BASIC_AUTH_USERNAME,
108
+ Chromiumly.GOTENBERG_API_BASIC_AUTH_PASSWORD
109
+ );
95
110
  }
96
111
 
97
112
  /**
@@ -115,7 +130,12 @@ export class PDFEngines {
115
130
 
116
131
  const endpoint = `${Chromiumly.GOTENBERG_ENDPOINT}/${Chromiumly.PDF_ENGINES_PATH}/${Chromiumly.PDF_ENGINE_ROUTES.writeMetadata}`;
117
132
 
118
- return GotenbergUtils.fetch(endpoint, data);
133
+ return GotenbergUtils.fetch(
134
+ endpoint,
135
+ data,
136
+ Chromiumly.GOTENBERG_API_BASIC_AUTH_USERNAME,
137
+ Chromiumly.GOTENBERG_API_BASIC_AUTH_PASSWORD
138
+ );
119
139
  }
120
140
 
121
141
  /**