@resolveio/server-lib 20.12.42 → 20.12.44
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/fixtures/init.js +61 -15
- package/fixtures/init.js.map +1 -1
- package/methods/pdf.js +113 -59
- package/methods/pdf.js.map +1 -1
- package/methods/report-builder.js +60 -0
- package/methods/report-builder.js.map +1 -1
- package/package.json +2 -1
- package/util/chrome-cleaner.d.ts +5 -0
- package/util/chrome-cleaner.js +139 -0
- package/util/chrome-cleaner.js.map +1 -0
package/fixtures/init.js
CHANGED
|
@@ -52,6 +52,7 @@ var email_history_collection_1 = require("../collections/email-history.collectio
|
|
|
52
52
|
var flag_collection_1 = require("../collections/flag.collection");
|
|
53
53
|
var report_builder_report_collection_1 = require("../collections/report-builder-report.collection");
|
|
54
54
|
var resolveio_server_app_1 = require("../resolveio-server-app");
|
|
55
|
+
var chrome_cleaner_1 = require("../util/chrome-cleaner");
|
|
55
56
|
function loadServerInit() {
|
|
56
57
|
return __awaiter(this, void 0, void 0, function () {
|
|
57
58
|
var enableDebugFlag, enableDebugFlagPDF;
|
|
@@ -82,8 +83,14 @@ function loadServerInit() {
|
|
|
82
83
|
case 8:
|
|
83
84
|
_a.sent();
|
|
84
85
|
_a.label = 9;
|
|
85
|
-
case 9:
|
|
86
|
+
case 9:
|
|
87
|
+
if (!(resolveio_server_app_1.ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200')) return [3 /*break*/, 11];
|
|
88
|
+
return [4 /*yield*/, (0, chrome_cleaner_1.cleanupExistingChromeProcesses)('server-init')];
|
|
86
89
|
case 10:
|
|
90
|
+
_a.sent();
|
|
91
|
+
_a.label = 11;
|
|
92
|
+
case 11: return [4 /*yield*/, backfillReportBuilderLayouts()];
|
|
93
|
+
case 12:
|
|
87
94
|
_a.sent();
|
|
88
95
|
return [2 /*return*/];
|
|
89
96
|
}
|
|
@@ -111,21 +118,40 @@ function backfillReportBuilderLayouts() {
|
|
|
111
118
|
ops = [];
|
|
112
119
|
_loop_1 = function (report) {
|
|
113
120
|
var fieldsSelected = report.fields_selected || [];
|
|
114
|
-
var
|
|
115
|
-
|
|
116
|
-
header
|
|
117
|
-
mappings
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
121
|
+
var collectionKeys = buildCollectionKeys(report);
|
|
122
|
+
var layout = fieldsSelected.map(function (field, index) {
|
|
123
|
+
var header = field.columnName || field.fieldName || "Column ".concat(index + 1);
|
|
124
|
+
var mappings = collectionKeys.map(function (key) {
|
|
125
|
+
var matchesKey = key === report.collection_root
|
|
126
|
+
? (field.collection_name === report.collection_root)
|
|
127
|
+
: (key === (field.lookup_as || '').trim()) || key === field.collection_name;
|
|
128
|
+
if (matchesKey) {
|
|
129
|
+
return {
|
|
130
|
+
collection: key,
|
|
131
|
+
mode: 'variable',
|
|
132
|
+
fieldPath: field.fieldPath || '',
|
|
133
|
+
fieldId: field.id || "f_layout_".concat(index),
|
|
134
|
+
text: '',
|
|
135
|
+
leafValueType: field.leafValueType || 'Value',
|
|
136
|
+
leafFormatType: field.leafFormatType || ''
|
|
137
|
+
};
|
|
126
138
|
}
|
|
127
|
-
|
|
128
|
-
|
|
139
|
+
return {
|
|
140
|
+
collection: key,
|
|
141
|
+
mode: 'text',
|
|
142
|
+
fieldPath: '',
|
|
143
|
+
fieldId: '',
|
|
144
|
+
text: '',
|
|
145
|
+
leafValueType: 'Value',
|
|
146
|
+
leafFormatType: ''
|
|
147
|
+
};
|
|
148
|
+
});
|
|
149
|
+
return {
|
|
150
|
+
id: field.id ? "layout_".concat(field.id) : "layout_".concat(index),
|
|
151
|
+
header: header,
|
|
152
|
+
mappings: mappings
|
|
153
|
+
};
|
|
154
|
+
});
|
|
129
155
|
ops.push({
|
|
130
156
|
updateOne: {
|
|
131
157
|
filter: { _id: report._id },
|
|
@@ -151,6 +177,7 @@ function backfillReportBuilderLayouts() {
|
|
|
151
177
|
}
|
|
152
178
|
finally { if (e_1) throw e_1.error; }
|
|
153
179
|
}
|
|
180
|
+
console.log("Backfilled ".concat(ops.length, " report layouts"));
|
|
154
181
|
if (!ops.length) return [3 /*break*/, 3];
|
|
155
182
|
return [4 /*yield*/, report_builder_report_collection_1.ReportBuilderReports.bulkWrite(ops, { ordered: false }, false, true, true, true)];
|
|
156
183
|
case 2:
|
|
@@ -161,5 +188,24 @@ function backfillReportBuilderLayouts() {
|
|
|
161
188
|
});
|
|
162
189
|
});
|
|
163
190
|
}
|
|
191
|
+
function buildCollectionKeys(report) {
|
|
192
|
+
var keys = [];
|
|
193
|
+
if (report.collection_root) {
|
|
194
|
+
keys.push(report.collection_root);
|
|
195
|
+
}
|
|
196
|
+
(report.collection_joins || []).forEach(function (join) {
|
|
197
|
+
if (!join) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
var alias = (join.alias || '').trim();
|
|
201
|
+
if (alias && !keys.includes(alias)) {
|
|
202
|
+
keys.push(alias);
|
|
203
|
+
}
|
|
204
|
+
else if (join.collection && !keys.includes(join.collection)) {
|
|
205
|
+
keys.push(join.collection);
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
return keys.length ? keys : ['root'];
|
|
209
|
+
}
|
|
164
210
|
|
|
165
211
|
//# sourceMappingURL=init.js.map
|
package/fixtures/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/fixtures/init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"sources":["../../src/fixtures/init.ts"],"names":[],"mappings":"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","file":"init.js","sourcesContent":["import { EmailHistories } from '../collections/email-history.collection';\nimport { Flags } from '../collections/flag.collection';\nimport { ReportBuilderReports } from '../collections/report-builder-report.collection';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { cleanupExistingChromeProcesses } from '../util/chrome-cleaner';\n\nexport async function loadServerInit() {\n\tawait EmailHistories.updateMany({status: 'processing'}, {$set: {status: 'pending'}});\n\n\tlet enableDebugFlag = await Flags.findOne({type: 'Enable Debug'});\n\n\tif (!enableDebugFlag) {\n\t\tawait Flags.insertOne({type: 'Enable Debug', value: false});\n\t}\n\n\tlet enableDebugFlagPDF = await Flags.findOne({type: 'Enable Debug PDF'});\n\n\tif (!enableDebugFlagPDF) {\n\t\tawait Flags.insertOne({type: 'Enable Debug PDF', value: false});\n\t}\n\telse if (enableDebugFlagPDF.value && ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200') {\n\t\tawait Flags.updateOne({_id: enableDebugFlagPDF._id}, {$set: {value: false}});\n\t}\n\n\t// Clean up any orphaned headless Chrome processes left from prior runs (production only).\n\tif (ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200') {\n\t\tawait cleanupExistingChromeProcesses('server-init');\n\t}\n\n\tawait backfillReportBuilderLayouts();\n}\n\nasync function backfillReportBuilderLayouts() {\n\tif (!ReportBuilderReports) {\n\t\treturn;\n\t}\n\n\tconst reports = await ReportBuilderReports.find({\n\t\t$or: [\n\t\t\t{fields_layout: {$exists: false}},\n\t\t\t{fields_layout: {$size: 0}}\n\t\t]\n\t});\n\n\tconst ops = [];\n\n\tfor (const report of reports) {\n\t\tconst fieldsSelected = report.fields_selected || [];\n\t\tconst collectionKeys = buildCollectionKeys(report);\n\n\t\tconst layout = fieldsSelected.map((field, index) => {\n\t\t\tconst header = field.columnName || field.fieldName || `Column ${index + 1}`;\n\n\t\t\tconst mappings = collectionKeys.map(key => {\n\t\t\t\tconst matchesKey = key === report.collection_root\n\t\t\t\t\t? (field.collection_name === report.collection_root)\n\t\t\t\t\t: (key === (field.lookup_as || '').trim()) || key === field.collection_name;\n\n\t\t\t\tif (matchesKey) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcollection: key,\n\t\t\t\t\t\tmode: 'variable',\n\t\t\t\t\t\tfieldPath: field.fieldPath || '',\n\t\t\t\t\t\tfieldId: field.id || `f_layout_${index}`,\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\tleafValueType: field.leafValueType || 'Value',\n\t\t\t\t\t\tleafFormatType: field.leafFormatType || ''\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tcollection: key,\n\t\t\t\t\tmode: 'text',\n\t\t\t\t\tfieldPath: '',\n\t\t\t\t\tfieldId: '',\n\t\t\t\t\ttext: '',\n\t\t\t\t\tleafValueType: 'Value',\n\t\t\t\t\tleafFormatType: ''\n\t\t\t\t};\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tid: field.id ? `layout_${field.id}` : `layout_${index}`,\n\t\t\t\theader,\n\t\t\t\tmappings\n\t\t\t};\n\t\t});\n\n\t\tops.push({\n\t\t\tupdateOne: {\n\t\t\t\tfilter: {_id: report._id},\n\t\t\t\tupdate: {\n\t\t\t\t\t$set: {\n\t\t\t\t\t\tcollection_joins: report.collection_joins || [],\n\t\t\t\t\t\tfields_layout: layout\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tconsole.log(`Backfilled ${ops.length} report layouts`);\n\n\tif (ops.length) {\n\t\tawait ReportBuilderReports.bulkWrite(ops, {ordered: false}, false, true, true, true);\n\t}\n}\n\nfunction buildCollectionKeys(report: any): string[] {\n\tconst keys: string[] = [];\n\n\tif (report.collection_root) {\n\t\tkeys.push(report.collection_root);\n\t}\n\n\t(report.collection_joins || []).forEach(join => {\n\t\tif (!join) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst alias = (join.alias || '').trim();\n\t\tif (alias && !keys.includes(alias)) {\n\t\t\tkeys.push(alias);\n\t\t}\n\t\telse if (join.collection && !keys.includes(join.collection)) {\n\t\t\tkeys.push(join.collection);\n\t\t}\n\t});\n\n\treturn keys.length ? keys : ['root'];\n}\n"]}
|
package/methods/pdf.js
CHANGED
|
@@ -81,6 +81,7 @@ var puppeteer = require("puppeteer");
|
|
|
81
81
|
var simpl_schema_1 = require("simpl-schema");
|
|
82
82
|
var flag_collection_1 = require("../collections/flag.collection");
|
|
83
83
|
var common_1 = require("../util/common");
|
|
84
|
+
var chrome_cleaner_1 = require("../util/chrome-cleaner");
|
|
84
85
|
var PUPPETEER_ARGS = [
|
|
85
86
|
'--disable-dev-shm-usage',
|
|
86
87
|
'--no-sandbox',
|
|
@@ -159,42 +160,61 @@ function applyLowResourceLaunchTweaks(options) {
|
|
|
159
160
|
});
|
|
160
161
|
return __assign(__assign({}, options), { args: mergedArgs, ignoreDefaultArgs: undefined, env: sanitizeLaunchEnv(options.env) });
|
|
161
162
|
}
|
|
162
|
-
function safeCloseBrowser(browser) {
|
|
163
|
+
function safeCloseBrowser(browser, browserPid, meta) {
|
|
163
164
|
return __awaiter(this, void 0, void 0, function () {
|
|
164
|
-
var
|
|
165
|
-
return __generator(this, function (
|
|
166
|
-
switch (
|
|
165
|
+
var proc, closeTimedOut, closeTimeout, errClose_1;
|
|
166
|
+
return __generator(this, function (_a) {
|
|
167
|
+
switch (_a.label) {
|
|
167
168
|
case 0:
|
|
168
169
|
if (!browser) {
|
|
169
170
|
return [2 /*return*/];
|
|
170
171
|
}
|
|
171
|
-
|
|
172
|
+
proc = null;
|
|
173
|
+
try {
|
|
174
|
+
proc = typeof browser.process === 'function' ? browser.process() : null;
|
|
175
|
+
}
|
|
176
|
+
catch (_b) {
|
|
177
|
+
proc = null;
|
|
178
|
+
}
|
|
179
|
+
if (!browserPid && proc && proc.pid) {
|
|
180
|
+
browserPid = proc.pid;
|
|
181
|
+
}
|
|
182
|
+
closeTimedOut = false;
|
|
183
|
+
closeTimeout = setTimeout(function () {
|
|
184
|
+
closeTimedOut = true;
|
|
185
|
+
}, 5000);
|
|
186
|
+
_a.label = 1;
|
|
172
187
|
case 1:
|
|
173
|
-
|
|
188
|
+
_a.trys.push([1, 3, 4, 5]);
|
|
174
189
|
return [4 /*yield*/, browser.close()];
|
|
175
190
|
case 2:
|
|
176
|
-
|
|
177
|
-
return [3 /*break*/,
|
|
191
|
+
_a.sent();
|
|
192
|
+
return [3 /*break*/, 5];
|
|
178
193
|
case 3:
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
194
|
+
errClose_1 = _a.sent();
|
|
195
|
+
console.error(new Date(), 'Puppeteer close failed, forcing kill', { jobId: meta && meta.jobId, attempt: meta && meta.attempt, pid: browserPid }, errClose_1 && errClose_1.message ? errClose_1.message : errClose_1);
|
|
196
|
+
return [3 /*break*/, 5];
|
|
197
|
+
case 4:
|
|
198
|
+
clearTimeout(closeTimeout);
|
|
199
|
+
if (browserPid) {
|
|
200
|
+
(0, chrome_cleaner_1.killChromePid)(browserPid, closeTimedOut ? 'browser-close-timeout' : 'browser-close');
|
|
201
|
+
console.log(new Date(), 'Puppeteer browser closed', {
|
|
202
|
+
jobId: meta && meta.jobId,
|
|
203
|
+
attempt: meta && meta.attempt,
|
|
204
|
+
pid: browserPid,
|
|
205
|
+
closeTimedOut: closeTimedOut,
|
|
206
|
+
durationMs: meta && meta.startedAt ? Date.now() - meta.startedAt : undefined
|
|
207
|
+
});
|
|
185
208
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
}
|
|
189
|
-
return [3 /*break*/, 4];
|
|
190
|
-
case 4: return [2 /*return*/];
|
|
209
|
+
return [7 /*endfinally*/];
|
|
210
|
+
case 5: return [2 /*return*/];
|
|
191
211
|
}
|
|
192
212
|
});
|
|
193
213
|
});
|
|
194
214
|
}
|
|
195
215
|
function launchPDFBrowser(headless, devtools) {
|
|
196
216
|
return __awaiter(this, void 0, void 0, function () {
|
|
197
|
-
var envExecutablePath, launchOptions, errLaunch_1, fallbackExecutablePath, retryOptions;
|
|
217
|
+
var envExecutablePath, launchOptions, browser, proc, pid, errLaunch_1, fallbackExecutablePath, retryOptions, browser, proc, pid;
|
|
198
218
|
return __generator(this, function (_a) {
|
|
199
219
|
switch (_a.label) {
|
|
200
220
|
case 0:
|
|
@@ -216,7 +236,12 @@ function launchPDFBrowser(headless, devtools) {
|
|
|
216
236
|
case 1:
|
|
217
237
|
_a.trys.push([1, 3, , 5]);
|
|
218
238
|
return [4 /*yield*/, puppeteer.launch(launchOptions)];
|
|
219
|
-
case 2:
|
|
239
|
+
case 2:
|
|
240
|
+
browser = _a.sent();
|
|
241
|
+
proc = typeof browser.process === 'function' ? browser.process() : null;
|
|
242
|
+
pid = proc && proc.pid ? proc.pid : undefined;
|
|
243
|
+
(0, chrome_cleaner_1.trackChromePid)(pid);
|
|
244
|
+
return [2 /*return*/, { browser: browser, pid: pid }];
|
|
220
245
|
case 3:
|
|
221
246
|
errLaunch_1 = _a.sent();
|
|
222
247
|
if (!shouldRetryBrowserLaunch(errLaunch_1)) {
|
|
@@ -229,7 +254,12 @@ function launchPDFBrowser(headless, devtools) {
|
|
|
229
254
|
}
|
|
230
255
|
console.warn(new Date(), 'Retrying Puppeteer launch with low-resource args');
|
|
231
256
|
return [4 /*yield*/, puppeteer.launch(retryOptions)];
|
|
232
|
-
case 4:
|
|
257
|
+
case 4:
|
|
258
|
+
browser = _a.sent();
|
|
259
|
+
proc = typeof browser.process === 'function' ? browser.process() : null;
|
|
260
|
+
pid = proc && proc.pid ? proc.pid : undefined;
|
|
261
|
+
(0, chrome_cleaner_1.trackChromePid)(pid);
|
|
262
|
+
return [2 /*return*/, { browser: browser, pid: pid }];
|
|
233
263
|
case 5: return [2 /*return*/];
|
|
234
264
|
}
|
|
235
265
|
});
|
|
@@ -269,7 +299,7 @@ function loadPDFMethods(methodManager) {
|
|
|
269
299
|
}),
|
|
270
300
|
function: function (html_1, fileName_1) {
|
|
271
301
|
return __awaiter(this, arguments, void 0, function (html, fileName, orientation, fontSize, upload, uploadFileOrder, uploadFileType) {
|
|
272
|
-
var enableDebugFlag, enableDebug, maxAttempts, lastError, attempt, browser, page, pathToFont, dejavuserif_woff, dejavuserifBold_woff, dejavuserifItalic_woff, dejavuserifBoldItalic_woff, content, tmpFileName, data, fileData, err_1;
|
|
302
|
+
var enableDebugFlag, enableDebug, maxAttempts, lastError, jobId, attempt, browser, browserPid, attemptStarted, launchResult, page, pathToFont, dejavuserif_woff, dejavuserifBold_woff, dejavuserifItalic_woff, dejavuserifBoldItalic_woff, content, tmpFileName, data, fileData, err_1;
|
|
273
303
|
if (orientation === void 0) { orientation = 'portrait'; }
|
|
274
304
|
if (fontSize === void 0) { fontSize = '12px'; }
|
|
275
305
|
if (upload === void 0) { upload = false; }
|
|
@@ -283,17 +313,24 @@ function loadPDFMethods(methodManager) {
|
|
|
283
313
|
enableDebug = !!(enableDebugFlag && enableDebugFlag.value);
|
|
284
314
|
maxAttempts = 2;
|
|
285
315
|
lastError = null;
|
|
316
|
+
jobId = (0, common_1.objectIdHexString)();
|
|
286
317
|
attempt = 1;
|
|
287
318
|
_a.label = 2;
|
|
288
319
|
case 2:
|
|
289
|
-
if (!(attempt <= maxAttempts)) return [3 /*break*/,
|
|
320
|
+
if (!(attempt <= maxAttempts)) return [3 /*break*/, 20];
|
|
290
321
|
browser = null;
|
|
322
|
+
browserPid = null;
|
|
323
|
+
attemptStarted = Date.now();
|
|
291
324
|
_a.label = 3;
|
|
292
325
|
case 3:
|
|
293
|
-
_a.trys.push([3,
|
|
326
|
+
_a.trys.push([3, 14, 17, 19]);
|
|
327
|
+
console.log(new Date(), 'PDF launch start', { jobId: jobId, attempt: attempt, headless: !enableDebug });
|
|
294
328
|
return [4 /*yield*/, launchPDFBrowser(!enableDebug, enableDebug)];
|
|
295
329
|
case 4:
|
|
296
|
-
|
|
330
|
+
launchResult = _a.sent();
|
|
331
|
+
browser = launchResult.browser;
|
|
332
|
+
browserPid = launchResult.pid;
|
|
333
|
+
console.log(new Date(), 'PDF launch success', { jobId: jobId, attempt: attempt, pid: browserPid });
|
|
297
334
|
return [4 /*yield*/, browser.newPage()];
|
|
298
335
|
case 5:
|
|
299
336
|
page = _a.sent();
|
|
@@ -340,17 +377,20 @@ function loadPDFMethods(methodManager) {
|
|
|
340
377
|
})];
|
|
341
378
|
case 8:
|
|
342
379
|
_a.sent();
|
|
343
|
-
|
|
344
|
-
if (!(orientation === 'landscape')) return [3 /*break*/, 10];
|
|
345
|
-
return [4 /*yield*/, page.setViewport({ width: 1100, height: 850 })];
|
|
380
|
+
return [4 /*yield*/, page.close()];
|
|
346
381
|
case 9:
|
|
347
382
|
_a.sent();
|
|
348
|
-
return [3 /*break*/,
|
|
349
|
-
|
|
350
|
-
|
|
383
|
+
if (!(enableDebugFlag && enableDebugFlag.value)) return [3 /*break*/, 13];
|
|
384
|
+
if (!(orientation === 'landscape')) return [3 /*break*/, 11];
|
|
385
|
+
return [4 /*yield*/, page.setViewport({ width: 1100, height: 850 })];
|
|
386
|
+
case 10:
|
|
351
387
|
_a.sent();
|
|
352
|
-
|
|
388
|
+
return [3 /*break*/, 13];
|
|
389
|
+
case 11: return [4 /*yield*/, page.setViewport({ width: 850, height: 1100 })];
|
|
353
390
|
case 12:
|
|
391
|
+
_a.sent();
|
|
392
|
+
_a.label = 13;
|
|
393
|
+
case 13:
|
|
354
394
|
if (fs.existsSync(path.join(__dirname, (tmpFileName)))) {
|
|
355
395
|
try {
|
|
356
396
|
data = fs.readFileSync(path.join(__dirname, (tmpFileName)));
|
|
@@ -372,32 +412,34 @@ function loadPDFMethods(methodManager) {
|
|
|
372
412
|
console.log('No tmp file ', tmpFileName);
|
|
373
413
|
throw new Error('Error in Generate PDF: No tmp file');
|
|
374
414
|
}
|
|
375
|
-
return [3 /*break*/,
|
|
376
|
-
case
|
|
415
|
+
return [3 /*break*/, 19];
|
|
416
|
+
case 14:
|
|
377
417
|
err_1 = _a.sent();
|
|
378
418
|
lastError = err_1;
|
|
379
|
-
|
|
419
|
+
console.error(new Date(), 'generatePDF attempt error', { jobId: jobId, attempt: attempt, pid: browserPid }, err_1 && err_1.message ? err_1.message : err_1);
|
|
420
|
+
if (!browser) return [3 /*break*/, 16];
|
|
380
421
|
// eslint-disable-next-line no-restricted-syntax
|
|
381
422
|
return [4 /*yield*/, browser.close().catch(function () { })];
|
|
382
|
-
case
|
|
423
|
+
case 15:
|
|
383
424
|
// eslint-disable-next-line no-restricted-syntax
|
|
384
425
|
_a.sent();
|
|
385
|
-
_a.label =
|
|
386
|
-
case
|
|
426
|
+
_a.label = 16;
|
|
427
|
+
case 16:
|
|
387
428
|
if (err_1 && err_1.message && err_1.message.includes('Navigating frame was detached') && attempt < maxAttempts) {
|
|
388
429
|
console.warn(new Date(), 'Retry generatePDF after detached frame', { attempt: attempt });
|
|
389
|
-
return [3 /*break*/,
|
|
430
|
+
return [3 /*break*/, 19];
|
|
390
431
|
}
|
|
391
432
|
throw err_1;
|
|
392
|
-
case
|
|
393
|
-
case
|
|
433
|
+
case 17: return [4 /*yield*/, safeCloseBrowser(browser, browserPid, { jobId: jobId, attempt: attempt, startedAt: attemptStarted })];
|
|
434
|
+
case 18:
|
|
394
435
|
_a.sent();
|
|
395
436
|
browser = null;
|
|
437
|
+
browserPid = null;
|
|
396
438
|
return [7 /*endfinally*/];
|
|
397
|
-
case
|
|
439
|
+
case 19:
|
|
398
440
|
attempt++;
|
|
399
441
|
return [3 /*break*/, 2];
|
|
400
|
-
case
|
|
442
|
+
case 20: throw lastError;
|
|
401
443
|
}
|
|
402
444
|
});
|
|
403
445
|
});
|
|
@@ -437,7 +479,7 @@ function loadPDFMethods(methodManager) {
|
|
|
437
479
|
}),
|
|
438
480
|
function: function (html_1, fileName_1) {
|
|
439
481
|
return __awaiter(this, arguments, void 0, function (html, fileName, orientation, fontSize, upload, uploadFileOrder, uploadFileType) {
|
|
440
|
-
var maxAttempts, lastError, attempt, browser, page, pathToFont, dejavuserif_woff, dejavuserifBold_woff, dejavuserifItalic_woff, dejavuserifBoldItalic_woff, content, tmpFileName, data, fileData, err_2;
|
|
482
|
+
var maxAttempts, lastError, jobId, attempt, browser, browserPid, attemptStarted, launchResult, page, pathToFont, dejavuserif_woff, dejavuserifBold_woff, dejavuserifItalic_woff, dejavuserifBoldItalic_woff, content, tmpFileName, data, fileData, err_2;
|
|
441
483
|
if (orientation === void 0) { orientation = 'portrait'; }
|
|
442
484
|
if (fontSize === void 0) { fontSize = '12px'; }
|
|
443
485
|
if (upload === void 0) { upload = false; }
|
|
@@ -448,17 +490,24 @@ function loadPDFMethods(methodManager) {
|
|
|
448
490
|
case 0:
|
|
449
491
|
maxAttempts = 2;
|
|
450
492
|
lastError = null;
|
|
493
|
+
jobId = (0, common_1.objectIdHexString)();
|
|
451
494
|
attempt = 1;
|
|
452
495
|
_a.label = 1;
|
|
453
496
|
case 1:
|
|
454
|
-
if (!(attempt <= maxAttempts)) return [3 /*break*/,
|
|
497
|
+
if (!(attempt <= maxAttempts)) return [3 /*break*/, 15];
|
|
455
498
|
browser = null;
|
|
499
|
+
browserPid = null;
|
|
500
|
+
attemptStarted = Date.now();
|
|
456
501
|
_a.label = 2;
|
|
457
502
|
case 2:
|
|
458
|
-
_a.trys.push([2,
|
|
503
|
+
_a.trys.push([2, 9, 12, 14]);
|
|
504
|
+
console.log(new Date(), 'PDF launch start', { jobId: jobId, attempt: attempt, headless: true });
|
|
459
505
|
return [4 /*yield*/, launchPDFBrowser(true, false)];
|
|
460
506
|
case 3:
|
|
461
|
-
|
|
507
|
+
launchResult = _a.sent();
|
|
508
|
+
browser = launchResult.browser;
|
|
509
|
+
browserPid = launchResult.pid;
|
|
510
|
+
console.log(new Date(), 'PDF launch success', { jobId: jobId, attempt: attempt, pid: browserPid });
|
|
462
511
|
return [4 /*yield*/, browser.newPage()];
|
|
463
512
|
case 4:
|
|
464
513
|
page = _a.sent();
|
|
@@ -504,6 +553,9 @@ function loadPDFMethods(methodManager) {
|
|
|
504
553
|
timeout: 0
|
|
505
554
|
})];
|
|
506
555
|
case 7:
|
|
556
|
+
_a.sent();
|
|
557
|
+
return [4 /*yield*/, page.close()];
|
|
558
|
+
case 8:
|
|
507
559
|
_a.sent();
|
|
508
560
|
if (fs.existsSync(path.join(__dirname, (tmpFileName)))) {
|
|
509
561
|
try {
|
|
@@ -526,32 +578,34 @@ function loadPDFMethods(methodManager) {
|
|
|
526
578
|
console.log('No tmp file ', tmpFileName);
|
|
527
579
|
throw new Error('Error in Generate PDF No Page Number: No tmp file');
|
|
528
580
|
}
|
|
529
|
-
return [3 /*break*/,
|
|
530
|
-
case
|
|
581
|
+
return [3 /*break*/, 14];
|
|
582
|
+
case 9:
|
|
531
583
|
err_2 = _a.sent();
|
|
532
584
|
lastError = err_2;
|
|
533
|
-
|
|
585
|
+
console.error(new Date(), 'generatePDFNoPageNumber attempt error', { jobId: jobId, attempt: attempt, pid: browserPid }, err_2 && err_2.message ? err_2.message : err_2);
|
|
586
|
+
if (!browser) return [3 /*break*/, 11];
|
|
534
587
|
// eslint-disable-next-line no-restricted-syntax
|
|
535
588
|
return [4 /*yield*/, browser.close().catch(function () { })];
|
|
536
|
-
case
|
|
589
|
+
case 10:
|
|
537
590
|
// eslint-disable-next-line no-restricted-syntax
|
|
538
591
|
_a.sent();
|
|
539
|
-
_a.label =
|
|
540
|
-
case
|
|
592
|
+
_a.label = 11;
|
|
593
|
+
case 11:
|
|
541
594
|
if (err_2 && err_2.message && err_2.message.includes('Navigating frame was detached') && attempt < maxAttempts) {
|
|
542
595
|
console.warn(new Date(), 'Retry generatePDFNoPageNumber after detached frame', { attempt: attempt });
|
|
543
|
-
return [3 /*break*/,
|
|
596
|
+
return [3 /*break*/, 14];
|
|
544
597
|
}
|
|
545
598
|
throw err_2;
|
|
546
|
-
case
|
|
547
|
-
case
|
|
599
|
+
case 12: return [4 /*yield*/, safeCloseBrowser(browser, browserPid, { jobId: jobId, attempt: attempt, startedAt: attemptStarted })];
|
|
600
|
+
case 13:
|
|
548
601
|
_a.sent();
|
|
549
602
|
browser = null;
|
|
603
|
+
browserPid = null;
|
|
550
604
|
return [7 /*endfinally*/];
|
|
551
|
-
case
|
|
605
|
+
case 14:
|
|
552
606
|
attempt++;
|
|
553
607
|
return [3 /*break*/, 1];
|
|
554
|
-
case
|
|
608
|
+
case 15: throw lastError;
|
|
555
609
|
}
|
|
556
610
|
});
|
|
557
611
|
});
|