@resolveio/server-lib 20.13.2 → 20.13.4
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/managers/worker-dispatcher.manager.d.ts +4 -0
- package/managers/worker-dispatcher.manager.js +45 -3
- package/managers/worker-dispatcher.manager.js.map +1 -1
- package/models/method.model.d.ts +1 -0
- package/models/method.model.js.map +1 -1
- package/package.json +1 -1
- package/server-app.js +15 -2
- package/server-app.js.map +1 -1
- package/util/subscription-dependency-context.js +3 -0
- package/util/subscription-dependency-context.js.map +1 -1
|
@@ -27,6 +27,7 @@ export declare class WorkerDispatcherManager {
|
|
|
27
27
|
addWorker(ws: WebSocket.WebSocket): void;
|
|
28
28
|
disconnectWorker(workerId: string): void;
|
|
29
29
|
hasWorkers(): boolean;
|
|
30
|
+
hasWorkersForMethod(methodName: string): boolean;
|
|
30
31
|
/**
|
|
31
32
|
* Add a new task to our in-memory queue and try to dispatch.
|
|
32
33
|
*/
|
|
@@ -51,6 +52,9 @@ export declare class WorkerDispatcherManager {
|
|
|
51
52
|
* Returns the worker with the fewest activeTasks that is under maxConcurrency and per-method limit.
|
|
52
53
|
*/
|
|
53
54
|
private findWorkerForTask;
|
|
55
|
+
private normalizeWorkerIndex;
|
|
56
|
+
private getWorkerLoad;
|
|
57
|
+
private isWorkerZero;
|
|
54
58
|
private assignTaskToWorker;
|
|
55
59
|
/**
|
|
56
60
|
* Handle messages coming back from a worker (like 'taskComplete').
|
|
@@ -51,6 +51,18 @@ var WorkerDispatcherManager = /** @class */ (function () {
|
|
|
51
51
|
WorkerDispatcherManager.prototype.hasWorkers = function () {
|
|
52
52
|
return this._workers.length > 0;
|
|
53
53
|
};
|
|
54
|
+
WorkerDispatcherManager.prototype.hasWorkersForMethod = function (methodName) {
|
|
55
|
+
var _this = this;
|
|
56
|
+
if (!this._workers.length) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
var method = this._methodManager.getMethod(methodName);
|
|
60
|
+
var targetWorkerIndex = this.normalizeWorkerIndex(method === null || method === void 0 ? void 0 : method.targetWorkerIndex);
|
|
61
|
+
if (!targetWorkerIndex) {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
return this._workers.some(function (worker) { return _this.normalizeWorkerIndex(worker.workerIndex) === targetWorkerIndex; });
|
|
65
|
+
};
|
|
54
66
|
/**
|
|
55
67
|
* Add a new task to our in-memory queue and try to dispatch.
|
|
56
68
|
*/
|
|
@@ -163,7 +175,12 @@ var WorkerDispatcherManager = /** @class */ (function () {
|
|
|
163
175
|
var _this = this;
|
|
164
176
|
var method = this._methodManager.getMethod(task.method);
|
|
165
177
|
var methodLimit = method && method.maxConcurrency && method.maxConcurrency > 0 ? method.maxConcurrency : null;
|
|
178
|
+
var targetWorkerIndex = this.normalizeWorkerIndex(method === null || method === void 0 ? void 0 : method.targetWorkerIndex);
|
|
179
|
+
var preferNonZero = !targetWorkerIndex;
|
|
166
180
|
var candidates = this._workers.filter(function (x) { return x.activeTasks.length < _this.MAX_CONCURRENCY; });
|
|
181
|
+
if (targetWorkerIndex) {
|
|
182
|
+
candidates = candidates.filter(function (worker) { return _this.normalizeWorkerIndex(worker.workerIndex) === targetWorkerIndex; });
|
|
183
|
+
}
|
|
167
184
|
if (!candidates.length) {
|
|
168
185
|
return null;
|
|
169
186
|
}
|
|
@@ -184,12 +201,37 @@ var WorkerDispatcherManager = /** @class */ (function () {
|
|
|
184
201
|
return null;
|
|
185
202
|
}
|
|
186
203
|
eligible.sort(function (x, y) {
|
|
187
|
-
var totalX =
|
|
188
|
-
var totalY =
|
|
189
|
-
|
|
204
|
+
var totalX = _this.getWorkerLoad(x);
|
|
205
|
+
var totalY = _this.getWorkerLoad(y);
|
|
206
|
+
if (totalX !== totalY) {
|
|
207
|
+
return totalX - totalY;
|
|
208
|
+
}
|
|
209
|
+
if (preferNonZero) {
|
|
210
|
+
var xZero = _this.isWorkerZero(x) ? 1 : 0;
|
|
211
|
+
var yZero = _this.isWorkerZero(y) ? 1 : 0;
|
|
212
|
+
if (xZero !== yZero) {
|
|
213
|
+
return xZero - yZero;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
var idxX = _this.normalizeWorkerIndex(x.workerIndex) || '';
|
|
217
|
+
var idxY = _this.normalizeWorkerIndex(y.workerIndex) || '';
|
|
218
|
+
return idxX.localeCompare(idxY, undefined, { numeric: true, sensitivity: 'base' });
|
|
190
219
|
});
|
|
191
220
|
return eligible[0];
|
|
192
221
|
};
|
|
222
|
+
WorkerDispatcherManager.prototype.normalizeWorkerIndex = function (value) {
|
|
223
|
+
if (value === null || value === undefined) {
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
var normalized = String(value).trim();
|
|
227
|
+
return normalized.length ? normalized : null;
|
|
228
|
+
};
|
|
229
|
+
WorkerDispatcherManager.prototype.getWorkerLoad = function (worker) {
|
|
230
|
+
return worker.activeTasks.reduce(function (sum, task) { return sum + task.weight; }, 0);
|
|
231
|
+
};
|
|
232
|
+
WorkerDispatcherManager.prototype.isWorkerZero = function (worker) {
|
|
233
|
+
return this.normalizeWorkerIndex(worker.workerIndex) === '0';
|
|
234
|
+
};
|
|
193
235
|
WorkerDispatcherManager.prototype.assignTaskToWorker = function (worker, task) {
|
|
194
236
|
var _this = this;
|
|
195
237
|
var method = this._methodManager.getMethod(task.method);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/managers/worker-dispatcher.manager.ts"],"names":[],"mappings":";;;AAEA,yCAAgE;AAGhE,qCAAwC;AAoBxC;IAUC;QAPQ,aAAQ,GAAuB,EAAE,CAAC;QAClC,eAAU,GAAkB,EAAE,CAAC;QAC/B,oBAAe,GAAiC,EAAE,CAAC;QACnD,kBAAa,GAA6B,IAAI,GAAG,EAAE,CAAC;QAEpD,oBAAe,GAAG,EAAE,CAAC;IAEd,CAAC;IAET,8BAAM,GAAb,UAAc,gBAAkC,EAAE,aAA4B;QAC7E,IAAM,uBAAuB,GAAG,IAAI,uBAAuB,EAAE,CAAC;QAC9D,uBAAuB,CAAC,UAAU,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;QACpE,OAAO,uBAAuB,CAAC;IAChC,CAAC;IAEM,4CAAU,GAAjB,UAAkB,gBAAkC,EAAE,aAA4B;QACjF,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;QAC1C,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;IACrC,CAAC;IAEM,gDAAc,GAArB;QACC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;IAC5D,CAAC;IAEM,2CAAS,GAAhB,UAAiB,EAAuB;QAAxC,iBAsBC;QArBA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAClB,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC;YACnB,EAAE,EAAE,EAAE;YACN,WAAW,EAAE,EAAE;YACf,WAAW,EAAE,EAAE,CAAC,aAAa,CAAC;SAC9B,CAAC,CAAC;QAEH,WAAW,CAAC;YACX,IAAI,KAAI,CAAC,cAAc,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAA,CAAC;oBAC7C,OAAO;wBACN,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,WAAW,EAAE,CAAC,CAAC,WAAW;qBAC1B,CAAA;gBACF,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACf,CAAC;QACF,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;QACtB,CAAC;IACF,CAAC;IAEM,kDAAgB,GAAvB,UAAwB,QAAgB;QACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,EAAE,KAAK,QAAQ,EAAjB,CAAiB,CAAC,CAAC;IAC9D,CAAC;IAEM,4CAAU,GAAjB;QACC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACI,gDAAc,GAArB,UAAsB,SAAiB,EAAE,MAAc,EAAE,MAAa,EAAE,WAAiE;QACxI,IAAI,MAAM,GAAG,OAAO,GAAG,IAAA,0BAAiB,GAAE,CAAC;QAE3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACpB,IAAI,EAAE,MAAM;YACZ,MAAM,QAAA;YACN,SAAS,WAAA;YACT,MAAM,QAAA;YACN,MAAM,QAAA;YACN,WAAW,aAAA;SACX,CAAC,CAAC;QAEH,IAAI,WAAW,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;YACtC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACI,qDAAmB,GAA1B,UAA2B,MAAc,EAAE,MAAkB;QAA7D,iBA+BC;QA/B0C,uBAAA,EAAA,WAAkB;QAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC;QAED,gDAAgD;QAChD,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YAClC,IAAI,MAAM,GAAG,OAAO,GAAG,IAAA,0BAAiB,GAAE,CAAC;YAE3C,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACpB,IAAI,EAAE,MAAM;gBACZ,MAAM,QAAA;gBACN,MAAM,QAAA;gBACN,MAAM,QAAA;gBACN,SAAS,EAAE,CAAC;gBACZ,WAAW,EAAE;oBACZ,IAAI,EAAE,iBAAiB;iBACvB;aACD,CAAC,CAAC;YAEH,KAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE;gBAC9B,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,EAAE,OAAO,SAAA,EAAE,MAAM,QAAA,EAAE;aAC5B,CAAC,CAAC;YAEH,IAAI,KAAI,CAAC,cAAc,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,uBAAuB,EAAE,KAAI,CAAC,UAAU,CAAC,CAAC;YACnE,CAAC;YAED,KAAI,CAAC,aAAa,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,kDAAgB,GAAvB,UAAwB,MAAc,EAAE,MAAW;QAAX,uBAAA,EAAA,WAAW;QAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC;QAED,IAAI,MAAM,GAAG,OAAO,GAAG,IAAA,0BAAiB,GAAE,CAAC;QAE3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACpB,IAAI,EAAE,MAAM;YACZ,MAAM,QAAA;YACN,MAAM,QAAA;YACN,MAAM,QAAA;YACN,SAAS,EAAE,CAAC;YACZ,WAAW,EAAE;gBACZ,IAAI,EAAE,iBAAiB;aACvB;SACD,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,oBAAoB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACK,+CAAa,GAArB;QAAA,iBAgCC;QA/BA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAC7B,OAAO;QACR,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,IAAI,QAAQ,GAAG,KAAK,CAAC;YAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjD,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAI,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAEhD,IAAI,YAAY,EAAE,CAAC;oBAClB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC7B,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;oBAC5C,QAAQ,GAAG,IAAI,CAAC;oBAChB,MAAM;gBACP,CAAC;YACF,CAAC;YAED,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,UAAU,CAAC;oBACV,KAAI,CAAC,aAAa,EAAE,CAAC;gBACtB,CAAC,EAAE,EAAE,CAAC,CAAC;gBAEP,IAAI,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,EAAE,CAAC;oBAC1C,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,qBAAqB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACxF,CAAC;gBAED,OAAO,CAAC,qDAAqD;YAC9D,CAAC;QACF,CAAC;IACF,CAAC;IAED;;OAEG;IACK,mDAAiB,GAAzB,UAA0B,IAAiB;QAA3C,iBAqCC;QApCA,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,WAAW,GAAG,MAAM,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;QAE9G,IAAI,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,KAAI,CAAC,eAAe,EAA3C,CAA2C,CAAC,CAAC;QACxF,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,IAAI,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,UAAC,MAAM;YACvC,IAAI,CAAC,WAAW,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC;YACb,CAAC;YAED,IAAI,GAAG,GAAG,MAAM,CAAC,WAAW,IAAI,SAAS,CAAC;YAC1C,IAAI,OAAO,GAAG,CAAC,CAAC;YAEhB,KAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,CAAC;gBACvB,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;oBAC1C,OAAO,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAxB,CAAwB,CAAC,CAAC,MAAM,CAAC;gBACvE,CAAC;YACF,CAAC,CAAC,CAAC;YAEH,OAAO,OAAO,GAAG,WAAW,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC;YAClB,IAAI,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,EAAR,CAAQ,CAAC,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,EAAL,CAAK,EAAE,CAAC,CAAC,CAAC;YACzE,IAAI,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,EAAR,CAAQ,CAAC,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,EAAL,CAAK,EAAE,CAAC,CAAC,CAAC;YACzE,OAAO,MAAM,GAAG,MAAM,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAEO,oDAAkB,GAA1B,UAA2B,MAAwB,EAAE,IAAiB;QAAtE,iBA8EC;QA7EA,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAExD,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,wDAAwD,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACrF,OAAO;QACR,CAAC;QAED,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,EAAE,IAAI,CAAC,MAAM;SACnB,CAAC,CAAC;QAEH,IAAI,OAAO,GAAgB;YAC1B,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;SACnC,CAAC;QAEF,IAAI,aAAa,GAAG,UAAU,CAAC;YAC9B,IAAI,OAAO,GAAG,KAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAElD,IAAI,OAAO,EAAE,CAAC;gBACb,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACrB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,iEAAiE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;gBACzG,CAAC;gBAED,KAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxC,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,KAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,WAAW,EAAb,CAAa,CAAC,CAAC,CAAC,CAAC;YAEhJ,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAxB,CAAwB,CAAC,CAAC;YAE9E,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;gBAChD,IAAI,UAAU,GAAwB;oBACrC,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,QAAQ,EAAE,IAAI;oBACd,IAAI,EAAE,iEAAiE,GAAG,IAAI,CAAC,MAAM;iBACrF,CAAC;gBAEF,IAAI,QAAQ,GAAG,KAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBAE3E,IAAI,QAAQ,EAAE,CAAC;oBACd,KAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;gBACnD,CAAC;YACF,CAAC;QACF,CAAC,EAAE,MAAM,CAAC,eAAe,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAE9C,+FAA+F;QAC/F,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,QAAQ,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QACnD,CAAC;aACI,CAAC;YACL,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC/B,CAAC;QAED,QAAQ,CAAC,OAAO,GAAG,aAAa,CAAC;QACjC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAE9C,IAAI,CAAC;YACJ,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,GAAG,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAC;YAErD,YAAY,CAAC,aAAa,CAAC,CAAC;YAC5B,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAxB,CAAwB,CAAC,CAAC;YAE9E,yBAAyB;YACzB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;QACtB,CAAC;IACF,CAAC;IAED;;OAEG;IACI,qDAAmB,GAA1B,UAA2B,QAAgB,EAAE,UAA6B;QACzE,IAAI,IAAkB,CAAC;QAEvB,IAAI,CAAC;YACJ,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;gBACpC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,oBAAW,CAAC,CAAC;YAC5C,CAAC;iBACI,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtC,IAAI,GAAG,IAAA,iBAAM,EAAC,UAAU,CAAC,CAAC;YAC3B,CAAC;iBACI,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBACpC,IAAM,MAAM,GAAG,UAAkD,CAAC;gBAClE,IAAI,GAAG,IAAA,iBAAM,EAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACtC,CAAC;iBACI,IAAI,UAAU,YAAY,WAAW,EAAE,CAAC;gBAC5C,IAAI,GAAG,IAAA,iBAAM,EAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACxC,CAAC;iBACI,IAAI,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;gBACzC,IAAM,IAAI,GAAG,UAAoC,CAAC;gBAClD,IAAI,GAAG,IAAA,iBAAM,EAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAC3E,CAAC;iBACI,CAAC;gBACL,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,OAAO,UAAU,CAAC,CAAC;gBAC9E,OAAO;YACR,CAAC;QACF,CAAC;QACD,OAAO,GAAG,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;YACtD,OAAO;QACR,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAClC,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,EAAE,KAAK,QAAQ,EAAjB,CAAiB,CAAC,CAAC;YAExD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,QAAQ,CAAC,CAAC;gBAC5D,OAAO;YACR,CAAC;YAEK,IAAA,QAAM,GAA+B,IAAI,OAAnC,EAAE,SAAS,GAAoB,IAAI,UAAxB,EAAE,KAAK,GAAa,IAAI,MAAjB,EAAE,MAAM,GAAK,IAAI,OAAT,CAAU;YAChD,IAAI,cAAc,GAAG,MAAM,CAAC;YAE5B,IAAI,CAAC,KAAK,IAAI,cAAc,KAAK,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC/D,IAAI,CAAC;oBACJ,cAAc,GAAG,IAAA,iBAAM,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;gBAC/C,CAAC;gBACD,OAAO,GAAG,EAAE,CAAC;oBACZ,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAC;gBACtD,CAAC;YACF,CAAC;YACD,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,KAAK,QAAM,EAAnB,CAAmB,CAAC,CAAC;YAEzE,IAAI,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAM,CAAC,CAAC;YAEjD,IAAI,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,yBAAyB,EAAE,IAAI,CAAC,CAAC;YAC1D,CAAC;YAED,IAAI,WAAW,EAAE,CAAC;gBACjB,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;oBACzB,IAAI,KAAK,EAAE,CAAC;wBACX,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;oBAC5C,CAAC;yBACI,CAAC;wBACL,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;oBAC7C,CAAC;gBACF,CAAC;gBAED,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAClC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAM,CAAC,CAAC;YACnC,CAAC;YAED,oDAAoD;YACpD,IAAI,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,QAAM,CAAC,CAAC;YAE/C,IAAI,WAAW,EAAE,CAAC;gBACjB,IAAI,GAAG,GAAwB;oBAC9B,SAAS,EAAE,SAAS;oBACpB,QAAQ,EAAE,KAAK;oBACf,IAAI,EAAE,MAAM;iBACZ,CAAC;gBAEF,IAAI,KAAK,EAAE,CAAC;oBACX,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;oBACpB,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC;gBACnB,CAAC;gBAED,IAAI,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;gBAEnE,IAAI,WAAW,EAAE,CAAC;oBACjB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;wBACpC,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,CAAC;oBAC7H,CAAC;yBACI,CAAC;wBACL,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;oBAC/C,CAAC;gBACF,CAAC;gBAED,IAAI,IAAI,CAAC,eAAe,CAAC,QAAM,CAAC,EAAE,CAAC;oBAClC,OAAO,IAAI,CAAC,eAAe,CAAC,QAAM,CAAC,CAAC;gBACrC,CAAC;YACF,CAAC;YAED,sCAAsC;YACtC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;gBAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;YACtB,CAAC;QACF,CAAC;IACF,CAAC;IAEM,mDAAiB,GAAxB,UAAyB,EAAuB,EAAE,OAA6B;QAC9E,IAAI,CAAC,EAAE,EAAE,CAAC;YACT,OAAO;QACR,CAAC;QAED,IAAI,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;YAC/B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACjC,IAAM,MAAI,GAAG,OAAO,CAAC;gBAErB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAI,CAAC,CAAC;gBAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;gBAErB,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;gBACvC,EAAE,CAAC,KAAK,EAAE,CAAC;gBAEZ,IAAI,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAI,CAAC,MAAM,CAAC,CAAC;gBAEtD,IAAI,WAAW,EAAE,CAAC;oBACjB,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;oBAClC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAI,CAAC,MAAM,CAAC,CAAC;oBAEvC,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;wBACzB,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;oBACvD,CAAC;gBACF,CAAC;YACD,CAAC;iBACI,CAAC;gBACL,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;gBACvC,EAAE,CAAC,KAAK,EAAE,CAAC;YACZ,CAAC;YAED,OAAO;QACR,CAAC;QAED,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YACjC,IAAI,CAAC;gBACJ,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,GAAG,EAAE,CAAC;gBACZ,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;gBACvC,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAC;YACtD,CAAC;YAED,OAAO;QACR,CAAC;QAED,IAAM,IAAI,GAAG,OAAO,CAAC;QACrB,IAAM,aAAa,GAAG,IAAA,eAAI,EAAC,IAAI,CAAC,CAAC;QAEjC,IAAI,CAAC;YACJ,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,GAAG,EAAE,CAAC;YACZ,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;YAErB,IAAI,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,mBAAmB,EAAE,IAAI,CAAC,CAAC;YACpD,CAAC;YAED,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;YACvC,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;YAEtD,IAAI,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEtD,IAAI,WAAW,EAAE,CAAC;gBACjB,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAClC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAEvC,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;oBACzB,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,kCAAkC,IAAG,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,QAAQ,EAAE,CAAA,CAAC,CAAC;gBAClF,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IACF,8BAAC;AAAD,CA9eA,AA8eC,IAAA;AA9eY,0DAAuB","file":"worker-dispatcher.manager.js","sourcesContent":["import * as WebSocket from 'ws';\nimport { ServerResponseModel, TaskPayload, TaskResponse } from '../models/server-message.model';\nimport { dateReviver, objectIdHexString } from '../util/common';\nimport { MethodManager } from './method.manager';\nimport { WebSocketManager } from './websocket.manager';\nimport { pack, unpack } from 'msgpackr';\n\nexport interface WorkerConnection {\n\tid: string;\n\tws: WebSocket.WebSocket;\n\tactiveTasks: { taskId: string; weight: number; method?: string }[];\n\tworkerIndex?: string;\n}\n\ninterface PendingTask {\n\ttimeout: NodeJS.Timeout;\n\tpromise?: {\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tresolve: (value: any) => void;\n\t\t// eslint-disable-next-line no-unused-vars\n\t\treject: (reason?: any) => void;\n\t};\n\tmethod?: string;\n}\n\nexport class WorkerDispatcherManager {\n\tprivate _websocketManager: WebSocketManager;\n\tprivate _methodManager: MethodManager;\n\tprivate _workers: WorkerConnection[] = [];\n\tprivate _taskQueue: TaskPayload[] = [];\n\tprivate _clientRequests: { [taskId: string]: string } = {};\n\tprivate _pendingTasks: Map<string, PendingTask> = new Map();\n\n\tprivate MAX_CONCURRENCY = 10;\n\n\tconstructor() {}\n\n\tstatic create(websocketManager: WebSocketManager, methodManager: MethodManager) {\n\t\tconst workerDispatcherManager = new WorkerDispatcherManager();\n\t\tworkerDispatcherManager.initialize(websocketManager, methodManager);\n\t\treturn workerDispatcherManager;\n\t}\n\n\tpublic initialize(websocketManager: WebSocketManager, methodManager: MethodManager) {\n\t\tthis._websocketManager = websocketManager;\n\t\tthis._methodManager = methodManager;\n\t}\n\n\tpublic isSafeShutdown() {\n\t\treturn !this._taskQueue.length && !this._pendingTasks.size;\n\t}\n\n\tpublic addWorker(ws: WebSocket.WebSocket) {\n\t\tthis._workers.push({\n\t\t\tid: ws['id_worker'],\n\t\t\tws: ws,\n\t\t\tactiveTasks: [],\n\t\t\tworkerIndex: ws['workerIndex']\n\t\t});\n\n\t\tsetInterval(() => {\n\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.log(JSON.stringify(this._workers.map(a => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: a.id,\n\t\t\t\t\t\tactiveTasks: a.activeTasks\n\t\t\t\t\t}\n\t\t\t\t}), null, 2));\n\t\t\t}\n\t\t}, 5000);\n\n\t\tif (this._taskQueue.length) {\n\t\t\tthis.dispatchQueue();\n\t\t}\n\t}\n\n\tpublic disconnectWorker(workerId: string) {\n\t\tthis._workers = this._workers.filter(w => w.id !== workerId);\n\t}\n\n\tpublic hasWorkers() {\n\t\treturn this._workers.length > 0;\n\t}\n\n\t/**\n\t * Add a new task to our in-memory queue and try to dispatch.\n\t */\n\tpublic sendClientTask(messageId: number, method: string, params: any[], userContext?: { id_user?: string; user?: string; id_ws?: string }) {\n\t\tlet taskId = 'task-' + objectIdHexString();\n\n\t\tthis._taskQueue.push({\n\t\t\ttype: 'task',\n\t\t\ttaskId,\n\t\t\tmessageId,\n\t\t\tmethod,\n\t\t\tparams,\n\t\t\tuserContext\n\t\t});\n\n\t\tif (userContext && userContext.id_ws) {\n\t\t\tthis._clientRequests[taskId] = userContext.id_ws;\n\t\t}\n\n\t\tthis.dispatchQueue();\n\t}\n\n\t/**\n\t * Same as sendInternalTask but returns a Promise so you can `await` it.\n\t */\n\tpublic sendInternalPromise(method: string, params: any[] = []): Promise<any> {\n\t\tif (!Array.isArray(params)) {\n\t\t\tparams = [params];\n\t\t}\n\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet taskId = 'task-' + objectIdHexString();\n\n\t\t\tthis._taskQueue.push({\n\t\t\t\ttype: 'task',\n\t\t\t\ttaskId,\n\t\t\t\tmethod,\n\t\t\t\tparams,\n\t\t\t\tmessageId: 0,\n\t\t\t\tuserContext: {\n\t\t\t\t\tuser: 'Internal System'\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._pendingTasks.set(taskId, {\n\t\t\t\ttimeout: null,\n\t\t\t\tpromise: { resolve, reject }\n\t\t\t});\n\n\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Send Internal Promise', this._taskQueue);\n\t\t\t}\n\n\t\t\tthis.dispatchQueue();\n\t\t});\n\t}\n\n\t/**\n\t * Send a task internally without returning a promise.\n\t */\n\tpublic sendInternalTask(method: string, params = []) {\n\t\tif (!Array.isArray(params)) {\n\t\t\tparams = [params];\n\t\t}\n\n\t\tlet taskId = 'task-' + objectIdHexString();\n\n\t\tthis._taskQueue.push({\n\t\t\ttype: 'task',\n\t\t\ttaskId,\n\t\t\tmethod,\n\t\t\tparams,\n\t\t\tmessageId: 0,\n\t\t\tuserContext: {\n\t\t\t\tuser: 'Internal System'\n\t\t\t}\n\t\t});\n\n\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\tconsole.log(new Date(), 'Send Internal Task', this._taskQueue);\n\t\t}\n\n\t\tthis.dispatchQueue();\n\t}\n\n\t/**\n\t * The main loop that assigns tasks from _taskQueue to any worker that has capacity.\n\t */\n\tprivate dispatchQueue() {\n\t\tif (!this._taskQueue.length) {\n\t\t\treturn;\n\t\t}\n\n\t\twhile (this._taskQueue.length > 0) {\n\t\t\tlet assigned = false;\n\n\t\t\tfor (let i = 0; i < this._taskQueue.length; i++) {\n\t\t\t\tlet task = this._taskQueue[i];\n\t\t\t\tlet targetWorker = this.findWorkerForTask(task);\n\n\t\t\t\tif (targetWorker) {\n\t\t\t\t\tthis._taskQueue.splice(i, 1);\n\t\t\t\t\tthis.assignTaskToWorker(targetWorker, task);\n\t\t\t\t\tassigned = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!assigned) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.dispatchQueue();\n\t\t\t\t}, 25);\n\n\t\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\t\tconsole.log(new Date(), 'No Worker Available', JSON.stringify(this._workers, null, 2));\n\t\t\t\t}\n\n\t\t\t\treturn; // nothing can run right now due to per-worker limits\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Returns the worker with the fewest activeTasks that is under maxConcurrency and per-method limit.\n\t */\n\tprivate findWorkerForTask(task: TaskPayload): WorkerConnection | null {\n\t\tlet method = this._methodManager.getMethod(task.method);\n\t\tlet methodLimit = method && method.maxConcurrency && method.maxConcurrency > 0 ? method.maxConcurrency : null;\n\n\t\tlet candidates = this._workers.filter(x => x.activeTasks.length < this.MAX_CONCURRENCY);\n\t\tif (!candidates.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet eligible = candidates.filter((worker) => {\n\t\t\tif (!methodLimit) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tlet idx = worker.workerIndex || 'unknown';\n\t\t\tlet current = 0;\n\n\t\t\tthis._workers.forEach((w) => {\n\t\t\t\tif ((w.workerIndex || 'unknown') === idx) {\n\t\t\t\t\tcurrent += w.activeTasks.filter(a => a.method === task.method).length;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn current < methodLimit;\n\t\t});\n\n\t\tif (!eligible.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\teligible.sort((x, y) => {\n\t\t\tlet totalX = x.activeTasks.map(a => a.weight).reduce((a, b) => a + b, 0);\n\t\t\tlet totalY = y.activeTasks.map(a => a.weight).reduce((a, b) => a + b, 0);\n\t\t\treturn totalX - totalY;\n\t\t});\n\n\t\treturn eligible[0];\n\t}\n\n\tprivate assignTaskToWorker(worker: WorkerConnection, task: TaskPayload) {\n\t\tlet method = this._methodManager.getMethod(task.method);\n\n\t\tif (!method) {\n\t\t\tconsole.error('Failed to send task to worker - Could not find method:', task.method);\n\t\t\treturn;\n\t\t}\n\n\t\tworker.activeTasks.push({\n\t\t\ttaskId: task.taskId,\n\t\t\tweight: method && method.workerTaskWeight ? method.workerTaskWeight : 1,\n\t\t\tmethod: task.method\n\t\t});\n\n\t\tlet payload: TaskPayload = {\n\t\t\ttype: 'task',\n\t\t\ttaskId: task.taskId,\n\t\t\tmessageId: task.messageId,\n\t\t\tmethod: task.method,\n\t\t\tparams: task.params,\n\t\t\tuserContext: task.userContext || {}\n\t\t};\n\n\t\tlet timeoutHandle = setTimeout(() => {\n\t\t\tlet pending = this._pendingTasks.get(task.taskId);\n\n\t\t\tif (pending) {\n\t\t\t\tif (pending.promise) {\n\t\t\t\t\tpending.promise.reject('Task timed out after 2m in WorkerDispatcherManager for method: ' + task.method);\n\t\t\t\t}\n\n\t\t\t\tthis._pendingTasks.delete(task.taskId);\n\t\t\t}\n\n\t\t\tconsole.log(new Date(), 'TIMEOUT HIT', 'task', task.taskId, task.messageId, task.method, JSON.stringify(this._workers.map(a => a.activeTasks)));\n\n\t\t\tworker.activeTasks = worker.activeTasks.filter(a => a.taskId !== task.taskId);\n\n\t\t\tif (task.userContext && task.userContext.id_ws) {\n\t\t\t\tlet timeoutRes: ServerResponseModel = {\n\t\t\t\t\tmessageId: task.messageId,\n\t\t\t\t\thasError: true,\n\t\t\t\t\tdata: 'Task timed out after 2m in WorkerDispatcherManager for method: ' + task.method\n\t\t\t\t};\n\n\t\t\t\tlet clientWS = this._websocketManager.getWebSocket(task.userContext.id_ws);\n\n\t\t\t\tif (clientWS) {\n\t\t\t\t\tthis._websocketManager.send(clientWS, timeoutRes);\n\t\t\t\t}\n\t\t\t}\n\t\t}, method.timeoutOverride || (1000 * 60 * 2));\n\n\t\t// If we already stored a promise for this task (from sendInternalPromise), add the timeout now\n\t\tlet existing = this._pendingTasks.get(task.taskId);\n\t\tif (!existing) {\n\t\t\texisting = { timeout: null, method: task.method };\n\t\t}\n\t\telse {\n\t\t\texisting.method = task.method;\n\t\t}\n\n\t\texisting.timeout = timeoutHandle;\n\t\tthis._pendingTasks.set(task.taskId, existing);\n\n\t\ttry {\n\t\t\tthis.sendWorkerPayload(worker.ws, payload);\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.error('Failed to send task to worker:', err);\n\n\t\t\tclearTimeout(timeoutHandle);\n\t\t\tworker.activeTasks = worker.activeTasks.filter(a => a.taskId !== task.taskId);\n\n\t\t\t// Put task back in front\n\t\t\tthis._taskQueue.unshift(task);\n\t\t\tthis.dispatchQueue();\n\t\t}\n\t}\n\n\t/**\n\t * Handle messages coming back from a worker (like 'taskComplete').\n\t */\n\tpublic handleWorkerMessage(workerId: string, rawMessage: WebSocket.RawData) {\n\t\tlet data: TaskResponse;\n\n\t\ttry {\n\t\t\tif (typeof rawMessage === 'string') {\n\t\t\t\tdata = JSON.parse(rawMessage, dateReviver);\n\t\t\t}\n\t\t\telse if (Buffer.isBuffer(rawMessage)) {\n\t\t\t\tdata = unpack(rawMessage);\n\t\t\t}\n\t\t\telse if (Array.isArray(rawMessage)) {\n\t\t\t\tconst chunks = rawMessage as unknown as ReadonlyArray<Uint8Array>;\n\t\t\t\tdata = unpack(Buffer.concat(chunks));\n\t\t\t}\n\t\t\telse if (rawMessage instanceof ArrayBuffer) {\n\t\t\t\tdata = unpack(Buffer.from(rawMessage));\n\t\t\t}\n\t\t\telse if (ArrayBuffer.isView(rawMessage)) {\n\t\t\t\tconst view = rawMessage as NodeJS.ArrayBufferView;\n\t\t\t\tdata = unpack(Buffer.from(view.buffer, view.byteOffset, view.byteLength));\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.error('Unsupported worker message type received:', typeof rawMessage);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.error('Failed to parse worker message:', err);\n\t\t\treturn;\n\t\t}\n\n\t\tif (data.type === 'taskComplete') {\n\t\t\tlet worker = this._workers.find(x => x.id === workerId);\n\n\t\t\tif (!worker) {\n\t\t\t\tconsole.error('Unknown worker for taskComplete:', workerId);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet { taskId, messageId, error, result } = data;\n\t\t\tlet unpackedResult = result;\n\n\t\t\tif (!error && unpackedResult === null && data['packedResult']) {\n\t\t\t\ttry {\n\t\t\t\t\tunpackedResult = unpack(data['packedResult']);\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tconsole.error('Failed to unpack worker result', err);\n\t\t\t\t}\n\t\t\t}\n\t\t\tworker.activeTasks = worker.activeTasks.filter(a => a.taskId !== taskId);\n\n\t\t\tlet pendingTask = this._pendingTasks.get(taskId);\n\n\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Recv from Worker Server', data);\n\t\t\t}\n\n\t\t\tif (pendingTask) {\n\t\t\t\tif (pendingTask.promise) {\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\tpendingTask.promise.reject(unpackedResult);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tpendingTask.promise.resolve(unpackedResult);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclearTimeout(pendingTask.timeout);\n\t\t\t\tthis._pendingTasks.delete(taskId);\n\t\t\t}\n\n\t\t\t// Look up original request if it came from a client\n\t\t\tlet clientReqId = this._clientRequests[taskId];\n\n\t\t\tif (clientReqId) {\n\t\t\t\tlet res: ServerResponseModel = {\n\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\thasError: false,\n\t\t\t\t\tdata: result\n\t\t\t\t};\n\n\t\t\t\tif (error) {\n\t\t\t\t\tres.hasError = true;\n\t\t\t\t\tres.data = result;\n\t\t\t\t}\n\n\t\t\t\tlet clientReqWS = this._websocketManager.getWebSocket(clientReqId);\n\n\t\t\t\tif (clientReqWS) {\n\t\t\t\t\tif (!error && data['packedResult']) {\n\t\t\t\t\t\tthis._websocketManager.sendPackedBuffer(clientReqWS, messageId, false, data['packedResult'], data['encoding'] || 'msgpack');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._websocketManager.send(clientReqWS, res);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this._clientRequests[taskId]) {\n\t\t\t\t\tdelete this._clientRequests[taskId];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Try to dispatch more from the queue\n\t\t\tif (this._taskQueue.length) {\n\t\t\t\tthis.dispatchQueue();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic sendWorkerPayload(ws: WebSocket.WebSocket, payload: TaskPayload | string) {\n\t\tif (!ws) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (ws.readyState !== ws.OPEN) {\n\t\t\tif (typeof payload !== 'string') {\n\t\t\t\tconst task = payload;\n\n\t\t\t\tthis._taskQueue.unshift(task);\n\t\t\t\tthis.dispatchQueue();\n\n\t\t\t\tthis.disconnectWorker(ws['id_worker']);\n\t\t\t\tws.close();\n\n\t\t\tlet pendingTask = this._pendingTasks.get(task.taskId);\n\n\t\t\tif (pendingTask) {\n\t\t\t\tclearTimeout(pendingTask.timeout);\n\t\t\t\tthis._pendingTasks.delete(task.taskId);\n\n\t\t\t\tif (pendingTask.promise) {\n\t\t\t\t\tpendingTask.promise.reject('Worker socket not open.');\n\t\t\t\t}\n\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.disconnectWorker(ws['id_worker']);\n\t\t\t\tws.close();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof payload === 'string') {\n\t\t\ttry {\n\t\t\t\tws.send(payload);\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tthis.disconnectWorker(ws['id_worker']);\n\t\t\t\tws.close();\n\t\t\t\tconsole.error('Failed to send worker payload:', err);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst task = payload;\n\t\tconst payloadBuffer = pack(task);\n\n\t\ttry {\n\t\t\tws.send(payloadBuffer);\n\t\t}\n\t\tcatch (err) {\n\t\t\tthis._taskQueue.unshift(task);\n\t\t\tthis.dispatchQueue();\n\n\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Sending to Server', task);\n\t\t\t}\n\n\t\t\tthis.disconnectWorker(ws['id_worker']);\n\t\t\tws.close();\n\t\t\tconsole.error('Failed to send worker response:', err);\n\n\t\t\tlet pendingTask = this._pendingTasks.get(task.taskId);\n\n\t\t\tif (pendingTask) {\n\t\t\t\tclearTimeout(pendingTask.timeout);\n\t\t\t\tthis._pendingTasks.delete(task.taskId);\n\n\t\t\t\tif (pendingTask.promise) {\n\t\t\t\t\tpendingTask.promise.reject('Failed to send worker response: ' + err?.toString());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/managers/worker-dispatcher.manager.ts"],"names":[],"mappings":"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","file":"worker-dispatcher.manager.js","sourcesContent":["import * as WebSocket from 'ws';\nimport { ServerResponseModel, TaskPayload, TaskResponse } from '../models/server-message.model';\nimport { dateReviver, objectIdHexString } from '../util/common';\nimport { MethodManager } from './method.manager';\nimport { WebSocketManager } from './websocket.manager';\nimport { pack, unpack } from 'msgpackr';\n\nexport interface WorkerConnection {\n\tid: string;\n\tws: WebSocket.WebSocket;\n\tactiveTasks: { taskId: string; weight: number; method?: string }[];\n\tworkerIndex?: string;\n}\n\ninterface PendingTask {\n\ttimeout: NodeJS.Timeout;\n\tpromise?: {\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tresolve: (value: any) => void;\n\t\t// eslint-disable-next-line no-unused-vars\n\t\treject: (reason?: any) => void;\n\t};\n\tmethod?: string;\n}\n\nexport class WorkerDispatcherManager {\n\tprivate _websocketManager: WebSocketManager;\n\tprivate _methodManager: MethodManager;\n\tprivate _workers: WorkerConnection[] = [];\n\tprivate _taskQueue: TaskPayload[] = [];\n\tprivate _clientRequests: { [taskId: string]: string } = {};\n\tprivate _pendingTasks: Map<string, PendingTask> = new Map();\n\n\tprivate MAX_CONCURRENCY = 10;\n\n\tconstructor() {}\n\n\tstatic create(websocketManager: WebSocketManager, methodManager: MethodManager) {\n\t\tconst workerDispatcherManager = new WorkerDispatcherManager();\n\t\tworkerDispatcherManager.initialize(websocketManager, methodManager);\n\t\treturn workerDispatcherManager;\n\t}\n\n\tpublic initialize(websocketManager: WebSocketManager, methodManager: MethodManager) {\n\t\tthis._websocketManager = websocketManager;\n\t\tthis._methodManager = methodManager;\n\t}\n\n\tpublic isSafeShutdown() {\n\t\treturn !this._taskQueue.length && !this._pendingTasks.size;\n\t}\n\n\tpublic addWorker(ws: WebSocket.WebSocket) {\n\t\tthis._workers.push({\n\t\t\tid: ws['id_worker'],\n\t\t\tws: ws,\n\t\t\tactiveTasks: [],\n\t\t\tworkerIndex: ws['workerIndex']\n\t\t});\n\n\t\tsetInterval(() => {\n\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.log(JSON.stringify(this._workers.map(a => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: a.id,\n\t\t\t\t\t\tactiveTasks: a.activeTasks\n\t\t\t\t\t}\n\t\t\t\t}), null, 2));\n\t\t\t}\n\t\t}, 5000);\n\n\t\tif (this._taskQueue.length) {\n\t\t\tthis.dispatchQueue();\n\t\t}\n\t}\n\n\tpublic disconnectWorker(workerId: string) {\n\t\tthis._workers = this._workers.filter(w => w.id !== workerId);\n\t}\n\n\tpublic hasWorkers() {\n\t\treturn this._workers.length > 0;\n\t}\n\n\tpublic hasWorkersForMethod(methodName: string) {\n\t\tif (!this._workers.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst method = this._methodManager.getMethod(methodName);\n\t\tconst targetWorkerIndex = this.normalizeWorkerIndex(method?.targetWorkerIndex);\n\n\t\tif (!targetWorkerIndex) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn this._workers.some(worker => this.normalizeWorkerIndex(worker.workerIndex) === targetWorkerIndex);\n\t}\n\n\t/**\n\t * Add a new task to our in-memory queue and try to dispatch.\n\t */\n\tpublic sendClientTask(messageId: number, method: string, params: any[], userContext?: { id_user?: string; user?: string; id_ws?: string }) {\n\t\tlet taskId = 'task-' + objectIdHexString();\n\n\t\tthis._taskQueue.push({\n\t\t\ttype: 'task',\n\t\t\ttaskId,\n\t\t\tmessageId,\n\t\t\tmethod,\n\t\t\tparams,\n\t\t\tuserContext\n\t\t});\n\n\t\tif (userContext && userContext.id_ws) {\n\t\t\tthis._clientRequests[taskId] = userContext.id_ws;\n\t\t}\n\n\t\tthis.dispatchQueue();\n\t}\n\n\t/**\n\t * Same as sendInternalTask but returns a Promise so you can `await` it.\n\t */\n\tpublic sendInternalPromise(method: string, params: any[] = []): Promise<any> {\n\t\tif (!Array.isArray(params)) {\n\t\t\tparams = [params];\n\t\t}\n\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet taskId = 'task-' + objectIdHexString();\n\n\t\t\tthis._taskQueue.push({\n\t\t\t\ttype: 'task',\n\t\t\t\ttaskId,\n\t\t\t\tmethod,\n\t\t\t\tparams,\n\t\t\t\tmessageId: 0,\n\t\t\t\tuserContext: {\n\t\t\t\t\tuser: 'Internal System'\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._pendingTasks.set(taskId, {\n\t\t\t\ttimeout: null,\n\t\t\t\tpromise: { resolve, reject }\n\t\t\t});\n\n\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Send Internal Promise', this._taskQueue);\n\t\t\t}\n\n\t\t\tthis.dispatchQueue();\n\t\t});\n\t}\n\n\t/**\n\t * Send a task internally without returning a promise.\n\t */\n\tpublic sendInternalTask(method: string, params = []) {\n\t\tif (!Array.isArray(params)) {\n\t\t\tparams = [params];\n\t\t}\n\n\t\tlet taskId = 'task-' + objectIdHexString();\n\n\t\tthis._taskQueue.push({\n\t\t\ttype: 'task',\n\t\t\ttaskId,\n\t\t\tmethod,\n\t\t\tparams,\n\t\t\tmessageId: 0,\n\t\t\tuserContext: {\n\t\t\t\tuser: 'Internal System'\n\t\t\t}\n\t\t});\n\n\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\tconsole.log(new Date(), 'Send Internal Task', this._taskQueue);\n\t\t}\n\n\t\tthis.dispatchQueue();\n\t}\n\n\t/**\n\t * The main loop that assigns tasks from _taskQueue to any worker that has capacity.\n\t */\n\tprivate dispatchQueue() {\n\t\tif (!this._taskQueue.length) {\n\t\t\treturn;\n\t\t}\n\n\t\twhile (this._taskQueue.length > 0) {\n\t\t\tlet assigned = false;\n\n\t\t\tfor (let i = 0; i < this._taskQueue.length; i++) {\n\t\t\t\tlet task = this._taskQueue[i];\n\t\t\t\tlet targetWorker = this.findWorkerForTask(task);\n\n\t\t\t\tif (targetWorker) {\n\t\t\t\t\tthis._taskQueue.splice(i, 1);\n\t\t\t\t\tthis.assignTaskToWorker(targetWorker, task);\n\t\t\t\t\tassigned = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!assigned) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.dispatchQueue();\n\t\t\t\t}, 25);\n\n\t\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\t\tconsole.log(new Date(), 'No Worker Available', JSON.stringify(this._workers, null, 2));\n\t\t\t\t}\n\n\t\t\t\treturn; // nothing can run right now due to per-worker limits\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Returns the worker with the fewest activeTasks that is under maxConcurrency and per-method limit.\n\t */\n\tprivate findWorkerForTask(task: TaskPayload): WorkerConnection | null {\n\t\tlet method = this._methodManager.getMethod(task.method);\n\t\tlet methodLimit = method && method.maxConcurrency && method.maxConcurrency > 0 ? method.maxConcurrency : null;\n\t\tlet targetWorkerIndex = this.normalizeWorkerIndex(method?.targetWorkerIndex);\n\t\tconst preferNonZero = !targetWorkerIndex;\n\n\t\tlet candidates = this._workers.filter(x => x.activeTasks.length < this.MAX_CONCURRENCY);\n\t\tif (targetWorkerIndex) {\n\t\t\tcandidates = candidates.filter(worker => this.normalizeWorkerIndex(worker.workerIndex) === targetWorkerIndex);\n\t\t}\n\t\tif (!candidates.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet eligible = candidates.filter((worker) => {\n\t\t\tif (!methodLimit) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tlet idx = worker.workerIndex || 'unknown';\n\t\t\tlet current = 0;\n\n\t\t\tthis._workers.forEach((w) => {\n\t\t\t\tif ((w.workerIndex || 'unknown') === idx) {\n\t\t\t\t\tcurrent += w.activeTasks.filter(a => a.method === task.method).length;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn current < methodLimit;\n\t\t});\n\n\t\tif (!eligible.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\teligible.sort((x, y) => {\n\t\t\tconst totalX = this.getWorkerLoad(x);\n\t\t\tconst totalY = this.getWorkerLoad(y);\n\t\t\tif (totalX !== totalY) {\n\t\t\t\treturn totalX - totalY;\n\t\t\t}\n\n\t\t\tif (preferNonZero) {\n\t\t\t\tconst xZero = this.isWorkerZero(x) ? 1 : 0;\n\t\t\t\tconst yZero = this.isWorkerZero(y) ? 1 : 0;\n\t\t\t\tif (xZero !== yZero) {\n\t\t\t\t\treturn xZero - yZero;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst idxX = this.normalizeWorkerIndex(x.workerIndex) || '';\n\t\t\tconst idxY = this.normalizeWorkerIndex(y.workerIndex) || '';\n\t\t\treturn idxX.localeCompare(idxY, undefined, { numeric: true, sensitivity: 'base' });\n\t\t});\n\n\t\treturn eligible[0];\n\t}\n\n\tprivate normalizeWorkerIndex(value?: string | number | null): string | null {\n\t\tif (value === null || value === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst normalized = String(value).trim();\n\t\treturn normalized.length ? normalized : null;\n\t}\n\n\tprivate getWorkerLoad(worker: WorkerConnection): number {\n\t\treturn worker.activeTasks.reduce((sum, task) => sum + task.weight, 0);\n\t}\n\n\tprivate isWorkerZero(worker: WorkerConnection): boolean {\n\t\treturn this.normalizeWorkerIndex(worker.workerIndex) === '0';\n\t}\n\n\tprivate assignTaskToWorker(worker: WorkerConnection, task: TaskPayload) {\n\t\tlet method = this._methodManager.getMethod(task.method);\n\n\t\tif (!method) {\n\t\t\tconsole.error('Failed to send task to worker - Could not find method:', task.method);\n\t\t\treturn;\n\t\t}\n\n\t\tworker.activeTasks.push({\n\t\t\ttaskId: task.taskId,\n\t\t\tweight: method && method.workerTaskWeight ? method.workerTaskWeight : 1,\n\t\t\tmethod: task.method\n\t\t});\n\n\t\tlet payload: TaskPayload = {\n\t\t\ttype: 'task',\n\t\t\ttaskId: task.taskId,\n\t\t\tmessageId: task.messageId,\n\t\t\tmethod: task.method,\n\t\t\tparams: task.params,\n\t\t\tuserContext: task.userContext || {}\n\t\t};\n\n\t\tlet timeoutHandle = setTimeout(() => {\n\t\t\tlet pending = this._pendingTasks.get(task.taskId);\n\n\t\t\tif (pending) {\n\t\t\t\tif (pending.promise) {\n\t\t\t\t\tpending.promise.reject('Task timed out after 2m in WorkerDispatcherManager for method: ' + task.method);\n\t\t\t\t}\n\n\t\t\t\tthis._pendingTasks.delete(task.taskId);\n\t\t\t}\n\n\t\t\tconsole.log(new Date(), 'TIMEOUT HIT', 'task', task.taskId, task.messageId, task.method, JSON.stringify(this._workers.map(a => a.activeTasks)));\n\n\t\t\tworker.activeTasks = worker.activeTasks.filter(a => a.taskId !== task.taskId);\n\n\t\t\tif (task.userContext && task.userContext.id_ws) {\n\t\t\t\tlet timeoutRes: ServerResponseModel = {\n\t\t\t\t\tmessageId: task.messageId,\n\t\t\t\t\thasError: true,\n\t\t\t\t\tdata: 'Task timed out after 2m in WorkerDispatcherManager for method: ' + task.method\n\t\t\t\t};\n\n\t\t\t\tlet clientWS = this._websocketManager.getWebSocket(task.userContext.id_ws);\n\n\t\t\t\tif (clientWS) {\n\t\t\t\t\tthis._websocketManager.send(clientWS, timeoutRes);\n\t\t\t\t}\n\t\t\t}\n\t\t}, method.timeoutOverride || (1000 * 60 * 2));\n\n\t\t// If we already stored a promise for this task (from sendInternalPromise), add the timeout now\n\t\tlet existing = this._pendingTasks.get(task.taskId);\n\t\tif (!existing) {\n\t\t\texisting = { timeout: null, method: task.method };\n\t\t}\n\t\telse {\n\t\t\texisting.method = task.method;\n\t\t}\n\n\t\texisting.timeout = timeoutHandle;\n\t\tthis._pendingTasks.set(task.taskId, existing);\n\n\t\ttry {\n\t\t\tthis.sendWorkerPayload(worker.ws, payload);\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.error('Failed to send task to worker:', err);\n\n\t\t\tclearTimeout(timeoutHandle);\n\t\t\tworker.activeTasks = worker.activeTasks.filter(a => a.taskId !== task.taskId);\n\n\t\t\t// Put task back in front\n\t\t\tthis._taskQueue.unshift(task);\n\t\t\tthis.dispatchQueue();\n\t\t}\n\t}\n\n\t/**\n\t * Handle messages coming back from a worker (like 'taskComplete').\n\t */\n\tpublic handleWorkerMessage(workerId: string, rawMessage: WebSocket.RawData) {\n\t\tlet data: TaskResponse;\n\n\t\ttry {\n\t\t\tif (typeof rawMessage === 'string') {\n\t\t\t\tdata = JSON.parse(rawMessage, dateReviver);\n\t\t\t}\n\t\t\telse if (Buffer.isBuffer(rawMessage)) {\n\t\t\t\tdata = unpack(rawMessage);\n\t\t\t}\n\t\t\telse if (Array.isArray(rawMessage)) {\n\t\t\t\tconst chunks = rawMessage as unknown as ReadonlyArray<Uint8Array>;\n\t\t\t\tdata = unpack(Buffer.concat(chunks));\n\t\t\t}\n\t\t\telse if (rawMessage instanceof ArrayBuffer) {\n\t\t\t\tdata = unpack(Buffer.from(rawMessage));\n\t\t\t}\n\t\t\telse if (ArrayBuffer.isView(rawMessage)) {\n\t\t\t\tconst view = rawMessage as NodeJS.ArrayBufferView;\n\t\t\t\tdata = unpack(Buffer.from(view.buffer, view.byteOffset, view.byteLength));\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.error('Unsupported worker message type received:', typeof rawMessage);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.error('Failed to parse worker message:', err);\n\t\t\treturn;\n\t\t}\n\n\t\tif (data.type === 'taskComplete') {\n\t\t\tlet worker = this._workers.find(x => x.id === workerId);\n\n\t\t\tif (!worker) {\n\t\t\t\tconsole.error('Unknown worker for taskComplete:', workerId);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet { taskId, messageId, error, result } = data;\n\t\t\tlet unpackedResult = result;\n\n\t\t\tif (!error && unpackedResult === null && data['packedResult']) {\n\t\t\t\ttry {\n\t\t\t\t\tunpackedResult = unpack(data['packedResult']);\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tconsole.error('Failed to unpack worker result', err);\n\t\t\t\t}\n\t\t\t}\n\t\t\tworker.activeTasks = worker.activeTasks.filter(a => a.taskId !== taskId);\n\n\t\t\tlet pendingTask = this._pendingTasks.get(taskId);\n\n\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Recv from Worker Server', data);\n\t\t\t}\n\n\t\t\tif (pendingTask) {\n\t\t\t\tif (pendingTask.promise) {\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\tpendingTask.promise.reject(unpackedResult);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tpendingTask.promise.resolve(unpackedResult);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclearTimeout(pendingTask.timeout);\n\t\t\t\tthis._pendingTasks.delete(taskId);\n\t\t\t}\n\n\t\t\t// Look up original request if it came from a client\n\t\t\tlet clientReqId = this._clientRequests[taskId];\n\n\t\t\tif (clientReqId) {\n\t\t\t\tlet res: ServerResponseModel = {\n\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\thasError: false,\n\t\t\t\t\tdata: result\n\t\t\t\t};\n\n\t\t\t\tif (error) {\n\t\t\t\t\tres.hasError = true;\n\t\t\t\t\tres.data = result;\n\t\t\t\t}\n\n\t\t\t\tlet clientReqWS = this._websocketManager.getWebSocket(clientReqId);\n\n\t\t\t\tif (clientReqWS) {\n\t\t\t\t\tif (!error && data['packedResult']) {\n\t\t\t\t\t\tthis._websocketManager.sendPackedBuffer(clientReqWS, messageId, false, data['packedResult'], data['encoding'] || 'msgpack');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._websocketManager.send(clientReqWS, res);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this._clientRequests[taskId]) {\n\t\t\t\t\tdelete this._clientRequests[taskId];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Try to dispatch more from the queue\n\t\t\tif (this._taskQueue.length) {\n\t\t\t\tthis.dispatchQueue();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic sendWorkerPayload(ws: WebSocket.WebSocket, payload: TaskPayload | string) {\n\t\tif (!ws) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (ws.readyState !== ws.OPEN) {\n\t\t\tif (typeof payload !== 'string') {\n\t\t\t\tconst task = payload;\n\n\t\t\t\tthis._taskQueue.unshift(task);\n\t\t\t\tthis.dispatchQueue();\n\n\t\t\t\tthis.disconnectWorker(ws['id_worker']);\n\t\t\t\tws.close();\n\n\t\t\tlet pendingTask = this._pendingTasks.get(task.taskId);\n\n\t\t\tif (pendingTask) {\n\t\t\t\tclearTimeout(pendingTask.timeout);\n\t\t\t\tthis._pendingTasks.delete(task.taskId);\n\n\t\t\t\tif (pendingTask.promise) {\n\t\t\t\t\tpendingTask.promise.reject('Worker socket not open.');\n\t\t\t\t}\n\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.disconnectWorker(ws['id_worker']);\n\t\t\t\tws.close();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof payload === 'string') {\n\t\t\ttry {\n\t\t\t\tws.send(payload);\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tthis.disconnectWorker(ws['id_worker']);\n\t\t\t\tws.close();\n\t\t\t\tconsole.error('Failed to send worker payload:', err);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst task = payload;\n\t\tconst payloadBuffer = pack(task);\n\n\t\ttry {\n\t\t\tws.send(payloadBuffer);\n\t\t}\n\t\tcatch (err) {\n\t\t\tthis._taskQueue.unshift(task);\n\t\t\tthis.dispatchQueue();\n\n\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Sending to Server', task);\n\t\t\t}\n\n\t\t\tthis.disconnectWorker(ws['id_worker']);\n\t\t\tws.close();\n\t\t\tconsole.error('Failed to send worker response:', err);\n\n\t\t\tlet pendingTask = this._pendingTasks.get(task.taskId);\n\n\t\t\tif (pendingTask) {\n\t\t\t\tclearTimeout(pendingTask.timeout);\n\t\t\t\tthis._pendingTasks.delete(task.taskId);\n\n\t\t\t\tif (pendingTask.promise) {\n\t\t\t\t\tpendingTask.promise.reject('Failed to send worker response: ' + err?.toString());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
|
package/models/method.model.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/models/method.model.ts"],"names":[],"mappings":"","file":"method.model.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { MethodManager } from '../managers/method.manager';\n\nexport interface MethodModel {\n\t[key: string]: MethodAllModel;\n}\n\nexport interface MethodAllModel {\n\tcheck?: SimpleSchema;\n\t// eslint-disable-next-line no-unused-vars\n\tfunction: (this: MethodManager & {id_ws: string, id_user: string, user: string}, ...parameters: any[]) => Promise<any | any[]>;\n\tskipValidation?: boolean;\n\tworkerTaskWeight?: number;\n\tskipWorker?: boolean;\n\tbypassSession?: boolean;\n\ttimeoutOverride?: number;\n\tmaxConcurrency?: number;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/models/method.model.ts"],"names":[],"mappings":"","file":"method.model.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { MethodManager } from '../managers/method.manager';\n\nexport interface MethodModel {\n\t[key: string]: MethodAllModel;\n}\n\nexport interface MethodAllModel {\n\tcheck?: SimpleSchema;\n\t// eslint-disable-next-line no-unused-vars\n\tfunction: (this: MethodManager & {id_ws: string, id_user: string, user: string}, ...parameters: any[]) => Promise<any | any[]>;\n\tskipValidation?: boolean;\n\tworkerTaskWeight?: number;\n\tskipWorker?: boolean;\n\ttargetWorkerIndex?: string | number;\n\tbypassSession?: boolean;\n\ttimeoutOverride?: number;\n\tmaxConcurrency?: number;\n}\n"]}
|
package/package.json
CHANGED
package/server-app.js
CHANGED
|
@@ -1202,7 +1202,7 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
1202
1202
|
};
|
|
1203
1203
|
ResolveIOMainServer.prototype.handleClientMessage = function (ws, msg) {
|
|
1204
1204
|
return __awaiter(this, void 0, void 0, function () {
|
|
1205
|
-
var messageRoute, messageDate, messageId, type, subType, pub, serverRes, offlineUpdates, i, update, data, updateRoute, updateDate, updateMessageId, updateType, method, serverResMethod, err_2, dataCopy, route, date, msgId, msgType, methodName, ack, method;
|
|
1205
|
+
var messageRoute, messageDate, messageId, type, subType, pub, serverRes, offlineUpdates, i, update, data, updateRoute, updateDate, updateMessageId, updateType, method, serverResMethod, err_2, dataCopy, route, date, msgId, msgType, methodName, ack, method, targetWorkerIndex, hasWorkerForMethod, errorRes;
|
|
1206
1206
|
var _a;
|
|
1207
1207
|
return __generator(this, function (_b) {
|
|
1208
1208
|
switch (_b.label) {
|
|
@@ -1386,11 +1386,24 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
1386
1386
|
this._websocketManager.send(ws, ack);
|
|
1387
1387
|
}
|
|
1388
1388
|
method = this._methodManager.getMethod(methodName);
|
|
1389
|
+
targetWorkerIndex = this._isWorkersEnabled && method ? method.targetWorkerIndex : null;
|
|
1390
|
+
hasWorkerForMethod = this._workerDispatcherManager ? this._workerDispatcherManager.hasWorkersForMethod(methodName) : false;
|
|
1391
|
+
if (targetWorkerIndex && this._isWorkersEnabled && !hasWorkerForMethod) {
|
|
1392
|
+
errorRes = {
|
|
1393
|
+
messageId: msgId,
|
|
1394
|
+
hasError: true,
|
|
1395
|
+
data: "Target worker ".concat(targetWorkerIndex, " not available for method ").concat(methodName)
|
|
1396
|
+
};
|
|
1397
|
+
if (ws && ws.readyState === ws.OPEN) {
|
|
1398
|
+
this._websocketManager.send(ws, errorRes);
|
|
1399
|
+
}
|
|
1400
|
+
return [2 /*return*/];
|
|
1401
|
+
}
|
|
1389
1402
|
if (!(method &&
|
|
1390
1403
|
!method.skipWorker &&
|
|
1391
1404
|
this._isWorkersEnabled &&
|
|
1392
1405
|
this._workerDispatcherManager &&
|
|
1393
|
-
|
|
1406
|
+
hasWorkerForMethod &&
|
|
1394
1407
|
methodName !== 'find' &&
|
|
1395
1408
|
methodName !== 'insertDocument' &&
|
|
1396
1409
|
methodName !== 'countWithQuery' &&
|
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 { 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 } 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\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._monitorManager = await MonitorManager.create();\n\t\tthis._monitorManagerFunction = new MonitorManagerFunction();\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._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\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\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\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}\n\t\t\t\t\t\tcatch {\n\t\t\t\t\t\t\tworkerIndex = 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\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\n\t\t\t\t\tlet workerIndexForLog = ws['workerIndex'] || 'UNKNOWN';\n\t\t\t\t\tconsole.log(new Date(), 'Worker Connected', workerIndexForLog, process.env.NODE_APP_INSTANCE);\n\n\t\t\t\t\tthis._workerDispatcherManager.addWorker(ws);\n\n\t\t\t\tlet interval = null;\n\t\t\t\tlet lastComm = null;\n\n\t\t\t\tthis._workerDispatcherManager.sendWorkerPayload(ws, 'ping');\n\t\n\t\t\t\tinterval = setInterval(() => {\n\t\t\t\t\tif (!lastComm) {\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}\n\t\t\t\t\telse {\n\t\t\t\t\t\tlastComm = null;\n\t\t\t\t\t\tthis._workerDispatcherManager.sendWorkerPayload(ws, 'ping');\n\t\t\t\t\t}\n\t\t\t\t}, 30000);\n\n\t\t\t\t\tws.on('message', (message: WebSocket.RawData) => {\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\tlastComm = new Date();\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\tlastComm = new Date();\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\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\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\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 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\n\t\tlet messageRoute = msg[0];\n\t\tlet messageDate = msg[1];\n\t\tlet messageId = msg[2];\n\t\tlet type = msg[3];\n\n\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\treturn;\n\t\t}\n\n\t\tif (type === 'subscription') {\n\t\t\tlet subType = msg[4];\n\t\t\tlet pub = msg[5];\n\n\t\t\tif (subType === 'sub') {\n\t\t\t\tawait this._subscriptionManager.subscribe(messageRoute, messageDate, ws, messageId, pub, msg.slice(6));\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._subscriptionManager.unsubscribe(messageRoute, messageDate, ws, messageId, pub, msg.slice(6));\n\t\t\t}\n\t\t}\n\t\telse if (!this.publicProgram && type === 'offline') {\n\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\tmessageId: messageId,\n\t\t\t\thasError: false,\n\t\t\t\tdata: 'ACK'\n\t\t\t};\n\n\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\tthis._websocketManager.send(ws, serverRes);\n\t\t\t}\n\n\t\t\tthis._offlineUpdates.push(ws);\n\t\t\tlet offlineUpdates = msg[4];\n\n\t\t\tfor (let i = 0; i < offlineUpdates.length; i++) {\n\t\t\t\tlet update = offlineUpdates[i];\n\n\t\t\t\tlet data = update.data;\n\n\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\tlet updateRoute = data.shift();\n\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\tlet updateDate = data.shift();\n\t\t\t\tlet updateMessageId = data.shift();\n\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\tlet updateType = data.shift();\n\t\t\t\tlet method = data.shift();\n\n\t\t\t\tlet serverResMethod: ServerResponseModel = {\n\t\t\t\t\tmessageId: updateMessageId,\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, serverResMethod);\n\t\t\t\t}\n\n\t\t\t\tif (method === 'insertDocument' && data[0] === 'driver-gps') {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t\n\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\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\tcreatedAt: new Date(),\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\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\t\t\t\t\telse {\n\t\t\t\t\t\tawait Logs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\tid_document: '',\n\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\tmethod: method,\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\tmessageId: messageId,\n\t\t\t\t\t\t\troute: messageRoute,\n\t\t\t\t\t\t\tclient: 'ResolveIO',\n\t\t\t\t\t\t\tinstance: 'backend.resolveio.com',\n\t\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this._methodManager._methods[method]) {\n\t\t\t\t\ttry {\n\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}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\tconsole.log(new Date(), 'Offline Error', JSON.stringify(err, null, 2));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (method === 'updateDocumentOffline' || method === 'updateDocumentPropsOffline') {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(data[0]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.log('Offline - Could not find method: ' + method);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._offlineUpdates.splice(this._offlineUpdates.map(a => a['id_socket']).indexOf(ws['id_socket']), 1);\n\t\t}\n\t\telse {\n\t\t\t// It's presumably a 'method' or something else\n\t\t\tlet dataCopy = [...msg];\n\n\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\tlet route = dataCopy.shift();\n\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\tlet date = dataCopy.shift();\n\t\t\tlet msgId = dataCopy.shift();\n\t\t\tlet msgType = dataCopy.shift();\n\t\t\t\n\t\t\tif (msgType === 'method') {\n\t\t\t\tlet methodName = dataCopy.shift();\n\n\t\t\t\tif (ws['user_readonly']) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\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\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\tcreatedAt: new Date(),\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\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\t\t\t\t\telse {\n\t\t\t\t\t\tawait Logs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\tid_document: '',\n\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\tmethod: methodName,\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\tmessageId: messageId,\n\t\t\t\t\t\t\troute: messageRoute,\n\t\t\t\t\t\t\tclient: 'ResolveIO',\n\t\t\t\t\t\t\tinstance: 'backend.resolveio.com',\n\t\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Immediately ACK\n\t\t\t\tlet ack: ServerResponseModel = {\n\t\t\t\t\tmessageId: msgId,\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, ack);\n\t\t\t\t}\n\n\t\t\t\tlet method = this._methodManager.getMethod(methodName);\n\n\t\t\t\tif (method &&\n\t\t\t\t\t!method.skipWorker &&\n\t\t\t\t\tthis._isWorkersEnabled &&\n\t\t\t\t\tthis._workerDispatcherManager &&\n\t\t\t\t\tthis._workerDispatcherManager.hasWorkers() &&\n\t\t\t\t\tmethodName !== 'find' &&\n\t\t\t\t\tmethodName !== 'insertDocument' &&\n\t\t\t\t\tmethodName !== 'countWithQuery' &&\n\t\t\t\t\tmethodName !== 'findOne' &&\n\t\t\t\t\tmethodName !== 'updateDocumentProps' &&\n\t\t\t\t\tmethodName !== 'findWithOptions' &&\n\t\t\t\t\tmethodName !== 'updateDocument' &&\n\t\t\t\t\tmethodName !== 'insertErrorLog' &&\n\t\t\t\t\tmethodName !== 'removeDocument' &&\n\t\t\t\t\tmethodName !== 'supportCreateBillingUser' &&\n\t\t\t\t\tmethodName !== 'getSignedUrl' &&\n\t\t\t\t\tmethodName !== 'getSignedUrls' &&\n\t\t\t\t\tmethodName !== 'getSignedUrlWithId' &&\n\t\t\t\t\tmethodName !== 'incorrectUser' &&\n\t\t\t\t\tmethodName !== 'reloadWS' &&\n\t\t\t\t\tmethodName !== 'reconnectWS' &&\n\t\t\t\t\tmethodName !== 'disconnectWS'\n\t\t\t\t) {\n\t\t\t\t\tthis._workerDispatcherManager.sendClientTask(msgId, methodName, dataCopy, {\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\tid_ws: ws['id_socket']\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// No worker available: do method locally\n\t\t\t\t\tawait this.callMethodLocally(ws, msgId, methodName, dataCopy);\n\t\t\t\t}\n\t\t\t}\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\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\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 jwt from 'jsonwebtoken';\nimport * as moment from 'moment-timezone';\nimport { unpack } from 'msgpackr';\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 } 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\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._monitorManager = await MonitorManager.create();\n\t\tthis._monitorManagerFunction = new MonitorManagerFunction();\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._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\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\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\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}\n\t\t\t\t\t\tcatch {\n\t\t\t\t\t\t\tworkerIndex = 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\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\n\t\t\t\t\tlet workerIndexForLog = ws['workerIndex'] || 'UNKNOWN';\n\t\t\t\t\tconsole.log(new Date(), 'Worker Connected', workerIndexForLog, process.env.NODE_APP_INSTANCE);\n\n\t\t\t\t\tthis._workerDispatcherManager.addWorker(ws);\n\n\t\t\t\tlet interval = null;\n\t\t\t\tlet lastComm = null;\n\n\t\t\t\tthis._workerDispatcherManager.sendWorkerPayload(ws, 'ping');\n\t\n\t\t\t\tinterval = setInterval(() => {\n\t\t\t\t\tif (!lastComm) {\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}\n\t\t\t\t\telse {\n\t\t\t\t\t\tlastComm = null;\n\t\t\t\t\t\tthis._workerDispatcherManager.sendWorkerPayload(ws, 'ping');\n\t\t\t\t\t}\n\t\t\t\t}, 30000);\n\n\t\t\t\t\tws.on('message', (message: WebSocket.RawData) => {\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\tlastComm = new Date();\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\tlastComm = new Date();\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\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\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\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 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\n\t\tlet messageRoute = msg[0];\n\t\tlet messageDate = msg[1];\n\t\tlet messageId = msg[2];\n\t\tlet type = msg[3];\n\n\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\treturn;\n\t\t}\n\n\t\tif (type === 'subscription') {\n\t\t\tlet subType = msg[4];\n\t\t\tlet pub = msg[5];\n\n\t\t\tif (subType === 'sub') {\n\t\t\t\tawait this._subscriptionManager.subscribe(messageRoute, messageDate, ws, messageId, pub, msg.slice(6));\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._subscriptionManager.unsubscribe(messageRoute, messageDate, ws, messageId, pub, msg.slice(6));\n\t\t\t}\n\t\t}\n\t\telse if (!this.publicProgram && type === 'offline') {\n\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\tmessageId: messageId,\n\t\t\t\thasError: false,\n\t\t\t\tdata: 'ACK'\n\t\t\t};\n\n\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\tthis._websocketManager.send(ws, serverRes);\n\t\t\t}\n\n\t\t\tthis._offlineUpdates.push(ws);\n\t\t\tlet offlineUpdates = msg[4];\n\n\t\t\tfor (let i = 0; i < offlineUpdates.length; i++) {\n\t\t\t\tlet update = offlineUpdates[i];\n\n\t\t\t\tlet data = update.data;\n\n\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\tlet updateRoute = data.shift();\n\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\tlet updateDate = data.shift();\n\t\t\t\tlet updateMessageId = data.shift();\n\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\tlet updateType = data.shift();\n\t\t\t\tlet method = data.shift();\n\n\t\t\t\tlet serverResMethod: ServerResponseModel = {\n\t\t\t\t\tmessageId: updateMessageId,\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, serverResMethod);\n\t\t\t\t}\n\n\t\t\t\tif (method === 'insertDocument' && data[0] === 'driver-gps') {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t\n\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\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\tcreatedAt: new Date(),\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\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\t\t\t\t\telse {\n\t\t\t\t\t\tawait Logs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\tid_document: '',\n\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\tmethod: method,\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\tmessageId: messageId,\n\t\t\t\t\t\t\troute: messageRoute,\n\t\t\t\t\t\t\tclient: 'ResolveIO',\n\t\t\t\t\t\t\tinstance: 'backend.resolveio.com',\n\t\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this._methodManager._methods[method]) {\n\t\t\t\t\ttry {\n\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}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\tconsole.log(new Date(), 'Offline Error', JSON.stringify(err, null, 2));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (method === 'updateDocumentOffline' || method === 'updateDocumentPropsOffline') {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(data[0]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.log('Offline - Could not find method: ' + method);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._offlineUpdates.splice(this._offlineUpdates.map(a => a['id_socket']).indexOf(ws['id_socket']), 1);\n\t\t}\n\t\telse {\n\t\t\t// It's presumably a 'method' or something else\n\t\t\tlet dataCopy = [...msg];\n\n\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\tlet route = dataCopy.shift();\n\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\tlet date = dataCopy.shift();\n\t\t\tlet msgId = dataCopy.shift();\n\t\t\tlet msgType = dataCopy.shift();\n\t\t\t\n\t\t\tif (msgType === 'method') {\n\t\t\t\tlet methodName = dataCopy.shift();\n\n\t\t\t\tif (ws['user_readonly']) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\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\tif (\n\t\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t\t) {\n\t\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\t\ttype: 'log',\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\tcreatedAt: new Date(),\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\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\t\t\t\t\telse {\n\t\t\t\t\t\tawait Logs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\tid_document: '',\n\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\tmethod: methodName,\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\tmessageId: messageId,\n\t\t\t\t\t\t\troute: messageRoute,\n\t\t\t\t\t\t\tclient: 'ResolveIO',\n\t\t\t\t\t\t\tinstance: 'backend.resolveio.com',\n\t\t\t\t\t\t\tinstance_index: process.env.NODE_APP_INSTANCE || '0'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Immediately ACK\n\t\t\t\tlet ack: ServerResponseModel = {\n\t\t\t\t\tmessageId: msgId,\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, ack);\n\t\t\t\t}\n\n\t\t\t\tlet method = this._methodManager.getMethod(methodName);\n\t\t\t\tconst targetWorkerIndex = this._isWorkersEnabled && method ? method.targetWorkerIndex : null;\n\t\t\t\tconst hasWorkerForMethod = this._workerDispatcherManager ? this._workerDispatcherManager.hasWorkersForMethod(methodName) : false;\n\n\t\t\t\tif (targetWorkerIndex && this._isWorkersEnabled && !hasWorkerForMethod) {\n\t\t\t\t\tconst errorRes: ServerResponseModel = {\n\t\t\t\t\t\tmessageId: msgId,\n\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\tdata: `Target worker ${targetWorkerIndex} not available for method ${methodName}`\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, errorRes);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (method &&\n\t\t\t\t\t!method.skipWorker &&\n\t\t\t\t\tthis._isWorkersEnabled &&\n\t\t\t\t\tthis._workerDispatcherManager &&\n\t\t\t\t\thasWorkerForMethod &&\n\t\t\t\t\tmethodName !== 'find' &&\n\t\t\t\t\tmethodName !== 'insertDocument' &&\n\t\t\t\t\tmethodName !== 'countWithQuery' &&\n\t\t\t\t\tmethodName !== 'findOne' &&\n\t\t\t\t\tmethodName !== 'updateDocumentProps' &&\n\t\t\t\t\tmethodName !== 'findWithOptions' &&\n\t\t\t\t\tmethodName !== 'updateDocument' &&\n\t\t\t\t\tmethodName !== 'insertErrorLog' &&\n\t\t\t\t\tmethodName !== 'removeDocument' &&\n\t\t\t\t\tmethodName !== 'supportCreateBillingUser' &&\n\t\t\t\t\tmethodName !== 'getSignedUrl' &&\n\t\t\t\t\tmethodName !== 'getSignedUrls' &&\n\t\t\t\t\tmethodName !== 'getSignedUrlWithId' &&\n\t\t\t\t\tmethodName !== 'incorrectUser' &&\n\t\t\t\t\tmethodName !== 'reloadWS' &&\n\t\t\t\t\tmethodName !== 'reconnectWS' &&\n\t\t\t\t\tmethodName !== 'disconnectWS'\n\t\t\t\t) {\n\t\t\t\t\tthis._workerDispatcherManager.sendClientTask(msgId, methodName, dataCopy, {\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\tid_ws: ws['id_socket']\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// No worker available: do method locally\n\t\t\t\t\tawait this.callMethodLocally(ws, msgId, methodName, dataCopy);\n\t\t\t\t}\n\t\t\t}\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\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\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"]}
|
|
@@ -210,6 +210,9 @@ function recordAggregateDependencies(collection, pipeline, result) {
|
|
|
210
210
|
filter: matchFilter || undefined,
|
|
211
211
|
meta: meta
|
|
212
212
|
});
|
|
213
|
+
if (!matchFilter) {
|
|
214
|
+
context.watchAllCollections.add(collection);
|
|
215
|
+
}
|
|
213
216
|
if (shouldWatchAllForAggregatePipeline(pipeline)) {
|
|
214
217
|
context.watchAllCollections.add(collection);
|
|
215
218
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/util/subscription-dependency-context.ts"],"names":[],"mappings":"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","file":"subscription-dependency-context.js","sourcesContent":["import { AsyncLocalStorage } from 'async_hooks';\nimport { deepCopy } from './common';\n\nexport interface QueryMeta {\n\tlimit?: number;\n\tskip?: number;\n\tsort?: any;\n}\n\nexport interface DependencyContextSnapshot {\n\tdependencies: Map<string, Set<string>>;\n\tfilters: Map<string, any[]>;\n\twatchAllCollections: Set<string>;\n\tqueryMetadata: Map<string, QueryMeta[]>;\n}\n\nexport interface PublicationContext {\n\tpublication?: string;\n\tsubscriptionData?: any[];\n\tuserId?: string;\n}\n\ninterface LookupTarget {\n\tfrom: string;\n\tas: string;\n\tlocalField?: string;\n\tforeignField?: string;\n\tlet?: Record<string, any>;\n\tpipeline?: any[];\n}\n\ninterface DependencyContext extends DependencyContextSnapshot, PublicationContext {}\n\nconst dependencyStorage = new AsyncLocalStorage<DependencyContext>();\n\nexport async function withDependencyTracking<T>(fn: () => Promise<T>, metadata?: PublicationContext): Promise<{ result: T; snapshot: DependencyContextSnapshot }> {\n\tconst context: DependencyContext = {\n\t\tdependencies: new Map(),\n\t\tfilters: new Map(),\n\t\twatchAllCollections: new Set(),\n\t\tqueryMetadata: new Map()\n\t};\n\n\tif (metadata?.publication) {\n\t\tcontext.publication = metadata.publication;\n\t}\n\n\tif (Array.isArray(metadata?.subscriptionData)) {\n\t\tcontext.subscriptionData = metadata.subscriptionData.slice();\n\t}\n\n\tif (metadata?.userId) {\n\t\tcontext.userId = metadata.userId;\n\t}\n\n\tlet result: T;\n\n\tawait dependencyStorage.run(context, async () => {\n\t\tresult = await fn();\n\t});\n\n\treturn {\n\t\tresult,\n\t\tsnapshot: {\n\t\t\tdependencies: cloneDependencyMap(context.dependencies),\n\t\t\tfilters: cloneFilterMap(context.filters),\n\t\t\twatchAllCollections: new Set(context.watchAllCollections),\n\t\t\tqueryMetadata: cloneQueryMetaMap(context.queryMetadata)\n\t\t}\n\t};\n}\n\nexport function getPublicationContext(): PublicationContext {\n\tconst context = dependencyStorage.getStore();\n\tif (!context) {\n\t\treturn {};\n\t}\n\n\tconst snapshot: PublicationContext = {};\n\n\tif (context.publication) {\n\t\tsnapshot.publication = context.publication;\n\t}\n\n\tif (Array.isArray(context.subscriptionData)) {\n\t\tsnapshot.subscriptionData = context.subscriptionData.slice();\n\t}\n\n\tif (context.userId) {\n\t\tsnapshot.userId = context.userId;\n\t}\n\n\treturn snapshot;\n}\n\nexport function recordDependencyResult(collection: string, result: unknown, options?: { filter?: any, meta?: QueryMeta }) {\n\tconst context = dependencyStorage.getStore();\n\n\tif (!context) {\n\t\treturn;\n\t}\n\n\tif (options?.filter) {\n\t\tlet filterList = context.filters.get(collection);\n\n\t\tif (!filterList) {\n\t\t\tfilterList = [];\n\t\t\tcontext.filters.set(collection, filterList);\n\t\t}\n\n\t\tfilterList.push(deepCopy(options.filter));\n\t\tcontext.watchAllCollections.delete(collection);\n\t}\n\n\tif (options?.meta) {\n\t\tlet metaList = context.queryMetadata.get(collection);\n\n\t\tif (!metaList) {\n\t\t\tmetaList = [];\n\t\t\tcontext.queryMetadata.set(collection, metaList);\n\t\t}\n\n\t\tmetaList.push(deepCopy(options.meta));\n\t}\n\n\tconst ids = new Set<string>();\n\tcollectIdsFromResult(result, ids);\n\n\tif (!ids.size && options?.filter) {\n\t\tcollectIdsFromFilter(options.filter, ids);\n\t}\n\n\tif (ids.size) {\n\t\tcontext.watchAllCollections.delete(collection);\n\t\tlet existing = context.dependencies.get(collection);\n\n\t\tif (!existing) {\n\t\t\texisting = new Set();\n\t\t\tcontext.dependencies.set(collection, existing);\n\t\t}\n\n\t\tfor (const id of ids) {\n\t\t\texisting.add(id);\n\t\t}\n\t}\n\telse if (!options?.filter) {\n\t\tcontext.watchAllCollections.add(collection);\n\t}\n}\n\nexport function recordAggregateDependencies(collection: string, pipeline: any[], result: unknown) {\n\tconst context = dependencyStorage.getStore();\n\n\tif (!context) {\n\t\treturn;\n\t}\n\n\tconst lookupTargets = extractLookupTargets(pipeline);\n\tconst lookupAliases = new Set<string>(lookupTargets.map(target => target.as).filter(Boolean));\n\tconst matchFilter = sanitizeMatchFilter(extractMatchFilter(pipeline), lookupAliases);\n\tconst meta = extractAggregateMeta(pipeline);\n\trecordDependencyResult(collection, result, {\n\t\tfilter: matchFilter || undefined,\n\t\tmeta\n\t});\n\n\tif (shouldWatchAllForAggregatePipeline(pipeline)) {\n\t\tcontext.watchAllCollections.add(collection);\n\t}\n\n\tif (!lookupTargets.length) {\n\t\treturn;\n\t}\n\n\tfor (const target of lookupTargets) {\n\t\tconst nestedValues: unknown[] = [];\n\t\tcollectLookupValues(result, target.as, nestedValues);\n\t\tconst rootDocs = Array.isArray(result) ? result : [result];\n\t\tconst pipelineFilters: any[] = [];\n\t\tlet pipelineUnresolved = false;\n\n\t\tfor (const rootDoc of rootDocs) {\n\t\t\tconst { filters: filtersFromPipeline, unresolved } = buildLookupPipelineFilters(rootDoc, target);\n\t\t\tif (unresolved) {\n\t\t\t\tpipelineUnresolved = true;\n\t\t\t}\n\t\t\tif (filtersFromPipeline?.length) {\n\t\t\t\tpipelineFilters.push(...filtersFromPipeline);\n\t\t\t}\n\t\t}\n\n\t\tconst filter = buildLookupFilter(result, target.localField, target.foreignField);\n\n\t\tconst uniquePipelineFilters = dedupeFilters(pipelineFilters);\n\n\t\tif (nestedValues.length) {\n\t\t\trecordDependencyResult(target.from, nestedValues, filter ? { filter } : undefined);\n\t\t}\n\n\t\tif (uniquePipelineFilters.length) {\n\t\t\tconst pipelineMeta = extractAggregationMetaFromPipeline(target.pipeline);\n\t\t\tfor (const pipelineFilter of uniquePipelineFilters) {\n\t\t\t\trecordDependencyResult(target.from, [], { filter: pipelineFilter, meta: pipelineMeta });\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!nestedValues.length && filter) {\n\t\t\trecordDependencyResult(target.from, [], { filter });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!nestedValues.length) {\n\t\t\tif (pipelineUnresolved) {\n\t\t\t\tcontext.watchAllCollections.add(target.from);\n\t\t\t}\n\t\t\telse if (!target.pipeline || !target.pipeline.length) {\n\t\t\t\tcontext.watchAllCollections.add(target.from);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction shouldWatchAllForAggregatePipeline(pipeline: any[]): boolean {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn false;\n\t}\n\n\treturn pipeline.some(stage => isGroupStageWithPush(stage));\n}\n\nfunction isGroupStageWithPush(stage: any): boolean {\n\tif (!stage || typeof stage !== 'object') {\n\t\treturn false;\n\t}\n\n\tconst groupStage = stage.$group;\n\tif (!groupStage || typeof groupStage !== 'object') {\n\t\treturn false;\n\t}\n\n\treturn Object.values(groupStage).some(accumulator => isPushAccumulator(accumulator));\n}\n\nfunction isPushAccumulator(accumulator: unknown): boolean {\n\treturn !!(accumulator && typeof accumulator === 'object' && Object.prototype.hasOwnProperty.call(accumulator, '$push'));\n}\n\nfunction extractLookupTargets(pipeline: any[]): LookupTarget[] {\n\tconst lookups: LookupTarget[] = [];\n\n\tif (!Array.isArray(pipeline)) {\n\t\treturn lookups;\n\t}\n\n\tfor (const stage of pipeline) {\n\t\tif (stage && stage.$lookup && typeof stage.$lookup === 'object') {\n\t\t\tconst lookup = stage.$lookup;\n\t\t\tif (typeof lookup.from === 'string' && typeof lookup.as === 'string') {\n\t\t\t\tlookups.push({\n\t\t\t\t\tfrom: lookup.from,\n\t\t\t\t\tas: lookup.as,\n\t\t\t\t\tlocalField: typeof lookup.localField === 'string' ? lookup.localField : undefined,\n\t\t\t\t\tforeignField: typeof lookup.foreignField === 'string' ? lookup.foreignField : undefined,\n\t\t\t\t\tlet: lookup.let && typeof lookup.let === 'object' ? lookup.let : undefined,\n\t\t\t\t\tpipeline: Array.isArray(lookup.pipeline) ? lookup.pipeline : undefined\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\treturn lookups;\n}\n\nfunction extractMatchFilter(pipeline: any[]): any {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn null;\n\t}\n\n\tconst filters: any[] = [];\n\n\tfor (const stage of pipeline) {\n\t\tif (stage && stage.$match && typeof stage.$match === 'object') {\n\t\t\tfilters.push(deepCopy(stage.$match));\n\t\t}\n\t}\n\n\tif (!filters.length) {\n\t\treturn null;\n\t}\n\n\tif (filters.length === 1) {\n\t\treturn filters[0];\n\t}\n\n\treturn { $and: filters };\n}\n\nfunction sanitizeMatchFilter(filter: any, lookupAliases: Set<string>) {\n\tif (!filter || !lookupAliases?.size) {\n\t\treturn filter;\n\t}\n\n\treturn sanitizeFilterNode(filter, lookupAliases);\n}\n\nfunction sanitizeFilterNode(node: any, lookupAliases: Set<string>): any {\n\tif (!node) {\n\t\treturn null;\n\t}\n\n\tif (Array.isArray(node)) {\n\t\tconst sanitizedArray = node\n\t\t\t.map(entry => sanitizeFilterNode(entry, lookupAliases))\n\t\t\t.filter(isMeaningfulFilterNode);\n\n\t\treturn sanitizedArray.length ? sanitizedArray : null;\n\t}\n\n\tif (typeof node !== 'object') {\n\t\treturn node;\n\t}\n\n\tconst result = {};\n\n\tfor (const [key, value] of Object.entries(node)) {\n\t\tif (key === '$and' || key === '$or' || key === '$nor') {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tconst sanitizedChildren = value\n\t\t\t\t\t.map(entry => sanitizeFilterNode(entry, lookupAliases))\n\t\t\t\t\t.filter(isMeaningfulFilterNode);\n\n\t\t\t\tif (sanitizedChildren.length) {\n\t\t\t\t\tresult[key] = sanitizedChildren;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst rootKey = key.split('.')[0];\n\n\t\tif (lookupAliases.has(rootKey)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tresult[key] = value;\n\t}\n\n\treturn Object.keys(result).length ? result : null;\n}\n\nfunction isMeaningfulFilterNode(node: any) {\n\tif (!node) {\n\t\treturn false;\n\t}\n\n\tif (Array.isArray(node)) {\n\t\treturn node.length > 0;\n\t}\n\n\tif (typeof node !== 'object') {\n\t\treturn true;\n\t}\n\n\treturn Object.keys(node).length > 0;\n}\n\nfunction extractAggregateMeta(pipeline: any[]): QueryMeta {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn null;\n\t}\n\n\tlet limit = undefined;\n\tlet skip = undefined;\n\tlet sort = null;\n\n\tfor (const stage of pipeline) {\n\t\tif (stage?.$limit !== undefined && typeof stage.$limit === 'number') {\n\t\t\tlimit = stage.$limit;\n\t\t}\n\t\telse if (stage?.$skip !== undefined && typeof stage.$skip === 'number') {\n\t\t\tskip = stage.$skip;\n\t\t}\n\t\telse if (stage?.$sort && typeof stage.$sort === 'object') {\n\t\t\tsort = deepCopy(stage.$sort);\n\t\t}\n\t}\n\n\tconst meta: QueryMeta = {};\n\n\tif (limit !== undefined) {\n\t\tmeta.limit = limit;\n\t}\n\n\tif (skip !== undefined) {\n\t\tmeta.skip = skip;\n\t}\n\n\tif (sort) {\n\t\tmeta.sort = sort;\n\t}\n\n\treturn Object.keys(meta).length ? meta : null;\n}\n\nfunction extractAggregationMetaFromPipeline(pipeline: any[]): QueryMeta {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn null;\n\t}\n\n\tlet limit = undefined;\n\tlet skip = undefined;\n\tlet sort = null;\n\n\tfor (const stage of pipeline) {\n\t\tif (stage?.$limit !== undefined && typeof stage.$limit === 'number') {\n\t\t\tlimit = stage.$limit;\n\t\t}\n\t\telse if (stage?.$skip !== undefined && typeof stage.$skip === 'number') {\n\t\t\tskip = stage.$skip;\n\t\t}\n\t\telse if (stage?.$sort && typeof stage.$sort === 'object') {\n\t\t\tsort = deepCopy(stage.$sort);\n\t\t}\n\t}\n\n\tconst meta: QueryMeta = {};\n\n\tif (limit !== undefined) {\n\t\tmeta.limit = limit;\n\t}\n\n\tif (skip !== undefined) {\n\t\tmeta.skip = skip;\n\t}\n\n\tif (sort) {\n\t\tmeta.sort = sort;\n\t}\n\n\treturn Object.keys(meta).length ? meta : null;\n}\n\nfunction collectLookupValues(source: unknown, path: string, output: unknown[]) {\n\tif (!source) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(source)) {\n\t\tfor (const item of source) {\n\t\t\tcollectLookupValues(item, path, output);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof source !== 'object') {\n\t\treturn;\n\t}\n\n\tconst pathSegments = path.split('.');\n\tcollectLookupPathValues(source as Record<string, unknown>, pathSegments, 0, output);\n}\n\nfunction collectLookupPathValues(value: Record<string, unknown>, path: string[], index: number, output: unknown[]) {\n\tif (!value) {\n\t\treturn;\n\t}\n\n\tconst current = value[path[index]];\n\n\tif (current === undefined) {\n\t\treturn;\n\t}\n\n\tif (index === path.length - 1) {\n\t\toutput.push(current);\n\t\treturn;\n\t}\n\n\tif (Array.isArray(current)) {\n\t\tfor (const item of current) {\n\t\t\tif (item && typeof item === 'object') {\n\t\t\t\tcollectLookupPathValues(item as Record<string, unknown>, path, index + 1, output);\n\t\t\t}\n\t\t}\n\t}\n\telse if (current && typeof current === 'object') {\n\t\tcollectLookupPathValues(current as Record<string, unknown>, path, index + 1, output);\n\t}\n}\n\nfunction buildLookupFilter(result: unknown, localField?: string, foreignField?: string) {\n\tif (!localField || !foreignField) {\n\t\treturn null;\n\t}\n\n\tconst values: any[] = [];\n\tconst segments = localField.split('.');\n\tcollectFieldValues(result, segments, 0, values);\n\n\tconst uniqueValues = dedupeFilterValues(values);\n\n\tif (!uniqueValues.length) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\t[foreignField]: {\n\t\t\t$in: uniqueValues\n\t\t}\n\t};\n}\n\nfunction collectFieldValues(source: unknown, path: string[], index: number, output: any[]) {\n\tif (!source) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(source)) {\n\t\tfor (const item of source) {\n\t\t\tcollectFieldValues(item, path, index, output);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof source !== 'object') {\n\t\treturn;\n\t}\n\n\tconst obj = source as Record<string, unknown>;\n\tconst key = path[index];\n\tconst current = obj[key];\n\n\tif (current === undefined) {\n\t\treturn;\n\t}\n\n\tif (index === path.length - 1) {\n\t\tappendFilterValue(output, current);\n\t\treturn;\n\t}\n\n\tif (Array.isArray(current)) {\n\t\tfor (const item of current) {\n\t\t\tcollectFieldValues(item, path, index + 1, output);\n\t\t}\n\t}\n\telse {\n\t\tcollectFieldValues(current, path, index + 1, output);\n\t}\n}\n\nfunction appendFilterValue(output: any[], value: any) {\n\tif (value === undefined || value === null) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tfor (const item of value) {\n\t\t\tappendFilterValue(output, item);\n\t\t}\n\t\treturn;\n\t}\n\n\toutput.push(value);\n}\n\nfunction dedupeFilterValues(values: any[]): any[] {\n\tconst unique = new Map<string, any>();\n\n\tfor (const value of values) {\n\t\tconst key = serializeFilterValue(value);\n\t\tif (!unique.has(key)) {\n\t\t\tunique.set(key, value);\n\t\t}\n\t}\n\n\treturn Array.from(unique.values());\n}\n\nfunction serializeFilterValue(value: any): string {\n\tif (value === null || value === undefined) {\n\t\treturn 'null';\n\t}\n\n\tif (typeof value === 'object') {\n\t\tif (typeof value.toHexString === 'function') {\n\t\t\treturn value.toHexString();\n\t\t}\n\n\t\tif (value instanceof Date) {\n\t\t\treturn value.toISOString();\n\t\t}\n\n\t\tif (typeof value.toString === 'function' && value.toString !== Object.prototype.toString) {\n\t\t\treturn value.toString();\n\t\t}\n\n\t\ttry {\n\t\t\treturn JSON.stringify(value);\n\t\t}\n\t\tcatch {\n\t\t\treturn '[object]';\n\t\t}\n\t}\n\n\treturn String(value);\n}\n\nfunction collectIdsFromResult(source: unknown, ids: Set<string>, visited = new WeakSet<object>()) {\n\tif (!source) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(source)) {\n\t\tfor (const item of source) {\n\t\t\tcollectIdsFromResult(item, ids, visited);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof source !== 'object') {\n\t\treturn;\n\t}\n\n\tconst objectSource = source as Record<string, unknown>;\n\n\tif (visited.has(objectSource)) {\n\t\treturn;\n\t}\n\n\tvisited.add(objectSource);\n\n\tconst normalizedId = normalizeId(objectSource._id);\n\n\tif (normalizedId) {\n\t\tids.add(normalizedId);\n\t}\n\n\tfor (const value of Object.values(objectSource)) {\n\t\tif (value && (typeof value === 'object' || Array.isArray(value))) {\n\t\t\tcollectIdsFromResult(value, ids, visited);\n\t\t}\n\t}\n}\n\nfunction collectIdsFromFilter(filter: unknown, ids: Set<string>) {\n\tif (!filter) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(filter)) {\n\t\tfor (const item of filter) {\n\t\t\tcollectIdsFromFilter(item, ids);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof filter !== 'object') {\n\t\treturn;\n\t}\n\n\tconst filterObject = filter as Record<string, unknown>;\n\n\tif (filterObject._id !== undefined) {\n\t\tcollectIdsFromFilterValue(filterObject._id, ids);\n\t}\n\n\tfor (const [key, value] of Object.entries(filterObject)) {\n\t\tif (key === '$or' || key === '$and' || key === '$nor') {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tfor (const item of value) {\n\t\t\t\t\tcollectIdsFromFilter(item, ids);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (key !== '_id' && value && typeof value === 'object') {\n\t\t\tcollectIdsFromFilter(value, ids);\n\t\t}\n\t}\n}\n\nfunction collectIdsFromFilterValue(value: unknown, ids: Set<string>) {\n\tif (value === null || value === undefined) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tfor (const item of value) {\n\t\t\tcollectIdsFromFilterValue(item, ids);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof value === 'object') {\n\t\tfor (const [key, inner] of Object.entries(value as Record<string, unknown>)) {\n\t\t\tif (key === '$in' || key === '$nin' || key === '$all') {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t\telse if (key === '$eq' || key === '$ne') {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t\telse if (key === '$or' || key === '$and' || key === '$nor') {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t}\n\t\treturn;\n\t}\n\n\tconst normalized = normalizeId(value);\n\n\tif (normalized) {\n\t\tids.add(normalized);\n\t}\n}\n\nfunction normalizeId(value: unknown): string {\n\tif (value === null || value === undefined) {\n\t\treturn null;\n\t}\n\n\tif (typeof value === 'string') {\n\t\tconst trimmed = value.trim();\n\t\treturn trimmed.length ? trimmed : null;\n\t}\n\n\tif (typeof value === 'number' || typeof value === 'bigint') {\n\t\treturn value.toString();\n\t}\n\n\tif (typeof value === 'object') {\n\t\tconst objValue = value as { toHexString?: () => string, toString?: () => string };\n\n\t\tif (typeof objValue.toHexString === 'function') {\n\t\t\treturn objValue.toHexString();\n\t\t}\n\n\t\tif (value instanceof Date) {\n\t\t\treturn value.toISOString();\n\t\t}\n\n\t\tif (typeof objValue.toString === 'function') {\n\t\t\tconst str = objValue.toString();\n\t\t\tif (str && str !== '[object Object]') {\n\t\t\t\treturn str;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction cloneDependencyMap(original: Map<string, Set<string>>): Map<string, Set<string>> {\n\tconst cloned = new Map<string, Set<string>>();\n\n\tfor (const [collection, ids] of original.entries()) {\n\t\tcloned.set(collection, new Set(ids));\n\t}\n\n\treturn cloned;\n}\n\nfunction cloneFilterMap(original: Map<string, any[]>): Map<string, any[]> {\n\tconst cloned = new Map<string, any[]>();\n\n\tfor (const [collection, filters] of original.entries()) {\n\t\tcloned.set(collection, filters.map(filter => deepCopy(filter)));\n\t}\n\n\treturn cloned;\n}\n\nfunction cloneQueryMetaMap(original: Map<string, QueryMeta[]>): Map<string, QueryMeta[]> {\n\tconst cloned = new Map<string, QueryMeta[]>();\n\n\tfor (const [collection, metaList] of original.entries()) {\n\t\tcloned.set(collection, metaList.map(meta => deepCopy(meta)));\n\t}\n\n\treturn cloned;\n}\n\n\nfunction buildLookupPipelineFilters(rootDoc: any, target: LookupTarget): { filters: any[], unresolved: boolean } {\n\tif (!target.pipeline || !target.pipeline.length) {\n\t\treturn { filters: [], unresolved: false };\n\t}\n\nconst matchStages = target.pipeline.map(stage => ({ stage, base: stage.$match })).filter(entry => entry.base);\n\n\tif (!matchStages.length) {\n\t\treturn buildLookupPipelineFromStack(target.pipeline, [], rootDoc, target.let);\n\t}\n\n\tconst letValuesResult = resolveLetVariables(rootDoc, target.let);\n\n\tif (!letValuesResult.resolved) {\n\t\treturn { filters: [], unresolved: true };\n\t}\n\n\tconst combinedMatches = [];\n\n\tfor (const { base } of matchStages) {\n\t\tconst substitutionState = { unresolved: false };\n\t\tconst substituted = substituteLetVariables(base, letValuesResult.values, rootDoc, substitutionState);\n\n\t\tif (substitutionState.unresolved || containsUnresolvedLetReference(substituted)) {\n\t\t\treturn { filters: [], unresolved: true };\n\t\t}\n\n\t\tcombinedMatches.push(substituted);\n\t}\n\n\tif (!combinedMatches.length) {\n\t\treturn buildLookupPipelineFromStack(target.pipeline, [], rootDoc, target.let);\n\t}\n\n\tif (combinedMatches.length === 1) {\n\t\treturn { filters: [combinedMatches[0]], unresolved: false };\n\t}\n\n\treturn { filters: [{ $and: combinedMatches }], unresolved: false };\n}\n\nfunction buildLookupPipelineFromStack(pipeline: any[], initialFilters: any[], rootDoc: any, letMap: Record<string, any>) {\n\tlet currentFilters = initialFilters.slice();\n\tlet unresolved = false;\n\n\tconst entries = pipeline.map(stage => stage ? Object.keys(stage)[0] : null);\n\n\tfor (let i = 0; i < pipeline.length; i++) {\n\t\tconst stage = pipeline[i];\n\t\tconst stageType = entries[i];\n\n\t\tif (stageType === '$match' && stage.$match) {\n\t\t\tconst letValuesResult = resolveLetVariables(rootDoc, letMap);\n\t\t\tif (!letValuesResult.resolved) {\n\t\t\t\tunresolved = true;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst substitutionState = { unresolved: false };\n\t\t\tconst substituted = substituteLetVariables(stage.$match, letValuesResult.values, rootDoc, substitutionState);\n\n\t\t\tif (substitutionState.unresolved || containsUnresolvedLetReference(substituted)) {\n\t\t\t\tunresolved = true;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcurrentFilters.push(substituted);\n\t\t}\n\t\telse if (stageType === '$match') {\n\t\t\tunresolved = true;\n\t\t\tbreak;\n\t\t}\n\t\telse if (stageType === '$facet') {\n\t\t\tunresolved = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!currentFilters.length) {\n\t\treturn { filters: [], unresolved };\n\t}\n\n\tif (currentFilters.length === 1) {\n\t\treturn { filters: currentFilters, unresolved };\n\t}\n\n\treturn { filters: [{ $and: currentFilters }], unresolved };\n}\n\nfunction resolveLetVariables(rootDoc: any, letMap: Record<string, any>) {\n\tif (!letMap || typeof letMap !== 'object') {\n\t\treturn { resolved: true, values: {} };\n\t}\n\n\tconst values = {};\n\n\tfor (const [key, expression] of Object.entries(letMap)) {\n\t\tconst evaluation = evaluateLetExpression(rootDoc, expression);\n\n\t\tif (!evaluation.resolved) {\n\t\t\treturn { resolved: false, values: null };\n\t\t}\n\n\t\tvalues[key] = evaluation.value;\n\t}\n\n\treturn { resolved: true, values };\n}\n\nfunction evaluateLetExpression(rootDoc: any, expression: any): { resolved: boolean, value: any } {\n\tif (typeof expression === 'string') {\n\t\tif (expression.startsWith('$$ROOT.')) {\n\t\t\tconst path = expression.slice('$$ROOT.'.length);\n\t\t\treturn { resolved: true, value: getValueByPath(rootDoc, path) };\n\t\t}\n\t\telse if (expression === '$$ROOT') {\n\t\t\treturn { resolved: true, value: rootDoc };\n\t\t}\n\t\telse if (expression.startsWith('$$')) {\n\t\t\treturn { resolved: false, value: null };\n\t\t}\n\t\telse if (expression.startsWith('$')) {\n\t\t\tconst path = expression.slice(1);\n\t\t\treturn { resolved: true, value: getValueByPath(rootDoc, path) };\n\t\t}\n\t\telse {\n\t\t\treturn { resolved: true, value: expression };\n\t\t}\n\t}\n\telse if (Array.isArray(expression)) {\n\t\treturn { resolved: false, value: null };\n\t}\n\telse if (expression && typeof expression === 'object') {\n\t\treturn { resolved: false, value: null };\n\t}\n\n\treturn { resolved: true, value: expression };\n}\n\nfunction substituteLetVariables(node: any, letValues: Record<string, any>, rootDoc: any, state: { unresolved: boolean }) {\n\tif (Array.isArray(node)) {\n\t\treturn node.map(item => substituteLetVariables(item, letValues, rootDoc, state));\n\t}\n\n\tif (node && typeof node === 'object') {\n\t\tconst output = {};\n\n\t\tfor (const [key, value] of Object.entries(node)) {\n\t\t\toutput[key] = substituteLetVariables(value, letValues, rootDoc, state);\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tif (typeof node === 'string') {\n\t\tif (node.startsWith('$$ROOT.')) {\n\t\t\tconst path = node.slice('$$ROOT.'.length);\n\t\t\treturn getValueByPath(rootDoc, path);\n\t\t}\n\n\t\tif (node === '$$ROOT') {\n\t\t\treturn rootDoc;\n\t\t}\n\n\t\tif (node.startsWith('$$')) {\n\t\t\tconst varName = node.slice(2);\n\n\t\t\tif (Object.prototype.hasOwnProperty.call(letValues, varName)) {\n\t\t\t\treturn letValues[varName];\n\t\t\t}\n\n\t\t\tstate.unresolved = true;\n\t\t\treturn node;\n\t\t}\n\t}\n\n\treturn node;\n}\n\nfunction containsUnresolvedLetReference(node: any): boolean {\n\tif (typeof node === 'string') {\n\t\treturn node.includes('$$');\n\t}\n\n\tif (Array.isArray(node)) {\n\t\treturn node.some(item => containsUnresolvedLetReference(item));\n\t}\n\n\tif (node && typeof node === 'object') {\n\t\treturn Object.values(node).some(value => containsUnresolvedLetReference(value));\n\t}\n\n\treturn false;\n}\n\nfunction getValueByPath(source: any, path: string) {\n\tif (!source || !path) {\n\t\treturn undefined;\n\t}\n\n\tconst segments = path.split('.');\n\tlet current = source;\n\n\tfor (const segment of segments) {\n\t\tif (current === null || current === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (Array.isArray(current)) {\n\t\t\tconst index = parseInt(segment, 10);\n\n\t\t\tif (isNaN(index) || index < 0 || index >= current.length) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tcurrent = current[index];\n\t\t}\n\t\telse {\n\t\t\tcurrent = current[segment];\n\t\t}\n\t}\n\n\treturn current;\n}\n\nfunction canonicalizeFilter(filter: any): string {\n\treturn JSON.stringify(sortKeys(filter));\n}\n\nfunction sortKeys(value: any): any {\n\tif (Array.isArray(value)) {\n\t\treturn value.map(item => sortKeys(item));\n\t}\n\n\tif (value && typeof value === 'object') {\n\t\tconst sorted = {};\n\t\tconst keys = Object.keys(value).sort();\n\n\t\tfor (const key of keys) {\n\t\t\tsorted[key] = sortKeys(value[key]);\n\t\t}\n\n\t\treturn sorted;\n\t}\n\n\treturn value;\n}\n\nfunction dedupeFilters(filters: any[]): any[] {\n\tconst map = new Map<string, any>();\n\n\tfor (const filter of filters) {\n\t\tconst key = canonicalizeFilter(filter);\n\n\t\tif (!map.has(key)) {\n\t\t\tmap.set(key, filter);\n\t\t}\n\t}\n\n\treturn Array.from(map.values());\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/util/subscription-dependency-context.ts"],"names":[],"mappings":"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","file":"subscription-dependency-context.js","sourcesContent":["import { AsyncLocalStorage } from 'async_hooks';\nimport { deepCopy } from './common';\n\nexport interface QueryMeta {\n\tlimit?: number;\n\tskip?: number;\n\tsort?: any;\n}\n\nexport interface DependencyContextSnapshot {\n\tdependencies: Map<string, Set<string>>;\n\tfilters: Map<string, any[]>;\n\twatchAllCollections: Set<string>;\n\tqueryMetadata: Map<string, QueryMeta[]>;\n}\n\nexport interface PublicationContext {\n\tpublication?: string;\n\tsubscriptionData?: any[];\n\tuserId?: string;\n}\n\ninterface LookupTarget {\n\tfrom: string;\n\tas: string;\n\tlocalField?: string;\n\tforeignField?: string;\n\tlet?: Record<string, any>;\n\tpipeline?: any[];\n}\n\ninterface DependencyContext extends DependencyContextSnapshot, PublicationContext {}\n\nconst dependencyStorage = new AsyncLocalStorage<DependencyContext>();\n\nexport async function withDependencyTracking<T>(fn: () => Promise<T>, metadata?: PublicationContext): Promise<{ result: T; snapshot: DependencyContextSnapshot }> {\n\tconst context: DependencyContext = {\n\t\tdependencies: new Map(),\n\t\tfilters: new Map(),\n\t\twatchAllCollections: new Set(),\n\t\tqueryMetadata: new Map()\n\t};\n\n\tif (metadata?.publication) {\n\t\tcontext.publication = metadata.publication;\n\t}\n\n\tif (Array.isArray(metadata?.subscriptionData)) {\n\t\tcontext.subscriptionData = metadata.subscriptionData.slice();\n\t}\n\n\tif (metadata?.userId) {\n\t\tcontext.userId = metadata.userId;\n\t}\n\n\tlet result: T;\n\n\tawait dependencyStorage.run(context, async () => {\n\t\tresult = await fn();\n\t});\n\n\treturn {\n\t\tresult,\n\t\tsnapshot: {\n\t\t\tdependencies: cloneDependencyMap(context.dependencies),\n\t\t\tfilters: cloneFilterMap(context.filters),\n\t\t\twatchAllCollections: new Set(context.watchAllCollections),\n\t\t\tqueryMetadata: cloneQueryMetaMap(context.queryMetadata)\n\t\t}\n\t};\n}\n\nexport function getPublicationContext(): PublicationContext {\n\tconst context = dependencyStorage.getStore();\n\tif (!context) {\n\t\treturn {};\n\t}\n\n\tconst snapshot: PublicationContext = {};\n\n\tif (context.publication) {\n\t\tsnapshot.publication = context.publication;\n\t}\n\n\tif (Array.isArray(context.subscriptionData)) {\n\t\tsnapshot.subscriptionData = context.subscriptionData.slice();\n\t}\n\n\tif (context.userId) {\n\t\tsnapshot.userId = context.userId;\n\t}\n\n\treturn snapshot;\n}\n\nexport function recordDependencyResult(collection: string, result: unknown, options?: { filter?: any, meta?: QueryMeta }) {\n\tconst context = dependencyStorage.getStore();\n\n\tif (!context) {\n\t\treturn;\n\t}\n\n\tif (options?.filter) {\n\t\tlet filterList = context.filters.get(collection);\n\n\t\tif (!filterList) {\n\t\t\tfilterList = [];\n\t\t\tcontext.filters.set(collection, filterList);\n\t\t}\n\n\t\tfilterList.push(deepCopy(options.filter));\n\t\tcontext.watchAllCollections.delete(collection);\n\t}\n\n\tif (options?.meta) {\n\t\tlet metaList = context.queryMetadata.get(collection);\n\n\t\tif (!metaList) {\n\t\t\tmetaList = [];\n\t\t\tcontext.queryMetadata.set(collection, metaList);\n\t\t}\n\n\t\tmetaList.push(deepCopy(options.meta));\n\t}\n\n\tconst ids = new Set<string>();\n\tcollectIdsFromResult(result, ids);\n\n\tif (!ids.size && options?.filter) {\n\t\tcollectIdsFromFilter(options.filter, ids);\n\t}\n\n\tif (ids.size) {\n\t\tcontext.watchAllCollections.delete(collection);\n\t\tlet existing = context.dependencies.get(collection);\n\n\t\tif (!existing) {\n\t\t\texisting = new Set();\n\t\t\tcontext.dependencies.set(collection, existing);\n\t\t}\n\n\t\tfor (const id of ids) {\n\t\t\texisting.add(id);\n\t\t}\n\t}\n\telse if (!options?.filter) {\n\t\tcontext.watchAllCollections.add(collection);\n\t}\n}\n\nexport function recordAggregateDependencies(collection: string, pipeline: any[], result: unknown) {\n\tconst context = dependencyStorage.getStore();\n\n\tif (!context) {\n\t\treturn;\n\t}\n\n\tconst lookupTargets = extractLookupTargets(pipeline);\n\tconst lookupAliases = new Set<string>(lookupTargets.map(target => target.as).filter(Boolean));\n\tconst matchFilter = sanitizeMatchFilter(extractMatchFilter(pipeline), lookupAliases);\n\tconst meta = extractAggregateMeta(pipeline);\n\trecordDependencyResult(collection, result, {\n\t\tfilter: matchFilter || undefined,\n\t\tmeta\n\t});\n\n\tif (!matchFilter) {\n\t\tcontext.watchAllCollections.add(collection);\n\t}\n\n\tif (shouldWatchAllForAggregatePipeline(pipeline)) {\n\t\tcontext.watchAllCollections.add(collection);\n\t}\n\n\tif (!lookupTargets.length) {\n\t\treturn;\n\t}\n\n\tfor (const target of lookupTargets) {\n\t\tconst nestedValues: unknown[] = [];\n\t\tcollectLookupValues(result, target.as, nestedValues);\n\t\tconst rootDocs = Array.isArray(result) ? result : [result];\n\t\tconst pipelineFilters: any[] = [];\n\t\tlet pipelineUnresolved = false;\n\n\t\tfor (const rootDoc of rootDocs) {\n\t\t\tconst { filters: filtersFromPipeline, unresolved } = buildLookupPipelineFilters(rootDoc, target);\n\t\t\tif (unresolved) {\n\t\t\t\tpipelineUnresolved = true;\n\t\t\t}\n\t\t\tif (filtersFromPipeline?.length) {\n\t\t\t\tpipelineFilters.push(...filtersFromPipeline);\n\t\t\t}\n\t\t}\n\n\t\tconst filter = buildLookupFilter(result, target.localField, target.foreignField);\n\n\t\tconst uniquePipelineFilters = dedupeFilters(pipelineFilters);\n\n\t\tif (nestedValues.length) {\n\t\t\trecordDependencyResult(target.from, nestedValues, filter ? { filter } : undefined);\n\t\t}\n\n\t\tif (uniquePipelineFilters.length) {\n\t\t\tconst pipelineMeta = extractAggregationMetaFromPipeline(target.pipeline);\n\t\t\tfor (const pipelineFilter of uniquePipelineFilters) {\n\t\t\t\trecordDependencyResult(target.from, [], { filter: pipelineFilter, meta: pipelineMeta });\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!nestedValues.length && filter) {\n\t\t\trecordDependencyResult(target.from, [], { filter });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!nestedValues.length) {\n\t\t\tif (pipelineUnresolved) {\n\t\t\t\tcontext.watchAllCollections.add(target.from);\n\t\t\t}\n\t\t\telse if (!target.pipeline || !target.pipeline.length) {\n\t\t\t\tcontext.watchAllCollections.add(target.from);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction shouldWatchAllForAggregatePipeline(pipeline: any[]): boolean {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn false;\n\t}\n\n\treturn pipeline.some(stage => isGroupStageWithPush(stage));\n}\n\nfunction isGroupStageWithPush(stage: any): boolean {\n\tif (!stage || typeof stage !== 'object') {\n\t\treturn false;\n\t}\n\n\tconst groupStage = stage.$group;\n\tif (!groupStage || typeof groupStage !== 'object') {\n\t\treturn false;\n\t}\n\n\treturn Object.values(groupStage).some(accumulator => isPushAccumulator(accumulator));\n}\n\nfunction isPushAccumulator(accumulator: unknown): boolean {\n\treturn !!(accumulator && typeof accumulator === 'object' && Object.prototype.hasOwnProperty.call(accumulator, '$push'));\n}\n\nfunction extractLookupTargets(pipeline: any[]): LookupTarget[] {\n\tconst lookups: LookupTarget[] = [];\n\n\tif (!Array.isArray(pipeline)) {\n\t\treturn lookups;\n\t}\n\n\tfor (const stage of pipeline) {\n\t\tif (stage && stage.$lookup && typeof stage.$lookup === 'object') {\n\t\t\tconst lookup = stage.$lookup;\n\t\t\tif (typeof lookup.from === 'string' && typeof lookup.as === 'string') {\n\t\t\t\tlookups.push({\n\t\t\t\t\tfrom: lookup.from,\n\t\t\t\t\tas: lookup.as,\n\t\t\t\t\tlocalField: typeof lookup.localField === 'string' ? lookup.localField : undefined,\n\t\t\t\t\tforeignField: typeof lookup.foreignField === 'string' ? lookup.foreignField : undefined,\n\t\t\t\t\tlet: lookup.let && typeof lookup.let === 'object' ? lookup.let : undefined,\n\t\t\t\t\tpipeline: Array.isArray(lookup.pipeline) ? lookup.pipeline : undefined\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\treturn lookups;\n}\n\nfunction extractMatchFilter(pipeline: any[]): any {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn null;\n\t}\n\n\tconst filters: any[] = [];\n\n\tfor (const stage of pipeline) {\n\t\tif (stage && stage.$match && typeof stage.$match === 'object') {\n\t\t\tfilters.push(deepCopy(stage.$match));\n\t\t}\n\t}\n\n\tif (!filters.length) {\n\t\treturn null;\n\t}\n\n\tif (filters.length === 1) {\n\t\treturn filters[0];\n\t}\n\n\treturn { $and: filters };\n}\n\nfunction sanitizeMatchFilter(filter: any, lookupAliases: Set<string>) {\n\tif (!filter || !lookupAliases?.size) {\n\t\treturn filter;\n\t}\n\n\treturn sanitizeFilterNode(filter, lookupAliases);\n}\n\nfunction sanitizeFilterNode(node: any, lookupAliases: Set<string>): any {\n\tif (!node) {\n\t\treturn null;\n\t}\n\n\tif (Array.isArray(node)) {\n\t\tconst sanitizedArray = node\n\t\t\t.map(entry => sanitizeFilterNode(entry, lookupAliases))\n\t\t\t.filter(isMeaningfulFilterNode);\n\n\t\treturn sanitizedArray.length ? sanitizedArray : null;\n\t}\n\n\tif (typeof node !== 'object') {\n\t\treturn node;\n\t}\n\n\tconst result = {};\n\n\tfor (const [key, value] of Object.entries(node)) {\n\t\tif (key === '$and' || key === '$or' || key === '$nor') {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tconst sanitizedChildren = value\n\t\t\t\t\t.map(entry => sanitizeFilterNode(entry, lookupAliases))\n\t\t\t\t\t.filter(isMeaningfulFilterNode);\n\n\t\t\t\tif (sanitizedChildren.length) {\n\t\t\t\t\tresult[key] = sanitizedChildren;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst rootKey = key.split('.')[0];\n\n\t\tif (lookupAliases.has(rootKey)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tresult[key] = value;\n\t}\n\n\treturn Object.keys(result).length ? result : null;\n}\n\nfunction isMeaningfulFilterNode(node: any) {\n\tif (!node) {\n\t\treturn false;\n\t}\n\n\tif (Array.isArray(node)) {\n\t\treturn node.length > 0;\n\t}\n\n\tif (typeof node !== 'object') {\n\t\treturn true;\n\t}\n\n\treturn Object.keys(node).length > 0;\n}\n\nfunction extractAggregateMeta(pipeline: any[]): QueryMeta {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn null;\n\t}\n\n\tlet limit = undefined;\n\tlet skip = undefined;\n\tlet sort = null;\n\n\tfor (const stage of pipeline) {\n\t\tif (stage?.$limit !== undefined && typeof stage.$limit === 'number') {\n\t\t\tlimit = stage.$limit;\n\t\t}\n\t\telse if (stage?.$skip !== undefined && typeof stage.$skip === 'number') {\n\t\t\tskip = stage.$skip;\n\t\t}\n\t\telse if (stage?.$sort && typeof stage.$sort === 'object') {\n\t\t\tsort = deepCopy(stage.$sort);\n\t\t}\n\t}\n\n\tconst meta: QueryMeta = {};\n\n\tif (limit !== undefined) {\n\t\tmeta.limit = limit;\n\t}\n\n\tif (skip !== undefined) {\n\t\tmeta.skip = skip;\n\t}\n\n\tif (sort) {\n\t\tmeta.sort = sort;\n\t}\n\n\treturn Object.keys(meta).length ? meta : null;\n}\n\nfunction extractAggregationMetaFromPipeline(pipeline: any[]): QueryMeta {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn null;\n\t}\n\n\tlet limit = undefined;\n\tlet skip = undefined;\n\tlet sort = null;\n\n\tfor (const stage of pipeline) {\n\t\tif (stage?.$limit !== undefined && typeof stage.$limit === 'number') {\n\t\t\tlimit = stage.$limit;\n\t\t}\n\t\telse if (stage?.$skip !== undefined && typeof stage.$skip === 'number') {\n\t\t\tskip = stage.$skip;\n\t\t}\n\t\telse if (stage?.$sort && typeof stage.$sort === 'object') {\n\t\t\tsort = deepCopy(stage.$sort);\n\t\t}\n\t}\n\n\tconst meta: QueryMeta = {};\n\n\tif (limit !== undefined) {\n\t\tmeta.limit = limit;\n\t}\n\n\tif (skip !== undefined) {\n\t\tmeta.skip = skip;\n\t}\n\n\tif (sort) {\n\t\tmeta.sort = sort;\n\t}\n\n\treturn Object.keys(meta).length ? meta : null;\n}\n\nfunction collectLookupValues(source: unknown, path: string, output: unknown[]) {\n\tif (!source) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(source)) {\n\t\tfor (const item of source) {\n\t\t\tcollectLookupValues(item, path, output);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof source !== 'object') {\n\t\treturn;\n\t}\n\n\tconst pathSegments = path.split('.');\n\tcollectLookupPathValues(source as Record<string, unknown>, pathSegments, 0, output);\n}\n\nfunction collectLookupPathValues(value: Record<string, unknown>, path: string[], index: number, output: unknown[]) {\n\tif (!value) {\n\t\treturn;\n\t}\n\n\tconst current = value[path[index]];\n\n\tif (current === undefined) {\n\t\treturn;\n\t}\n\n\tif (index === path.length - 1) {\n\t\toutput.push(current);\n\t\treturn;\n\t}\n\n\tif (Array.isArray(current)) {\n\t\tfor (const item of current) {\n\t\t\tif (item && typeof item === 'object') {\n\t\t\t\tcollectLookupPathValues(item as Record<string, unknown>, path, index + 1, output);\n\t\t\t}\n\t\t}\n\t}\n\telse if (current && typeof current === 'object') {\n\t\tcollectLookupPathValues(current as Record<string, unknown>, path, index + 1, output);\n\t}\n}\n\nfunction buildLookupFilter(result: unknown, localField?: string, foreignField?: string) {\n\tif (!localField || !foreignField) {\n\t\treturn null;\n\t}\n\n\tconst values: any[] = [];\n\tconst segments = localField.split('.');\n\tcollectFieldValues(result, segments, 0, values);\n\n\tconst uniqueValues = dedupeFilterValues(values);\n\n\tif (!uniqueValues.length) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\t[foreignField]: {\n\t\t\t$in: uniqueValues\n\t\t}\n\t};\n}\n\nfunction collectFieldValues(source: unknown, path: string[], index: number, output: any[]) {\n\tif (!source) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(source)) {\n\t\tfor (const item of source) {\n\t\t\tcollectFieldValues(item, path, index, output);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof source !== 'object') {\n\t\treturn;\n\t}\n\n\tconst obj = source as Record<string, unknown>;\n\tconst key = path[index];\n\tconst current = obj[key];\n\n\tif (current === undefined) {\n\t\treturn;\n\t}\n\n\tif (index === path.length - 1) {\n\t\tappendFilterValue(output, current);\n\t\treturn;\n\t}\n\n\tif (Array.isArray(current)) {\n\t\tfor (const item of current) {\n\t\t\tcollectFieldValues(item, path, index + 1, output);\n\t\t}\n\t}\n\telse {\n\t\tcollectFieldValues(current, path, index + 1, output);\n\t}\n}\n\nfunction appendFilterValue(output: any[], value: any) {\n\tif (value === undefined || value === null) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tfor (const item of value) {\n\t\t\tappendFilterValue(output, item);\n\t\t}\n\t\treturn;\n\t}\n\n\toutput.push(value);\n}\n\nfunction dedupeFilterValues(values: any[]): any[] {\n\tconst unique = new Map<string, any>();\n\n\tfor (const value of values) {\n\t\tconst key = serializeFilterValue(value);\n\t\tif (!unique.has(key)) {\n\t\t\tunique.set(key, value);\n\t\t}\n\t}\n\n\treturn Array.from(unique.values());\n}\n\nfunction serializeFilterValue(value: any): string {\n\tif (value === null || value === undefined) {\n\t\treturn 'null';\n\t}\n\n\tif (typeof value === 'object') {\n\t\tif (typeof value.toHexString === 'function') {\n\t\t\treturn value.toHexString();\n\t\t}\n\n\t\tif (value instanceof Date) {\n\t\t\treturn value.toISOString();\n\t\t}\n\n\t\tif (typeof value.toString === 'function' && value.toString !== Object.prototype.toString) {\n\t\t\treturn value.toString();\n\t\t}\n\n\t\ttry {\n\t\t\treturn JSON.stringify(value);\n\t\t}\n\t\tcatch {\n\t\t\treturn '[object]';\n\t\t}\n\t}\n\n\treturn String(value);\n}\n\nfunction collectIdsFromResult(source: unknown, ids: Set<string>, visited = new WeakSet<object>()) {\n\tif (!source) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(source)) {\n\t\tfor (const item of source) {\n\t\t\tcollectIdsFromResult(item, ids, visited);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof source !== 'object') {\n\t\treturn;\n\t}\n\n\tconst objectSource = source as Record<string, unknown>;\n\n\tif (visited.has(objectSource)) {\n\t\treturn;\n\t}\n\n\tvisited.add(objectSource);\n\n\tconst normalizedId = normalizeId(objectSource._id);\n\n\tif (normalizedId) {\n\t\tids.add(normalizedId);\n\t}\n\n\tfor (const value of Object.values(objectSource)) {\n\t\tif (value && (typeof value === 'object' || Array.isArray(value))) {\n\t\t\tcollectIdsFromResult(value, ids, visited);\n\t\t}\n\t}\n}\n\nfunction collectIdsFromFilter(filter: unknown, ids: Set<string>) {\n\tif (!filter) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(filter)) {\n\t\tfor (const item of filter) {\n\t\t\tcollectIdsFromFilter(item, ids);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof filter !== 'object') {\n\t\treturn;\n\t}\n\n\tconst filterObject = filter as Record<string, unknown>;\n\n\tif (filterObject._id !== undefined) {\n\t\tcollectIdsFromFilterValue(filterObject._id, ids);\n\t}\n\n\tfor (const [key, value] of Object.entries(filterObject)) {\n\t\tif (key === '$or' || key === '$and' || key === '$nor') {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tfor (const item of value) {\n\t\t\t\t\tcollectIdsFromFilter(item, ids);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (key !== '_id' && value && typeof value === 'object') {\n\t\t\tcollectIdsFromFilter(value, ids);\n\t\t}\n\t}\n}\n\nfunction collectIdsFromFilterValue(value: unknown, ids: Set<string>) {\n\tif (value === null || value === undefined) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tfor (const item of value) {\n\t\t\tcollectIdsFromFilterValue(item, ids);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof value === 'object') {\n\t\tfor (const [key, inner] of Object.entries(value as Record<string, unknown>)) {\n\t\t\tif (key === '$in' || key === '$nin' || key === '$all') {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t\telse if (key === '$eq' || key === '$ne') {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t\telse if (key === '$or' || key === '$and' || key === '$nor') {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t}\n\t\treturn;\n\t}\n\n\tconst normalized = normalizeId(value);\n\n\tif (normalized) {\n\t\tids.add(normalized);\n\t}\n}\n\nfunction normalizeId(value: unknown): string {\n\tif (value === null || value === undefined) {\n\t\treturn null;\n\t}\n\n\tif (typeof value === 'string') {\n\t\tconst trimmed = value.trim();\n\t\treturn trimmed.length ? trimmed : null;\n\t}\n\n\tif (typeof value === 'number' || typeof value === 'bigint') {\n\t\treturn value.toString();\n\t}\n\n\tif (typeof value === 'object') {\n\t\tconst objValue = value as { toHexString?: () => string, toString?: () => string };\n\n\t\tif (typeof objValue.toHexString === 'function') {\n\t\t\treturn objValue.toHexString();\n\t\t}\n\n\t\tif (value instanceof Date) {\n\t\t\treturn value.toISOString();\n\t\t}\n\n\t\tif (typeof objValue.toString === 'function') {\n\t\t\tconst str = objValue.toString();\n\t\t\tif (str && str !== '[object Object]') {\n\t\t\t\treturn str;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction cloneDependencyMap(original: Map<string, Set<string>>): Map<string, Set<string>> {\n\tconst cloned = new Map<string, Set<string>>();\n\n\tfor (const [collection, ids] of original.entries()) {\n\t\tcloned.set(collection, new Set(ids));\n\t}\n\n\treturn cloned;\n}\n\nfunction cloneFilterMap(original: Map<string, any[]>): Map<string, any[]> {\n\tconst cloned = new Map<string, any[]>();\n\n\tfor (const [collection, filters] of original.entries()) {\n\t\tcloned.set(collection, filters.map(filter => deepCopy(filter)));\n\t}\n\n\treturn cloned;\n}\n\nfunction cloneQueryMetaMap(original: Map<string, QueryMeta[]>): Map<string, QueryMeta[]> {\n\tconst cloned = new Map<string, QueryMeta[]>();\n\n\tfor (const [collection, metaList] of original.entries()) {\n\t\tcloned.set(collection, metaList.map(meta => deepCopy(meta)));\n\t}\n\n\treturn cloned;\n}\n\n\nfunction buildLookupPipelineFilters(rootDoc: any, target: LookupTarget): { filters: any[], unresolved: boolean } {\n\tif (!target.pipeline || !target.pipeline.length) {\n\t\treturn { filters: [], unresolved: false };\n\t}\n\nconst matchStages = target.pipeline.map(stage => ({ stage, base: stage.$match })).filter(entry => entry.base);\n\n\tif (!matchStages.length) {\n\t\treturn buildLookupPipelineFromStack(target.pipeline, [], rootDoc, target.let);\n\t}\n\n\tconst letValuesResult = resolveLetVariables(rootDoc, target.let);\n\n\tif (!letValuesResult.resolved) {\n\t\treturn { filters: [], unresolved: true };\n\t}\n\n\tconst combinedMatches = [];\n\n\tfor (const { base } of matchStages) {\n\t\tconst substitutionState = { unresolved: false };\n\t\tconst substituted = substituteLetVariables(base, letValuesResult.values, rootDoc, substitutionState);\n\n\t\tif (substitutionState.unresolved || containsUnresolvedLetReference(substituted)) {\n\t\t\treturn { filters: [], unresolved: true };\n\t\t}\n\n\t\tcombinedMatches.push(substituted);\n\t}\n\n\tif (!combinedMatches.length) {\n\t\treturn buildLookupPipelineFromStack(target.pipeline, [], rootDoc, target.let);\n\t}\n\n\tif (combinedMatches.length === 1) {\n\t\treturn { filters: [combinedMatches[0]], unresolved: false };\n\t}\n\n\treturn { filters: [{ $and: combinedMatches }], unresolved: false };\n}\n\nfunction buildLookupPipelineFromStack(pipeline: any[], initialFilters: any[], rootDoc: any, letMap: Record<string, any>) {\n\tlet currentFilters = initialFilters.slice();\n\tlet unresolved = false;\n\n\tconst entries = pipeline.map(stage => stage ? Object.keys(stage)[0] : null);\n\n\tfor (let i = 0; i < pipeline.length; i++) {\n\t\tconst stage = pipeline[i];\n\t\tconst stageType = entries[i];\n\n\t\tif (stageType === '$match' && stage.$match) {\n\t\t\tconst letValuesResult = resolveLetVariables(rootDoc, letMap);\n\t\t\tif (!letValuesResult.resolved) {\n\t\t\t\tunresolved = true;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst substitutionState = { unresolved: false };\n\t\t\tconst substituted = substituteLetVariables(stage.$match, letValuesResult.values, rootDoc, substitutionState);\n\n\t\t\tif (substitutionState.unresolved || containsUnresolvedLetReference(substituted)) {\n\t\t\t\tunresolved = true;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcurrentFilters.push(substituted);\n\t\t}\n\t\telse if (stageType === '$match') {\n\t\t\tunresolved = true;\n\t\t\tbreak;\n\t\t}\n\t\telse if (stageType === '$facet') {\n\t\t\tunresolved = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!currentFilters.length) {\n\t\treturn { filters: [], unresolved };\n\t}\n\n\tif (currentFilters.length === 1) {\n\t\treturn { filters: currentFilters, unresolved };\n\t}\n\n\treturn { filters: [{ $and: currentFilters }], unresolved };\n}\n\nfunction resolveLetVariables(rootDoc: any, letMap: Record<string, any>) {\n\tif (!letMap || typeof letMap !== 'object') {\n\t\treturn { resolved: true, values: {} };\n\t}\n\n\tconst values = {};\n\n\tfor (const [key, expression] of Object.entries(letMap)) {\n\t\tconst evaluation = evaluateLetExpression(rootDoc, expression);\n\n\t\tif (!evaluation.resolved) {\n\t\t\treturn { resolved: false, values: null };\n\t\t}\n\n\t\tvalues[key] = evaluation.value;\n\t}\n\n\treturn { resolved: true, values };\n}\n\nfunction evaluateLetExpression(rootDoc: any, expression: any): { resolved: boolean, value: any } {\n\tif (typeof expression === 'string') {\n\t\tif (expression.startsWith('$$ROOT.')) {\n\t\t\tconst path = expression.slice('$$ROOT.'.length);\n\t\t\treturn { resolved: true, value: getValueByPath(rootDoc, path) };\n\t\t}\n\t\telse if (expression === '$$ROOT') {\n\t\t\treturn { resolved: true, value: rootDoc };\n\t\t}\n\t\telse if (expression.startsWith('$$')) {\n\t\t\treturn { resolved: false, value: null };\n\t\t}\n\t\telse if (expression.startsWith('$')) {\n\t\t\tconst path = expression.slice(1);\n\t\t\treturn { resolved: true, value: getValueByPath(rootDoc, path) };\n\t\t}\n\t\telse {\n\t\t\treturn { resolved: true, value: expression };\n\t\t}\n\t}\n\telse if (Array.isArray(expression)) {\n\t\treturn { resolved: false, value: null };\n\t}\n\telse if (expression && typeof expression === 'object') {\n\t\treturn { resolved: false, value: null };\n\t}\n\n\treturn { resolved: true, value: expression };\n}\n\nfunction substituteLetVariables(node: any, letValues: Record<string, any>, rootDoc: any, state: { unresolved: boolean }) {\n\tif (Array.isArray(node)) {\n\t\treturn node.map(item => substituteLetVariables(item, letValues, rootDoc, state));\n\t}\n\n\tif (node && typeof node === 'object') {\n\t\tconst output = {};\n\n\t\tfor (const [key, value] of Object.entries(node)) {\n\t\t\toutput[key] = substituteLetVariables(value, letValues, rootDoc, state);\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tif (typeof node === 'string') {\n\t\tif (node.startsWith('$$ROOT.')) {\n\t\t\tconst path = node.slice('$$ROOT.'.length);\n\t\t\treturn getValueByPath(rootDoc, path);\n\t\t}\n\n\t\tif (node === '$$ROOT') {\n\t\t\treturn rootDoc;\n\t\t}\n\n\t\tif (node.startsWith('$$')) {\n\t\t\tconst varName = node.slice(2);\n\n\t\t\tif (Object.prototype.hasOwnProperty.call(letValues, varName)) {\n\t\t\t\treturn letValues[varName];\n\t\t\t}\n\n\t\t\tstate.unresolved = true;\n\t\t\treturn node;\n\t\t}\n\t}\n\n\treturn node;\n}\n\nfunction containsUnresolvedLetReference(node: any): boolean {\n\tif (typeof node === 'string') {\n\t\treturn node.includes('$$');\n\t}\n\n\tif (Array.isArray(node)) {\n\t\treturn node.some(item => containsUnresolvedLetReference(item));\n\t}\n\n\tif (node && typeof node === 'object') {\n\t\treturn Object.values(node).some(value => containsUnresolvedLetReference(value));\n\t}\n\n\treturn false;\n}\n\nfunction getValueByPath(source: any, path: string) {\n\tif (!source || !path) {\n\t\treturn undefined;\n\t}\n\n\tconst segments = path.split('.');\n\tlet current = source;\n\n\tfor (const segment of segments) {\n\t\tif (current === null || current === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (Array.isArray(current)) {\n\t\t\tconst index = parseInt(segment, 10);\n\n\t\t\tif (isNaN(index) || index < 0 || index >= current.length) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tcurrent = current[index];\n\t\t}\n\t\telse {\n\t\t\tcurrent = current[segment];\n\t\t}\n\t}\n\n\treturn current;\n}\n\nfunction canonicalizeFilter(filter: any): string {\n\treturn JSON.stringify(sortKeys(filter));\n}\n\nfunction sortKeys(value: any): any {\n\tif (Array.isArray(value)) {\n\t\treturn value.map(item => sortKeys(item));\n\t}\n\n\tif (value && typeof value === 'object') {\n\t\tconst sorted = {};\n\t\tconst keys = Object.keys(value).sort();\n\n\t\tfor (const key of keys) {\n\t\t\tsorted[key] = sortKeys(value[key]);\n\t\t}\n\n\t\treturn sorted;\n\t}\n\n\treturn value;\n}\n\nfunction dedupeFilters(filters: any[]): any[] {\n\tconst map = new Map<string, any>();\n\n\tfor (const filter of filters) {\n\t\tconst key = canonicalizeFilter(filter);\n\n\t\tif (!map.has(key)) {\n\t\t\tmap.set(key, filter);\n\t\t}\n\t}\n\n\treturn Array.from(map.values());\n}\n"]}
|