@resolveio/server-lib 20.14.34 → 20.14.35
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/package.json +1 -1
- package/server-app.d.ts +18 -0
- package/server-app.js +139 -0
- package/server-app.js.map +1 -1
package/package.json
CHANGED
package/server-app.d.ts
CHANGED
|
@@ -36,6 +36,14 @@ export declare class ResolveIOMainServer {
|
|
|
36
36
|
private _perfDebugLastCpu;
|
|
37
37
|
private _perfDebugLastTs;
|
|
38
38
|
private _eventLoopHistogram;
|
|
39
|
+
private _cpuProfileOnStart;
|
|
40
|
+
private _cpuProfileAuto;
|
|
41
|
+
private _cpuProfileDurationMs;
|
|
42
|
+
private _cpuProfileThresholdPct;
|
|
43
|
+
private _cpuProfileTriggerCount;
|
|
44
|
+
private _cpuProfileHighCount;
|
|
45
|
+
private _cpuProfileDir;
|
|
46
|
+
private _cpuProfileSession;
|
|
39
47
|
private _serverStartTime;
|
|
40
48
|
private _lastErrorMsg;
|
|
41
49
|
private _debugMsgRecv;
|
|
@@ -77,8 +85,18 @@ export declare class ResolveIOMainServer {
|
|
|
77
85
|
private looksLikeTextPayload;
|
|
78
86
|
private resolveConnectDebug;
|
|
79
87
|
private resolvePerfDebug;
|
|
88
|
+
private resolveCpuProfileOnStart;
|
|
89
|
+
private resolveCpuProfileAuto;
|
|
90
|
+
private resolveCpuProfileDurationMs;
|
|
91
|
+
private resolveCpuProfileThresholdPct;
|
|
92
|
+
private resolveCpuProfileTriggerCount;
|
|
93
|
+
private resolveCpuProfileDir;
|
|
80
94
|
private parsePositiveInt;
|
|
95
|
+
private parsePositiveFloat;
|
|
81
96
|
private startPerfDebug;
|
|
97
|
+
private startCpuProfile;
|
|
98
|
+
private stopCpuProfile;
|
|
99
|
+
private resolveWritableProfileDir;
|
|
82
100
|
private parseDebugFlag;
|
|
83
101
|
private logConnectDebug;
|
|
84
102
|
private triggerClientHeartbeat;
|
package/server-app.js
CHANGED
|
@@ -76,10 +76,14 @@ exports.ResolveIOMainServer = void 0;
|
|
|
76
76
|
var express = require("express");
|
|
77
77
|
var xmlParser = require("express-xml-bodyparser");
|
|
78
78
|
var http_1 = require("http");
|
|
79
|
+
var fs = require("fs");
|
|
79
80
|
var jwt = require("jsonwebtoken");
|
|
80
81
|
var moment = require("moment-timezone");
|
|
81
82
|
var msgpackr_1 = require("msgpackr");
|
|
83
|
+
var os = require("os");
|
|
84
|
+
var path = require("path");
|
|
82
85
|
var perf_hooks_1 = require("perf_hooks");
|
|
86
|
+
var inspector = require("inspector");
|
|
83
87
|
var url_1 = require("url");
|
|
84
88
|
var WebSocket = require("ws");
|
|
85
89
|
var log_collection_1 = require("./collections/log.collection");
|
|
@@ -117,6 +121,14 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
117
121
|
this._perfDebugLastCpu = null;
|
|
118
122
|
this._perfDebugLastTs = 0;
|
|
119
123
|
this._eventLoopHistogram = null;
|
|
124
|
+
this._cpuProfileOnStart = false;
|
|
125
|
+
this._cpuProfileAuto = false;
|
|
126
|
+
this._cpuProfileDurationMs = 15000;
|
|
127
|
+
this._cpuProfileThresholdPct = 90;
|
|
128
|
+
this._cpuProfileTriggerCount = 3;
|
|
129
|
+
this._cpuProfileHighCount = 0;
|
|
130
|
+
this._cpuProfileDir = null;
|
|
131
|
+
this._cpuProfileSession = null;
|
|
120
132
|
this._lastErrorMsg = null;
|
|
121
133
|
this._debugMsgRecv = 0;
|
|
122
134
|
this._debugMsgQueue = 0;
|
|
@@ -153,12 +165,21 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
153
165
|
this._lastErrorMsg = null;
|
|
154
166
|
this._wsConnectDebug = this.resolveConnectDebug();
|
|
155
167
|
this._perfDebug = this.resolvePerfDebug();
|
|
168
|
+
this._cpuProfileOnStart = this.resolveCpuProfileOnStart();
|
|
169
|
+
this._cpuProfileAuto = this.resolveCpuProfileAuto();
|
|
170
|
+
this._cpuProfileDurationMs = this.resolveCpuProfileDurationMs();
|
|
171
|
+
this._cpuProfileThresholdPct = this.resolveCpuProfileThresholdPct();
|
|
172
|
+
this._cpuProfileTriggerCount = this.resolveCpuProfileTriggerCount();
|
|
173
|
+
this._cpuProfileDir = this.resolveCpuProfileDir();
|
|
156
174
|
_a = this;
|
|
157
175
|
return [4 /*yield*/, monitor_manager_1.MonitorManager.create()];
|
|
158
176
|
case 1:
|
|
159
177
|
_a._monitorManager = _b.sent();
|
|
160
178
|
this._monitorManagerFunction = new monitor_manager_1.MonitorManagerFunction();
|
|
161
179
|
this.startPerfDebug();
|
|
180
|
+
if (this._cpuProfileOnStart) {
|
|
181
|
+
this.startCpuProfile('on-start');
|
|
182
|
+
}
|
|
162
183
|
// Check for workers and decide what to start
|
|
163
184
|
this._isWorkersEnabled = process.env.IS_WORKERS_ENABLED === 'true';
|
|
164
185
|
this._isWorkerInstance = process.env.IS_WORKER_INSTANCE === 'true';
|
|
@@ -1207,6 +1228,42 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
1207
1228
|
var raw = (_c = (_b = (_a = process.env.PERF_DEBUG) !== null && _a !== void 0 ? _a : process.env.CPU_DEBUG) !== null && _b !== void 0 ? _b : config === null || config === void 0 ? void 0 : config['PERF_DEBUG']) !== null && _c !== void 0 ? _c : config === null || config === void 0 ? void 0 : config['CPU_DEBUG'];
|
|
1208
1229
|
return this.parseDebugFlag(raw);
|
|
1209
1230
|
};
|
|
1231
|
+
ResolveIOMainServer.prototype.resolveCpuProfileOnStart = function () {
|
|
1232
|
+
var _a, _b, _c;
|
|
1233
|
+
var config = resolveio_server_app_1.ResolveIOServer.getServerConfig ? resolveio_server_app_1.ResolveIOServer.getServerConfig() : null;
|
|
1234
|
+
var raw = (_c = (_b = (_a = process.env.CPU_PROFILE_ON_START) !== null && _a !== void 0 ? _a : process.env.CPU_PROFILE_START) !== null && _b !== void 0 ? _b : config === null || config === void 0 ? void 0 : config['CPU_PROFILE_ON_START']) !== null && _c !== void 0 ? _c : config === null || config === void 0 ? void 0 : config['CPU_PROFILE_START'];
|
|
1235
|
+
return this.parseDebugFlag(raw);
|
|
1236
|
+
};
|
|
1237
|
+
ResolveIOMainServer.prototype.resolveCpuProfileAuto = function () {
|
|
1238
|
+
var _a;
|
|
1239
|
+
var config = resolveio_server_app_1.ResolveIOServer.getServerConfig ? resolveio_server_app_1.ResolveIOServer.getServerConfig() : null;
|
|
1240
|
+
var raw = (_a = process.env.CPU_PROFILE_AUTO) !== null && _a !== void 0 ? _a : config === null || config === void 0 ? void 0 : config['CPU_PROFILE_AUTO'];
|
|
1241
|
+
return this.parseDebugFlag(raw);
|
|
1242
|
+
};
|
|
1243
|
+
ResolveIOMainServer.prototype.resolveCpuProfileDurationMs = function () {
|
|
1244
|
+
var _a, _b, _c;
|
|
1245
|
+
var config = resolveio_server_app_1.ResolveIOServer.getServerConfig ? resolveio_server_app_1.ResolveIOServer.getServerConfig() : null;
|
|
1246
|
+
var raw = (_c = (_b = (_a = process.env.CPU_PROFILE_DURATION_MS) !== null && _a !== void 0 ? _a : process.env.PERF_PROFILE_DURATION_MS) !== null && _b !== void 0 ? _b : config === null || config === void 0 ? void 0 : config['CPU_PROFILE_DURATION_MS']) !== null && _c !== void 0 ? _c : config === null || config === void 0 ? void 0 : config['PERF_PROFILE_DURATION_MS'];
|
|
1247
|
+
return this.parsePositiveInt(raw, this._cpuProfileDurationMs);
|
|
1248
|
+
};
|
|
1249
|
+
ResolveIOMainServer.prototype.resolveCpuProfileThresholdPct = function () {
|
|
1250
|
+
var _a, _b, _c;
|
|
1251
|
+
var config = resolveio_server_app_1.ResolveIOServer.getServerConfig ? resolveio_server_app_1.ResolveIOServer.getServerConfig() : null;
|
|
1252
|
+
var raw = (_c = (_b = (_a = process.env.CPU_PROFILE_THRESHOLD_PCT) !== null && _a !== void 0 ? _a : process.env.PERF_PROFILE_THRESHOLD_PCT) !== null && _b !== void 0 ? _b : config === null || config === void 0 ? void 0 : config['CPU_PROFILE_THRESHOLD_PCT']) !== null && _c !== void 0 ? _c : config === null || config === void 0 ? void 0 : config['PERF_PROFILE_THRESHOLD_PCT'];
|
|
1253
|
+
return this.parsePositiveFloat(raw, this._cpuProfileThresholdPct);
|
|
1254
|
+
};
|
|
1255
|
+
ResolveIOMainServer.prototype.resolveCpuProfileTriggerCount = function () {
|
|
1256
|
+
var _a;
|
|
1257
|
+
var config = resolveio_server_app_1.ResolveIOServer.getServerConfig ? resolveio_server_app_1.ResolveIOServer.getServerConfig() : null;
|
|
1258
|
+
var raw = (_a = process.env.CPU_PROFILE_TRIGGER_COUNT) !== null && _a !== void 0 ? _a : config === null || config === void 0 ? void 0 : config['CPU_PROFILE_TRIGGER_COUNT'];
|
|
1259
|
+
return this.parsePositiveInt(raw, this._cpuProfileTriggerCount);
|
|
1260
|
+
};
|
|
1261
|
+
ResolveIOMainServer.prototype.resolveCpuProfileDir = function () {
|
|
1262
|
+
var _a;
|
|
1263
|
+
var config = resolveio_server_app_1.ResolveIOServer.getServerConfig ? resolveio_server_app_1.ResolveIOServer.getServerConfig() : null;
|
|
1264
|
+
var raw = (_a = process.env.CPU_PROFILE_DIR) !== null && _a !== void 0 ? _a : config === null || config === void 0 ? void 0 : config['CPU_PROFILE_DIR'];
|
|
1265
|
+
return typeof raw === 'string' && raw.trim() ? raw.trim() : null;
|
|
1266
|
+
};
|
|
1210
1267
|
ResolveIOMainServer.prototype.parsePositiveInt = function (value, fallback) {
|
|
1211
1268
|
var parsed = parseInt(value !== null && value !== void 0 ? value : '', 10);
|
|
1212
1269
|
if (Number.isNaN(parsed) || parsed <= 0) {
|
|
@@ -1214,6 +1271,13 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
1214
1271
|
}
|
|
1215
1272
|
return parsed;
|
|
1216
1273
|
};
|
|
1274
|
+
ResolveIOMainServer.prototype.parsePositiveFloat = function (value, fallback) {
|
|
1275
|
+
var parsed = parseFloat(value !== null && value !== void 0 ? value : '');
|
|
1276
|
+
if (Number.isNaN(parsed) || parsed <= 0) {
|
|
1277
|
+
return fallback;
|
|
1278
|
+
}
|
|
1279
|
+
return parsed;
|
|
1280
|
+
};
|
|
1217
1281
|
ResolveIOMainServer.prototype.startPerfDebug = function () {
|
|
1218
1282
|
var _this = this;
|
|
1219
1283
|
var _a;
|
|
@@ -1261,10 +1325,85 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
1261
1325
|
msgRecv: _this._debugMsgRecv,
|
|
1262
1326
|
msgQueue: _this._debugMsgQueue
|
|
1263
1327
|
}));
|
|
1328
|
+
if (_this._cpuProfileAuto) {
|
|
1329
|
+
if (cpuPct >= _this._cpuProfileThresholdPct) {
|
|
1330
|
+
_this._cpuProfileHighCount += 1;
|
|
1331
|
+
}
|
|
1332
|
+
else {
|
|
1333
|
+
_this._cpuProfileHighCount = 0;
|
|
1334
|
+
}
|
|
1335
|
+
if (_this._cpuProfileHighCount >= _this._cpuProfileTriggerCount) {
|
|
1336
|
+
_this._cpuProfileHighCount = 0;
|
|
1337
|
+
_this.startCpuProfile('auto-high-cpu');
|
|
1338
|
+
}
|
|
1339
|
+
}
|
|
1264
1340
|
_this._perfDebugLastCpu = process.cpuUsage();
|
|
1265
1341
|
_this._perfDebugLastTs = now;
|
|
1266
1342
|
}, this._perfDebugIntervalMs);
|
|
1267
1343
|
};
|
|
1344
|
+
ResolveIOMainServer.prototype.startCpuProfile = function (trigger) {
|
|
1345
|
+
var _this = this;
|
|
1346
|
+
if (this._cpuProfileSession) {
|
|
1347
|
+
return;
|
|
1348
|
+
}
|
|
1349
|
+
try {
|
|
1350
|
+
var session_1 = new inspector.Session();
|
|
1351
|
+
session_1.connect();
|
|
1352
|
+
session_1.post('Profiler.enable', function () {
|
|
1353
|
+
session_1.post('Profiler.start', function () {
|
|
1354
|
+
_this._cpuProfileSession = session_1;
|
|
1355
|
+
console.log(new Date(), '[Perf Debug]', 'CPU profile started', trigger);
|
|
1356
|
+
setTimeout(function () {
|
|
1357
|
+
_this.stopCpuProfile(trigger);
|
|
1358
|
+
}, _this._cpuProfileDurationMs);
|
|
1359
|
+
});
|
|
1360
|
+
});
|
|
1361
|
+
}
|
|
1362
|
+
catch (error) {
|
|
1363
|
+
console.error(new Date(), '[Perf Debug]', 'CPU profile start failed', error);
|
|
1364
|
+
}
|
|
1365
|
+
};
|
|
1366
|
+
ResolveIOMainServer.prototype.stopCpuProfile = function (trigger) {
|
|
1367
|
+
var _this = this;
|
|
1368
|
+
var session = this._cpuProfileSession;
|
|
1369
|
+
if (!session) {
|
|
1370
|
+
return;
|
|
1371
|
+
}
|
|
1372
|
+
session.post('Profiler.stop', function (err, res) {
|
|
1373
|
+
var _a;
|
|
1374
|
+
if (err) {
|
|
1375
|
+
console.error(new Date(), '[Perf Debug]', 'CPU profile stop failed', err);
|
|
1376
|
+
}
|
|
1377
|
+
else {
|
|
1378
|
+
try {
|
|
1379
|
+
var dir = _this.resolveWritableProfileDir();
|
|
1380
|
+
var filename = "resolveio-cpuprofile-".concat(process.pid, "-").concat(Date.now(), ".cpuprofile");
|
|
1381
|
+
var filePath = path.join(dir, filename);
|
|
1382
|
+
fs.writeFileSync(filePath, JSON.stringify((_a = res === null || res === void 0 ? void 0 : res.profile) !== null && _a !== void 0 ? _a : {}));
|
|
1383
|
+
console.log(new Date(), '[Perf Debug]', 'CPU profile saved', filePath, trigger);
|
|
1384
|
+
}
|
|
1385
|
+
catch (writeErr) {
|
|
1386
|
+
console.error(new Date(), '[Perf Debug]', 'CPU profile write failed', writeErr);
|
|
1387
|
+
}
|
|
1388
|
+
}
|
|
1389
|
+
try {
|
|
1390
|
+
session.disconnect();
|
|
1391
|
+
}
|
|
1392
|
+
catch (_b) { }
|
|
1393
|
+
_this._cpuProfileSession = null;
|
|
1394
|
+
});
|
|
1395
|
+
};
|
|
1396
|
+
ResolveIOMainServer.prototype.resolveWritableProfileDir = function () {
|
|
1397
|
+
var preferred = this._cpuProfileDir;
|
|
1398
|
+
if (preferred) {
|
|
1399
|
+
try {
|
|
1400
|
+
fs.mkdirSync(preferred, { recursive: true });
|
|
1401
|
+
return preferred;
|
|
1402
|
+
}
|
|
1403
|
+
catch (_a) { }
|
|
1404
|
+
}
|
|
1405
|
+
return os.tmpdir();
|
|
1406
|
+
};
|
|
1268
1407
|
ResolveIOMainServer.prototype.parseDebugFlag = function (value) {
|
|
1269
1408
|
if (value === true) {
|
|
1270
1409
|
return true;
|
package/server-app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/server-app.ts"],"names":[],"mappings":"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","file":"server-app.js","sourcesContent":["import * as express from 'express';\nimport * as xmlParser from 'express-xml-bodyparser';\nimport { createServer, Server } from 'http';\nimport * as jwt from 'jsonwebtoken';\nimport * as moment from 'moment-timezone';\nimport { unpack } from 'msgpackr';\nimport { monitorEventLoopDelay } from 'perf_hooks';\nimport { URL } from 'url';\nimport * as WebSocket from 'ws';\n\nimport { Logs } from './collections/log.collection';\nimport { Users } from './collections/user.collection';\nimport { CronManager } from './managers/cron.manager';\nimport { MethodManager } from './managers/method.manager';\nimport { MonitorManager, MonitorManagerFunction } from './managers/monitor.manager';\nimport { SubscriptionManager } from './managers/subscription.manager';\nimport { ServerResponseModel } from './models/server-message.model';\nimport { dateReviver, getBinarySize, isAllowedOrigin, objectIdHexString, round } from './util/common';\nimport { ErrorReporter } from './util/error-reporter';\nimport { ensureErrorWithCorrelation } from './util/error-tracking';\n\nimport { MongoNetworkTimeoutError } from 'mongodb';\nimport { setupAuthRoutes } from './http/auth';\nimport { setupHealthRoutes } from './http/health';\nimport { setupHomeRoutes } from './http/home';\nimport { setupSlowQueryPublicationRoutes } from './http/slow-query-publication';\n\nimport { WebSocketManager } from './managers/websocket.manager';\nimport { WorkerDispatcherManager } from './managers/worker-dispatcher.manager';\nimport { WorkerServerManager } from './managers/worker-server.manager';\nimport { ResolveIOServer } from './resolveio-server-app';\n\nexport class ResolveIOMainServer {\n\tprivate _app: express.Application;\n\tprivate _serverHTTP: Server;\n\tprivate _portHTTP: number;\n\tprivate _serverWSS: WebSocket.Server;\n\tprivate _offlineUpdates = [];\n\tpublic sesMail = false;\n\tprivate publicProgram = false;\n\tprivate _rebootFlag = false;\n\n\tprivate LOGGER = 'ERROR'; //ERROR / DEBUG\n\n\tprivate _websocketManager: WebSocketManager;\n\tprivate _monitorManager: MonitorManager;\n\tprivate _monitorManagerFunction: MonitorManagerFunction;\n\tprivate _subscriptionManager: SubscriptionManager;\n\tprivate _methodManager: MethodManager;\n\tprivate _cronManager: CronManager;\n\tprivate _clientRoutes: string[] = [];\n\tprivate _workerDispatcherManager: WorkerDispatcherManager;\n\tprivate _workerServerManager: WorkerServerManager;\n\tprivate _httpServerClosePromise: Promise<void> | null = null;\n\tprivate _websocketServerClosePromise: Promise<void> | null = null;\n\tprivate _wsConnectDebug = false;\n\tprivate _perfDebug = false;\n\tprivate _perfDebugIntervalMs = 2000;\n\tprivate _perfDebugTimer: NodeJS.Timeout | null = null;\n\tprivate _perfDebugLastCpu: NodeJS.CpuUsage | null = null;\n\tprivate _perfDebugLastTs = 0;\n\tprivate _eventLoopHistogram: ReturnType<typeof monitorEventLoopDelay> | null = null;\n\n\tprivate _serverStartTime: Date;\n\tprivate _lastErrorMsg: Date = null;\n\n\tprivate _debugMsgRecv = 0;\n\tprivate _debugMsgQueue = 0;\n\n\tprivate _isWorkersEnabled = false;\n\tprivate _isWorkerInstance = false;\n\n\tprivate _safeShutdown = false;\n\n\tprivate readonly _clientHeartbeatIntervalMs = 20000;\n\tprivate readonly _clientHeartbeatInitialDelayMs = 5000;\n\tprivate readonly _clientHeartbeatBackpressureBytes = 5 * 1024 * 1024;\n\n\tconstructor() {}\n\n\tstatic async create() {\n\t\tconst resolveioMainServer = new ResolveIOMainServer();\n\t\tawait resolveioMainServer.initialize();\n\t\treturn resolveioMainServer;\n\t}\n\n\tprivate async initialize() {\n\t\tthis._serverStartTime = new Date();\n\t\tthis._lastErrorMsg = null;\n\t\tthis._wsConnectDebug = this.resolveConnectDebug();\n\t\tthis._perfDebug = this.resolvePerfDebug();\n\t\tthis._monitorManager = await MonitorManager.create();\n\t\tthis._monitorManagerFunction = new MonitorManagerFunction();\n\t\tthis.startPerfDebug();\n\n\t\t// Check for workers and decide what to start\n\t\tthis._isWorkersEnabled = process.env.IS_WORKERS_ENABLED === 'true';\n\t\tthis._isWorkerInstance = process.env.IS_WORKER_INSTANCE === 'true';\n\n\t\tsetInterval(() => {\n\t\t\tif (this._methodManager && this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Server App', 'Msg Recv Hits', this._debugMsgRecv);\n\t\t\t\tconsole.log(new Date(), 'Server App', 'Msg Queue Hits', this._debugMsgQueue);\n\t\t\t}\n\n\t\t\tthis._debugMsgQueue = 0;\n\t\t\tthis._debugMsgRecv = 0;\n\t\t}, 60000);\n\n\t\tprocess.removeAllListeners('unhandledRejection');\n\n\t\tprocess.on('unhandledRejection', async (error, rej) => {\n\t\t\tconst { error: normalizedError, correlationId } = ensureErrorWithCorrelation(error);\n\n\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.error(new Date(), 'ERROR DETECTED w/ Debug Flag Active: unhandledRejection', [normalizedError, rej, { correlationId }]);\n\t\t\t}\n\n\t\t\t// Condition to filter out the MongoError with specific codes\n\t\t\tif (normalizedError && normalizedError['name'] === 'MongoError' && (normalizedError['code'] === 48 || normalizedError['code'] === 26 || normalizedError['code'] === 11000 || normalizedError['code'] === 251)) {\n\t\t\t\treturn; // Simply return without doing anything further\n\t\t\t}\n\n\t\t\t// if (normalizedError && normalizedError['name'] === 'MongoServerError' && (!initServerFlag || normalizedError['code'] === 26 || normalizedError['code'] === 11000 || normalizedError['code'] === 86 || normalizedError['code'] === 251)) {\n\t\t\t// \treturn; // Simply return without doing anything further\n\t\t\t// }\n\n\t\t\tif (normalizedError && normalizedError['name'] === 'MongoServerError') {\n\t\t\t\treturn; // Simply return without doing anything further\n\t\t\t}\n\n\t\t\tconst errorDetails = {\n\t\t\t\tid: correlationId,\n\t\t\t\tname: normalizedError?.name,\n\t\t\t\tmessage: normalizedError?.message,\n\t\t\t\tstack: normalizedError?.stack,\n\t\t\t\tcode: normalizedError?.code,\n\t\t\t\tcodeName: normalizedError?.codeName\n\t\t\t};\n\n\t\t\tconsole.error(new Date(), 'Unhandled Rejection at Promise', [errorDetails]);\n\t\t\t\n\t\t\tlet diffTimeSec = moment().diff(this._serverStartTime, 'seconds');\n\n\t\t\t// If this is a MongoNetworkTimeoutError, handle it specifically\n\t\t\tif (normalizedError && (normalizedError['name'] === 'MongoNetworkTimeoutError' || normalizedError instanceof MongoNetworkTimeoutError)) {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\t// Exiting the process\n\t\t\t\t\tprocess.exit(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (normalizedError && normalizedError['name'] === 'MongoError' && normalizedError['message'] === 'not master') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\t\t\t\t}\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\telse if (normalizedError && normalizedError['name'] === 'MongoError' && normalizedError['message'] === 'not master and slaveOk=false') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\t\t\t\t}\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\telse if (normalizedError && normalizedError['name'] !== 'StatusError' && normalizedError['message'] !== '') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\tawait this.reportServerError(\n\t\t\t\t\t\t'SERVER - Unhandled Rejection - ' + ResolveIOServer.getServerConfig()['CLIENT_NAME'],\n\t\t\t\t\t\tcorrelationId,\n\t\t\t\t\t\terrorDetails,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontext: 'unhandledRejection',\n\t\t\t\t\t\t\tscenario: 'General'\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tprocess.on('uncaughtException', async error => {\n\t\t\tconst { error: normalizedError, correlationId } = ensureErrorWithCorrelation(error);\n\t\t\tconsole.error(normalizedError, 'Uncaught Exception thrown', { correlationId });\n\n\t\t\tlet diffTimeSec = moment().diff(this._serverStartTime, 'seconds');\n\n\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t}, 60000);\n\t\t\t\t\n\t\t\t\tconst errorDetails = {\n\t\t\t\t\tid: correlationId,\n\t\t\t\t\tname: normalizedError?.name,\n\t\t\t\t\tmessage: normalizedError?.message,\n\t\t\t\t\tstack: normalizedError?.stack,\n\t\t\t\t\tcode: normalizedError?.code,\n\t\t\t\t\tcodeName: normalizedError?.codeName\n\t\t\t\t};\n\n\t\t\t\tawait this.reportServerError(\n\t\t\t\t\t'SERVER - Unhandled Exception - ' + ResolveIOServer.getServerConfig()['CLIENT_NAME'],\n\t\t\t\t\tcorrelationId,\n\t\t\t\t\terrorDetails,\n\t\t\t\t\t{\n\t\t\t\t\t\tcontext: 'uncaughtException'\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\t//PM2 wants to reboot/restart\n\t\tprocess.on('SIGINT', async () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\ttry {\n\t\t\t\tawait this.shutdownNetworkServers();\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.error(new Date(), 'Error closing network servers (SIGINT)', error);\n\t\t\t}\n\t\t\tawait this.safeShutdown();\n\t\t});\n\n\t\tprocess.on('SIGTERM', async () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\ttry {\n\t\t\t\tawait this.shutdownNetworkServers();\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.error(new Date(), 'Error closing network servers (SIGTERM)', error);\n\t\t\t}\n\t\t\tawait this.safeShutdown();\n\t\t});\n\n\t\tprocess.on('SIGQUIT', async () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\ttry {\n\t\t\t\tawait this.shutdownNetworkServers();\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.error(new Date(), 'Error closing network servers (SIGQUIT)', error);\n\t\t\t}\n\t\t\tawait this.safeShutdown();\n\t\t});\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Starting ResolveIO Server');\n\t\t}\n\n\t\tif (this._isWorkersEnabled) {\n\t\t\tif (this._isWorkerInstance) {\n\t\t\t\tconsole.log('Running as a Worker instance', process.env.NODE_APP_INSTANCE);\n\t\t\t\tthis._methodManager = MethodManager.create(null, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n\t\t\t\tthis._subscriptionManager = SubscriptionManager.createPublicationRegistry(ResolveIOServer.getServerConfig());\n\t\t\t\tthis._workerServerManager = WorkerServerManager.create(this._methodManager, this.getServerConfig());\n\n\t\t\t\tif (process.env.WORKER_INDEX === '0') {\n\t\t\t\t\tthis._cronManager = CronManager.create();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.log('Running as a Server instance', process.env.NODE_APP_INSTANCE);\n\t\t\t\tthis._websocketManager = WebSocketManager.create(this);\n\t\t\t\tthis._methodManager = MethodManager.create(this._websocketManager, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n\t\t\t\tthis._workerDispatcherManager = WorkerDispatcherManager.create(this._websocketManager, this._methodManager);\n\t\t\t\tthis._subscriptionManager = SubscriptionManager.create(this._serverWSS, ResolveIOServer.getServerConfig(), this._monitorManagerFunction);\n\t\t\t\tthis.startServerInstance();\n\t\t\t\tthis.listen();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tconsole.log('Running with Workers Disabled', process.env.NODE_APP_INSTANCE);\n\t\t\tthis._websocketManager = WebSocketManager.create(this);\n\t\t\tthis._methodManager = MethodManager.create(this._websocketManager, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n\t\t\tthis._subscriptionManager = SubscriptionManager.create(this._serverWSS, ResolveIOServer.getServerConfig(), this._monitorManagerFunction);\n\t\t\tthis._cronManager = CronManager.create();\n\t\t\tthis.startServerInstance();\n\t\t\tthis.listen();\n\t\t}\n\t}\n\n\tprivate async shutdownNetworkServers() {\n\t\tawait this.closeWebSocketServerGracefully();\n\t\tawait this.closeHttpServerGracefully();\n\t}\n\n\tprivate async closeHttpServerGracefully() {\n\t\tif (!this._serverHTTP) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._httpServerClosePromise !== null) {\n\t\t\tawait this._httpServerClosePromise;\n\t\t\treturn;\n\t\t}\n\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\tthis._httpServerClosePromise = new Promise(resolve => {\n\t\t\ttry {\n\t\t\t\tthis._serverHTTP.close(error => {\n\t\t\t\t\tif (error && error['code'] !== 'ERR_SERVER_NOT_RUNNING') {\n\t\t\t\t\t\tconsole.error(new Date(), 'Error closing HTTP server before shutdown', error);\n\t\t\t\t\t}\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tif (error && error['code'] !== 'ERR_SERVER_NOT_RUNNING') {\n\t\t\t\t\tconsole.error(new Date(), 'Error closing HTTP server before shutdown', error);\n\t\t\t\t}\n\t\t\t\tresolve();\n\t\t\t}\n\t\t});\n\n\t\tawait this._httpServerClosePromise;\n\t}\n\n\tprivate async closeWebSocketServerGracefully() {\n\t\tif (!this._serverWSS) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._websocketServerClosePromise !== null) {\n\t\t\tawait this._websocketServerClosePromise;\n\t\t\treturn;\n\t\t}\n\n\t\tthis._serverWSS.clients.forEach(ws => {\n\t\t\ttry {\n\t\t\t\tws.close(1001, 'Server restarting');\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.error(new Date(), 'Error closing WebSocket client before shutdown', error);\n\t\t\t}\n\t\t});\n\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\tthis._websocketServerClosePromise = new Promise(resolve => {\n\t\t\ttry {\n\t\t\t\tthis._serverWSS.close(error => {\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\tconsole.error(new Date(), 'Error closing WebSocket server before shutdown', error);\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.error(new Date(), 'Error closing WebSocket server before shutdown', error);\n\t\t\t\tresolve();\n\t\t\t}\n\t\t});\n\n\t\tawait this._websocketServerClosePromise;\n\t}\n\n\tprivate startServerInstance() {\n\t\t// Start express app\n\t\tthis._app = express();\n\n\t\t// Use built-in express JSON parser\n\t\tthis._app.use(express.json({\n\t\t\tlimit: '50mb',\n\t\t\treviver: dateReviver // Note: 'reviver' is an option for JSON.parse, which can be passed here\n\t\t}));\n\n\t\t// Use built-in express URL-encoded parser\n\t\tthis._app.use(express.urlencoded({\n\t\t\tlimit: '50mb',\n\t\t\textended: true, // `extended` must be explicitly true or false\n\t\t\tparameterLimit: 1000000\n\t\t}));\n\n\n\t\tthis._app.use(xmlParser());\n\t\t\n\t\t// Set port\n\t\tthis._portHTTP = process.env.NODE_APP_INSTANCE ? parseInt('808' + process.env.NODE_APP_INSTANCE) : 8080;\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup ports');\n\t\t}\n\n\t\t// Create http server and websock server\n\t\tthis.createServer();\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Create server');\n\t\t}\n\n\t\t// Set CORS\n\t\tthis._app.use(function (req, res, next) {\n\t\t\tres.setHeader('Access-Control-Allow-Origin', '*');\n\t\t\tres.setHeader('Access-Control-Allow-Methods', 'GET, POST');\n\t\t\tres.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');\n\t\t\tres.setHeader('Access-Control-Allow-Credentials', 'false');\n\t\t\tnext();\n\t\t});\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup cors');\n\t\t}\n\n\t\t// Set up http login route\n\t\tsetupAuthRoutes(this, this._app, ResolveIOServer.getServerConfig());\n\t\tsetupHealthRoutes(this._app);\n\t\tsetupSlowQueryPublicationRoutes(this._app);\n\n\t\tif (ResolveIOServer.getServerConfig()['CLIENT_NAME'] === 'ResolveIO' || this.publicProgram) {\n\t\t\tsetupHomeRoutes(this, this._app, ResolveIOServer.getServerConfig());\n\t\t}\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup express routes');\n\t\t}\n\t}\n\n\tprivate async safeShutdown() {\n\t\tif (!this._safeShutdown) {\n\t\t\tconsole.log(new Date(), 'Safe Shutdown Command Received');\n\t\t}\n\n\t\tif (\n\t\t\t!this._monitorManagerFunction.getActiveMonitorFunctions().length\n\t\t\t&& !this._offlineUpdates.length && (!this._workerDispatcherManager || this._workerDispatcherManager.isSafeShutdown())\n\t\t) {\n\t\t\tif (ResolveIOServer.getMongoConnection()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait ResolveIOServer.getMongoConnection().close(false);\n\t\t\t\t\tconsole.log(new Date(), 'Safe Exit Complete, Process Exit');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\t\t\t\tcatch { \n\t\t\t\t\tprocess.exit(1); \n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (!this._safeShutdown) {\n\t\t\t\tthis._safeShutdown = true;\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis._safeShutdown = false;\n\t\t\t\t}, 1000);\n\n\t\t\t\tconsole.log(new Date(), 'Safe Exit In Progress', \n\t\t\t\t\tthis._monitorManagerFunction.getActiveMonitorFunctions().length,\n\t\t\t\t\tthis._offlineUpdates.length\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tsetImmediate(async () => {\n\t\t\t\tawait this.safeShutdown();\n\t\t\t});\n\t\t}\n\t}\n\n\tgetIsWorkersEnabled() {\n\t\treturn this._isWorkersEnabled;\n\t}\n\n\tgetIsWorkerInstance() {\n\t\treturn this._isWorkerInstance;\n\t}\n\n\tpublic getWSList() {\n\t\tlet res = [];\n\t\tthis._serverWSS.clients.forEach((ws: WebSocket) => {\n\t\t\tres.push(ws['id_socket']);\n\t\t});\n\t\treturn res;\n\t}\n\n\tpublic getWSUserList() {\n\t\tlet res = [];\n\t\tthis._serverWSS.clients.forEach((ws: WebSocket) => {\n\t\t\tres.push(ws['id_user']);\n\t\t});\n\t\treturn res;\n\t}\n\n\tpublic getHTTPServer() {\n\t\treturn this._serverHTTP;\n\t}\n\n\tpublic getCronManager() {\n\t\treturn this._cronManager;\n\t}\n\n\tprivate async reportServerError(\n\t\tsubject: string,\n\t\tcorrelationId: string,\n\t\tcontext: Record<string, any>,\n\t\tmeta?: Record<string, any>,\n\t\tseverity = 'error',\n\t\tstackOverride?: string\n\t) {\n\t\tconst config = ResolveIOServer.getServerConfig();\n\t\tconst metadata = Object.assign({}, meta || {});\n\t\tif (correlationId && !metadata.correlationId) {\n\t\t\tmetadata.correlationId = correlationId;\n\t\t}\n\n\t\tawait ErrorReporter.report({\n\t\t\tsourceApp: 'server-app',\n\t\t\tmessage: subject,\n\t\t\tenvironment: config?.ROOT_URL || process.env.NODE_ENV || 'unknown',\n\t\t\tclientSlug: ResolveIOServer.getClientName(),\n\t\t\tclientName: config?.CLIENT_NAME,\n\t\t\tseverity,\n\t\t\tstack: stackOverride || (typeof context?.stack === 'string' ? context.stack : undefined),\n\t\t\tcontext,\n\t\t\tmetadata,\n\t\t\tcorrelationId\n\t\t});\n\t}\n\n\tpublic getMethodManager() {\n\t\treturn this._methodManager;\n\t}\n\n\tpublic getSubscriptionManager() {\n\t\treturn this._subscriptionManager;\n\t}\n\n\tpublic getMonitorManager() {\n\t\treturn this._monitorManager;\n\t}\n\n\tpublic getRebootFlag() {\n\t\treturn this._rebootFlag;\n\t}\n\n\tpublic getWebSocketManager(): WebSocketManager {\n\t\treturn this._websocketManager;\n\t}\n\n\tprivate createServer(): void {\n\t\tthis._serverHTTP = createServer(this._app);\n\t\tthis._serverHTTP.keepAliveTimeout = 65000;\n\t\tthis._serverHTTP.headersTimeout = 66000;\n\n\t\tthis._serverWSS = new WebSocket.Server({\n\t\t\tserver: this._serverHTTP,\n\t\t\tverifyClient: this.publicProgram ? null : (info, cb) => {\n\t\t\t\tif (this._rebootFlag) {\n\t\t\t\t\tcb(false, 409, 'Unable To Process');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\t\t\t\tconsole.log('Verify Client', info, cb);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If it's a worker, we might skip token checks or do a simple check:\n\t\t\t\t\tif (info.req.url && info.req.url.includes('workerToken=')) {\n\t\t\t\t\t\tlet requestUrl: URL;\n\t\t\t\t\t\tlet rootUrl = ResolveIOServer.getServerConfig()['ROOT_URL'] || 'http://localhost';\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequestUrl = new URL(info.req.url, rootUrl);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch {\n\t\t\t\t\t\t\tcb(false, 400, 'Bad Request');\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet workerToken = requestUrl.searchParams.get('workerToken') || '';\n\t\t\t\t\t\tlet workerIndex = requestUrl.searchParams.get('workerIndex');\n\t\t\t\t\t\tlet workerInstance = requestUrl.searchParams.get('workerInstance');\n\n\t\t\t\t\t\tif (workerToken === ResolveIOServer.getServerConfig()['WORKER_TOKEN']) {\n\t\t\t\t\t\t\tif (workerIndex) {\n\t\t\t\t\t\t\t\tinfo.req['workerIndex'] = workerIndex;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (workerInstance) {\n\t\t\t\t\t\t\t\tinfo.req['workerInstance'] = workerInstance;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcb(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet infoData = (<string>info.req.headers['sec-websocket-protocol']).split(/,/);\n\n\t\t\t\t\tif (!isAllowedOrigin(info.origin, ResolveIOServer.getServerConfig())) {\n\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet token = infoData[0];\n\t\t\t\t\t\tif (!token) {\n\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tjwt.verify(token, ResolveIOServer.getServerConfig()['JWT_SECRET'], async (err, decoded) => {\n\t\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tinfo.req['id_user'] = decoded['id_user'];\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tlet user = await Users.findById(decoded['id_user']);\n\t\t\t\t\t\t\t\t\t\tif (user) {\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['user'] = user.fullname;\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['user_readonly'] = user.readonly || false;\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['doc_user'] = user;\n\t\t\t\t\t\t\t\t\t\t\tcb(true);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tcb(false);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcatch {\n\t\t\t\t\t\t\t\t\t\tcb(false);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Listen for connections from clients or workers.\n\t */\n\tprivate listen(): void {\n\t\tconst host = process.env.RESOLVEIO_BIND_HOST || '127.0.0.1';\n\t\tthis._serverHTTP.listen(this._portHTTP, host, () => {\n\t\t\tconsole.log('Running HTTP/WS server on port %s', this._portHTTP);\n\t\t});\n\n\t\t\tthis._serverWSS.on('connection', async (ws, req) => {\n\t\t\t\tif (req.url && req.url.includes('workerToken=')) {\n\t\t\t\t\t// It's a WORKER\n\t\t\t\t\tlet workerId = objectIdHexString();\n\t\t\t\t\tws['id_worker'] = workerId;\n\t\t\t\t\tlet workerIndex = null;\n\t\t\t\t\tlet workerInstance = null;\n\t\t\t\t\tws['supportsBinary'] = true;\n\n\t\t\t\t\tif (req.url) {\n\t\t\t\t\t\tlet rootUrl = ResolveIOServer.getServerConfig()['ROOT_URL'] || 'http://localhost';\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tlet requestUrl = new URL(req.url, rootUrl);\n\t\t\t\t\t\t\tworkerIndex = requestUrl.searchParams.get('workerIndex');\n\t\t\t\t\t\t\tworkerInstance = requestUrl.searchParams.get('workerInstance');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch {\n\t\t\t\t\t\t\tworkerIndex = null;\n\t\t\t\t\t\t\tworkerInstance = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!workerIndex && req['workerIndex']) {\n\t\t\t\t\t\tworkerIndex = req['workerIndex'];\n\t\t\t\t\t}\n\t\t\t\t\tif (!workerInstance && req['workerInstance']) {\n\t\t\t\t\t\tworkerInstance = req['workerInstance'];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (workerIndex !== null && workerIndex !== undefined) {\n\t\t\t\t\t\tws['workerIndex'] = workerIndex;\n\t\t\t\t\t}\n\t\t\t\t\tif (workerInstance !== null && workerInstance !== undefined) {\n\t\t\t\t\t\tws['workerInstance'] = workerInstance;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet workerIndexForLog = ws['workerIndex'] || 'UNKNOWN';\n\t\t\t\t\tlet workerInstanceForLog = ws['workerInstance'] || 'UNKNOWN';\n\t\t\t\t\tconsole.log(new Date(), 'Worker Connected', workerIndexForLog, workerInstanceForLog);\n\n\t\t\t\t\tthis._workerDispatcherManager.addWorker(ws);\n\n\t\t\t\tlet interval = null;\n\t\t\t\tlet lastComm = new Date();\n\t\t\t\tlet missedPongs = 0;\n\t\t\t\tconst heartbeatIntervalMs = 30000;\n\t\t\t\tconst maxMissedPongs = 2;\n\t\t\t\tconst maxSilenceMs = heartbeatIntervalMs * (maxMissedPongs + 1);\n\n\t\t\t\tthis._workerDispatcherManager.sendWorkerPayload(ws, 'ping');\n\t\n\t\t\t\tinterval = setInterval(() => {\n\t\t\t\t\tconst now = Date.now();\n\t\t\t\t\tconst last = lastComm ? lastComm.getTime() : 0;\n\t\t\t\t\tconst silenceMs = last ? now - last : maxSilenceMs + 1;\n\t\t\t\t\tif (silenceMs > maxSilenceMs || missedPongs > maxMissedPongs) {\n\t\t\t\t\t\tthis._workerDispatcherManager.disconnectWorker(ws['id_worker']);\n\t\t\t\t\t\tws.close();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tmissedPongs += 1;\n\t\t\t\t\tthis._workerDispatcherManager.sendWorkerPayload(ws, 'ping');\n\t\t\t\t}, heartbeatIntervalMs);\n\n\t\t\t\t\tws.on('message', (message: WebSocket.RawData) => {\n\t\t\t\t\t\tlastComm = new Date();\n\t\t\t\t\t\tif (typeof message === 'string') {\n\t\t\t\t\t\t\tif (message === 'ping') {\n\t\t\t\t\t\t\t\tthis._workerDispatcherManager.sendWorkerPayload(ws, 'pong');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (message === 'pong') {\n\t\t\t\t\t\t\t\tmissedPongs = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tthis._workerDispatcherManager.handleWorkerMessage(ws['id_worker'], message);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet buffer: Buffer;\n\n\t\t\t\t\t\tif (Buffer.isBuffer(message)) {\n\t\t\t\t\t\t\tbuffer = message;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (Array.isArray(message)) {\n\t\t\t\t\t\t\tconst chunks = message as unknown as ReadonlyArray<Uint8Array>;\n\t\t\t\t\t\t\tbuffer = Buffer.concat(chunks);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (message instanceof ArrayBuffer) {\n\t\t\t\t\t\t\tbuffer = Buffer.from(message);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (ArrayBuffer.isView(message)) {\n\t\t\t\t\t\t\tconst view = message as NodeJS.ArrayBufferView;\n\t\t\t\t\t\t\tbuffer = Buffer.from(view.buffer, view.byteOffset, view.byteLength);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tbuffer = Buffer.from(message as any);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (buffer.length === 4) {\n\t\t\t\t\t\t\tlet heartbeat = buffer.toString('utf8');\n\n\t\t\t\t\t\t\tif (heartbeat === 'ping') {\n\t\t\t\t\t\t\t\tthis._workerDispatcherManager.sendWorkerPayload(ws, 'pong');\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (heartbeat === 'pong') {\n\t\t\t\t\t\t\t\tmissedPongs = 0;\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._workerDispatcherManager.handleWorkerMessage(ws['id_worker'], buffer);\n\t\t\t\t\t});\n\n\t\t\t\tws.on('close', () => {\n\t\t\t\t\tthis._workerDispatcherManager.disconnectWorker(ws['id_worker']);\n\n\t\t\t\t\tconsole.log(new Date(), 'Worker disconnected:', workerId);\n\t\t\t\t\t\n\t\t\t\t\tif (interval) {\n\t\t\t\t\t\tclearInterval(interval);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tws.on('error', (error) => {\n\t\t\t\t\tthis._workerDispatcherManager.disconnectWorker(ws['id_worker']);\n\n\t\t\t\t\tconsole.error('Error on WS Worker', error);\n\t\t\t\t\tws.close();\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Normal client\n\t\t\t\tws['id_socket'] = objectIdHexString();\n\t\t\t\tws['supportsBinary'] = true;\n\t\t\t\tws['id_user'] = req['id_user'];\n\t\t\t\tws['user'] = req['user'];\n\t\t\t\tws['user_readonly'] = req['user_readonly'];\n\t\t\t\tws['doc_user'] = req['doc_user'];\n\n\t\t\t\tthis._websocketManager.addWebSocket(ws);\n\n\t\t\t\tthis.logConnectDebug('WS client connected', {\n\t\t\t\t\tid_socket: ws['id_socket'],\n\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\tuser: ws['user'],\n\t\t\t\t\turl: req?.url,\n\t\t\t\t\tip: req?.socket?.remoteAddress,\n\t\t\t\t\torigin: req?.headers?.origin\n\t\t\t\t});\n\n\t\t\t\tawait this._subscriptionManager.createLoggedInUser(ws['id_socket']);\n\t\t\t\t\n\t\t\t\tsetTimeout(async () => {\n\t\t\t\t\tawait this.triggerClientHeartbeat(ws);\n\t\t\t\t}, this._clientHeartbeatInitialDelayMs);\n\n\t\t\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\t\t\tconsole.log('Connection from user: ' + req['user']);\n\t\t\t\t}\n\t\t\t\n\t\t\t\tws['isAlive'] = true;\n\t\t\t\tws['retryCnt'] = 0;\n\t\t\t\tws.on('pong', () => {\n\t\t\t\t\tws['isAlive'] = true;\n\t\t\t\t\tws['pongTime'] = new Date();\n\t\t\t\t\tif (ws['pingTime']) {\n\t\t\t\t\t\tws['latency'] = moment.duration(moment(ws['pongTime']).diff(ws['pingTime'])).asMilliseconds();\n\t\t\t\t\t\tthis._subscriptionManager.loggedInLatency(ws);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tws.on('message', async (message: WebSocket.RawData) => {\n\t\t\t\t\tthis._debugMsgRecv += 1;\n\t\t\t\t\tlet socketData = [];\n\t\t\t\t\tlet usedBinary = false;\n\t\t\t\t\tlet bufferPayload: Buffer;\n\t\t\t\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (typeof message === 'string') {\n\t\t\t\t\t\t\tif (message === 'ping' || message === 'pong') {\n\t\t\t\t\t\t\t\tsocketData = message;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tsocketData = JSON.parse(message, dateReviver);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (Buffer.isBuffer(message)) {\n\t\t\t\t\t\t\tbufferPayload = message;\n\t\t\t\t\t\t\tlet decodeResult = this.decodeBufferPayload(bufferPayload);\n\t\t\t\t\t\t\tsocketData = decodeResult.data;\n\t\t\t\t\t\t\tusedBinary = decodeResult.usedBinary;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (Array.isArray(message)) {\n\t\t\t\t\t\t\tbufferPayload = Buffer.concat(message as unknown as ReadonlyArray<Uint8Array>);\n\t\t\t\t\t\t\tlet decodeResult = this.decodeBufferPayload(bufferPayload);\n\t\t\t\t\t\t\tsocketData = decodeResult.data;\n\t\t\t\t\t\t\tusedBinary = decodeResult.usedBinary;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (message instanceof ArrayBuffer) {\n\t\t\t\t\t\t\tbufferPayload = Buffer.from(message);\n\t\t\t\t\t\t\tlet decodeResult = this.decodeBufferPayload(bufferPayload);\n\t\t\t\t\t\t\tsocketData = decodeResult.data;\n\t\t\t\t\t\t\tusedBinary = decodeResult.usedBinary;\n\t\t\t\t\t\t}\n\t\t\t\t\telse if (ArrayBuffer.isView(message)) {\n\t\t\t\t\t\tconst view = message as NodeJS.ArrayBufferView;\n\t\t\t\t\t\tbufferPayload = Buffer.from(view.buffer, view.byteOffset, view.byteLength);\n\t\t\t\t\t\tlet decodeResult = this.decodeBufferPayload(bufferPayload);\n\t\t\t\t\t\tsocketData = decodeResult.data;\n\t\t\t\t\t\tusedBinary = decodeResult.usedBinary;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow new Error('Unsupported WebSocket message type: ' + typeof message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch (e) {\n\t\t\t\t\tconsole.log('Error - WS message parse', e);\n\t\t\t\t\tconst correlationId = objectIdHexString();\n\t\t\t\t\tconst context = {\n\t\t\t\t\t\trawBinary: bufferPayload ? bufferPayload.toString('base64') : undefined,\n\t\t\t\t\t\trawMessage: typeof message === 'string' ? message : undefined,\n\t\t\t\t\t\terror: e instanceof Error ? { name: e.name, message: e.message, stack: e.stack } : e\n\t\t\t\t\t};\n\t\t\t\t\tawait this.reportServerError(\n\t\t\t\t\t\t'SERVER - JSON Parse Error - ' + ResolveIOServer.getServerConfig()['CLIENT_NAME'],\n\t\t\t\t\t\tcorrelationId,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t{ context: 'websocket-message-parse' },\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\te instanceof Error ? e.stack : undefined\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t\tif (usedBinary) {\n\t\t\t\t\t\tws['supportsBinary'] = true;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// call our existing processSocketMessage\n\t\t\t\t\tawait this.processSocketMessage(ws, socketData);\n\t\t\t\t})\n\t\t\t\t.on('end', () => {\n\t\t\t\t\tws.close();\n\t\t\t\t})\n\t\t\t\t.on('error', () => {\n\t\t\t\t\tws.close()\n\t\t\t\t})\n\t\t\t\t.on('close', async () => {\n\t\t\t\t\tthis.logConnectDebug('WS client closed', {\n\t\t\t\t\t\tid_socket: ws['id_socket'],\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tuser: ws['user']\n\t\t\t\t\t});\n\t\t\t\t\tawait this.unsubscribeWS(ws);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// Keep alive timer\n\t\tsetInterval(async () => {\n\t\t\tfor (let ws of this._serverWSS.clients) {\n\t\t\t\tif (ws['pingTime'] && Date.now() - ws['pingTime'].getTime() >= this._clientHeartbeatIntervalMs) {\n\t\t\t\t\tif (this.shouldDeferHeartbeat(ws)) {\n\t\t\t\t\t\tws['isAlive'] = true;\n\t\t\t\t\t\tws['retryCnt'] = 0;\n\t\t\t\t\t\tws['pingTime'] = new Date();\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ws['isAlive'] === false) {\n\t\t\t\t\t\tws['retryCnt']++;\n\t\t\t\t\t\tif (ws['retryCnt'] >= 3) {\n\t\t\t\t\t\t\tawait this.unsubscribeWS(ws);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tawait this.triggerClientHeartbeat(ws);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tws['retryCnt'] = 0;\n\t\t\t\t\t\tws['isAlive'] = false;\n\t\t\t\t\t\tawait this.triggerClientHeartbeat(ws);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, this._clientHeartbeatIntervalMs);\n\t}\n\n\tprivate async processSocketMessage(ws: WebSocket, socketData: any) {\n\t\tif (typeof socketData === 'string' && socketData === 'ping') {\n\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\tws.send('pong');\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\telse if (typeof socketData === 'string' && socketData === 'pong') {\n\t\t\tws['isAlive'] = true;\n\t\t\tws['pongTime'] = new Date();\n\t\t\tws['latency'] = moment.duration(moment(ws['pongTime']).diff(ws['pingTime'])).asMilliseconds();\n\t\t\tthis._subscriptionManager.loggedInLatency(ws);\n\t\t\treturn;\n\t\t}\n\n\t\t// If the top level is not an array, let's skip\n\t\tif (!Array.isArray(socketData[0])) {\n\t\t\tconsole.log('Invalid message format (expected array of arrays)', socketData);\n\t\t\tthis.logConnectDebug('Invalid message format', {\n\t\t\t\tid_socket: ws ? ws['id_socket'] : null,\n\t\t\t\tuser: ws ? ws['user'] : null,\n\t\t\t\tpreview: Array.isArray(socketData) ? socketData.slice(0, 3) : socketData\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// Handle each sub-message\n\t\tfor (let message of socketData) {\n\t\t\tawait this.handleClientMessage(ws, message);\n\t\t}\n\t}\n\n\tprivate decodeBufferPayload(buffer: Buffer): { data: any; usedBinary: boolean } {\n\t\tconst textPayload = buffer.toString('utf8');\n\n\t\tif (this.looksLikeTextPayload(textPayload)) {\n\t\t\ttry {\n\t\t\t\treturn { data: this.parseTextFallback(textPayload), usedBinary: false };\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\t// fall through to attempt MessagePack decode\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\treturn { data: unpack(buffer), usedBinary: true };\n\t\t}\n\t\tcatch (binaryErr) {\n\t\t\ttry {\n\t\t\t\treturn { data: this.parseTextFallback(textPayload), usedBinary: false };\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\tthrow binaryErr;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate parseTextFallback(rawMessage: string): any {\n\t\tif (rawMessage === 'ping' || rawMessage === 'pong') {\n\t\t\treturn rawMessage;\n\t\t}\n\n\t\ttry {\n\t\t\treturn JSON.parse(rawMessage, dateReviver);\n\t\t}\n\t\tcatch (err) {\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tprivate looksLikeTextPayload(text: string): boolean {\n\t\tif (!text) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst trimmed = text.trim();\n\t\tif (!trimmed) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst first = trimmed[0];\n\t\treturn first === '[' || first === '{' || first === '\"' || first === 'p' || first === 'P';\n\t}\n\n\tprivate resolveConnectDebug(): boolean {\n\t\tconst config = ResolveIOServer.getServerConfig ? ResolveIOServer.getServerConfig() : null;\n\t\tconst raw = process.env.WS_CONNECT_DEBUG\n\t\t\t?? process.env.CONNECT_DEBUG\n\t\t\t?? config?.['WS_CONNECT_DEBUG']\n\t\t\t?? config?.['CONNECT_DEBUG'];\n\t\treturn this.parseDebugFlag(raw);\n\t}\n\n\tprivate resolvePerfDebug(): boolean {\n\t\tconst config = ResolveIOServer.getServerConfig ? ResolveIOServer.getServerConfig() : null;\n\t\tconst raw = process.env.PERF_DEBUG\n\t\t\t?? process.env.CPU_DEBUG\n\t\t\t?? config?.['PERF_DEBUG']\n\t\t\t?? config?.['CPU_DEBUG'];\n\t\treturn this.parseDebugFlag(raw);\n\t}\n\n\tprivate parsePositiveInt(value: any, fallback: number): number {\n\t\tconst parsed = parseInt(value ?? '', 10);\n\t\tif (Number.isNaN(parsed) || parsed <= 0) {\n\t\t\treturn fallback;\n\t\t}\n\t\treturn parsed;\n\t}\n\n\tprivate startPerfDebug(): void {\n\t\tif (!this._perfDebug || this._perfDebugTimer) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._perfDebugIntervalMs = this.parsePositiveInt(\n\t\t\tprocess.env.PERF_DEBUG_INTERVAL_MS ?? process.env.CPU_DEBUG_INTERVAL_MS,\n\t\t\tthis._perfDebugIntervalMs\n\t\t);\n\n\t\tthis._perfDebugLastCpu = process.cpuUsage();\n\t\tthis._perfDebugLastTs = Date.now();\n\t\tthis._eventLoopHistogram = monitorEventLoopDelay({ resolution: 20 });\n\t\tthis._eventLoopHistogram.enable();\n\n\t\tthis._perfDebugTimer = setInterval(() => {\n\t\t\tconst now = Date.now();\n\t\t\tconst elapsedMs = now - this._perfDebugLastTs;\n\t\t\tconst cpuDiff = this._perfDebugLastCpu ? process.cpuUsage(this._perfDebugLastCpu) : process.cpuUsage();\n\t\t\tconst cpuMs = (cpuDiff.user + cpuDiff.system) / 1000;\n\t\t\tconst cpuPct = elapsedMs > 0 ? (cpuMs / elapsedMs) * 100 : 0;\n\n\t\t\tconst mem = process.memoryUsage();\n\t\t\tconst heapUsedMb = round((mem.heapUsed / 1024 / 1024) * 10) / 10;\n\t\t\tconst rssMb = round((mem.rss / 1024 / 1024) * 10) / 10;\n\n\t\t\tconst handles = typeof (process as any)._getActiveHandles === 'function'\n\t\t\t\t? (process as any)._getActiveHandles().length\n\t\t\t\t: null;\n\t\t\tconst requests = typeof (process as any)._getActiveRequests === 'function'\n\t\t\t\t? (process as any)._getActiveRequests().length\n\t\t\t\t: null;\n\n\t\t\tconst histogram = this._eventLoopHistogram;\n\t\t\tconst eventLoop = histogram ? {\n\t\t\t\tmeanMs: round((histogram.mean / 1e6) * 100) / 100,\n\t\t\t\tp50Ms: round((histogram.percentile(50) / 1e6) * 100) / 100,\n\t\t\t\tp95Ms: round((histogram.percentile(95) / 1e6) * 100) / 100,\n\t\t\t\tp99Ms: round((histogram.percentile(99) / 1e6) * 100) / 100,\n\t\t\t\tmaxMs: round((histogram.max / 1e6) * 100) / 100\n\t\t\t} : null;\n\t\t\thistogram?.reset();\n\n\t\t\tconsole.log(new Date(), '[Perf Debug]', JSON.stringify({\n\t\t\t\tcpuPct: round(cpuPct * 10) / 10,\n\t\t\t\tcpuMs: round(cpuMs),\n\t\t\t\telapsedMs,\n\t\t\t\teventLoop,\n\t\t\t\theapUsedMb,\n\t\t\t\trssMb,\n\t\t\t\tactiveHandles: handles,\n\t\t\t\tactiveRequests: requests,\n\t\t\t\tmsgRecv: this._debugMsgRecv,\n\t\t\t\tmsgQueue: this._debugMsgQueue\n\t\t\t}));\n\n\t\t\tthis._perfDebugLastCpu = process.cpuUsage();\n\t\t\tthis._perfDebugLastTs = now;\n\t\t}, this._perfDebugIntervalMs);\n\t}\n\n\tprivate parseDebugFlag(value: any): boolean {\n\t\tif (value === true) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (value === false || value === null || value === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (typeof value === 'number') {\n\t\t\treturn value === 1;\n\t\t}\n\n\t\tif (typeof value === 'string') {\n\t\t\tconst normalized = value.trim().toLowerCase();\n\t\t\treturn ['1', 'true', 'yes', 'y', 'on'].includes(normalized);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate logConnectDebug(message: string, details?: Record<string, unknown>): void {\n\t\tif (!this._wsConnectDebug) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (details) {\n\t\t\tconsole.log(new Date(), '[Connect Debug]', message, JSON.stringify(details));\n\t\t}\n\t\telse {\n\t\t\tconsole.log(new Date(), '[Connect Debug]', message);\n\t\t}\n\t}\n\n\tprivate async triggerClientHeartbeat(ws: WebSocket): Promise<void> {\n\t\tif (!ws || ws.readyState !== ws.OPEN) {\n\t\t\treturn;\n\t\t}\n\n\t\tws['pingTime'] = new Date();\n\n\t\ttry {\n\t\t\tif (typeof ws.ping === 'function') {\n\t\t\t\tws.ping();\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tif (this._methodManager?.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Server App', 'Error WS Ping Frame', err);\n\t\t\t}\n\t\t\tawait this.unsubscribeWS(ws);\n\t\t\treturn;\n\t\t}\n\n\t\tws.send('ping', async (error) => {\n\t\t\tif (error) {\n\t\t\t\tif (this._methodManager?.getEnableDebug()) {\n\t\t\t\t\tconsole.log(new Date(), 'Server App', 'Error WS Ping');\n\t\t\t\t}\n\t\t\t\tawait this.unsubscribeWS(ws);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate shouldDeferHeartbeat(ws: WebSocket): boolean {\n\t\tif (!ws || ws.readyState !== ws.OPEN) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst bufferedAmount = typeof ws.bufferedAmount === 'number' ? ws.bufferedAmount : 0;\n\t\treturn bufferedAmount >= this._clientHeartbeatBackpressureBytes;\n\t}\n\n\tprivate async handleClientMessage(ws: WebSocket, msg: any[]): Promise<void> {\n\t\t// This is basically your old logic from processSocketMessage,\n\t\t// but we'll insert our worker-queue logic for \"method\" calls.\n\t\ttry {\n\t\t\tlet messageRoute = msg[0];\n\t\t\tlet messageDate = msg[1];\n\t\t\tlet messageId = msg[2];\n\t\t\tlet type = msg[3];\n\n\t\t\tif (!this.publicProgram && this._clientRoutes.some(a => messageRoute.includes(a)) && !ws['doc_user'].roles.groups.some(a => a.views.some(b => messageRoute.includes(b) || b.includes(messageRoute))) && !ws['doc_user'].roles.super_admin) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type === 'subscription') {\n\t\t\t\tlet subType = msg[4];\n\t\t\t\tlet pub = msg[5];\n\t\t\t\tthis.logConnectDebug('Subscription message', {\n\t\t\t\t\tsubType,\n\t\t\t\t\tpublication: pub,\n\t\t\t\t\tmessageId,\n\t\t\t\t\tmessageRoute,\n\t\t\t\t\targs: Math.max(0, msg.length - 6),\n\t\t\t\t\tid_socket: ws ? ws['id_socket'] : null,\n\t\t\t\t\tuser: ws ? ws['user'] : null\n\t\t\t\t});\n\n\t\t\t\tif (subType === 'sub') {\n\t\t\t\t\tawait this._subscriptionManager.subscribe(messageRoute, messageDate, ws, messageId, pub, msg.slice(6));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._subscriptionManager.unsubscribe(messageRoute, messageDate, ws, messageId, pub, msg.slice(6));\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (!this.publicProgram && type === 'offline') {\n\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\thasError: false,\n\t\t\t\t\tdata: 'ACK'\n\t\t\t\t};\n\n\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\tthis._websocketManager.send(ws, serverRes);\n\t\t\t\t}\n\n\t\t\t\tthis._offlineUpdates.push(ws);\n\t\t\t\tlet offlineUpdates = msg[4];\n\n\t\t\t\tfor (let i = 0; i < offlineUpdates.length; i++) {\n\t\t\t\t\tlet update = offlineUpdates[i];\n\n\t\t\t\t\tlet data = update.data;\n\n\t\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\t\tlet updateRoute = data.shift();\n\t\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\t\tlet updateDate = data.shift();\n\t\t\t\t\tlet updateMessageId = data.shift();\n\t\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\t\tlet updateType = data.shift();\n\t\t\t\t\tlet method = data.shift();\n\n\t\t\t\t\tlet serverResMethod: ServerResponseModel = {\n\t\t\t\t\t\tmessageId: updateMessageId,\n\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\tdata: 'ACK'\n\t\t\t\t\t};\n\n\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\tthis._websocketManager.send(ws, serverResMethod);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (method === 'insertDocument' && data[0] === 'driver-gps') {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (method !== 'reportBuilderGetResults' && method !== 'reportBuilderGetDistinctValue' && method !== 'reportBuilderBuildTree' && method !== 'generatePDF' && method !== 'getWOOfflineData' && method !== 'countQuery' && method !== 'countWithQuery' && method !== 'countCollectionWithQuery' && method !== 'find' && method !== 'findOne' && method !== 'findWithOptions' && method !== 'getDrivers' && method !== 'processAirdropDistribution' && method !== 'qbHandleResponse') {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([data])) < 1000000 ? JSON.stringify([data], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\t\t\troute: messageRoute,\n\t\t\t\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tawait Logs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([data])) < 1000000 ? JSON.stringify([data], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\t\troute: messageRoute,\n\t\t\t\t\t\t\t\tclient: 'ResolveIO',\n\t\t\t\t\t\t\t\tinstance: 'backend.resolveio.com',\n\t\t\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._methodManager._methods[method]) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait this._methodManager.callMethod.call(Object.assign({}, this._methodManager, MethodManager.prototype, {id_user: ws['id_user'], user: ws['user'], id_ws: ws['id_socket']}), method, ...data);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t\tconsole.log(new Date(), 'Offline Error', JSON.stringify(err, null, 2));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (method === 'updateDocumentOffline' || method === 'updateDocumentPropsOffline') {\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(data[0]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tconsole.log('Offline - Could not find method: ' + method);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis._offlineUpdates.splice(this._offlineUpdates.map(a => a['id_socket']).indexOf(ws['id_socket']), 1);\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// It's presumably a 'method' or something else\n\t\t\t\tlet dataCopy = [...msg];\n\n\t\t\t\tdataCopy.shift();\n\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\tlet date = dataCopy.shift();\n\t\t\t\tlet msgId = dataCopy.shift();\n\t\t\t\tlet msgType = dataCopy.shift();\n\t\t\t\t\n\t\t\t\tif (msgType === 'method') {\n\t\t\t\t\tlet methodName = dataCopy.shift();\n\n\t\t\t\t\tif (ws['user_readonly']) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (methodName !== 'reportBuilderGetResults' && methodName !== 'reportBuilderGetDistinctValue' && methodName !== 'reportBuilderBuildTree' && methodName !== 'generatePDF' && methodName !== 'getWOOfflineData' && methodName !== 'countQuery' && methodName !== 'countWithQuery' && methodName !== 'countCollectionWithQuery' && methodName !== 'find' && methodName !== 'findOne' && methodName !== 'findWithOptions' && methodName !== 'getDrivers' && methodName !== 'processAirdropDistribution') {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([dataCopy])) < 1000000 ? JSON.stringify([dataCopy], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: methodName,\n\t\t\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\t\t\troute: messageRoute,\n\t\t\t\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tawait Logs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([dataCopy])) < 1000000 ? JSON.stringify([dataCopy], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: methodName,\n\t\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\t\troute: messageRoute,\n\t\t\t\t\t\t\t\tclient: 'ResolveIO',\n\t\t\t\t\t\t\t\tinstance: 'backend.resolveio.com',\n\t\t\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Immediately ACK\n\t\t\t\t\tlet ack: ServerResponseModel = {\n\t\t\t\t\t\tmessageId: msgId,\n\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\tdata: 'ACK'\n\t\t\t\t\t};\n\n\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\tthis._websocketManager.send(ws, ack);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet method = this._methodManager.getMethod(methodName);\n\t\t\t\t\tconst forceWorker = this._isWorkersEnabled && !!method?.forceWorker;\n\t\t\t\t\tconst targetWorkerIndex = this._isWorkersEnabled && method ? method.targetWorkerIndex : null;\n\t\t\t\t\tconst hasWorkerForMethod = this._workerDispatcherManager ? this._workerDispatcherManager.hasWorkersForMethod(methodName) : false;\n\t\t\t\t\tconst isExcludedFromWorker = (\n\t\t\t\t\t\tmethodName === 'find' ||\n\t\t\t\t\t\tmethodName === 'insertDocument' ||\n\t\t\t\t\t\tmethodName === 'countWithQuery' ||\n\t\t\t\t\t\tmethodName === 'findOne' ||\n\t\t\t\t\t\tmethodName === 'updateDocumentProps' ||\n\t\t\t\t\t\tmethodName === 'findWithOptions' ||\n\t\t\t\t\t\tmethodName === 'updateDocument' ||\n\t\t\t\t\t\tmethodName === 'insertErrorLog' ||\n\t\t\t\t\t\tmethodName === 'removeDocument' ||\n\t\t\t\t\t\tmethodName === 'supportCreateBillingUser' ||\n\t\t\t\t\t\tmethodName === 'getSignedUrl' ||\n\t\t\t\t\t\tmethodName === 'getSignedUrls' ||\n\t\t\t\t\t\tmethodName === 'getSignedUrlWithId' ||\n\t\t\t\t\t\tmethodName === 'incorrectUser' ||\n\t\t\t\t\t\tmethodName === 'reloadWS' ||\n\t\t\t\t\t\tmethodName === 'reconnectWS' ||\n\t\t\t\t\t\tmethodName === 'disconnectWS'\n\t\t\t\t\t);\n\n\t\t\t\t\tif (targetWorkerIndex && this._isWorkersEnabled && !hasWorkerForMethod) {\n\t\t\t\t\t\tconst errorRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: msgId,\n\t\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\t\tdata: `Target worker ${targetWorkerIndex} not available for method ${methodName}`\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tthis._websocketManager.send(ws, errorRes);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst shouldDispatchToWorker = (\n\t\t\t\t\t\tmethod &&\n\t\t\t\t\t\t!method.skipWorker &&\n\t\t\t\t\t\tthis._isWorkersEnabled &&\n\t\t\t\t\t\tthis._workerDispatcherManager &&\n\t\t\t\t\t\t(hasWorkerForMethod || forceWorker) &&\n\t\t\t\t\t\t(forceWorker || !isExcludedFromWorker)\n\t\t\t\t\t);\n\n\t\t\t\t\tif (shouldDispatchToWorker) {\n\t\t\t\t\t\tthis._workerDispatcherManager.sendClientTask(msgId, methodName, dataCopy, {\n\t\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\t\tuser: ws['user'],\n\t\t\t\t\t\t\tid_ws: ws['id_socket']\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse if (forceWorker && this._isWorkersEnabled) {\n\t\t\t\t\t\tconst errorRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: msgId,\n\t\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\t\tdata: `Worker dispatch required for method ${methodName}, but no worker dispatcher is available.`\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tthis._websocketManager.send(ws, errorRes);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// No worker available: do method locally\n\t\t\t\t\t\tawait this.callMethodLocally(ws, msgId, methodName, dataCopy);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\t/**\n\t * callMethodLocally is your old approach for invoking the method in-process.\n\t */\n\tprivate async callMethodLocally(ws: WebSocket, messageId: number, method: string, params: any[]) {\n\t\tlet serverRes: ServerResponseModel = {\n\t\t\tmessageId: messageId,\n\t\t\thasError: false,\n\t\t\tdata: null\n\t\t};\n\t\ttry {\n\t\t\t// You can keep your logging code (LogMethodLatencies, Logs.insertOne, etc.)\n\t\t\tlet result = await this._methodManager.callMethod.call(\n\t\t\t\tObject.assign({}, this._methodManager, MethodManager.prototype, {\n\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\tuser: ws['user'],\n\t\t\t\t\tid_ws: ws['id_socket']\n\t\t\t\t}),\n\t\t\t\tmethod,\n\t\t\t\t...params\n\t\t\t);\n\n\t\t\tserverRes.data = result;\n\t\t}\n\t\tcatch (err) {\n\t\t\tserverRes.hasError = true;\n\t\t\tserverRes.data = err || 'Unknown error';\n\t\t}\n\n\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\tthis._websocketManager.send(ws, serverRes);\n\t\t}\n\t}\n\n\t\n\n\t/**\n\t * Cleanly remove a client from the subscription manager, etc.\n\t */\n\tpublic async unsubscribeWS(ws: WebSocket) {\n\t\tif (this._subscriptionManager && this._methodManager.getEnableDebug()) {\n\t\t\tconsole.log(new Date(), 'Server App', 'Unsub WS', ws['user'], ws['id_socket']);\n\t\t}\n\t\tthis.logConnectDebug('WS unsubscribe', {\n\t\t\tid_socket: ws ? ws['id_socket'] : null,\n\t\t\tid_user: ws ? ws['id_user'] : null,\n\t\t\tuser: ws ? ws['user'] : null\n\t\t});\n\t\tawait this._subscriptionManager.unsubscribeAll(ws);\n\t\tws.removeAllListeners();\n\t\tws = null;\n\t}\n\n\tpublic getApp() {\n\t\treturn this._app;\n\t}\n\n\tpublic getServerConfig() {\n\t\treturn ResolveIOServer.getServerConfig();\n\t}\n\n\tpublic getWorkerDispatcherManager() {\n\t\treturn this._workerDispatcherManager;\n\t}\n\n\tpublic getWorkerServerManager() {\n\t\treturn this._workerServerManager;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/server-app.ts"],"names":[],"mappings":"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","file":"server-app.js","sourcesContent":["import * as express from 'express';\nimport * as xmlParser from 'express-xml-bodyparser';\nimport { createServer, Server } from 'http';\nimport * as fs from 'fs';\nimport * as jwt from 'jsonwebtoken';\nimport * as moment from 'moment-timezone';\nimport { unpack } from 'msgpackr';\nimport * as os from 'os';\nimport * as path from 'path';\nimport { monitorEventLoopDelay } from 'perf_hooks';\nimport * as inspector from 'inspector';\nimport { URL } from 'url';\nimport * as WebSocket from 'ws';\n\nimport { Logs } from './collections/log.collection';\nimport { Users } from './collections/user.collection';\nimport { CronManager } from './managers/cron.manager';\nimport { MethodManager } from './managers/method.manager';\nimport { MonitorManager, MonitorManagerFunction } from './managers/monitor.manager';\nimport { SubscriptionManager } from './managers/subscription.manager';\nimport { ServerResponseModel } from './models/server-message.model';\nimport { dateReviver, getBinarySize, isAllowedOrigin, objectIdHexString, round } from './util/common';\nimport { ErrorReporter } from './util/error-reporter';\nimport { ensureErrorWithCorrelation } from './util/error-tracking';\n\nimport { MongoNetworkTimeoutError } from 'mongodb';\nimport { setupAuthRoutes } from './http/auth';\nimport { setupHealthRoutes } from './http/health';\nimport { setupHomeRoutes } from './http/home';\nimport { setupSlowQueryPublicationRoutes } from './http/slow-query-publication';\n\nimport { WebSocketManager } from './managers/websocket.manager';\nimport { WorkerDispatcherManager } from './managers/worker-dispatcher.manager';\nimport { WorkerServerManager } from './managers/worker-server.manager';\nimport { ResolveIOServer } from './resolveio-server-app';\n\nexport class ResolveIOMainServer {\n\tprivate _app: express.Application;\n\tprivate _serverHTTP: Server;\n\tprivate _portHTTP: number;\n\tprivate _serverWSS: WebSocket.Server;\n\tprivate _offlineUpdates = [];\n\tpublic sesMail = false;\n\tprivate publicProgram = false;\n\tprivate _rebootFlag = false;\n\n\tprivate LOGGER = 'ERROR'; //ERROR / DEBUG\n\n\tprivate _websocketManager: WebSocketManager;\n\tprivate _monitorManager: MonitorManager;\n\tprivate _monitorManagerFunction: MonitorManagerFunction;\n\tprivate _subscriptionManager: SubscriptionManager;\n\tprivate _methodManager: MethodManager;\n\tprivate _cronManager: CronManager;\n\tprivate _clientRoutes: string[] = [];\n\tprivate _workerDispatcherManager: WorkerDispatcherManager;\n\tprivate _workerServerManager: WorkerServerManager;\n\tprivate _httpServerClosePromise: Promise<void> | null = null;\n\tprivate _websocketServerClosePromise: Promise<void> | null = null;\n\tprivate _wsConnectDebug = false;\n\tprivate _perfDebug = false;\n\tprivate _perfDebugIntervalMs = 2000;\n\tprivate _perfDebugTimer: NodeJS.Timeout | null = null;\n\tprivate _perfDebugLastCpu: NodeJS.CpuUsage | null = null;\n\tprivate _perfDebugLastTs = 0;\n\tprivate _eventLoopHistogram: ReturnType<typeof monitorEventLoopDelay> | null = null;\n\tprivate _cpuProfileOnStart = false;\n\tprivate _cpuProfileAuto = false;\n\tprivate _cpuProfileDurationMs = 15000;\n\tprivate _cpuProfileThresholdPct = 90;\n\tprivate _cpuProfileTriggerCount = 3;\n\tprivate _cpuProfileHighCount = 0;\n\tprivate _cpuProfileDir: string | null = null;\n\tprivate _cpuProfileSession: inspector.Session | null = null;\n\n\tprivate _serverStartTime: Date;\n\tprivate _lastErrorMsg: Date = null;\n\n\tprivate _debugMsgRecv = 0;\n\tprivate _debugMsgQueue = 0;\n\n\tprivate _isWorkersEnabled = false;\n\tprivate _isWorkerInstance = false;\n\n\tprivate _safeShutdown = false;\n\n\tprivate readonly _clientHeartbeatIntervalMs = 20000;\n\tprivate readonly _clientHeartbeatInitialDelayMs = 5000;\n\tprivate readonly _clientHeartbeatBackpressureBytes = 5 * 1024 * 1024;\n\n\tconstructor() {}\n\n\tstatic async create() {\n\t\tconst resolveioMainServer = new ResolveIOMainServer();\n\t\tawait resolveioMainServer.initialize();\n\t\treturn resolveioMainServer;\n\t}\n\n\tprivate async initialize() {\n\t\tthis._serverStartTime = new Date();\n\t\tthis._lastErrorMsg = null;\n\t\tthis._wsConnectDebug = this.resolveConnectDebug();\n\t\tthis._perfDebug = this.resolvePerfDebug();\n\t\tthis._cpuProfileOnStart = this.resolveCpuProfileOnStart();\n\t\tthis._cpuProfileAuto = this.resolveCpuProfileAuto();\n\t\tthis._cpuProfileDurationMs = this.resolveCpuProfileDurationMs();\n\t\tthis._cpuProfileThresholdPct = this.resolveCpuProfileThresholdPct();\n\t\tthis._cpuProfileTriggerCount = this.resolveCpuProfileTriggerCount();\n\t\tthis._cpuProfileDir = this.resolveCpuProfileDir();\n\t\tthis._monitorManager = await MonitorManager.create();\n\t\tthis._monitorManagerFunction = new MonitorManagerFunction();\n\t\tthis.startPerfDebug();\n\t\tif (this._cpuProfileOnStart) {\n\t\t\tthis.startCpuProfile('on-start');\n\t\t}\n\n\t\t// Check for workers and decide what to start\n\t\tthis._isWorkersEnabled = process.env.IS_WORKERS_ENABLED === 'true';\n\t\tthis._isWorkerInstance = process.env.IS_WORKER_INSTANCE === 'true';\n\n\t\tsetInterval(() => {\n\t\t\tif (this._methodManager && this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Server App', 'Msg Recv Hits', this._debugMsgRecv);\n\t\t\t\tconsole.log(new Date(), 'Server App', 'Msg Queue Hits', this._debugMsgQueue);\n\t\t\t}\n\n\t\t\tthis._debugMsgQueue = 0;\n\t\t\tthis._debugMsgRecv = 0;\n\t\t}, 60000);\n\n\t\tprocess.removeAllListeners('unhandledRejection');\n\n\t\tprocess.on('unhandledRejection', async (error, rej) => {\n\t\t\tconst { error: normalizedError, correlationId } = ensureErrorWithCorrelation(error);\n\n\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.error(new Date(), 'ERROR DETECTED w/ Debug Flag Active: unhandledRejection', [normalizedError, rej, { correlationId }]);\n\t\t\t}\n\n\t\t\t// Condition to filter out the MongoError with specific codes\n\t\t\tif (normalizedError && normalizedError['name'] === 'MongoError' && (normalizedError['code'] === 48 || normalizedError['code'] === 26 || normalizedError['code'] === 11000 || normalizedError['code'] === 251)) {\n\t\t\t\treturn; // Simply return without doing anything further\n\t\t\t}\n\n\t\t\t// if (normalizedError && normalizedError['name'] === 'MongoServerError' && (!initServerFlag || normalizedError['code'] === 26 || normalizedError['code'] === 11000 || normalizedError['code'] === 86 || normalizedError['code'] === 251)) {\n\t\t\t// \treturn; // Simply return without doing anything further\n\t\t\t// }\n\n\t\t\tif (normalizedError && normalizedError['name'] === 'MongoServerError') {\n\t\t\t\treturn; // Simply return without doing anything further\n\t\t\t}\n\n\t\t\tconst errorDetails = {\n\t\t\t\tid: correlationId,\n\t\t\t\tname: normalizedError?.name,\n\t\t\t\tmessage: normalizedError?.message,\n\t\t\t\tstack: normalizedError?.stack,\n\t\t\t\tcode: normalizedError?.code,\n\t\t\t\tcodeName: normalizedError?.codeName\n\t\t\t};\n\n\t\t\tconsole.error(new Date(), 'Unhandled Rejection at Promise', [errorDetails]);\n\t\t\t\n\t\t\tlet diffTimeSec = moment().diff(this._serverStartTime, 'seconds');\n\n\t\t\t// If this is a MongoNetworkTimeoutError, handle it specifically\n\t\t\tif (normalizedError && (normalizedError['name'] === 'MongoNetworkTimeoutError' || normalizedError instanceof MongoNetworkTimeoutError)) {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\t// Exiting the process\n\t\t\t\t\tprocess.exit(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (normalizedError && normalizedError['name'] === 'MongoError' && normalizedError['message'] === 'not master') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\t\t\t\t}\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\telse if (normalizedError && normalizedError['name'] === 'MongoError' && normalizedError['message'] === 'not master and slaveOk=false') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\t\t\t\t}\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\telse if (normalizedError && normalizedError['name'] !== 'StatusError' && normalizedError['message'] !== '') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\tawait this.reportServerError(\n\t\t\t\t\t\t'SERVER - Unhandled Rejection - ' + ResolveIOServer.getServerConfig()['CLIENT_NAME'],\n\t\t\t\t\t\tcorrelationId,\n\t\t\t\t\t\terrorDetails,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontext: 'unhandledRejection',\n\t\t\t\t\t\t\tscenario: 'General'\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tprocess.on('uncaughtException', async error => {\n\t\t\tconst { error: normalizedError, correlationId } = ensureErrorWithCorrelation(error);\n\t\t\tconsole.error(normalizedError, 'Uncaught Exception thrown', { correlationId });\n\n\t\t\tlet diffTimeSec = moment().diff(this._serverStartTime, 'seconds');\n\n\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t}, 60000);\n\t\t\t\t\n\t\t\t\tconst errorDetails = {\n\t\t\t\t\tid: correlationId,\n\t\t\t\t\tname: normalizedError?.name,\n\t\t\t\t\tmessage: normalizedError?.message,\n\t\t\t\t\tstack: normalizedError?.stack,\n\t\t\t\t\tcode: normalizedError?.code,\n\t\t\t\t\tcodeName: normalizedError?.codeName\n\t\t\t\t};\n\n\t\t\t\tawait this.reportServerError(\n\t\t\t\t\t'SERVER - Unhandled Exception - ' + ResolveIOServer.getServerConfig()['CLIENT_NAME'],\n\t\t\t\t\tcorrelationId,\n\t\t\t\t\terrorDetails,\n\t\t\t\t\t{\n\t\t\t\t\t\tcontext: 'uncaughtException'\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\t//PM2 wants to reboot/restart\n\t\tprocess.on('SIGINT', async () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\ttry {\n\t\t\t\tawait this.shutdownNetworkServers();\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.error(new Date(), 'Error closing network servers (SIGINT)', error);\n\t\t\t}\n\t\t\tawait this.safeShutdown();\n\t\t});\n\n\t\tprocess.on('SIGTERM', async () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\ttry {\n\t\t\t\tawait this.shutdownNetworkServers();\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.error(new Date(), 'Error closing network servers (SIGTERM)', error);\n\t\t\t}\n\t\t\tawait this.safeShutdown();\n\t\t});\n\n\t\tprocess.on('SIGQUIT', async () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\ttry {\n\t\t\t\tawait this.shutdownNetworkServers();\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.error(new Date(), 'Error closing network servers (SIGQUIT)', error);\n\t\t\t}\n\t\t\tawait this.safeShutdown();\n\t\t});\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Starting ResolveIO Server');\n\t\t}\n\n\t\tif (this._isWorkersEnabled) {\n\t\t\tif (this._isWorkerInstance) {\n\t\t\t\tconsole.log('Running as a Worker instance', process.env.NODE_APP_INSTANCE);\n\t\t\t\tthis._methodManager = MethodManager.create(null, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n\t\t\t\tthis._subscriptionManager = SubscriptionManager.createPublicationRegistry(ResolveIOServer.getServerConfig());\n\t\t\t\tthis._workerServerManager = WorkerServerManager.create(this._methodManager, this.getServerConfig());\n\n\t\t\t\tif (process.env.WORKER_INDEX === '0') {\n\t\t\t\t\tthis._cronManager = CronManager.create();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.log('Running as a Server instance', process.env.NODE_APP_INSTANCE);\n\t\t\t\tthis._websocketManager = WebSocketManager.create(this);\n\t\t\t\tthis._methodManager = MethodManager.create(this._websocketManager, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n\t\t\t\tthis._workerDispatcherManager = WorkerDispatcherManager.create(this._websocketManager, this._methodManager);\n\t\t\t\tthis._subscriptionManager = SubscriptionManager.create(this._serverWSS, ResolveIOServer.getServerConfig(), this._monitorManagerFunction);\n\t\t\t\tthis.startServerInstance();\n\t\t\t\tthis.listen();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tconsole.log('Running with Workers Disabled', process.env.NODE_APP_INSTANCE);\n\t\t\tthis._websocketManager = WebSocketManager.create(this);\n\t\t\tthis._methodManager = MethodManager.create(this._websocketManager, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n\t\t\tthis._subscriptionManager = SubscriptionManager.create(this._serverWSS, ResolveIOServer.getServerConfig(), this._monitorManagerFunction);\n\t\t\tthis._cronManager = CronManager.create();\n\t\t\tthis.startServerInstance();\n\t\t\tthis.listen();\n\t\t}\n\t}\n\n\tprivate async shutdownNetworkServers() {\n\t\tawait this.closeWebSocketServerGracefully();\n\t\tawait this.closeHttpServerGracefully();\n\t}\n\n\tprivate async closeHttpServerGracefully() {\n\t\tif (!this._serverHTTP) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._httpServerClosePromise !== null) {\n\t\t\tawait this._httpServerClosePromise;\n\t\t\treturn;\n\t\t}\n\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\tthis._httpServerClosePromise = new Promise(resolve => {\n\t\t\ttry {\n\t\t\t\tthis._serverHTTP.close(error => {\n\t\t\t\t\tif (error && error['code'] !== 'ERR_SERVER_NOT_RUNNING') {\n\t\t\t\t\t\tconsole.error(new Date(), 'Error closing HTTP server before shutdown', error);\n\t\t\t\t\t}\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tif (error && error['code'] !== 'ERR_SERVER_NOT_RUNNING') {\n\t\t\t\t\tconsole.error(new Date(), 'Error closing HTTP server before shutdown', error);\n\t\t\t\t}\n\t\t\t\tresolve();\n\t\t\t}\n\t\t});\n\n\t\tawait this._httpServerClosePromise;\n\t}\n\n\tprivate async closeWebSocketServerGracefully() {\n\t\tif (!this._serverWSS) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._websocketServerClosePromise !== null) {\n\t\t\tawait this._websocketServerClosePromise;\n\t\t\treturn;\n\t\t}\n\n\t\tthis._serverWSS.clients.forEach(ws => {\n\t\t\ttry {\n\t\t\t\tws.close(1001, 'Server restarting');\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.error(new Date(), 'Error closing WebSocket client before shutdown', error);\n\t\t\t}\n\t\t});\n\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\tthis._websocketServerClosePromise = new Promise(resolve => {\n\t\t\ttry {\n\t\t\t\tthis._serverWSS.close(error => {\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\tconsole.error(new Date(), 'Error closing WebSocket server before shutdown', error);\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\tconsole.error(new Date(), 'Error closing WebSocket server before shutdown', error);\n\t\t\t\tresolve();\n\t\t\t}\n\t\t});\n\n\t\tawait this._websocketServerClosePromise;\n\t}\n\n\tprivate startServerInstance() {\n\t\t// Start express app\n\t\tthis._app = express();\n\n\t\t// Use built-in express JSON parser\n\t\tthis._app.use(express.json({\n\t\t\tlimit: '50mb',\n\t\t\treviver: dateReviver // Note: 'reviver' is an option for JSON.parse, which can be passed here\n\t\t}));\n\n\t\t// Use built-in express URL-encoded parser\n\t\tthis._app.use(express.urlencoded({\n\t\t\tlimit: '50mb',\n\t\t\textended: true, // `extended` must be explicitly true or false\n\t\t\tparameterLimit: 1000000\n\t\t}));\n\n\n\t\tthis._app.use(xmlParser());\n\t\t\n\t\t// Set port\n\t\tthis._portHTTP = process.env.NODE_APP_INSTANCE ? parseInt('808' + process.env.NODE_APP_INSTANCE) : 8080;\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup ports');\n\t\t}\n\n\t\t// Create http server and websock server\n\t\tthis.createServer();\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Create server');\n\t\t}\n\n\t\t// Set CORS\n\t\tthis._app.use(function (req, res, next) {\n\t\t\tres.setHeader('Access-Control-Allow-Origin', '*');\n\t\t\tres.setHeader('Access-Control-Allow-Methods', 'GET, POST');\n\t\t\tres.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');\n\t\t\tres.setHeader('Access-Control-Allow-Credentials', 'false');\n\t\t\tnext();\n\t\t});\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup cors');\n\t\t}\n\n\t\t// Set up http login route\n\t\tsetupAuthRoutes(this, this._app, ResolveIOServer.getServerConfig());\n\t\tsetupHealthRoutes(this._app);\n\t\tsetupSlowQueryPublicationRoutes(this._app);\n\n\t\tif (ResolveIOServer.getServerConfig()['CLIENT_NAME'] === 'ResolveIO' || this.publicProgram) {\n\t\t\tsetupHomeRoutes(this, this._app, ResolveIOServer.getServerConfig());\n\t\t}\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup express routes');\n\t\t}\n\t}\n\n\tprivate async safeShutdown() {\n\t\tif (!this._safeShutdown) {\n\t\t\tconsole.log(new Date(), 'Safe Shutdown Command Received');\n\t\t}\n\n\t\tif (\n\t\t\t!this._monitorManagerFunction.getActiveMonitorFunctions().length\n\t\t\t&& !this._offlineUpdates.length && (!this._workerDispatcherManager || this._workerDispatcherManager.isSafeShutdown())\n\t\t) {\n\t\t\tif (ResolveIOServer.getMongoConnection()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait ResolveIOServer.getMongoConnection().close(false);\n\t\t\t\t\tconsole.log(new Date(), 'Safe Exit Complete, Process Exit');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\t\t\t\tcatch { \n\t\t\t\t\tprocess.exit(1); \n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (!this._safeShutdown) {\n\t\t\t\tthis._safeShutdown = true;\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis._safeShutdown = false;\n\t\t\t\t}, 1000);\n\n\t\t\t\tconsole.log(new Date(), 'Safe Exit In Progress', \n\t\t\t\t\tthis._monitorManagerFunction.getActiveMonitorFunctions().length,\n\t\t\t\t\tthis._offlineUpdates.length\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tsetImmediate(async () => {\n\t\t\t\tawait this.safeShutdown();\n\t\t\t});\n\t\t}\n\t}\n\n\tgetIsWorkersEnabled() {\n\t\treturn this._isWorkersEnabled;\n\t}\n\n\tgetIsWorkerInstance() {\n\t\treturn this._isWorkerInstance;\n\t}\n\n\tpublic getWSList() {\n\t\tlet res = [];\n\t\tthis._serverWSS.clients.forEach((ws: WebSocket) => {\n\t\t\tres.push(ws['id_socket']);\n\t\t});\n\t\treturn res;\n\t}\n\n\tpublic getWSUserList() {\n\t\tlet res = [];\n\t\tthis._serverWSS.clients.forEach((ws: WebSocket) => {\n\t\t\tres.push(ws['id_user']);\n\t\t});\n\t\treturn res;\n\t}\n\n\tpublic getHTTPServer() {\n\t\treturn this._serverHTTP;\n\t}\n\n\tpublic getCronManager() {\n\t\treturn this._cronManager;\n\t}\n\n\tprivate async reportServerError(\n\t\tsubject: string,\n\t\tcorrelationId: string,\n\t\tcontext: Record<string, any>,\n\t\tmeta?: Record<string, any>,\n\t\tseverity = 'error',\n\t\tstackOverride?: string\n\t) {\n\t\tconst config = ResolveIOServer.getServerConfig();\n\t\tconst metadata = Object.assign({}, meta || {});\n\t\tif (correlationId && !metadata.correlationId) {\n\t\t\tmetadata.correlationId = correlationId;\n\t\t}\n\n\t\tawait ErrorReporter.report({\n\t\t\tsourceApp: 'server-app',\n\t\t\tmessage: subject,\n\t\t\tenvironment: config?.ROOT_URL || process.env.NODE_ENV || 'unknown',\n\t\t\tclientSlug: ResolveIOServer.getClientName(),\n\t\t\tclientName: config?.CLIENT_NAME,\n\t\t\tseverity,\n\t\t\tstack: stackOverride || (typeof context?.stack === 'string' ? context.stack : undefined),\n\t\t\tcontext,\n\t\t\tmetadata,\n\t\t\tcorrelationId\n\t\t});\n\t}\n\n\tpublic getMethodManager() {\n\t\treturn this._methodManager;\n\t}\n\n\tpublic getSubscriptionManager() {\n\t\treturn this._subscriptionManager;\n\t}\n\n\tpublic getMonitorManager() {\n\t\treturn this._monitorManager;\n\t}\n\n\tpublic getRebootFlag() {\n\t\treturn this._rebootFlag;\n\t}\n\n\tpublic getWebSocketManager(): WebSocketManager {\n\t\treturn this._websocketManager;\n\t}\n\n\tprivate createServer(): void {\n\t\tthis._serverHTTP = createServer(this._app);\n\t\tthis._serverHTTP.keepAliveTimeout = 65000;\n\t\tthis._serverHTTP.headersTimeout = 66000;\n\n\t\tthis._serverWSS = new WebSocket.Server({\n\t\t\tserver: this._serverHTTP,\n\t\t\tverifyClient: this.publicProgram ? null : (info, cb) => {\n\t\t\t\tif (this._rebootFlag) {\n\t\t\t\t\tcb(false, 409, 'Unable To Process');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\t\t\t\tconsole.log('Verify Client', info, cb);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If it's a worker, we might skip token checks or do a simple check:\n\t\t\t\t\tif (info.req.url && info.req.url.includes('workerToken=')) {\n\t\t\t\t\t\tlet requestUrl: URL;\n\t\t\t\t\t\tlet rootUrl = ResolveIOServer.getServerConfig()['ROOT_URL'] || 'http://localhost';\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\trequestUrl = new URL(info.req.url, rootUrl);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch {\n\t\t\t\t\t\t\tcb(false, 400, 'Bad Request');\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet workerToken = requestUrl.searchParams.get('workerToken') || '';\n\t\t\t\t\t\tlet workerIndex = requestUrl.searchParams.get('workerIndex');\n\t\t\t\t\t\tlet workerInstance = requestUrl.searchParams.get('workerInstance');\n\n\t\t\t\t\t\tif (workerToken === ResolveIOServer.getServerConfig()['WORKER_TOKEN']) {\n\t\t\t\t\t\t\tif (workerIndex) {\n\t\t\t\t\t\t\t\tinfo.req['workerIndex'] = workerIndex;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (workerInstance) {\n\t\t\t\t\t\t\t\tinfo.req['workerInstance'] = workerInstance;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcb(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet infoData = (<string>info.req.headers['sec-websocket-protocol']).split(/,/);\n\n\t\t\t\t\tif (!isAllowedOrigin(info.origin, ResolveIOServer.getServerConfig())) {\n\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet token = infoData[0];\n\t\t\t\t\t\tif (!token) {\n\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tjwt.verify(token, ResolveIOServer.getServerConfig()['JWT_SECRET'], async (err, decoded) => {\n\t\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tinfo.req['id_user'] = decoded['id_user'];\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tlet user = await Users.findById(decoded['id_user']);\n\t\t\t\t\t\t\t\t\t\tif (user) {\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['user'] = user.fullname;\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['user_readonly'] = user.readonly || false;\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['doc_user'] = user;\n\t\t\t\t\t\t\t\t\t\t\tcb(true);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tcb(false);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcatch {\n\t\t\t\t\t\t\t\t\t\tcb(false);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Listen for connections from clients or workers.\n\t */\n\tprivate listen(): void {\n\t\tconst host = process.env.RESOLVEIO_BIND_HOST || '127.0.0.1';\n\t\tthis._serverHTTP.listen(this._portHTTP, host, () => {\n\t\t\tconsole.log('Running HTTP/WS server on port %s', this._portHTTP);\n\t\t});\n\n\t\t\tthis._serverWSS.on('connection', async (ws, req) => {\n\t\t\t\tif (req.url && req.url.includes('workerToken=')) {\n\t\t\t\t\t// It's a WORKER\n\t\t\t\t\tlet workerId = objectIdHexString();\n\t\t\t\t\tws['id_worker'] = workerId;\n\t\t\t\t\tlet workerIndex = null;\n\t\t\t\t\tlet workerInstance = null;\n\t\t\t\t\tws['supportsBinary'] = true;\n\n\t\t\t\t\tif (req.url) {\n\t\t\t\t\t\tlet rootUrl = ResolveIOServer.getServerConfig()['ROOT_URL'] || 'http://localhost';\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tlet requestUrl = new URL(req.url, rootUrl);\n\t\t\t\t\t\t\tworkerIndex = requestUrl.searchParams.get('workerIndex');\n\t\t\t\t\t\t\tworkerInstance = requestUrl.searchParams.get('workerInstance');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch {\n\t\t\t\t\t\t\tworkerIndex = null;\n\t\t\t\t\t\t\tworkerInstance = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!workerIndex && req['workerIndex']) {\n\t\t\t\t\t\tworkerIndex = req['workerIndex'];\n\t\t\t\t\t}\n\t\t\t\t\tif (!workerInstance && req['workerInstance']) {\n\t\t\t\t\t\tworkerInstance = req['workerInstance'];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (workerIndex !== null && workerIndex !== undefined) {\n\t\t\t\t\t\tws['workerIndex'] = workerIndex;\n\t\t\t\t\t}\n\t\t\t\t\tif (workerInstance !== null && workerInstance !== undefined) {\n\t\t\t\t\t\tws['workerInstance'] = workerInstance;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet workerIndexForLog = ws['workerIndex'] || 'UNKNOWN';\n\t\t\t\t\tlet workerInstanceForLog = ws['workerInstance'] || 'UNKNOWN';\n\t\t\t\t\tconsole.log(new Date(), 'Worker Connected', workerIndexForLog, workerInstanceForLog);\n\n\t\t\t\t\tthis._workerDispatcherManager.addWorker(ws);\n\n\t\t\t\tlet interval = null;\n\t\t\t\tlet lastComm = new Date();\n\t\t\t\tlet missedPongs = 0;\n\t\t\t\tconst heartbeatIntervalMs = 30000;\n\t\t\t\tconst maxMissedPongs = 2;\n\t\t\t\tconst maxSilenceMs = heartbeatIntervalMs * (maxMissedPongs + 1);\n\n\t\t\t\tthis._workerDispatcherManager.sendWorkerPayload(ws, 'ping');\n\t\n\t\t\t\tinterval = setInterval(() => {\n\t\t\t\t\tconst now = Date.now();\n\t\t\t\t\tconst last = lastComm ? lastComm.getTime() : 0;\n\t\t\t\t\tconst silenceMs = last ? now - last : maxSilenceMs + 1;\n\t\t\t\t\tif (silenceMs > maxSilenceMs || missedPongs > maxMissedPongs) {\n\t\t\t\t\t\tthis._workerDispatcherManager.disconnectWorker(ws['id_worker']);\n\t\t\t\t\t\tws.close();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tmissedPongs += 1;\n\t\t\t\t\tthis._workerDispatcherManager.sendWorkerPayload(ws, 'ping');\n\t\t\t\t}, heartbeatIntervalMs);\n\n\t\t\t\t\tws.on('message', (message: WebSocket.RawData) => {\n\t\t\t\t\t\tlastComm = new Date();\n\t\t\t\t\t\tif (typeof message === 'string') {\n\t\t\t\t\t\t\tif (message === 'ping') {\n\t\t\t\t\t\t\t\tthis._workerDispatcherManager.sendWorkerPayload(ws, 'pong');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (message === 'pong') {\n\t\t\t\t\t\t\t\tmissedPongs = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tthis._workerDispatcherManager.handleWorkerMessage(ws['id_worker'], message);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet buffer: Buffer;\n\n\t\t\t\t\t\tif (Buffer.isBuffer(message)) {\n\t\t\t\t\t\t\tbuffer = message;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (Array.isArray(message)) {\n\t\t\t\t\t\t\tconst chunks = message as unknown as ReadonlyArray<Uint8Array>;\n\t\t\t\t\t\t\tbuffer = Buffer.concat(chunks);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (message instanceof ArrayBuffer) {\n\t\t\t\t\t\t\tbuffer = Buffer.from(message);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (ArrayBuffer.isView(message)) {\n\t\t\t\t\t\t\tconst view = message as NodeJS.ArrayBufferView;\n\t\t\t\t\t\t\tbuffer = Buffer.from(view.buffer, view.byteOffset, view.byteLength);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tbuffer = Buffer.from(message as any);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (buffer.length === 4) {\n\t\t\t\t\t\t\tlet heartbeat = buffer.toString('utf8');\n\n\t\t\t\t\t\t\tif (heartbeat === 'ping') {\n\t\t\t\t\t\t\t\tthis._workerDispatcherManager.sendWorkerPayload(ws, 'pong');\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (heartbeat === 'pong') {\n\t\t\t\t\t\t\t\tmissedPongs = 0;\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._workerDispatcherManager.handleWorkerMessage(ws['id_worker'], buffer);\n\t\t\t\t\t});\n\n\t\t\t\tws.on('close', () => {\n\t\t\t\t\tthis._workerDispatcherManager.disconnectWorker(ws['id_worker']);\n\n\t\t\t\t\tconsole.log(new Date(), 'Worker disconnected:', workerId);\n\t\t\t\t\t\n\t\t\t\t\tif (interval) {\n\t\t\t\t\t\tclearInterval(interval);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tws.on('error', (error) => {\n\t\t\t\t\tthis._workerDispatcherManager.disconnectWorker(ws['id_worker']);\n\n\t\t\t\t\tconsole.error('Error on WS Worker', error);\n\t\t\t\t\tws.close();\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Normal client\n\t\t\t\tws['id_socket'] = objectIdHexString();\n\t\t\t\tws['supportsBinary'] = true;\n\t\t\t\tws['id_user'] = req['id_user'];\n\t\t\t\tws['user'] = req['user'];\n\t\t\t\tws['user_readonly'] = req['user_readonly'];\n\t\t\t\tws['doc_user'] = req['doc_user'];\n\n\t\t\t\tthis._websocketManager.addWebSocket(ws);\n\n\t\t\t\tthis.logConnectDebug('WS client connected', {\n\t\t\t\t\tid_socket: ws['id_socket'],\n\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\tuser: ws['user'],\n\t\t\t\t\turl: req?.url,\n\t\t\t\t\tip: req?.socket?.remoteAddress,\n\t\t\t\t\torigin: req?.headers?.origin\n\t\t\t\t});\n\n\t\t\t\tawait this._subscriptionManager.createLoggedInUser(ws['id_socket']);\n\t\t\t\t\n\t\t\t\tsetTimeout(async () => {\n\t\t\t\t\tawait this.triggerClientHeartbeat(ws);\n\t\t\t\t}, this._clientHeartbeatInitialDelayMs);\n\n\t\t\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\t\t\tconsole.log('Connection from user: ' + req['user']);\n\t\t\t\t}\n\t\t\t\n\t\t\t\tws['isAlive'] = true;\n\t\t\t\tws['retryCnt'] = 0;\n\t\t\t\tws.on('pong', () => {\n\t\t\t\t\tws['isAlive'] = true;\n\t\t\t\t\tws['pongTime'] = new Date();\n\t\t\t\t\tif (ws['pingTime']) {\n\t\t\t\t\t\tws['latency'] = moment.duration(moment(ws['pongTime']).diff(ws['pingTime'])).asMilliseconds();\n\t\t\t\t\t\tthis._subscriptionManager.loggedInLatency(ws);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tws.on('message', async (message: WebSocket.RawData) => {\n\t\t\t\t\tthis._debugMsgRecv += 1;\n\t\t\t\t\tlet socketData = [];\n\t\t\t\t\tlet usedBinary = false;\n\t\t\t\t\tlet bufferPayload: Buffer;\n\t\t\t\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (typeof message === 'string') {\n\t\t\t\t\t\t\tif (message === 'ping' || message === 'pong') {\n\t\t\t\t\t\t\t\tsocketData = message;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tsocketData = JSON.parse(message, dateReviver);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (Buffer.isBuffer(message)) {\n\t\t\t\t\t\t\tbufferPayload = message;\n\t\t\t\t\t\t\tlet decodeResult = this.decodeBufferPayload(bufferPayload);\n\t\t\t\t\t\t\tsocketData = decodeResult.data;\n\t\t\t\t\t\t\tusedBinary = decodeResult.usedBinary;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (Array.isArray(message)) {\n\t\t\t\t\t\t\tbufferPayload = Buffer.concat(message as unknown as ReadonlyArray<Uint8Array>);\n\t\t\t\t\t\t\tlet decodeResult = this.decodeBufferPayload(bufferPayload);\n\t\t\t\t\t\t\tsocketData = decodeResult.data;\n\t\t\t\t\t\t\tusedBinary = decodeResult.usedBinary;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (message instanceof ArrayBuffer) {\n\t\t\t\t\t\t\tbufferPayload = Buffer.from(message);\n\t\t\t\t\t\t\tlet decodeResult = this.decodeBufferPayload(bufferPayload);\n\t\t\t\t\t\t\tsocketData = decodeResult.data;\n\t\t\t\t\t\t\tusedBinary = decodeResult.usedBinary;\n\t\t\t\t\t\t}\n\t\t\t\t\telse if (ArrayBuffer.isView(message)) {\n\t\t\t\t\t\tconst view = message as NodeJS.ArrayBufferView;\n\t\t\t\t\t\tbufferPayload = Buffer.from(view.buffer, view.byteOffset, view.byteLength);\n\t\t\t\t\t\tlet decodeResult = this.decodeBufferPayload(bufferPayload);\n\t\t\t\t\t\tsocketData = decodeResult.data;\n\t\t\t\t\t\tusedBinary = decodeResult.usedBinary;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow new Error('Unsupported WebSocket message type: ' + typeof message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch (e) {\n\t\t\t\t\tconsole.log('Error - WS message parse', e);\n\t\t\t\t\tconst correlationId = objectIdHexString();\n\t\t\t\t\tconst context = {\n\t\t\t\t\t\trawBinary: bufferPayload ? bufferPayload.toString('base64') : undefined,\n\t\t\t\t\t\trawMessage: typeof message === 'string' ? message : undefined,\n\t\t\t\t\t\terror: e instanceof Error ? { name: e.name, message: e.message, stack: e.stack } : e\n\t\t\t\t\t};\n\t\t\t\t\tawait this.reportServerError(\n\t\t\t\t\t\t'SERVER - JSON Parse Error - ' + ResolveIOServer.getServerConfig()['CLIENT_NAME'],\n\t\t\t\t\t\tcorrelationId,\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t{ context: 'websocket-message-parse' },\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\te instanceof Error ? e.stack : undefined\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t\tif (usedBinary) {\n\t\t\t\t\t\tws['supportsBinary'] = true;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// call our existing processSocketMessage\n\t\t\t\t\tawait this.processSocketMessage(ws, socketData);\n\t\t\t\t})\n\t\t\t\t.on('end', () => {\n\t\t\t\t\tws.close();\n\t\t\t\t})\n\t\t\t\t.on('error', () => {\n\t\t\t\t\tws.close()\n\t\t\t\t})\n\t\t\t\t.on('close', async () => {\n\t\t\t\t\tthis.logConnectDebug('WS client closed', {\n\t\t\t\t\t\tid_socket: ws['id_socket'],\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tuser: ws['user']\n\t\t\t\t\t});\n\t\t\t\t\tawait this.unsubscribeWS(ws);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// Keep alive timer\n\t\tsetInterval(async () => {\n\t\t\tfor (let ws of this._serverWSS.clients) {\n\t\t\t\tif (ws['pingTime'] && Date.now() - ws['pingTime'].getTime() >= this._clientHeartbeatIntervalMs) {\n\t\t\t\t\tif (this.shouldDeferHeartbeat(ws)) {\n\t\t\t\t\t\tws['isAlive'] = true;\n\t\t\t\t\t\tws['retryCnt'] = 0;\n\t\t\t\t\t\tws['pingTime'] = new Date();\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ws['isAlive'] === false) {\n\t\t\t\t\t\tws['retryCnt']++;\n\t\t\t\t\t\tif (ws['retryCnt'] >= 3) {\n\t\t\t\t\t\t\tawait this.unsubscribeWS(ws);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tawait this.triggerClientHeartbeat(ws);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tws['retryCnt'] = 0;\n\t\t\t\t\t\tws['isAlive'] = false;\n\t\t\t\t\t\tawait this.triggerClientHeartbeat(ws);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, this._clientHeartbeatIntervalMs);\n\t}\n\n\tprivate async processSocketMessage(ws: WebSocket, socketData: any) {\n\t\tif (typeof socketData === 'string' && socketData === 'ping') {\n\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\tws.send('pong');\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\telse if (typeof socketData === 'string' && socketData === 'pong') {\n\t\t\tws['isAlive'] = true;\n\t\t\tws['pongTime'] = new Date();\n\t\t\tws['latency'] = moment.duration(moment(ws['pongTime']).diff(ws['pingTime'])).asMilliseconds();\n\t\t\tthis._subscriptionManager.loggedInLatency(ws);\n\t\t\treturn;\n\t\t}\n\n\t\t// If the top level is not an array, let's skip\n\t\tif (!Array.isArray(socketData[0])) {\n\t\t\tconsole.log('Invalid message format (expected array of arrays)', socketData);\n\t\t\tthis.logConnectDebug('Invalid message format', {\n\t\t\t\tid_socket: ws ? ws['id_socket'] : null,\n\t\t\t\tuser: ws ? ws['user'] : null,\n\t\t\t\tpreview: Array.isArray(socketData) ? socketData.slice(0, 3) : socketData\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// Handle each sub-message\n\t\tfor (let message of socketData) {\n\t\t\tawait this.handleClientMessage(ws, message);\n\t\t}\n\t}\n\n\tprivate decodeBufferPayload(buffer: Buffer): { data: any; usedBinary: boolean } {\n\t\tconst textPayload = buffer.toString('utf8');\n\n\t\tif (this.looksLikeTextPayload(textPayload)) {\n\t\t\ttry {\n\t\t\t\treturn { data: this.parseTextFallback(textPayload), usedBinary: false };\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\t// fall through to attempt MessagePack decode\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\treturn { data: unpack(buffer), usedBinary: true };\n\t\t}\n\t\tcatch (binaryErr) {\n\t\t\ttry {\n\t\t\t\treturn { data: this.parseTextFallback(textPayload), usedBinary: false };\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\tthrow binaryErr;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate parseTextFallback(rawMessage: string): any {\n\t\tif (rawMessage === 'ping' || rawMessage === 'pong') {\n\t\t\treturn rawMessage;\n\t\t}\n\n\t\ttry {\n\t\t\treturn JSON.parse(rawMessage, dateReviver);\n\t\t}\n\t\tcatch (err) {\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tprivate looksLikeTextPayload(text: string): boolean {\n\t\tif (!text) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst trimmed = text.trim();\n\t\tif (!trimmed) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst first = trimmed[0];\n\t\treturn first === '[' || first === '{' || first === '\"' || first === 'p' || first === 'P';\n\t}\n\n\tprivate resolveConnectDebug(): boolean {\n\t\tconst config = ResolveIOServer.getServerConfig ? ResolveIOServer.getServerConfig() : null;\n\t\tconst raw = process.env.WS_CONNECT_DEBUG\n\t\t\t?? process.env.CONNECT_DEBUG\n\t\t\t?? config?.['WS_CONNECT_DEBUG']\n\t\t\t?? config?.['CONNECT_DEBUG'];\n\t\treturn this.parseDebugFlag(raw);\n\t}\n\n\tprivate resolvePerfDebug(): boolean {\n\t\tconst config = ResolveIOServer.getServerConfig ? ResolveIOServer.getServerConfig() : null;\n\t\tconst raw = process.env.PERF_DEBUG\n\t\t\t?? process.env.CPU_DEBUG\n\t\t\t?? config?.['PERF_DEBUG']\n\t\t\t?? config?.['CPU_DEBUG'];\n\t\treturn this.parseDebugFlag(raw);\n\t}\n\n\tprivate resolveCpuProfileOnStart(): boolean {\n\t\tconst config = ResolveIOServer.getServerConfig ? ResolveIOServer.getServerConfig() : null;\n\t\tconst raw = process.env.CPU_PROFILE_ON_START\n\t\t\t?? process.env.CPU_PROFILE_START\n\t\t\t?? config?.['CPU_PROFILE_ON_START']\n\t\t\t?? config?.['CPU_PROFILE_START'];\n\t\treturn this.parseDebugFlag(raw);\n\t}\n\n\tprivate resolveCpuProfileAuto(): boolean {\n\t\tconst config = ResolveIOServer.getServerConfig ? ResolveIOServer.getServerConfig() : null;\n\t\tconst raw = process.env.CPU_PROFILE_AUTO\n\t\t\t?? config?.['CPU_PROFILE_AUTO'];\n\t\treturn this.parseDebugFlag(raw);\n\t}\n\n\tprivate resolveCpuProfileDurationMs(): number {\n\t\tconst config = ResolveIOServer.getServerConfig ? ResolveIOServer.getServerConfig() : null;\n\t\tconst raw = process.env.CPU_PROFILE_DURATION_MS\n\t\t\t?? process.env.PERF_PROFILE_DURATION_MS\n\t\t\t?? config?.['CPU_PROFILE_DURATION_MS']\n\t\t\t?? config?.['PERF_PROFILE_DURATION_MS'];\n\t\treturn this.parsePositiveInt(raw, this._cpuProfileDurationMs);\n\t}\n\n\tprivate resolveCpuProfileThresholdPct(): number {\n\t\tconst config = ResolveIOServer.getServerConfig ? ResolveIOServer.getServerConfig() : null;\n\t\tconst raw = process.env.CPU_PROFILE_THRESHOLD_PCT\n\t\t\t?? process.env.PERF_PROFILE_THRESHOLD_PCT\n\t\t\t?? config?.['CPU_PROFILE_THRESHOLD_PCT']\n\t\t\t?? config?.['PERF_PROFILE_THRESHOLD_PCT'];\n\t\treturn this.parsePositiveFloat(raw, this._cpuProfileThresholdPct);\n\t}\n\n\tprivate resolveCpuProfileTriggerCount(): number {\n\t\tconst config = ResolveIOServer.getServerConfig ? ResolveIOServer.getServerConfig() : null;\n\t\tconst raw = process.env.CPU_PROFILE_TRIGGER_COUNT\n\t\t\t?? config?.['CPU_PROFILE_TRIGGER_COUNT'];\n\t\treturn this.parsePositiveInt(raw, this._cpuProfileTriggerCount);\n\t}\n\n\tprivate resolveCpuProfileDir(): string | null {\n\t\tconst config = ResolveIOServer.getServerConfig ? ResolveIOServer.getServerConfig() : null;\n\t\tconst raw = process.env.CPU_PROFILE_DIR\n\t\t\t?? config?.['CPU_PROFILE_DIR'];\n\t\treturn typeof raw === 'string' && raw.trim() ? raw.trim() : null;\n\t}\n\n\tprivate parsePositiveInt(value: any, fallback: number): number {\n\t\tconst parsed = parseInt(value ?? '', 10);\n\t\tif (Number.isNaN(parsed) || parsed <= 0) {\n\t\t\treturn fallback;\n\t\t}\n\t\treturn parsed;\n\t}\n\n\tprivate parsePositiveFloat(value: any, fallback: number): number {\n\t\tconst parsed = parseFloat(value ?? '');\n\t\tif (Number.isNaN(parsed) || parsed <= 0) {\n\t\t\treturn fallback;\n\t\t}\n\t\treturn parsed;\n\t}\n\n\tprivate startPerfDebug(): void {\n\t\tif (!this._perfDebug || this._perfDebugTimer) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._perfDebugIntervalMs = this.parsePositiveInt(\n\t\t\tprocess.env.PERF_DEBUG_INTERVAL_MS ?? process.env.CPU_DEBUG_INTERVAL_MS,\n\t\t\tthis._perfDebugIntervalMs\n\t\t);\n\n\t\tthis._perfDebugLastCpu = process.cpuUsage();\n\t\tthis._perfDebugLastTs = Date.now();\n\t\tthis._eventLoopHistogram = monitorEventLoopDelay({ resolution: 20 });\n\t\tthis._eventLoopHistogram.enable();\n\n\t\tthis._perfDebugTimer = setInterval(() => {\n\t\t\tconst now = Date.now();\n\t\t\tconst elapsedMs = now - this._perfDebugLastTs;\n\t\t\tconst cpuDiff = this._perfDebugLastCpu ? process.cpuUsage(this._perfDebugLastCpu) : process.cpuUsage();\n\t\t\tconst cpuMs = (cpuDiff.user + cpuDiff.system) / 1000;\n\t\t\tconst cpuPct = elapsedMs > 0 ? (cpuMs / elapsedMs) * 100 : 0;\n\n\t\t\tconst mem = process.memoryUsage();\n\t\t\tconst heapUsedMb = round((mem.heapUsed / 1024 / 1024) * 10) / 10;\n\t\t\tconst rssMb = round((mem.rss / 1024 / 1024) * 10) / 10;\n\n\t\t\tconst handles = typeof (process as any)._getActiveHandles === 'function'\n\t\t\t\t? (process as any)._getActiveHandles().length\n\t\t\t\t: null;\n\t\t\tconst requests = typeof (process as any)._getActiveRequests === 'function'\n\t\t\t\t? (process as any)._getActiveRequests().length\n\t\t\t\t: null;\n\n\t\t\tconst histogram = this._eventLoopHistogram;\n\t\t\tconst eventLoop = histogram ? {\n\t\t\t\tmeanMs: round((histogram.mean / 1e6) * 100) / 100,\n\t\t\t\tp50Ms: round((histogram.percentile(50) / 1e6) * 100) / 100,\n\t\t\t\tp95Ms: round((histogram.percentile(95) / 1e6) * 100) / 100,\n\t\t\t\tp99Ms: round((histogram.percentile(99) / 1e6) * 100) / 100,\n\t\t\t\tmaxMs: round((histogram.max / 1e6) * 100) / 100\n\t\t\t} : null;\n\t\t\thistogram?.reset();\n\n\t\t\tconsole.log(new Date(), '[Perf Debug]', JSON.stringify({\n\t\t\t\tcpuPct: round(cpuPct * 10) / 10,\n\t\t\t\tcpuMs: round(cpuMs),\n\t\t\t\telapsedMs,\n\t\t\t\teventLoop,\n\t\t\t\theapUsedMb,\n\t\t\t\trssMb,\n\t\t\t\tactiveHandles: handles,\n\t\t\t\tactiveRequests: requests,\n\t\t\t\tmsgRecv: this._debugMsgRecv,\n\t\t\t\tmsgQueue: this._debugMsgQueue\n\t\t\t}));\n\n\t\t\tif (this._cpuProfileAuto) {\n\t\t\t\tif (cpuPct >= this._cpuProfileThresholdPct) {\n\t\t\t\t\tthis._cpuProfileHighCount += 1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._cpuProfileHighCount = 0;\n\t\t\t\t}\n\n\t\t\t\tif (this._cpuProfileHighCount >= this._cpuProfileTriggerCount) {\n\t\t\t\t\tthis._cpuProfileHighCount = 0;\n\t\t\t\t\tthis.startCpuProfile('auto-high-cpu');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._perfDebugLastCpu = process.cpuUsage();\n\t\t\tthis._perfDebugLastTs = now;\n\t\t}, this._perfDebugIntervalMs);\n\t}\n\n\tprivate startCpuProfile(trigger: string): void {\n\t\tif (this._cpuProfileSession) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst session = new inspector.Session();\n\t\t\tsession.connect();\n\t\t\tsession.post('Profiler.enable', () => {\n\t\t\t\tsession.post('Profiler.start', () => {\n\t\t\t\t\tthis._cpuProfileSession = session;\n\t\t\t\t\tconsole.log(new Date(), '[Perf Debug]', 'CPU profile started', trigger);\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.stopCpuProfile(trigger);\n\t\t\t\t\t}, this._cpuProfileDurationMs);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\tcatch (error) {\n\t\t\tconsole.error(new Date(), '[Perf Debug]', 'CPU profile start failed', error);\n\t\t}\n\t}\n\n\tprivate stopCpuProfile(trigger: string): void {\n\t\tconst session = this._cpuProfileSession;\n\t\tif (!session) {\n\t\t\treturn;\n\t\t}\n\n\t\tsession.post('Profiler.stop', (err, res: { profile?: unknown }) => {\n\t\t\tif (err) {\n\t\t\t\tconsole.error(new Date(), '[Perf Debug]', 'CPU profile stop failed', err);\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttry {\n\t\t\t\t\tconst dir = this.resolveWritableProfileDir();\n\t\t\t\t\tconst filename = `resolveio-cpuprofile-${process.pid}-${Date.now()}.cpuprofile`;\n\t\t\t\t\tconst filePath = path.join(dir, filename);\n\t\t\t\t\tfs.writeFileSync(filePath, JSON.stringify(res?.profile ?? {}));\n\t\t\t\t\tconsole.log(new Date(), '[Perf Debug]', 'CPU profile saved', filePath, trigger);\n\t\t\t\t}\n\t\t\t\tcatch (writeErr) {\n\t\t\t\t\tconsole.error(new Date(), '[Perf Debug]', 'CPU profile write failed', writeErr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tsession.disconnect();\n\t\t\t}\n\t\t\tcatch {}\n\n\t\t\tthis._cpuProfileSession = null;\n\t\t});\n\t}\n\n\tprivate resolveWritableProfileDir(): string {\n\t\tconst preferred = this._cpuProfileDir;\n\t\tif (preferred) {\n\t\t\ttry {\n\t\t\t\tfs.mkdirSync(preferred, { recursive: true });\n\t\t\t\treturn preferred;\n\t\t\t}\n\t\t\tcatch {}\n\t\t}\n\n\t\treturn os.tmpdir();\n\t}\n\n\tprivate parseDebugFlag(value: any): boolean {\n\t\tif (value === true) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (value === false || value === null || value === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (typeof value === 'number') {\n\t\t\treturn value === 1;\n\t\t}\n\n\t\tif (typeof value === 'string') {\n\t\t\tconst normalized = value.trim().toLowerCase();\n\t\t\treturn ['1', 'true', 'yes', 'y', 'on'].includes(normalized);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate logConnectDebug(message: string, details?: Record<string, unknown>): void {\n\t\tif (!this._wsConnectDebug) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (details) {\n\t\t\tconsole.log(new Date(), '[Connect Debug]', message, JSON.stringify(details));\n\t\t}\n\t\telse {\n\t\t\tconsole.log(new Date(), '[Connect Debug]', message);\n\t\t}\n\t}\n\n\tprivate async triggerClientHeartbeat(ws: WebSocket): Promise<void> {\n\t\tif (!ws || ws.readyState !== ws.OPEN) {\n\t\t\treturn;\n\t\t}\n\n\t\tws['pingTime'] = new Date();\n\n\t\ttry {\n\t\t\tif (typeof ws.ping === 'function') {\n\t\t\t\tws.ping();\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tif (this._methodManager?.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Server App', 'Error WS Ping Frame', err);\n\t\t\t}\n\t\t\tawait this.unsubscribeWS(ws);\n\t\t\treturn;\n\t\t}\n\n\t\tws.send('ping', async (error) => {\n\t\t\tif (error) {\n\t\t\t\tif (this._methodManager?.getEnableDebug()) {\n\t\t\t\t\tconsole.log(new Date(), 'Server App', 'Error WS Ping');\n\t\t\t\t}\n\t\t\t\tawait this.unsubscribeWS(ws);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate shouldDeferHeartbeat(ws: WebSocket): boolean {\n\t\tif (!ws || ws.readyState !== ws.OPEN) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst bufferedAmount = typeof ws.bufferedAmount === 'number' ? ws.bufferedAmount : 0;\n\t\treturn bufferedAmount >= this._clientHeartbeatBackpressureBytes;\n\t}\n\n\tprivate async handleClientMessage(ws: WebSocket, msg: any[]): Promise<void> {\n\t\t// This is basically your old logic from processSocketMessage,\n\t\t// but we'll insert our worker-queue logic for \"method\" calls.\n\t\ttry {\n\t\t\tlet messageRoute = msg[0];\n\t\t\tlet messageDate = msg[1];\n\t\t\tlet messageId = msg[2];\n\t\t\tlet type = msg[3];\n\n\t\t\tif (!this.publicProgram && this._clientRoutes.some(a => messageRoute.includes(a)) && !ws['doc_user'].roles.groups.some(a => a.views.some(b => messageRoute.includes(b) || b.includes(messageRoute))) && !ws['doc_user'].roles.super_admin) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type === 'subscription') {\n\t\t\t\tlet subType = msg[4];\n\t\t\t\tlet pub = msg[5];\n\t\t\t\tthis.logConnectDebug('Subscription message', {\n\t\t\t\t\tsubType,\n\t\t\t\t\tpublication: pub,\n\t\t\t\t\tmessageId,\n\t\t\t\t\tmessageRoute,\n\t\t\t\t\targs: Math.max(0, msg.length - 6),\n\t\t\t\t\tid_socket: ws ? ws['id_socket'] : null,\n\t\t\t\t\tuser: ws ? ws['user'] : null\n\t\t\t\t});\n\n\t\t\t\tif (subType === 'sub') {\n\t\t\t\t\tawait this._subscriptionManager.subscribe(messageRoute, messageDate, ws, messageId, pub, msg.slice(6));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._subscriptionManager.unsubscribe(messageRoute, messageDate, ws, messageId, pub, msg.slice(6));\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (!this.publicProgram && type === 'offline') {\n\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\thasError: false,\n\t\t\t\t\tdata: 'ACK'\n\t\t\t\t};\n\n\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\tthis._websocketManager.send(ws, serverRes);\n\t\t\t\t}\n\n\t\t\t\tthis._offlineUpdates.push(ws);\n\t\t\t\tlet offlineUpdates = msg[4];\n\n\t\t\t\tfor (let i = 0; i < offlineUpdates.length; i++) {\n\t\t\t\t\tlet update = offlineUpdates[i];\n\n\t\t\t\t\tlet data = update.data;\n\n\t\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\t\tlet updateRoute = data.shift();\n\t\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\t\tlet updateDate = data.shift();\n\t\t\t\t\tlet updateMessageId = data.shift();\n\t\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\t\tlet updateType = data.shift();\n\t\t\t\t\tlet method = data.shift();\n\n\t\t\t\t\tlet serverResMethod: ServerResponseModel = {\n\t\t\t\t\t\tmessageId: updateMessageId,\n\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\tdata: 'ACK'\n\t\t\t\t\t};\n\n\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\tthis._websocketManager.send(ws, serverResMethod);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (method === 'insertDocument' && data[0] === 'driver-gps') {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (method !== 'reportBuilderGetResults' && method !== 'reportBuilderGetDistinctValue' && method !== 'reportBuilderBuildTree' && method !== 'generatePDF' && method !== 'getWOOfflineData' && method !== 'countQuery' && method !== 'countWithQuery' && method !== 'countCollectionWithQuery' && method !== 'find' && method !== 'findOne' && method !== 'findWithOptions' && method !== 'getDrivers' && method !== 'processAirdropDistribution' && method !== 'qbHandleResponse') {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([data])) < 1000000 ? JSON.stringify([data], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\t\t\troute: messageRoute,\n\t\t\t\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tawait Logs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([data])) < 1000000 ? JSON.stringify([data], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\t\troute: messageRoute,\n\t\t\t\t\t\t\t\tclient: 'ResolveIO',\n\t\t\t\t\t\t\t\tinstance: 'backend.resolveio.com',\n\t\t\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._methodManager._methods[method]) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait this._methodManager.callMethod.call(Object.assign({}, this._methodManager, MethodManager.prototype, {id_user: ws['id_user'], user: ws['user'], id_ws: ws['id_socket']}), method, ...data);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t\tconsole.log(new Date(), 'Offline Error', JSON.stringify(err, null, 2));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (method === 'updateDocumentOffline' || method === 'updateDocumentPropsOffline') {\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(data[0]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tconsole.log('Offline - Could not find method: ' + method);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis._offlineUpdates.splice(this._offlineUpdates.map(a => a['id_socket']).indexOf(ws['id_socket']), 1);\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// It's presumably a 'method' or something else\n\t\t\t\tlet dataCopy = [...msg];\n\n\t\t\t\tdataCopy.shift();\n\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\tlet date = dataCopy.shift();\n\t\t\t\tlet msgId = dataCopy.shift();\n\t\t\t\tlet msgType = dataCopy.shift();\n\t\t\t\t\n\t\t\t\tif (msgType === 'method') {\n\t\t\t\t\tlet methodName = dataCopy.shift();\n\n\t\t\t\t\tif (ws['user_readonly']) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (methodName !== 'reportBuilderGetResults' && methodName !== 'reportBuilderGetDistinctValue' && methodName !== 'reportBuilderBuildTree' && methodName !== 'generatePDF' && methodName !== 'getWOOfflineData' && methodName !== 'countQuery' && methodName !== 'countWithQuery' && methodName !== 'countCollectionWithQuery' && methodName !== 'find' && methodName !== 'findOne' && methodName !== 'findWithOptions' && methodName !== 'getDrivers' && methodName !== 'processAirdropDistribution') {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([dataCopy])) < 1000000 ? JSON.stringify([dataCopy], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: methodName,\n\t\t\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\t\t\troute: messageRoute,\n\t\t\t\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tawait Logs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([dataCopy])) < 1000000 ? JSON.stringify([dataCopy], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: methodName,\n\t\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\t\troute: messageRoute,\n\t\t\t\t\t\t\t\tclient: 'ResolveIO',\n\t\t\t\t\t\t\t\tinstance: 'backend.resolveio.com',\n\t\t\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Immediately ACK\n\t\t\t\t\tlet ack: ServerResponseModel = {\n\t\t\t\t\t\tmessageId: msgId,\n\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\tdata: 'ACK'\n\t\t\t\t\t};\n\n\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\tthis._websocketManager.send(ws, ack);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet method = this._methodManager.getMethod(methodName);\n\t\t\t\t\tconst forceWorker = this._isWorkersEnabled && !!method?.forceWorker;\n\t\t\t\t\tconst targetWorkerIndex = this._isWorkersEnabled && method ? method.targetWorkerIndex : null;\n\t\t\t\t\tconst hasWorkerForMethod = this._workerDispatcherManager ? this._workerDispatcherManager.hasWorkersForMethod(methodName) : false;\n\t\t\t\t\tconst isExcludedFromWorker = (\n\t\t\t\t\t\tmethodName === 'find' ||\n\t\t\t\t\t\tmethodName === 'insertDocument' ||\n\t\t\t\t\t\tmethodName === 'countWithQuery' ||\n\t\t\t\t\t\tmethodName === 'findOne' ||\n\t\t\t\t\t\tmethodName === 'updateDocumentProps' ||\n\t\t\t\t\t\tmethodName === 'findWithOptions' ||\n\t\t\t\t\t\tmethodName === 'updateDocument' ||\n\t\t\t\t\t\tmethodName === 'insertErrorLog' ||\n\t\t\t\t\t\tmethodName === 'removeDocument' ||\n\t\t\t\t\t\tmethodName === 'supportCreateBillingUser' ||\n\t\t\t\t\t\tmethodName === 'getSignedUrl' ||\n\t\t\t\t\t\tmethodName === 'getSignedUrls' ||\n\t\t\t\t\t\tmethodName === 'getSignedUrlWithId' ||\n\t\t\t\t\t\tmethodName === 'incorrectUser' ||\n\t\t\t\t\t\tmethodName === 'reloadWS' ||\n\t\t\t\t\t\tmethodName === 'reconnectWS' ||\n\t\t\t\t\t\tmethodName === 'disconnectWS'\n\t\t\t\t\t);\n\n\t\t\t\t\tif (targetWorkerIndex && this._isWorkersEnabled && !hasWorkerForMethod) {\n\t\t\t\t\t\tconst errorRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: msgId,\n\t\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\t\tdata: `Target worker ${targetWorkerIndex} not available for method ${methodName}`\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tthis._websocketManager.send(ws, errorRes);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst shouldDispatchToWorker = (\n\t\t\t\t\t\tmethod &&\n\t\t\t\t\t\t!method.skipWorker &&\n\t\t\t\t\t\tthis._isWorkersEnabled &&\n\t\t\t\t\t\tthis._workerDispatcherManager &&\n\t\t\t\t\t\t(hasWorkerForMethod || forceWorker) &&\n\t\t\t\t\t\t(forceWorker || !isExcludedFromWorker)\n\t\t\t\t\t);\n\n\t\t\t\t\tif (shouldDispatchToWorker) {\n\t\t\t\t\t\tthis._workerDispatcherManager.sendClientTask(msgId, methodName, dataCopy, {\n\t\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\t\tuser: ws['user'],\n\t\t\t\t\t\t\tid_ws: ws['id_socket']\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse if (forceWorker && this._isWorkersEnabled) {\n\t\t\t\t\t\tconst errorRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: msgId,\n\t\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\t\tdata: `Worker dispatch required for method ${methodName}, but no worker dispatcher is available.`\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tthis._websocketManager.send(ws, errorRes);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// No worker available: do method locally\n\t\t\t\t\t\tawait this.callMethodLocally(ws, msgId, methodName, dataCopy);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\t/**\n\t * callMethodLocally is your old approach for invoking the method in-process.\n\t */\n\tprivate async callMethodLocally(ws: WebSocket, messageId: number, method: string, params: any[]) {\n\t\tlet serverRes: ServerResponseModel = {\n\t\t\tmessageId: messageId,\n\t\t\thasError: false,\n\t\t\tdata: null\n\t\t};\n\t\ttry {\n\t\t\t// You can keep your logging code (LogMethodLatencies, Logs.insertOne, etc.)\n\t\t\tlet result = await this._methodManager.callMethod.call(\n\t\t\t\tObject.assign({}, this._methodManager, MethodManager.prototype, {\n\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\tuser: ws['user'],\n\t\t\t\t\tid_ws: ws['id_socket']\n\t\t\t\t}),\n\t\t\t\tmethod,\n\t\t\t\t...params\n\t\t\t);\n\n\t\t\tserverRes.data = result;\n\t\t}\n\t\tcatch (err) {\n\t\t\tserverRes.hasError = true;\n\t\t\tserverRes.data = err || 'Unknown error';\n\t\t}\n\n\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\tthis._websocketManager.send(ws, serverRes);\n\t\t}\n\t}\n\n\t\n\n\t/**\n\t * Cleanly remove a client from the subscription manager, etc.\n\t */\n\tpublic async unsubscribeWS(ws: WebSocket) {\n\t\tif (this._subscriptionManager && this._methodManager.getEnableDebug()) {\n\t\t\tconsole.log(new Date(), 'Server App', 'Unsub WS', ws['user'], ws['id_socket']);\n\t\t}\n\t\tthis.logConnectDebug('WS unsubscribe', {\n\t\t\tid_socket: ws ? ws['id_socket'] : null,\n\t\t\tid_user: ws ? ws['id_user'] : null,\n\t\t\tuser: ws ? ws['user'] : null\n\t\t});\n\t\tawait this._subscriptionManager.unsubscribeAll(ws);\n\t\tws.removeAllListeners();\n\t\tws = null;\n\t}\n\n\tpublic getApp() {\n\t\treturn this._app;\n\t}\n\n\tpublic getServerConfig() {\n\t\treturn ResolveIOServer.getServerConfig();\n\t}\n\n\tpublic getWorkerDispatcherManager() {\n\t\treturn this._workerDispatcherManager;\n\t}\n\n\tpublic getWorkerServerManager() {\n\t\treturn this._workerServerManager;\n\t}\n}\n"]}
|