@resolveio/server-lib 22.2.23 → 22.2.24

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.
@@ -52,6 +52,7 @@ export declare class SubscriptionManager {
52
52
  private _fullResyncPromise;
53
53
  private readonly RESUME_TOKEN_COLLECTION;
54
54
  private readonly RESUME_TOKEN_SAVE_INTERVAL_MS;
55
+ private readonly RESUME_TOKEN_AUTO_HEAL_RETRY_THRESHOLD;
55
56
  private latencyBuffer;
56
57
  private _latencyFlushInProgress;
57
58
  private _latencyFlushPending;
@@ -164,6 +164,7 @@ var SubscriptionManager = /** @class */ (function () {
164
164
  this._fullResyncPromise = null;
165
165
  this.RESUME_TOKEN_COLLECTION = 'subscription-manager-resume-tokens';
166
166
  this.RESUME_TOKEN_SAVE_INTERVAL_MS = 5000;
167
+ this.RESUME_TOKEN_AUTO_HEAL_RETRY_THRESHOLD = 2;
167
168
  // Buffer to store throttled latency updates with timestamps
168
169
  this.latencyBuffer = new Map();
169
170
  this._latencyFlushInProgress = false;
@@ -1984,7 +1985,7 @@ var SubscriptionManager = /** @class */ (function () {
1984
1985
  // Watch (tail) Mongo's operation log on the entire database (all insert/modify/delete will trigger this function)
1985
1986
  SubscriptionManager.prototype.tailOpLog = function (resumeToken) {
1986
1987
  return __awaiter(this, void 0, void 0, function () {
1987
- var watchDatabases, pipeline, lastResumeToken_1, startedWithResumeToken, error_8, innerError_1, error_9;
1988
+ var watchDatabases, pipeline, lastResumeToken_1, startedWithResumeToken_1, sawChangeEvent_1, resumeTokenInvalidated_1, streamStartedAtMs_1, error_8, innerError_1, error_9;
1988
1989
  var _this = this;
1989
1990
  return __generator(this, function (_a) {
1990
1991
  switch (_a.label) {
@@ -2035,14 +2036,17 @@ var SubscriptionManager = /** @class */ (function () {
2035
2036
  },
2036
2037
  },
2037
2038
  ];
2038
- startedWithResumeToken = false;
2039
+ startedWithResumeToken_1 = false;
2040
+ sawChangeEvent_1 = false;
2041
+ resumeTokenInvalidated_1 = false;
2042
+ streamStartedAtMs_1 = Date.now();
2039
2043
  if (!resumeToken) return [3 /*break*/, 20];
2040
2044
  lastResumeToken_1 = resumeToken;
2041
2045
  _a.label = 4;
2042
2046
  case 4:
2043
2047
  _a.trys.push([4, 5, , 19]);
2044
2048
  this._oplog$ = resolveio_server_app_1.ResolveIOServer.getMongoConnection().watch(pipeline, { resumeAfter: resumeToken, fullDocument: 'updateLookup' });
2045
- startedWithResumeToken = true;
2049
+ startedWithResumeToken_1 = true;
2046
2050
  return [3 /*break*/, 19];
2047
2051
  case 5:
2048
2052
  error_8 = _a.sent();
@@ -2079,7 +2083,7 @@ var SubscriptionManager = /** @class */ (function () {
2079
2083
  case 14:
2080
2084
  _a.trys.push([14, 15, , 18]);
2081
2085
  this._oplog$ = resolveio_server_app_1.ResolveIOServer.getMongoConnection().watch(pipeline, { fullDocument: 'updateLookup' });
2082
- startedWithResumeToken = false;
2086
+ startedWithResumeToken_1 = false;
2083
2087
  return [3 /*break*/, 18];
2084
2088
  case 15:
2085
2089
  innerError_1 = _a.sent();
@@ -2112,12 +2116,14 @@ var SubscriptionManager = /** @class */ (function () {
2112
2116
  return [2 /*return*/];
2113
2117
  case 25: throw error_9;
2114
2118
  case 26:
2115
- console.log(new Date(), 'oplog started', startedWithResumeToken ? '(resumeAfter)' : '');
2119
+ console.log(new Date(), 'oplog started', startedWithResumeToken_1 ? '(resumeAfter)' : '');
2116
2120
  this._oplog$.on('change', function (doc) { return __awaiter(_this, void 0, void 0, function () {
2117
2121
  var collection, fullDocument, docId, flag, dependencyFlag;
2118
2122
  return __generator(this, function (_a) {
2119
2123
  switch (_a.label) {
2120
2124
  case 0:
2125
+ sawChangeEvent_1 = true;
2126
+ this._oplogRetryCount = 0;
2121
2127
  if (!doc.ns) return [3 /*break*/, 14];
2122
2128
  if (this._enableDebug) {
2123
2129
  console.log(new Date(), 'Oplog Hit', doc.ns);
@@ -2221,6 +2227,7 @@ var SubscriptionManager = /** @class */ (function () {
2221
2227
  return [2 /*return*/];
2222
2228
  case 5:
2223
2229
  if (!this.isResumeTokenInvalid(error)) return [3 /*break*/, 7];
2230
+ resumeTokenInvalidated_1 = true;
2224
2231
  return [4 /*yield*/, this.clearResumeToken()];
2225
2232
  case 6:
2226
2233
  _a.sent();
@@ -2247,15 +2254,34 @@ var SubscriptionManager = /** @class */ (function () {
2247
2254
  });
2248
2255
  }); });
2249
2256
  this._oplog$.on('close', function () { return __awaiter(_this, void 0, void 0, function () {
2257
+ var retryThresholdReached, shouldAutoHealResumeToken;
2250
2258
  return __generator(this, function (_a) {
2251
2259
  switch (_a.label) {
2252
2260
  case 0:
2253
2261
  console.log(new Date(), 'oplog close');
2254
- this.queueResumeTokenSave(lastResumeToken_1, { force: true });
2262
+ retryThresholdReached = this._oplogRetryCount >= this.RESUME_TOKEN_AUTO_HEAL_RETRY_THRESHOLD;
2263
+ shouldAutoHealResumeToken = startedWithResumeToken_1
2264
+ && !!lastResumeToken_1
2265
+ && !sawChangeEvent_1
2266
+ && (resumeTokenInvalidated_1 || retryThresholdReached);
2267
+ if (!shouldAutoHealResumeToken) return [3 /*break*/, 2];
2268
+ return [4 /*yield*/, this.clearResumeToken()];
2269
+ case 1:
2270
+ _a.sent();
2271
+ lastResumeToken_1 = null;
2272
+ if (!resumeTokenInvalidated_1) {
2273
+ this.queueFullResync('oplog-resume-token-auto-heal');
2274
+ }
2275
+ console.log(new Date(), 'Sub Manager', 'Auto-healed stale oplog resume token', { retryCount: this._oplogRetryCount, streamLifetimeMs: Date.now() - streamStartedAtMs_1 });
2276
+ _a.label = 2;
2277
+ case 2:
2278
+ if (lastResumeToken_1) {
2279
+ this.queueResumeTokenSave(lastResumeToken_1, { force: true });
2280
+ }
2255
2281
  this._oplog$.removeAllListeners();
2256
2282
  this._oplog$ = null;
2257
2283
  return [4 /*yield*/, this.tailOpLog(lastResumeToken_1)];
2258
- case 1:
2284
+ case 3:
2259
2285
  _a.sent();
2260
2286
  return [2 /*return*/];
2261
2287
  }
@@ -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 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"]}
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\tprivate readonly RESUME_TOKEN_AUTO_HEAL_RETRY_THRESHOLD = 2;\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\t\t\tlet sawChangeEvent = false;\n\t\t\t\tlet resumeTokenInvalidated = false;\n\t\t\t\tconst streamStartedAtMs = Date.now();\n\t\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\tsawChangeEvent = true;\n\t\t\t\tthis._oplogRetryCount = 0;\n\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\tresumeTokenInvalidated = true;\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\tconst retryThresholdReached = this._oplogRetryCount >= this.RESUME_TOKEN_AUTO_HEAL_RETRY_THRESHOLD;\n\t\t\t\t\tconst shouldAutoHealResumeToken = startedWithResumeToken\n\t\t\t\t\t\t&& !!lastResumeToken\n\t\t\t\t\t\t&& !sawChangeEvent\n\t\t\t\t\t\t&& (resumeTokenInvalidated || retryThresholdReached);\n\n\t\t\t\t\tif (shouldAutoHealResumeToken) {\n\t\t\t\t\t\tawait this.clearResumeToken();\n\t\t\t\t\t\tlastResumeToken = null;\n\t\t\t\t\t\tif (!resumeTokenInvalidated) {\n\t\t\t\t\t\t\tthis.queueFullResync('oplog-resume-token-auto-heal');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\tnew Date(),\n\t\t\t\t\t\t\t'Sub Manager',\n\t\t\t\t\t\t\t'Auto-healed stale oplog resume token',\n\t\t\t\t\t\t\t{ retryCount: this._oplogRetryCount, streamLifetimeMs: Date.now() - streamStartedAtMs }\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (lastResumeToken) {\n\t\t\t\t\t\tthis.queueResumeTokenSave(lastResumeToken, { force: true });\n\t\t\t\t\t}\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.23",
3
+ "version": "22.2.24",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "package": "./build_package.sh",