@resolveio/server-lib 22.2.20 → 22.2.21

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.
@@ -122,6 +122,7 @@ export declare class SubscriptionManager {
122
122
  private parsePositiveFloat;
123
123
  private isChangeStreamUnsupported;
124
124
  private isResumeTokenInvalid;
125
+ private isChangeStreamDocumentTooLarge;
125
126
  private enableLocalOplogFallback;
126
127
  getUseLocalOplog(): boolean;
127
128
  handleMongoReconnect(reason: string): Promise<void>;
@@ -1536,6 +1536,21 @@ var SubscriptionManager = /** @class */ (function () {
1536
1536
  }
1537
1537
  return false;
1538
1538
  };
1539
+ SubscriptionManager.prototype.isChangeStreamDocumentTooLarge = function (error) {
1540
+ var code = typeof (error === null || error === void 0 ? void 0 : error.code) === 'number' ? error.code : null;
1541
+ var codeName = typeof (error === null || error === void 0 ? void 0 : error.codeName) === 'string' ? error.codeName.toLowerCase() : '';
1542
+ var message = typeof (error === null || error === void 0 ? void 0 : error.message) === 'string' ? error.message.toLowerCase() : '';
1543
+ if (code === 10334) {
1544
+ return true;
1545
+ }
1546
+ if (codeName.includes('bsonobjecttoolarge')) {
1547
+ return true;
1548
+ }
1549
+ if (message.includes('bsonobj size') && message.includes('16mb')) {
1550
+ return true;
1551
+ }
1552
+ return false;
1553
+ };
1539
1554
  SubscriptionManager.prototype.enableLocalOplogFallback = function (reason, error) {
1540
1555
  return __awaiter(this, void 0, void 0, function () {
1541
1556
  var _a, message;
@@ -1990,7 +2005,7 @@ var SubscriptionManager = /** @class */ (function () {
1990
2005
  case 3:
1991
2006
  // eslint-disable-next-line no-restricted-syntax
1992
2007
  _a.sent();
1993
- if (!(!this._oplog$ || this._oplog$.closed)) return [3 /*break*/, 22];
2008
+ if (!(!this._oplog$ || this._oplog$.closed)) return [3 /*break*/, 27];
1994
2009
  this._oplogRetryCount += 1;
1995
2010
  if (this._oplogRetryCount > 5) {
1996
2011
  console.error('****************** TAIL OPLOG ERROR, RETRYING A BUNCH OF TIMES, KILLING PROCESS **************************');
@@ -2021,14 +2036,14 @@ var SubscriptionManager = /** @class */ (function () {
2021
2036
  },
2022
2037
  ];
2023
2038
  startedWithResumeToken = false;
2024
- if (!resumeToken) return [3 /*break*/, 17];
2039
+ if (!resumeToken) return [3 /*break*/, 20];
2025
2040
  lastResumeToken_1 = resumeToken;
2026
2041
  _a.label = 4;
2027
2042
  case 4:
2028
- _a.trys.push([4, 5, , 16]);
2043
+ _a.trys.push([4, 5, , 19]);
2029
2044
  this._oplog$ = resolveio_server_app_1.ResolveIOServer.getMongoConnection().watch(pipeline, { resumeAfter: resumeToken, fullDocument: 'updateLookup' });
2030
2045
  startedWithResumeToken = true;
2031
- return [3 /*break*/, 16];
2046
+ return [3 /*break*/, 19];
2032
2047
  case 5:
2033
2048
  error_8 = _a.sent();
2034
2049
  if (!this.isChangeStreamUnsupported(error_8)) return [3 /*break*/, 7];
@@ -2037,49 +2052,66 @@ var SubscriptionManager = /** @class */ (function () {
2037
2052
  _a.sent();
2038
2053
  return [2 /*return*/];
2039
2054
  case 7:
2040
- if (!this._oplog$) return [3 /*break*/, 9];
2055
+ if (!this.isChangeStreamDocumentTooLarge(error_8)) return [3 /*break*/, 10];
2056
+ return [4 /*yield*/, this.clearResumeToken()];
2057
+ case 8:
2058
+ _a.sent();
2059
+ lastResumeToken_1 = null;
2060
+ this.queueFullResync('oplog-change-stream-document-too-large');
2061
+ return [4 /*yield*/, this.enableLocalOplogFallback('change-stream-document-too-large', error_8)];
2062
+ case 9:
2063
+ _a.sent();
2064
+ return [2 /*return*/];
2065
+ case 10:
2066
+ if (!this._oplog$) return [3 /*break*/, 12];
2041
2067
  this._oplog$.removeAllListeners();
2042
2068
  return [4 /*yield*/, this._oplog$.close()];
2043
- case 8:
2069
+ case 11:
2044
2070
  _a.sent();
2045
2071
  this._oplog$ = null;
2046
- _a.label = 9;
2047
- case 9: return [4 /*yield*/, this.clearResumeToken()];
2048
- case 10:
2072
+ _a.label = 12;
2073
+ case 12: return [4 /*yield*/, this.clearResumeToken()];
2074
+ case 13:
2049
2075
  _a.sent();
2050
2076
  lastResumeToken_1 = null;
2051
2077
  console.log(new Date(), 'oplog resumeAfter failed, starting fresh', error_8);
2052
- _a.label = 11;
2053
- case 11:
2054
- _a.trys.push([11, 12, , 15]);
2078
+ _a.label = 14;
2079
+ case 14:
2080
+ _a.trys.push([14, 15, , 18]);
2055
2081
  this._oplog$ = resolveio_server_app_1.ResolveIOServer.getMongoConnection().watch(pipeline, { fullDocument: 'updateLookup' });
2056
2082
  startedWithResumeToken = false;
2057
- return [3 /*break*/, 15];
2058
- case 12:
2083
+ return [3 /*break*/, 18];
2084
+ case 15:
2059
2085
  innerError_1 = _a.sent();
2060
- if (!this.isChangeStreamUnsupported(innerError_1)) return [3 /*break*/, 14];
2086
+ if (!this.isChangeStreamUnsupported(innerError_1)) return [3 /*break*/, 17];
2061
2087
  return [4 /*yield*/, this.enableLocalOplogFallback('change-stream-unsupported', innerError_1)];
2062
- case 13:
2088
+ case 16:
2063
2089
  _a.sent();
2064
2090
  return [2 /*return*/];
2065
- case 14: throw innerError_1;
2066
- case 15:
2091
+ case 17: throw innerError_1;
2092
+ case 18:
2067
2093
  this.queueFullResync('oplog-resumeAfter-failed');
2068
- return [3 /*break*/, 16];
2069
- case 16: return [3 /*break*/, 21];
2070
- case 17:
2071
- _a.trys.push([17, 18, , 21]);
2094
+ return [3 /*break*/, 19];
2095
+ case 19: return [3 /*break*/, 26];
2096
+ case 20:
2097
+ _a.trys.push([20, 21, , 26]);
2072
2098
  this._oplog$ = resolveio_server_app_1.ResolveIOServer.getMongoConnection().watch(pipeline, { fullDocument: 'updateLookup' });
2073
- return [3 /*break*/, 21];
2074
- case 18:
2099
+ return [3 /*break*/, 26];
2100
+ case 21:
2075
2101
  error_9 = _a.sent();
2076
- if (!this.isChangeStreamUnsupported(error_9)) return [3 /*break*/, 20];
2102
+ if (!this.isChangeStreamUnsupported(error_9)) return [3 /*break*/, 23];
2077
2103
  return [4 /*yield*/, this.enableLocalOplogFallback('change-stream-unsupported', error_9)];
2078
- case 19:
2104
+ case 22:
2079
2105
  _a.sent();
2080
2106
  return [2 /*return*/];
2081
- case 20: throw error_9;
2082
- case 21:
2107
+ case 23:
2108
+ if (!this.isChangeStreamDocumentTooLarge(error_9)) return [3 /*break*/, 25];
2109
+ return [4 /*yield*/, this.enableLocalOplogFallback('change-stream-document-too-large', error_9)];
2110
+ case 24:
2111
+ _a.sent();
2112
+ return [2 /*return*/];
2113
+ case 25: throw error_9;
2114
+ case 26:
2083
2115
  console.log(new Date(), 'oplog started', startedWithResumeToken ? '(resumeAfter)' : '');
2084
2116
  this._oplog$.on('change', function (doc) { return __awaiter(_this, void 0, void 0, function () {
2085
2117
  var collection, fullDocument, docId, flag, dependencyFlag;
@@ -2177,15 +2209,26 @@ var SubscriptionManager = /** @class */ (function () {
2177
2209
  _a.sent();
2178
2210
  return [2 /*return*/];
2179
2211
  case 2:
2180
- if (!this.isResumeTokenInvalid(error)) return [3 /*break*/, 4];
2212
+ if (!this.isChangeStreamDocumentTooLarge(error)) return [3 /*break*/, 5];
2181
2213
  return [4 /*yield*/, this.clearResumeToken()];
2182
2214
  case 3:
2183
2215
  _a.sent();
2184
2216
  lastResumeToken_1 = null;
2185
- this.queueFullResync('oplog-resume-token-invalid');
2186
- _a.label = 4;
2187
- case 4: return [4 /*yield*/, this._oplog$.close()];
2217
+ this.queueFullResync('oplog-change-stream-document-too-large');
2218
+ return [4 /*yield*/, this.enableLocalOplogFallback('change-stream-document-too-large', error)];
2219
+ case 4:
2220
+ _a.sent();
2221
+ return [2 /*return*/];
2188
2222
  case 5:
2223
+ if (!this.isResumeTokenInvalid(error)) return [3 /*break*/, 7];
2224
+ return [4 /*yield*/, this.clearResumeToken()];
2225
+ case 6:
2226
+ _a.sent();
2227
+ lastResumeToken_1 = null;
2228
+ this.queueFullResync('oplog-resume-token-invalid');
2229
+ _a.label = 7;
2230
+ case 7: return [4 /*yield*/, this._oplog$.close()];
2231
+ case 8:
2189
2232
  _a.sent();
2190
2233
  return [2 /*return*/];
2191
2234
  }
@@ -2218,8 +2261,8 @@ var SubscriptionManager = /** @class */ (function () {
2218
2261
  }
2219
2262
  });
2220
2263
  }); });
2221
- _a.label = 22;
2222
- case 22: return [2 /*return*/];
2264
+ _a.label = 27;
2265
+ case 27: return [2 /*return*/];
2223
2266
  }
2224
2267
  });
2225
2268
  });
@@ -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 { ActiveSubscriptionClientModel, ActiveSubscriptionModel, SubscriptionModel, SubscriptionPubModel } from '../models/subscription.model';\nimport { loadAppStatusPublications } from '../publications/app-status';\nimport { loadAppSettingsPublications } from '../publications/app-settings';\nimport { loadAiTerminalPublications } from '../publications/ai-terminal';\nimport { loadCronJobPublications } from '../publications/cron-jobs';\nimport { loadCustomerNotificationPublications } from '../publications/customer-notifications';\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 _connectDebug = 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\tprivate _subSendDebug = false;\n\tprivate _subSendLogEnabled = false;\n\tprivate _subSendLogThresholdMs = 0;\n\tprivate _subSendLogBytes = 0;\n\tprivate _subSendLogSampleRate = 1;\n\tprivate _aiWorkerDebug = false;\n\tprivate _aiSubscriptionDebug = false;\n\tprivate _aiSubLastAt = new Map<string, number>();\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\t\tthis._connectDebug = this.resolveConnectDebug();\n\t\tthis._subSendDebug = this.resolveSubSendDebug();\n\t\tthis._subSendLogEnabled = this.resolveSubSendLogEnabled();\n\t\tthis._subSendLogThresholdMs = this.resolveSubSendLogThresholdMs();\n\t\tthis._subSendLogBytes = this.resolveSubSendLogBytes();\n\t\tthis._subSendLogSampleRate = this.resolveSubSendLogSampleRate();\n\t\tthis._aiWorkerDebug = this.parseDebugFlag(process.env.AI_ASSISTANT_WORKER_DEBUG);\n\t\tthis._aiSubscriptionDebug = this.resolveAiSubscriptionDebug();\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\tloadAppSettingsPublications(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\tloadCustomerNotificationPublications(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 === WebSocket.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\t\tif (typeof dispatcher.hasWorkersForMethod === 'function' && !dispatcher.hasWorkersForMethod('runPublication')) {\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\t\tthis.connectDebug('Subscribe request', {\n\t\t\tpublication,\n\t\t\tmessageRoute,\n\t\t\tmessageId,\n\t\t\tid_socket: ws ? ws['id_socket'] : null,\n\t\t\tuser: ws ? ws['user'] : null,\n\t\t\targs: Array.isArray(subscriptionData) ? subscriptionData.length : 0\n\t\t});\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\tthis.connectDebug('Missing publication', { publication, messageRoute, messageId });\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\tthis.connectDebug('Missing check for publication', { publication, messageRoute, messageId });\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\tthis.connectDebug('Missing check schema for publication', { publication, messageRoute, messageId });\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\tthis.connectDebug('Publication check failed', {\n\t\t\t\t\t\t\t\tpublication,\n\t\t\t\t\t\t\t\tmessageRoute,\n\t\t\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\t\t\targs: subscriptionData.length,\n\t\t\t\t\t\t\t\tvalObj,\n\t\t\t\t\t\t\t\terror: errors?.message || errors\n\t\t\t\t\t\t\t});\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\t\t\tconst isAiPublication = this.isAiPublication(publication);\n\t\t\tconst wsId = ws ? ws['id_socket'] : null;\n\t\t\tconst wsUserId = ws ? ws['id_user'] : null;\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 (isAiPublication && wsId) {\n\t\t\t\t\tconst existingIndex = sub.clients.findIndex(a => a.id_socket === wsId);\n\t\t\t\t\tif (existingIndex >= 0) {\n\t\t\t\t\t\tconst existingClient = sub.clients[existingIndex];\n\t\t\t\t\t\tfor (let i = sub.clients.length - 1; i >= 0; i--) {\n\t\t\t\t\t\t\tif (i !== existingIndex && sub.clients[i].id_socket === wsId) {\n\t\t\t\t\t\t\t\tsub.clients.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\texistingClient.id_user = wsUserId;\n\t\t\t\t\t\texistingClient.messageId = messageId;\n\t\t\t\t\t\texistingClient.messageRoute = messageRoute;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tsub.clients.push({\n\t\t\t\t\t\t\tid_user: wsUserId,\n\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\tid_socket: wsId,\n\t\t\t\t\t\t\tmessageRoute: messageRoute\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (!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\t\t\tthis.ensureDependencyContainers(sub);\n\t\t\tthis.logAiSubscriptionEvent('sub', {\n\t\t\t\tpublication,\n\t\t\t\tsubscriptionKey,\n\t\t\t\tmessageId,\n\t\t\t\tid_socket: ws ? ws['id_socket'] : null,\n\t\t\t\tmessageRoute,\n\t\t\t\tclients: sub?.clients?.length || 0,\n\t\t\t\tsubscriptionData: normalizedSubscriptionData\n\t\t\t});\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\tconst isAiPublication = this.isAiPublication(publication);\n\t\t\t\tfor (let i = sub.clients.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (isAiPublication && 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\telse if (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\tthis.logAiSubscriptionEvent('unsub', {\n\t\t\t\t\tpublication,\n\t\t\t\t\tsubscriptionKey,\n\t\t\t\t\tmessageId,\n\t\t\t\t\tid_socket: ws ? ws['id_socket'] : null,\n\t\t\t\t\tmessageRoute,\n\t\t\t\t\tclients: sub.clients.length,\n\t\t\t\t\tsubscriptionData: normalizedSubscriptionData\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 resolveConnectDebug(): boolean {\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig() || {};\n\t\tconst raw = process.env.WS_CONNECT_DEBUG\n\t\t\t|| process.env.CONNECT_DEBUG\n\t\t\t|| config['WS_CONNECT_DEBUG']\n\t\t\t|| config['CONNECT_DEBUG'];\n\n\t\treturn this.parseDebugFlag(raw);\n\t}\n\n\tprivate resolveSubSendDebug(): boolean {\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig() || {};\n\t\tconst raw = process.env.SUB_SEND_DEBUG\n\t\t\t|| process.env.SUBSCRIPTION_SEND_DEBUG\n\t\t\t|| config['SUB_SEND_DEBUG']\n\t\t\t|| config['SUBSCRIPTION_SEND_DEBUG'];\n\n\t\treturn this.parseDebugFlag(raw);\n\t}\n\n\tprivate resolveSubSendLogEnabled(): boolean {\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig() || {};\n\t\tconst raw = process.env.SUB_SEND_LOG_ENABLED\n\t\t\t|| process.env.SUBSCRIPTION_SEND_LOG_ENABLED\n\t\t\t|| config['SUB_SEND_LOG_ENABLED']\n\t\t\t|| config['SUBSCRIPTION_SEND_LOG_ENABLED'];\n\n\t\tif (raw === undefined || raw === null || raw === '') {\n\t\t\treturn this._subSendDebug;\n\t\t}\n\n\t\treturn this.parseDebugFlag(raw);\n\t}\n\n\tprivate resolveSubSendLogThresholdMs(): number {\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig() || {};\n\t\tconst raw = process.env.SUB_SEND_LOG_THRESHOLD_MS\n\t\t\t|| process.env.SUBSCRIPTION_SEND_LOG_THRESHOLD_MS\n\t\t\t|| config['SUB_SEND_LOG_THRESHOLD_MS']\n\t\t\t|| config['SUBSCRIPTION_SEND_LOG_THRESHOLD_MS'];\n\n\t\treturn this.parsePositiveNumber(raw);\n\t}\n\n\tprivate resolveSubSendLogBytes(): number {\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig() || {};\n\t\tconst raw = process.env.SUB_SEND_LOG_BYTES\n\t\t\t|| process.env.SUBSCRIPTION_SEND_LOG_BYTES\n\t\t\t|| config['SUB_SEND_LOG_BYTES']\n\t\t\t|| config['SUBSCRIPTION_SEND_LOG_BYTES'];\n\n\t\treturn this.parsePositiveNumber(raw);\n\t}\n\n\tprivate resolveSubSendLogSampleRate(): number {\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig() || {};\n\t\tconst raw = process.env.SUB_SEND_LOG_SAMPLE_RATE\n\t\t\t|| process.env.SUBSCRIPTION_SEND_LOG_SAMPLE_RATE\n\t\t\t|| config['SUB_SEND_LOG_SAMPLE_RATE']\n\t\t\t|| config['SUBSCRIPTION_SEND_LOG_SAMPLE_RATE'];\n\n\t\treturn this.parseSampleRate(raw, this._subSendLogSampleRate);\n\t}\n\n\tprivate resolveAiSubscriptionDebug(): boolean {\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig() || {};\n\t\tconst raw = process.env.AI_ASSISTANT_SUB_DEBUG\n\t\t\t|| process.env.AI_TERMINAL_SUB_DEBUG\n\t\t\t|| config['AI_ASSISTANT_SUB_DEBUG']\n\t\t\t|| config['AI_TERMINAL_SUB_DEBUG'];\n\n\t\treturn this.parseDebugFlag(raw);\n\t}\n\n\n\tprivate parseDebugFlag(value: any): boolean {\n\t\tif (value === true) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (value === false || value === null || value === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (typeof value === 'number') {\n\t\t\treturn value === 1;\n\t\t}\n\n\t\tif (typeof value === 'string') {\n\t\t\tconst normalized = value.trim().toLowerCase();\n\t\t\treturn ['1', 'true', 'yes', 'y', 'on'].includes(normalized);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate 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 parseSampleRate(value: any, fallback: number): number {\n\t\tconst parsed = parseFloat(value ?? '');\n\t\tif (Number.isFinite(parsed) && parsed > 0 && parsed <= 1) {\n\t\t\treturn parsed;\n\t\t}\n\t\treturn fallback;\n\t}\n\n\tprivate shouldLogSubSend(durationMs: number, payloadBytes: number | null): boolean {\n\t\tif (!this._subSendLogEnabled) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this._subSendLogSampleRate < 1 && Math.random() > this._subSendLogSampleRate) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this._subSendDebug) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this._subSendLogThresholdMs > 0 && durationMs >= this._subSendLogThresholdMs) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (payloadBytes !== null && this._subSendLogBytes > 0 && payloadBytes >= this._subSendLogBytes) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate logSubSend(sub: ActiveSubscriptionModel, details: { collection: string; type: string; clients: number; durationMs: number; payloadBytes: number | null }) {\n\t\tif (!details.clients) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.shouldLogSubSend(details.durationMs, details.payloadBytes)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconsole.log(new Date(), '[Sub Send]', JSON.stringify({\n\t\t\tpublication: sub.publication,\n\t\t\tsubscriptionKey: sub.subscriptionKey,\n\t\t\tclients: details.clients,\n\t\t\tdurationMs: details.durationMs,\n\t\t\tpayloadBytes: details.payloadBytes,\n\t\t\tcollection: details.collection,\n\t\t\ttype: details.type\n\t\t}));\n\t}\n\n\tprivate isAiPublication(publication: string): boolean {\n\t\treturn publication === 'aiTerminalMessages' || publication === 'aiTerminalConversations';\n\t}\n\n\tprivate logAiSubSend(details: {\n\t\tpublication: string;\n\t\tsubscriptionKey: string;\n\t\tmessageId: number;\n\t\tid_socket: string;\n\t\tclients: number;\n\t\tpayloadBytes: number | null;\n\t\tpacked: boolean;\n\t\tcacheHit?: boolean;\n\t\tcollection: string;\n\t\ttype: string;\n\t\tsubscriptionData?: any[];\n\t}): void {\n\t\tif (!this._aiWorkerDebug) {\n\t\t\treturn;\n\t\t}\n\t\tif (!this.isAiPublication(details.publication)) {\n\t\t\treturn;\n\t\t}\n\t\tconsole.log(new Date(), '[AI Worker Debug] subSend', JSON.stringify({\n\t\t\tpublication: details.publication,\n\t\t\tsubscriptionKey: details.subscriptionKey,\n\t\t\tmessageId: details.messageId,\n\t\t\tid_socket: details.id_socket,\n\t\t\tclients: details.clients,\n\t\t\tpayloadBytes: details.payloadBytes,\n\t\t\tpacked: details.packed,\n\t\t\tcacheHit: details.cacheHit ?? false,\n\t\t\tcollection: details.collection,\n\t\t\ttype: details.type,\n\t\t\tsubscriptionData: details.subscriptionData\n\t\t}));\n\t}\n\n\tprivate logAiSubscriptionEvent(event: 'sub' | 'unsub', details: {\n\t\tpublication: string;\n\t\tsubscriptionKey: string;\n\t\tmessageId: number;\n\t\tid_socket: string;\n\t\tmessageRoute: string;\n\t\tclients: number;\n\t\tsubscriptionData?: any[];\n\t}): void {\n\t\tif (!this._aiSubscriptionDebug) {\n\t\t\treturn;\n\t\t}\n\t\tif (!this.isAiPublication(details.publication)) {\n\t\t\treturn;\n\t\t}\n\t\tconst wsId = details.id_socket || 'unknown';\n\t\tconst key = `${event}:${wsId}:${details.publication}:${details.subscriptionKey}`;\n\t\tconst now = Date.now();\n\t\tconst lastAt = this._aiSubLastAt.get(key);\n\t\tconst deltaMs = lastAt ? now - lastAt : null;\n\t\tthis._aiSubLastAt.set(key, now);\n\t\tconsole.log(new Date(), `[AI Sub Debug] ${event}`, JSON.stringify({\n\t\t\tpublication: details.publication,\n\t\t\tsubscriptionKey: details.subscriptionKey,\n\t\t\tmessageId: details.messageId,\n\t\t\tmessageRoute: details.messageRoute,\n\t\t\tid_socket: wsId,\n\t\t\tclients: details.clients,\n\t\t\tdeltaMs,\n\t\t\tsubscriptionData: details.subscriptionData\n\t\t}));\n\t}\n\n\tprivate connectDebug(message: string, details?: Record<string, unknown>) {\n\t\tif (!this._connectDebug) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (details) {\n\t\t\tconsole.log(new Date(), '[Connect Debug]', message, JSON.stringify(details));\n\t\t}\n\t\telse {\n\t\t\tconsole.log(new Date(), '[Connect Debug]', message);\n\t\t}\n\t}\n\n\tprivate 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 async handleMongoReconnect(reason: string): Promise<void> {\n\t\tif (this._useLocalOplog) {\n\t\t\tthis.queueFullResync(`mongo-reconnect:${reason}`);\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst resumeToken = this._lastResumeToken || await this.loadResumeToken();\n\t\t\tawait this.tailOpLog(resumeToken || undefined);\n\t\t}\n\t\tcatch (error) {\n\t\t\tconsole.log(new Date(), 'Sub Manager', 'Mongo reconnect: tailOpLog restart failed', reason, error);\n\t\t}\n\n\t\tthis.queueFullResync(`mongo-reconnect:${reason}`);\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 === WebSocket.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\tconst toBuffer = (value: Uint8Array | Buffer): Buffer => {\n\t\t\tif (Buffer.isBuffer(value)) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tconst buffer = value.buffer as ArrayBuffer;\n\t\t\treturn Buffer.from(buffer, value.byteOffset, value.byteLength);\n\t\t};\n\n\t\tconst aBuf = toBuffer(a);\n\t\tconst bBuf = toBuffer(b);\n\t\treturn aBuf.equals(bBuf as Uint8Array);\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\t\tif (cachedBuffer && cachedBuffer.byteLength) {\n\t\t\t\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\t\t\t\tconsole.log(new Date(), 'Process Sub, Cache (packed)', sub.publication);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis._websocketManager.sendPackedBuffer(ws, messageId, false, cachedBuffer, 'msgpack');\n\t\t\t\t\t\t\tthis.logAiSubSend({\n\t\t\t\t\t\t\t\tpublication: sub.publication,\n\t\t\t\t\t\t\t\tsubscriptionKey: sub.subscriptionKey,\n\t\t\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\t\t\tid_socket: ws['id_socket'],\n\t\t\t\t\t\t\t\tclients: 1,\n\t\t\t\t\t\t\t\tpayloadBytes: cachedBuffer.byteLength,\n\t\t\t\t\t\t\t\tpacked: true,\n\t\t\t\t\t\t\t\tcacheHit: true,\n\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\ttype: 'cache',\n\t\t\t\t\t\t\t\tsubscriptionData: sub.subscriptionData\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconst cacheData = this.decodeCachePayload(cachedRaw);\n\t\t\t\t\t\t\tif (cacheData === null || cacheData === undefined) {\n\t\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\tthis.logAiSubSend({\n\t\t\t\t\t\t\tpublication: sub.publication,\n\t\t\t\t\t\t\tsubscriptionKey: sub.subscriptionKey,\n\t\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\t\tid_socket: ws['id_socket'],\n\t\t\t\t\t\t\tclients: 1,\n\t\t\t\t\t\t\tpayloadBytes: cacheData ? Buffer.byteLength(JSON.stringify(cacheData)) : null,\n\t\t\t\t\t\t\tpacked: false,\n\t\t\t\t\t\t\tcacheHit: true,\n\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\ttype: 'cache',\n\t\t\t\t\t\t\tsubscriptionData: sub.subscriptionData\n\t\t\t\t\t\t});\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\tif (!ws || ws.readyState !== WebSocket.OPEN) {\n\t\t\treturn;\n\t\t}\n\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\t\t\tconst packedRes = execution.packedResult ?? this.packCachePayload(res);\n\t\t\tconst payloadBytes = packedRes ? packedRes.byteLength : null;\n\n\t\t\tif (execution.packedResult) {\n\t\t\t\tthis._websocketManager.sendPackedBuffer(\n\t\t\t\t\tws,\n\t\t\t\t\tmessageId,\n\t\t\t\t\tfalse,\n\t\t\t\t\texecution.packedResult,\n\t\t\t\t\texecution.encoding || 'msgpack',\n\t\t\t\t\t{ passThrough: !!execution.workerUsed }\n\t\t\t\t);\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\tthis.logAiSubSend({\n\t\t\t\tpublication: sub.publication,\n\t\t\t\tsubscriptionKey: sub.subscriptionKey,\n\t\t\t\tmessageId,\n\t\t\t\tid_socket: ws['id_socket'],\n\t\t\t\tclients: 1,\n\t\t\t\tpayloadBytes,\n\t\t\t\tpacked: !!execution.packedResult,\n\t\t\t\tcacheHit: false,\n\t\t\t\tcollection,\n\t\t\t\ttype,\n\t\t\t\tsubscriptionData: sub.subscriptionData\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\tconst isAiPublication = this.isAiPublication(sub.publication);\n\t\tif (isAiPublication && sub.clients.length > 1) {\n\t\t\tconst seenSockets = new Set<string>();\n\t\t\tsub.clients = sub.clients.filter(client => {\n\t\t\t\tif (seenSockets.has(client.id_socket)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tseenSockets.add(client.id_socket);\n\t\t\t\treturn true;\n\t\t\t});\n\t\t}\n\t\tconst activeClients: { client: ActiveSubscriptionClientModel; ws: WebSocket }[] = [];\n\t\tif (sub.clients.length) {\n\t\t\tfor (const client of sub.clients) {\n\t\t\t\tconst ws = this._websocketManager.getWebSocket(client.id_socket);\n\t\t\t\tif (ws && ws.readyState === WebSocket.OPEN) {\n\t\t\t\t\tactiveClients.push({ client, ws });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!activeClients.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\tif (activeClients.length !== sub.clients.length) {\n\t\t\t\tsub.clients = activeClients.map(entry => entry.client);\n\t\t\t}\n\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 passThrough = !!execution.workerUsed;\n\t\t\t\tconst payloadBytes = packedRes ? packedRes.byteLength : null;\n\t\t\t\tconst shouldCache = this.shouldCachePayload(sub, packedRes);\n\t\t\t\t\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\tconst sendStartMs = Date.now();\n\t\t\t\t\t\tlet sentClients = 0;\n\t\t\t\t\t\tfor (const entry of activeClients) {\n\t\t\t\t\t\t\tconst { client, ws } = entry;\n\t\t\t\t\t\t\tif (packedRes) {\n\t\t\t\t\t\t\t\tthis._websocketManager.sendPackedBuffer(\n\t\t\t\t\t\t\t\t\tws,\n\t\t\t\t\t\t\t\t\tclient.messageId,\n\t\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\t\tpackedRes,\n\t\t\t\t\t\t\t\t\texecution.encoding || 'msgpack',\n\t\t\t\t\t\t\t\t\t{ passThrough }\n\t\t\t\t\t\t\t\t);\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\tif (isAiPublication) {\n\t\t\t\t\t\t\t\tthis.logAiSubSend({\n\t\t\t\t\t\t\t\t\tpublication: sub.publication,\n\t\t\t\t\t\t\t\t\tsubscriptionKey: sub.subscriptionKey,\n\t\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\t\tid_socket: ws['id_socket'],\n\t\t\t\t\t\t\t\t\tclients: activeClients.length,\n\t\t\t\t\t\t\t\t\tpayloadBytes,\n\t\t\t\t\t\t\t\t\tpacked: !!packedRes,\n\t\t\t\t\t\t\t\t\tcacheHit: false,\n\t\t\t\t\t\t\t\t\tcollection,\n\t\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\t\tsubscriptionData: sub.subscriptionData\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsentClients += 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.logSubSend(sub, {\n\t\t\t\t\t\t\tcollection,\n\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\tclients: sentClients,\n\t\t\t\t\t\t\tdurationMs: Date.now() - sendStartMs,\n\t\t\t\t\t\t\tpayloadBytes\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\tconst sendStartMs = Date.now();\n\t\t\t\t\tlet sentClients = 0;\n\t\t\t\t\tfor (const entry of activeClients) {\n\t\t\t\t\t\tconst { client, ws } = entry;\n\t\t\t\t\t\tif (packedRes) {\n\t\t\t\t\t\t\tthis._websocketManager.sendPackedBuffer(\n\t\t\t\t\t\t\t\tws,\n\t\t\t\t\t\t\t\tclient.messageId,\n\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\tpackedRes,\n\t\t\t\t\t\t\t\texecution.encoding || 'msgpack',\n\t\t\t\t\t\t\t\t{ passThrough }\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\t\tdata: res\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (isAiPublication) {\n\t\t\t\t\t\t\tthis.logAiSubSend({\n\t\t\t\t\t\t\t\tpublication: sub.publication,\n\t\t\t\t\t\t\t\tsubscriptionKey: sub.subscriptionKey,\n\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\tid_socket: ws['id_socket'],\n\t\t\t\t\t\t\t\tclients: activeClients.length,\n\t\t\t\t\t\t\t\tpayloadBytes,\n\t\t\t\t\t\t\t\tpacked: !!packedRes,\n\t\t\t\t\t\t\t\tcacheHit: false,\n\t\t\t\t\t\t\t\tcollection,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tsubscriptionData: sub.subscriptionData\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsentClients += 1;\n\t\t\t\t\t}\n\t\t\t\t\tthis.logSubSend(sub, {\n\t\t\t\t\t\tcollection,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tclients: sentClients,\n\t\t\t\t\t\tdurationMs: Date.now() - sendStartMs,\n\t\t\t\t\t\tpayloadBytes\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 === WebSocket.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 trackedIds = sub.collectionDependencies.get(collection);\n\t\tconst filters = sub.collectionFilters.get(collection);\n\t\tconst hasTrackedIds = !!(trackedIds && trackedIds.size);\n\t\tconst hasFilters = !!(filters && filters.length);\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\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\tif (hasFilters && !hasTrackedIds) {\n\t\t\t\tthis.dependencyDebug('Invalidate delete due to filter-only dependency without tracked ids', {\n\t\t\t\t\tpublication: sub.publication,\n\t\t\t\t\tcollection,\n\t\t\t\t\ttype,\n\t\t\t\t\tdocumentId: normalizedDocumentId\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\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\tif (type === 'update' && hasFilters && !hasTrackedIds) {\n\t\t\tthis.dependencyDebug('Invalidate update due to filter-only dependency without tracked ids', {\n\t\t\t\tpublication: sub.publication,\n\t\t\t\tcollection,\n\t\t\t\ttype,\n\t\t\t\tdocumentId: normalizedDocumentId\n\t\t\t});\n\t\t\treturn true;\n\t\t}\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 { ActiveSubscriptionClientModel, ActiveSubscriptionModel, SubscriptionModel, SubscriptionPubModel } from '../models/subscription.model';\nimport { loadAppStatusPublications } from '../publications/app-status';\nimport { loadAppSettingsPublications } from '../publications/app-settings';\nimport { loadAiTerminalPublications } from '../publications/ai-terminal';\nimport { loadCronJobPublications } from '../publications/cron-jobs';\nimport { loadCustomerNotificationPublications } from '../publications/customer-notifications';\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 _connectDebug = 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\tprivate _subSendDebug = false;\n\tprivate _subSendLogEnabled = false;\n\tprivate _subSendLogThresholdMs = 0;\n\tprivate _subSendLogBytes = 0;\n\tprivate _subSendLogSampleRate = 1;\n\tprivate _aiWorkerDebug = false;\n\tprivate _aiSubscriptionDebug = false;\n\tprivate _aiSubLastAt = new Map<string, number>();\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\t\tthis._connectDebug = this.resolveConnectDebug();\n\t\tthis._subSendDebug = this.resolveSubSendDebug();\n\t\tthis._subSendLogEnabled = this.resolveSubSendLogEnabled();\n\t\tthis._subSendLogThresholdMs = this.resolveSubSendLogThresholdMs();\n\t\tthis._subSendLogBytes = this.resolveSubSendLogBytes();\n\t\tthis._subSendLogSampleRate = this.resolveSubSendLogSampleRate();\n\t\tthis._aiWorkerDebug = this.parseDebugFlag(process.env.AI_ASSISTANT_WORKER_DEBUG);\n\t\tthis._aiSubscriptionDebug = this.resolveAiSubscriptionDebug();\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\tloadAppSettingsPublications(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\tloadCustomerNotificationPublications(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 === WebSocket.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\t\tif (typeof dispatcher.hasWorkersForMethod === 'function' && !dispatcher.hasWorkersForMethod('runPublication')) {\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\t\tthis.connectDebug('Subscribe request', {\n\t\t\tpublication,\n\t\t\tmessageRoute,\n\t\t\tmessageId,\n\t\t\tid_socket: ws ? ws['id_socket'] : null,\n\t\t\tuser: ws ? ws['user'] : null,\n\t\t\targs: Array.isArray(subscriptionData) ? subscriptionData.length : 0\n\t\t});\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\tthis.connectDebug('Missing publication', { publication, messageRoute, messageId });\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\tthis.connectDebug('Missing check for publication', { publication, messageRoute, messageId });\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\tthis.connectDebug('Missing check schema for publication', { publication, messageRoute, messageId });\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\tthis.connectDebug('Publication check failed', {\n\t\t\t\t\t\t\t\tpublication,\n\t\t\t\t\t\t\t\tmessageRoute,\n\t\t\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\t\t\targs: subscriptionData.length,\n\t\t\t\t\t\t\t\tvalObj,\n\t\t\t\t\t\t\t\terror: errors?.message || errors\n\t\t\t\t\t\t\t});\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\t\t\tconst isAiPublication = this.isAiPublication(publication);\n\t\t\tconst wsId = ws ? ws['id_socket'] : null;\n\t\t\tconst wsUserId = ws ? ws['id_user'] : null;\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 (isAiPublication && wsId) {\n\t\t\t\t\tconst existingIndex = sub.clients.findIndex(a => a.id_socket === wsId);\n\t\t\t\t\tif (existingIndex >= 0) {\n\t\t\t\t\t\tconst existingClient = sub.clients[existingIndex];\n\t\t\t\t\t\tfor (let i = sub.clients.length - 1; i >= 0; i--) {\n\t\t\t\t\t\t\tif (i !== existingIndex && sub.clients[i].id_socket === wsId) {\n\t\t\t\t\t\t\t\tsub.clients.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\texistingClient.id_user = wsUserId;\n\t\t\t\t\t\texistingClient.messageId = messageId;\n\t\t\t\t\t\texistingClient.messageRoute = messageRoute;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tsub.clients.push({\n\t\t\t\t\t\t\tid_user: wsUserId,\n\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\tid_socket: wsId,\n\t\t\t\t\t\t\tmessageRoute: messageRoute\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (!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\t\t\tthis.ensureDependencyContainers(sub);\n\t\t\tthis.logAiSubscriptionEvent('sub', {\n\t\t\t\tpublication,\n\t\t\t\tsubscriptionKey,\n\t\t\t\tmessageId,\n\t\t\t\tid_socket: ws ? ws['id_socket'] : null,\n\t\t\t\tmessageRoute,\n\t\t\t\tclients: sub?.clients?.length || 0,\n\t\t\t\tsubscriptionData: normalizedSubscriptionData\n\t\t\t});\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\tconst isAiPublication = this.isAiPublication(publication);\n\t\t\t\tfor (let i = sub.clients.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (isAiPublication && 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\telse if (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\tthis.logAiSubscriptionEvent('unsub', {\n\t\t\t\t\tpublication,\n\t\t\t\t\tsubscriptionKey,\n\t\t\t\t\tmessageId,\n\t\t\t\t\tid_socket: ws ? ws['id_socket'] : null,\n\t\t\t\t\tmessageRoute,\n\t\t\t\t\tclients: sub.clients.length,\n\t\t\t\t\tsubscriptionData: normalizedSubscriptionData\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 resolveConnectDebug(): boolean {\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig() || {};\n\t\tconst raw = process.env.WS_CONNECT_DEBUG\n\t\t\t|| process.env.CONNECT_DEBUG\n\t\t\t|| config['WS_CONNECT_DEBUG']\n\t\t\t|| config['CONNECT_DEBUG'];\n\n\t\treturn this.parseDebugFlag(raw);\n\t}\n\n\tprivate resolveSubSendDebug(): boolean {\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig() || {};\n\t\tconst raw = process.env.SUB_SEND_DEBUG\n\t\t\t|| process.env.SUBSCRIPTION_SEND_DEBUG\n\t\t\t|| config['SUB_SEND_DEBUG']\n\t\t\t|| config['SUBSCRIPTION_SEND_DEBUG'];\n\n\t\treturn this.parseDebugFlag(raw);\n\t}\n\n\tprivate resolveSubSendLogEnabled(): boolean {\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig() || {};\n\t\tconst raw = process.env.SUB_SEND_LOG_ENABLED\n\t\t\t|| process.env.SUBSCRIPTION_SEND_LOG_ENABLED\n\t\t\t|| config['SUB_SEND_LOG_ENABLED']\n\t\t\t|| config['SUBSCRIPTION_SEND_LOG_ENABLED'];\n\n\t\tif (raw === undefined || raw === null || raw === '') {\n\t\t\treturn this._subSendDebug;\n\t\t}\n\n\t\treturn this.parseDebugFlag(raw);\n\t}\n\n\tprivate resolveSubSendLogThresholdMs(): number {\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig() || {};\n\t\tconst raw = process.env.SUB_SEND_LOG_THRESHOLD_MS\n\t\t\t|| process.env.SUBSCRIPTION_SEND_LOG_THRESHOLD_MS\n\t\t\t|| config['SUB_SEND_LOG_THRESHOLD_MS']\n\t\t\t|| config['SUBSCRIPTION_SEND_LOG_THRESHOLD_MS'];\n\n\t\treturn this.parsePositiveNumber(raw);\n\t}\n\n\tprivate resolveSubSendLogBytes(): number {\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig() || {};\n\t\tconst raw = process.env.SUB_SEND_LOG_BYTES\n\t\t\t|| process.env.SUBSCRIPTION_SEND_LOG_BYTES\n\t\t\t|| config['SUB_SEND_LOG_BYTES']\n\t\t\t|| config['SUBSCRIPTION_SEND_LOG_BYTES'];\n\n\t\treturn this.parsePositiveNumber(raw);\n\t}\n\n\tprivate resolveSubSendLogSampleRate(): number {\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig() || {};\n\t\tconst raw = process.env.SUB_SEND_LOG_SAMPLE_RATE\n\t\t\t|| process.env.SUBSCRIPTION_SEND_LOG_SAMPLE_RATE\n\t\t\t|| config['SUB_SEND_LOG_SAMPLE_RATE']\n\t\t\t|| config['SUBSCRIPTION_SEND_LOG_SAMPLE_RATE'];\n\n\t\treturn this.parseSampleRate(raw, this._subSendLogSampleRate);\n\t}\n\n\tprivate resolveAiSubscriptionDebug(): boolean {\n\t\tconst config = this.serverConfig || ResolveIOServer.getServerConfig() || {};\n\t\tconst raw = process.env.AI_ASSISTANT_SUB_DEBUG\n\t\t\t|| process.env.AI_TERMINAL_SUB_DEBUG\n\t\t\t|| config['AI_ASSISTANT_SUB_DEBUG']\n\t\t\t|| config['AI_TERMINAL_SUB_DEBUG'];\n\n\t\treturn this.parseDebugFlag(raw);\n\t}\n\n\n\tprivate parseDebugFlag(value: any): boolean {\n\t\tif (value === true) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (value === false || value === null || value === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (typeof value === 'number') {\n\t\t\treturn value === 1;\n\t\t}\n\n\t\tif (typeof value === 'string') {\n\t\t\tconst normalized = value.trim().toLowerCase();\n\t\t\treturn ['1', 'true', 'yes', 'y', 'on'].includes(normalized);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate 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 parseSampleRate(value: any, fallback: number): number {\n\t\tconst parsed = parseFloat(value ?? '');\n\t\tif (Number.isFinite(parsed) && parsed > 0 && parsed <= 1) {\n\t\t\treturn parsed;\n\t\t}\n\t\treturn fallback;\n\t}\n\n\tprivate shouldLogSubSend(durationMs: number, payloadBytes: number | null): boolean {\n\t\tif (!this._subSendLogEnabled) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this._subSendLogSampleRate < 1 && Math.random() > this._subSendLogSampleRate) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this._subSendDebug) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this._subSendLogThresholdMs > 0 && durationMs >= this._subSendLogThresholdMs) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (payloadBytes !== null && this._subSendLogBytes > 0 && payloadBytes >= this._subSendLogBytes) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate logSubSend(sub: ActiveSubscriptionModel, details: { collection: string; type: string; clients: number; durationMs: number; payloadBytes: number | null }) {\n\t\tif (!details.clients) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.shouldLogSubSend(details.durationMs, details.payloadBytes)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconsole.log(new Date(), '[Sub Send]', JSON.stringify({\n\t\t\tpublication: sub.publication,\n\t\t\tsubscriptionKey: sub.subscriptionKey,\n\t\t\tclients: details.clients,\n\t\t\tdurationMs: details.durationMs,\n\t\t\tpayloadBytes: details.payloadBytes,\n\t\t\tcollection: details.collection,\n\t\t\ttype: details.type\n\t\t}));\n\t}\n\n\tprivate isAiPublication(publication: string): boolean {\n\t\treturn publication === 'aiTerminalMessages' || publication === 'aiTerminalConversations';\n\t}\n\n\tprivate logAiSubSend(details: {\n\t\tpublication: string;\n\t\tsubscriptionKey: string;\n\t\tmessageId: number;\n\t\tid_socket: string;\n\t\tclients: number;\n\t\tpayloadBytes: number | null;\n\t\tpacked: boolean;\n\t\tcacheHit?: boolean;\n\t\tcollection: string;\n\t\ttype: string;\n\t\tsubscriptionData?: any[];\n\t}): void {\n\t\tif (!this._aiWorkerDebug) {\n\t\t\treturn;\n\t\t}\n\t\tif (!this.isAiPublication(details.publication)) {\n\t\t\treturn;\n\t\t}\n\t\tconsole.log(new Date(), '[AI Worker Debug] subSend', JSON.stringify({\n\t\t\tpublication: details.publication,\n\t\t\tsubscriptionKey: details.subscriptionKey,\n\t\t\tmessageId: details.messageId,\n\t\t\tid_socket: details.id_socket,\n\t\t\tclients: details.clients,\n\t\t\tpayloadBytes: details.payloadBytes,\n\t\t\tpacked: details.packed,\n\t\t\tcacheHit: details.cacheHit ?? false,\n\t\t\tcollection: details.collection,\n\t\t\ttype: details.type,\n\t\t\tsubscriptionData: details.subscriptionData\n\t\t}));\n\t}\n\n\tprivate logAiSubscriptionEvent(event: 'sub' | 'unsub', details: {\n\t\tpublication: string;\n\t\tsubscriptionKey: string;\n\t\tmessageId: number;\n\t\tid_socket: string;\n\t\tmessageRoute: string;\n\t\tclients: number;\n\t\tsubscriptionData?: any[];\n\t}): void {\n\t\tif (!this._aiSubscriptionDebug) {\n\t\t\treturn;\n\t\t}\n\t\tif (!this.isAiPublication(details.publication)) {\n\t\t\treturn;\n\t\t}\n\t\tconst wsId = details.id_socket || 'unknown';\n\t\tconst key = `${event}:${wsId}:${details.publication}:${details.subscriptionKey}`;\n\t\tconst now = Date.now();\n\t\tconst lastAt = this._aiSubLastAt.get(key);\n\t\tconst deltaMs = lastAt ? now - lastAt : null;\n\t\tthis._aiSubLastAt.set(key, now);\n\t\tconsole.log(new Date(), `[AI Sub Debug] ${event}`, JSON.stringify({\n\t\t\tpublication: details.publication,\n\t\t\tsubscriptionKey: details.subscriptionKey,\n\t\t\tmessageId: details.messageId,\n\t\t\tmessageRoute: details.messageRoute,\n\t\t\tid_socket: wsId,\n\t\t\tclients: details.clients,\n\t\t\tdeltaMs,\n\t\t\tsubscriptionData: details.subscriptionData\n\t\t}));\n\t}\n\n\tprivate connectDebug(message: string, details?: Record<string, unknown>) {\n\t\tif (!this._connectDebug) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (details) {\n\t\t\tconsole.log(new Date(), '[Connect Debug]', message, JSON.stringify(details));\n\t\t}\n\t\telse {\n\t\t\tconsole.log(new Date(), '[Connect Debug]', message);\n\t\t}\n\t}\n\n\tprivate 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 isChangeStreamDocumentTooLarge(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 === 10334) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (codeName.includes('bsonobjecttoolarge')) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (message.includes('bsonobj size') && message.includes('16mb')) {\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 async handleMongoReconnect(reason: string): Promise<void> {\n\t\tif (this._useLocalOplog) {\n\t\t\tthis.queueFullResync(`mongo-reconnect:${reason}`);\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst resumeToken = this._lastResumeToken || await this.loadResumeToken();\n\t\t\tawait this.tailOpLog(resumeToken || undefined);\n\t\t}\n\t\tcatch (error) {\n\t\t\tconsole.log(new Date(), 'Sub Manager', 'Mongo reconnect: tailOpLog restart failed', reason, error);\n\t\t}\n\n\t\tthis.queueFullResync(`mongo-reconnect:${reason}`);\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 === WebSocket.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\t\t\t\t\t\tif (this.isChangeStreamDocumentTooLarge(error)) {\n\t\t\t\t\t\t\tawait this.clearResumeToken();\n\t\t\t\t\t\t\tlastResumeToken = null;\n\t\t\t\t\t\t\tthis.queueFullResync('oplog-change-stream-document-too-large');\n\t\t\t\t\t\t\tawait this.enableLocalOplogFallback('change-stream-document-too-large', 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\t\ttry {\n\t\t\t\t\t\t\tthis._oplog$ = ResolveIOServer.getMongoConnection().watch(pipeline, { fullDocument: 'updateLookup' });\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (error) {\n\t\t\t\t\t\t\tif (this.isChangeStreamUnsupported(error)) {\n\t\t\t\t\t\t\t\tawait this.enableLocalOplogFallback('change-stream-unsupported', error);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (this.isChangeStreamDocumentTooLarge(error)) {\n\t\t\t\t\t\t\t\tawait this.enableLocalOplogFallback('change-stream-document-too-large', error);\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 error;\n\t\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\t\t\t\tif (this.isChangeStreamDocumentTooLarge(error)) {\n\t\t\t\t\tawait this.clearResumeToken();\n\t\t\t\t\tlastResumeToken = null;\n\t\t\t\t\tthis.queueFullResync('oplog-change-stream-document-too-large');\n\t\t\t\t\tawait this.enableLocalOplogFallback('change-stream-document-too-large', 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\tconst toBuffer = (value: Uint8Array | Buffer): Buffer => {\n\t\t\tif (Buffer.isBuffer(value)) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tconst buffer = value.buffer as ArrayBuffer;\n\t\t\treturn Buffer.from(buffer, value.byteOffset, value.byteLength);\n\t\t};\n\n\t\tconst aBuf = toBuffer(a);\n\t\tconst bBuf = toBuffer(b);\n\t\treturn aBuf.equals(bBuf as Uint8Array);\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\t\tif (cachedBuffer && cachedBuffer.byteLength) {\n\t\t\t\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\t\t\t\tconsole.log(new Date(), 'Process Sub, Cache (packed)', sub.publication);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis._websocketManager.sendPackedBuffer(ws, messageId, false, cachedBuffer, 'msgpack');\n\t\t\t\t\t\t\tthis.logAiSubSend({\n\t\t\t\t\t\t\t\tpublication: sub.publication,\n\t\t\t\t\t\t\t\tsubscriptionKey: sub.subscriptionKey,\n\t\t\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\t\t\tid_socket: ws['id_socket'],\n\t\t\t\t\t\t\t\tclients: 1,\n\t\t\t\t\t\t\t\tpayloadBytes: cachedBuffer.byteLength,\n\t\t\t\t\t\t\t\tpacked: true,\n\t\t\t\t\t\t\t\tcacheHit: true,\n\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\ttype: 'cache',\n\t\t\t\t\t\t\t\tsubscriptionData: sub.subscriptionData\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconst cacheData = this.decodeCachePayload(cachedRaw);\n\t\t\t\t\t\t\tif (cacheData === null || cacheData === undefined) {\n\t\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\tthis.logAiSubSend({\n\t\t\t\t\t\t\tpublication: sub.publication,\n\t\t\t\t\t\t\tsubscriptionKey: sub.subscriptionKey,\n\t\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\t\tid_socket: ws['id_socket'],\n\t\t\t\t\t\t\tclients: 1,\n\t\t\t\t\t\t\tpayloadBytes: cacheData ? Buffer.byteLength(JSON.stringify(cacheData)) : null,\n\t\t\t\t\t\t\tpacked: false,\n\t\t\t\t\t\t\tcacheHit: true,\n\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\ttype: 'cache',\n\t\t\t\t\t\t\tsubscriptionData: sub.subscriptionData\n\t\t\t\t\t\t});\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\tif (!ws || ws.readyState !== WebSocket.OPEN) {\n\t\t\treturn;\n\t\t}\n\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\t\t\tconst packedRes = execution.packedResult ?? this.packCachePayload(res);\n\t\t\tconst payloadBytes = packedRes ? packedRes.byteLength : null;\n\n\t\t\tif (execution.packedResult) {\n\t\t\t\tthis._websocketManager.sendPackedBuffer(\n\t\t\t\t\tws,\n\t\t\t\t\tmessageId,\n\t\t\t\t\tfalse,\n\t\t\t\t\texecution.packedResult,\n\t\t\t\t\texecution.encoding || 'msgpack',\n\t\t\t\t\t{ passThrough: !!execution.workerUsed }\n\t\t\t\t);\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\tthis.logAiSubSend({\n\t\t\t\tpublication: sub.publication,\n\t\t\t\tsubscriptionKey: sub.subscriptionKey,\n\t\t\t\tmessageId,\n\t\t\t\tid_socket: ws['id_socket'],\n\t\t\t\tclients: 1,\n\t\t\t\tpayloadBytes,\n\t\t\t\tpacked: !!execution.packedResult,\n\t\t\t\tcacheHit: false,\n\t\t\t\tcollection,\n\t\t\t\ttype,\n\t\t\t\tsubscriptionData: sub.subscriptionData\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\tconst isAiPublication = this.isAiPublication(sub.publication);\n\t\tif (isAiPublication && sub.clients.length > 1) {\n\t\t\tconst seenSockets = new Set<string>();\n\t\t\tsub.clients = sub.clients.filter(client => {\n\t\t\t\tif (seenSockets.has(client.id_socket)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tseenSockets.add(client.id_socket);\n\t\t\t\treturn true;\n\t\t\t});\n\t\t}\n\t\tconst activeClients: { client: ActiveSubscriptionClientModel; ws: WebSocket }[] = [];\n\t\tif (sub.clients.length) {\n\t\t\tfor (const client of sub.clients) {\n\t\t\t\tconst ws = this._websocketManager.getWebSocket(client.id_socket);\n\t\t\t\tif (ws && ws.readyState === WebSocket.OPEN) {\n\t\t\t\t\tactiveClients.push({ client, ws });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!activeClients.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\tif (activeClients.length !== sub.clients.length) {\n\t\t\t\tsub.clients = activeClients.map(entry => entry.client);\n\t\t\t}\n\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 passThrough = !!execution.workerUsed;\n\t\t\t\tconst payloadBytes = packedRes ? packedRes.byteLength : null;\n\t\t\t\tconst shouldCache = this.shouldCachePayload(sub, packedRes);\n\t\t\t\t\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\tconst sendStartMs = Date.now();\n\t\t\t\t\t\tlet sentClients = 0;\n\t\t\t\t\t\tfor (const entry of activeClients) {\n\t\t\t\t\t\t\tconst { client, ws } = entry;\n\t\t\t\t\t\t\tif (packedRes) {\n\t\t\t\t\t\t\t\tthis._websocketManager.sendPackedBuffer(\n\t\t\t\t\t\t\t\t\tws,\n\t\t\t\t\t\t\t\t\tclient.messageId,\n\t\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\t\tpackedRes,\n\t\t\t\t\t\t\t\t\texecution.encoding || 'msgpack',\n\t\t\t\t\t\t\t\t\t{ passThrough }\n\t\t\t\t\t\t\t\t);\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\tif (isAiPublication) {\n\t\t\t\t\t\t\t\tthis.logAiSubSend({\n\t\t\t\t\t\t\t\t\tpublication: sub.publication,\n\t\t\t\t\t\t\t\t\tsubscriptionKey: sub.subscriptionKey,\n\t\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\t\tid_socket: ws['id_socket'],\n\t\t\t\t\t\t\t\t\tclients: activeClients.length,\n\t\t\t\t\t\t\t\t\tpayloadBytes,\n\t\t\t\t\t\t\t\t\tpacked: !!packedRes,\n\t\t\t\t\t\t\t\t\tcacheHit: false,\n\t\t\t\t\t\t\t\t\tcollection,\n\t\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\t\tsubscriptionData: sub.subscriptionData\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsentClients += 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.logSubSend(sub, {\n\t\t\t\t\t\t\tcollection,\n\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\tclients: sentClients,\n\t\t\t\t\t\t\tdurationMs: Date.now() - sendStartMs,\n\t\t\t\t\t\t\tpayloadBytes\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\tconst sendStartMs = Date.now();\n\t\t\t\t\tlet sentClients = 0;\n\t\t\t\t\tfor (const entry of activeClients) {\n\t\t\t\t\t\tconst { client, ws } = entry;\n\t\t\t\t\t\tif (packedRes) {\n\t\t\t\t\t\t\tthis._websocketManager.sendPackedBuffer(\n\t\t\t\t\t\t\t\tws,\n\t\t\t\t\t\t\t\tclient.messageId,\n\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\tpackedRes,\n\t\t\t\t\t\t\t\texecution.encoding || 'msgpack',\n\t\t\t\t\t\t\t\t{ passThrough }\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\t\tdata: res\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (isAiPublication) {\n\t\t\t\t\t\t\tthis.logAiSubSend({\n\t\t\t\t\t\t\t\tpublication: sub.publication,\n\t\t\t\t\t\t\t\tsubscriptionKey: sub.subscriptionKey,\n\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\tid_socket: ws['id_socket'],\n\t\t\t\t\t\t\t\tclients: activeClients.length,\n\t\t\t\t\t\t\t\tpayloadBytes,\n\t\t\t\t\t\t\t\tpacked: !!packedRes,\n\t\t\t\t\t\t\t\tcacheHit: false,\n\t\t\t\t\t\t\t\tcollection,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tsubscriptionData: sub.subscriptionData\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsentClients += 1;\n\t\t\t\t\t}\n\t\t\t\t\tthis.logSubSend(sub, {\n\t\t\t\t\t\tcollection,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tclients: sentClients,\n\t\t\t\t\t\tdurationMs: Date.now() - sendStartMs,\n\t\t\t\t\t\tpayloadBytes\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 === WebSocket.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 trackedIds = sub.collectionDependencies.get(collection);\n\t\tconst filters = sub.collectionFilters.get(collection);\n\t\tconst hasTrackedIds = !!(trackedIds && trackedIds.size);\n\t\tconst hasFilters = !!(filters && filters.length);\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\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\tif (hasFilters && !hasTrackedIds) {\n\t\t\t\tthis.dependencyDebug('Invalidate delete due to filter-only dependency without tracked ids', {\n\t\t\t\t\tpublication: sub.publication,\n\t\t\t\t\tcollection,\n\t\t\t\t\ttype,\n\t\t\t\t\tdocumentId: normalizedDocumentId\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\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\tif (type === 'update' && hasFilters && !hasTrackedIds) {\n\t\t\tthis.dependencyDebug('Invalidate update due to filter-only dependency without tracked ids', {\n\t\t\t\tpublication: sub.publication,\n\t\t\t\tcollection,\n\t\t\t\ttype,\n\t\t\t\tdocumentId: normalizedDocumentId\n\t\t\t});\n\t\t\treturn true;\n\t\t}\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@resolveio/server-lib",
3
- "version": "22.2.20",
3
+ "version": "22.2.21",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "package": "./build_package.sh",