@resolveio/server-lib 20.14.32 → 20.14.33
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.
|
@@ -93,6 +93,7 @@ export declare class SubscriptionManager {
|
|
|
93
93
|
private getWatchedDatabases;
|
|
94
94
|
private resolveOplogMode;
|
|
95
95
|
private resolveLocalOplogResyncIntervalMs;
|
|
96
|
+
private resolveResumeTokenMaxAgeMs;
|
|
96
97
|
private parsePositiveNumber;
|
|
97
98
|
private parsePositiveFloat;
|
|
98
99
|
private isChangeStreamUnsupported;
|
|
@@ -1194,6 +1194,14 @@ var SubscriptionManager = /** @class */ (function () {
|
|
|
1194
1194
|
|| config['SUBSCRIPTION_OPLOG_RESYNC_MS'];
|
|
1195
1195
|
return this.parsePositiveNumber(raw);
|
|
1196
1196
|
};
|
|
1197
|
+
SubscriptionManager.prototype.resolveResumeTokenMaxAgeMs = function () {
|
|
1198
|
+
var config = this.serverConfig || resolveio_server_app_1.ResolveIOServer.getServerConfig() || {};
|
|
1199
|
+
var raw = process.env.OPLOG_RESUME_TOKEN_MAX_AGE_MS
|
|
1200
|
+
|| process.env.SUBSCRIPTION_OPLOG_RESUME_TOKEN_MAX_AGE_MS
|
|
1201
|
+
|| config['OPLOG_RESUME_TOKEN_MAX_AGE_MS']
|
|
1202
|
+
|| config['SUBSCRIPTION_OPLOG_RESUME_TOKEN_MAX_AGE_MS'];
|
|
1203
|
+
return this.parsePositiveNumber(raw);
|
|
1204
|
+
};
|
|
1197
1205
|
SubscriptionManager.prototype.parsePositiveNumber = function (value) {
|
|
1198
1206
|
if (typeof value === 'number' && Number.isFinite(value) && value > 0) {
|
|
1199
1207
|
return value;
|
|
@@ -1337,31 +1345,66 @@ var SubscriptionManager = /** @class */ (function () {
|
|
|
1337
1345
|
};
|
|
1338
1346
|
SubscriptionManager.prototype.loadResumeToken = function () {
|
|
1339
1347
|
return __awaiter(this, void 0, void 0, function () {
|
|
1340
|
-
var
|
|
1341
|
-
|
|
1342
|
-
|
|
1348
|
+
var db_1, loadToken, mongoManager, _a, error_3;
|
|
1349
|
+
var _this = this;
|
|
1350
|
+
return __generator(this, function (_b) {
|
|
1351
|
+
switch (_b.label) {
|
|
1343
1352
|
case 0:
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
if (!
|
|
1353
|
+
_b.trys.push([0, 5, , 6]);
|
|
1354
|
+
db_1 = resolveio_server_app_1.ResolveIOServer.getMainDB();
|
|
1355
|
+
if (!db_1) {
|
|
1347
1356
|
return [2 /*return*/, null];
|
|
1348
1357
|
}
|
|
1349
|
-
|
|
1358
|
+
loadToken = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
1359
|
+
var collection, doc, token, maxAgeMs, ageMs;
|
|
1360
|
+
return __generator(this, function (_a) {
|
|
1361
|
+
switch (_a.label) {
|
|
1362
|
+
case 0:
|
|
1363
|
+
collection = db_1.collection(this.RESUME_TOKEN_COLLECTION);
|
|
1364
|
+
return [4 /*yield*/, collection.findOne({ _id: this.getResumeTokenDocId() })];
|
|
1365
|
+
case 1:
|
|
1366
|
+
doc = _a.sent();
|
|
1367
|
+
token = (doc === null || doc === void 0 ? void 0 : doc.token) || null;
|
|
1368
|
+
if (!token) {
|
|
1369
|
+
return [2 /*return*/, null];
|
|
1370
|
+
}
|
|
1371
|
+
maxAgeMs = this.resolveResumeTokenMaxAgeMs();
|
|
1372
|
+
if (!(maxAgeMs > 0 && (doc === null || doc === void 0 ? void 0 : doc.updatedAt) instanceof Date)) return [3 /*break*/, 3];
|
|
1373
|
+
ageMs = Date.now() - doc.updatedAt.getTime();
|
|
1374
|
+
if (!(ageMs > maxAgeMs)) return [3 /*break*/, 3];
|
|
1375
|
+
return [4 /*yield*/, collection.deleteOne({ _id: this.getResumeTokenDocId() })];
|
|
1376
|
+
case 2:
|
|
1377
|
+
_a.sent();
|
|
1378
|
+
console.log(new Date(), 'Sub Manager', 'Resume token expired, clearing', (0, common_1.round)(ageMs / 1000), 's');
|
|
1379
|
+
return [2 /*return*/, null];
|
|
1380
|
+
case 3: return [2 /*return*/, token];
|
|
1381
|
+
}
|
|
1382
|
+
});
|
|
1383
|
+
}); };
|
|
1384
|
+
mongoManager = resolveio_server_app_1.ResolveIOServer.getMongoManager();
|
|
1385
|
+
if (!mongoManager) return [3 /*break*/, 2];
|
|
1386
|
+
return [4 /*yield*/, mongoManager.runWithoutSession(loadToken)];
|
|
1350
1387
|
case 1:
|
|
1351
|
-
|
|
1352
|
-
return [
|
|
1353
|
-
case 2:
|
|
1354
|
-
|
|
1388
|
+
_a = _b.sent();
|
|
1389
|
+
return [3 /*break*/, 4];
|
|
1390
|
+
case 2: return [4 /*yield*/, loadToken()];
|
|
1391
|
+
case 3:
|
|
1392
|
+
_a = _b.sent();
|
|
1393
|
+
_b.label = 4;
|
|
1394
|
+
case 4: return [2 /*return*/, _a];
|
|
1395
|
+
case 5:
|
|
1396
|
+
error_3 = _b.sent();
|
|
1355
1397
|
console.log(new Date(), 'Sub Manager', 'Failed to load oplog resume token', error_3);
|
|
1356
1398
|
return [2 /*return*/, null];
|
|
1357
|
-
case
|
|
1399
|
+
case 6: return [2 /*return*/];
|
|
1358
1400
|
}
|
|
1359
1401
|
});
|
|
1360
1402
|
});
|
|
1361
1403
|
};
|
|
1362
1404
|
SubscriptionManager.prototype.saveResumeToken = function (token) {
|
|
1363
1405
|
return __awaiter(this, void 0, void 0, function () {
|
|
1364
|
-
var
|
|
1406
|
+
var db_2, saveToken, mongoManager, error_4;
|
|
1407
|
+
var _this = this;
|
|
1365
1408
|
return __generator(this, function (_a) {
|
|
1366
1409
|
switch (_a.label) {
|
|
1367
1410
|
case 0:
|
|
@@ -1370,44 +1413,80 @@ var SubscriptionManager = /** @class */ (function () {
|
|
|
1370
1413
|
}
|
|
1371
1414
|
_a.label = 1;
|
|
1372
1415
|
case 1:
|
|
1373
|
-
_a.trys.push([1,
|
|
1374
|
-
|
|
1375
|
-
if (!
|
|
1416
|
+
_a.trys.push([1, 6, , 7]);
|
|
1417
|
+
db_2 = resolveio_server_app_1.ResolveIOServer.getMainDB();
|
|
1418
|
+
if (!db_2) {
|
|
1376
1419
|
return [2 /*return*/];
|
|
1377
1420
|
}
|
|
1378
|
-
|
|
1421
|
+
saveToken = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
1422
|
+
return __generator(this, function (_a) {
|
|
1423
|
+
switch (_a.label) {
|
|
1424
|
+
case 0: return [4 /*yield*/, db_2.collection(this.RESUME_TOKEN_COLLECTION).updateOne({ _id: this.getResumeTokenDocId() }, { $set: { token: token, updatedAt: new Date() } }, { upsert: true })];
|
|
1425
|
+
case 1:
|
|
1426
|
+
_a.sent();
|
|
1427
|
+
return [2 /*return*/];
|
|
1428
|
+
}
|
|
1429
|
+
});
|
|
1430
|
+
}); };
|
|
1431
|
+
mongoManager = resolveio_server_app_1.ResolveIOServer.getMongoManager();
|
|
1432
|
+
if (!mongoManager) return [3 /*break*/, 3];
|
|
1433
|
+
return [4 /*yield*/, mongoManager.runWithoutSession(saveToken)];
|
|
1379
1434
|
case 2:
|
|
1380
1435
|
_a.sent();
|
|
1381
|
-
return [3 /*break*/,
|
|
1382
|
-
case 3:
|
|
1436
|
+
return [3 /*break*/, 5];
|
|
1437
|
+
case 3: return [4 /*yield*/, saveToken()];
|
|
1438
|
+
case 4:
|
|
1439
|
+
_a.sent();
|
|
1440
|
+
_a.label = 5;
|
|
1441
|
+
case 5: return [3 /*break*/, 7];
|
|
1442
|
+
case 6:
|
|
1383
1443
|
error_4 = _a.sent();
|
|
1384
1444
|
console.log(new Date(), 'Sub Manager', 'Failed to persist oplog resume token', error_4);
|
|
1385
|
-
return [3 /*break*/,
|
|
1386
|
-
case
|
|
1445
|
+
return [3 /*break*/, 7];
|
|
1446
|
+
case 7: return [2 /*return*/];
|
|
1387
1447
|
}
|
|
1388
1448
|
});
|
|
1389
1449
|
});
|
|
1390
1450
|
};
|
|
1391
1451
|
SubscriptionManager.prototype.clearResumeToken = function () {
|
|
1392
1452
|
return __awaiter(this, void 0, void 0, function () {
|
|
1393
|
-
var
|
|
1453
|
+
var db_3, clearToken, mongoManager, error_5;
|
|
1454
|
+
var _this = this;
|
|
1394
1455
|
return __generator(this, function (_a) {
|
|
1395
1456
|
switch (_a.label) {
|
|
1396
1457
|
case 0:
|
|
1397
|
-
_a.trys.push([0,
|
|
1398
|
-
|
|
1399
|
-
if (!
|
|
1458
|
+
_a.trys.push([0, 5, , 6]);
|
|
1459
|
+
db_3 = resolveio_server_app_1.ResolveIOServer.getMainDB();
|
|
1460
|
+
if (!db_3) {
|
|
1400
1461
|
return [2 /*return*/];
|
|
1401
1462
|
}
|
|
1402
|
-
|
|
1463
|
+
clearToken = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
1464
|
+
return __generator(this, function (_a) {
|
|
1465
|
+
switch (_a.label) {
|
|
1466
|
+
case 0: return [4 /*yield*/, db_3.collection(this.RESUME_TOKEN_COLLECTION)
|
|
1467
|
+
.deleteOne({ _id: this.getResumeTokenDocId() })];
|
|
1468
|
+
case 1:
|
|
1469
|
+
_a.sent();
|
|
1470
|
+
return [2 /*return*/];
|
|
1471
|
+
}
|
|
1472
|
+
});
|
|
1473
|
+
}); };
|
|
1474
|
+
mongoManager = resolveio_server_app_1.ResolveIOServer.getMongoManager();
|
|
1475
|
+
if (!mongoManager) return [3 /*break*/, 2];
|
|
1476
|
+
return [4 /*yield*/, mongoManager.runWithoutSession(clearToken)];
|
|
1403
1477
|
case 1:
|
|
1404
1478
|
_a.sent();
|
|
1405
|
-
return [3 /*break*/,
|
|
1406
|
-
case 2:
|
|
1479
|
+
return [3 /*break*/, 4];
|
|
1480
|
+
case 2: return [4 /*yield*/, clearToken()];
|
|
1481
|
+
case 3:
|
|
1482
|
+
_a.sent();
|
|
1483
|
+
_a.label = 4;
|
|
1484
|
+
case 4: return [3 /*break*/, 6];
|
|
1485
|
+
case 5:
|
|
1407
1486
|
error_5 = _a.sent();
|
|
1408
1487
|
console.log(new Date(), 'Sub Manager', 'Failed to clear oplog resume token', error_5);
|
|
1409
|
-
return [3 /*break*/,
|
|
1410
|
-
case
|
|
1488
|
+
return [3 /*break*/, 6];
|
|
1489
|
+
case 6: return [2 /*return*/];
|
|
1411
1490
|
}
|
|
1412
1491
|
});
|
|
1413
1492
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/managers/subscription.manager.ts"],"names":[],"mappings":"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","file":"subscription.manager.js","sourcesContent":["import { ChangeStream, ChangeStreamDeleteDocument, ChangeStreamInsertDocument, ChangeStreamReplaceDocument, ChangeStreamUpdateDocument, ResumeToken } from 'mongodb';\nimport * as NodeCache from 'node-cache';\nimport { pack, unpack } from 'msgpackr';\nimport * as WebSocket from 'ws';\nimport { Flags } from '../collections/flag.collection';\nimport { LoggedInUsers } from '../collections/logged-in-users.collection';\nimport { LoggedInUserModel } from '../models/logged-in-users.model';\nimport { ServerResponseModel } from '../models/server-message.model';\nimport { ActiveSubscriptionModel, SubscriptionModel, SubscriptionPubModel } from '../models/subscription.model';\nimport { loadAppStatusPublications } from '../publications/app-status';\nimport { loadAiTerminalPublications } from '../publications/ai-terminal';\nimport { loadCronJobPublications } from '../publications/cron-jobs';\nimport { loadFilePublications } from '../publications/files';\nimport { loadFlagsPublications } from '../publications/flags';\nimport { loadFlagsUpdatePublications } from '../publications/flags-update';\nimport { loadLogPublications } from '../publications/logs';\nimport { loadNotificationPublications } from '../publications/notifications';\nimport { loadReportBuilderDashboardBuilderPublications } from '../publications/report-builder-dashboard-builders';\nimport { loadReportBuilderLibraryPublications } from '../publications/report-builder-libraries';\nimport { loadReportBuilderReportPublications } from '../publications/report-builder-reports';\nimport { loadSuperAdminPublications } from '../publications/super-admin';\nimport { loadUserGroupPublications } from '../publications/user-groups';\nimport { loadUserGuidePublications } from '../publications/user-guides';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { deepCopy, objectIdHexString } from '../util/common';\nimport { ErrorReporter } from '../util/error-reporter';\nimport { ensureErrorWithCorrelation } from '../util/error-tracking';\nimport { DependencyContextSnapshot, PublicationContext, QueryMeta, deserializeDependencySnapshot, withDependencyTracking } from '../util/subscription-dependency-context';\nimport { MonitorManagerFunction } from './monitor.manager';\nimport { WebSocketManager } from './websocket.manager';\nconst v8 = require('v8');\nconst sift = require('sift');\n\nfunction resolveHeapLimitBytes(): number {\n\tconst stats = v8.getHeapStatistics();\n\tif (stats && typeof stats.heap_size_limit === 'number') {\n\t\treturn stats.heap_size_limit;\n\t}\n\n\tif (stats && typeof stats.total_available_size === 'number') {\n\t\treturn stats.total_available_size;\n\t}\n\n\treturn 0;\n}\n\n// Performance Dependencies\n// import * as path from 'path';\n// import { Worker } from 'worker_threads';\n\ninterface MongoQueueModel {\n\t_id: number,\n\ttype: string;\n\tcollection: string;\n\tsubscription: ActiveSubscriptionModel;\n\trunning: boolean;\n\trun_again: boolean;\n}\n\ninterface OplogResumeTokenDocument {\n\t_id: string;\n\ttoken?: ResumeToken;\n\tupdatedAt?: Date;\n}\n\ninterface SubscriptionInvalidationEvent {\n\ttype: string;\n\tdocumentId?: any;\n\tdocument?: any;\n}\n\ninterface PublicationExecution {\n\tresult?: any;\n\tpackedResult?: Uint8Array | Buffer;\n\tsnapshot?: DependencyContextSnapshot;\n\tencoding?: 'msgpack' | 'json';\n\tworkerUsed?: boolean;\n}\n\n// interface CurrentPerformanceMonitor {\n// \t_id: number;\n// \tfunction: string;\n// \tpublication: string;\n// \tsubscriptionData: any[];\n// \tdate_start: Date;\n// \tdate_end: Date;\n// \tduration: number;\n// \tresult: string;\n// }\n\nexport class SubscriptionManager {\n\tprivate _websocketManager: WebSocketManager;\n\tprivate _publications: SubscriptionModel = {};\n\tprivate _subscriptions: ActiveSubscriptionModel[] = [];\n\tprivate _wss: WebSocket.Server;\n\tprivate _loggedInUsers: LoggedInUserModel[] = [];\n\tprivate _lastRouteBySocket = new Map<string, { route: string, dateMs: number }>();\n\n\tprivate _mongoQueue: MongoQueueModel[] = [];\n\tprivate _mongoQueueId = 0;\n\t\n\tprivate _oplog$: ChangeStream;\n\tprivate _oplogMode: 'auto' | 'change-stream' | 'local' = 'auto';\n\tprivate _useLocalOplog = false;\n\tprivate _localOplogResyncIntervalMs = 0;\n\tprivate _localOplogResyncTimer: NodeJS.Timeout = null;\n\n\tprivate _nodeCache;\n\tprivate _cacheId = 1;\n\n\tprivate _heapSize = resolveHeapLimitBytes();\n\tprivate _heapLimit: number;\n\n\tprivate serverConfig;\n\n\tprivate _monitorManagerFunction: MonitorManagerFunction;\n\n\tprivate _enableDebug = false;\n\tprivate _enableDependencyDebug = false;\n\tprivate _debugOplogCollections = [];\n\tprivate _debugOplogHits = 0;\n\tprivate _debugSubCollections = [];\n\tprivate _debugSubHits = 0;\n\tprivate _debugUnSubHits = 0;\n\tprivate _debugUnSubAllHits = 0;\n\tprivate _debugMongoQueueHits = 0;\n\tprivate _debugMongoQueueCollections = [];\n\tprivate _debugSendQueueHits = 0;\n\tprivate _debugRemoveCacheHits = 0;\n\n\tprivate _oplogRetryCount = 0;\n\tprivate _lastResumeToken: ResumeToken = null;\n\tprivate _lastResumeTokenSaveMs = 0;\n\tprivate _resumeTokenSavePromise: Promise<void> = null;\n\tprivate _resumeTokenSaveForcePending = false;\n\tprivate _fullResyncPromise: Promise<void> = null;\n\tprivate readonly RESUME_TOKEN_COLLECTION = 'subscription-manager-resume-tokens';\n\tprivate readonly RESUME_TOKEN_SAVE_INTERVAL_MS = 5000;\n\n\t// Buffer to store throttled latency updates with timestamps\n\tprivate latencyBuffer = new Map<string, { latency: number, lastUpdate: Date }>();\n\tprivate _latencyFlushInProgress = false;\n\tprivate _latencyFlushPending = false;\n\n\t// Interval to flush latency updates in MongoDB\n\tprivate readonly LATENCY_UPDATE_INTERVAL = 60000;\n\n\t// Minimum time difference between two latency updates for the same user\n\tprivate readonly LATENCY_UPDATE_THRESHOLD_MS = 30000;\n\tprivate readonly LATENCY_DEBUG_THRESHOLD_MS = 1000;\n\tprivate readonly PUBLICATION_DEBUG_THRESHOLD_MS = 300;\n\n\t// private currentPerfomanceMonitor: CurrentPerformanceMonitor[] = [];\n\t// private idPerformance: number = 0;\n\t// private performanceThread;\n\n\tprivate _invalidationDebounceTimers = new Map<string, NodeJS.Timeout>();\n\tprivate _invalidationPendingTimestamps = new Map<string, number>();\n\tprivate _pendingInvalidations = new Map<string, { events: SubscriptionInvalidationEvent[] }>();\n\tprivate readonly DEBOUNCE_DELAY = 100; // 100ms debounce window\n\tprivate readonly MAX_WAIT_TIME = 500; // 500ms maximum delay\n\n\tprivate _publicationWorkerQueueLimit = 0;\n\n\n\tconstructor() {}\n\n\tstatic createPublicationRegistry(serverConfig?) {\n\t\tconst subscriptionManager = new SubscriptionManager();\n\t\tsubscriptionManager.initializePublicationRegistry(serverConfig);\n\t\treturn subscriptionManager;\n\t}\n\n\tstatic create(wss: WebSocket.Server, serverConfig, monitorManagerFunction: MonitorManagerFunction) {\n\t\tconst subscriptionManager = new SubscriptionManager();\n\t\tsetImmediate(async () => {\n\t\t\tawait subscriptionManager.initialize(wss, serverConfig, monitorManagerFunction);\n\t\t});\n\t\treturn subscriptionManager;\n\t}\n\t\n\tprivate initializePublicationRegistry(serverConfig) {\n\t\tthis.serverConfig = serverConfig || ResolveIOServer.getServerConfig();\n\t\tthis.registerCorePublications();\n\t}\n\n\tprivate async initialize(wss: WebSocket.Server, serverConfig, monitorManagerFunction: MonitorManagerFunction) {\n\t\tthis._websocketManager = ResolveIOServer.getMainServer().getWebSocketManager();\n\t\tthis._monitorManagerFunction = monitorManagerFunction;\n\n\t\tthis._nodeCache = new NodeCache( { stdTTL: 0, checkperiod: 0 } );\n\n\t\tsetInterval(() => this.flushThrottledLatencyUpdates(), this.LATENCY_UPDATE_INTERVAL);\n\n\t\t// setTimeout(() => {\n\t\t// \tconsole.log('Setting up performance thread');\n\n\t\t// \tthis.performanceThread = new Worker(path.join(__dirname, './subscription.performance.js'));\n\n\t\t// \tthis.performanceThread.on('exit', code => {\n\t\t// \t\tconsole.error(new Date(), 'THREAD EXITED!!!!!!!!!!!!!!!!!!', code);\n\t\t// \t});\n\n\t\t// \tthis.performanceThread.on('error', code => {\n\t\t// \t\tconsole.error(new Date(), 'THREAD RECV ERROR !!!!!!!!!!!!!!!!!!', code);\n\t\t// \t});\n\t\t// }, 5000);\n\n\t\t// setInterval(() => {\n\t\t// \tconsole.log('Post thread msg');\n\t\t// \tthis.performanceThread.postMessage(this.currentPerfomanceMonitor);\n\t\t// \tthis.currentPerfomanceMonitor = [];\n\t\t// }, 10000);\n\n\t\tthis.serverConfig = serverConfig;\n\t\tthis._wss = wss;\n\n\t\tthis._oplogMode = this.resolveOplogMode();\n\t\tthis._localOplogResyncIntervalMs = this.resolveLocalOplogResyncIntervalMs();\n\n\t\tthis.registerCorePublications();\n\n\t\tif (this._oplogMode === 'local') {\n\t\t\tawait this.enableLocalOplogFallback('config');\n\t\t}\n\t\telse {\n\t\t\tconst resumeToken = await this.loadResumeToken();\n\t\t\tawait this.tailOpLog(resumeToken || undefined);\n\t\t}\n\n\t\tsetInterval(() => {\n\t\t\tthis._oplogRetryCount = 0;\n\t\t}, 15000);\n\n\t\tsetInterval(() => {\n\t\t\tif (this.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Subs', this._subscriptions.length);\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Logged In Users', this._loggedInUsers.length);\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Mongo Queue', this._mongoQueue.length);\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Mongo Queue Hits', this._debugMongoQueueHits);\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Mongo Queue Collections', JSON.stringify(this._debugMongoQueueCollections.sort((a, b) => a.collection.localeCompare(b.collection) || a.publication.localeCompare(b.publication)), null, 2));\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Oplog Hits', this._debugOplogHits);\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Oplog Collections', JSON.stringify(this._debugOplogCollections.sort((a, b) => a.collection.localeCompare(b.collection) || a.type.localeCompare(b.type)), null, 2));\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Send Queue Hits', this._debugSendQueueHits);\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Sub Hits', this._debugSubHits);\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Sub Collections', JSON.stringify(this._debugSubCollections.sort((a, b) => a.publication.localeCompare(b.publication)), null, 2));\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Unsub Hits', this._debugUnSubHits);\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Unsub All Hits', this._debugUnSubAllHits);\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Cache Cleanup Hits', this._debugRemoveCacheHits);\n\t\t\t}\n\t\t\t\n\t\t\tthis._debugOplogHits = 0;\n\t\t\tthis._debugOplogCollections = [];\n\t\t\tthis._debugSubCollections = [];\n\t\t\tthis._debugMongoQueueHits = 0;\n\t\t\tthis._debugMongoQueueCollections = [];\n\t\t\tthis._debugSendQueueHits = 0;\n\t\t\tthis._debugSubHits = 0;\n\t\t\tthis._debugUnSubHits = 0;\n\t\t\tthis._debugUnSubAllHits = 0;\n\t\t\tthis._debugRemoveCacheHits = 0;\n\t\t}, 60000);\n\n\t\tsetInterval(async () => {\n\t\t\tthis._loggedInUsers = await LoggedInUsers.find();\n\t\n\t\t\tlet userCopy = deepCopy(this._loggedInUsers);\n\t\t\tfor (let i = this._loggedInUsers.length - 1; i >= 0; i--) {\n\t\t\t\tlet loggedInUser = userCopy[i];\n\n\t\t\t\tif (!loggedInUser.date || Date.now() - loggedInUser.date.getTime() > 120000) {\n\t\t\t\t\tif (this._websocketManager.getWebSocket(loggedInUser.id_ws)) {\n\t\t\t\t\t\tif (this.getEnableDebug()) {\n\t\t\t\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Unsub WS', this._websocketManager.getWebSocket(loggedInUser.id_ws)['user'], this._websocketManager.getWebSocket(loggedInUser.id_ws)['id_socket'], 2);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tawait this.unsubscribeAll(this._websocketManager.getWebSocket(loggedInUser.id_ws));\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._subscriptions.forEach(sub => {\n\t\t\t\t\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\t\t\t\t\tlet client = sub.clients[j];\n\n\t\t\t\t\t\t\t\tif (client.id_socket === loggedInUser.id_ws) {\n\t\t\t\t\t\t\t\t\tsub.clients.splice(j, 1);\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\n\t\t\t\t\t\tawait LoggedInUsers.deleteOne({_id: loggedInUser._id});\n\n\t\t\t\t\t\tif (this._loggedInUsers.findIndex(a => a._id === loggedInUser._id) >= 0) {\n\t\t\t\t\t\t\tthis._loggedInUsers.splice(this._loggedInUsers.findIndex(a => a._id === loggedInUser._id), 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < this._subscriptions.length; i++) {\n\t\t\t\tlet sub = this._subscriptions[i];\n\n\t\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\t\tlet client = sub.clients[j];\n\n\t\t\t\t\tif (!this._loggedInUsers.some(a => a.id_ws === client.id_socket)) {\n\t\t\t\t\t\tsub.clients.splice(j, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, 30000);\n\n\t\tlet flag = await Flags.findOne({type: 'Enable Debug'});\n\t\tlet dependencyFlag = await Flags.findOne({type: 'Enable Dependency Debug'});\n\n\t\tif (flag && flag.value) {\n\t\t\tthis._enableDebug = true;\n\t\t}\n\t\telse {\n\t\t\tthis._enableDebug = false;\n\t\t}\n\n\t\tif (dependencyFlag && dependencyFlag.value) {\n\t\t\tthis._enableDependencyDebug = true;\n\t\t}\n\t\telse {\n\t\t\tthis._enableDependencyDebug = process.env.ENABLE_DEPENDENCY_DEBUG === 'true';\n\t\t}\n\n\t\tthis.setCacheLimit();\n\t\tthis.configurePublicationWorkers();\n\t}\n\n\tprivate registerCorePublications() {\n\t\tloadSuperAdminPublications(this);\n\t\tloadAiTerminalPublications(this);\n\t\tloadAppStatusPublications(this);\n\t\tloadLogPublications(this);\n\t\tloadFilePublications(this);\n\t\tloadCronJobPublications(this);\n\t\tloadFlagsUpdatePublications(this);\n\t\tloadFlagsPublications(this);\n\t\tloadNotificationPublications(this);\n\t\tloadReportBuilderReportPublications(this);\n\t\tloadReportBuilderLibraryPublications(this);\n\t\tloadUserGroupPublications(this);\n\t\tloadUserGuidePublications(this);\n\t\tloadReportBuilderDashboardBuilderPublications(this);\n\t}\n\n\tprivate setCacheLimit() {\t\n\t\tif (process.env.IS_WORKERS_ENABLED === 'true') {\n\t\t\tthis._heapLimit = this._heapSize * 0.4;\n\t\t}\n\t\telse {\n\t\t\tthis._heapLimit = this._heapSize * 0.3; // Use 50% of total heap size\n\t\t}\n\t}\n\n\tprivate configurePublicationWorkers() {\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig() || {};\n\t\tthis._publicationWorkerQueueLimit = this.parsePositiveNumber(process.env.SUBSCRIPTION_WORKER_QUEUE_MAX ?? config['SUBSCRIPTION_WORKER_QUEUE_MAX']);\n\t}\n\n\tprivate parseBoolean(value: any): boolean {\n\t\tif (value === true) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (value === false || value === null || value === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (typeof value === 'number') {\n\t\t\treturn value === 1;\n\t\t}\n\n\t\tif (typeof value === 'string') {\n\t\t\tconst normalized = value.trim().toLowerCase();\n\t\t\treturn ['1', 'true', 'yes', 'y', 'on'].includes(normalized);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate clampNumber(value: number, min: number, max: number): number {\n\t\tif (value < min) {\n\t\t\treturn min;\n\t\t}\n\n\t\tif (value > max) {\n\t\t\treturn max;\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tpublic async invalidatePubsCache(collection: string, type: string, documentId?: any, document?: any) {\n\t\tlet queue = this._pendingInvalidations.get(collection);\n\t\tif (!queue) {\n\t\t\tqueue = { events: [] };\n\t\t\tthis._pendingInvalidations.set(collection, queue);\n\t\t}\n\t\tqueue.events.push({ type, documentId, document });\n\n\t\tconst debounceKey = collection;\n\t\tconst now = Date.now();\n\t\n\t\t// Initialize or get existing timestamp\n\t\tconst firstInvalidationTime = this._invalidationPendingTimestamps.get(debounceKey) || now;\n\t\tthis._invalidationPendingTimestamps.set(debounceKey, firstInvalidationTime);\n\t\n\t\t// Clear any existing timer\n\t\tif (this._invalidationDebounceTimers.has(debounceKey)) {\n\t\t\tclearTimeout(this._invalidationDebounceTimers.get(debounceKey));\n\t\t}\n\t\n\t\t// Check if we've waited too long\n\t\tconst waitedTooLong = (now - firstInvalidationTime) >= this.MAX_WAIT_TIME;\n\t\t\n\t\tif (waitedTooLong) {\n\t\t\t// Immediate execution path\n\t\t\tthis._invalidationPendingTimestamps.delete(debounceKey);\n\t\t\tawait this._executeInvalidation(collection);\n\t\t} else {\n\t\t\t// Normal debounce path\n\t\t\tthis._invalidationDebounceTimers.set(\n\t\t\t\tdebounceKey,\n\t\t\t\tsetTimeout(async () => {\n\t\t\t\t\tthis._invalidationPendingTimestamps.delete(debounceKey);\n\t\t\t\t\tawait this._executeInvalidation(collection);\n\t\t\t\t}, this.DEBOUNCE_DELAY)\n\t\t\t);\n\t\t}\n\t}\n\t\n\tprivate async _executeInvalidation(collection: string) {\n\t\t// Clean up any existing timer (defensive)\n\t\tif (this._invalidationDebounceTimers.has(collection)) {\n\t\t\tclearTimeout(this._invalidationDebounceTimers.get(collection));\n\t\t\tthis._invalidationDebounceTimers.delete(collection);\n\t\t}\n\n\t\tconst queued = this._pendingInvalidations.get(collection);\n\t\tthis._pendingInvalidations.delete(collection);\n\n\t\tif (!queued || !queued.events.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst events = queued.events;\n\t\n\t\t// Original invalidation logic\n\t\tResolveIOServer.getMongoManager().invalidateQueryCache(collection, true);\n\t\n\t\tconst collSubs = this._subscriptions.filter(sub => this.subscriptionReferencesCollection(sub, collection));\n\t\n\t\tfor (const sub of collSubs) {\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Invalidate Sub', sub.publication, sub.running, sub.runAgain);\n\t\t\t}\n\n\t\t\tif (!(await this.shouldInvalidateSubscriptionForEvents(sub, collection, events))) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\tif (sub.running) {\n\t\t\t\tsub.runAgain = true;\n\t\t\t\tthis.dependencyDebug('Subscription busy, scheduling rerun', { publication: sub.publication, collection, events: this.summarizeEvents(events) });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\tconst batchType = events.length === 1 ? events[0].type : events.map(event => event.type).join(',');\n\n\t\t\tif (this._publications[sub.publication].user_specific) {\n\t\t\t\tthis.dependencyDebug('Triggering user-specific invalidation', { publication: sub.publication, collection, events: this.summarizeEvents(events), clientCount: sub.clients.length });\n\t\t\t\tfor (let client of sub.clients) {\n\t\t\t\t\tconst ws = this._websocketManager.getWebSocket(client.id_socket);\n\t\t\t\t\tif (ws?.readyState === ws.OPEN) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait this.sendDataToOneWithRetry(ws, client.messageId, sub, collection, batchType);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch {\n\t\t\t\t\t\t\t// Error handling\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\telse {\n\t\t\t\tthis.dependencyDebug('Triggering broadcast invalidation', { publication: sub.publication, collection, events: this.summarizeEvents(events), clientCount: sub.clients.length });\n\t\t\t\tawait this.sendDataToAllWithRetry(sub, collection, batchType);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate subscriptionReferencesCollection(sub: ActiveSubscriptionModel, collection: string): boolean {\n\t\tif (sub.collections?.includes(collection)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.ensureDependencyContainers(sub);\n\n\t\tconst dependencyIds = sub.collectionDependencies?.get(collection);\n\t\tif (dependencyIds && dependencyIds.size > 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst filters = sub.collectionFilters?.get(collection);\n\t\tif (filters && filters.length > 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (sub.watchAllCollections?.has(collection)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate async delay(ms: number) {\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\treturn new Promise(resolve => setTimeout(resolve, ms));\n\t}\n\n\tprivate getMessageDateMs(messageDate: any): number {\n\t\tif (messageDate instanceof Date && !isNaN(messageDate.getTime())) {\n\t\t\treturn messageDate.getTime();\n\t\t}\n\n\t\tif (typeof messageDate === 'string' || typeof messageDate === 'number') {\n\t\t\tconst parsed = new Date(messageDate);\n\t\t\tif (!isNaN(parsed.getTime())) {\n\t\t\t\treturn parsed.getTime();\n\t\t\t}\n\t\t}\n\n\t\treturn Date.now();\n\t}\n\n\tprivate isStaleRouteMessage(ws: WebSocket, messageRoute: string, messageDate: any): boolean {\n\t\tconst socketId = ws ? ws['id_socket'] : '';\n\t\tif (!socketId) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!messageRoute || messageRoute === 'Bypass') {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst messageDateMs = this.getMessageDateMs(messageDate);\n\t\tconst lastRoute = this._lastRouteBySocket.get(socketId);\n\n\t\tif (lastRoute && messageDateMs < lastRoute.dateMs) {\n\t\t\tthis.dependencyDebug('Skip route cleanup due to stale route message', {\n\t\t\t\tsocketId,\n\t\t\t\tmessageRoute,\n\t\t\t\tmessageDateMs,\n\t\t\t\tlastRoute: lastRoute.route,\n\t\t\t\tlastRouteDateMs: lastRoute.dateMs\n\t\t\t});\n\t\t\treturn true;\n\t\t}\n\n\t\tthis._lastRouteBySocket.set(socketId, { route: messageRoute, dateMs: messageDateMs });\n\t\treturn false;\n\t}\n\n\tprivate getPublicationWorkerDispatcher() {\n\t\tconst mainServer = ResolveIOServer.getMainServer();\n\t\treturn mainServer && typeof mainServer.getWorkerDispatcherManager === 'function'\n\t\t\t? mainServer.getWorkerDispatcherManager()\n\t\t\t: null;\n\t}\n\n\tprivate shouldUsePublicationWorkers(): boolean {\n\t\tconst dispatcher = this.getPublicationWorkerDispatcher();\n\t\tif (!dispatcher || !dispatcher.hasWorkers()) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this._publicationWorkerQueueLimit > 0) {\n\t\t\tconst snapshot = dispatcher.getQueueSnapshot();\n\t\t\tif (snapshot.queueDepth >= this._publicationWorkerQueueLimit) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tprivate async runPublicationViaWorker(sub: ActiveSubscriptionModel, userId?: string): Promise<PublicationExecution | null> {\n\t\tif (!this.shouldUsePublicationWorkers()) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst dispatcher = this.getPublicationWorkerDispatcher();\n\t\tif (!dispatcher) {\n\t\t\treturn null;\n\t\t}\n\n\t\ttry {\n\t\t\tconst response = await dispatcher.sendInternalPromiseRaw('runPublication', [\n\t\t\t\tsub.publication,\n\t\t\t\tsub.subscriptionData,\n\t\t\t\tuserId\n\t\t\t]);\n\n\t\t\tif (!response || response.error) {\n\t\t\t\tthrow response?.result || new Error('Publication worker error');\n\t\t\t}\n\n\t\t\tif (!response.packedResult) {\n\t\t\t\tthrow new Error('Publication worker missing packedResult');\n\t\t\t}\n\n\t\t\tconst meta = response.meta || {};\n\t\t\tconst snapshot = meta.snapshot ? deserializeDependencySnapshot(meta.snapshot) : undefined;\n\n\t\t\treturn {\n\t\t\t\tpackedResult: response.packedResult,\n\t\t\t\tsnapshot,\n\t\t\t\tencoding: response.encoding || meta.encoding || 'msgpack',\n\t\t\t\tworkerUsed: true\n\t\t\t};\n\t\t}\n\t\tcatch (error) {\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Worker publication failed, falling back', sub.publication, error?.message || error);\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate async runPublicationLocally(sub: ActiveSubscriptionModel, userId?: string): Promise<PublicationExecution> {\n\t\tconst pub = this._publications[sub.publication];\n\t\tif (!pub) {\n\t\t\tthrow new Error(`Publication not found: ${sub.publication}`);\n\t\t}\n\n\t\tconst context = Object.assign({}, this, SubscriptionManager.prototype);\n\t\tconst metadata: PublicationContext = {\n\t\t\tpublication: sub.publication,\n\t\t\tsubscriptionData: sub.subscriptionData\n\t\t};\n\n\t\tconst execution = pub.user_specific\n\t\t\t? await withDependencyTracking(() => pub.function.call(context, userId || '', ...sub.subscriptionData), Object.assign({}, metadata, { userId }))\n\t\t\t: await withDependencyTracking(() => pub.function.call(context, ...sub.subscriptionData), metadata);\n\n\t\treturn {\n\t\t\tresult: execution.result,\n\t\t\tpackedResult: this.packCachePayload(execution.result),\n\t\t\tsnapshot: execution.snapshot,\n\t\t\tencoding: 'msgpack',\n\t\t\tworkerUsed: false\n\t\t};\n\t}\n\n\tprivate async runPublicationExecution(sub: ActiveSubscriptionModel, userId?: string): Promise<PublicationExecution> {\n\t\tconst pub = this._publications[sub.publication];\n\t\tif (!pub) {\n\t\t\tthrow new Error(`Publication not found: ${sub.publication}`);\n\t\t}\n\n\t\tconst effectiveUserId = pub.user_specific ? userId : undefined;\n\t\tconst workerExecution = await this.runPublicationViaWorker(sub, effectiveUserId);\n\t\tif (workerExecution) {\n\t\t\treturn workerExecution;\n\t\t}\n\n\t\treturn this.runPublicationLocally(sub, effectiveUserId);\n\t}\n\n\tprivate async sendDataToAllWithRetry(sub: ActiveSubscriptionModel, collection: string, type: string) {\n\t\tsub.running = true;\n\n\t\tdo {\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Running sendDataToAll Sub', sub.publication);\n\t\t\t}\n\n\t\t\tsub.runAgain = false;\n\t\t\tawait this.sendDataToAll(sub, collection, type);\n\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Done sendDataToAll Sub', sub.publication, sub.runAgain);\n\t\t\t}\n\n\t\t\tif (sub.runAgain) {\n\t\t\t\tawait this.delay(500); // delay, adjust as needed\n\t\t\t}\n\t\t} while (sub.runAgain);\n\n\t\tsub.running = false;\n\t}\n\n\tprivate async sendDataToOneWithRetry(ws: WebSocket, messageId: number, sub: ActiveSubscriptionModel, collection: string, type: string) {\n\t\tsub.running = true;\n\n\t\tdo {\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Running sendDataToOne Sub', sub.publication);\n\t\t\t}\n\n\t\t\tsub.runAgain = false;\n\t\t\tawait this.sendDataToOne(ws, messageId, sub, collection, type);\n\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Done sendDataToOne Sub', sub.publication, sub.runAgain);\n\t\t\t}\n\n\t\t\tif (sub.runAgain) {\n\t\t\t\tawait this.delay(500); // delay, adjust as needed\n\t\t\t}\n\t\t} while (sub.runAgain);\n\t\tsub.running = false;\n\t}\n\n\t// Add all files to publications private object\n\tpublic publications(method: SubscriptionModel) {\n\t\tthis._publications = Object.assign(this._publications, method);\n\t}\n\n\tpublic getPublication(publication: string): SubscriptionPubModel | undefined {\n\t\treturn this._publications[publication];\n\t}\n\n\tpublic getPublications(): SubscriptionModel {\n\t\treturn this._publications;\n\t}\n\n\t// Throttled `loggedInLatency` method\n\tpublic loggedInLatency(ws: WebSocket) {\n\t\tconst now = new Date();\n\t\tconst newLatency = ws['latency'];\n\t\tconst socketId = ws['id_socket'];\n\t\tlet loggedInUser = this._loggedInUsers.find(a => a.id_ws === socketId);\n\n\t\tif (!loggedInUser) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst existingEntry = this.latencyBuffer.get(socketId);\n\n\t\t// Throttle updates: only update if time threshold has passed or latency has significantly changed\n\t\tif (\n\t\t\t!existingEntry || \n\t\t\t(now.getTime() - existingEntry.lastUpdate.getTime() >= this.LATENCY_UPDATE_THRESHOLD_MS) || \n\t\t\t(Math.abs(newLatency - existingEntry.latency) > 100) // Optional: log only significant changes\n\t\t) {\n\t\t\t// Update in-memory and buffer\n\t\t\tloggedInUser.date = now;\n\t\t\tthis.latencyBuffer.set(socketId, { latency: newLatency, lastUpdate: now });\n\t\t}\n\t}\n\n\t// Method to flush buffered latency updates in bulk\n\tprivate async flushThrottledLatencyUpdates() {\n\t\tif (this.latencyBuffer.size === 0) return; // No updates to flush\n\t\tif (this._latencyFlushInProgress) {\n\t\t\tthis._latencyFlushPending = true;\n\t\t\treturn;\n\t\t}\n\n\t\tthis._latencyFlushInProgress = true;\n\n\t\tconst pendingEntries = Array.from(this.latencyBuffer.entries());\n\t\tthis.latencyBuffer.clear();\n\t\tconst updates = pendingEntries.map(([id_ws, { latency, lastUpdate }]) => ({\n\t\t\tupdateOne: {\n\t\t\t\tfilter: { id_ws },\n\t\t\t\tupdate: { $set: { latency, date: lastUpdate } }\n\t\t\t}\n\t\t}));\n\n\t\ttry {\n\t\t\tawait LoggedInUsers.bulkWrite(updates, { ordered: false });\n\n\t\t\tif (this.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Throttled latency batch update successful', updates.length);\n\t\t\t}\n\t\t}\n\t\tcatch (error) {\n\t\t\tfor (const [id_ws, payload] of pendingEntries) {\n\t\t\t\tconst current = this.latencyBuffer.get(id_ws);\n\t\t\t\tif (!current || current.lastUpdate < payload.lastUpdate) {\n\t\t\t\t\tthis.latencyBuffer.set(id_ws, payload);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconsole.error(new Date(), 'Sub Manager', 'Throttled latency batch update failed', error);\n\t\t\t// Optional: implement retry logic or logging for failed updates\n\t\t}\n\t\tfinally {\n\t\t\tthis._latencyFlushInProgress = false;\n\t\t\tif (this._latencyFlushPending) {\n\t\t\t\tthis._latencyFlushPending = false;\n\t\t\t\tsetImmediate(() => this.flushThrottledLatencyUpdates());\n\t\t\t}\n\t\t}\n\t}\n\n\t// Subscribe to publication\n\tpublic async subscribe(messageRoute: string, messageDate: Date, ws: WebSocket, messageId: number, publication: string, subscriptionData: any[]) {\n\t\tthis._debugSubHits += 1;\n\n\t\tif (!this._debugSubCollections.some(a => a.publication === publication)) {\n\t\t\tthis._debugSubCollections.push({\n\t\t\t\tpublication: publication,\n\t\t\t\thits: 1\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis._debugSubCollections.find(a => a.publication === publication).hits += 1;\n\t\t}\n\n\t\tlet pub = this._publications[publication];\n\n\t\tif (!pub) {\n\t\t\tconsole.error(new Date(), 'No Publication: ' + publication);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tif (subscriptionData.length > 1 || subscriptionData[0]) {\n\t\t\t\tif (!pub.check) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Function For Pub ' + publication);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if (!pub.check._schema) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Schema For Pub ' + publication);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet valObj = {};\n\t\t\t\t\tlet valKeys = Object.keys(pub.check._schema);\n\n\t\t\t\t\tlet rootKeys = valKeys.filter(a => !a.includes('.'));\n\n\t\t\t\t\tfor (let i = 0; i < subscriptionData.length; i++) {\n\t\t\t\t\t\tvalObj[rootKeys[i]] = subscriptionData[i];\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpub.check.validate(valObj);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (errors) {\n\t\t\t\t\t\tif (errors) {\n\t\t\t\t\t\t\tconsole.error(new Date(), 'Error in Pub Check (' + publication + ')', errors);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst staleRouteMessage = this.isStaleRouteMessage(ws, messageRoute, messageDate);\n\t\t\tif (messageRoute !== 'Bypass' && messageRoute !== '/' && !staleRouteMessage) {\n\t\t\t\tlet urlData = messageRoute.split('/');\n\t\t\t\tlet urlModule = '';\n\t\t\t\tlet urlNext = urlData[0];\n\n\t\t\t\tif (urlData[0] === '') {\n\t\t\t\t\turlModule = '/';\n\t\t\t\t\turlNext = urlData[1];\n\t\t\t\t}\n\n\t\t\t\turlModule += urlNext;\n\n\t\t\t\tif (urlData.length > 1) {\n\t\t\t\t\turlModule += '/';\n\t\t\t\t}\n\n\t\t\t\tlet otherRouteSubs = this._subscriptions.filter(a => a.clients.some(b => b.id_socket === ws['id_socket'] && b.messageRoute !== 'Bypass' && b.messageRoute !== '/' && b.messageRoute !== messageRoute && !b.messageRoute.startsWith(urlModule)));\n\n\t\t\t\tif (otherRouteSubs.length) {\n\t\t\t\t\t// ResolveIOServer.getMainServer().getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Detected Undestroyed Subscription - ' + this.serverConfig['CLIENT_NAME'], 'USER: ' + ws['user'] + ' (Socket: ' + ws['id_socket'] + ') ' + ' is on route: ' + messageRoute + ' but has the following subscriptions on other routes:' + JSON.stringify(otherRouteSubs, null, 2));\n\n\t\t\t\t\totherRouteSubs.forEach(otherSub => {\n\t\t\t\t\t\totherSub.clients.filter(a => a.id_socket === ws['id_socket']).forEach(client => {\n\t\t\t\t\t\t\tthis.unsubscribe(client.messageRoute, new Date(), ws, client.messageId, otherSub.publication, otherSub.subscriptionData);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst normalizedSubscriptionData = Array.isArray(subscriptionData) ? subscriptionData : [];\n\t\t\tconst subscriptionKey = JSON.stringify(normalizedSubscriptionData);\n\t\t\tlet sub = this._subscriptions.find(a => a.publication === publication && a.subscriptionKey === subscriptionKey);\n\n\t\t\t// If sub found (another user watching same data), add client to same sub\n\t\t\tif (sub) {\n\t\t\t\tif (!sub.clients.some(a => a.id_socket === ws['id_socket'] && a.messageId === messageId)) {\n\t\t\t\t\tsub.clients.push({\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\tid_socket: ws['id_socket'],\n\t\t\t\t\t\tmessageRoute: messageRoute\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If sub not found, create new sub\n\t\t\telse {\n\t\t\t\tthis._subscriptions.push({\n\t\t\t\t\tpublication: publication,\n\t\t\t\t\tsubscriptionKey: subscriptionKey,\n\t\t\t\t\tsubscriptionData: normalizedSubscriptionData,\n\t\t\t\t\tcollections: this.getPublicationCollections(publication),\n\t\t\t\t\tclients: [{\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\tid_socket: ws['id_socket'],\n\t\t\t\t\t\tmessageRoute: messageRoute,\n\t\t\t\t\t}],\n\t\t\t\tcacheId: 0,\n\t\t\t\trunning: false,\n\t\t\t\trunAgain: false,\n\t\t\t\tcollectionDependencies: new Map(),\n\t\t\t\tcollectionFilters: new Map(),\n\t\t\t\twatchAllCollections: new Set(),\n\t\t\t\tcollectionQueryMeta: new Map()\n\t\t\t});\n\t\t}\n\n\t\t\tif (!sub) {\n\t\t\t\tsub = this._subscriptions.find(a => a.publication === publication && a.subscriptionKey === subscriptionKey);\n\t\t\t}\n\n\t\t\tthis.ensureDependencyContainers(sub);\n\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'New Sub', sub.publication, sub.running, sub.runAgain, sub.clients.length);\n\t\t\t}\n\n\t\t\t// Immediately send data to the new client\n\t\t\tawait this.processSubscription(sub, ws, messageId);\n\t\t}\n\t}\n\n\tpublic async createLoggedInUser(id_ws: string): Promise<LoggedInUserModel> {\n\t\tlet ws = this._websocketManager.getWebSocket(id_ws);\n\n\t\tif (ws) {\n\t\t\tlet user = {\n\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t__v: 0,\n\t\t\t\tdate: new Date(),\n\t\t\t\tid_user: ws['id_user'],\n\t\t\t\tuser: ws['user'],\n\t\t\t\tid_ws: ws['id_socket']\n\t\t\t};\n\t\t\t\n\t\t\tthis._loggedInUsers.push(user);\n\t\t\tawait LoggedInUsers.insertOne(user);\n\t\t\t\n\t\t\treturn user;\n\t\t}\n\t\telse {\n\t\t\tthrow new Error('Error in Create Logged In User: No WS');\n\t\t}\n\t}\n\n\t// Unsubscribe from publication \n\tpublic unsubscribe(messageRoute: string, messageDate: Date, ws: WebSocket, messageId: number, publication: string, subscriptionData: any[]) {\t\t\n\t\tthis._debugUnSubHits += 1;\n\n\t\tif (!this._publications[publication]) {\n\t\t\tconsole.log('No Publication: ' + publication);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tconst normalizedSubscriptionData = Array.isArray(subscriptionData) ? subscriptionData : [];\n\t\t\tconst subscriptionKey = JSON.stringify(normalizedSubscriptionData);\n\t\t\tlet sub = this._subscriptions.find(a => a.publication === publication && a.subscriptionKey === subscriptionKey);\n\n\t\t\tif (sub) {\n\t\t\t\tfor (let i = sub.clients.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (sub.clients[i].id_user === ws['id_user'] && sub.clients[i].messageId === messageId && sub.clients[i].id_socket === ws['id_socket']) {\n\t\t\t\t\t\tsub.clients.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\tconsole.log(new Date(), 'Unsub', sub.publication, sub.running, sub.runAgain, sub.clients.length);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\n\t// Unsubscribe from publication\n\tpublic async unsubscribeAll(ws: WebSocket) {\n\t\tthis._debugUnSubAllHits += 1;\n\n\t\tif (ws) {\n\t\t\tif (ws['id_socket']) {\n\t\t\t\tthis._lastRouteBySocket.delete(ws['id_socket']);\n\t\t\t}\n\n\t\t\t// Check if WebSocket has already been unsubscribed\n\t\t\tif (ws['isUnsubscribed']) {\n\t\t\t\treturn; // Skip if already unsubscribed\n\t\t\t}\n\t\t\t\n\t\t\t// Mark the WebSocket as unsubscribed to prevent further calls\n\t\t\tws['isUnsubscribed'] = true;\n\t\t\t\n\t\t\tif (this._loggedInUsers.map(a => a.id_ws).indexOf(ws['id_socket']) >= 0) {\n\t\t\t\tthis._loggedInUsers.splice(this._loggedInUsers.map(a => a.id_ws).indexOf(ws['id_socket']), 1);\n\t\t\t}\n\t\t\t\n\t\t\tawait LoggedInUsers.deleteOne({ id_ws: ws['id_socket'] });\n\n\t\t\tlet userSubs = this._subscriptions.filter(a => a.clients.some(b => b.id_user === ws['id_user'] && b.id_socket === ws['id_socket']));\n\n\t\t\tfor (let i = userSubs.length - 1; i >= 0; i--) {\n\t\t\t\tlet sub = userSubs[i];\n\n\t\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\t\tif (sub.clients[j].id_socket === ws['id_socket']) {\n\t\t\t\t\t\tsub.clients.splice(j, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._websocketManager.removeWebSocket(ws);\n\t\t}\n\t}\n\n\tpublic getActiveSubscriptions() {\n\t\treturn this._subscriptions;\n\t}\n\n\t// Get publication collection\n\tprivate getPublicationCollections(publication: string) {\n\t\treturn this._publications[publication].collections;\n\t}\n\n\tprivate getWatchedDatabases(): string[] {\n\t\tconst mongoManager = ResolveIOServer.getMongoManager();\n\t\tconst managerDatabases = mongoManager?.getWatchedDatabases() || [];\n\n\t\tif (managerDatabases.length) {\n\t\t\treturn managerDatabases;\n\t\t}\n\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig();\n\t\tconst mainDb = config && typeof config['DATABASE'] === 'string' ? config['DATABASE'] : '';\n\n\t\treturn mainDb ? [mainDb] : [];\n\t}\n\n\tprivate resolveOplogMode(): 'auto' | 'change-stream' | 'local' {\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig() || {};\n\t\tconst raw = process.env.SUBSCRIPTION_OPLOG_MODE || process.env.OPLOG_MODE || config['SUBSCRIPTION_OPLOG_MODE'] || config['OPLOG_MODE'];\n\n\t\tif (typeof raw !== 'string' || !raw.trim()) {\n\t\t\treturn 'auto';\n\t\t}\n\n\t\tconst normalized = raw.trim().toLowerCase();\n\n\t\tif (['local', 'single', 'standalone', 'fallback', 'poll'].includes(normalized)) {\n\t\t\treturn 'local';\n\t\t}\n\n\t\tif (['change-stream', 'changestream', 'oplog', 'replica', 'replicaset', 'rs'].includes(normalized)) {\n\t\t\treturn 'change-stream';\n\t\t}\n\n\t\treturn 'auto';\n\t}\n\n\tprivate resolveLocalOplogResyncIntervalMs(): number {\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig() || {};\n\t\tconst raw = process.env.OPLOG_FALLBACK_RESYNC_MS\n\t\t\t|| process.env.SUBSCRIPTION_OPLOG_RESYNC_MS\n\t\t\t|| config['OPLOG_FALLBACK_RESYNC_MS']\n\t\t\t|| config['SUBSCRIPTION_OPLOG_RESYNC_MS'];\n\n\t\treturn this.parsePositiveNumber(raw);\n\t}\n\n\tprivate parsePositiveNumber(value: any): number {\n\t\tif (typeof value === 'number' && Number.isFinite(value) && value > 0) {\n\t\t\treturn value;\n\t\t}\n\n\t\tif (typeof value === 'string' && value.trim().length) {\n\t\t\tconst parsed = parseInt(value, 10);\n\t\t\tif (Number.isFinite(parsed) && parsed > 0) {\n\t\t\t\treturn parsed;\n\t\t\t}\n\t\t}\n\n\t\treturn 0;\n\t}\n\n\tprivate parsePositiveFloat(value: any): number {\n\t\tif (typeof value === 'number' && Number.isFinite(value) && value > 0) {\n\t\t\treturn value;\n\t\t}\n\n\t\tif (typeof value === 'string' && value.trim().length) {\n\t\t\tconst parsed = parseFloat(value);\n\t\t\tif (Number.isFinite(parsed) && parsed > 0) {\n\t\t\t\treturn parsed;\n\t\t\t}\n\t\t}\n\n\t\treturn 0;\n\t}\n\n\tprivate isChangeStreamUnsupported(error: any): boolean {\n\t\tconst code = typeof error?.code === 'number' ? error.code : null;\n\t\tconst codeName = typeof error?.codeName === 'string' ? error.codeName.toLowerCase() : '';\n\t\tconst message = typeof error?.message === 'string' ? error.message.toLowerCase() : '';\n\n\t\tif (code === 40573) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (codeName && codeName.includes('changestream')) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (message.includes('change stream') && message.includes('replica')) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (message.includes('change stream') && message.includes('not supported')) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate isResumeTokenInvalid(error: any): boolean {\n\t\tconst code = typeof error?.code === 'number' ? error.code : null;\n\t\tconst codeName = typeof error?.codeName === 'string' ? error.codeName.toLowerCase() : '';\n\t\tconst message = typeof error?.message === 'string' ? error.message.toLowerCase() : '';\n\n\t\tif (code === 286) {\n\t\t\t// ChangeStreamHistoryLost\n\t\t\treturn true;\n\t\t}\n\n\t\tif (codeName.includes('changestreamhistorylost')) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (message.includes('resume token') && (\n\t\t\tmessage.includes('not found') ||\n\t\t\tmessage.includes('not possible') ||\n\t\t\tmessage.includes('no longer') ||\n\t\t\tmessage.includes('not in the oplog') ||\n\t\t\tmessage.includes('too old')\n\t\t)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (message.includes('resume of change stream') && message.includes('not possible')) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate async enableLocalOplogFallback(reason: string, error?: any) {\n\t\tif (this._useLocalOplog) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._useLocalOplog = true;\n\t\tthis._oplogMode = 'local';\n\t\tthis._oplogRetryCount = 0;\n\n\t\tif (this._oplog$ && !this._oplog$.closed) {\n\t\t\ttry {\n\t\t\t\tthis._oplog$.removeAllListeners();\n\t\t\t\tawait this._oplog$.close();\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\t// ignore close errors\n\t\t\t}\n\t\t\tthis._oplog$ = null;\n\t\t}\n\n\t\tconst message = typeof error?.message === 'string' ? error.message : '';\n\t\tconsole.log(new Date(), 'oplog fallback enabled', reason, message ? `(${message})` : '');\n\n\t\tthis.queueFullResync('oplog-fallback-enabled');\n\n\t\tif (this._localOplogResyncIntervalMs > 0 && !this._localOplogResyncTimer) {\n\t\t\tthis._localOplogResyncTimer = setInterval(() => {\n\t\t\t\tthis.queueFullResync('oplog-fallback-poll');\n\t\t\t}, this._localOplogResyncIntervalMs);\n\t\t}\n\t}\n\n\tpublic getUseLocalOplog() {\n\t\treturn this._useLocalOplog;\n\t}\n\n\tpublic notifyLocalOplog(collection: string, type = 'update') {\n\t\tif (!this._useLocalOplog) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetImmediate(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.invalidatePubsCache(collection, type);\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\t// ignore local oplog cache invalidation errors\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate getResumeTokenDocId(): string {\n\t\tif (process.env.NODE_APP_INSTANCE) {\n\t\t\treturn `oplog:${process.env.NODE_APP_INSTANCE}`;\n\t\t}\n\n\t\t// Fallback: avoid cross-process contention when NODE_APP_INSTANCE is not set.\n\t\treturn `oplog:${process.pid}`;\n\t}\n\n\tprivate async loadResumeToken(): Promise<ResumeToken | null> {\n\t\ttry {\n\t\t\tconst db = ResolveIOServer.getMainDB();\n\t\t\tif (!db) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst doc = await db.collection<OplogResumeTokenDocument>(this.RESUME_TOKEN_COLLECTION).findOne({ _id: this.getResumeTokenDocId() });\n\t\t\treturn doc?.token || null;\n\t\t}\n\t\tcatch (error) {\n\t\t\tconsole.log(new Date(), 'Sub Manager', 'Failed to load oplog resume token', error);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate async saveResumeToken(token: ResumeToken): Promise<void> {\n\t\tif (!token) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst db = ResolveIOServer.getMainDB();\n\t\t\tif (!db) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait db.collection<OplogResumeTokenDocument>(this.RESUME_TOKEN_COLLECTION).updateOne(\n\t\t\t\t{ _id: this.getResumeTokenDocId() },\n\t\t\t\t{ $set: { token, updatedAt: new Date() } },\n\t\t\t\t{ upsert: true }\n\t\t\t);\n\t\t}\n\t\tcatch (error) {\n\t\t\tconsole.log(new Date(), 'Sub Manager', 'Failed to persist oplog resume token', error);\n\t\t}\n\t}\n\n\tprivate async clearResumeToken(): Promise<void> {\n\t\ttry {\n\t\t\tconst db = ResolveIOServer.getMainDB();\n\t\t\tif (!db) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait db.collection<OplogResumeTokenDocument>(this.RESUME_TOKEN_COLLECTION).deleteOne({ _id: this.getResumeTokenDocId() });\n\t\t}\n\t\tcatch (error) {\n\t\t\tconsole.log(new Date(), 'Sub Manager', 'Failed to clear oplog resume token', error);\n\t\t}\n\t}\n\n\tprivate queueResumeTokenSave(token: ResumeToken, options?: { force?: boolean }) {\n\t\tif (!token) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._lastResumeToken = token;\n\n\t\tconst now = Date.now();\n\t\tconst shouldSave = !!options?.force || (now - this._lastResumeTokenSaveMs) >= this.RESUME_TOKEN_SAVE_INTERVAL_MS;\n\n\t\tif (!shouldSave) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._resumeTokenSavePromise !== null) {\n\t\t\tif (options?.force) {\n\t\t\t\tthis._resumeTokenSaveForcePending = true;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis._lastResumeTokenSaveMs = now;\n\t\tconst tokenToSave = this._lastResumeToken;\n\n\t\tthis._resumeTokenSavePromise = (async () => {\n\t\t\ttry {\n\t\t\t\tawait this.saveResumeToken(tokenToSave);\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tthis._resumeTokenSavePromise = null;\n\t\t\t\tif (this._resumeTokenSaveForcePending) {\n\t\t\t\t\tthis._resumeTokenSaveForcePending = false;\n\t\t\t\t\tthis.queueResumeTokenSave(this._lastResumeToken, { force: true });\n\t\t\t\t}\n\t\t\t}\n\t\t})();\n\t}\n\n\tprivate queueFullResync(reason: string) {\n\t\tif (this._fullResyncPromise !== null) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._fullResyncPromise = (async () => {\n\t\t\ttry {\n\t\t\t\tawait this.fullResyncSubscriptions(reason);\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tthis._fullResyncPromise = null;\n\t\t\t}\n\t\t})();\n\t}\n\n\tprivate async fullResyncSubscriptions(reason: string): Promise<void> {\n\t\ttry {\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Full subscription resync', reason, this._subscriptions.length);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tResolveIOServer.getMongoManager()?.clearQueryCache?.(reason);\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\t// ignore cache-clear errors\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis._nodeCache?.flushAll?.();\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\t// ignore cache-clear errors\n\t\t\t}\n\n\t\t\tconst subs = this._subscriptions.slice();\n\n\t\t\tfor (const sub of subs) {\n\t\t\t\tif (!sub?.clients?.length) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst pub = this._publications[sub.publication];\n\t\t\t\tif (!pub) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (sub.running) {\n\t\t\t\t\tsub.runAgain = true;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (pub.user_specific) {\n\t\t\t\t\tfor (const client of sub.clients) {\n\t\t\t\t\t\tconst ws = this._websocketManager.getWebSocket(client.id_socket);\n\t\t\t\t\t\tif (ws?.readyState === ws.OPEN) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait this.sendDataToOneWithRetry(ws, client.messageId, sub, '', reason);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcatch {\n\t\t\t\t\t\t\t\t// ignore individual failures\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\telse {\n\t\t\t\t\tawait this.sendDataToAllWithRetry(sub, '', reason);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch (error) {\n\t\t\tconsole.log(new Date(), 'Sub Manager', 'Full resync failed', reason, error);\n\t\t}\n\t}\n\n\t// Watch (tail) Mongo's operation log on the entire database (all insert/modify/delete will trigger this function)\n\tprivate async tailOpLog(resumeToken?: ResumeToken) {\n\t\tif (this._useLocalOplog) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._oplog$ && !this._oplog$.closed) {\n\t\t\tthis._oplog$.removeAllListeners();\n\t\t\tawait this._oplog$.close();\n\t\t\tthis._oplog$ = null;\n\t\t}\n\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\tawait new Promise(resolve => setTimeout(resolve, 1000));\n\n\t\tif (!this._oplog$ || this._oplog$.closed) {\n\t\t\tthis._oplogRetryCount += 1;\n\n\t\t\tif (this._oplogRetryCount > 5) {\n\t\t\t\tconsole.error('****************** TAIL OPLOG ERROR, RETRYING A BUNCH OF TIMES, KILLING PROCESS **************************');\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\n\t\t\tconst watchDatabases = this.getWatchedDatabases();\n\t\t\tconst pipeline = [\n\t\t\t\t{\n\t\t\t\t\t$match: {\n\t\t\t\t\t\t$and: [\n\t\t\t\t\t\t\t...(watchDatabases.length ? [{ 'ns.db': { $in: watchDatabases } }] : []),\n\t\t\t\t\t\t\t{'ns.coll': { $nin: [\n\t\t\t\t\t\t\t\t'log-method-latencies', \n\t\t\t\t\t\t\t\t'log-subscriptions', \n\t\t\t\t\t\t\t\t'logs', \n\t\t\t\t\t\t\t\t'counters', \n\t\t\t\t\t\t\t\t'cron-job-histories', \n\t\t\t\t\t\t\t\t'email-histories',\n\t\t\t\t\t\t\t\t'qb-soap-request-histories', \n\t\t\t\t\t\t\t\t'qb-soap-request-responses', \n\t\t\t\t\t\t\t\t'qb-soap-requests',\n\t\t\t\t\t\t\t\t'qb-soap-retries',\n\t\t\t\t\t\t\t\tthis.RESUME_TOKEN_COLLECTION\n\t\t\t\t\t\t\t] }},\n\t\t\t\t\t\t\t{'ns.coll': { $not: /.*\\.versions$/ }},\n\t\t\t\t\t\t\t{'ns.coll': { $not: /^monitor-/ }},\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t];\n\t\n\t\t\t\tlet lastResumeToken: ResumeToken;\n\t\t\t\tlet startedWithResumeToken = false;\n\t\n\t\t\t\tif (resumeToken) {\n\t\t\t\t\tlastResumeToken = resumeToken;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis._oplog$ = ResolveIOServer.getMongoConnection().watch(pipeline, { resumeAfter: resumeToken, fullDocument: 'updateLookup' });\n\t\t\t\t\t\tstartedWithResumeToken = true;\n\t\t\t\t\t}\n\t\t\t\t\tcatch (error) {\n\t\t\t\t\t\tif (this.isChangeStreamUnsupported(error)) {\n\t\t\t\t\t\t\tawait this.enableLocalOplogFallback('change-stream-unsupported', error);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this._oplog$) {\n\t\t\t\t\t\t\tthis._oplog$.removeAllListeners();\n\t\t\t\t\t\t\tawait this._oplog$.close();\n\t\t\t\t\t\t\tthis._oplog$ = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tawait this.clearResumeToken();\n\t\t\t\t\t\tlastResumeToken = null;\n\t\t\t\t\t\t\n\t\t\t\t\t\tconsole.log(new Date(), 'oplog resumeAfter failed, starting fresh', error);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tthis._oplog$ = ResolveIOServer.getMongoConnection().watch(pipeline, { fullDocument: 'updateLookup' });\n\t\t\t\t\t\t\tstartedWithResumeToken = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (innerError) {\n\t\t\t\t\t\t\tif (this.isChangeStreamUnsupported(innerError)) {\n\t\t\t\t\t\t\t\tawait this.enableLocalOplogFallback('change-stream-unsupported', innerError);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthrow innerError;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.queueFullResync('oplog-resumeAfter-failed');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis._oplog$ = ResolveIOServer.getMongoConnection().watch(pipeline, { fullDocument: 'updateLookup' });\n\t\t\t\t\t}\n\t\t\t\t\tcatch (error) {\n\t\t\t\t\t\tif (this.isChangeStreamUnsupported(error)) {\n\t\t\t\t\t\t\tawait this.enableLocalOplogFallback('change-stream-unsupported', error);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconsole.log(new Date(), 'oplog started', startedWithResumeToken ? '(resumeAfter)' : '');\n\n\t\t\tthis._oplog$.on('change', async (doc: ChangeStreamInsertDocument | ChangeStreamUpdateDocument | ChangeStreamReplaceDocument | ChangeStreamDeleteDocument) => {\n\t\t\t\tif (doc.ns) {\n\t\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\t\tconsole.log(new Date(), 'Oplog Hit', doc.ns);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet collection = doc.ns.coll;\n\n\t\t\t\t\tif (!this._debugOplogCollections.some(a => a.collection === doc.ns.coll && a.type === doc.operationType)) {\n\t\t\t\t\t\tthis._debugOplogCollections.push({\n\t\t\t\t\t\t\tcollection: doc.ns.coll,\n\t\t\t\t\t\t\ttype: doc.operationType,\n\t\t\t\t\t\t\thits: 1\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\tthis._debugOplogCollections.find(a => a.collection === doc.ns.coll && a.type === doc.operationType).hits += 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (collection) {\n\t\t\t\t\t\tthis._debugOplogHits += 1;\n\t\t\t\t\t\tconst fullDocument = doc['fullDocument'];\n\t\t\t\t\t\tconst docId = doc.documentKey && doc.documentKey['_id'] !== undefined ? doc.documentKey['_id'] : (fullDocument && fullDocument['_id'] !== undefined ? fullDocument['_id'] : null);\n\n\t\t\t\t\t\tif (doc.operationType === 'insert') {\n\t\t\t\t\t\t\tif (collection === 'support-tickets') {\n\t\t\t\t\t\t\t\tif (this.serverConfig['ROOT_URL'] === 'https://resolveio.com') {\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'sendSupportTicketEmail', doc.documentKey['_id']);\n\t\t\t\t\t\t\t\t\tawait this.invalidatePubsCache(collection, 'insert', docId, fullDocument);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (collection !== 'method-responses') {\n\t\t\t\t\t\t\t\tawait this.invalidatePubsCache(collection, 'insert', docId, fullDocument);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (doc.operationType === 'update' || doc.operationType === 'replace') {\n\t\t\t\t\t\t\tif (collection !== 'method-responses') {\n\t\t\t\t\t\t\t\tawait this.invalidatePubsCache(collection, 'update', docId, fullDocument);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (doc.operationType === 'delete') {\n\t\t\t\t\t\t\tif (collection !== 'method-responses') {\n\t\t\t\t\t\t\t\tawait this.invalidatePubsCache(collection, 'delete', docId);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (collection === 'flags') {\n\t\t\t\t\t\tlet flag = await Flags.findOne({ type: 'Enable Debug' });\n\t\t\t\t\t\tlet dependencyFlag = await Flags.findOne({ type: 'Enable Dependency Debug' });\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (flag && flag.value) {\n\t\t\t\t\t\t\tthis._enableDebug = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._enableDebug = false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (dependencyFlag && dependencyFlag.value) {\n\t\t\t\t\t\t\tthis._enableDependencyDebug = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._enableDependencyDebug = process.env.ENABLE_DEPENDENCY_DEBUG === 'true';\n\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlastResumeToken = doc._id;\n\t\t\t\t\t\tthis.queueResumeTokenSave(lastResumeToken);\n\n\t\t\t\t\t\tif ((!process.env.NODE_APP_INSTANCE || process.env.NODE_APP_INSTANCE === '0') && (process.env.IS_WORKERS_ENABLED === 'false' || (process.env.IS_WORKER_INSTANCE === 'true' && process.env.WORKER_INDEX === '0'))) {\n\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._oplog$.on('error', async error => {\n\t\t\t\tconsole.log(new Date(), 'oplog error', error);\n\t\t\t\tif (this.isChangeStreamUnsupported(error)) {\n\t\t\t\t\tawait this.enableLocalOplogFallback('change-stream-unsupported', error);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (this.isResumeTokenInvalid(error)) {\n\t\t\t\t\tawait this.clearResumeToken();\n\t\t\t\t\tlastResumeToken = null;\n\t\t\t\t\tthis.queueFullResync('oplog-resume-token-invalid');\n\t\t\t\t}\n\n\t\t\t\tawait this._oplog$.close();\n\t\t\t});\n\n\t\t\tthis._oplog$.on('end', async () => {\n\t\t\t\tconsole.log(new Date(), 'oplog end');\n\t\t\t\tawait this._oplog$.close();\n\t\t\t});\n\n\t\t\t\tthis._oplog$.on('close', async () => {\n\t\t\t\t\tconsole.log(new Date(), 'oplog close');\n\t\t\t\t\tthis.queueResumeTokenSave(lastResumeToken, { force: true });\n\t\t\t\t\tthis._oplog$.removeAllListeners();\n\t\t\t\t\tthis._oplog$ = null;\n\t\t\t\t\tawait this.tailOpLog(lastResumeToken);\n\t\t\t\t});\n\t\t}\n\t}\n\n\tprivate packCachePayload(data: any): Buffer | null {\n\t\tif (data === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\ttry {\n\t\t\tconst packed = pack(data);\n\t\t\treturn Buffer.isBuffer(packed) ? packed : Buffer.from(packed);\n\t\t}\n\t\tcatch (err) {\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Sub Cache', 'Pack Failed', err?.message || err);\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate decodeCachePayload(raw: any): any | null {\n\t\tif (!raw) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (Buffer.isBuffer(raw)) {\n\t\t\ttry {\n\t\t\t\treturn unpack(raw);\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\tconsole.log(new Date(), 'Sub Cache', 'Unpack Failed', err?.message || err);\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tif (raw instanceof Uint8Array) {\n\t\t\ttry {\n\t\t\t\treturn unpack(raw);\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\tconsole.log(new Date(), 'Sub Cache', 'Unpack Failed', err?.message || err);\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tif (raw instanceof ArrayBuffer) {\n\t\t\ttry {\n\t\t\t\treturn unpack(new Uint8Array(raw));\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\tconsole.log(new Date(), 'Sub Cache', 'Unpack Failed', err?.message || err);\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t// Treat legacy string caches as invalid to avoid JSON parsing in the hot path.\n\t\tif (typeof raw === 'string') {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn raw;\n\t}\n\n\tprivate getCacheBuffer(raw: any): Buffer | null {\n\t\tif (!raw) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (Buffer.isBuffer(raw)) {\n\t\t\treturn raw;\n\t\t}\n\n\t\tif (raw instanceof Uint8Array) {\n\t\t\treturn Buffer.from(raw);\n\t\t}\n\n\t\tif (raw instanceof ArrayBuffer) {\n\t\t\treturn Buffer.from(new Uint8Array(raw));\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate shouldCachePayload(sub: ActiveSubscriptionModel, payload: Buffer | Uint8Array | null): boolean {\n\t\tif (!payload || payload.byteLength >= 1000000) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (sub.collections.includes('logs')) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (sub.collections.find(a => a.endsWith('.versions'))) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (sub.collections.find(a => a.startsWith('monitor-'))) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tprivate buffersEqual(a: Uint8Array | Buffer | null, b: Uint8Array | Buffer | null): boolean {\n\t\tif (!a || !b) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (a.byteLength !== b.byteLength) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (let index = 0; index < a.byteLength; index++) {\n\t\t\tif (a[index] !== b[index]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tprivate async processSubscription(sub: ActiveSubscriptionModel, ws: WebSocket, messageId: number) {\n\t\tif (!this._publications[sub.publication].user_specific) {\t\t\t\n\t\t\tif (sub.cacheId) {\n\t\t\t\ttry {\n\t\t\t\t\tconst cachedRaw = this._nodeCache.get(sub.cacheId);\n\t\t\t\t\tconst cachedBuffer = this.getCacheBuffer(cachedRaw);\n\n\t\t\t\t\tif (cachedBuffer && cachedBuffer.byteLength) {\n\t\t\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\t\t\tconsole.log(new Date(), 'Process Sub, Cache (packed)', sub.publication);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._websocketManager.sendPackedBuffer(ws, messageId, false, cachedBuffer, 'msgpack');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tconst cacheData = this.decodeCachePayload(cachedRaw);\n\t\t\t\t\t\tif (cacheData === null || cacheData === undefined) {\n\t\t\t\t\t\t\tthrow new Error('cache-miss');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\tdata: cacheData\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\t\t\tconsole.log(new Date(), 'Process Sub, Cache', sub.publication);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch {\n\t\t\t\t\tthis._nodeCache.del(sub.cacheId);\n\t\t\t\t\tsub.cacheId = 0;\n\n\t\t\t\t\tawait this.sendDataToAllWithRetry(sub, '', 'newSub');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\tconsole.log(new Date(), 'Process Sub, Non - Cache', sub.publication, sub.running);\n\t\t\t\t}\n\n\t\t\t\tif (sub.running) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tawait this.sendDataToAllWithRetry(sub, '', 'newSub');\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Process Sub Specific, Non - Cache', sub.publication, sub.running);\n\t\t\t}\n\n\t\t\tif (sub.running) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tawait this.sendDataToOneWithRetry(ws, messageId, sub, '', 'newSub');\n\t\t}\n\t}\n\n\tprivate async sendDataToOne(ws: WebSocket, messageId: number, sub: ActiveSubscriptionModel, collection: string, type: string) {\n\t\tlet monitor = this._monitorManagerFunction.startMonitorFunction('User Specific Publication', sub.publication, '', '', sub.subscriptionData);\n\t\tlet dependencySnapshot: DependencyContextSnapshot;\n\t\tlet res;\n\t\ttry {\n\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertSubscriptionLog', type, sub.publication, collection, JSON.stringify(sub.subscriptionData));\n\n\t\t\tconst execution = await this.runPublicationExecution(sub, ws['id_user']);\n\t\t\tres = execution.result;\n\t\t\tdependencySnapshot = execution.snapshot;\n\t\t\tthis.updateSubscriptionDependencies(sub, dependencySnapshot);\n\n\t\t\tif (execution.packedResult) {\n\t\t\t\tthis._websocketManager.sendPackedBuffer(ws, messageId, false, execution.packedResult, execution.encoding || 'msgpack');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\thasError: false,\n\t\t\t\t\tdata: res\n\t\t\t\t};\n\n\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tconst { error: normalizedError, correlationId } = ensureErrorWithCorrelation(err);\n\n\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\tmessageId: messageId,\n\t\t\t\thasError: true,\n\t\t\t\tdata: Object.assign({}, normalizedError, { correlationId })\n\t\t\t};\n\t\t\t\n\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\n\t\t\tconst errorPayload = {\n\t\t\t\tpublication: sub.publication,\n\t\t\t\tsubscriptionData: sub.subscriptionData,\n\t\t\t\ttype,\n\t\t\t\tcollection,\n\t\t\t\tmessageId,\n\t\t\t\tcorrelationId,\n\t\t\t\terror: {\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\t\t\t};\n\n\t\t\tawait ErrorReporter.report({\n\t\t\t\tsourceApp: 'subscription-manager',\n\t\t\t\tmessage: 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\tenvironment: this.serverConfig?.ROOT_URL,\n\t\t\t\tclientSlug: ResolveIOServer.getClientName(),\n\t\t\t\tclientName: this.serverConfig['CLIENT_NAME'],\n\t\t\t\tstack: normalizedError?.stack,\n\t\t\t\tcontext: errorPayload,\n\t\t\t\tmetadata: {\n\t\t\t\t\tcontext: 'subscription-sendDataToOne',\n\t\t\t\t\tpublication: sub.publication,\n\t\t\t\t\tcorrelationId\n\t\t\t\t},\n\t\t\t\tcorrelationId\n\t\t\t});\n\t\t}\n\t\tfinally {\n\t\t\tawait this._monitorManagerFunction.finishMonitorFunction(monitor);\n\t\t}\n\t}\n\n\t// Fetch pub once, send to all clients linked to this pub\n\tprivate async sendDataToAll(sub: ActiveSubscriptionModel, collection: string, type: string) {\n\t\tif (!sub.clients.length) {\n\t\t\tif (sub.cacheId) {\n\t\t\t\tthis._nodeCache.del(sub.cacheId);\n\t\t\t\tsub.cacheId = 0;\n\t\t\t}\n\n\t\t\tlet subIndex = this._subscriptions.findIndex(a => a.publication === sub.publication && a.subscriptionKey === sub.subscriptionKey);\n\t\t\tif (subIndex >= 0) {\n\t\t\t\tthis._subscriptions.splice(subIndex, 1);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tlet monitor = this._monitorManagerFunction.startMonitorFunction('Publication', sub.publication, '', '', sub.subscriptionData);\n\t\t\tlet res;\n\t\t\tlet dependencySnapshot: DependencyContextSnapshot;\n\n\t\t\ttry {\n\t\t\t\tif (sub.publication !== 'superadminAPM' && sub.publication !== 'loggedInUsers') {\n\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertSubscriptionLog', type, sub.publication, collection, JSON.stringify(sub.subscriptionData));\n\t\t\t\t}\n\n\t\t\t\tconst execution = await this.runPublicationExecution(sub);\n\t\t\t\tres = execution.result;\n\t\t\t\tdependencySnapshot = execution.snapshot;\n\t\t\t\tthis.updateSubscriptionDependencies(sub, dependencySnapshot);\n\t\t\t\tconst packedRes = execution.packedResult ?? this.packCachePayload(res);\n\t\t\t\tconst shouldCache = this.shouldCachePayload(sub, packedRes);\n\n\t\t\t\tif (sub.cacheId) {\n\t\t\t\t\tconst cachedBuffer = this.getCacheBuffer(this._nodeCache.get(sub.cacheId));\n\t\t\t\t\tconst isSame = this.buffersEqual(cachedBuffer, packedRes);\n\n\t\t\t\t\tif (!isSame) {\n\t\t\t\t\t\tfor (let client of sub.clients) {\n\t\t\t\t\t\t\tlet ws = this._websocketManager.getWebSocket(client.id_socket);\n\t\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\t\tif (packedRes) {\n\t\t\t\t\t\t\t\t\tthis._websocketManager.sendPackedBuffer(ws, client.messageId, false, packedRes, execution.encoding || 'msgpack');\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\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\t\t\t\tdata: res\n\t\t\t\t\t\t\t\t\t};\n\t\t\n\t\t\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\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\n\t\t\t\t\t\tthis._nodeCache.del(sub.cacheId);\n\n\t\t\t\t\t\tif (shouldCache) {\n\t\t\t\t\t\t\tthis._nodeCache.set(sub.cacheId, packedRes);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tsub.cacheId = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (!cachedBuffer && shouldCache) {\n\t\t\t\t\t\tthis._nodeCache.set(sub.cacheId, packedRes);\n\t\t\t\t\t}\n\t\t\t\t\telse if (!shouldCache) {\n\t\t\t\t\t\tthis._nodeCache.del(sub.cacheId);\n\t\t\t\t\t\tsub.cacheId = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfor (let client of sub.clients) {\n\t\t\t\t\t\tlet ws = this._websocketManager.getWebSocket(client.id_socket);\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tif (packedRes) {\n\t\t\t\t\t\t\t\tthis._websocketManager.sendPackedBuffer(ws, client.messageId, false, packedRes, execution.encoding || 'msgpack');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\t\t\tdata: res\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\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\t\n\t\t\t\t\tif (shouldCache) {\n\t\t\t\t\t\tsub.cacheId = this._cacheId++;\n\t\t\t\t\t\tthis._nodeCache.set(sub.cacheId, packedRes);\n\n\t\t\t\t\t\tconst nodeCacheSize = this._nodeCache.getStats().vsize;\n\n\t\t\t\t\t\tif (nodeCacheSize > this._heapLimit) {\n\t\t\t\t\t\t\t// Evict cache entries as needed\n\t\t\t\t\t\t\tlet deleteCount = 0;\n\t\t\t\t\t\t\tconst subArr = this._subscriptions.filter(a => a.cacheId && !a.clients.length);\n\t\t\t\t\t\n\t\t\t\t\t\t\tfor (let zz = 0; zz < subArr.length; zz++) {\n\t\t\t\t\t\t\t\tthis._debugRemoveCacheHits += 1;\n\t\t\t\t\t\t\t\tthis._nodeCache.del(subArr[zz].cacheId);\n\t\t\t\t\t\t\t\tsubArr[zz].cacheId = 0;\n\t\t\t\t\t\t\t\tdeleteCount += 1;\n\t\t\t\t\t\t\t\tif (this._nodeCache.getStats().vsize < this._heapLimit * 0.75) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t\t'Sub Cache: ' +\n\t\t\t\t\t\t\t\t\t'Too Big - ' +\n\t\t\t\t\t\t\t\t\tsub.publication +\n\t\t\t\t\t\t\t\t\t' - Deleted: ' +\n\t\t\t\t\t\t\t\t\tdeleteCount +\n\t\t\t\t\t\t\t\t\t' - ' +\n\t\t\t\t\t\t\t\t\tnodeCacheSize\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\telse {\n\t\t\t\t\t\tsub.cacheId = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconst { error: normalizedError, correlationId } = ensureErrorWithCorrelation(err);\n\n\t\t\t\tfor (let client of sub.clients) {\n\t\t\t\t\tlet ws = this._websocketManager.getWebSocket(client.id_socket);\n\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\t\tdata: Object.assign({}, normalizedError, { correlationId })\n\t\t\t\t\t\t};\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst errorPayload = {\n\t\t\t\t\tpublication: sub.publication,\n\t\t\t\t\tsubscriptionData: sub.subscriptionData,\n\t\t\t\t\ttype,\n\t\t\t\t\tcollection,\n\t\t\t\t\tcorrelationId,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tname: normalizedError?.name,\n\t\t\t\t\t\tmessage: normalizedError?.message,\n\t\t\t\t\t\tstack: normalizedError?.stack,\n\t\t\t\t\t\tcode: normalizedError?.code,\n\t\t\t\t\t\tcodeName: normalizedError?.codeName\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t\n\t\t\tawait ErrorReporter.report({\n\t\t\t\tsourceApp: 'subscription-manager',\n\t\t\t\tmessage: 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\tenvironment: this.serverConfig?.ROOT_URL,\n\t\t\t\tclientSlug: ResolveIOServer.getClientName(),\n\t\t\t\tclientName: this.serverConfig['CLIENT_NAME'],\n\t\t\t\tstack: normalizedError?.stack,\n\t\t\t\tcontext: errorPayload,\n\t\t\t\tmetadata: {\n\t\t\t\t\tcontext: 'subscription-sendDataToAll',\n\t\t\t\t\tpublication: sub.publication,\n\t\t\t\t\tcorrelationId\n\t\t\t\t},\n\t\t\t\tcorrelationId\n\t\t\t});\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tawait this._monitorManagerFunction.finishMonitorFunction(monitor);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate ensureDependencyContainers(sub: ActiveSubscriptionModel) {\n\t\tif (!sub.collectionDependencies) {\n\t\t\tsub.collectionDependencies = new Map();\n\t\t}\n\n\t\tif (!sub.collectionFilters) {\n\t\t\tsub.collectionFilters = new Map();\n\t\t}\n\n\t\tif (!sub.watchAllCollections) {\n\t\t\tsub.watchAllCollections = new Set();\n\t\t}\n\n\t\tif (!sub.collectionQueryMeta) {\n\t\t\tsub.collectionQueryMeta = new Map();\n\t\t}\n\t}\n\n\tprivate updateSubscriptionDependencies(sub: ActiveSubscriptionModel, snapshot?: DependencyContextSnapshot) {\n\t\tthis.ensureDependencyContainers(sub);\n\n\t\tif (!snapshot) {\n\t\t\tsub.collectionDependencies.clear();\n\t\t\tsub.collectionFilters.clear();\n\t\t\tsub.watchAllCollections.clear();\n\t\t\tsub.collectionQueryMeta.clear();\n\t\t\tthis.dependencyDebug('Cleared dependency snapshot', { publication: sub.publication });\n\t\t\treturn;\n\t\t}\n\n\t\tsub.collectionDependencies = snapshot.dependencies;\n\t\tsub.collectionFilters = snapshot.filters;\n\t\tsub.watchAllCollections = snapshot.watchAllCollections;\n\t\tsub.collectionQueryMeta = snapshot.queryMetadata;\n\t\tthis.logDependencySnapshot(sub, 'Snapshot updated');\n\t}\n\n\tprivate normalizeDocumentId(rawId: any): string {\n\t\tif (rawId === null || rawId === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (typeof rawId === 'string') {\n\t\t\treturn rawId;\n\t\t}\n\n\t\tif (typeof rawId === 'object' && typeof rawId.toHexString === 'function') {\n\t\t\treturn rawId.toHexString();\n\t\t}\n\n\t\tif (typeof rawId?.toString === 'function') {\n\t\t\tconst str = rawId.toString();\n\t\t\tif (str && str !== '[object Object]') {\n\t\t\t\treturn str;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate getDocumentIdQueryCandidates(documentId: any): any[] {\n\t\tconst candidates: any[] = [];\n\n\t\tif (documentId === undefined || documentId === null) {\n\t\t\treturn [documentId];\n\t\t}\n\n\t\tconst addCandidate = value => {\n\t\t\tif (value === undefined || value === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!candidates.includes(value)) {\n\t\t\t\tcandidates.push(value);\n\t\t\t}\n\t\t};\n\n\t\taddCandidate(documentId);\n\n\t\tif (typeof documentId === 'object') {\n\t\t\tif (typeof documentId.toHexString === 'function') {\n\t\t\t\taddCandidate(documentId.toHexString());\n\t\t\t}\n\n\t\t\tif (typeof documentId.toString === 'function') {\n\t\t\t\tconst str = documentId.toString();\n\t\t\t\tif (str && str !== '[object Object]') {\n\t\t\t\t\taddCandidate(str);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (typeof documentId !== 'string') {\n\t\t\taddCandidate(String(documentId));\n\t\t}\n\n\t\treturn candidates;\n\t}\n\n\tprivate isFilterSafeForInMemory(filter: any): boolean {\n\t\tif (!filter || typeof filter !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst allowedOperators = new Set([\n\t\t\t'$and',\n\t\t\t'$or',\n\t\t\t'$nor',\n\t\t\t'$in',\n\t\t\t'$nin',\n\t\t\t'$eq',\n\t\t\t'$ne',\n\t\t\t'$gt',\n\t\t\t'$gte',\n\t\t\t'$lt',\n\t\t\t'$lte',\n\t\t\t'$exists',\n\t\t\t'$size',\n\t\t\t'$all',\n\t\t\t'$elemMatch',\n\t\t\t'$regex',\n\t\t\t'$options'\n\t\t]);\n\n\t\tconst disallowedOperators = new Set([\n\t\t\t'$where',\n\t\t\t'$expr',\n\t\t\t'$text',\n\t\t\t'$geoWithin',\n\t\t\t'$geoIntersects',\n\t\t\t'$near',\n\t\t\t'$nearSphere',\n\t\t\t'$jsonSchema',\n\t\t\t'$mod',\n\t\t\t'$type',\n\t\t\t'$bitsAllSet',\n\t\t\t'$bitsAllClear',\n\t\t\t'$bitsAnySet',\n\t\t\t'$bitsAnyClear'\n\t\t]);\n\n\t\tconst walk = (value: any): boolean => {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\treturn value.every(item => walk(item));\n\t\t\t}\n\n\t\t\tif (!value || typeof value !== 'object') {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tfor (const [key, entry] of Object.entries(value)) {\n\t\t\t\tif (key.startsWith('$')) {\n\t\t\t\t\tif (disallowedOperators.has(key)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (!allowedOperators.has(key)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!walk(entry)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\n\t\treturn walk(filter);\n\t}\n\n\tprivate documentIdMatchesEvent(documentId: any, document?: any): boolean {\n\t\tif (!document || documentId === undefined || documentId === null) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst eventCandidates = this.getDocumentIdQueryCandidates(documentId)\n\t\t\t.map(id => this.normalizeDocumentId(id))\n\t\t\t.filter(Boolean);\n\t\tconst docCandidates = this.getDocumentIdQueryCandidates(document?._id)\n\t\t\t.map(id => this.normalizeDocumentId(id))\n\t\t\t.filter(Boolean);\n\n\t\tif (!eventCandidates.length || !docCandidates.length) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst docSet = new Set(docCandidates);\n\n\t\tfor (const candidate of eventCandidates) {\n\t\t\tif (docSet.has(candidate)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate resolveFilterMatch(filter: any, document?: any, documentId?: any): boolean | null {\n\t\tif (!document || !filter || typeof filter !== 'object') {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (!this.isFilterSafeForInMemory(filter)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (!this.documentIdMatchesEvent(documentId, document)) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\tconst matcher = sift(filter);\n\t\t\treturn matcher(document);\n\t\t}\n\t\tcatch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate async documentMatchesFilter(collection: string, documentId: any, filter: any, document?: any): Promise<boolean> {\n\t\ttry {\n\t\t\tconst inMemoryMatch = this.resolveFilterMatch(filter, document, documentId);\n\t\t\tif (inMemoryMatch !== null) {\n\t\t\t\treturn inMemoryMatch;\n\t\t\t}\n\n\t\t\tconst db = ResolveIOServer.getMainDB();\n\t\t\tconst filterCopy = deepCopy(filter) || {};\n\t\t\tconst idCandidates = this.getDocumentIdQueryCandidates(documentId);\n\n\t\t\tfor (const idValue of idCandidates) {\n\t\t\t\tconst combinedFilter = {\n\t\t\t\t\t$and: [\n\t\t\t\t\t\t{ _id: idValue },\n\t\t\t\t\t\tfilterCopy\n\t\t\t\t\t]\n\t\t\t\t};\n\n\t\t\t\tconst doc = await db.collection(collection).findOne(combinedFilter);\n\t\t\t\tif (doc) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t\tcatch {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tprivate async shouldInvalidateSubscription(sub: ActiveSubscriptionModel, collection: string, type: string, documentId?: any, document?: any): Promise<boolean> {\n\t\tthis.ensureDependencyContainers(sub);\n\n\t\tconst normalizedDocumentId = this.normalizeDocumentId(documentId);\n\t\tconst hasDependencyData =\n\t\t\t(sub.collectionDependencies.get(collection)?.size || 0) > 0 ||\n\t\t\t(sub.collectionFilters.get(collection)?.length || 0) > 0 ||\n\t\t\tsub.watchAllCollections.has(collection);\n\n\t\tif (!normalizedDocumentId) {\n\t\t\tthis.dependencyDebug('Invalidate due to missing documentId', { publication: sub.publication, collection, type });\n\t\t\treturn true;\n\t\t}\n\n\t\tif (!hasDependencyData) {\n\t\t\tthis.dependencyDebug('Invalidate due to missing dependency metadata', {\n\t\t\t\tpublication: sub.publication,\n\t\t\t\tcollection,\n\t\t\t\ttype\n\t\t\t});\n\t\t\treturn true;\n\t\t}\n\n\t\tif (sub.watchAllCollections.has(collection)) {\n\t\t\tthis.dependencyDebug('Invalidate due to watch-all collection', { publication: sub.publication, collection, type });\n\t\t\treturn true;\n\t\t}\n\n\t\tconst trackedIds = sub.collectionDependencies.get(collection);\n\n\t\tif (trackedIds && trackedIds.has(normalizedDocumentId)) {\n\t\t\tthis.dependencyDebug('Invalidate due to tracked id', { publication: sub.publication, collection, type, documentId: normalizedDocumentId });\n\t\t\treturn true;\n\t\t}\n\n\t\tif (type === 'delete') {\n\t\t\tthis.dependencyDebug('Skip invalidation on delete for unknown id', { publication: sub.publication, collection, type, documentId: normalizedDocumentId });\n\t\t\treturn false;\n\t\t}\n\n\t\tconst filters = sub.collectionFilters.get(collection);\n\n\t\tif (filters && filters.length) {\n\t\t\tfor (const filter of filters) {\n\t\t\t\tif (await this.documentMatchesFilter(collection, documentId, filter, document)) {\n\t\t\t\t\tthis.dependencyDebug('Invalidate due to filter match', { publication: sub.publication, collection, type, documentId: normalizedDocumentId, filter });\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.dependencyDebug('Skip invalidation after dependency checks', { publication: sub.publication, collection, type, documentId: normalizedDocumentId });\n\t\treturn false;\n\t}\n\n\tprivate async shouldInvalidateSubscriptionForEvents(sub: ActiveSubscriptionModel, collection: string, events: SubscriptionInvalidationEvent[]): Promise<boolean> {\n\t\tlet sawInsert = false;\n\t\tlet sawDelete = false;\n\n\t\tfor (const event of events) {\n\t\t\tif (event.type === 'insert') {\n\t\t\t\tsawInsert = true;\n\t\t\t}\n\t\t\telse if (event.type === 'delete') {\n\t\t\t\tsawDelete = true;\n\t\t\t}\n\t\t\tif (await this.shouldInvalidateSubscription(sub, collection, event.type, event.documentId, event.document)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tconst paginationMeta = this.getPaginationMeta(sub, collection);\n\t\tconst paginationReasons = [];\n\t\tif (sawInsert) {\n\t\t\tpaginationReasons.push('insert');\n\t\t}\n\t\tif (sawDelete) {\n\t\t\tpaginationReasons.push('delete');\n\t\t}\n\n\t\tif (paginationMeta?.length && paginationReasons.length) {\n\t\t\tthis.dependencyDebug('Invalidate due to pagination metadata', {\n\t\t\t\tpublication: sub.publication,\n\t\t\t\tcollection,\n\t\t\t\tevents: this.summarizeEvents(events),\n\t\t\t\treasons: paginationReasons,\n\t\t\t\tqueryMeta: paginationMeta.slice(0, 5)\n\t\t\t});\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate getPaginationMeta(sub: ActiveSubscriptionModel, collection: string): QueryMeta[] {\n\t\tthis.ensureDependencyContainers(sub);\n\t\tconst metaList = sub.collectionQueryMeta?.get(collection);\n\t\tif (!metaList || !metaList.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst relevantMeta = metaList.filter(meta => {\n\t\t\tif (!meta) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst limitUsed = typeof meta.limit === 'number' && meta.limit > 0;\n\t\t\tconst skipUsed = typeof meta.skip === 'number' && meta.skip > 0;\n\t\t\treturn limitUsed || skipUsed;\n\t\t});\n\n\t\treturn relevantMeta.length ? relevantMeta : null;\n\t}\n\n\tprivate sendWS(ws: WebSocket, data: ServerResponseModel) {\n\t\tthis._websocketManager.send(ws, data);\n\t}\n\n\tpublic getEnableDebug() {\n\t\treturn this._enableDebug;\n\t}\n\n\tprivate dependencyDebug(message: string, details?: Record<string, unknown>) {\n\t\tif (!this._enableDependencyDebug) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (details) {\n\t\t\tconsole.log(new Date(), '[Dependency Debug]', message, JSON.stringify(details, null, 2));\n\t\t}\n\t\telse {\n\t\t\tconsole.log(new Date(), '[Dependency Debug]', message);\n\t\t}\n\t}\n\n\tprivate summarizeEvents(events: SubscriptionInvalidationEvent[]) {\n\t\treturn events.map(event => ({\n\t\t\ttype: event.type,\n\t\t\tdocumentId: this.normalizeDocumentId(event.documentId)\n\t\t}));\n\t}\n\n\tprivate logDependencySnapshot(sub: ActiveSubscriptionModel, context: string) {\n\t\tif (!this._enableDependencyDebug) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst dependencySummary = Array.from(sub.collectionDependencies.entries()).map(([collectionName, ids]) => {\n\t\t\tconst idList = Array.from(ids || []);\n\t\t\treturn {\n\t\t\t\tcollection: collectionName,\n\t\t\t\tcount: idList.length,\n\t\t\t\tsample: idList.slice(0, 10)\n\t\t\t};\n\t\t});\n\n\t\tconst filterSummary = Array.from(sub.collectionFilters.entries()).map(([collectionName, filters]) => ({\n\t\t\tcollection: collectionName,\n\t\t\tcount: filters.length\n\t\t}));\n\n\t\tconst queryMetaSummary = Array.from(sub.collectionQueryMeta.entries()).map(([collectionName, metaList]) => ({\n\t\t\tcollection: collectionName,\n\t\t\tcount: metaList.length,\n\t\t\tmeta: metaList.slice(0, 5)\n\t\t}));\n\n\t\tconst watchAll = Array.from(sub.watchAllCollections || []);\n\n\t\tthis.dependencyDebug('Dependency snapshot updated', {\n\t\t\tcontext,\n\t\t\tpublication: sub.publication,\n\t\t\tdependencies: dependencySummary,\n\t\t\tcollectionsWithFilters: filterSummary,\n\t\t\tcollectionsWithMeta: queryMetaSummary,\n\t\t\twatchAll\n\t\t});\n\t}\n\n\tpublic async runPublicationOnce(publication: string, subscriptionData: any[] = [], options?: { userId?: string }) {\n\t\tconst pub = this._publications[publication];\n\t\tif (!pub) {\n\t\t\tthrow new Error(`Publication not found: ${publication}`);\n\t\t}\n\n\t\tconst context = Object.assign({}, this, SubscriptionManager.prototype);\n\t\tconst metadata: PublicationContext = {\n\t\t\tpublication,\n\t\t\tsubscriptionData\n\t\t};\n\n\t\tif (pub.user_specific) {\n\t\t\treturn withDependencyTracking(() => pub.function.call(context, options?.userId || '', ...subscriptionData), metadata);\n\t\t}\n\n\t\treturn withDependencyTracking(() => pub.function.call(context, ...subscriptionData), metadata);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/managers/subscription.manager.ts"],"names":[],"mappings":"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","file":"subscription.manager.js","sourcesContent":["import { ChangeStream, ChangeStreamDeleteDocument, ChangeStreamInsertDocument, ChangeStreamReplaceDocument, ChangeStreamUpdateDocument, ResumeToken } from 'mongodb';\nimport * as NodeCache from 'node-cache';\nimport { pack, unpack } from 'msgpackr';\nimport * as WebSocket from 'ws';\nimport { Flags } from '../collections/flag.collection';\nimport { LoggedInUsers } from '../collections/logged-in-users.collection';\nimport { LoggedInUserModel } from '../models/logged-in-users.model';\nimport { ServerResponseModel } from '../models/server-message.model';\nimport { ActiveSubscriptionModel, SubscriptionModel, SubscriptionPubModel } from '../models/subscription.model';\nimport { loadAppStatusPublications } from '../publications/app-status';\nimport { loadAiTerminalPublications } from '../publications/ai-terminal';\nimport { loadCronJobPublications } from '../publications/cron-jobs';\nimport { loadFilePublications } from '../publications/files';\nimport { loadFlagsPublications } from '../publications/flags';\nimport { loadFlagsUpdatePublications } from '../publications/flags-update';\nimport { loadLogPublications } from '../publications/logs';\nimport { loadNotificationPublications } from '../publications/notifications';\nimport { loadReportBuilderDashboardBuilderPublications } from '../publications/report-builder-dashboard-builders';\nimport { loadReportBuilderLibraryPublications } from '../publications/report-builder-libraries';\nimport { loadReportBuilderReportPublications } from '../publications/report-builder-reports';\nimport { loadSuperAdminPublications } from '../publications/super-admin';\nimport { loadUserGroupPublications } from '../publications/user-groups';\nimport { loadUserGuidePublications } from '../publications/user-guides';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { deepCopy, objectIdHexString, round } from '../util/common';\nimport { ErrorReporter } from '../util/error-reporter';\nimport { ensureErrorWithCorrelation } from '../util/error-tracking';\nimport { DependencyContextSnapshot, PublicationContext, QueryMeta, deserializeDependencySnapshot, withDependencyTracking } from '../util/subscription-dependency-context';\nimport { MonitorManagerFunction } from './monitor.manager';\nimport { WebSocketManager } from './websocket.manager';\nconst v8 = require('v8');\nconst sift = require('sift');\n\nfunction resolveHeapLimitBytes(): number {\n\tconst stats = v8.getHeapStatistics();\n\tif (stats && typeof stats.heap_size_limit === 'number') {\n\t\treturn stats.heap_size_limit;\n\t}\n\n\tif (stats && typeof stats.total_available_size === 'number') {\n\t\treturn stats.total_available_size;\n\t}\n\n\treturn 0;\n}\n\n// Performance Dependencies\n// import * as path from 'path';\n// import { Worker } from 'worker_threads';\n\ninterface MongoQueueModel {\n\t_id: number,\n\ttype: string;\n\tcollection: string;\n\tsubscription: ActiveSubscriptionModel;\n\trunning: boolean;\n\trun_again: boolean;\n}\n\ninterface OplogResumeTokenDocument {\n\t_id: string;\n\ttoken?: ResumeToken;\n\tupdatedAt?: Date;\n}\n\ninterface SubscriptionInvalidationEvent {\n\ttype: string;\n\tdocumentId?: any;\n\tdocument?: any;\n}\n\ninterface PublicationExecution {\n\tresult?: any;\n\tpackedResult?: Uint8Array | Buffer;\n\tsnapshot?: DependencyContextSnapshot;\n\tencoding?: 'msgpack' | 'json';\n\tworkerUsed?: boolean;\n}\n\n// interface CurrentPerformanceMonitor {\n// \t_id: number;\n// \tfunction: string;\n// \tpublication: string;\n// \tsubscriptionData: any[];\n// \tdate_start: Date;\n// \tdate_end: Date;\n// \tduration: number;\n// \tresult: string;\n// }\n\nexport class SubscriptionManager {\n\tprivate _websocketManager: WebSocketManager;\n\tprivate _publications: SubscriptionModel = {};\n\tprivate _subscriptions: ActiveSubscriptionModel[] = [];\n\tprivate _wss: WebSocket.Server;\n\tprivate _loggedInUsers: LoggedInUserModel[] = [];\n\tprivate _lastRouteBySocket = new Map<string, { route: string, dateMs: number }>();\n\n\tprivate _mongoQueue: MongoQueueModel[] = [];\n\tprivate _mongoQueueId = 0;\n\t\n\tprivate _oplog$: ChangeStream;\n\tprivate _oplogMode: 'auto' | 'change-stream' | 'local' = 'auto';\n\tprivate _useLocalOplog = false;\n\tprivate _localOplogResyncIntervalMs = 0;\n\tprivate _localOplogResyncTimer: NodeJS.Timeout = null;\n\n\tprivate _nodeCache;\n\tprivate _cacheId = 1;\n\n\tprivate _heapSize = resolveHeapLimitBytes();\n\tprivate _heapLimit: number;\n\n\tprivate serverConfig;\n\n\tprivate _monitorManagerFunction: MonitorManagerFunction;\n\n\tprivate _enableDebug = false;\n\tprivate _enableDependencyDebug = false;\n\tprivate _debugOplogCollections = [];\n\tprivate _debugOplogHits = 0;\n\tprivate _debugSubCollections = [];\n\tprivate _debugSubHits = 0;\n\tprivate _debugUnSubHits = 0;\n\tprivate _debugUnSubAllHits = 0;\n\tprivate _debugMongoQueueHits = 0;\n\tprivate _debugMongoQueueCollections = [];\n\tprivate _debugSendQueueHits = 0;\n\tprivate _debugRemoveCacheHits = 0;\n\n\tprivate _oplogRetryCount = 0;\n\tprivate _lastResumeToken: ResumeToken = null;\n\tprivate _lastResumeTokenSaveMs = 0;\n\tprivate _resumeTokenSavePromise: Promise<void> = null;\n\tprivate _resumeTokenSaveForcePending = false;\n\tprivate _fullResyncPromise: Promise<void> = null;\n\tprivate readonly RESUME_TOKEN_COLLECTION = 'subscription-manager-resume-tokens';\n\tprivate readonly RESUME_TOKEN_SAVE_INTERVAL_MS = 5000;\n\n\t// Buffer to store throttled latency updates with timestamps\n\tprivate latencyBuffer = new Map<string, { latency: number, lastUpdate: Date }>();\n\tprivate _latencyFlushInProgress = false;\n\tprivate _latencyFlushPending = false;\n\n\t// Interval to flush latency updates in MongoDB\n\tprivate readonly LATENCY_UPDATE_INTERVAL = 60000;\n\n\t// Minimum time difference between two latency updates for the same user\n\tprivate readonly LATENCY_UPDATE_THRESHOLD_MS = 30000;\n\tprivate readonly LATENCY_DEBUG_THRESHOLD_MS = 1000;\n\tprivate readonly PUBLICATION_DEBUG_THRESHOLD_MS = 300;\n\n\t// private currentPerfomanceMonitor: CurrentPerformanceMonitor[] = [];\n\t// private idPerformance: number = 0;\n\t// private performanceThread;\n\n\tprivate _invalidationDebounceTimers = new Map<string, NodeJS.Timeout>();\n\tprivate _invalidationPendingTimestamps = new Map<string, number>();\n\tprivate _pendingInvalidations = new Map<string, { events: SubscriptionInvalidationEvent[] }>();\n\tprivate readonly DEBOUNCE_DELAY = 100; // 100ms debounce window\n\tprivate readonly MAX_WAIT_TIME = 500; // 500ms maximum delay\n\n\tprivate _publicationWorkerQueueLimit = 0;\n\n\n\tconstructor() {}\n\n\tstatic createPublicationRegistry(serverConfig?) {\n\t\tconst subscriptionManager = new SubscriptionManager();\n\t\tsubscriptionManager.initializePublicationRegistry(serverConfig);\n\t\treturn subscriptionManager;\n\t}\n\n\tstatic create(wss: WebSocket.Server, serverConfig, monitorManagerFunction: MonitorManagerFunction) {\n\t\tconst subscriptionManager = new SubscriptionManager();\n\t\tsetImmediate(async () => {\n\t\t\tawait subscriptionManager.initialize(wss, serverConfig, monitorManagerFunction);\n\t\t});\n\t\treturn subscriptionManager;\n\t}\n\t\n\tprivate initializePublicationRegistry(serverConfig) {\n\t\tthis.serverConfig = serverConfig || ResolveIOServer.getServerConfig();\n\t\tthis.registerCorePublications();\n\t}\n\n\tprivate async initialize(wss: WebSocket.Server, serverConfig, monitorManagerFunction: MonitorManagerFunction) {\n\t\tthis._websocketManager = ResolveIOServer.getMainServer().getWebSocketManager();\n\t\tthis._monitorManagerFunction = monitorManagerFunction;\n\n\t\tthis._nodeCache = new NodeCache( { stdTTL: 0, checkperiod: 0 } );\n\n\t\tsetInterval(() => this.flushThrottledLatencyUpdates(), this.LATENCY_UPDATE_INTERVAL);\n\n\t\t// setTimeout(() => {\n\t\t// \tconsole.log('Setting up performance thread');\n\n\t\t// \tthis.performanceThread = new Worker(path.join(__dirname, './subscription.performance.js'));\n\n\t\t// \tthis.performanceThread.on('exit', code => {\n\t\t// \t\tconsole.error(new Date(), 'THREAD EXITED!!!!!!!!!!!!!!!!!!', code);\n\t\t// \t});\n\n\t\t// \tthis.performanceThread.on('error', code => {\n\t\t// \t\tconsole.error(new Date(), 'THREAD RECV ERROR !!!!!!!!!!!!!!!!!!', code);\n\t\t// \t});\n\t\t// }, 5000);\n\n\t\t// setInterval(() => {\n\t\t// \tconsole.log('Post thread msg');\n\t\t// \tthis.performanceThread.postMessage(this.currentPerfomanceMonitor);\n\t\t// \tthis.currentPerfomanceMonitor = [];\n\t\t// }, 10000);\n\n\t\tthis.serverConfig = serverConfig;\n\t\tthis._wss = wss;\n\n\t\tthis._oplogMode = this.resolveOplogMode();\n\t\tthis._localOplogResyncIntervalMs = this.resolveLocalOplogResyncIntervalMs();\n\n\t\tthis.registerCorePublications();\n\n\t\tif (this._oplogMode === 'local') {\n\t\t\tawait this.enableLocalOplogFallback('config');\n\t\t}\n\t\telse {\n\t\t\tconst resumeToken = await this.loadResumeToken();\n\t\t\tawait this.tailOpLog(resumeToken || undefined);\n\t\t}\n\n\t\tsetInterval(() => {\n\t\t\tthis._oplogRetryCount = 0;\n\t\t}, 15000);\n\n\t\tsetInterval(() => {\n\t\t\tif (this.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Subs', this._subscriptions.length);\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Logged In Users', this._loggedInUsers.length);\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Mongo Queue', this._mongoQueue.length);\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Mongo Queue Hits', this._debugMongoQueueHits);\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Mongo Queue Collections', JSON.stringify(this._debugMongoQueueCollections.sort((a, b) => a.collection.localeCompare(b.collection) || a.publication.localeCompare(b.publication)), null, 2));\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Oplog Hits', this._debugOplogHits);\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Oplog Collections', JSON.stringify(this._debugOplogCollections.sort((a, b) => a.collection.localeCompare(b.collection) || a.type.localeCompare(b.type)), null, 2));\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Send Queue Hits', this._debugSendQueueHits);\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Sub Hits', this._debugSubHits);\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Sub Collections', JSON.stringify(this._debugSubCollections.sort((a, b) => a.publication.localeCompare(b.publication)), null, 2));\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Unsub Hits', this._debugUnSubHits);\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Unsub All Hits', this._debugUnSubAllHits);\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Cache Cleanup Hits', this._debugRemoveCacheHits);\n\t\t\t}\n\t\t\t\n\t\t\tthis._debugOplogHits = 0;\n\t\t\tthis._debugOplogCollections = [];\n\t\t\tthis._debugSubCollections = [];\n\t\t\tthis._debugMongoQueueHits = 0;\n\t\t\tthis._debugMongoQueueCollections = [];\n\t\t\tthis._debugSendQueueHits = 0;\n\t\t\tthis._debugSubHits = 0;\n\t\t\tthis._debugUnSubHits = 0;\n\t\t\tthis._debugUnSubAllHits = 0;\n\t\t\tthis._debugRemoveCacheHits = 0;\n\t\t}, 60000);\n\n\t\tsetInterval(async () => {\n\t\t\tthis._loggedInUsers = await LoggedInUsers.find();\n\t\n\t\t\tlet userCopy = deepCopy(this._loggedInUsers);\n\t\t\tfor (let i = this._loggedInUsers.length - 1; i >= 0; i--) {\n\t\t\t\tlet loggedInUser = userCopy[i];\n\n\t\t\t\tif (!loggedInUser.date || Date.now() - loggedInUser.date.getTime() > 120000) {\n\t\t\t\t\tif (this._websocketManager.getWebSocket(loggedInUser.id_ws)) {\n\t\t\t\t\t\tif (this.getEnableDebug()) {\n\t\t\t\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Unsub WS', this._websocketManager.getWebSocket(loggedInUser.id_ws)['user'], this._websocketManager.getWebSocket(loggedInUser.id_ws)['id_socket'], 2);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tawait this.unsubscribeAll(this._websocketManager.getWebSocket(loggedInUser.id_ws));\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._subscriptions.forEach(sub => {\n\t\t\t\t\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\t\t\t\t\tlet client = sub.clients[j];\n\n\t\t\t\t\t\t\t\tif (client.id_socket === loggedInUser.id_ws) {\n\t\t\t\t\t\t\t\t\tsub.clients.splice(j, 1);\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\n\t\t\t\t\t\tawait LoggedInUsers.deleteOne({_id: loggedInUser._id});\n\n\t\t\t\t\t\tif (this._loggedInUsers.findIndex(a => a._id === loggedInUser._id) >= 0) {\n\t\t\t\t\t\t\tthis._loggedInUsers.splice(this._loggedInUsers.findIndex(a => a._id === loggedInUser._id), 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < this._subscriptions.length; i++) {\n\t\t\t\tlet sub = this._subscriptions[i];\n\n\t\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\t\tlet client = sub.clients[j];\n\n\t\t\t\t\tif (!this._loggedInUsers.some(a => a.id_ws === client.id_socket)) {\n\t\t\t\t\t\tsub.clients.splice(j, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, 30000);\n\n\t\tlet flag = await Flags.findOne({type: 'Enable Debug'});\n\t\tlet dependencyFlag = await Flags.findOne({type: 'Enable Dependency Debug'});\n\n\t\tif (flag && flag.value) {\n\t\t\tthis._enableDebug = true;\n\t\t}\n\t\telse {\n\t\t\tthis._enableDebug = false;\n\t\t}\n\n\t\tif (dependencyFlag && dependencyFlag.value) {\n\t\t\tthis._enableDependencyDebug = true;\n\t\t}\n\t\telse {\n\t\t\tthis._enableDependencyDebug = process.env.ENABLE_DEPENDENCY_DEBUG === 'true';\n\t\t}\n\n\t\tthis.setCacheLimit();\n\t\tthis.configurePublicationWorkers();\n\t}\n\n\tprivate registerCorePublications() {\n\t\tloadSuperAdminPublications(this);\n\t\tloadAiTerminalPublications(this);\n\t\tloadAppStatusPublications(this);\n\t\tloadLogPublications(this);\n\t\tloadFilePublications(this);\n\t\tloadCronJobPublications(this);\n\t\tloadFlagsUpdatePublications(this);\n\t\tloadFlagsPublications(this);\n\t\tloadNotificationPublications(this);\n\t\tloadReportBuilderReportPublications(this);\n\t\tloadReportBuilderLibraryPublications(this);\n\t\tloadUserGroupPublications(this);\n\t\tloadUserGuidePublications(this);\n\t\tloadReportBuilderDashboardBuilderPublications(this);\n\t}\n\n\tprivate setCacheLimit() {\t\n\t\tif (process.env.IS_WORKERS_ENABLED === 'true') {\n\t\t\tthis._heapLimit = this._heapSize * 0.4;\n\t\t}\n\t\telse {\n\t\t\tthis._heapLimit = this._heapSize * 0.3; // Use 50% of total heap size\n\t\t}\n\t}\n\n\tprivate configurePublicationWorkers() {\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig() || {};\n\t\tthis._publicationWorkerQueueLimit = this.parsePositiveNumber(process.env.SUBSCRIPTION_WORKER_QUEUE_MAX ?? config['SUBSCRIPTION_WORKER_QUEUE_MAX']);\n\t}\n\n\tprivate parseBoolean(value: any): boolean {\n\t\tif (value === true) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (value === false || value === null || value === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (typeof value === 'number') {\n\t\t\treturn value === 1;\n\t\t}\n\n\t\tif (typeof value === 'string') {\n\t\t\tconst normalized = value.trim().toLowerCase();\n\t\t\treturn ['1', 'true', 'yes', 'y', 'on'].includes(normalized);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate clampNumber(value: number, min: number, max: number): number {\n\t\tif (value < min) {\n\t\t\treturn min;\n\t\t}\n\n\t\tif (value > max) {\n\t\t\treturn max;\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tpublic async invalidatePubsCache(collection: string, type: string, documentId?: any, document?: any) {\n\t\tlet queue = this._pendingInvalidations.get(collection);\n\t\tif (!queue) {\n\t\t\tqueue = { events: [] };\n\t\t\tthis._pendingInvalidations.set(collection, queue);\n\t\t}\n\t\tqueue.events.push({ type, documentId, document });\n\n\t\tconst debounceKey = collection;\n\t\tconst now = Date.now();\n\t\n\t\t// Initialize or get existing timestamp\n\t\tconst firstInvalidationTime = this._invalidationPendingTimestamps.get(debounceKey) || now;\n\t\tthis._invalidationPendingTimestamps.set(debounceKey, firstInvalidationTime);\n\t\n\t\t// Clear any existing timer\n\t\tif (this._invalidationDebounceTimers.has(debounceKey)) {\n\t\t\tclearTimeout(this._invalidationDebounceTimers.get(debounceKey));\n\t\t}\n\t\n\t\t// Check if we've waited too long\n\t\tconst waitedTooLong = (now - firstInvalidationTime) >= this.MAX_WAIT_TIME;\n\t\t\n\t\tif (waitedTooLong) {\n\t\t\t// Immediate execution path\n\t\t\tthis._invalidationPendingTimestamps.delete(debounceKey);\n\t\t\tawait this._executeInvalidation(collection);\n\t\t} else {\n\t\t\t// Normal debounce path\n\t\t\tthis._invalidationDebounceTimers.set(\n\t\t\t\tdebounceKey,\n\t\t\t\tsetTimeout(async () => {\n\t\t\t\t\tthis._invalidationPendingTimestamps.delete(debounceKey);\n\t\t\t\t\tawait this._executeInvalidation(collection);\n\t\t\t\t}, this.DEBOUNCE_DELAY)\n\t\t\t);\n\t\t}\n\t}\n\t\n\tprivate async _executeInvalidation(collection: string) {\n\t\t// Clean up any existing timer (defensive)\n\t\tif (this._invalidationDebounceTimers.has(collection)) {\n\t\t\tclearTimeout(this._invalidationDebounceTimers.get(collection));\n\t\t\tthis._invalidationDebounceTimers.delete(collection);\n\t\t}\n\n\t\tconst queued = this._pendingInvalidations.get(collection);\n\t\tthis._pendingInvalidations.delete(collection);\n\n\t\tif (!queued || !queued.events.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst events = queued.events;\n\t\n\t\t// Original invalidation logic\n\t\tResolveIOServer.getMongoManager().invalidateQueryCache(collection, true);\n\t\n\t\tconst collSubs = this._subscriptions.filter(sub => this.subscriptionReferencesCollection(sub, collection));\n\t\n\t\tfor (const sub of collSubs) {\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Invalidate Sub', sub.publication, sub.running, sub.runAgain);\n\t\t\t}\n\n\t\t\tif (!(await this.shouldInvalidateSubscriptionForEvents(sub, collection, events))) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\tif (sub.running) {\n\t\t\t\tsub.runAgain = true;\n\t\t\t\tthis.dependencyDebug('Subscription busy, scheduling rerun', { publication: sub.publication, collection, events: this.summarizeEvents(events) });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\tconst batchType = events.length === 1 ? events[0].type : events.map(event => event.type).join(',');\n\n\t\t\tif (this._publications[sub.publication].user_specific) {\n\t\t\t\tthis.dependencyDebug('Triggering user-specific invalidation', { publication: sub.publication, collection, events: this.summarizeEvents(events), clientCount: sub.clients.length });\n\t\t\t\tfor (let client of sub.clients) {\n\t\t\t\t\tconst ws = this._websocketManager.getWebSocket(client.id_socket);\n\t\t\t\t\tif (ws?.readyState === ws.OPEN) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait this.sendDataToOneWithRetry(ws, client.messageId, sub, collection, batchType);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch {\n\t\t\t\t\t\t\t// Error handling\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\telse {\n\t\t\t\tthis.dependencyDebug('Triggering broadcast invalidation', { publication: sub.publication, collection, events: this.summarizeEvents(events), clientCount: sub.clients.length });\n\t\t\t\tawait this.sendDataToAllWithRetry(sub, collection, batchType);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate subscriptionReferencesCollection(sub: ActiveSubscriptionModel, collection: string): boolean {\n\t\tif (sub.collections?.includes(collection)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.ensureDependencyContainers(sub);\n\n\t\tconst dependencyIds = sub.collectionDependencies?.get(collection);\n\t\tif (dependencyIds && dependencyIds.size > 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst filters = sub.collectionFilters?.get(collection);\n\t\tif (filters && filters.length > 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (sub.watchAllCollections?.has(collection)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate async delay(ms: number) {\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\treturn new Promise(resolve => setTimeout(resolve, ms));\n\t}\n\n\tprivate getMessageDateMs(messageDate: any): number {\n\t\tif (messageDate instanceof Date && !isNaN(messageDate.getTime())) {\n\t\t\treturn messageDate.getTime();\n\t\t}\n\n\t\tif (typeof messageDate === 'string' || typeof messageDate === 'number') {\n\t\t\tconst parsed = new Date(messageDate);\n\t\t\tif (!isNaN(parsed.getTime())) {\n\t\t\t\treturn parsed.getTime();\n\t\t\t}\n\t\t}\n\n\t\treturn Date.now();\n\t}\n\n\tprivate isStaleRouteMessage(ws: WebSocket, messageRoute: string, messageDate: any): boolean {\n\t\tconst socketId = ws ? ws['id_socket'] : '';\n\t\tif (!socketId) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!messageRoute || messageRoute === 'Bypass') {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst messageDateMs = this.getMessageDateMs(messageDate);\n\t\tconst lastRoute = this._lastRouteBySocket.get(socketId);\n\n\t\tif (lastRoute && messageDateMs < lastRoute.dateMs) {\n\t\t\tthis.dependencyDebug('Skip route cleanup due to stale route message', {\n\t\t\t\tsocketId,\n\t\t\t\tmessageRoute,\n\t\t\t\tmessageDateMs,\n\t\t\t\tlastRoute: lastRoute.route,\n\t\t\t\tlastRouteDateMs: lastRoute.dateMs\n\t\t\t});\n\t\t\treturn true;\n\t\t}\n\n\t\tthis._lastRouteBySocket.set(socketId, { route: messageRoute, dateMs: messageDateMs });\n\t\treturn false;\n\t}\n\n\tprivate getPublicationWorkerDispatcher() {\n\t\tconst mainServer = ResolveIOServer.getMainServer();\n\t\treturn mainServer && typeof mainServer.getWorkerDispatcherManager === 'function'\n\t\t\t? mainServer.getWorkerDispatcherManager()\n\t\t\t: null;\n\t}\n\n\tprivate shouldUsePublicationWorkers(): boolean {\n\t\tconst dispatcher = this.getPublicationWorkerDispatcher();\n\t\tif (!dispatcher || !dispatcher.hasWorkers()) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this._publicationWorkerQueueLimit > 0) {\n\t\t\tconst snapshot = dispatcher.getQueueSnapshot();\n\t\t\tif (snapshot.queueDepth >= this._publicationWorkerQueueLimit) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tprivate async runPublicationViaWorker(sub: ActiveSubscriptionModel, userId?: string): Promise<PublicationExecution | null> {\n\t\tif (!this.shouldUsePublicationWorkers()) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst dispatcher = this.getPublicationWorkerDispatcher();\n\t\tif (!dispatcher) {\n\t\t\treturn null;\n\t\t}\n\n\t\ttry {\n\t\t\tconst response = await dispatcher.sendInternalPromiseRaw('runPublication', [\n\t\t\t\tsub.publication,\n\t\t\t\tsub.subscriptionData,\n\t\t\t\tuserId\n\t\t\t]);\n\n\t\t\tif (!response || response.error) {\n\t\t\t\tthrow response?.result || new Error('Publication worker error');\n\t\t\t}\n\n\t\t\tif (!response.packedResult) {\n\t\t\t\tthrow new Error('Publication worker missing packedResult');\n\t\t\t}\n\n\t\t\tconst meta = response.meta || {};\n\t\t\tconst snapshot = meta.snapshot ? deserializeDependencySnapshot(meta.snapshot) : undefined;\n\n\t\t\treturn {\n\t\t\t\tpackedResult: response.packedResult,\n\t\t\t\tsnapshot,\n\t\t\t\tencoding: response.encoding || meta.encoding || 'msgpack',\n\t\t\t\tworkerUsed: true\n\t\t\t};\n\t\t}\n\t\tcatch (error) {\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Worker publication failed, falling back', sub.publication, error?.message || error);\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate async runPublicationLocally(sub: ActiveSubscriptionModel, userId?: string): Promise<PublicationExecution> {\n\t\tconst pub = this._publications[sub.publication];\n\t\tif (!pub) {\n\t\t\tthrow new Error(`Publication not found: ${sub.publication}`);\n\t\t}\n\n\t\tconst context = Object.assign({}, this, SubscriptionManager.prototype);\n\t\tconst metadata: PublicationContext = {\n\t\t\tpublication: sub.publication,\n\t\t\tsubscriptionData: sub.subscriptionData\n\t\t};\n\n\t\tconst execution = pub.user_specific\n\t\t\t? await withDependencyTracking(() => pub.function.call(context, userId || '', ...sub.subscriptionData), Object.assign({}, metadata, { userId }))\n\t\t\t: await withDependencyTracking(() => pub.function.call(context, ...sub.subscriptionData), metadata);\n\n\t\treturn {\n\t\t\tresult: execution.result,\n\t\t\tpackedResult: this.packCachePayload(execution.result),\n\t\t\tsnapshot: execution.snapshot,\n\t\t\tencoding: 'msgpack',\n\t\t\tworkerUsed: false\n\t\t};\n\t}\n\n\tprivate async runPublicationExecution(sub: ActiveSubscriptionModel, userId?: string): Promise<PublicationExecution> {\n\t\tconst pub = this._publications[sub.publication];\n\t\tif (!pub) {\n\t\t\tthrow new Error(`Publication not found: ${sub.publication}`);\n\t\t}\n\n\t\tconst effectiveUserId = pub.user_specific ? userId : undefined;\n\t\tconst workerExecution = await this.runPublicationViaWorker(sub, effectiveUserId);\n\t\tif (workerExecution) {\n\t\t\treturn workerExecution;\n\t\t}\n\n\t\treturn this.runPublicationLocally(sub, effectiveUserId);\n\t}\n\n\tprivate async sendDataToAllWithRetry(sub: ActiveSubscriptionModel, collection: string, type: string) {\n\t\tsub.running = true;\n\n\t\tdo {\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Running sendDataToAll Sub', sub.publication);\n\t\t\t}\n\n\t\t\tsub.runAgain = false;\n\t\t\tawait this.sendDataToAll(sub, collection, type);\n\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Done sendDataToAll Sub', sub.publication, sub.runAgain);\n\t\t\t}\n\n\t\t\tif (sub.runAgain) {\n\t\t\t\tawait this.delay(500); // delay, adjust as needed\n\t\t\t}\n\t\t} while (sub.runAgain);\n\n\t\tsub.running = false;\n\t}\n\n\tprivate async sendDataToOneWithRetry(ws: WebSocket, messageId: number, sub: ActiveSubscriptionModel, collection: string, type: string) {\n\t\tsub.running = true;\n\n\t\tdo {\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Running sendDataToOne Sub', sub.publication);\n\t\t\t}\n\n\t\t\tsub.runAgain = false;\n\t\t\tawait this.sendDataToOne(ws, messageId, sub, collection, type);\n\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Done sendDataToOne Sub', sub.publication, sub.runAgain);\n\t\t\t}\n\n\t\t\tif (sub.runAgain) {\n\t\t\t\tawait this.delay(500); // delay, adjust as needed\n\t\t\t}\n\t\t} while (sub.runAgain);\n\t\tsub.running = false;\n\t}\n\n\t// Add all files to publications private object\n\tpublic publications(method: SubscriptionModel) {\n\t\tthis._publications = Object.assign(this._publications, method);\n\t}\n\n\tpublic getPublication(publication: string): SubscriptionPubModel | undefined {\n\t\treturn this._publications[publication];\n\t}\n\n\tpublic getPublications(): SubscriptionModel {\n\t\treturn this._publications;\n\t}\n\n\t// Throttled `loggedInLatency` method\n\tpublic loggedInLatency(ws: WebSocket) {\n\t\tconst now = new Date();\n\t\tconst newLatency = ws['latency'];\n\t\tconst socketId = ws['id_socket'];\n\t\tlet loggedInUser = this._loggedInUsers.find(a => a.id_ws === socketId);\n\n\t\tif (!loggedInUser) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst existingEntry = this.latencyBuffer.get(socketId);\n\n\t\t// Throttle updates: only update if time threshold has passed or latency has significantly changed\n\t\tif (\n\t\t\t!existingEntry || \n\t\t\t(now.getTime() - existingEntry.lastUpdate.getTime() >= this.LATENCY_UPDATE_THRESHOLD_MS) || \n\t\t\t(Math.abs(newLatency - existingEntry.latency) > 100) // Optional: log only significant changes\n\t\t) {\n\t\t\t// Update in-memory and buffer\n\t\t\tloggedInUser.date = now;\n\t\t\tthis.latencyBuffer.set(socketId, { latency: newLatency, lastUpdate: now });\n\t\t}\n\t}\n\n\t// Method to flush buffered latency updates in bulk\n\tprivate async flushThrottledLatencyUpdates() {\n\t\tif (this.latencyBuffer.size === 0) return; // No updates to flush\n\t\tif (this._latencyFlushInProgress) {\n\t\t\tthis._latencyFlushPending = true;\n\t\t\treturn;\n\t\t}\n\n\t\tthis._latencyFlushInProgress = true;\n\n\t\tconst pendingEntries = Array.from(this.latencyBuffer.entries());\n\t\tthis.latencyBuffer.clear();\n\t\tconst updates = pendingEntries.map(([id_ws, { latency, lastUpdate }]) => ({\n\t\t\tupdateOne: {\n\t\t\t\tfilter: { id_ws },\n\t\t\t\tupdate: { $set: { latency, date: lastUpdate } }\n\t\t\t}\n\t\t}));\n\n\t\ttry {\n\t\t\tawait LoggedInUsers.bulkWrite(updates, { ordered: false });\n\n\t\t\tif (this.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Throttled latency batch update successful', updates.length);\n\t\t\t}\n\t\t}\n\t\tcatch (error) {\n\t\t\tfor (const [id_ws, payload] of pendingEntries) {\n\t\t\t\tconst current = this.latencyBuffer.get(id_ws);\n\t\t\t\tif (!current || current.lastUpdate < payload.lastUpdate) {\n\t\t\t\t\tthis.latencyBuffer.set(id_ws, payload);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconsole.error(new Date(), 'Sub Manager', 'Throttled latency batch update failed', error);\n\t\t\t// Optional: implement retry logic or logging for failed updates\n\t\t}\n\t\tfinally {\n\t\t\tthis._latencyFlushInProgress = false;\n\t\t\tif (this._latencyFlushPending) {\n\t\t\t\tthis._latencyFlushPending = false;\n\t\t\t\tsetImmediate(() => this.flushThrottledLatencyUpdates());\n\t\t\t}\n\t\t}\n\t}\n\n\t// Subscribe to publication\n\tpublic async subscribe(messageRoute: string, messageDate: Date, ws: WebSocket, messageId: number, publication: string, subscriptionData: any[]) {\n\t\tthis._debugSubHits += 1;\n\n\t\tif (!this._debugSubCollections.some(a => a.publication === publication)) {\n\t\t\tthis._debugSubCollections.push({\n\t\t\t\tpublication: publication,\n\t\t\t\thits: 1\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis._debugSubCollections.find(a => a.publication === publication).hits += 1;\n\t\t}\n\n\t\tlet pub = this._publications[publication];\n\n\t\tif (!pub) {\n\t\t\tconsole.error(new Date(), 'No Publication: ' + publication);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tif (subscriptionData.length > 1 || subscriptionData[0]) {\n\t\t\t\tif (!pub.check) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Function For Pub ' + publication);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if (!pub.check._schema) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Schema For Pub ' + publication);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet valObj = {};\n\t\t\t\t\tlet valKeys = Object.keys(pub.check._schema);\n\n\t\t\t\t\tlet rootKeys = valKeys.filter(a => !a.includes('.'));\n\n\t\t\t\t\tfor (let i = 0; i < subscriptionData.length; i++) {\n\t\t\t\t\t\tvalObj[rootKeys[i]] = subscriptionData[i];\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpub.check.validate(valObj);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (errors) {\n\t\t\t\t\t\tif (errors) {\n\t\t\t\t\t\t\tconsole.error(new Date(), 'Error in Pub Check (' + publication + ')', errors);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst staleRouteMessage = this.isStaleRouteMessage(ws, messageRoute, messageDate);\n\t\t\tif (messageRoute !== 'Bypass' && messageRoute !== '/' && !staleRouteMessage) {\n\t\t\t\tlet urlData = messageRoute.split('/');\n\t\t\t\tlet urlModule = '';\n\t\t\t\tlet urlNext = urlData[0];\n\n\t\t\t\tif (urlData[0] === '') {\n\t\t\t\t\turlModule = '/';\n\t\t\t\t\turlNext = urlData[1];\n\t\t\t\t}\n\n\t\t\t\turlModule += urlNext;\n\n\t\t\t\tif (urlData.length > 1) {\n\t\t\t\t\turlModule += '/';\n\t\t\t\t}\n\n\t\t\t\tlet otherRouteSubs = this._subscriptions.filter(a => a.clients.some(b => b.id_socket === ws['id_socket'] && b.messageRoute !== 'Bypass' && b.messageRoute !== '/' && b.messageRoute !== messageRoute && !b.messageRoute.startsWith(urlModule)));\n\n\t\t\t\tif (otherRouteSubs.length) {\n\t\t\t\t\t// ResolveIOServer.getMainServer().getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Detected Undestroyed Subscription - ' + this.serverConfig['CLIENT_NAME'], 'USER: ' + ws['user'] + ' (Socket: ' + ws['id_socket'] + ') ' + ' is on route: ' + messageRoute + ' but has the following subscriptions on other routes:' + JSON.stringify(otherRouteSubs, null, 2));\n\n\t\t\t\t\totherRouteSubs.forEach(otherSub => {\n\t\t\t\t\t\totherSub.clients.filter(a => a.id_socket === ws['id_socket']).forEach(client => {\n\t\t\t\t\t\t\tthis.unsubscribe(client.messageRoute, new Date(), ws, client.messageId, otherSub.publication, otherSub.subscriptionData);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst normalizedSubscriptionData = Array.isArray(subscriptionData) ? subscriptionData : [];\n\t\t\tconst subscriptionKey = JSON.stringify(normalizedSubscriptionData);\n\t\t\tlet sub = this._subscriptions.find(a => a.publication === publication && a.subscriptionKey === subscriptionKey);\n\n\t\t\t// If sub found (another user watching same data), add client to same sub\n\t\t\tif (sub) {\n\t\t\t\tif (!sub.clients.some(a => a.id_socket === ws['id_socket'] && a.messageId === messageId)) {\n\t\t\t\t\tsub.clients.push({\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\tid_socket: ws['id_socket'],\n\t\t\t\t\t\tmessageRoute: messageRoute\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If sub not found, create new sub\n\t\t\telse {\n\t\t\t\tthis._subscriptions.push({\n\t\t\t\t\tpublication: publication,\n\t\t\t\t\tsubscriptionKey: subscriptionKey,\n\t\t\t\t\tsubscriptionData: normalizedSubscriptionData,\n\t\t\t\t\tcollections: this.getPublicationCollections(publication),\n\t\t\t\t\tclients: [{\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\tid_socket: ws['id_socket'],\n\t\t\t\t\t\tmessageRoute: messageRoute,\n\t\t\t\t\t}],\n\t\t\t\tcacheId: 0,\n\t\t\t\trunning: false,\n\t\t\t\trunAgain: false,\n\t\t\t\tcollectionDependencies: new Map(),\n\t\t\t\tcollectionFilters: new Map(),\n\t\t\t\twatchAllCollections: new Set(),\n\t\t\t\tcollectionQueryMeta: new Map()\n\t\t\t});\n\t\t}\n\n\t\t\tif (!sub) {\n\t\t\t\tsub = this._subscriptions.find(a => a.publication === publication && a.subscriptionKey === subscriptionKey);\n\t\t\t}\n\n\t\t\tthis.ensureDependencyContainers(sub);\n\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'New Sub', sub.publication, sub.running, sub.runAgain, sub.clients.length);\n\t\t\t}\n\n\t\t\t// Immediately send data to the new client\n\t\t\tawait this.processSubscription(sub, ws, messageId);\n\t\t}\n\t}\n\n\tpublic async createLoggedInUser(id_ws: string): Promise<LoggedInUserModel> {\n\t\tlet ws = this._websocketManager.getWebSocket(id_ws);\n\n\t\tif (ws) {\n\t\t\tlet user = {\n\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t__v: 0,\n\t\t\t\tdate: new Date(),\n\t\t\t\tid_user: ws['id_user'],\n\t\t\t\tuser: ws['user'],\n\t\t\t\tid_ws: ws['id_socket']\n\t\t\t};\n\t\t\t\n\t\t\tthis._loggedInUsers.push(user);\n\t\t\tawait LoggedInUsers.insertOne(user);\n\t\t\t\n\t\t\treturn user;\n\t\t}\n\t\telse {\n\t\t\tthrow new Error('Error in Create Logged In User: No WS');\n\t\t}\n\t}\n\n\t// Unsubscribe from publication \n\tpublic unsubscribe(messageRoute: string, messageDate: Date, ws: WebSocket, messageId: number, publication: string, subscriptionData: any[]) {\t\t\n\t\tthis._debugUnSubHits += 1;\n\n\t\tif (!this._publications[publication]) {\n\t\t\tconsole.log('No Publication: ' + publication);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tconst normalizedSubscriptionData = Array.isArray(subscriptionData) ? subscriptionData : [];\n\t\t\tconst subscriptionKey = JSON.stringify(normalizedSubscriptionData);\n\t\t\tlet sub = this._subscriptions.find(a => a.publication === publication && a.subscriptionKey === subscriptionKey);\n\n\t\t\tif (sub) {\n\t\t\t\tfor (let i = sub.clients.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (sub.clients[i].id_user === ws['id_user'] && sub.clients[i].messageId === messageId && sub.clients[i].id_socket === ws['id_socket']) {\n\t\t\t\t\t\tsub.clients.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\tconsole.log(new Date(), 'Unsub', sub.publication, sub.running, sub.runAgain, sub.clients.length);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\n\t// Unsubscribe from publication\n\tpublic async unsubscribeAll(ws: WebSocket) {\n\t\tthis._debugUnSubAllHits += 1;\n\n\t\tif (ws) {\n\t\t\tif (ws['id_socket']) {\n\t\t\t\tthis._lastRouteBySocket.delete(ws['id_socket']);\n\t\t\t}\n\n\t\t\t// Check if WebSocket has already been unsubscribed\n\t\t\tif (ws['isUnsubscribed']) {\n\t\t\t\treturn; // Skip if already unsubscribed\n\t\t\t}\n\t\t\t\n\t\t\t// Mark the WebSocket as unsubscribed to prevent further calls\n\t\t\tws['isUnsubscribed'] = true;\n\t\t\t\n\t\t\tif (this._loggedInUsers.map(a => a.id_ws).indexOf(ws['id_socket']) >= 0) {\n\t\t\t\tthis._loggedInUsers.splice(this._loggedInUsers.map(a => a.id_ws).indexOf(ws['id_socket']), 1);\n\t\t\t}\n\t\t\t\n\t\t\tawait LoggedInUsers.deleteOne({ id_ws: ws['id_socket'] });\n\n\t\t\tlet userSubs = this._subscriptions.filter(a => a.clients.some(b => b.id_user === ws['id_user'] && b.id_socket === ws['id_socket']));\n\n\t\t\tfor (let i = userSubs.length - 1; i >= 0; i--) {\n\t\t\t\tlet sub = userSubs[i];\n\n\t\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\t\tif (sub.clients[j].id_socket === ws['id_socket']) {\n\t\t\t\t\t\tsub.clients.splice(j, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._websocketManager.removeWebSocket(ws);\n\t\t}\n\t}\n\n\tpublic getActiveSubscriptions() {\n\t\treturn this._subscriptions;\n\t}\n\n\t// Get publication collection\n\tprivate getPublicationCollections(publication: string) {\n\t\treturn this._publications[publication].collections;\n\t}\n\n\tprivate getWatchedDatabases(): string[] {\n\t\tconst mongoManager = ResolveIOServer.getMongoManager();\n\t\tconst managerDatabases = mongoManager?.getWatchedDatabases() || [];\n\n\t\tif (managerDatabases.length) {\n\t\t\treturn managerDatabases;\n\t\t}\n\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig();\n\t\tconst mainDb = config && typeof config['DATABASE'] === 'string' ? config['DATABASE'] : '';\n\n\t\treturn mainDb ? [mainDb] : [];\n\t}\n\n\tprivate resolveOplogMode(): 'auto' | 'change-stream' | 'local' {\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig() || {};\n\t\tconst raw = process.env.SUBSCRIPTION_OPLOG_MODE || process.env.OPLOG_MODE || config['SUBSCRIPTION_OPLOG_MODE'] || config['OPLOG_MODE'];\n\n\t\tif (typeof raw !== 'string' || !raw.trim()) {\n\t\t\treturn 'auto';\n\t\t}\n\n\t\tconst normalized = raw.trim().toLowerCase();\n\n\t\tif (['local', 'single', 'standalone', 'fallback', 'poll'].includes(normalized)) {\n\t\t\treturn 'local';\n\t\t}\n\n\t\tif (['change-stream', 'changestream', 'oplog', 'replica', 'replicaset', 'rs'].includes(normalized)) {\n\t\t\treturn 'change-stream';\n\t\t}\n\n\t\treturn 'auto';\n\t}\n\n\tprivate resolveLocalOplogResyncIntervalMs(): number {\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig() || {};\n\t\tconst raw = process.env.OPLOG_FALLBACK_RESYNC_MS\n\t\t\t|| process.env.SUBSCRIPTION_OPLOG_RESYNC_MS\n\t\t\t|| config['OPLOG_FALLBACK_RESYNC_MS']\n\t\t\t|| config['SUBSCRIPTION_OPLOG_RESYNC_MS'];\n\n\t\treturn this.parsePositiveNumber(raw);\n\t}\n\n\tprivate resolveResumeTokenMaxAgeMs(): number {\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig() || {};\n\t\tconst raw = process.env.OPLOG_RESUME_TOKEN_MAX_AGE_MS\n\t\t\t|| process.env.SUBSCRIPTION_OPLOG_RESUME_TOKEN_MAX_AGE_MS\n\t\t\t|| config['OPLOG_RESUME_TOKEN_MAX_AGE_MS']\n\t\t\t|| config['SUBSCRIPTION_OPLOG_RESUME_TOKEN_MAX_AGE_MS'];\n\n\t\treturn this.parsePositiveNumber(raw);\n\t}\n\n\tprivate parsePositiveNumber(value: any): number {\n\t\tif (typeof value === 'number' && Number.isFinite(value) && value > 0) {\n\t\t\treturn value;\n\t\t}\n\n\t\tif (typeof value === 'string' && value.trim().length) {\n\t\t\tconst parsed = parseInt(value, 10);\n\t\t\tif (Number.isFinite(parsed) && parsed > 0) {\n\t\t\t\treturn parsed;\n\t\t\t}\n\t\t}\n\n\t\treturn 0;\n\t}\n\n\tprivate parsePositiveFloat(value: any): number {\n\t\tif (typeof value === 'number' && Number.isFinite(value) && value > 0) {\n\t\t\treturn value;\n\t\t}\n\n\t\tif (typeof value === 'string' && value.trim().length) {\n\t\t\tconst parsed = parseFloat(value);\n\t\t\tif (Number.isFinite(parsed) && parsed > 0) {\n\t\t\t\treturn parsed;\n\t\t\t}\n\t\t}\n\n\t\treturn 0;\n\t}\n\n\tprivate isChangeStreamUnsupported(error: any): boolean {\n\t\tconst code = typeof error?.code === 'number' ? error.code : null;\n\t\tconst codeName = typeof error?.codeName === 'string' ? error.codeName.toLowerCase() : '';\n\t\tconst message = typeof error?.message === 'string' ? error.message.toLowerCase() : '';\n\n\t\tif (code === 40573) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (codeName && codeName.includes('changestream')) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (message.includes('change stream') && message.includes('replica')) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (message.includes('change stream') && message.includes('not supported')) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate isResumeTokenInvalid(error: any): boolean {\n\t\tconst code = typeof error?.code === 'number' ? error.code : null;\n\t\tconst codeName = typeof error?.codeName === 'string' ? error.codeName.toLowerCase() : '';\n\t\tconst message = typeof error?.message === 'string' ? error.message.toLowerCase() : '';\n\n\t\tif (code === 286) {\n\t\t\t// ChangeStreamHistoryLost\n\t\t\treturn true;\n\t\t}\n\n\t\tif (codeName.includes('changestreamhistorylost')) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (message.includes('resume token') && (\n\t\t\tmessage.includes('not found') ||\n\t\t\tmessage.includes('not possible') ||\n\t\t\tmessage.includes('no longer') ||\n\t\t\tmessage.includes('not in the oplog') ||\n\t\t\tmessage.includes('too old')\n\t\t)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (message.includes('resume of change stream') && message.includes('not possible')) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate async enableLocalOplogFallback(reason: string, error?: any) {\n\t\tif (this._useLocalOplog) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._useLocalOplog = true;\n\t\tthis._oplogMode = 'local';\n\t\tthis._oplogRetryCount = 0;\n\n\t\tif (this._oplog$ && !this._oplog$.closed) {\n\t\t\ttry {\n\t\t\t\tthis._oplog$.removeAllListeners();\n\t\t\t\tawait this._oplog$.close();\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\t// ignore close errors\n\t\t\t}\n\t\t\tthis._oplog$ = null;\n\t\t}\n\n\t\tconst message = typeof error?.message === 'string' ? error.message : '';\n\t\tconsole.log(new Date(), 'oplog fallback enabled', reason, message ? `(${message})` : '');\n\n\t\tthis.queueFullResync('oplog-fallback-enabled');\n\n\t\tif (this._localOplogResyncIntervalMs > 0 && !this._localOplogResyncTimer) {\n\t\t\tthis._localOplogResyncTimer = setInterval(() => {\n\t\t\t\tthis.queueFullResync('oplog-fallback-poll');\n\t\t\t}, this._localOplogResyncIntervalMs);\n\t\t}\n\t}\n\n\tpublic getUseLocalOplog() {\n\t\treturn this._useLocalOplog;\n\t}\n\n\tpublic notifyLocalOplog(collection: string, type = 'update') {\n\t\tif (!this._useLocalOplog) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetImmediate(async () => {\n\t\t\ttry {\n\t\t\t\tawait this.invalidatePubsCache(collection, type);\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\t// ignore local oplog cache invalidation errors\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate getResumeTokenDocId(): string {\n\t\tif (process.env.NODE_APP_INSTANCE) {\n\t\t\treturn `oplog:${process.env.NODE_APP_INSTANCE}`;\n\t\t}\n\n\t\t// Fallback: avoid cross-process contention when NODE_APP_INSTANCE is not set.\n\t\treturn `oplog:${process.pid}`;\n\t}\n\n\tprivate async loadResumeToken(): Promise<ResumeToken | null> {\n\t\ttry {\n\t\t\tconst db = ResolveIOServer.getMainDB();\n\t\t\tif (!db) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst loadToken = async () => {\n\t\t\t\tconst collection = db.collection<OplogResumeTokenDocument>(this.RESUME_TOKEN_COLLECTION);\n\t\t\t\tconst doc = await collection.findOne({ _id: this.getResumeTokenDocId() });\n\t\t\t\tconst token = doc?.token || null;\n\n\t\t\t\tif (!token) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tconst maxAgeMs = this.resolveResumeTokenMaxAgeMs();\n\t\t\t\tif (maxAgeMs > 0 && doc?.updatedAt instanceof Date) {\n\t\t\t\t\tconst ageMs = Date.now() - doc.updatedAt.getTime();\n\t\t\t\t\tif (ageMs > maxAgeMs) {\n\t\t\t\t\t\tawait collection.deleteOne({ _id: this.getResumeTokenDocId() });\n\t\t\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Resume token expired, clearing', round(ageMs / 1000), 's');\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn token;\n\t\t\t};\n\n\t\t\tconst mongoManager = ResolveIOServer.getMongoManager();\n\t\t\treturn mongoManager ? await mongoManager.runWithoutSession(loadToken) : await loadToken();\n\t\t}\n\t\tcatch (error) {\n\t\t\tconsole.log(new Date(), 'Sub Manager', 'Failed to load oplog resume token', error);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate async saveResumeToken(token: ResumeToken): Promise<void> {\n\t\tif (!token) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst db = ResolveIOServer.getMainDB();\n\t\t\tif (!db) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst saveToken = async () => {\n\t\t\t\tawait db.collection<OplogResumeTokenDocument>(this.RESUME_TOKEN_COLLECTION).updateOne(\n\t\t\t\t\t{ _id: this.getResumeTokenDocId() },\n\t\t\t\t\t{ $set: { token, updatedAt: new Date() } },\n\t\t\t\t\t{ upsert: true }\n\t\t\t\t);\n\t\t\t};\n\n\t\t\tconst mongoManager = ResolveIOServer.getMongoManager();\n\t\t\tif (mongoManager) {\n\t\t\t\tawait mongoManager.runWithoutSession(saveToken);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tawait saveToken();\n\t\t\t}\n\t\t}\n\t\tcatch (error) {\n\t\t\tconsole.log(new Date(), 'Sub Manager', 'Failed to persist oplog resume token', error);\n\t\t}\n\t}\n\n\tprivate async clearResumeToken(): Promise<void> {\n\t\ttry {\n\t\t\tconst db = ResolveIOServer.getMainDB();\n\t\t\tif (!db) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst clearToken = async () => {\n\t\t\t\tawait db.collection<OplogResumeTokenDocument>(this.RESUME_TOKEN_COLLECTION)\n\t\t\t\t\t.deleteOne({ _id: this.getResumeTokenDocId() });\n\t\t\t};\n\n\t\t\tconst mongoManager = ResolveIOServer.getMongoManager();\n\t\t\tif (mongoManager) {\n\t\t\t\tawait mongoManager.runWithoutSession(clearToken);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tawait clearToken();\n\t\t\t}\n\t\t}\n\t\tcatch (error) {\n\t\t\tconsole.log(new Date(), 'Sub Manager', 'Failed to clear oplog resume token', error);\n\t\t}\n\t}\n\n\tprivate queueResumeTokenSave(token: ResumeToken, options?: { force?: boolean }) {\n\t\tif (!token) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._lastResumeToken = token;\n\n\t\tconst now = Date.now();\n\t\tconst shouldSave = !!options?.force || (now - this._lastResumeTokenSaveMs) >= this.RESUME_TOKEN_SAVE_INTERVAL_MS;\n\n\t\tif (!shouldSave) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._resumeTokenSavePromise !== null) {\n\t\t\tif (options?.force) {\n\t\t\t\tthis._resumeTokenSaveForcePending = true;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis._lastResumeTokenSaveMs = now;\n\t\tconst tokenToSave = this._lastResumeToken;\n\n\t\tthis._resumeTokenSavePromise = (async () => {\n\t\t\ttry {\n\t\t\t\tawait this.saveResumeToken(tokenToSave);\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tthis._resumeTokenSavePromise = null;\n\t\t\t\tif (this._resumeTokenSaveForcePending) {\n\t\t\t\t\tthis._resumeTokenSaveForcePending = false;\n\t\t\t\t\tthis.queueResumeTokenSave(this._lastResumeToken, { force: true });\n\t\t\t\t}\n\t\t\t}\n\t\t})();\n\t}\n\n\tprivate queueFullResync(reason: string) {\n\t\tif (this._fullResyncPromise !== null) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._fullResyncPromise = (async () => {\n\t\t\ttry {\n\t\t\t\tawait this.fullResyncSubscriptions(reason);\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tthis._fullResyncPromise = null;\n\t\t\t}\n\t\t})();\n\t}\n\n\tprivate async fullResyncSubscriptions(reason: string): Promise<void> {\n\t\ttry {\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Sub Manager', 'Full subscription resync', reason, this._subscriptions.length);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tResolveIOServer.getMongoManager()?.clearQueryCache?.(reason);\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\t// ignore cache-clear errors\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis._nodeCache?.flushAll?.();\n\t\t\t}\n\t\t\tcatch {\n\t\t\t\t// ignore cache-clear errors\n\t\t\t}\n\n\t\t\tconst subs = this._subscriptions.slice();\n\n\t\t\tfor (const sub of subs) {\n\t\t\t\tif (!sub?.clients?.length) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst pub = this._publications[sub.publication];\n\t\t\t\tif (!pub) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (sub.running) {\n\t\t\t\t\tsub.runAgain = true;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (pub.user_specific) {\n\t\t\t\t\tfor (const client of sub.clients) {\n\t\t\t\t\t\tconst ws = this._websocketManager.getWebSocket(client.id_socket);\n\t\t\t\t\t\tif (ws?.readyState === ws.OPEN) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait this.sendDataToOneWithRetry(ws, client.messageId, sub, '', reason);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcatch {\n\t\t\t\t\t\t\t\t// ignore individual failures\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\telse {\n\t\t\t\t\tawait this.sendDataToAllWithRetry(sub, '', reason);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch (error) {\n\t\t\tconsole.log(new Date(), 'Sub Manager', 'Full resync failed', reason, error);\n\t\t}\n\t}\n\n\t// Watch (tail) Mongo's operation log on the entire database (all insert/modify/delete will trigger this function)\n\tprivate async tailOpLog(resumeToken?: ResumeToken) {\n\t\tif (this._useLocalOplog) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._oplog$ && !this._oplog$.closed) {\n\t\t\tthis._oplog$.removeAllListeners();\n\t\t\tawait this._oplog$.close();\n\t\t\tthis._oplog$ = null;\n\t\t}\n\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\tawait new Promise(resolve => setTimeout(resolve, 1000));\n\n\t\tif (!this._oplog$ || this._oplog$.closed) {\n\t\t\tthis._oplogRetryCount += 1;\n\n\t\t\tif (this._oplogRetryCount > 5) {\n\t\t\t\tconsole.error('****************** TAIL OPLOG ERROR, RETRYING A BUNCH OF TIMES, KILLING PROCESS **************************');\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\n\t\t\tconst watchDatabases = this.getWatchedDatabases();\n\t\t\tconst pipeline = [\n\t\t\t\t{\n\t\t\t\t\t$match: {\n\t\t\t\t\t\t$and: [\n\t\t\t\t\t\t\t...(watchDatabases.length ? [{ 'ns.db': { $in: watchDatabases } }] : []),\n\t\t\t\t\t\t\t{'ns.coll': { $nin: [\n\t\t\t\t\t\t\t\t'log-method-latencies', \n\t\t\t\t\t\t\t\t'log-subscriptions', \n\t\t\t\t\t\t\t\t'logs', \n\t\t\t\t\t\t\t\t'counters', \n\t\t\t\t\t\t\t\t'cron-job-histories', \n\t\t\t\t\t\t\t\t'email-histories',\n\t\t\t\t\t\t\t\t'qb-soap-request-histories', \n\t\t\t\t\t\t\t\t'qb-soap-request-responses', \n\t\t\t\t\t\t\t\t'qb-soap-requests',\n\t\t\t\t\t\t\t\t'qb-soap-retries',\n\t\t\t\t\t\t\t\tthis.RESUME_TOKEN_COLLECTION\n\t\t\t\t\t\t\t] }},\n\t\t\t\t\t\t\t{'ns.coll': { $not: /.*\\.versions$/ }},\n\t\t\t\t\t\t\t{'ns.coll': { $not: /^monitor-/ }},\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t];\n\t\n\t\t\t\tlet lastResumeToken: ResumeToken;\n\t\t\t\tlet startedWithResumeToken = false;\n\t\n\t\t\t\tif (resumeToken) {\n\t\t\t\t\tlastResumeToken = resumeToken;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis._oplog$ = ResolveIOServer.getMongoConnection().watch(pipeline, { resumeAfter: resumeToken, fullDocument: 'updateLookup' });\n\t\t\t\t\t\tstartedWithResumeToken = true;\n\t\t\t\t\t}\n\t\t\t\t\tcatch (error) {\n\t\t\t\t\t\tif (this.isChangeStreamUnsupported(error)) {\n\t\t\t\t\t\t\tawait this.enableLocalOplogFallback('change-stream-unsupported', error);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this._oplog$) {\n\t\t\t\t\t\t\tthis._oplog$.removeAllListeners();\n\t\t\t\t\t\t\tawait this._oplog$.close();\n\t\t\t\t\t\t\tthis._oplog$ = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tawait this.clearResumeToken();\n\t\t\t\t\t\tlastResumeToken = null;\n\t\t\t\t\t\t\n\t\t\t\t\t\tconsole.log(new Date(), 'oplog resumeAfter failed, starting fresh', error);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tthis._oplog$ = ResolveIOServer.getMongoConnection().watch(pipeline, { fullDocument: 'updateLookup' });\n\t\t\t\t\t\t\tstartedWithResumeToken = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (innerError) {\n\t\t\t\t\t\t\tif (this.isChangeStreamUnsupported(innerError)) {\n\t\t\t\t\t\t\t\tawait this.enableLocalOplogFallback('change-stream-unsupported', innerError);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthrow innerError;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.queueFullResync('oplog-resumeAfter-failed');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis._oplog$ = ResolveIOServer.getMongoConnection().watch(pipeline, { fullDocument: 'updateLookup' });\n\t\t\t\t\t}\n\t\t\t\t\tcatch (error) {\n\t\t\t\t\t\tif (this.isChangeStreamUnsupported(error)) {\n\t\t\t\t\t\t\tawait this.enableLocalOplogFallback('change-stream-unsupported', error);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconsole.log(new Date(), 'oplog started', startedWithResumeToken ? '(resumeAfter)' : '');\n\n\t\t\tthis._oplog$.on('change', async (doc: ChangeStreamInsertDocument | ChangeStreamUpdateDocument | ChangeStreamReplaceDocument | ChangeStreamDeleteDocument) => {\n\t\t\t\tif (doc.ns) {\n\t\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\t\tconsole.log(new Date(), 'Oplog Hit', doc.ns);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet collection = doc.ns.coll;\n\n\t\t\t\t\tif (!this._debugOplogCollections.some(a => a.collection === doc.ns.coll && a.type === doc.operationType)) {\n\t\t\t\t\t\tthis._debugOplogCollections.push({\n\t\t\t\t\t\t\tcollection: doc.ns.coll,\n\t\t\t\t\t\t\ttype: doc.operationType,\n\t\t\t\t\t\t\thits: 1\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\tthis._debugOplogCollections.find(a => a.collection === doc.ns.coll && a.type === doc.operationType).hits += 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (collection) {\n\t\t\t\t\t\tthis._debugOplogHits += 1;\n\t\t\t\t\t\tconst fullDocument = doc['fullDocument'];\n\t\t\t\t\t\tconst docId = doc.documentKey && doc.documentKey['_id'] !== undefined ? doc.documentKey['_id'] : (fullDocument && fullDocument['_id'] !== undefined ? fullDocument['_id'] : null);\n\n\t\t\t\t\t\tif (doc.operationType === 'insert') {\n\t\t\t\t\t\t\tif (collection === 'support-tickets') {\n\t\t\t\t\t\t\t\tif (this.serverConfig['ROOT_URL'] === 'https://resolveio.com') {\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'sendSupportTicketEmail', doc.documentKey['_id']);\n\t\t\t\t\t\t\t\t\tawait this.invalidatePubsCache(collection, 'insert', docId, fullDocument);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (collection !== 'method-responses') {\n\t\t\t\t\t\t\t\tawait this.invalidatePubsCache(collection, 'insert', docId, fullDocument);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (doc.operationType === 'update' || doc.operationType === 'replace') {\n\t\t\t\t\t\t\tif (collection !== 'method-responses') {\n\t\t\t\t\t\t\t\tawait this.invalidatePubsCache(collection, 'update', docId, fullDocument);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (doc.operationType === 'delete') {\n\t\t\t\t\t\t\tif (collection !== 'method-responses') {\n\t\t\t\t\t\t\t\tawait this.invalidatePubsCache(collection, 'delete', docId);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (collection === 'flags') {\n\t\t\t\t\t\tlet flag = await Flags.findOne({ type: 'Enable Debug' });\n\t\t\t\t\t\tlet dependencyFlag = await Flags.findOne({ type: 'Enable Dependency Debug' });\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (flag && flag.value) {\n\t\t\t\t\t\t\tthis._enableDebug = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._enableDebug = false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (dependencyFlag && dependencyFlag.value) {\n\t\t\t\t\t\t\tthis._enableDependencyDebug = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._enableDependencyDebug = process.env.ENABLE_DEPENDENCY_DEBUG === 'true';\n\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlastResumeToken = doc._id;\n\t\t\t\t\t\tthis.queueResumeTokenSave(lastResumeToken);\n\n\t\t\t\t\t\tif ((!process.env.NODE_APP_INSTANCE || process.env.NODE_APP_INSTANCE === '0') && (process.env.IS_WORKERS_ENABLED === 'false' || (process.env.IS_WORKER_INSTANCE === 'true' && process.env.WORKER_INDEX === '0'))) {\n\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._oplog$.on('error', async error => {\n\t\t\t\tconsole.log(new Date(), 'oplog error', error);\n\t\t\t\tif (this.isChangeStreamUnsupported(error)) {\n\t\t\t\t\tawait this.enableLocalOplogFallback('change-stream-unsupported', error);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (this.isResumeTokenInvalid(error)) {\n\t\t\t\t\tawait this.clearResumeToken();\n\t\t\t\t\tlastResumeToken = null;\n\t\t\t\t\tthis.queueFullResync('oplog-resume-token-invalid');\n\t\t\t\t}\n\n\t\t\t\tawait this._oplog$.close();\n\t\t\t});\n\n\t\t\tthis._oplog$.on('end', async () => {\n\t\t\t\tconsole.log(new Date(), 'oplog end');\n\t\t\t\tawait this._oplog$.close();\n\t\t\t});\n\n\t\t\t\tthis._oplog$.on('close', async () => {\n\t\t\t\t\tconsole.log(new Date(), 'oplog close');\n\t\t\t\t\tthis.queueResumeTokenSave(lastResumeToken, { force: true });\n\t\t\t\t\tthis._oplog$.removeAllListeners();\n\t\t\t\t\tthis._oplog$ = null;\n\t\t\t\t\tawait this.tailOpLog(lastResumeToken);\n\t\t\t\t});\n\t\t}\n\t}\n\n\tprivate packCachePayload(data: any): Buffer | null {\n\t\tif (data === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\ttry {\n\t\t\tconst packed = pack(data);\n\t\t\treturn Buffer.isBuffer(packed) ? packed : Buffer.from(packed);\n\t\t}\n\t\tcatch (err) {\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Sub Cache', 'Pack Failed', err?.message || err);\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate decodeCachePayload(raw: any): any | null {\n\t\tif (!raw) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (Buffer.isBuffer(raw)) {\n\t\t\ttry {\n\t\t\t\treturn unpack(raw);\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\tconsole.log(new Date(), 'Sub Cache', 'Unpack Failed', err?.message || err);\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tif (raw instanceof Uint8Array) {\n\t\t\ttry {\n\t\t\t\treturn unpack(raw);\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\tconsole.log(new Date(), 'Sub Cache', 'Unpack Failed', err?.message || err);\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tif (raw instanceof ArrayBuffer) {\n\t\t\ttry {\n\t\t\t\treturn unpack(new Uint8Array(raw));\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\tconsole.log(new Date(), 'Sub Cache', 'Unpack Failed', err?.message || err);\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t// Treat legacy string caches as invalid to avoid JSON parsing in the hot path.\n\t\tif (typeof raw === 'string') {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn raw;\n\t}\n\n\tprivate getCacheBuffer(raw: any): Buffer | null {\n\t\tif (!raw) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (Buffer.isBuffer(raw)) {\n\t\t\treturn raw;\n\t\t}\n\n\t\tif (raw instanceof Uint8Array) {\n\t\t\treturn Buffer.from(raw);\n\t\t}\n\n\t\tif (raw instanceof ArrayBuffer) {\n\t\t\treturn Buffer.from(new Uint8Array(raw));\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate shouldCachePayload(sub: ActiveSubscriptionModel, payload: Buffer | Uint8Array | null): boolean {\n\t\tif (!payload || payload.byteLength >= 1000000) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (sub.collections.includes('logs')) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (sub.collections.find(a => a.endsWith('.versions'))) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (sub.collections.find(a => a.startsWith('monitor-'))) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tprivate buffersEqual(a: Uint8Array | Buffer | null, b: Uint8Array | Buffer | null): boolean {\n\t\tif (!a || !b) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (a.byteLength !== b.byteLength) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (let index = 0; index < a.byteLength; index++) {\n\t\t\tif (a[index] !== b[index]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tprivate async processSubscription(sub: ActiveSubscriptionModel, ws: WebSocket, messageId: number) {\n\t\tif (!this._publications[sub.publication].user_specific) {\t\t\t\n\t\t\tif (sub.cacheId) {\n\t\t\t\ttry {\n\t\t\t\t\tconst cachedRaw = this._nodeCache.get(sub.cacheId);\n\t\t\t\t\tconst cachedBuffer = this.getCacheBuffer(cachedRaw);\n\n\t\t\t\t\tif (cachedBuffer && cachedBuffer.byteLength) {\n\t\t\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\t\t\tconsole.log(new Date(), 'Process Sub, Cache (packed)', sub.publication);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._websocketManager.sendPackedBuffer(ws, messageId, false, cachedBuffer, 'msgpack');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tconst cacheData = this.decodeCachePayload(cachedRaw);\n\t\t\t\t\t\tif (cacheData === null || cacheData === undefined) {\n\t\t\t\t\t\t\tthrow new Error('cache-miss');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\tdata: cacheData\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\t\t\tconsole.log(new Date(), 'Process Sub, Cache', sub.publication);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch {\n\t\t\t\t\tthis._nodeCache.del(sub.cacheId);\n\t\t\t\t\tsub.cacheId = 0;\n\n\t\t\t\t\tawait this.sendDataToAllWithRetry(sub, '', 'newSub');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\tconsole.log(new Date(), 'Process Sub, Non - Cache', sub.publication, sub.running);\n\t\t\t\t}\n\n\t\t\t\tif (sub.running) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tawait this.sendDataToAllWithRetry(sub, '', 'newSub');\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Process Sub Specific, Non - Cache', sub.publication, sub.running);\n\t\t\t}\n\n\t\t\tif (sub.running) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tawait this.sendDataToOneWithRetry(ws, messageId, sub, '', 'newSub');\n\t\t}\n\t}\n\n\tprivate async sendDataToOne(ws: WebSocket, messageId: number, sub: ActiveSubscriptionModel, collection: string, type: string) {\n\t\tlet monitor = this._monitorManagerFunction.startMonitorFunction('User Specific Publication', sub.publication, '', '', sub.subscriptionData);\n\t\tlet dependencySnapshot: DependencyContextSnapshot;\n\t\tlet res;\n\t\ttry {\n\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertSubscriptionLog', type, sub.publication, collection, JSON.stringify(sub.subscriptionData));\n\n\t\t\tconst execution = await this.runPublicationExecution(sub, ws['id_user']);\n\t\t\tres = execution.result;\n\t\t\tdependencySnapshot = execution.snapshot;\n\t\t\tthis.updateSubscriptionDependencies(sub, dependencySnapshot);\n\n\t\t\tif (execution.packedResult) {\n\t\t\t\tthis._websocketManager.sendPackedBuffer(ws, messageId, false, execution.packedResult, execution.encoding || 'msgpack');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\thasError: false,\n\t\t\t\t\tdata: res\n\t\t\t\t};\n\n\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tconst { error: normalizedError, correlationId } = ensureErrorWithCorrelation(err);\n\n\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\tmessageId: messageId,\n\t\t\t\thasError: true,\n\t\t\t\tdata: Object.assign({}, normalizedError, { correlationId })\n\t\t\t};\n\t\t\t\n\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\n\t\t\tconst errorPayload = {\n\t\t\t\tpublication: sub.publication,\n\t\t\t\tsubscriptionData: sub.subscriptionData,\n\t\t\t\ttype,\n\t\t\t\tcollection,\n\t\t\t\tmessageId,\n\t\t\t\tcorrelationId,\n\t\t\t\terror: {\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\t\t\t};\n\n\t\t\tawait ErrorReporter.report({\n\t\t\t\tsourceApp: 'subscription-manager',\n\t\t\t\tmessage: 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\tenvironment: this.serverConfig?.ROOT_URL,\n\t\t\t\tclientSlug: ResolveIOServer.getClientName(),\n\t\t\t\tclientName: this.serverConfig['CLIENT_NAME'],\n\t\t\t\tstack: normalizedError?.stack,\n\t\t\t\tcontext: errorPayload,\n\t\t\t\tmetadata: {\n\t\t\t\t\tcontext: 'subscription-sendDataToOne',\n\t\t\t\t\tpublication: sub.publication,\n\t\t\t\t\tcorrelationId\n\t\t\t\t},\n\t\t\t\tcorrelationId\n\t\t\t});\n\t\t}\n\t\tfinally {\n\t\t\tawait this._monitorManagerFunction.finishMonitorFunction(monitor);\n\t\t}\n\t}\n\n\t// Fetch pub once, send to all clients linked to this pub\n\tprivate async sendDataToAll(sub: ActiveSubscriptionModel, collection: string, type: string) {\n\t\tif (!sub.clients.length) {\n\t\t\tif (sub.cacheId) {\n\t\t\t\tthis._nodeCache.del(sub.cacheId);\n\t\t\t\tsub.cacheId = 0;\n\t\t\t}\n\n\t\t\tlet subIndex = this._subscriptions.findIndex(a => a.publication === sub.publication && a.subscriptionKey === sub.subscriptionKey);\n\t\t\tif (subIndex >= 0) {\n\t\t\t\tthis._subscriptions.splice(subIndex, 1);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tlet monitor = this._monitorManagerFunction.startMonitorFunction('Publication', sub.publication, '', '', sub.subscriptionData);\n\t\t\tlet res;\n\t\t\tlet dependencySnapshot: DependencyContextSnapshot;\n\n\t\t\ttry {\n\t\t\t\tif (sub.publication !== 'superadminAPM' && sub.publication !== 'loggedInUsers') {\n\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertSubscriptionLog', type, sub.publication, collection, JSON.stringify(sub.subscriptionData));\n\t\t\t\t}\n\n\t\t\t\tconst execution = await this.runPublicationExecution(sub);\n\t\t\t\tres = execution.result;\n\t\t\t\tdependencySnapshot = execution.snapshot;\n\t\t\t\tthis.updateSubscriptionDependencies(sub, dependencySnapshot);\n\t\t\t\tconst packedRes = execution.packedResult ?? this.packCachePayload(res);\n\t\t\t\tconst shouldCache = this.shouldCachePayload(sub, packedRes);\n\n\t\t\t\tif (sub.cacheId) {\n\t\t\t\t\tconst cachedBuffer = this.getCacheBuffer(this._nodeCache.get(sub.cacheId));\n\t\t\t\t\tconst isSame = this.buffersEqual(cachedBuffer, packedRes);\n\n\t\t\t\t\tif (!isSame) {\n\t\t\t\t\t\tfor (let client of sub.clients) {\n\t\t\t\t\t\t\tlet ws = this._websocketManager.getWebSocket(client.id_socket);\n\t\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\t\tif (packedRes) {\n\t\t\t\t\t\t\t\t\tthis._websocketManager.sendPackedBuffer(ws, client.messageId, false, packedRes, execution.encoding || 'msgpack');\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\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\t\t\t\tdata: res\n\t\t\t\t\t\t\t\t\t};\n\t\t\n\t\t\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\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\n\t\t\t\t\t\tthis._nodeCache.del(sub.cacheId);\n\n\t\t\t\t\t\tif (shouldCache) {\n\t\t\t\t\t\t\tthis._nodeCache.set(sub.cacheId, packedRes);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tsub.cacheId = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (!cachedBuffer && shouldCache) {\n\t\t\t\t\t\tthis._nodeCache.set(sub.cacheId, packedRes);\n\t\t\t\t\t}\n\t\t\t\t\telse if (!shouldCache) {\n\t\t\t\t\t\tthis._nodeCache.del(sub.cacheId);\n\t\t\t\t\t\tsub.cacheId = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfor (let client of sub.clients) {\n\t\t\t\t\t\tlet ws = this._websocketManager.getWebSocket(client.id_socket);\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tif (packedRes) {\n\t\t\t\t\t\t\t\tthis._websocketManager.sendPackedBuffer(ws, client.messageId, false, packedRes, execution.encoding || 'msgpack');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\t\t\tdata: res\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\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\t\n\t\t\t\t\tif (shouldCache) {\n\t\t\t\t\t\tsub.cacheId = this._cacheId++;\n\t\t\t\t\t\tthis._nodeCache.set(sub.cacheId, packedRes);\n\n\t\t\t\t\t\tconst nodeCacheSize = this._nodeCache.getStats().vsize;\n\n\t\t\t\t\t\tif (nodeCacheSize > this._heapLimit) {\n\t\t\t\t\t\t\t// Evict cache entries as needed\n\t\t\t\t\t\t\tlet deleteCount = 0;\n\t\t\t\t\t\t\tconst subArr = this._subscriptions.filter(a => a.cacheId && !a.clients.length);\n\t\t\t\t\t\n\t\t\t\t\t\t\tfor (let zz = 0; zz < subArr.length; zz++) {\n\t\t\t\t\t\t\t\tthis._debugRemoveCacheHits += 1;\n\t\t\t\t\t\t\t\tthis._nodeCache.del(subArr[zz].cacheId);\n\t\t\t\t\t\t\t\tsubArr[zz].cacheId = 0;\n\t\t\t\t\t\t\t\tdeleteCount += 1;\n\t\t\t\t\t\t\t\tif (this._nodeCache.getStats().vsize < this._heapLimit * 0.75) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t\t'Sub Cache: ' +\n\t\t\t\t\t\t\t\t\t'Too Big - ' +\n\t\t\t\t\t\t\t\t\tsub.publication +\n\t\t\t\t\t\t\t\t\t' - Deleted: ' +\n\t\t\t\t\t\t\t\t\tdeleteCount +\n\t\t\t\t\t\t\t\t\t' - ' +\n\t\t\t\t\t\t\t\t\tnodeCacheSize\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\telse {\n\t\t\t\t\t\tsub.cacheId = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconst { error: normalizedError, correlationId } = ensureErrorWithCorrelation(err);\n\n\t\t\t\tfor (let client of sub.clients) {\n\t\t\t\t\tlet ws = this._websocketManager.getWebSocket(client.id_socket);\n\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\t\tdata: Object.assign({}, normalizedError, { correlationId })\n\t\t\t\t\t\t};\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst errorPayload = {\n\t\t\t\t\tpublication: sub.publication,\n\t\t\t\t\tsubscriptionData: sub.subscriptionData,\n\t\t\t\t\ttype,\n\t\t\t\t\tcollection,\n\t\t\t\t\tcorrelationId,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tname: normalizedError?.name,\n\t\t\t\t\t\tmessage: normalizedError?.message,\n\t\t\t\t\t\tstack: normalizedError?.stack,\n\t\t\t\t\t\tcode: normalizedError?.code,\n\t\t\t\t\t\tcodeName: normalizedError?.codeName\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t\n\t\t\tawait ErrorReporter.report({\n\t\t\t\tsourceApp: 'subscription-manager',\n\t\t\t\tmessage: 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\tenvironment: this.serverConfig?.ROOT_URL,\n\t\t\t\tclientSlug: ResolveIOServer.getClientName(),\n\t\t\t\tclientName: this.serverConfig['CLIENT_NAME'],\n\t\t\t\tstack: normalizedError?.stack,\n\t\t\t\tcontext: errorPayload,\n\t\t\t\tmetadata: {\n\t\t\t\t\tcontext: 'subscription-sendDataToAll',\n\t\t\t\t\tpublication: sub.publication,\n\t\t\t\t\tcorrelationId\n\t\t\t\t},\n\t\t\t\tcorrelationId\n\t\t\t});\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tawait this._monitorManagerFunction.finishMonitorFunction(monitor);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate ensureDependencyContainers(sub: ActiveSubscriptionModel) {\n\t\tif (!sub.collectionDependencies) {\n\t\t\tsub.collectionDependencies = new Map();\n\t\t}\n\n\t\tif (!sub.collectionFilters) {\n\t\t\tsub.collectionFilters = new Map();\n\t\t}\n\n\t\tif (!sub.watchAllCollections) {\n\t\t\tsub.watchAllCollections = new Set();\n\t\t}\n\n\t\tif (!sub.collectionQueryMeta) {\n\t\t\tsub.collectionQueryMeta = new Map();\n\t\t}\n\t}\n\n\tprivate updateSubscriptionDependencies(sub: ActiveSubscriptionModel, snapshot?: DependencyContextSnapshot) {\n\t\tthis.ensureDependencyContainers(sub);\n\n\t\tif (!snapshot) {\n\t\t\tsub.collectionDependencies.clear();\n\t\t\tsub.collectionFilters.clear();\n\t\t\tsub.watchAllCollections.clear();\n\t\t\tsub.collectionQueryMeta.clear();\n\t\t\tthis.dependencyDebug('Cleared dependency snapshot', { publication: sub.publication });\n\t\t\treturn;\n\t\t}\n\n\t\tsub.collectionDependencies = snapshot.dependencies;\n\t\tsub.collectionFilters = snapshot.filters;\n\t\tsub.watchAllCollections = snapshot.watchAllCollections;\n\t\tsub.collectionQueryMeta = snapshot.queryMetadata;\n\t\tthis.logDependencySnapshot(sub, 'Snapshot updated');\n\t}\n\n\tprivate normalizeDocumentId(rawId: any): string {\n\t\tif (rawId === null || rawId === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (typeof rawId === 'string') {\n\t\t\treturn rawId;\n\t\t}\n\n\t\tif (typeof rawId === 'object' && typeof rawId.toHexString === 'function') {\n\t\t\treturn rawId.toHexString();\n\t\t}\n\n\t\tif (typeof rawId?.toString === 'function') {\n\t\t\tconst str = rawId.toString();\n\t\t\tif (str && str !== '[object Object]') {\n\t\t\t\treturn str;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate getDocumentIdQueryCandidates(documentId: any): any[] {\n\t\tconst candidates: any[] = [];\n\n\t\tif (documentId === undefined || documentId === null) {\n\t\t\treturn [documentId];\n\t\t}\n\n\t\tconst addCandidate = value => {\n\t\t\tif (value === undefined || value === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!candidates.includes(value)) {\n\t\t\t\tcandidates.push(value);\n\t\t\t}\n\t\t};\n\n\t\taddCandidate(documentId);\n\n\t\tif (typeof documentId === 'object') {\n\t\t\tif (typeof documentId.toHexString === 'function') {\n\t\t\t\taddCandidate(documentId.toHexString());\n\t\t\t}\n\n\t\t\tif (typeof documentId.toString === 'function') {\n\t\t\t\tconst str = documentId.toString();\n\t\t\t\tif (str && str !== '[object Object]') {\n\t\t\t\t\taddCandidate(str);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (typeof documentId !== 'string') {\n\t\t\taddCandidate(String(documentId));\n\t\t}\n\n\t\treturn candidates;\n\t}\n\n\tprivate isFilterSafeForInMemory(filter: any): boolean {\n\t\tif (!filter || typeof filter !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst allowedOperators = new Set([\n\t\t\t'$and',\n\t\t\t'$or',\n\t\t\t'$nor',\n\t\t\t'$in',\n\t\t\t'$nin',\n\t\t\t'$eq',\n\t\t\t'$ne',\n\t\t\t'$gt',\n\t\t\t'$gte',\n\t\t\t'$lt',\n\t\t\t'$lte',\n\t\t\t'$exists',\n\t\t\t'$size',\n\t\t\t'$all',\n\t\t\t'$elemMatch',\n\t\t\t'$regex',\n\t\t\t'$options'\n\t\t]);\n\n\t\tconst disallowedOperators = new Set([\n\t\t\t'$where',\n\t\t\t'$expr',\n\t\t\t'$text',\n\t\t\t'$geoWithin',\n\t\t\t'$geoIntersects',\n\t\t\t'$near',\n\t\t\t'$nearSphere',\n\t\t\t'$jsonSchema',\n\t\t\t'$mod',\n\t\t\t'$type',\n\t\t\t'$bitsAllSet',\n\t\t\t'$bitsAllClear',\n\t\t\t'$bitsAnySet',\n\t\t\t'$bitsAnyClear'\n\t\t]);\n\n\t\tconst walk = (value: any): boolean => {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\treturn value.every(item => walk(item));\n\t\t\t}\n\n\t\t\tif (!value || typeof value !== 'object') {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tfor (const [key, entry] of Object.entries(value)) {\n\t\t\t\tif (key.startsWith('$')) {\n\t\t\t\t\tif (disallowedOperators.has(key)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (!allowedOperators.has(key)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!walk(entry)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\n\t\treturn walk(filter);\n\t}\n\n\tprivate documentIdMatchesEvent(documentId: any, document?: any): boolean {\n\t\tif (!document || documentId === undefined || documentId === null) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst eventCandidates = this.getDocumentIdQueryCandidates(documentId)\n\t\t\t.map(id => this.normalizeDocumentId(id))\n\t\t\t.filter(Boolean);\n\t\tconst docCandidates = this.getDocumentIdQueryCandidates(document?._id)\n\t\t\t.map(id => this.normalizeDocumentId(id))\n\t\t\t.filter(Boolean);\n\n\t\tif (!eventCandidates.length || !docCandidates.length) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst docSet = new Set(docCandidates);\n\n\t\tfor (const candidate of eventCandidates) {\n\t\t\tif (docSet.has(candidate)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate resolveFilterMatch(filter: any, document?: any, documentId?: any): boolean | null {\n\t\tif (!document || !filter || typeof filter !== 'object') {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (!this.isFilterSafeForInMemory(filter)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (!this.documentIdMatchesEvent(documentId, document)) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\tconst matcher = sift(filter);\n\t\t\treturn matcher(document);\n\t\t}\n\t\tcatch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate async documentMatchesFilter(collection: string, documentId: any, filter: any, document?: any): Promise<boolean> {\n\t\ttry {\n\t\t\tconst inMemoryMatch = this.resolveFilterMatch(filter, document, documentId);\n\t\t\tif (inMemoryMatch !== null) {\n\t\t\t\treturn inMemoryMatch;\n\t\t\t}\n\n\t\t\tconst db = ResolveIOServer.getMainDB();\n\t\t\tconst filterCopy = deepCopy(filter) || {};\n\t\t\tconst idCandidates = this.getDocumentIdQueryCandidates(documentId);\n\n\t\t\tfor (const idValue of idCandidates) {\n\t\t\t\tconst combinedFilter = {\n\t\t\t\t\t$and: [\n\t\t\t\t\t\t{ _id: idValue },\n\t\t\t\t\t\tfilterCopy\n\t\t\t\t\t]\n\t\t\t\t};\n\n\t\t\t\tconst doc = await db.collection(collection).findOne(combinedFilter);\n\t\t\t\tif (doc) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t\tcatch {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tprivate async shouldInvalidateSubscription(sub: ActiveSubscriptionModel, collection: string, type: string, documentId?: any, document?: any): Promise<boolean> {\n\t\tthis.ensureDependencyContainers(sub);\n\n\t\tconst normalizedDocumentId = this.normalizeDocumentId(documentId);\n\t\tconst hasDependencyData =\n\t\t\t(sub.collectionDependencies.get(collection)?.size || 0) > 0 ||\n\t\t\t(sub.collectionFilters.get(collection)?.length || 0) > 0 ||\n\t\t\tsub.watchAllCollections.has(collection);\n\n\t\tif (!normalizedDocumentId) {\n\t\t\tthis.dependencyDebug('Invalidate due to missing documentId', { publication: sub.publication, collection, type });\n\t\t\treturn true;\n\t\t}\n\n\t\tif (!hasDependencyData) {\n\t\t\tthis.dependencyDebug('Invalidate due to missing dependency metadata', {\n\t\t\t\tpublication: sub.publication,\n\t\t\t\tcollection,\n\t\t\t\ttype\n\t\t\t});\n\t\t\treturn true;\n\t\t}\n\n\t\tif (sub.watchAllCollections.has(collection)) {\n\t\t\tthis.dependencyDebug('Invalidate due to watch-all collection', { publication: sub.publication, collection, type });\n\t\t\treturn true;\n\t\t}\n\n\t\tconst trackedIds = sub.collectionDependencies.get(collection);\n\n\t\tif (trackedIds && trackedIds.has(normalizedDocumentId)) {\n\t\t\tthis.dependencyDebug('Invalidate due to tracked id', { publication: sub.publication, collection, type, documentId: normalizedDocumentId });\n\t\t\treturn true;\n\t\t}\n\n\t\tif (type === 'delete') {\n\t\t\tthis.dependencyDebug('Skip invalidation on delete for unknown id', { publication: sub.publication, collection, type, documentId: normalizedDocumentId });\n\t\t\treturn false;\n\t\t}\n\n\t\tconst filters = sub.collectionFilters.get(collection);\n\n\t\tif (filters && filters.length) {\n\t\t\tfor (const filter of filters) {\n\t\t\t\tif (await this.documentMatchesFilter(collection, documentId, filter, document)) {\n\t\t\t\t\tthis.dependencyDebug('Invalidate due to filter match', { publication: sub.publication, collection, type, documentId: normalizedDocumentId, filter });\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.dependencyDebug('Skip invalidation after dependency checks', { publication: sub.publication, collection, type, documentId: normalizedDocumentId });\n\t\treturn false;\n\t}\n\n\tprivate async shouldInvalidateSubscriptionForEvents(sub: ActiveSubscriptionModel, collection: string, events: SubscriptionInvalidationEvent[]): Promise<boolean> {\n\t\tlet sawInsert = false;\n\t\tlet sawDelete = false;\n\n\t\tfor (const event of events) {\n\t\t\tif (event.type === 'insert') {\n\t\t\t\tsawInsert = true;\n\t\t\t}\n\t\t\telse if (event.type === 'delete') {\n\t\t\t\tsawDelete = true;\n\t\t\t}\n\t\t\tif (await this.shouldInvalidateSubscription(sub, collection, event.type, event.documentId, event.document)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tconst paginationMeta = this.getPaginationMeta(sub, collection);\n\t\tconst paginationReasons = [];\n\t\tif (sawInsert) {\n\t\t\tpaginationReasons.push('insert');\n\t\t}\n\t\tif (sawDelete) {\n\t\t\tpaginationReasons.push('delete');\n\t\t}\n\n\t\tif (paginationMeta?.length && paginationReasons.length) {\n\t\t\tthis.dependencyDebug('Invalidate due to pagination metadata', {\n\t\t\t\tpublication: sub.publication,\n\t\t\t\tcollection,\n\t\t\t\tevents: this.summarizeEvents(events),\n\t\t\t\treasons: paginationReasons,\n\t\t\t\tqueryMeta: paginationMeta.slice(0, 5)\n\t\t\t});\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate getPaginationMeta(sub: ActiveSubscriptionModel, collection: string): QueryMeta[] {\n\t\tthis.ensureDependencyContainers(sub);\n\t\tconst metaList = sub.collectionQueryMeta?.get(collection);\n\t\tif (!metaList || !metaList.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst relevantMeta = metaList.filter(meta => {\n\t\t\tif (!meta) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst limitUsed = typeof meta.limit === 'number' && meta.limit > 0;\n\t\t\tconst skipUsed = typeof meta.skip === 'number' && meta.skip > 0;\n\t\t\treturn limitUsed || skipUsed;\n\t\t});\n\n\t\treturn relevantMeta.length ? relevantMeta : null;\n\t}\n\n\tprivate sendWS(ws: WebSocket, data: ServerResponseModel) {\n\t\tthis._websocketManager.send(ws, data);\n\t}\n\n\tpublic getEnableDebug() {\n\t\treturn this._enableDebug;\n\t}\n\n\tprivate dependencyDebug(message: string, details?: Record<string, unknown>) {\n\t\tif (!this._enableDependencyDebug) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (details) {\n\t\t\tconsole.log(new Date(), '[Dependency Debug]', message, JSON.stringify(details, null, 2));\n\t\t}\n\t\telse {\n\t\t\tconsole.log(new Date(), '[Dependency Debug]', message);\n\t\t}\n\t}\n\n\tprivate summarizeEvents(events: SubscriptionInvalidationEvent[]) {\n\t\treturn events.map(event => ({\n\t\t\ttype: event.type,\n\t\t\tdocumentId: this.normalizeDocumentId(event.documentId)\n\t\t}));\n\t}\n\n\tprivate logDependencySnapshot(sub: ActiveSubscriptionModel, context: string) {\n\t\tif (!this._enableDependencyDebug) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst dependencySummary = Array.from(sub.collectionDependencies.entries()).map(([collectionName, ids]) => {\n\t\t\tconst idList = Array.from(ids || []);\n\t\t\treturn {\n\t\t\t\tcollection: collectionName,\n\t\t\t\tcount: idList.length,\n\t\t\t\tsample: idList.slice(0, 10)\n\t\t\t};\n\t\t});\n\n\t\tconst filterSummary = Array.from(sub.collectionFilters.entries()).map(([collectionName, filters]) => ({\n\t\t\tcollection: collectionName,\n\t\t\tcount: filters.length\n\t\t}));\n\n\t\tconst queryMetaSummary = Array.from(sub.collectionQueryMeta.entries()).map(([collectionName, metaList]) => ({\n\t\t\tcollection: collectionName,\n\t\t\tcount: metaList.length,\n\t\t\tmeta: metaList.slice(0, 5)\n\t\t}));\n\n\t\tconst watchAll = Array.from(sub.watchAllCollections || []);\n\n\t\tthis.dependencyDebug('Dependency snapshot updated', {\n\t\t\tcontext,\n\t\t\tpublication: sub.publication,\n\t\t\tdependencies: dependencySummary,\n\t\t\tcollectionsWithFilters: filterSummary,\n\t\t\tcollectionsWithMeta: queryMetaSummary,\n\t\t\twatchAll\n\t\t});\n\t}\n\n\tpublic async runPublicationOnce(publication: string, subscriptionData: any[] = [], options?: { userId?: string }) {\n\t\tconst pub = this._publications[publication];\n\t\tif (!pub) {\n\t\t\tthrow new Error(`Publication not found: ${publication}`);\n\t\t}\n\n\t\tconst context = Object.assign({}, this, SubscriptionManager.prototype);\n\t\tconst metadata: PublicationContext = {\n\t\t\tpublication,\n\t\t\tsubscriptionData\n\t\t};\n\n\t\tif (pub.user_specific) {\n\t\t\treturn withDependencyTracking(() => pub.function.call(context, options?.userId || '', ...subscriptionData), metadata);\n\t\t}\n\n\t\treturn withDependencyTracking(() => pub.function.call(context, ...subscriptionData), metadata);\n\t}\n}\n"]}
|