@spinajs/templates-pdf 2.0.385 → 2.0.387

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.
@@ -12,6 +12,7 @@ interface IPdfRendererOptions {
12
12
  args: any;
13
13
  options: any;
14
14
  renderDurationWarning: number;
15
+ renderTimeout?: number;
15
16
  }
16
17
  export declare class PdfRenderer extends TemplateRenderer implements IInstanceCheck {
17
18
  protected pdfOptions: PDFOptions;
@@ -30,6 +31,22 @@ export declare class PdfRenderer extends TemplateRenderer implements IInstanceCh
30
31
  render(_templateName: string, _model: unknown, _language?: string): Promise<string>;
31
32
  protected compile(_path: string): Promise<void>;
32
33
  protected runLocalServer(basePath: string): Promise<http.Server>;
34
+ /**
35
+ * Enhanced browser cleanup with error handling
36
+ */
37
+ private safeBrowserCleanup;
38
+ /**
39
+ * Force close browser with process termination
40
+ */
41
+ private forceCloseBrowser;
42
+ /**
43
+ * Enhanced server cleanup with timeout
44
+ */
45
+ private safeServerCleanup;
46
+ /**
47
+ * Add page event listeners with cleanup function
48
+ */
49
+ private addPageEventListeners;
33
50
  }
34
51
  export {};
35
52
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAW,UAAU,EAAwB,MAAM,WAAW,CAAC;AAEtE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,cAAc,EAA4C,MAAM,aAAa,CAAC;AAEvF,OAAO,EAAE,GAAG,EAAU,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,OAAO,wBAAwB,CAAC;AAIhC,UAAU,mBAAmB;IAC3B,MAAM,EAAE;QACN,SAAS,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,EAAE,GAAG,CAAC;IACb,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,qBAEa,WAAY,SAAQ,gBAAiB,YAAW,cAAc;IAuB7D,SAAS,CAAC,UAAU,EAAE,UAAU;IAtB5C;;OAEG;IAEH,SAAS,CAAC,OAAO,EAAE,mBAAmB,CAAC;IAGvC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;IAGnB,SAAS,CAAC,iBAAiB,EAAE,SAAS,CAAC;IAEvC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,CAAM;IAE3C,IAAW,IAAI,WAEd;IAED,IAAW,SAAS,WAEnB;gBAEqB,UAAU,EAAE,UAAU;IAI5C,iBAAiB,CAAC,eAAe,EAAE,GAAG,GAAG,OAAO;IAInC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiE9F,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;cAKhF,OAAO,CAAC,KAAK,EAAE,MAAM;cAErB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;CAsBvE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAW,UAAU,EAAwB,MAAM,WAAW,CAAC;AAEtE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,cAAc,EAA4C,MAAM,aAAa,CAAC;AAEvF,OAAO,EAAE,GAAG,EAAU,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,OAAO,wBAAwB,CAAC;AAIhC,UAAU,mBAAmB;IAC3B,MAAM,EAAE;QACN,SAAS,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,EAAE,GAAG,CAAC;IACb,qBAAqB,EAAE,MAAM,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAEa,WAAY,SAAQ,gBAAiB,YAAW,cAAc;IAuB7D,SAAS,CAAC,UAAU,EAAE,UAAU;IAtB5C;;OAEG;IAEH,SAAS,CAAC,OAAO,EAAE,mBAAmB,CAAC;IAGvC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;IAGnB,SAAS,CAAC,iBAAiB,EAAE,SAAS,CAAC;IAEvC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,CAAM;IAE3C,IAAW,IAAI,WAEd;IAED,IAAW,SAAS,WAEnB;gBAEqB,UAAU,EAAE,UAAU;IAI5C,iBAAiB,CAAC,eAAe,EAAE,GAAG,GAAG,OAAO;IAInC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+F9F,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;cAKhF,OAAO,CAAC,KAAK,EAAE,MAAM;cAErB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IA2CtE;;OAEG;YACW,kBAAkB;IAoBhC;;OAEG;YACW,iBAAiB;IAY/B;;OAEG;YACW,iBAAiB;IA2B/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;CA0B9B"}
package/lib/cjs/index.js CHANGED
@@ -60,17 +60,47 @@ let PdfRenderer = class PdfRenderer extends templates_1.TemplateRenderer {
60
60
  }, language);
61
61
  browser = await puppeteer_1.default.launch(this.Options.args);
62
62
  const page = await browser.newPage();
63
- page
64
- .on('console', (message) => this.Log.trace(`${message.type().substr(0, 3).toUpperCase()} ${message.text()}`))
65
- .on('pageerror', ({ message }) => this.Log.error(message))
66
- .on('response', (response) => this.Log.trace(`${response.status()} ${response.url()}`))
67
- .on('requestfailed', (request) => this.Log.error(`${request.failure().errorText} ${request.url()}`));
68
- await page.setBypassCSP(true);
69
- await page.setContent(compiledTemplate);
70
- await page.pdf({
71
- path: filePath,
72
- ...this.pdfOptions,
73
- });
63
+ // Set up render timeout
64
+ let renderTimeout;
65
+ const timeoutMs = this.Options.renderTimeout || 30000;
66
+ renderTimeout = setTimeout(async () => {
67
+ this.Log.warn(`PDF render timeout (${timeoutMs}ms) - forcing cleanup`);
68
+ try {
69
+ if (page)
70
+ await page.close().catch(() => { });
71
+ if (browser)
72
+ await this.forceCloseBrowser(browser);
73
+ }
74
+ catch (err) {
75
+ this.Log.error('Error during timeout cleanup:', err);
76
+ }
77
+ }, timeoutMs);
78
+ // Add event listeners with explicit cleanup tracking
79
+ const eventCleanup = this.addPageEventListeners(page);
80
+ try {
81
+ await page.setBypassCSP(true);
82
+ await page.setContent(compiledTemplate);
83
+ await page.pdf({
84
+ path: filePath,
85
+ ...this.pdfOptions,
86
+ });
87
+ // Clear timeout on successful completion
88
+ if (renderTimeout) {
89
+ clearTimeout(renderTimeout);
90
+ renderTimeout = undefined;
91
+ }
92
+ // Clean up event listeners
93
+ eventCleanup();
94
+ }
95
+ catch (renderError) {
96
+ // Clear timeout on error
97
+ if (renderTimeout) {
98
+ clearTimeout(renderTimeout);
99
+ renderTimeout = undefined;
100
+ }
101
+ this.Log.error(renderError, `Error during PDF rendering for template ${template}`);
102
+ throw renderError;
103
+ }
74
104
  }
75
105
  catch (err) {
76
106
  this.Log.error(err, `Error rendering pdf template ${template} to file ${filePath}`);
@@ -83,10 +113,10 @@ let PdfRenderer = class PdfRenderer extends templates_1.TemplateRenderer {
83
113
  this.Log.warn(`Rendering pdf template ${template} to file ${filePath} took too long.`);
84
114
  }
85
115
  if (browser) {
86
- await browser.close();
116
+ await this.safeBrowserCleanup(browser);
87
117
  }
88
118
  if (server) {
89
- await server.close();
119
+ await this.safeServerCleanup(server);
90
120
  }
91
121
  }
92
122
  }
@@ -101,20 +131,134 @@ let PdfRenderer = class PdfRenderer extends templates_1.TemplateRenderer {
101
131
  app.use((0, cors_1.default)());
102
132
  app.use(express_1.default.static(basePath));
103
133
  return new Promise((resolve, reject) => {
104
- app
105
- // if no port is provided express will choose random port to start ( avaible )
106
- // it not, we will get random from range in config
107
- .listen(this.Options.static.portRange.length === 0 ? 0 : lodash_1.default.random(this.Options.static.portRange[0], this.Options.static.portRange[1]), function () {
108
- self.Log.trace(`PDF image server started`);
134
+ const server = app
135
+ // if no port is provided express will choose random port to start (available)
136
+ // if not, we will get random from range in config
137
+ .listen(this.Options.static.portRange.length === 0
138
+ ? 0
139
+ : lodash_1.default.random(this.Options.static.portRange[0], this.Options.static.portRange[1]))
140
+ .on('listening', function () {
141
+ self.Log.trace(`PDF image server started on port ${this.address().port}`);
109
142
  self.Log.trace(`PDF static file dir at ${basePath}`);
110
143
  resolve(this);
111
144
  })
112
145
  .on('error', (err) => {
113
146
  self.Log.error(err, `PDF image server cannot start`);
114
- reject(err);
147
+ // Clean up the failed server
148
+ if (server) {
149
+ server.close(() => {
150
+ reject(err);
151
+ });
152
+ }
153
+ else {
154
+ reject(err);
155
+ }
115
156
  });
157
+ // Set a timeout for server startup
158
+ setTimeout(() => {
159
+ if (!server.listening) {
160
+ server.close();
161
+ reject(new Error('Server startup timeout'));
162
+ }
163
+ }, 10000);
116
164
  });
117
165
  }
166
+ /**
167
+ * Enhanced browser cleanup with error handling
168
+ */
169
+ async safeBrowserCleanup(browser) {
170
+ try {
171
+ // First try to close all pages
172
+ const pages = await browser.pages();
173
+ await Promise.allSettled(pages.map(page => page.close()));
174
+ // Then close the browser normally
175
+ await browser.close();
176
+ }
177
+ catch (err) {
178
+ this.Log.warn(`Error during normal browser cleanup: ${err.message}`);
179
+ // Force kill if normal close fails
180
+ try {
181
+ await this.forceCloseBrowser(browser);
182
+ }
183
+ catch (killErr) {
184
+ this.Log.error(`Failed to force kill browser: ${killErr.message}`);
185
+ }
186
+ }
187
+ }
188
+ /**
189
+ * Force close browser with process termination
190
+ */
191
+ async forceCloseBrowser(browser) {
192
+ try {
193
+ const process = browser.process();
194
+ if (process) {
195
+ process.kill('SIGKILL');
196
+ this.Log.warn('Browser process force killed');
197
+ }
198
+ }
199
+ catch (err) {
200
+ this.Log.error(`Error force killing browser process: ${err.message}`);
201
+ }
202
+ }
203
+ /**
204
+ * Enhanced server cleanup with timeout
205
+ */
206
+ async safeServerCleanup(server) {
207
+ try {
208
+ await new Promise((resolve, reject) => {
209
+ const timeout = setTimeout(() => {
210
+ reject(new Error('Server close timeout'));
211
+ }, 5000);
212
+ server.close((err) => {
213
+ clearTimeout(timeout);
214
+ if (err)
215
+ reject(err);
216
+ else
217
+ resolve();
218
+ });
219
+ });
220
+ }
221
+ catch (err) {
222
+ this.Log.warn(`Error closing server: ${err.message}`);
223
+ // Force close connections if available
224
+ try {
225
+ if ('closeAllConnections' in server) {
226
+ server.closeAllConnections();
227
+ }
228
+ }
229
+ catch (forceErr) {
230
+ this.Log.error(`Error force closing server connections: ${forceErr.message}`);
231
+ }
232
+ }
233
+ }
234
+ /**
235
+ * Add page event listeners with cleanup function
236
+ */
237
+ addPageEventListeners(page) {
238
+ const listeners = {
239
+ console: (message) => this.Log.trace(`${message.type().substr(0, 3).toUpperCase()} ${message.text()}`),
240
+ pageerror: ({ message }) => this.Log.error(message),
241
+ response: (response) => this.Log.trace(`${response.status()} ${response.url()}`),
242
+ requestfailed: (request) => this.Log.error(`${request.failure().errorText} ${request.url()}`)
243
+ };
244
+ // Add listeners
245
+ page.on('console', listeners.console);
246
+ page.on('pageerror', listeners.pageerror);
247
+ page.on('response', listeners.response);
248
+ page.on('requestfailed', listeners.requestfailed);
249
+ // Return cleanup function
250
+ return () => {
251
+ try {
252
+ page.removeListener('console', listeners.console);
253
+ page.removeListener('pageerror', listeners.pageerror);
254
+ page.removeListener('response', listeners.response);
255
+ page.removeListener('requestfailed', listeners.requestfailed);
256
+ }
257
+ catch (err) {
258
+ this.Log.warn(`Error removing page listeners: ${err.message}`);
259
+ }
260
+ };
261
+ }
118
262
  };
119
263
  exports.PdfRenderer = PdfRenderer;
120
264
  PdfRenderer.USED_PORTS = [];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ interface IPdfRendererOptions {
12
12
  args: any;
13
13
  options: any;
14
14
  renderDurationWarning: number;
15
+ renderTimeout?: number;
15
16
  }
16
17
  export declare class PdfRenderer extends TemplateRenderer implements IInstanceCheck {
17
18
  protected pdfOptions: PDFOptions;
@@ -30,6 +31,22 @@ export declare class PdfRenderer extends TemplateRenderer implements IInstanceCh
30
31
  render(_templateName: string, _model: unknown, _language?: string): Promise<string>;
31
32
  protected compile(_path: string): Promise<void>;
32
33
  protected runLocalServer(basePath: string): Promise<http.Server>;
34
+ /**
35
+ * Enhanced browser cleanup with error handling
36
+ */
37
+ private safeBrowserCleanup;
38
+ /**
39
+ * Force close browser with process termination
40
+ */
41
+ private forceCloseBrowser;
42
+ /**
43
+ * Enhanced server cleanup with timeout
44
+ */
45
+ private safeServerCleanup;
46
+ /**
47
+ * Add page event listeners with cleanup function
48
+ */
49
+ private addPageEventListeners;
33
50
  }
34
51
  export {};
35
52
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAW,UAAU,EAAwB,MAAM,WAAW,CAAC;AAEtE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,cAAc,EAA4C,MAAM,aAAa,CAAC;AAEvF,OAAO,EAAE,GAAG,EAAU,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,OAAO,wBAAwB,CAAC;AAIhC,UAAU,mBAAmB;IAC3B,MAAM,EAAE;QACN,SAAS,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,EAAE,GAAG,CAAC;IACb,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,qBAEa,WAAY,SAAQ,gBAAiB,YAAW,cAAc;IAuB7D,SAAS,CAAC,UAAU,EAAE,UAAU;IAtB5C;;OAEG;IAEH,SAAS,CAAC,OAAO,EAAE,mBAAmB,CAAC;IAGvC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;IAGnB,SAAS,CAAC,iBAAiB,EAAE,SAAS,CAAC;IAEvC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,CAAM;IAE3C,IAAW,IAAI,WAEd;IAED,IAAW,SAAS,WAEnB;gBAEqB,UAAU,EAAE,UAAU;IAI5C,iBAAiB,CAAC,eAAe,EAAE,GAAG,GAAG,OAAO;IAInC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiE9F,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;cAKhF,OAAO,CAAC,KAAK,EAAE,MAAM;cAErB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;CAsBvE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAW,UAAU,EAAwB,MAAM,WAAW,CAAC;AAEtE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,cAAc,EAA4C,MAAM,aAAa,CAAC;AAEvF,OAAO,EAAE,GAAG,EAAU,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,OAAO,wBAAwB,CAAC;AAIhC,UAAU,mBAAmB;IAC3B,MAAM,EAAE;QACN,SAAS,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,EAAE,GAAG,CAAC;IACb,qBAAqB,EAAE,MAAM,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAEa,WAAY,SAAQ,gBAAiB,YAAW,cAAc;IAuB7D,SAAS,CAAC,UAAU,EAAE,UAAU;IAtB5C;;OAEG;IAEH,SAAS,CAAC,OAAO,EAAE,mBAAmB,CAAC;IAGvC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;IAGnB,SAAS,CAAC,iBAAiB,EAAE,SAAS,CAAC;IAEvC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,CAAM;IAE3C,IAAW,IAAI,WAEd;IAED,IAAW,SAAS,WAEnB;gBAEqB,UAAU,EAAE,UAAU;IAI5C,iBAAiB,CAAC,eAAe,EAAE,GAAG,GAAG,OAAO;IAInC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+F9F,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;cAKhF,OAAO,CAAC,KAAK,EAAE,MAAM;cAErB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IA2CtE;;OAEG;YACW,kBAAkB;IAoBhC;;OAEG;YACW,iBAAiB;IAY/B;;OAEG;YACW,iBAAiB;IA2B/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;CA0B9B"}
package/lib/mjs/index.js CHANGED
@@ -54,17 +54,47 @@ let PdfRenderer = class PdfRenderer extends TemplateRenderer {
54
54
  }, language);
55
55
  browser = await puppeteer.launch(this.Options.args);
56
56
  const page = await browser.newPage();
57
- page
58
- .on('console', (message) => this.Log.trace(`${message.type().substr(0, 3).toUpperCase()} ${message.text()}`))
59
- .on('pageerror', ({ message }) => this.Log.error(message))
60
- .on('response', (response) => this.Log.trace(`${response.status()} ${response.url()}`))
61
- .on('requestfailed', (request) => this.Log.error(`${request.failure().errorText} ${request.url()}`));
62
- await page.setBypassCSP(true);
63
- await page.setContent(compiledTemplate);
64
- await page.pdf({
65
- path: filePath,
66
- ...this.pdfOptions,
67
- });
57
+ // Set up render timeout
58
+ let renderTimeout;
59
+ const timeoutMs = this.Options.renderTimeout || 30000;
60
+ renderTimeout = setTimeout(async () => {
61
+ this.Log.warn(`PDF render timeout (${timeoutMs}ms) - forcing cleanup`);
62
+ try {
63
+ if (page)
64
+ await page.close().catch(() => { });
65
+ if (browser)
66
+ await this.forceCloseBrowser(browser);
67
+ }
68
+ catch (err) {
69
+ this.Log.error('Error during timeout cleanup:', err);
70
+ }
71
+ }, timeoutMs);
72
+ // Add event listeners with explicit cleanup tracking
73
+ const eventCleanup = this.addPageEventListeners(page);
74
+ try {
75
+ await page.setBypassCSP(true);
76
+ await page.setContent(compiledTemplate);
77
+ await page.pdf({
78
+ path: filePath,
79
+ ...this.pdfOptions,
80
+ });
81
+ // Clear timeout on successful completion
82
+ if (renderTimeout) {
83
+ clearTimeout(renderTimeout);
84
+ renderTimeout = undefined;
85
+ }
86
+ // Clean up event listeners
87
+ eventCleanup();
88
+ }
89
+ catch (renderError) {
90
+ // Clear timeout on error
91
+ if (renderTimeout) {
92
+ clearTimeout(renderTimeout);
93
+ renderTimeout = undefined;
94
+ }
95
+ this.Log.error(renderError, `Error during PDF rendering for template ${template}`);
96
+ throw renderError;
97
+ }
68
98
  }
69
99
  catch (err) {
70
100
  this.Log.error(err, `Error rendering pdf template ${template} to file ${filePath}`);
@@ -77,10 +107,10 @@ let PdfRenderer = class PdfRenderer extends TemplateRenderer {
77
107
  this.Log.warn(`Rendering pdf template ${template} to file ${filePath} took too long.`);
78
108
  }
79
109
  if (browser) {
80
- await browser.close();
110
+ await this.safeBrowserCleanup(browser);
81
111
  }
82
112
  if (server) {
83
- await server.close();
113
+ await this.safeServerCleanup(server);
84
114
  }
85
115
  }
86
116
  }
@@ -95,20 +125,134 @@ let PdfRenderer = class PdfRenderer extends TemplateRenderer {
95
125
  app.use(cors());
96
126
  app.use(Express.static(basePath));
97
127
  return new Promise((resolve, reject) => {
98
- app
99
- // if no port is provided express will choose random port to start ( avaible )
100
- // it not, we will get random from range in config
101
- .listen(this.Options.static.portRange.length === 0 ? 0 : _.random(this.Options.static.portRange[0], this.Options.static.portRange[1]), function () {
102
- self.Log.trace(`PDF image server started`);
128
+ const server = app
129
+ // if no port is provided express will choose random port to start (available)
130
+ // if not, we will get random from range in config
131
+ .listen(this.Options.static.portRange.length === 0
132
+ ? 0
133
+ : _.random(this.Options.static.portRange[0], this.Options.static.portRange[1]))
134
+ .on('listening', function () {
135
+ self.Log.trace(`PDF image server started on port ${this.address().port}`);
103
136
  self.Log.trace(`PDF static file dir at ${basePath}`);
104
137
  resolve(this);
105
138
  })
106
139
  .on('error', (err) => {
107
140
  self.Log.error(err, `PDF image server cannot start`);
108
- reject(err);
141
+ // Clean up the failed server
142
+ if (server) {
143
+ server.close(() => {
144
+ reject(err);
145
+ });
146
+ }
147
+ else {
148
+ reject(err);
149
+ }
109
150
  });
151
+ // Set a timeout for server startup
152
+ setTimeout(() => {
153
+ if (!server.listening) {
154
+ server.close();
155
+ reject(new Error('Server startup timeout'));
156
+ }
157
+ }, 10000);
110
158
  });
111
159
  }
160
+ /**
161
+ * Enhanced browser cleanup with error handling
162
+ */
163
+ async safeBrowserCleanup(browser) {
164
+ try {
165
+ // First try to close all pages
166
+ const pages = await browser.pages();
167
+ await Promise.allSettled(pages.map(page => page.close()));
168
+ // Then close the browser normally
169
+ await browser.close();
170
+ }
171
+ catch (err) {
172
+ this.Log.warn(`Error during normal browser cleanup: ${err.message}`);
173
+ // Force kill if normal close fails
174
+ try {
175
+ await this.forceCloseBrowser(browser);
176
+ }
177
+ catch (killErr) {
178
+ this.Log.error(`Failed to force kill browser: ${killErr.message}`);
179
+ }
180
+ }
181
+ }
182
+ /**
183
+ * Force close browser with process termination
184
+ */
185
+ async forceCloseBrowser(browser) {
186
+ try {
187
+ const process = browser.process();
188
+ if (process) {
189
+ process.kill('SIGKILL');
190
+ this.Log.warn('Browser process force killed');
191
+ }
192
+ }
193
+ catch (err) {
194
+ this.Log.error(`Error force killing browser process: ${err.message}`);
195
+ }
196
+ }
197
+ /**
198
+ * Enhanced server cleanup with timeout
199
+ */
200
+ async safeServerCleanup(server) {
201
+ try {
202
+ await new Promise((resolve, reject) => {
203
+ const timeout = setTimeout(() => {
204
+ reject(new Error('Server close timeout'));
205
+ }, 5000);
206
+ server.close((err) => {
207
+ clearTimeout(timeout);
208
+ if (err)
209
+ reject(err);
210
+ else
211
+ resolve();
212
+ });
213
+ });
214
+ }
215
+ catch (err) {
216
+ this.Log.warn(`Error closing server: ${err.message}`);
217
+ // Force close connections if available
218
+ try {
219
+ if ('closeAllConnections' in server) {
220
+ server.closeAllConnections();
221
+ }
222
+ }
223
+ catch (forceErr) {
224
+ this.Log.error(`Error force closing server connections: ${forceErr.message}`);
225
+ }
226
+ }
227
+ }
228
+ /**
229
+ * Add page event listeners with cleanup function
230
+ */
231
+ addPageEventListeners(page) {
232
+ const listeners = {
233
+ console: (message) => this.Log.trace(`${message.type().substr(0, 3).toUpperCase()} ${message.text()}`),
234
+ pageerror: ({ message }) => this.Log.error(message),
235
+ response: (response) => this.Log.trace(`${response.status()} ${response.url()}`),
236
+ requestfailed: (request) => this.Log.error(`${request.failure().errorText} ${request.url()}`)
237
+ };
238
+ // Add listeners
239
+ page.on('console', listeners.console);
240
+ page.on('pageerror', listeners.pageerror);
241
+ page.on('response', listeners.response);
242
+ page.on('requestfailed', listeners.requestfailed);
243
+ // Return cleanup function
244
+ return () => {
245
+ try {
246
+ page.removeListener('console', listeners.console);
247
+ page.removeListener('pageerror', listeners.pageerror);
248
+ page.removeListener('response', listeners.response);
249
+ page.removeListener('requestfailed', listeners.requestfailed);
250
+ }
251
+ catch (err) {
252
+ this.Log.warn(`Error removing page listeners: ${err.message}`);
253
+ }
254
+ };
255
+ }
112
256
  };
113
257
  PdfRenderer.USED_PORTS = [];
114
258
  __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}