@resolveio/server-lib 20.12.1 → 20.12.3

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.
@@ -1576,13 +1576,14 @@ var SubscriptionManager = /** @class */ (function () {
1576
1576
  };
1577
1577
  SubscriptionManager.prototype.shouldInvalidateSubscription = function (sub, collection, type, documentId) {
1578
1578
  return __awaiter(this, void 0, void 0, function () {
1579
- var trackedIds, filters, filters_1, filters_1_1, filter, e_7_1;
1579
+ var normalizedDocumentId, trackedIds, filters, filters_1, filters_1_1, filter, e_7_1;
1580
1580
  var e_7, _a;
1581
1581
  return __generator(this, function (_b) {
1582
1582
  switch (_b.label) {
1583
1583
  case 0:
1584
1584
  this.ensureDependencyContainers(sub);
1585
- if (!documentId) {
1585
+ normalizedDocumentId = this.normalizeDocumentId(documentId);
1586
+ if (!normalizedDocumentId) {
1586
1587
  this.dependencyDebug('Invalidate due to missing documentId', { publication: sub.publication, collection: collection, type: type });
1587
1588
  return [2 /*return*/, true];
1588
1589
  }
@@ -1591,12 +1592,12 @@ var SubscriptionManager = /** @class */ (function () {
1591
1592
  return [2 /*return*/, true];
1592
1593
  }
1593
1594
  trackedIds = sub.collectionDependencies.get(collection);
1594
- if (trackedIds && trackedIds.has(documentId)) {
1595
- this.dependencyDebug('Invalidate due to tracked id', { publication: sub.publication, collection: collection, type: type, documentId: documentId });
1595
+ if (trackedIds && trackedIds.has(normalizedDocumentId)) {
1596
+ this.dependencyDebug('Invalidate due to tracked id', { publication: sub.publication, collection: collection, type: type, documentId: normalizedDocumentId });
1596
1597
  return [2 /*return*/, true];
1597
1598
  }
1598
1599
  if (type === 'delete') {
1599
- this.dependencyDebug('Skip invalidation on delete for unknown id', { publication: sub.publication, collection: collection, type: type, documentId: documentId });
1600
+ this.dependencyDebug('Skip invalidation on delete for unknown id', { publication: sub.publication, collection: collection, type: type, documentId: normalizedDocumentId });
1600
1601
  return [2 /*return*/, false];
1601
1602
  }
1602
1603
  filters = sub.collectionFilters.get(collection);
@@ -1612,7 +1613,7 @@ var SubscriptionManager = /** @class */ (function () {
1612
1613
  return [4 /*yield*/, this.documentMatchesFilter(collection, documentId, filter)];
1613
1614
  case 3:
1614
1615
  if (_b.sent()) {
1615
- this.dependencyDebug('Invalidate due to filter match', { publication: sub.publication, collection: collection, type: type, documentId: documentId, filter: filter });
1616
+ this.dependencyDebug('Invalidate due to filter match', { publication: sub.publication, collection: collection, type: type, documentId: normalizedDocumentId, filter: filter });
1616
1617
  return [2 /*return*/, true];
1617
1618
  }
1618
1619
  _b.label = 4;
@@ -1631,7 +1632,7 @@ var SubscriptionManager = /** @class */ (function () {
1631
1632
  finally { if (e_7) throw e_7.error; }
1632
1633
  return [7 /*endfinally*/];
1633
1634
  case 8:
1634
- this.dependencyDebug('Skip invalidation after dependency checks', { publication: sub.publication, collection: collection, type: type, documentId: documentId });
1635
+ this.dependencyDebug('Skip invalidation after dependency checks', { publication: sub.publication, collection: collection, type: type, documentId: normalizedDocumentId });
1635
1636
  return [2 /*return*/, false];
1636
1637
  }
1637
1638
  });
@@ -1639,7 +1640,7 @@ var SubscriptionManager = /** @class */ (function () {
1639
1640
  };
1640
1641
  SubscriptionManager.prototype.shouldInvalidateSubscriptionForEvents = function (sub, collection, events) {
1641
1642
  return __awaiter(this, void 0, void 0, function () {
1642
- var sawInsert, sawDelete, events_1, events_1_1, event_1, normalizedDocumentId, e_8_1, paginationMeta, paginationReasons;
1643
+ var sawInsert, sawDelete, events_1, events_1_1, event_1, e_8_1, paginationMeta, paginationReasons;
1643
1644
  var e_8, _a;
1644
1645
  return __generator(this, function (_b) {
1645
1646
  switch (_b.label) {
@@ -1654,14 +1655,13 @@ var SubscriptionManager = /** @class */ (function () {
1654
1655
  case 2:
1655
1656
  if (!!events_1_1.done) return [3 /*break*/, 5];
1656
1657
  event_1 = events_1_1.value;
1657
- normalizedDocumentId = this.normalizeDocumentId(event_1.documentId);
1658
1658
  if (event_1.type === 'insert') {
1659
1659
  sawInsert = true;
1660
1660
  }
1661
1661
  else if (event_1.type === 'delete') {
1662
1662
  sawDelete = true;
1663
1663
  }
1664
- return [4 /*yield*/, this.shouldInvalidateSubscription(sub, collection, event_1.type, normalizedDocumentId)];
1664
+ return [4 /*yield*/, this.shouldInvalidateSubscription(sub, collection, event_1.type, event_1.documentId)];
1665
1665
  case 3:
1666
1666
  if (_b.sent()) {
1667
1667
  return [2 /*return*/, true];
@@ -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 { cpus } from 'os';\nimport * as WebSocket from 'ws';\nimport { Flags } from '../collections/flag.collection';\nimport { LoggedInUsers } from '../collections/logged-in-users.collection';\nimport { LoggedInUserModel } from '../models/logged-in-users.model';\nimport { ServerResponseModel } from '../models/server-message.model';\nimport { ActiveSubscriptionModel, SubscriptionModel } from '../models/subscription.model';\nimport { loadAppStatusPublications } from '../publications/app-status';\nimport { loadCronJobPublications } from '../publications/cron-jobs';\nimport { loadFilePublications } from '../publications/files';\nimport { loadFlagsPublications } from '../publications/flags';\nimport { loadFlagsUpdatePublications } from '../publications/flags-update';\nimport { loadLogPublications } from '../publications/logs';\nimport { loadNotificationPublications } from '../publications/notifications';\nimport { loadReportBuilderDashboardBuilderPublications } from '../publications/report-builder-dashboard-builders';\nimport { loadReportBuilderLibraryPublications } from '../publications/report-builder-libraries';\nimport { loadReportBuilderReportPublications } from '../publications/report-builder-reports';\nimport { loadSuperAdminPublications } from '../publications/super-admin';\nimport { loadUserGroupPublications } from '../publications/user-groups';\nimport { loadUserGuidePublications } from '../publications/user-guides';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { dateReviver, deepCopy, getBinarySize, objectIdHexString } from '../util/common';\nimport { ensureErrorWithCorrelation } from '../util/error-tracking';\nimport { ErrorReporter } from '../util/error-reporter';\nimport { DependencyContextSnapshot, QueryMeta, withDependencyTracking } from '../util/subscription-dependency-context';\nimport { MonitorManagerFunction } from './monitor.manager';\nimport { WebSocketManager } from './websocket.manager';\nconst numCPUs = cpus().length;\nconst v8 = require('v8');\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\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\n\tprivate _mongoQueue: MongoQueueModel[] = [];\n\tprivate _mongoQueueId = 0;\n\t\n\tprivate _oplog$: ChangeStream;\n\n\tprivate _nodeCache;\n\tprivate _cacheId = 1;\n\n\tprivate _heapSize = v8.getHeapStatistics() / numCPUs;\n\tprivate _heapLimit: number;\n\n\tprivate serverConfig;\n\n\tprivate _monitorManagerFunction: MonitorManagerFunction;\n\n\tprivate _enableDebug = false;\n\tprivate _enableDependencyDebug = false;\n\tprivate _debugOplogCollections = [];\n\tprivate _debugOplogHits = 0;\n\tprivate _debugSubCollections = [];\n\tprivate _debugSubHits = 0;\n\tprivate _debugUnSubHits = 0;\n\tprivate _debugUnSubAllHits = 0;\n\tprivate _debugMongoQueueHits = 0;\n\tprivate _debugMongoQueueCollections = [];\n\tprivate _debugSendQueueHits = 0;\n\tprivate _debugRemoveCacheHits = 0;\n\n\tprivate _oplogRetryCount = 0;\n\n\t// Buffer to store throttled latency updates with timestamps\n\tprivate latencyBuffer = new Map<string, { latency: number, lastUpdate: Date }>();\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\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: { type: string, documentId?: any }[] }>();\n\tprivate readonly DEBOUNCE_DELAY = 100; // 100ms debounce window\n\tprivate readonly MAX_WAIT_TIME = 500; // 500ms maximum delay\n\n\n\tconstructor() {}\n\t\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 async initialize(wss: WebSocket.Server, serverConfig, monitorManagerFunction: MonitorManagerFunction) {\n\t\tthis._websocketManager = ResolveIOServer.getMainServer().getWebSocketManager();\n\t\tthis._monitorManagerFunction = monitorManagerFunction;\n\n\t\tthis._nodeCache = new NodeCache( { stdTTL: 0, checkperiod: 0 } );\n\n\t\tsetInterval(() => this.flushThrottledLatencyUpdates(), this.LATENCY_UPDATE_INTERVAL);\n\n\t\t// setTimeout(() => {\n\t\t// \tconsole.log('Setting up performance thread');\n\n\t\t// \tthis.performanceThread = new Worker(path.join(__dirname, './subscription.performance.js'));\n\n\t\t// \tthis.performanceThread.on('exit', code => {\n\t\t// \t\tconsole.error(new Date(), 'THREAD EXITED!!!!!!!!!!!!!!!!!!', code);\n\t\t// \t});\n\n\t\t// \tthis.performanceThread.on('error', code => {\n\t\t// \t\tconsole.error(new Date(), 'THREAD RECV ERROR !!!!!!!!!!!!!!!!!!', code);\n\t\t// \t});\n\t\t// }, 5000);\n\n\t\t// setInterval(() => {\n\t\t// \tconsole.log('Post thread msg');\n\t\t// \tthis.performanceThread.postMessage(this.currentPerfomanceMonitor);\n\t\t// \tthis.currentPerfomanceMonitor = [];\n\t\t// }, 10000);\n\n\t\tthis.serverConfig = serverConfig;\n\t\tthis._wss = wss;\n\n\t\t// Publications\n\t\tloadSuperAdminPublications(this);\n\t\tloadAppStatusPublications(this);\n\t\tloadLogPublications(this);\n\t\tloadFilePublications(this);\n\t\tloadCronJobPublications(this);\n\t\tloadFlagsUpdatePublications(this);\n\t\tloadFlagsPublications(this);\n\t\tloadNotificationPublications(this);\n\t\tloadReportBuilderReportPublications(this);\n\t\tloadReportBuilderLibraryPublications(this);\n\t\tloadUserGroupPublications(this);\n\t\tloadUserGuidePublications(this);\n\t\tloadReportBuilderDashboardBuilderPublications(this);\n\n\t\tawait this.tailOpLog();\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}\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\tpublic async invalidatePubsCache(collection: string, type: string, documentId?: 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 });\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);\n\t\n\t\tconst collSubs = this._subscriptions.filter(sub => this.subscriptionReferencesCollection(sub, collection));\n\t\n\t\tfor (const sub of collSubs) {\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Invalidate Sub', sub.publication, sub.running, sub.runAgain);\n\t\t\t}\n\n\t\t\tif (!(await this.shouldInvalidateSubscriptionForEvents(sub, collection, events))) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\tif (sub.running) {\n\t\t\t\tsub.runAgain = true;\n\t\t\t\tthis.dependencyDebug('Subscription busy, scheduling rerun', { publication: sub.publication, collection, events: this.summarizeEvents(events) });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\tconst batchType = events.length === 1 ? events[0].type : events.map(event => event.type).join(',');\n\n\t\t\tif (this._publications[sub.publication].user_specific) {\n\t\t\t\tthis.dependencyDebug('Triggering user-specific invalidation', { publication: sub.publication, collection, events: this.summarizeEvents(events), clientCount: sub.clients.length });\n\t\t\t\tfor (let client of sub.clients) {\n\t\t\t\t\tconst ws = this._websocketManager.getWebSocket(client.id_socket);\n\t\t\t\t\tif (ws?.readyState === ws.OPEN) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait this.sendDataToOneWithRetry(ws, client.messageId, sub, collection, batchType);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch {\n\t\t\t\t\t\t\t// Error handling\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.dependencyDebug('Triggering broadcast invalidation', { publication: sub.publication, collection, events: this.summarizeEvents(events), clientCount: sub.clients.length });\n\t\t\t\tawait this.sendDataToAllWithRetry(sub, collection, batchType);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate subscriptionReferencesCollection(sub: ActiveSubscriptionModel, collection: string): boolean {\n\t\tif (sub.collections?.includes(collection)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.ensureDependencyContainers(sub);\n\n\t\tconst dependencyIds = sub.collectionDependencies?.get(collection);\n\t\tif (dependencyIds && dependencyIds.size > 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst filters = sub.collectionFilters?.get(collection);\n\t\tif (filters && filters.length > 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (sub.watchAllCollections?.has(collection)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate async delay(ms: number) {\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\treturn new Promise(resolve => setTimeout(resolve, ms));\n\t}\n\n\tprivate 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\t// Throttled `loggedInLatency` method\n\tpublic loggedInLatency(ws: WebSocket) {\n\t\tlet loggedInUser = this._loggedInUsers.find(a => a.id_ws === ws['id_socket']);\n\t\tif (!loggedInUser) return;\n\n\t\tconst now = new Date();\n\t\tconst existingEntry = this.latencyBuffer.get(ws['id_socket']);\n\t\tconst newLatency = ws['latency'];\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(ws['id_socket'], { 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\n\t\tconst updates = Array.from(this.latencyBuffer.entries()).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);\n\t\t\tthis.latencyBuffer.clear(); // Clear buffer after successful update\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\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}\n\n\t// Subscribe to publication\n\tpublic async subscribe(messageRoute: string, messageDate: Date, ws: WebSocket, messageId: number, publication: string, subscriptionData: any[]) {\n\t\tthis._debugSubHits += 1;\n\n\t\tif (!this._debugSubCollections.some(a => a.publication === publication)) {\n\t\t\tthis._debugSubCollections.push({\n\t\t\t\tpublication: publication,\n\t\t\t\thits: 1\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis._debugSubCollections.find(a => a.publication === publication).hits += 1;\n\t\t}\n\n\t\tlet pub = this._publications[publication];\n\n\t\tif (!pub) {\n\t\t\tconsole.error(new Date(), 'No Publication: ' + publication);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tif (subscriptionData.length > 1 || subscriptionData[0]) {\n\t\t\t\tif (!pub.check) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Function For Pub ' + publication);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if (!pub.check._schema) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Schema For Pub ' + publication);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet valObj = {};\n\t\t\t\t\tlet valKeys = Object.keys(pub.check._schema);\n\n\t\t\t\t\tlet rootKeys = valKeys.filter(a => !a.includes('.'));\n\n\t\t\t\t\tfor (let i = 0; i < subscriptionData.length; i++) {\n\t\t\t\t\t\tvalObj[rootKeys[i]] = subscriptionData[i];\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpub.check.validate(valObj);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (errors) {\n\t\t\t\t\t\tif (errors) {\n\t\t\t\t\t\t\tconsole.error(new Date(), 'Error in Pub Check (' + publication + ')', errors);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (messageRoute !== 'Bypass') {\n\t\t\t\tlet urlData = messageRoute.split('/');\n\t\t\t\tlet urlModule = '';\n\t\t\t\tlet urlNext = urlData[0];\n\n\t\t\t\tif (urlData[0] === '') {\n\t\t\t\t\turlModule = '/';\n\t\t\t\t\turlNext = urlData[1];\n\t\t\t\t}\n\n\t\t\t\turlModule += urlNext;\n\n\t\t\t\tif (urlData.length > 1) {\n\t\t\t\t\turlModule += '/';\n\t\t\t\t}\n\n\t\t\t\tlet otherRouteSubs = this._subscriptions.filter(a => a.clients.some(b => b.id_socket === ws['id_socket'] && b.messageRoute !== 'Bypass' && b.messageRoute !== '/' && b.messageRoute !== messageRoute && !b.messageRoute.startsWith(urlModule)));\n\n\t\t\t\tif (otherRouteSubs.length) {\n\t\t\t\t\t// ResolveIOServer.getMainServer().getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Detected Undestroyed Subscription - ' + this.serverConfig['CLIENT_NAME'], 'USER: ' + ws['user'] + ' (Socket: ' + ws['id_socket'] + ') ' + ' is on route: ' + messageRoute + ' but has the following subscriptions on other routes:' + JSON.stringify(otherRouteSubs, null, 2));\n\n\t\t\t\t\totherRouteSubs.forEach(otherSub => {\n\t\t\t\t\t\totherSub.clients.filter(a => a.id_socket === ws['id_socket']).forEach(client => {\n\t\t\t\t\t\t\tthis.unsubscribe(client.messageRoute, new Date(), ws, client.messageId, otherSub.publication, otherSub.subscriptionData);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst normalizedSubscriptionData = Array.isArray(subscriptionData) ? subscriptionData : [];\n\t\t\tconst subscriptionKey = JSON.stringify(normalizedSubscriptionData);\n\t\t\tlet sub = this._subscriptions.find(a => a.publication === publication && a.subscriptionKey === subscriptionKey);\n\n\t\t\t// If sub found (another user watching same data), add client to same sub\n\t\t\tif (sub) {\n\t\t\t\tif (!sub.clients.some(a => a.id_socket === ws['id_socket'] && a.messageId === messageId)) {\n\t\t\t\t\tsub.clients.push({\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\tid_socket: ws['id_socket'],\n\t\t\t\t\t\tmessageRoute: messageRoute\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If sub not found, create new sub\n\t\t\telse {\n\t\t\t\tthis._subscriptions.push({\n\t\t\t\t\tpublication: publication,\n\t\t\t\t\tsubscriptionKey: subscriptionKey,\n\t\t\t\t\tsubscriptionData: normalizedSubscriptionData,\n\t\t\t\t\tcollections: this.getPublicationCollections(publication),\n\t\t\t\t\tclients: [{\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\tid_socket: ws['id_socket'],\n\t\t\t\t\t\tmessageRoute: messageRoute,\n\t\t\t\t\t}],\n\t\t\t\tcacheId: 0,\n\t\t\t\trunning: false,\n\t\t\t\trunAgain: false,\n\t\t\t\tcollectionDependencies: new Map(),\n\t\t\t\tcollectionFilters: new Map(),\n\t\t\t\twatchAllCollections: new Set(),\n\t\t\t\tcollectionQueryMeta: new Map()\n\t\t\t});\n\t\t}\n\n\t\t\tif (!sub) {\n\t\t\t\tsub = this._subscriptions.find(a => a.publication === publication && a.subscriptionKey === subscriptionKey);\n\t\t\t}\n\n\t\t\tthis.ensureDependencyContainers(sub);\n\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'New Sub', sub.publication, sub.running, sub.runAgain, sub.clients.length);\n\t\t\t}\n\n\t\t\t// Immediately send data to the new client\n\t\t\tawait this.processSubscription(sub, ws, messageId);\n\t\t}\n\t}\n\n\tpublic async createLoggedInUser(id_ws: string): Promise<LoggedInUserModel> {\n\t\tlet ws = this._websocketManager.getWebSocket(id_ws);\n\n\t\tif (ws) {\n\t\t\tlet user = {\n\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t__v: 0,\n\t\t\t\tdate: new Date(),\n\t\t\t\tid_user: ws['id_user'],\n\t\t\t\tuser: ws['user'],\n\t\t\t\tid_ws: ws['id_socket']\n\t\t\t};\n\t\t\t\n\t\t\tthis._loggedInUsers.push(user);\n\t\t\tawait LoggedInUsers.insertOne(user);\n\t\t\t\n\t\t\treturn user;\n\t\t}\n\t\telse {\n\t\t\tthrow new Error('Error in Create Logged In User: No WS');\n\t\t}\n\t}\n\n\t// Unsubscribe from publication \n\tpublic unsubscribe(messageRoute: string, messageDate: Date, ws: WebSocket, messageId: number, publication: string, subscriptionData: any[]) {\t\t\n\t\tthis._debugUnSubHits += 1;\n\n\t\tif (!this._publications[publication]) {\n\t\t\tconsole.log('No Publication: ' + publication);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tconst normalizedSubscriptionData = Array.isArray(subscriptionData) ? subscriptionData : [];\n\t\t\tconst subscriptionKey = JSON.stringify(normalizedSubscriptionData);\n\t\t\tlet sub = this._subscriptions.find(a => a.publication === publication && a.subscriptionKey === subscriptionKey);\n\n\t\t\tif (sub) {\n\t\t\t\tfor (let i = sub.clients.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (sub.clients[i].id_user === ws['id_user'] && sub.clients[i].messageId === messageId && sub.clients[i].id_socket === ws['id_socket']) {\n\t\t\t\t\t\tsub.clients.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\tconsole.log(new Date(), 'Unsub', sub.publication, sub.running, sub.runAgain, sub.clients.length);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\n\t// Unsubscribe from publication\n\tpublic async unsubscribeAll(ws: WebSocket) {\n\t\tthis._debugUnSubAllHits += 1;\n\n\t\tif (ws) {\n\t\t\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\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._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] }},\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];\n\n\t\t\tlet lastResumeToken: ResumeToken;\n\n\t\t\tif (resumeToken) {\n\t\t\t\tlastResumeToken = resumeToken;\n\t\t\t\ttry {\n\t\t\t\t\tthis._oplog$ = ResolveIOServer.getMongoConnection().watch(pipeline, { resumeAfter: resumeToken });\n\t\t\t\t}\n\t\t\t\tcatch {\n\t\t\t\t\tif (this._oplog$) {\n\t\t\t\t\t\tthis._oplog$.removeAllListeners();\n\t\t\t\t\t\tawait this._oplog$.close();\n\t\t\t\t\t\tthis._oplog$ = null;\n\t\t\t\t\t}\n\n\t\t\t\t\tawait this.tailOpLog(resumeToken);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._oplog$ = ResolveIOServer.getMongoConnection().watch(pipeline);\n\t\t\t}\n\n\t\t\tconsole.log(new Date(), 'oplog started');\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 docId = doc.documentKey && doc.documentKey['_id'] !== undefined ? doc.documentKey['_id'] : (doc['fullDocument'] && doc['fullDocument']['_id'] !== undefined ? doc['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);\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);\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);\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}\n\n\t\t\t\t\tlastResumeToken = doc._id;\n\n\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}\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\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\tthis._oplog$.on('close', async () => {\n\t\t\t\tconsole.log(new Date(), 'oplog close');\n\t\t\t\tthis._oplog$.removeAllListeners();\n\t\t\t\tthis._oplog$ = null;\n\t\t\t\tawait this.tailOpLog(lastResumeToken);\n\t\t\t});\n\t\t}\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\tlet cacheData = JSON.parse(this._nodeCache.get(sub.cacheId), dateReviver);\n\n\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\tdata: cacheData\n\t\t\t\t\t};\n\n\t\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\t\tconsole.log(new Date(), 'Process Sub, Cache', sub.publication);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t}\n\t\t\t\tcatch {\n\t\t\t\t\tthis._nodeCache.del(sub.cacheId);\n\t\t\t\t\tsub.cacheId = 0;\n\n\t\t\t\t\tawait this.sendDataToAllWithRetry(sub, '', 'newSub');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\tconsole.log(new Date(), 'Process Sub, Non - Cache', sub.publication, sub.running);\n\t\t\t\t}\n\n\t\t\t\tif (sub.running) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tawait this.sendDataToAllWithRetry(sub, '', 'newSub');\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Process Sub Specific, Non - Cache', sub.publication, sub.running);\n\t\t\t}\n\n\t\t\tif (sub.running) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tawait this.sendDataToOneWithRetry(ws, messageId, sub, '', 'newSub');\n\t\t}\n\t}\n\n\tprivate async sendDataToOne(ws: WebSocket, messageId: number, sub: ActiveSubscriptionModel, collection: string, type: string) {\n\t\tlet monitor = this._monitorManagerFunction.startMonitorFunction('User Specific Publication', sub.publication, '', '', sub.subscriptionData);\n\t\tlet dependencySnapshot: DependencyContextSnapshot;\n\t\tlet res;\n\t\ttry {\n\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertSubscriptionLog', type, sub.publication, collection, JSON.stringify(sub.subscriptionData));\n\n\t\t\tconst execution = await withDependencyTracking(() => this._publications[sub.publication].function.call(Object.assign({}, this, SubscriptionManager.prototype), ws['id_user'], ...sub.subscriptionData));\n\t\t\tres = execution.result;\n\t\t\tdependencySnapshot = execution.snapshot;\n\t\t\tthis.updateSubscriptionDependencies(sub, dependencySnapshot);\n\n\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\tmessageId: messageId,\n\t\t\t\thasError: false,\n\t\t\t\tdata: res\n\t\t\t};\n\n\t\t\tthis.sendWS(ws, serverRes);\n\t\t}\n\t\tcatch (err) {\n\t\t\tconst { error: normalizedError, correlationId } = ensureErrorWithCorrelation(err);\n\n\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\tmessageId: messageId,\n\t\t\t\thasError: true,\n\t\t\t\tdata: Object.assign({}, normalizedError, { correlationId })\n\t\t\t};\n\t\t\t\n\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\n\t\t\tconst errorPayload = {\n\t\t\t\tpublication: sub.publication,\n\t\t\t\tsubscriptionData: sub.subscriptionData,\n\t\t\t\ttype,\n\t\t\t\tcollection,\n\t\t\t\tmessageId,\n\t\t\t\tcorrelationId,\n\t\t\t\terror: {\n\t\t\t\t\tname: normalizedError?.name,\n\t\t\t\t\tmessage: normalizedError?.message,\n\t\t\t\t\tstack: normalizedError?.stack,\n\t\t\t\t\tcode: normalizedError?.code,\n\t\t\t\t\tcodeName: normalizedError?.codeName\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tawait ErrorReporter.report({\n\t\t\t\tsourceApp: 'subscription-manager',\n\t\t\t\tmessage: 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\tenvironment: this.serverConfig?.ROOT_URL,\n\t\t\t\tclientSlug: ResolveIOServer.getClientName(),\n\t\t\t\tclientName: this.serverConfig['CLIENT_NAME'],\n\t\t\t\tstack: normalizedError?.stack,\n\t\t\t\tcontext: errorPayload,\n\t\t\t\tmetadata: {\n\t\t\t\t\tcontext: 'subscription-sendDataToOne',\n\t\t\t\t\tpublication: sub.publication,\n\t\t\t\t\tcorrelationId\n\t\t\t\t},\n\t\t\t\tcorrelationId\n\t\t\t});\n\t\t}\n\t\tfinally {\n\t\t\tawait this._monitorManagerFunction.finishMonitorFunction(monitor);\n\t\t}\n\t}\n\n\t// Fetch pub once, send to all clients linked to this pub\n\tprivate async sendDataToAll(sub: ActiveSubscriptionModel, collection: string, type: string) {\n\t\tif (!sub.clients.length) {\n\t\t\tif (sub.cacheId) {\n\t\t\t\tthis._nodeCache.del(sub.cacheId);\n\t\t\t\tsub.cacheId = 0;\n\t\t\t}\n\n\t\t\tlet subIndex = this._subscriptions.findIndex(a => a.publication === sub.publication && a.subscriptionKey === sub.subscriptionKey);\n\t\t\tif (subIndex >= 0) {\n\t\t\t\tthis._subscriptions.splice(subIndex, 1);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tlet monitor = this._monitorManagerFunction.startMonitorFunction('Publication', sub.publication, '', '', sub.subscriptionData);\n\t\t\tlet res;\n\t\t\tlet dependencySnapshot: DependencyContextSnapshot;\n\n\t\t\ttry {\n\t\t\t\tif (sub.publication !== 'superadminAPM' && sub.publication !== 'loggedInUsers') {\n\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertSubscriptionLog', type, sub.publication, collection, JSON.stringify(sub.subscriptionData));\n\t\t\t\t}\n\n\t\t\t\tconst execution = await withDependencyTracking(() => this._publications[sub.publication].function.call(Object.assign({}, this, SubscriptionManager.prototype), ...sub.subscriptionData));\n\t\t\t\tres = execution.result;\n\t\t\t\tdependencySnapshot = execution.snapshot;\n\t\t\t\tthis.updateSubscriptionDependencies(sub, dependencySnapshot);\n\n\t\t\t\tif (sub.cacheId) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet cacheData = JSON.parse(this._nodeCache.get(sub.cacheId), dateReviver);\n\t\n\t\t\t\t\t\tif (JSON.stringify(cacheData) !== JSON.stringify(res)) {\n\t\t\t\t\t\t\tfor (let client of sub.clients) {\n\t\t\t\t\t\t\t\tlet ws = this._websocketManager.getWebSocket(client.id_socket);\n\t\t\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\t\t\t\tdata: res\n\t\t\t\t\t\t\t\t\t};\n\t\t\n\t\t\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis._nodeCache.del(sub.cacheId);\n\n\t\t\t\t\t\t\tif (getBinarySize(JSON.stringify(res)) < 1000000 && \n\t\t\t\t\t\t\t\t!sub.collections.includes('logs') &&\n\t\t\t\t\t\t\t\t!sub.collections.find(a => a.endsWith('.versions')) &&\n\t\t\t\t\t\t\t\t!sub.collections.find(a => a.startsWith('monitor-'))\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tthis._nodeCache.set(sub.cacheId, JSON.stringify(res));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tsub.cacheId = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcatch {\n\t\t\t\t\t\tsub.clients.map(client => {\n\t\t\t\t\t\t\tlet ws = this._websocketManager.getWebSocket(client.id_socket);\n\t\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\t\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\t\n\t\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tthis._nodeCache.del(sub.cacheId);\n\n\t\t\t\t\t\tif (getBinarySize(JSON.stringify(res)) < 1000000 && \n\t\t\t\t\t\t\t!sub.collections.includes('logs') &&\n\t\t\t\t\t\t\t!sub.collections.find(a => a.endsWith('.versions')) &&\n\t\t\t\t\t\t\t!sub.collections.find(a => a.startsWith('monitor-'))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tthis._nodeCache.set(sub.cacheId, JSON.stringify(res));\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}\n\t\t\t\telse {\n\t\t\t\t\tfor (let client of sub.clients) {\n\t\t\t\t\t\tlet ws = this._websocketManager.getWebSocket(client.id_socket);\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\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}\n\t\t\t\t\t\n\t\t\t\t\tif (getBinarySize(JSON.stringify(res)) < 1000000 && \n\t\t\t\t\t\t!sub.collections.includes('logs') &&\n\t\t\t\t\t\t!sub.collections.find(a => a.endsWith('.versions')) &&\n\t\t\t\t\t\t!sub.collections.find(a => a.startsWith('monitor-'))\n\t\t\t\t\t) {\n\t\t\t\t\t\tsub.cacheId = this._cacheId++;\n\t\t\t\t\t\tthis._nodeCache.set(sub.cacheId, JSON.stringify(res));\n\n\t\t\t\t\t\tconst nodeCacheSize = this._nodeCache.getStats().vsize;\n\n\t\t\t\t\t\tif (nodeCacheSize > this._heapLimit) {\n\t\t\t\t\t\t\t// Evict cache entries as needed\n\t\t\t\t\t\t\tlet deleteCount = 0;\n\t\t\t\t\t\t\tconst subArr = this._subscriptions.filter(a => a.cacheId && !a.clients.length);\n\t\t\t\t\t\n\t\t\t\t\t\t\tfor (let zz = 0; zz < subArr.length; zz++) {\n\t\t\t\t\t\t\t\tthis._debugRemoveCacheHits += 1;\n\t\t\t\t\t\t\t\tthis._nodeCache.del(subArr[zz].cacheId);\n\t\t\t\t\t\t\t\tsubArr[zz].cacheId = 0;\n\t\t\t\t\t\t\t\tdeleteCount += 1;\n\t\t\t\t\t\t\t\tif (this._nodeCache.getStats().vsize < this._heapLimit * 0.75) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t\t'Sub Cache: ' +\n\t\t\t\t\t\t\t\t\t'Too Big - ' +\n\t\t\t\t\t\t\t\t\tsub.publication +\n\t\t\t\t\t\t\t\t\t' - Deleted: ' +\n\t\t\t\t\t\t\t\t\tdeleteCount +\n\t\t\t\t\t\t\t\t\t' - ' +\n\t\t\t\t\t\t\t\t\tnodeCacheSize\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tsub.cacheId = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconst { error: normalizedError, correlationId } = ensureErrorWithCorrelation(err);\n\n\t\t\t\tfor (let client of sub.clients) {\n\t\t\t\t\tlet ws = this._websocketManager.getWebSocket(client.id_socket);\n\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\t\tdata: Object.assign({}, normalizedError, { correlationId })\n\t\t\t\t\t\t};\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst errorPayload = {\n\t\t\t\t\tpublication: sub.publication,\n\t\t\t\t\tsubscriptionData: sub.subscriptionData,\n\t\t\t\t\ttype,\n\t\t\t\t\tcollection,\n\t\t\t\t\tcorrelationId,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tname: normalizedError?.name,\n\t\t\t\t\t\tmessage: normalizedError?.message,\n\t\t\t\t\t\tstack: normalizedError?.stack,\n\t\t\t\t\t\tcode: normalizedError?.code,\n\t\t\t\t\t\tcodeName: normalizedError?.codeName\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t\n\t\t\tawait ErrorReporter.report({\n\t\t\t\tsourceApp: 'subscription-manager',\n\t\t\t\tmessage: 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\tenvironment: this.serverConfig?.ROOT_URL,\n\t\t\t\tclientSlug: ResolveIOServer.getClientName(),\n\t\t\t\tclientName: this.serverConfig['CLIENT_NAME'],\n\t\t\t\tstack: normalizedError?.stack,\n\t\t\t\tcontext: errorPayload,\n\t\t\t\tmetadata: {\n\t\t\t\t\tcontext: 'subscription-sendDataToAll',\n\t\t\t\t\tpublication: sub.publication,\n\t\t\t\t\tcorrelationId\n\t\t\t\t},\n\t\t\t\tcorrelationId\n\t\t\t});\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tawait this._monitorManagerFunction.finishMonitorFunction(monitor);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate ensureDependencyContainers(sub: ActiveSubscriptionModel) {\n\t\tif (!sub.collectionDependencies) {\n\t\t\tsub.collectionDependencies = new Map();\n\t\t}\n\n\t\tif (!sub.collectionFilters) {\n\t\t\tsub.collectionFilters = new Map();\n\t\t}\n\n\t\tif (!sub.watchAllCollections) {\n\t\t\tsub.watchAllCollections = new Set();\n\t\t}\n\n\t\tif (!sub.collectionQueryMeta) {\n\t\t\tsub.collectionQueryMeta = new Map();\n\t\t}\n\t}\n\n\tprivate updateSubscriptionDependencies(sub: ActiveSubscriptionModel, snapshot?: DependencyContextSnapshot) {\n\t\tthis.ensureDependencyContainers(sub);\n\n\t\tif (!snapshot) {\n\t\t\tsub.collectionDependencies.clear();\n\t\t\tsub.collectionFilters.clear();\n\t\t\tsub.watchAllCollections.clear();\n\t\t\tsub.collectionQueryMeta.clear();\n\t\t\tthis.dependencyDebug('Cleared dependency snapshot', { publication: sub.publication });\n\t\t\treturn;\n\t\t}\n\n\t\tsub.collectionDependencies = snapshot.dependencies;\n\t\tsub.collectionFilters = snapshot.filters;\n\t\tsub.watchAllCollections = snapshot.watchAllCollections;\n\t\tsub.collectionQueryMeta = snapshot.queryMetadata;\n\t\tthis.logDependencySnapshot(sub, 'Snapshot updated');\n\t}\n\n\tprivate normalizeDocumentId(rawId: any): string {\n\t\tif (rawId === null || rawId === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (typeof rawId === 'string') {\n\t\t\treturn rawId;\n\t\t}\n\n\t\tif (typeof rawId === 'object' && typeof rawId.toHexString === 'function') {\n\t\t\treturn rawId.toHexString();\n\t\t}\n\n\t\tif (typeof rawId?.toString === 'function') {\n\t\t\tconst str = rawId.toString();\n\t\t\tif (str && str !== '[object Object]') {\n\t\t\t\treturn str;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate getDocumentIdQueryCandidates(documentId: any): any[] {\n\t\tconst candidates: any[] = [];\n\n\t\tif (documentId === undefined || documentId === null) {\n\t\t\treturn [documentId];\n\t\t}\n\n\t\tconst addCandidate = value => {\n\t\t\tif (value === undefined || value === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!candidates.includes(value)) {\n\t\t\t\tcandidates.push(value);\n\t\t\t}\n\t\t};\n\n\t\taddCandidate(documentId);\n\n\t\tif (typeof documentId === 'object') {\n\t\t\tif (typeof documentId.toHexString === 'function') {\n\t\t\t\taddCandidate(documentId.toHexString());\n\t\t\t}\n\n\t\t\tif (typeof documentId.toString === 'function') {\n\t\t\t\tconst str = documentId.toString();\n\t\t\t\tif (str && str !== '[object Object]') {\n\t\t\t\t\taddCandidate(str);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (typeof documentId !== 'string') {\n\t\t\taddCandidate(String(documentId));\n\t\t}\n\n\t\treturn candidates;\n\t}\n\n\tprivate async documentMatchesFilter(collection: string, documentId: string, filter: any): Promise<boolean> {\n\t\ttry {\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?: string): Promise<boolean> {\n\t\tthis.ensureDependencyContainers(sub);\n\n\t\tif (!documentId) {\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 (sub.watchAllCollections.has(collection)) {\n\t\t\tthis.dependencyDebug('Invalidate due to watch-all collection', { publication: sub.publication, collection, type });\n\t\t\treturn true;\n\t\t}\n\n\t\tconst trackedIds = sub.collectionDependencies.get(collection);\n\n\t\tif (trackedIds && trackedIds.has(documentId)) {\n\t\t\tthis.dependencyDebug('Invalidate due to tracked id', { publication: sub.publication, collection, type, documentId });\n\t\t\treturn true;\n\t\t}\n\n\t\tif (type === 'delete') {\n\t\t\tthis.dependencyDebug('Skip invalidation on delete for unknown id', { publication: sub.publication, collection, type, documentId });\n\t\t\treturn false;\n\t\t}\n\n\t\tconst filters = sub.collectionFilters.get(collection);\n\n\t\tif (filters && filters.length) {\n\t\t\tfor (const filter of filters) {\n\t\t\t\tif (await this.documentMatchesFilter(collection, documentId, filter)) {\n\t\t\t\t\tthis.dependencyDebug('Invalidate due to filter match', { publication: sub.publication, collection, type, documentId, 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 });\n\t\treturn false;\n\t}\n\n\tprivate async shouldInvalidateSubscriptionForEvents(sub: ActiveSubscriptionModel, collection: string, events: { type: string, documentId?: any }[]): Promise<boolean> {\n\t\tlet sawInsert = false;\n\t\tlet sawDelete = false;\n\n\t\tfor (const event of events) {\n\t\t\tconst normalizedDocumentId = this.normalizeDocumentId(event.documentId);\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, normalizedDocumentId)) {\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: { type: string, documentId?: any }[]) {\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"]}
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 { cpus } from 'os';\nimport * as WebSocket from 'ws';\nimport { Flags } from '../collections/flag.collection';\nimport { LoggedInUsers } from '../collections/logged-in-users.collection';\nimport { LoggedInUserModel } from '../models/logged-in-users.model';\nimport { ServerResponseModel } from '../models/server-message.model';\nimport { ActiveSubscriptionModel, SubscriptionModel } from '../models/subscription.model';\nimport { loadAppStatusPublications } from '../publications/app-status';\nimport { loadCronJobPublications } from '../publications/cron-jobs';\nimport { loadFilePublications } from '../publications/files';\nimport { loadFlagsPublications } from '../publications/flags';\nimport { loadFlagsUpdatePublications } from '../publications/flags-update';\nimport { loadLogPublications } from '../publications/logs';\nimport { loadNotificationPublications } from '../publications/notifications';\nimport { loadReportBuilderDashboardBuilderPublications } from '../publications/report-builder-dashboard-builders';\nimport { loadReportBuilderLibraryPublications } from '../publications/report-builder-libraries';\nimport { loadReportBuilderReportPublications } from '../publications/report-builder-reports';\nimport { loadSuperAdminPublications } from '../publications/super-admin';\nimport { loadUserGroupPublications } from '../publications/user-groups';\nimport { loadUserGuidePublications } from '../publications/user-guides';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { dateReviver, deepCopy, getBinarySize, objectIdHexString } from '../util/common';\nimport { ensureErrorWithCorrelation } from '../util/error-tracking';\nimport { ErrorReporter } from '../util/error-reporter';\nimport { DependencyContextSnapshot, QueryMeta, withDependencyTracking } from '../util/subscription-dependency-context';\nimport { MonitorManagerFunction } from './monitor.manager';\nimport { WebSocketManager } from './websocket.manager';\nconst numCPUs = cpus().length;\nconst v8 = require('v8');\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\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\n\tprivate _mongoQueue: MongoQueueModel[] = [];\n\tprivate _mongoQueueId = 0;\n\t\n\tprivate _oplog$: ChangeStream;\n\n\tprivate _nodeCache;\n\tprivate _cacheId = 1;\n\n\tprivate _heapSize = v8.getHeapStatistics() / numCPUs;\n\tprivate _heapLimit: number;\n\n\tprivate serverConfig;\n\n\tprivate _monitorManagerFunction: MonitorManagerFunction;\n\n\tprivate _enableDebug = false;\n\tprivate _enableDependencyDebug = false;\n\tprivate _debugOplogCollections = [];\n\tprivate _debugOplogHits = 0;\n\tprivate _debugSubCollections = [];\n\tprivate _debugSubHits = 0;\n\tprivate _debugUnSubHits = 0;\n\tprivate _debugUnSubAllHits = 0;\n\tprivate _debugMongoQueueHits = 0;\n\tprivate _debugMongoQueueCollections = [];\n\tprivate _debugSendQueueHits = 0;\n\tprivate _debugRemoveCacheHits = 0;\n\n\tprivate _oplogRetryCount = 0;\n\n\t// Buffer to store throttled latency updates with timestamps\n\tprivate latencyBuffer = new Map<string, { latency: number, lastUpdate: Date }>();\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\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: { type: string, documentId?: any }[] }>();\n\tprivate readonly DEBOUNCE_DELAY = 100; // 100ms debounce window\n\tprivate readonly MAX_WAIT_TIME = 500; // 500ms maximum delay\n\n\n\tconstructor() {}\n\t\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 async initialize(wss: WebSocket.Server, serverConfig, monitorManagerFunction: MonitorManagerFunction) {\n\t\tthis._websocketManager = ResolveIOServer.getMainServer().getWebSocketManager();\n\t\tthis._monitorManagerFunction = monitorManagerFunction;\n\n\t\tthis._nodeCache = new NodeCache( { stdTTL: 0, checkperiod: 0 } );\n\n\t\tsetInterval(() => this.flushThrottledLatencyUpdates(), this.LATENCY_UPDATE_INTERVAL);\n\n\t\t// setTimeout(() => {\n\t\t// \tconsole.log('Setting up performance thread');\n\n\t\t// \tthis.performanceThread = new Worker(path.join(__dirname, './subscription.performance.js'));\n\n\t\t// \tthis.performanceThread.on('exit', code => {\n\t\t// \t\tconsole.error(new Date(), 'THREAD EXITED!!!!!!!!!!!!!!!!!!', code);\n\t\t// \t});\n\n\t\t// \tthis.performanceThread.on('error', code => {\n\t\t// \t\tconsole.error(new Date(), 'THREAD RECV ERROR !!!!!!!!!!!!!!!!!!', code);\n\t\t// \t});\n\t\t// }, 5000);\n\n\t\t// setInterval(() => {\n\t\t// \tconsole.log('Post thread msg');\n\t\t// \tthis.performanceThread.postMessage(this.currentPerfomanceMonitor);\n\t\t// \tthis.currentPerfomanceMonitor = [];\n\t\t// }, 10000);\n\n\t\tthis.serverConfig = serverConfig;\n\t\tthis._wss = wss;\n\n\t\t// Publications\n\t\tloadSuperAdminPublications(this);\n\t\tloadAppStatusPublications(this);\n\t\tloadLogPublications(this);\n\t\tloadFilePublications(this);\n\t\tloadCronJobPublications(this);\n\t\tloadFlagsUpdatePublications(this);\n\t\tloadFlagsPublications(this);\n\t\tloadNotificationPublications(this);\n\t\tloadReportBuilderReportPublications(this);\n\t\tloadReportBuilderLibraryPublications(this);\n\t\tloadUserGroupPublications(this);\n\t\tloadUserGuidePublications(this);\n\t\tloadReportBuilderDashboardBuilderPublications(this);\n\n\t\tawait this.tailOpLog();\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}\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\tpublic async invalidatePubsCache(collection: string, type: string, documentId?: 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 });\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);\n\t\n\t\tconst collSubs = this._subscriptions.filter(sub => this.subscriptionReferencesCollection(sub, collection));\n\t\n\t\tfor (const sub of collSubs) {\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Invalidate Sub', sub.publication, sub.running, sub.runAgain);\n\t\t\t}\n\n\t\t\tif (!(await this.shouldInvalidateSubscriptionForEvents(sub, collection, events))) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\tif (sub.running) {\n\t\t\t\tsub.runAgain = true;\n\t\t\t\tthis.dependencyDebug('Subscription busy, scheduling rerun', { publication: sub.publication, collection, events: this.summarizeEvents(events) });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\tconst batchType = events.length === 1 ? events[0].type : events.map(event => event.type).join(',');\n\n\t\t\tif (this._publications[sub.publication].user_specific) {\n\t\t\t\tthis.dependencyDebug('Triggering user-specific invalidation', { publication: sub.publication, collection, events: this.summarizeEvents(events), clientCount: sub.clients.length });\n\t\t\t\tfor (let client of sub.clients) {\n\t\t\t\t\tconst ws = this._websocketManager.getWebSocket(client.id_socket);\n\t\t\t\t\tif (ws?.readyState === ws.OPEN) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait this.sendDataToOneWithRetry(ws, client.messageId, sub, collection, batchType);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch {\n\t\t\t\t\t\t\t// Error handling\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.dependencyDebug('Triggering broadcast invalidation', { publication: sub.publication, collection, events: this.summarizeEvents(events), clientCount: sub.clients.length });\n\t\t\t\tawait this.sendDataToAllWithRetry(sub, collection, batchType);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate subscriptionReferencesCollection(sub: ActiveSubscriptionModel, collection: string): boolean {\n\t\tif (sub.collections?.includes(collection)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.ensureDependencyContainers(sub);\n\n\t\tconst dependencyIds = sub.collectionDependencies?.get(collection);\n\t\tif (dependencyIds && dependencyIds.size > 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst filters = sub.collectionFilters?.get(collection);\n\t\tif (filters && filters.length > 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (sub.watchAllCollections?.has(collection)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate async delay(ms: number) {\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\treturn new Promise(resolve => setTimeout(resolve, ms));\n\t}\n\n\tprivate 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\t// Throttled `loggedInLatency` method\n\tpublic loggedInLatency(ws: WebSocket) {\n\t\tlet loggedInUser = this._loggedInUsers.find(a => a.id_ws === ws['id_socket']);\n\t\tif (!loggedInUser) return;\n\n\t\tconst now = new Date();\n\t\tconst existingEntry = this.latencyBuffer.get(ws['id_socket']);\n\t\tconst newLatency = ws['latency'];\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(ws['id_socket'], { 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\n\t\tconst updates = Array.from(this.latencyBuffer.entries()).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);\n\t\t\tthis.latencyBuffer.clear(); // Clear buffer after successful update\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\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}\n\n\t// Subscribe to publication\n\tpublic async subscribe(messageRoute: string, messageDate: Date, ws: WebSocket, messageId: number, publication: string, subscriptionData: any[]) {\n\t\tthis._debugSubHits += 1;\n\n\t\tif (!this._debugSubCollections.some(a => a.publication === publication)) {\n\t\t\tthis._debugSubCollections.push({\n\t\t\t\tpublication: publication,\n\t\t\t\thits: 1\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis._debugSubCollections.find(a => a.publication === publication).hits += 1;\n\t\t}\n\n\t\tlet pub = this._publications[publication];\n\n\t\tif (!pub) {\n\t\t\tconsole.error(new Date(), 'No Publication: ' + publication);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tif (subscriptionData.length > 1 || subscriptionData[0]) {\n\t\t\t\tif (!pub.check) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Function For Pub ' + publication);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if (!pub.check._schema) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Schema For Pub ' + publication);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet valObj = {};\n\t\t\t\t\tlet valKeys = Object.keys(pub.check._schema);\n\n\t\t\t\t\tlet rootKeys = valKeys.filter(a => !a.includes('.'));\n\n\t\t\t\t\tfor (let i = 0; i < subscriptionData.length; i++) {\n\t\t\t\t\t\tvalObj[rootKeys[i]] = subscriptionData[i];\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpub.check.validate(valObj);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (errors) {\n\t\t\t\t\t\tif (errors) {\n\t\t\t\t\t\t\tconsole.error(new Date(), 'Error in Pub Check (' + publication + ')', errors);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (messageRoute !== 'Bypass') {\n\t\t\t\tlet urlData = messageRoute.split('/');\n\t\t\t\tlet urlModule = '';\n\t\t\t\tlet urlNext = urlData[0];\n\n\t\t\t\tif (urlData[0] === '') {\n\t\t\t\t\turlModule = '/';\n\t\t\t\t\turlNext = urlData[1];\n\t\t\t\t}\n\n\t\t\t\turlModule += urlNext;\n\n\t\t\t\tif (urlData.length > 1) {\n\t\t\t\t\turlModule += '/';\n\t\t\t\t}\n\n\t\t\t\tlet otherRouteSubs = this._subscriptions.filter(a => a.clients.some(b => b.id_socket === ws['id_socket'] && b.messageRoute !== 'Bypass' && b.messageRoute !== '/' && b.messageRoute !== messageRoute && !b.messageRoute.startsWith(urlModule)));\n\n\t\t\t\tif (otherRouteSubs.length) {\n\t\t\t\t\t// ResolveIOServer.getMainServer().getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Detected Undestroyed Subscription - ' + this.serverConfig['CLIENT_NAME'], 'USER: ' + ws['user'] + ' (Socket: ' + ws['id_socket'] + ') ' + ' is on route: ' + messageRoute + ' but has the following subscriptions on other routes:' + JSON.stringify(otherRouteSubs, null, 2));\n\n\t\t\t\t\totherRouteSubs.forEach(otherSub => {\n\t\t\t\t\t\totherSub.clients.filter(a => a.id_socket === ws['id_socket']).forEach(client => {\n\t\t\t\t\t\t\tthis.unsubscribe(client.messageRoute, new Date(), ws, client.messageId, otherSub.publication, otherSub.subscriptionData);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst normalizedSubscriptionData = Array.isArray(subscriptionData) ? subscriptionData : [];\n\t\t\tconst subscriptionKey = JSON.stringify(normalizedSubscriptionData);\n\t\t\tlet sub = this._subscriptions.find(a => a.publication === publication && a.subscriptionKey === subscriptionKey);\n\n\t\t\t// If sub found (another user watching same data), add client to same sub\n\t\t\tif (sub) {\n\t\t\t\tif (!sub.clients.some(a => a.id_socket === ws['id_socket'] && a.messageId === messageId)) {\n\t\t\t\t\tsub.clients.push({\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\tid_socket: ws['id_socket'],\n\t\t\t\t\t\tmessageRoute: messageRoute\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If sub not found, create new sub\n\t\t\telse {\n\t\t\t\tthis._subscriptions.push({\n\t\t\t\t\tpublication: publication,\n\t\t\t\t\tsubscriptionKey: subscriptionKey,\n\t\t\t\t\tsubscriptionData: normalizedSubscriptionData,\n\t\t\t\t\tcollections: this.getPublicationCollections(publication),\n\t\t\t\t\tclients: [{\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\tid_socket: ws['id_socket'],\n\t\t\t\t\t\tmessageRoute: messageRoute,\n\t\t\t\t\t}],\n\t\t\t\tcacheId: 0,\n\t\t\t\trunning: false,\n\t\t\t\trunAgain: false,\n\t\t\t\tcollectionDependencies: new Map(),\n\t\t\t\tcollectionFilters: new Map(),\n\t\t\t\twatchAllCollections: new Set(),\n\t\t\t\tcollectionQueryMeta: new Map()\n\t\t\t});\n\t\t}\n\n\t\t\tif (!sub) {\n\t\t\t\tsub = this._subscriptions.find(a => a.publication === publication && a.subscriptionKey === subscriptionKey);\n\t\t\t}\n\n\t\t\tthis.ensureDependencyContainers(sub);\n\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'New Sub', sub.publication, sub.running, sub.runAgain, sub.clients.length);\n\t\t\t}\n\n\t\t\t// Immediately send data to the new client\n\t\t\tawait this.processSubscription(sub, ws, messageId);\n\t\t}\n\t}\n\n\tpublic async createLoggedInUser(id_ws: string): Promise<LoggedInUserModel> {\n\t\tlet ws = this._websocketManager.getWebSocket(id_ws);\n\n\t\tif (ws) {\n\t\t\tlet user = {\n\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t__v: 0,\n\t\t\t\tdate: new Date(),\n\t\t\t\tid_user: ws['id_user'],\n\t\t\t\tuser: ws['user'],\n\t\t\t\tid_ws: ws['id_socket']\n\t\t\t};\n\t\t\t\n\t\t\tthis._loggedInUsers.push(user);\n\t\t\tawait LoggedInUsers.insertOne(user);\n\t\t\t\n\t\t\treturn user;\n\t\t}\n\t\telse {\n\t\t\tthrow new Error('Error in Create Logged In User: No WS');\n\t\t}\n\t}\n\n\t// Unsubscribe from publication \n\tpublic unsubscribe(messageRoute: string, messageDate: Date, ws: WebSocket, messageId: number, publication: string, subscriptionData: any[]) {\t\t\n\t\tthis._debugUnSubHits += 1;\n\n\t\tif (!this._publications[publication]) {\n\t\t\tconsole.log('No Publication: ' + publication);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tconst normalizedSubscriptionData = Array.isArray(subscriptionData) ? subscriptionData : [];\n\t\t\tconst subscriptionKey = JSON.stringify(normalizedSubscriptionData);\n\t\t\tlet sub = this._subscriptions.find(a => a.publication === publication && a.subscriptionKey === subscriptionKey);\n\n\t\t\tif (sub) {\n\t\t\t\tfor (let i = sub.clients.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (sub.clients[i].id_user === ws['id_user'] && sub.clients[i].messageId === messageId && sub.clients[i].id_socket === ws['id_socket']) {\n\t\t\t\t\t\tsub.clients.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\tconsole.log(new Date(), 'Unsub', sub.publication, sub.running, sub.runAgain, sub.clients.length);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\n\t// Unsubscribe from publication\n\tpublic async unsubscribeAll(ws: WebSocket) {\n\t\tthis._debugUnSubAllHits += 1;\n\n\t\tif (ws) {\n\t\t\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\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._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] }},\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];\n\n\t\t\tlet lastResumeToken: ResumeToken;\n\n\t\t\tif (resumeToken) {\n\t\t\t\tlastResumeToken = resumeToken;\n\t\t\t\ttry {\n\t\t\t\t\tthis._oplog$ = ResolveIOServer.getMongoConnection().watch(pipeline, { resumeAfter: resumeToken });\n\t\t\t\t}\n\t\t\t\tcatch {\n\t\t\t\t\tif (this._oplog$) {\n\t\t\t\t\t\tthis._oplog$.removeAllListeners();\n\t\t\t\t\t\tawait this._oplog$.close();\n\t\t\t\t\t\tthis._oplog$ = null;\n\t\t\t\t\t}\n\n\t\t\t\t\tawait this.tailOpLog(resumeToken);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._oplog$ = ResolveIOServer.getMongoConnection().watch(pipeline);\n\t\t\t}\n\n\t\t\tconsole.log(new Date(), 'oplog started');\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 docId = doc.documentKey && doc.documentKey['_id'] !== undefined ? doc.documentKey['_id'] : (doc['fullDocument'] && doc['fullDocument']['_id'] !== undefined ? doc['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);\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);\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);\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}\n\n\t\t\t\t\tlastResumeToken = doc._id;\n\n\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}\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\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\tthis._oplog$.on('close', async () => {\n\t\t\t\tconsole.log(new Date(), 'oplog close');\n\t\t\t\tthis._oplog$.removeAllListeners();\n\t\t\t\tthis._oplog$ = null;\n\t\t\t\tawait this.tailOpLog(lastResumeToken);\n\t\t\t});\n\t\t}\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\tlet cacheData = JSON.parse(this._nodeCache.get(sub.cacheId), dateReviver);\n\n\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\tdata: cacheData\n\t\t\t\t\t};\n\n\t\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\t\tconsole.log(new Date(), 'Process Sub, Cache', sub.publication);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t}\n\t\t\t\tcatch {\n\t\t\t\t\tthis._nodeCache.del(sub.cacheId);\n\t\t\t\t\tsub.cacheId = 0;\n\n\t\t\t\t\tawait this.sendDataToAllWithRetry(sub, '', 'newSub');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\tconsole.log(new Date(), 'Process Sub, Non - Cache', sub.publication, sub.running);\n\t\t\t\t}\n\n\t\t\t\tif (sub.running) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tawait this.sendDataToAllWithRetry(sub, '', 'newSub');\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (this._enableDebug) {\n\t\t\t\tconsole.log(new Date(), 'Process Sub Specific, Non - Cache', sub.publication, sub.running);\n\t\t\t}\n\n\t\t\tif (sub.running) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tawait this.sendDataToOneWithRetry(ws, messageId, sub, '', 'newSub');\n\t\t}\n\t}\n\n\tprivate async sendDataToOne(ws: WebSocket, messageId: number, sub: ActiveSubscriptionModel, collection: string, type: string) {\n\t\tlet monitor = this._monitorManagerFunction.startMonitorFunction('User Specific Publication', sub.publication, '', '', sub.subscriptionData);\n\t\tlet dependencySnapshot: DependencyContextSnapshot;\n\t\tlet res;\n\t\ttry {\n\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertSubscriptionLog', type, sub.publication, collection, JSON.stringify(sub.subscriptionData));\n\n\t\t\tconst execution = await withDependencyTracking(() => this._publications[sub.publication].function.call(Object.assign({}, this, SubscriptionManager.prototype), ws['id_user'], ...sub.subscriptionData));\n\t\t\tres = execution.result;\n\t\t\tdependencySnapshot = execution.snapshot;\n\t\t\tthis.updateSubscriptionDependencies(sub, dependencySnapshot);\n\n\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\tmessageId: messageId,\n\t\t\t\thasError: false,\n\t\t\t\tdata: res\n\t\t\t};\n\n\t\t\tthis.sendWS(ws, serverRes);\n\t\t}\n\t\tcatch (err) {\n\t\t\tconst { error: normalizedError, correlationId } = ensureErrorWithCorrelation(err);\n\n\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\tmessageId: messageId,\n\t\t\t\thasError: true,\n\t\t\t\tdata: Object.assign({}, normalizedError, { correlationId })\n\t\t\t};\n\t\t\t\n\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\n\t\t\tconst errorPayload = {\n\t\t\t\tpublication: sub.publication,\n\t\t\t\tsubscriptionData: sub.subscriptionData,\n\t\t\t\ttype,\n\t\t\t\tcollection,\n\t\t\t\tmessageId,\n\t\t\t\tcorrelationId,\n\t\t\t\terror: {\n\t\t\t\t\tname: normalizedError?.name,\n\t\t\t\t\tmessage: normalizedError?.message,\n\t\t\t\t\tstack: normalizedError?.stack,\n\t\t\t\t\tcode: normalizedError?.code,\n\t\t\t\t\tcodeName: normalizedError?.codeName\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tawait ErrorReporter.report({\n\t\t\t\tsourceApp: 'subscription-manager',\n\t\t\t\tmessage: 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\tenvironment: this.serverConfig?.ROOT_URL,\n\t\t\t\tclientSlug: ResolveIOServer.getClientName(),\n\t\t\t\tclientName: this.serverConfig['CLIENT_NAME'],\n\t\t\t\tstack: normalizedError?.stack,\n\t\t\t\tcontext: errorPayload,\n\t\t\t\tmetadata: {\n\t\t\t\t\tcontext: 'subscription-sendDataToOne',\n\t\t\t\t\tpublication: sub.publication,\n\t\t\t\t\tcorrelationId\n\t\t\t\t},\n\t\t\t\tcorrelationId\n\t\t\t});\n\t\t}\n\t\tfinally {\n\t\t\tawait this._monitorManagerFunction.finishMonitorFunction(monitor);\n\t\t}\n\t}\n\n\t// Fetch pub once, send to all clients linked to this pub\n\tprivate async sendDataToAll(sub: ActiveSubscriptionModel, collection: string, type: string) {\n\t\tif (!sub.clients.length) {\n\t\t\tif (sub.cacheId) {\n\t\t\t\tthis._nodeCache.del(sub.cacheId);\n\t\t\t\tsub.cacheId = 0;\n\t\t\t}\n\n\t\t\tlet subIndex = this._subscriptions.findIndex(a => a.publication === sub.publication && a.subscriptionKey === sub.subscriptionKey);\n\t\t\tif (subIndex >= 0) {\n\t\t\t\tthis._subscriptions.splice(subIndex, 1);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tlet monitor = this._monitorManagerFunction.startMonitorFunction('Publication', sub.publication, '', '', sub.subscriptionData);\n\t\t\tlet res;\n\t\t\tlet dependencySnapshot: DependencyContextSnapshot;\n\n\t\t\ttry {\n\t\t\t\tif (sub.publication !== 'superadminAPM' && sub.publication !== 'loggedInUsers') {\n\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethod.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertSubscriptionLog', type, sub.publication, collection, JSON.stringify(sub.subscriptionData));\n\t\t\t\t}\n\n\t\t\t\tconst execution = await withDependencyTracking(() => this._publications[sub.publication].function.call(Object.assign({}, this, SubscriptionManager.prototype), ...sub.subscriptionData));\n\t\t\t\tres = execution.result;\n\t\t\t\tdependencySnapshot = execution.snapshot;\n\t\t\t\tthis.updateSubscriptionDependencies(sub, dependencySnapshot);\n\n\t\t\t\tif (sub.cacheId) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet cacheData = JSON.parse(this._nodeCache.get(sub.cacheId), dateReviver);\n\t\n\t\t\t\t\t\tif (JSON.stringify(cacheData) !== JSON.stringify(res)) {\n\t\t\t\t\t\t\tfor (let client of sub.clients) {\n\t\t\t\t\t\t\t\tlet ws = this._websocketManager.getWebSocket(client.id_socket);\n\t\t\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\t\t\t\tdata: res\n\t\t\t\t\t\t\t\t\t};\n\t\t\n\t\t\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis._nodeCache.del(sub.cacheId);\n\n\t\t\t\t\t\t\tif (getBinarySize(JSON.stringify(res)) < 1000000 && \n\t\t\t\t\t\t\t\t!sub.collections.includes('logs') &&\n\t\t\t\t\t\t\t\t!sub.collections.find(a => a.endsWith('.versions')) &&\n\t\t\t\t\t\t\t\t!sub.collections.find(a => a.startsWith('monitor-'))\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tthis._nodeCache.set(sub.cacheId, JSON.stringify(res));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tsub.cacheId = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcatch {\n\t\t\t\t\t\tsub.clients.map(client => {\n\t\t\t\t\t\t\tlet ws = this._websocketManager.getWebSocket(client.id_socket);\n\t\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\t\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\t\n\t\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tthis._nodeCache.del(sub.cacheId);\n\n\t\t\t\t\t\tif (getBinarySize(JSON.stringify(res)) < 1000000 && \n\t\t\t\t\t\t\t!sub.collections.includes('logs') &&\n\t\t\t\t\t\t\t!sub.collections.find(a => a.endsWith('.versions')) &&\n\t\t\t\t\t\t\t!sub.collections.find(a => a.startsWith('monitor-'))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tthis._nodeCache.set(sub.cacheId, JSON.stringify(res));\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}\n\t\t\t\telse {\n\t\t\t\t\tfor (let client of sub.clients) {\n\t\t\t\t\t\tlet ws = this._websocketManager.getWebSocket(client.id_socket);\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\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}\n\t\t\t\t\t\n\t\t\t\t\tif (getBinarySize(JSON.stringify(res)) < 1000000 && \n\t\t\t\t\t\t!sub.collections.includes('logs') &&\n\t\t\t\t\t\t!sub.collections.find(a => a.endsWith('.versions')) &&\n\t\t\t\t\t\t!sub.collections.find(a => a.startsWith('monitor-'))\n\t\t\t\t\t) {\n\t\t\t\t\t\tsub.cacheId = this._cacheId++;\n\t\t\t\t\t\tthis._nodeCache.set(sub.cacheId, JSON.stringify(res));\n\n\t\t\t\t\t\tconst nodeCacheSize = this._nodeCache.getStats().vsize;\n\n\t\t\t\t\t\tif (nodeCacheSize > this._heapLimit) {\n\t\t\t\t\t\t\t// Evict cache entries as needed\n\t\t\t\t\t\t\tlet deleteCount = 0;\n\t\t\t\t\t\t\tconst subArr = this._subscriptions.filter(a => a.cacheId && !a.clients.length);\n\t\t\t\t\t\n\t\t\t\t\t\t\tfor (let zz = 0; zz < subArr.length; zz++) {\n\t\t\t\t\t\t\t\tthis._debugRemoveCacheHits += 1;\n\t\t\t\t\t\t\t\tthis._nodeCache.del(subArr[zz].cacheId);\n\t\t\t\t\t\t\t\tsubArr[zz].cacheId = 0;\n\t\t\t\t\t\t\t\tdeleteCount += 1;\n\t\t\t\t\t\t\t\tif (this._nodeCache.getStats().vsize < this._heapLimit * 0.75) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this._enableDebug) {\n\t\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t\t'Sub Cache: ' +\n\t\t\t\t\t\t\t\t\t'Too Big - ' +\n\t\t\t\t\t\t\t\t\tsub.publication +\n\t\t\t\t\t\t\t\t\t' - Deleted: ' +\n\t\t\t\t\t\t\t\t\tdeleteCount +\n\t\t\t\t\t\t\t\t\t' - ' +\n\t\t\t\t\t\t\t\t\tnodeCacheSize\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tsub.cacheId = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tconst { error: normalizedError, correlationId } = ensureErrorWithCorrelation(err);\n\n\t\t\t\tfor (let client of sub.clients) {\n\t\t\t\t\tlet ws = this._websocketManager.getWebSocket(client.id_socket);\n\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\t\tdata: Object.assign({}, normalizedError, { correlationId })\n\t\t\t\t\t\t};\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst errorPayload = {\n\t\t\t\t\tpublication: sub.publication,\n\t\t\t\t\tsubscriptionData: sub.subscriptionData,\n\t\t\t\t\ttype,\n\t\t\t\t\tcollection,\n\t\t\t\t\tcorrelationId,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tname: normalizedError?.name,\n\t\t\t\t\t\tmessage: normalizedError?.message,\n\t\t\t\t\t\tstack: normalizedError?.stack,\n\t\t\t\t\t\tcode: normalizedError?.code,\n\t\t\t\t\t\tcodeName: normalizedError?.codeName\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t\n\t\t\tawait ErrorReporter.report({\n\t\t\t\tsourceApp: 'subscription-manager',\n\t\t\t\tmessage: 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'],\n\t\t\t\tenvironment: this.serverConfig?.ROOT_URL,\n\t\t\t\tclientSlug: ResolveIOServer.getClientName(),\n\t\t\t\tclientName: this.serverConfig['CLIENT_NAME'],\n\t\t\t\tstack: normalizedError?.stack,\n\t\t\t\tcontext: errorPayload,\n\t\t\t\tmetadata: {\n\t\t\t\t\tcontext: 'subscription-sendDataToAll',\n\t\t\t\t\tpublication: sub.publication,\n\t\t\t\t\tcorrelationId\n\t\t\t\t},\n\t\t\t\tcorrelationId\n\t\t\t});\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tawait this._monitorManagerFunction.finishMonitorFunction(monitor);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate ensureDependencyContainers(sub: ActiveSubscriptionModel) {\n\t\tif (!sub.collectionDependencies) {\n\t\t\tsub.collectionDependencies = new Map();\n\t\t}\n\n\t\tif (!sub.collectionFilters) {\n\t\t\tsub.collectionFilters = new Map();\n\t\t}\n\n\t\tif (!sub.watchAllCollections) {\n\t\t\tsub.watchAllCollections = new Set();\n\t\t}\n\n\t\tif (!sub.collectionQueryMeta) {\n\t\t\tsub.collectionQueryMeta = new Map();\n\t\t}\n\t}\n\n\tprivate updateSubscriptionDependencies(sub: ActiveSubscriptionModel, snapshot?: DependencyContextSnapshot) {\n\t\tthis.ensureDependencyContainers(sub);\n\n\t\tif (!snapshot) {\n\t\t\tsub.collectionDependencies.clear();\n\t\t\tsub.collectionFilters.clear();\n\t\t\tsub.watchAllCollections.clear();\n\t\t\tsub.collectionQueryMeta.clear();\n\t\t\tthis.dependencyDebug('Cleared dependency snapshot', { publication: sub.publication });\n\t\t\treturn;\n\t\t}\n\n\t\tsub.collectionDependencies = snapshot.dependencies;\n\t\tsub.collectionFilters = snapshot.filters;\n\t\tsub.watchAllCollections = snapshot.watchAllCollections;\n\t\tsub.collectionQueryMeta = snapshot.queryMetadata;\n\t\tthis.logDependencySnapshot(sub, 'Snapshot updated');\n\t}\n\n\tprivate normalizeDocumentId(rawId: any): string {\n\t\tif (rawId === null || rawId === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (typeof rawId === 'string') {\n\t\t\treturn rawId;\n\t\t}\n\n\t\tif (typeof rawId === 'object' && typeof rawId.toHexString === 'function') {\n\t\t\treturn rawId.toHexString();\n\t\t}\n\n\t\tif (typeof rawId?.toString === 'function') {\n\t\t\tconst str = rawId.toString();\n\t\t\tif (str && str !== '[object Object]') {\n\t\t\t\treturn str;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate getDocumentIdQueryCandidates(documentId: any): any[] {\n\t\tconst candidates: any[] = [];\n\n\t\tif (documentId === undefined || documentId === null) {\n\t\t\treturn [documentId];\n\t\t}\n\n\t\tconst addCandidate = value => {\n\t\t\tif (value === undefined || value === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!candidates.includes(value)) {\n\t\t\t\tcandidates.push(value);\n\t\t\t}\n\t\t};\n\n\t\taddCandidate(documentId);\n\n\t\tif (typeof documentId === 'object') {\n\t\t\tif (typeof documentId.toHexString === 'function') {\n\t\t\t\taddCandidate(documentId.toHexString());\n\t\t\t}\n\n\t\t\tif (typeof documentId.toString === 'function') {\n\t\t\t\tconst str = documentId.toString();\n\t\t\t\tif (str && str !== '[object Object]') {\n\t\t\t\t\taddCandidate(str);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (typeof documentId !== 'string') {\n\t\t\taddCandidate(String(documentId));\n\t\t}\n\n\t\treturn candidates;\n\t}\n\n\tprivate async documentMatchesFilter(collection: string, documentId: any, filter: any): Promise<boolean> {\n\t\ttry {\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): Promise<boolean> {\n\t\tthis.ensureDependencyContainers(sub);\n\n\t\tconst normalizedDocumentId = this.normalizeDocumentId(documentId);\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 (sub.watchAllCollections.has(collection)) {\n\t\t\tthis.dependencyDebug('Invalidate due to watch-all collection', { publication: sub.publication, collection, type });\n\t\t\treturn true;\n\t\t}\n\n\t\tconst trackedIds = sub.collectionDependencies.get(collection);\n\n\t\tif (trackedIds && trackedIds.has(normalizedDocumentId)) {\n\t\t\tthis.dependencyDebug('Invalidate due to tracked id', { publication: sub.publication, collection, type, documentId: normalizedDocumentId });\n\t\t\treturn true;\n\t\t}\n\n\t\tif (type === 'delete') {\n\t\t\tthis.dependencyDebug('Skip invalidation on delete for unknown id', { publication: sub.publication, collection, type, documentId: normalizedDocumentId });\n\t\t\treturn false;\n\t\t}\n\n\t\tconst filters = sub.collectionFilters.get(collection);\n\n\t\tif (filters && filters.length) {\n\t\t\tfor (const filter of filters) {\n\t\t\t\tif (await this.documentMatchesFilter(collection, documentId, filter)) {\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: { type: string, documentId?: any }[]): 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)) {\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: { type: string, documentId?: any }[]) {\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"]}
@@ -7,9 +7,6 @@ export interface SlowQueryReportPayload {
7
7
  durationMs: number;
8
8
  maxDurationMs?: number;
9
9
  thresholdMs?: number;
10
- explainPlan?: Record<string, any>;
11
- explainExecutionStats?: Record<string, any>;
12
- explainGeneratedAt?: Date;
13
10
  clientSlug?: string;
14
11
  clientName?: string;
15
12
  environment?: string;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/models/slow-query-report.model.ts"],"names":[],"mappings":"","file":"slow-query-report.model.js","sourcesContent":["export interface SlowQueryReportPayload {\n\tqueryHash: string;\n\tcollection: string;\n\tfilter?: Record<string, any>;\n\tpipeline?: any[];\n\toptions?: Record<string, any>;\n\tdurationMs: number;\n\tmaxDurationMs?: number;\n\tthresholdMs?: number;\n\texplainPlan?: Record<string, any>;\n\texplainExecutionStats?: Record<string, any>;\n\texplainGeneratedAt?: Date;\n\tclientSlug?: string;\n\tclientName?: string;\n\tenvironment?: string;\n\tsourceApp?: string;\n\tnodeHostname?: string;\n\tstatus?: string;\n\tignored?: boolean;\n\tnotes?: string;\n\tapiKey?: string;\n}\n"]}
1
+ {"version":3,"sources":["../../src/models/slow-query-report.model.ts"],"names":[],"mappings":"","file":"slow-query-report.model.js","sourcesContent":["export interface SlowQueryReportPayload {\n\tqueryHash: string;\n\tcollection: string;\n\tfilter?: Record<string, any>;\n\tpipeline?: any[];\n\toptions?: Record<string, any>;\n\tdurationMs: number;\n\tmaxDurationMs?: number;\n\tthresholdMs?: number;\n\tclientSlug?: string;\n\tclientName?: string;\n\tenvironment?: string;\n\tsourceApp?: string;\n\tnodeHostname?: string;\n\tstatus?: string;\n\tignored?: boolean;\n\tnotes?: string;\n\tapiKey?: string;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@resolveio/server-lib",
3
- "version": "20.12.1",
3
+ "version": "20.12.3",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "package": "./build_package.sh",
@@ -11,18 +11,14 @@ interface SlowQueryReportParams {
11
11
  sourceApp?: string;
12
12
  }
13
13
  export declare class SlowQueryReporter {
14
- private static _explainCache;
15
14
  static reportSlowQuery(params: SlowQueryReportParams): Promise<void>;
16
15
  static reportSlowQueryFireAndForget(params: SlowQueryReportParams): void;
17
16
  private static getThresholdMs;
18
17
  private static getEnvironment;
19
18
  private static getClientName;
20
- private static captureExplain;
21
- private static shouldExplain;
22
19
  private static sendPayload;
23
20
  private static getApiKey;
24
21
  private static generateQueryHash;
25
22
  private static normalizeForHash;
26
- private static prepareExplainOptions;
27
23
  }
28
24
  export {};
@@ -38,19 +38,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.SlowQueryReporter = void 0;
40
40
  var crypto_1 = require("crypto");
41
- var NodeCache = require("node-cache");
42
41
  var os_1 = require("os");
43
42
  var resolveio_server_app_1 = require("../resolveio-server-app");
44
43
  var common_1 = require("./common");
45
44
  var SLOW_QUERY_ENDPOINT = 'https://backend.resolveio.com/api/slow-queries/report';
46
45
  var DEFAULT_SLOW_QUERY_THRESHOLD_MS = 2000;
47
- var EXPLAIN_THROTTLE_SECONDS = 5 * 60;
48
46
  var SlowQueryReporter = /** @class */ (function () {
49
47
  function SlowQueryReporter() {
50
48
  }
51
49
  SlowQueryReporter.reportSlowQuery = function (params) {
52
50
  return __awaiter(this, void 0, void 0, function () {
53
- var thresholdMs, queryHash, apiKey, payload, explain, err_1;
51
+ var thresholdMs, queryHash, apiKey, payload, err_1;
54
52
  return __generator(this, function (_a) {
55
53
  switch (_a.label) {
56
54
  case 0:
@@ -78,26 +76,16 @@ var SlowQueryReporter = /** @class */ (function () {
78
76
  };
79
77
  _a.label = 1;
80
78
  case 1:
81
- _a.trys.push([1, 4, , 5]);
82
- return [4 /*yield*/, this.captureExplain(params, queryHash)];
83
- case 2:
84
- explain = _a.sent();
85
- if (explain) {
86
- payload.explainPlan = (0, common_1.deepCopy)(explain.queryPlanner || explain);
87
- if (explain.executionStats) {
88
- payload.explainExecutionStats = (0, common_1.deepCopy)(explain.executionStats);
89
- }
90
- payload.explainGeneratedAt = new Date();
91
- }
79
+ _a.trys.push([1, 3, , 4]);
92
80
  return [4 /*yield*/, this.sendPayload(payload, apiKey)];
93
- case 3:
81
+ case 2:
94
82
  _a.sent();
95
- return [3 /*break*/, 5];
96
- case 4:
83
+ return [3 /*break*/, 4];
84
+ case 3:
97
85
  err_1 = _a.sent();
98
86
  console.error('SlowQueryReporter failed', err_1);
99
- return [3 /*break*/, 5];
100
- case 5: return [2 /*return*/];
87
+ return [3 /*break*/, 4];
88
+ case 4: return [2 /*return*/];
101
89
  }
102
90
  });
103
91
  });
@@ -136,56 +124,9 @@ var SlowQueryReporter = /** @class */ (function () {
136
124
  var config = resolveio_server_app_1.ResolveIOServer.getServerConfig();
137
125
  return (config === null || config === void 0 ? void 0 : config.CLIENT_NAME) || resolveio_server_app_1.ResolveIOServer.getClientName();
138
126
  };
139
- SlowQueryReporter.captureExplain = function (params, queryHash) {
140
- return __awaiter(this, void 0, void 0, function () {
141
- var collection, err_2;
142
- return __generator(this, function (_a) {
143
- switch (_a.label) {
144
- case 0:
145
- if (params.queryType === 'countDocuments') {
146
- return [2 /*return*/, undefined];
147
- }
148
- if (!this.shouldExplain(queryHash)) {
149
- return [2 /*return*/, undefined];
150
- }
151
- collection = resolveio_server_app_1.ResolveIOServer.getMainDB().collection(params.collection);
152
- _a.label = 1;
153
- case 1:
154
- _a.trys.push([1, 8, , 9]);
155
- if (!(params.queryType === 'aggregate')) return [3 /*break*/, 3];
156
- return [4 /*yield*/, collection.aggregate(params.pipeline || [], this.prepareExplainOptions(params.options)).explain('executionStats')];
157
- case 2: return [2 /*return*/, _a.sent()];
158
- case 3:
159
- if (!(params.queryType === 'find')) return [3 /*break*/, 5];
160
- return [4 /*yield*/, collection.find(params.filter || {}, this.prepareExplainOptions(params.options)).explain('executionStats')];
161
- case 4: return [2 /*return*/, _a.sent()];
162
- case 5:
163
- if (!(params.queryType === 'findOne')) return [3 /*break*/, 7];
164
- return [4 /*yield*/, collection.find(params.filter || {}, this.prepareExplainOptions(params.options)).limit(1).explain('executionStats')];
165
- case 6: return [2 /*return*/, _a.sent()];
166
- case 7: return [3 /*break*/, 9];
167
- case 8:
168
- err_2 = _a.sent();
169
- console.error('SlowQueryReporter explain failed', err_2);
170
- return [3 /*break*/, 9];
171
- case 9: return [2 /*return*/, undefined];
172
- }
173
- });
174
- });
175
- };
176
- SlowQueryReporter.shouldExplain = function (queryHash) {
177
- if (!queryHash) {
178
- return false;
179
- }
180
- if (this._explainCache.has(queryHash)) {
181
- return false;
182
- }
183
- this._explainCache.set(queryHash, true);
184
- return true;
185
- };
186
127
  SlowQueryReporter.sendPayload = function (payload, apiKey) {
187
128
  return __awaiter(this, void 0, void 0, function () {
188
- var transport, key, headers, response, err_3;
129
+ var transport, key, headers, response, err_2;
189
130
  return __generator(this, function (_a) {
190
131
  switch (_a.label) {
191
132
  case 0:
@@ -220,8 +161,8 @@ var SlowQueryReporter = /** @class */ (function () {
220
161
  }
221
162
  return [3 /*break*/, 4];
222
163
  case 3:
223
- err_3 = _a.sent();
224
- console.error('SlowQueryReporter network error', err_3);
164
+ err_2 = _a.sent();
165
+ console.error('SlowQueryReporter network error', err_2);
225
166
  return [3 /*break*/, 4];
226
167
  case 4: return [2 /*return*/];
227
168
  }
@@ -276,16 +217,6 @@ var SlowQueryReporter = /** @class */ (function () {
276
217
  }
277
218
  return value;
278
219
  };
279
- SlowQueryReporter.prepareExplainOptions = function (options) {
280
- if (!options) {
281
- return undefined;
282
- }
283
- var sanitized = (0, common_1.deepCopy)(options);
284
- delete sanitized.writeConcern;
285
- delete sanitized.bypassDocumentValidation;
286
- return Object.keys(sanitized).length ? sanitized : undefined;
287
- };
288
- SlowQueryReporter._explainCache = new NodeCache({ stdTTL: EXPLAIN_THROTTLE_SECONDS, checkperiod: 0 });
289
220
  return SlowQueryReporter;
290
221
  }());
291
222
  exports.SlowQueryReporter = SlowQueryReporter;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/util/slow-query-reporter.ts"],"names":[],"mappings":"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","file":"slow-query-reporter.js","sourcesContent":["import { createHash } from 'crypto';\nimport { Document } from 'mongodb';\nimport * as NodeCache from 'node-cache';\nimport { hostname } from 'os';\nimport { SlowQueryReportPayload } from '../models/slow-query-report.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { deepCopy } from './common';\n\nconst SLOW_QUERY_ENDPOINT = 'https://backend.resolveio.com/api/slow-queries/report';\nconst DEFAULT_SLOW_QUERY_THRESHOLD_MS = 2000;\nconst EXPLAIN_THROTTLE_SECONDS = 5 * 60;\n\ninterface SlowQueryReportParams {\n\tcollection: string;\n\tfilter?: Document;\n\tpipeline?: any[];\n\toptions?: Document;\n\tdurationMs: number;\n\tqueryType: 'find' | 'findOne' | 'aggregate' | 'countDocuments';\n\tnotes?: string;\n\tqueryHash?: string;\n\tsourceApp?: string;\n}\n\nexport class SlowQueryReporter {\n\tprivate static _explainCache = new NodeCache({ stdTTL: EXPLAIN_THROTTLE_SECONDS, checkperiod: 0 });\n\n\tpublic static async reportSlowQuery(params: SlowQueryReportParams): Promise<void> {\n\t\tconst thresholdMs = this.getThresholdMs();\n\t\tif (thresholdMs <= 0 || params.durationMs < thresholdMs) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst queryHash = params.queryHash || this.generateQueryHash(params);\n\t\tconst apiKey = this.getApiKey();\n\t\tconst payload: SlowQueryReportPayload = {\n\t\t\tqueryHash,\n\t\t\tcollection: params.collection,\n\t\t\tpipeline: params.pipeline ? deepCopy(params.pipeline) : undefined,\n\t\t\tfilter: params.filter ? deepCopy(params.filter) : undefined,\n\t\t\toptions: params.options ? deepCopy(params.options) : undefined,\n\t\t\tdurationMs: params.durationMs,\n\t\t\tthresholdMs,\n\t\t\tclientSlug: ResolveIOServer.getClientName(),\n\t\t\tclientName: this.getClientName(),\n\t\t\tsourceApp: params.sourceApp || 'mongo-manager',\n\t\t\tenvironment: this.getEnvironment(),\n\t\t\tnodeHostname: hostname(),\n\t\t\tnotes: params.notes,\n\t\t\tapiKey\n\t\t};\n\n\t\ttry {\n\t\t\tconst explain = await this.captureExplain(params, queryHash);\n\t\t\tif (explain) {\n\t\t\t\tpayload.explainPlan = deepCopy(explain.queryPlanner || explain);\n\t\t\t\tif (explain.executionStats) {\n\t\t\t\t\tpayload.explainExecutionStats = deepCopy(explain.executionStats);\n\t\t\t\t}\n\t\t\t\tpayload.explainGeneratedAt = new Date();\n\t\t\t}\n\n\t\t\tawait this.sendPayload(payload, apiKey);\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.error('SlowQueryReporter failed', err);\n\t\t}\n\t}\n\n\tpublic static reportSlowQueryFireAndForget(params: SlowQueryReportParams): void {\n\t\t// eslint-disable-next-line no-restricted-syntax, promise/prefer-await-to-then\n\t\tvoid this.reportSlowQuery(params).catch(err => {\n\t\t\tconsole.error('SlowQueryReporter fire-and-forget error', err);\n\t\t});\n\t}\n\n\tprivate static getThresholdMs(): number {\n\t\tconst config = ResolveIOServer.getServerConfig();\n\t\tconst envValue = process.env.SLOW_QUERY_THRESHOLD_MS;\n\t\tif (envValue && !Number.isNaN(Number(envValue))) {\n\t\t\treturn Number.parseInt(envValue, 10);\n\t\t}\n\n\t\tconst configValue = config?.SLOW_QUERY_THRESHOLD_MS;\n\t\tif (typeof configValue === 'number') {\n\t\t\treturn configValue;\n\t\t}\n\n\t\tif (typeof configValue === 'string' && configValue.length && !Number.isNaN(Number(configValue))) {\n\t\t\treturn Number.parseInt(configValue, 10);\n\t\t}\n\n\t\treturn DEFAULT_SLOW_QUERY_THRESHOLD_MS;\n\t}\n\n\tprivate static getEnvironment(): string {\n\t\tconst config = ResolveIOServer.getServerConfig();\n\t\treturn (\n\t\t\tconfig?.RESOLVEIO_ENV ||\n\t\t\tconfig?.ENVIRONMENT ||\n\t\t\tconfig?.ROOT_URL ||\n\t\t\tprocess.env.RESOLVEIO_ENV ||\n\t\t\tprocess.env.NODE_ENV ||\n\t\t\t'unknown'\n\t\t);\n\t}\n\n\tprivate static getClientName(): string | undefined {\n\t\tconst config = ResolveIOServer.getServerConfig();\n\t\treturn config?.CLIENT_NAME || ResolveIOServer.getClientName();\n\t}\n\n\tprivate static async captureExplain(params: SlowQueryReportParams, queryHash: string): Promise<Document | undefined> {\n\t\tif (params.queryType === 'countDocuments') {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!this.shouldExplain(queryHash)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst collection = ResolveIOServer.getMainDB().collection(params.collection);\n\t\ttry {\n\t\t\tif (params.queryType === 'aggregate') {\n\t\t\t\treturn await collection.aggregate(params.pipeline || [], this.prepareExplainOptions(params.options)).explain('executionStats');\n\t\t\t}\n\t\t\telse if (params.queryType === 'find') {\n\t\t\t\treturn await collection.find(params.filter || {}, this.prepareExplainOptions(params.options)).explain('executionStats');\n\t\t\t}\n\t\t\telse if (params.queryType === 'findOne') {\n\t\t\t\treturn await collection.find(params.filter || {}, this.prepareExplainOptions(params.options)).limit(1).explain('executionStats');\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.error('SlowQueryReporter explain failed', err);\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate static shouldExplain(queryHash: string): boolean {\n\t\tif (!queryHash) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this._explainCache.has(queryHash)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._explainCache.set(queryHash, true);\n\t\treturn true;\n\t}\n\n\tprivate static async sendPayload(payload: SlowQueryReportPayload, apiKey?: string): Promise<void> {\n\t\tconst transport = globalThis.fetch;\n\t\tif (typeof transport !== 'function') {\n\t\t\tconsole.error('SlowQueryReporter cannot send payload (fetch missing)', payload);\n\t\t\treturn;\n\t\t}\n\n\t\tconst key = apiKey || this.getApiKey();\n\t\tconst headers = removeEmptyFields({\n\t\t\t'Content-Type': 'application/json',\n\t\t\t'X-ResolveIO-Slow-Query-Key': key,\n\t\t\t'X-Slow-Query-Key': key,\n\t\t\t'X-API-Key': key\n\t\t});\n\n\t\ttry {\n\t\t\tconst response = await transport(SLOW_QUERY_ENDPOINT, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders,\n\t\t\t\tbody: JSON.stringify(payload)\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconsole.error('SlowQueryReporter payload rejected', {\n\t\t\t\t\tstatus: response.status,\n\t\t\t\t\tstatusText: response.statusText,\n\t\t\t\t\tqueryHash: payload.queryHash\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.error('SlowQueryReporter network error', err);\n\t\t}\n\t}\n\n\tprivate static getApiKey(): string | undefined {\n\t\tconst config = ResolveIOServer.getServerConfig();\n\t\treturn (\n\t\t\tprocess.env.SLOW_QUERY_API_KEY ||\n\t\t\tprocess.env.SLOW_QUERY_INGEST_KEY ||\n\t\t\tconfig?.SLOW_QUERY_API_KEY ||\n\t\t\tconfig?.SLOW_QUERY_INGEST_KEY ||\n\t\t\tResolveIOServer.getClientName()\n\t\t);\n\t}\n\n\tprivate static generateQueryHash(params: SlowQueryReportParams): string {\n\t\ttry {\n\t\t\tconst normalized = this.normalizeForHash({\n\t\t\t\tcollection: params.collection,\n\t\t\t\tfilter: params.filter || null,\n\t\t\t\tpipeline: params.pipeline || null,\n\t\t\t\toptions: params.options || null,\n\t\t\t\tqueryType: params.queryType\n\t\t\t});\n\t\t\tconst digest = createHash('sha256').update(JSON.stringify(normalized)).digest('hex').slice(0, 16);\n\t\t\treturn `${params.collection}-${digest}`;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.error('SlowQueryReporter hash generation failed', err);\n\t\t\treturn `${params.collection}-${Date.now()}`;\n\t\t}\n\t}\n\n\tprivate static normalizeForHash(value: any): any {\n\t\tif (value === null || value === undefined) {\n\t\t\treturn value;\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value.map(item => this.normalizeForHash(item));\n\t\t}\n\n\t\tif (value instanceof RegExp) {\n\t\t\treturn value.toString();\n\t\t}\n\n\t\tif (typeof value === 'object') {\n\t\t\tif (typeof (value as any).toHexString === 'function') {\n\t\t\t\treturn (value as any).toHexString();\n\t\t\t}\n\n\t\t\tconst ordered: Record<string, any> = {};\n\t\t\tObject.keys(value).sort().forEach(key => {\n\t\t\t\tordered[key] = this.normalizeForHash(value[key]);\n\t\t\t});\n\t\t\treturn ordered;\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tprivate static prepareExplainOptions(options?: Document): Document | undefined {\n\t\tif (!options) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst sanitized = deepCopy(options);\n\n\t\tdelete sanitized.writeConcern;\n\t\tdelete sanitized.bypassDocumentValidation;\n\n\t\treturn Object.keys(sanitized).length ? sanitized : undefined;\n\t}\n}\n\n\tfunction removeEmptyFields<T extends Record<string, any>>(obj: T): T {\n\t\treturn (Object.keys(obj) as Array<keyof T>).reduce((acc, key) => {\n\t\t\tconst value = obj[key];\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tacc[key] = value;\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, {} as T);\n\t}\n"]}
1
+ {"version":3,"sources":["../../src/util/slow-query-reporter.ts"],"names":[],"mappings":"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","file":"slow-query-reporter.js","sourcesContent":["import { createHash } from 'crypto';\nimport { Document } from 'mongodb';\nimport { hostname } from 'os';\nimport { SlowQueryReportPayload } from '../models/slow-query-report.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { deepCopy } from './common';\n\nconst SLOW_QUERY_ENDPOINT = 'https://backend.resolveio.com/api/slow-queries/report';\nconst DEFAULT_SLOW_QUERY_THRESHOLD_MS = 2000;\n\ninterface SlowQueryReportParams {\n\tcollection: string;\n\tfilter?: Document;\n\tpipeline?: any[];\n\toptions?: Document;\n\tdurationMs: number;\n\tqueryType: 'find' | 'findOne' | 'aggregate' | 'countDocuments';\n\tnotes?: string;\n\tqueryHash?: string;\n\tsourceApp?: string;\n}\n\nexport class SlowQueryReporter {\n\tpublic static async reportSlowQuery(params: SlowQueryReportParams): Promise<void> {\n\t\tconst thresholdMs = this.getThresholdMs();\n\t\tif (thresholdMs <= 0 || params.durationMs < thresholdMs) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst queryHash = params.queryHash || this.generateQueryHash(params);\n\t\tconst apiKey = this.getApiKey();\n\t\tconst payload: SlowQueryReportPayload = {\n\t\t\tqueryHash,\n\t\t\tcollection: params.collection,\n\t\t\tpipeline: params.pipeline ? deepCopy(params.pipeline) : undefined,\n\t\t\tfilter: params.filter ? deepCopy(params.filter) : undefined,\n\t\t\toptions: params.options ? deepCopy(params.options) : undefined,\n\t\t\tdurationMs: params.durationMs,\n\t\t\tthresholdMs,\n\t\t\tclientSlug: ResolveIOServer.getClientName(),\n\t\t\tclientName: this.getClientName(),\n\t\t\tsourceApp: params.sourceApp || 'mongo-manager',\n\t\t\tenvironment: this.getEnvironment(),\n\t\t\tnodeHostname: hostname(),\n\t\t\tnotes: params.notes,\n\t\t\tapiKey\n\t\t};\n\n\t\ttry {\n\t\t\tawait this.sendPayload(payload, apiKey);\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.error('SlowQueryReporter failed', err);\n\t\t}\n\t}\n\n\tpublic static reportSlowQueryFireAndForget(params: SlowQueryReportParams): void {\n\t\t// eslint-disable-next-line no-restricted-syntax, promise/prefer-await-to-then\n\t\tvoid this.reportSlowQuery(params).catch(err => {\n\t\t\tconsole.error('SlowQueryReporter fire-and-forget error', err);\n\t\t});\n\t}\n\n\tprivate static getThresholdMs(): number {\n\t\tconst config = ResolveIOServer.getServerConfig();\n\t\tconst envValue = process.env.SLOW_QUERY_THRESHOLD_MS;\n\t\tif (envValue && !Number.isNaN(Number(envValue))) {\n\t\t\treturn Number.parseInt(envValue, 10);\n\t\t}\n\n\t\tconst configValue = config?.SLOW_QUERY_THRESHOLD_MS;\n\t\tif (typeof configValue === 'number') {\n\t\t\treturn configValue;\n\t\t}\n\n\t\tif (typeof configValue === 'string' && configValue.length && !Number.isNaN(Number(configValue))) {\n\t\t\treturn Number.parseInt(configValue, 10);\n\t\t}\n\n\t\treturn DEFAULT_SLOW_QUERY_THRESHOLD_MS;\n\t}\n\n\tprivate static getEnvironment(): string {\n\t\tconst config = ResolveIOServer.getServerConfig();\n\t\treturn (\n\t\t\tconfig?.RESOLVEIO_ENV ||\n\t\t\tconfig?.ENVIRONMENT ||\n\t\t\tconfig?.ROOT_URL ||\n\t\t\tprocess.env.RESOLVEIO_ENV ||\n\t\t\tprocess.env.NODE_ENV ||\n\t\t\t'unknown'\n\t\t);\n\t}\n\n\tprivate static getClientName(): string | undefined {\n\t\tconst config = ResolveIOServer.getServerConfig();\n\t\treturn config?.CLIENT_NAME || ResolveIOServer.getClientName();\n\t}\n\n\tprivate static async sendPayload(payload: SlowQueryReportPayload, apiKey?: string): Promise<void> {\n\t\tconst transport = globalThis.fetch;\n\t\tif (typeof transport !== 'function') {\n\t\t\tconsole.error('SlowQueryReporter cannot send payload (fetch missing)', payload);\n\t\t\treturn;\n\t\t}\n\n\t\tconst key = apiKey || this.getApiKey();\n\t\tconst headers = removeEmptyFields({\n\t\t\t'Content-Type': 'application/json',\n\t\t\t'X-ResolveIO-Slow-Query-Key': key,\n\t\t\t'X-Slow-Query-Key': key,\n\t\t\t'X-API-Key': key\n\t\t});\n\n\t\ttry {\n\t\t\tconst response = await transport(SLOW_QUERY_ENDPOINT, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders,\n\t\t\t\tbody: JSON.stringify(payload)\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconsole.error('SlowQueryReporter payload rejected', {\n\t\t\t\t\tstatus: response.status,\n\t\t\t\t\tstatusText: response.statusText,\n\t\t\t\t\tqueryHash: payload.queryHash\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.error('SlowQueryReporter network error', err);\n\t\t}\n\t}\n\n\tprivate static getApiKey(): string | undefined {\n\t\tconst config = ResolveIOServer.getServerConfig();\n\t\treturn (\n\t\t\tprocess.env.SLOW_QUERY_API_KEY ||\n\t\t\tprocess.env.SLOW_QUERY_INGEST_KEY ||\n\t\t\tconfig?.SLOW_QUERY_API_KEY ||\n\t\t\tconfig?.SLOW_QUERY_INGEST_KEY ||\n\t\t\tResolveIOServer.getClientName()\n\t\t);\n\t}\n\n\tprivate static generateQueryHash(params: SlowQueryReportParams): string {\n\t\ttry {\n\t\t\tconst normalized = this.normalizeForHash({\n\t\t\t\tcollection: params.collection,\n\t\t\t\tfilter: params.filter || null,\n\t\t\t\tpipeline: params.pipeline || null,\n\t\t\t\toptions: params.options || null,\n\t\t\t\tqueryType: params.queryType\n\t\t\t});\n\t\t\tconst digest = createHash('sha256').update(JSON.stringify(normalized)).digest('hex').slice(0, 16);\n\t\t\treturn `${params.collection}-${digest}`;\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.error('SlowQueryReporter hash generation failed', err);\n\t\t\treturn `${params.collection}-${Date.now()}`;\n\t\t}\n\t}\n\n\tprivate static normalizeForHash(value: any): any {\n\t\tif (value === null || value === undefined) {\n\t\t\treturn value;\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value.map(item => this.normalizeForHash(item));\n\t\t}\n\n\t\tif (value instanceof RegExp) {\n\t\t\treturn value.toString();\n\t\t}\n\n\t\tif (typeof value === 'object') {\n\t\t\tif (typeof (value as any).toHexString === 'function') {\n\t\t\t\treturn (value as any).toHexString();\n\t\t\t}\n\n\t\t\tconst ordered: Record<string, any> = {};\n\t\t\tObject.keys(value).sort().forEach(key => {\n\t\t\t\tordered[key] = this.normalizeForHash(value[key]);\n\t\t\t});\n\t\t\treturn ordered;\n\t\t}\n\n\t\treturn value;\n\t}\n\n}\n\nfunction removeEmptyFields<T extends Record<string, any>>(obj: T): T {\n\treturn (Object.keys(obj) as Array<keyof T>).reduce((acc, key) => {\n\t\tconst value = obj[key];\n\t\tif (value !== undefined && value !== null) {\n\t\t\tacc[key] = value;\n\t\t}\n\t\treturn acc;\n\t}, {} as T);\n}\n"]}
@@ -183,6 +183,9 @@ function recordAggregateDependencies(collection, pipeline, result) {
183
183
  filter: matchFilter || undefined,
184
184
  meta: meta
185
185
  });
186
+ if (shouldWatchAllForAggregatePipeline(pipeline)) {
187
+ context.watchAllCollections.add(collection);
188
+ }
186
189
  if (!lookupTargets.length) {
187
190
  return;
188
191
  }
@@ -257,6 +260,25 @@ function recordAggregateDependencies(collection, pipeline, result) {
257
260
  finally { if (e_2) throw e_2.error; }
258
261
  }
259
262
  }
263
+ function shouldWatchAllForAggregatePipeline(pipeline) {
264
+ if (!Array.isArray(pipeline)) {
265
+ return false;
266
+ }
267
+ return pipeline.some(function (stage) { return isGroupStageWithPush(stage); });
268
+ }
269
+ function isGroupStageWithPush(stage) {
270
+ if (!stage || typeof stage !== 'object') {
271
+ return false;
272
+ }
273
+ var groupStage = stage.$group;
274
+ if (!groupStage || typeof groupStage !== 'object') {
275
+ return false;
276
+ }
277
+ return Object.values(groupStage).some(function (accumulator) { return isPushAccumulator(accumulator); });
278
+ }
279
+ function isPushAccumulator(accumulator) {
280
+ return !!(accumulator && typeof accumulator === 'object' && Object.prototype.hasOwnProperty.call(accumulator, '$push'));
281
+ }
260
282
  function extractLookupTargets(pipeline) {
261
283
  var e_5, _a;
262
284
  var lookups = [];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/util/subscription-dependency-context.ts"],"names":[],"mappings":"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","file":"subscription-dependency-context.js","sourcesContent":["import { AsyncLocalStorage } from 'async_hooks';\nimport { deepCopy } from './common';\n\nexport interface QueryMeta {\n\tlimit?: number;\n\tskip?: number;\n\tsort?: any;\n}\n\nexport interface DependencyContextSnapshot {\n\tdependencies: Map<string, Set<string>>;\n\tfilters: Map<string, any[]>;\n\twatchAllCollections: Set<string>;\n\tqueryMetadata: Map<string, QueryMeta[]>;\n}\n\ninterface LookupTarget {\n\tfrom: string;\n\tas: string;\n\tlocalField?: string;\n\tforeignField?: string;\n\tlet?: Record<string, any>;\n\tpipeline?: any[];\n}\n\ninterface DependencyContext extends DependencyContextSnapshot {}\n\nconst dependencyStorage = new AsyncLocalStorage<DependencyContext>();\n\nexport async function withDependencyTracking<T>(fn: () => Promise<T>): Promise<{ result: T; snapshot: DependencyContextSnapshot }> {\n\tconst context: DependencyContext = {\n\t\tdependencies: new Map(),\n\t\tfilters: new Map(),\n\t\twatchAllCollections: new Set(),\n\t\tqueryMetadata: new Map()\n\t};\n\n\tlet result: T;\n\n\tawait dependencyStorage.run(context, async () => {\n\t\tresult = await fn();\n\t});\n\n\treturn {\n\t\tresult,\n\t\tsnapshot: {\n\t\t\tdependencies: cloneDependencyMap(context.dependencies),\n\t\t\tfilters: cloneFilterMap(context.filters),\n\t\t\twatchAllCollections: new Set(context.watchAllCollections),\n\t\t\tqueryMetadata: cloneQueryMetaMap(context.queryMetadata)\n\t\t}\n\t};\n}\n\nexport function recordDependencyResult(collection: string, result: unknown, options?: { filter?: any, meta?: QueryMeta }) {\n\tconst context = dependencyStorage.getStore();\n\n\tif (!context) {\n\t\treturn;\n\t}\n\n\tif (options?.filter) {\n\t\tlet filterList = context.filters.get(collection);\n\n\t\tif (!filterList) {\n\t\t\tfilterList = [];\n\t\t\tcontext.filters.set(collection, filterList);\n\t\t}\n\n\t\tfilterList.push(deepCopy(options.filter));\n\t\tcontext.watchAllCollections.delete(collection);\n\t}\n\n\tif (options?.meta) {\n\t\tlet metaList = context.queryMetadata.get(collection);\n\n\t\tif (!metaList) {\n\t\t\tmetaList = [];\n\t\t\tcontext.queryMetadata.set(collection, metaList);\n\t\t}\n\n\t\tmetaList.push(deepCopy(options.meta));\n\t}\n\n\tconst ids = new Set<string>();\n\tcollectIdsFromResult(result, ids);\n\n\tif (!ids.size && options?.filter) {\n\t\tcollectIdsFromFilter(options.filter, ids);\n\t}\n\n\tif (ids.size) {\n\t\tcontext.watchAllCollections.delete(collection);\n\t\tlet existing = context.dependencies.get(collection);\n\n\t\tif (!existing) {\n\t\t\texisting = new Set();\n\t\t\tcontext.dependencies.set(collection, existing);\n\t\t}\n\n\t\tfor (const id of ids) {\n\t\t\texisting.add(id);\n\t\t}\n\t}\n\telse if (!options?.filter) {\n\t\tcontext.watchAllCollections.add(collection);\n\t}\n}\n\nexport function recordAggregateDependencies(collection: string, pipeline: any[], result: unknown) {\n\tconst context = dependencyStorage.getStore();\n\n\tif (!context) {\n\t\treturn;\n\t}\n\n\tconst lookupTargets = extractLookupTargets(pipeline);\n\tconst lookupAliases = new Set<string>(lookupTargets.map(target => target.as).filter(Boolean));\n\tconst matchFilter = sanitizeMatchFilter(extractMatchFilter(pipeline), lookupAliases);\n\tconst meta = extractAggregateMeta(pipeline);\n\trecordDependencyResult(collection, result, {\n\t\tfilter: matchFilter || undefined,\n\t\tmeta\n\t});\n\n\tif (!lookupTargets.length) {\n\t\treturn;\n\t}\n\n\tfor (const target of lookupTargets) {\n\t\tconst nestedValues: unknown[] = [];\n\t\tcollectLookupValues(result, target.as, nestedValues);\n\t\tconst rootDocs = Array.isArray(result) ? result : [result];\n\t\tconst pipelineFilters: any[] = [];\n\t\tlet pipelineUnresolved = false;\n\n\t\tfor (const rootDoc of rootDocs) {\n\t\t\tconst { filters: filtersFromPipeline, unresolved } = buildLookupPipelineFilters(rootDoc, target);\n\t\t\tif (unresolved) {\n\t\t\t\tpipelineUnresolved = true;\n\t\t\t}\n\t\t\tif (filtersFromPipeline?.length) {\n\t\t\t\tpipelineFilters.push(...filtersFromPipeline);\n\t\t\t}\n\t\t}\n\n\t\tconst filter = buildLookupFilter(result, target.localField, target.foreignField);\n\n\t\tconst uniquePipelineFilters = dedupeFilters(pipelineFilters);\n\n\t\tif (nestedValues.length) {\n\t\t\trecordDependencyResult(target.from, nestedValues, filter ? { filter } : undefined);\n\t\t}\n\n\t\tif (uniquePipelineFilters.length) {\n\t\t\tconst pipelineMeta = extractAggregationMetaFromPipeline(target.pipeline);\n\t\t\tfor (const pipelineFilter of uniquePipelineFilters) {\n\t\t\t\trecordDependencyResult(target.from, [], { filter: pipelineFilter, meta: pipelineMeta });\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!nestedValues.length && filter) {\n\t\t\trecordDependencyResult(target.from, [], { filter });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!nestedValues.length) {\n\t\t\tif (pipelineUnresolved) {\n\t\t\t\tcontext.watchAllCollections.add(target.from);\n\t\t\t}\n\t\t\telse if (!target.pipeline || !target.pipeline.length) {\n\t\t\t\tcontext.watchAllCollections.add(target.from);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction extractLookupTargets(pipeline: any[]): LookupTarget[] {\nconst lookups: LookupTarget[] = [];\n\n\tif (!Array.isArray(pipeline)) {\n\t\treturn lookups;\n\t}\n\n\tfor (const stage of pipeline) {\n\t\tif (stage && stage.$lookup && typeof stage.$lookup === 'object') {\n\t\t\tconst lookup = stage.$lookup;\n\t\t\tif (typeof lookup.from === 'string' && typeof lookup.as === 'string') {\n\t\t\t\tlookups.push({\n\t\t\t\t\tfrom: lookup.from,\n\t\t\t\t\tas: lookup.as,\n\t\t\t\t\tlocalField: typeof lookup.localField === 'string' ? lookup.localField : undefined,\n\t\t\t\t\tforeignField: typeof lookup.foreignField === 'string' ? lookup.foreignField : undefined,\n\t\t\t\t\tlet: lookup.let && typeof lookup.let === 'object' ? lookup.let : undefined,\n\t\t\t\t\tpipeline: Array.isArray(lookup.pipeline) ? lookup.pipeline : undefined\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\treturn lookups;\n}\n\nfunction extractMatchFilter(pipeline: any[]): any {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn null;\n\t}\n\n\tconst filters: any[] = [];\n\n\tfor (const stage of pipeline) {\n\t\tif (stage && stage.$match && typeof stage.$match === 'object') {\n\t\t\tfilters.push(deepCopy(stage.$match));\n\t\t}\n\t}\n\n\tif (!filters.length) {\n\t\treturn null;\n\t}\n\n\tif (filters.length === 1) {\n\t\treturn filters[0];\n\t}\n\n\treturn { $and: filters };\n}\n\nfunction sanitizeMatchFilter(filter: any, lookupAliases: Set<string>) {\n\tif (!filter || !lookupAliases?.size) {\n\t\treturn filter;\n\t}\n\n\treturn sanitizeFilterNode(filter, lookupAliases);\n}\n\nfunction sanitizeFilterNode(node: any, lookupAliases: Set<string>): any {\n\tif (!node) {\n\t\treturn null;\n\t}\n\n\tif (Array.isArray(node)) {\n\t\tconst sanitizedArray = node\n\t\t\t.map(entry => sanitizeFilterNode(entry, lookupAliases))\n\t\t\t.filter(isMeaningfulFilterNode);\n\n\t\treturn sanitizedArray.length ? sanitizedArray : null;\n\t}\n\n\tif (typeof node !== 'object') {\n\t\treturn node;\n\t}\n\n\tconst result = {};\n\n\tfor (const [key, value] of Object.entries(node)) {\n\t\tif (key === '$and' || key === '$or' || key === '$nor') {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tconst sanitizedChildren = value\n\t\t\t\t\t.map(entry => sanitizeFilterNode(entry, lookupAliases))\n\t\t\t\t\t.filter(isMeaningfulFilterNode);\n\n\t\t\t\tif (sanitizedChildren.length) {\n\t\t\t\t\tresult[key] = sanitizedChildren;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst rootKey = key.split('.')[0];\n\n\t\tif (lookupAliases.has(rootKey)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tresult[key] = value;\n\t}\n\n\treturn Object.keys(result).length ? result : null;\n}\n\nfunction isMeaningfulFilterNode(node: any) {\n\tif (!node) {\n\t\treturn false;\n\t}\n\n\tif (Array.isArray(node)) {\n\t\treturn node.length > 0;\n\t}\n\n\tif (typeof node !== 'object') {\n\t\treturn true;\n\t}\n\n\treturn Object.keys(node).length > 0;\n}\n\nfunction extractAggregateMeta(pipeline: any[]): QueryMeta {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn null;\n\t}\n\n\tlet limit = undefined;\n\tlet skip = undefined;\n\tlet sort = null;\n\n\tfor (const stage of pipeline) {\n\t\tif (stage?.$limit !== undefined && typeof stage.$limit === 'number') {\n\t\t\tlimit = stage.$limit;\n\t\t}\n\t\telse if (stage?.$skip !== undefined && typeof stage.$skip === 'number') {\n\t\t\tskip = stage.$skip;\n\t\t}\n\t\telse if (stage?.$sort && typeof stage.$sort === 'object') {\n\t\t\tsort = deepCopy(stage.$sort);\n\t\t}\n\t}\n\n\tconst meta: QueryMeta = {};\n\n\tif (limit !== undefined) {\n\t\tmeta.limit = limit;\n\t}\n\n\tif (skip !== undefined) {\n\t\tmeta.skip = skip;\n\t}\n\n\tif (sort) {\n\t\tmeta.sort = sort;\n\t}\n\n\treturn Object.keys(meta).length ? meta : null;\n}\n\nfunction extractAggregationMetaFromPipeline(pipeline: any[]): QueryMeta {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn null;\n\t}\n\n\tlet limit = undefined;\n\tlet skip = undefined;\n\tlet sort = null;\n\n\tfor (const stage of pipeline) {\n\t\tif (stage?.$limit !== undefined && typeof stage.$limit === 'number') {\n\t\t\tlimit = stage.$limit;\n\t\t}\n\t\telse if (stage?.$skip !== undefined && typeof stage.$skip === 'number') {\n\t\t\tskip = stage.$skip;\n\t\t}\n\t\telse if (stage?.$sort && typeof stage.$sort === 'object') {\n\t\t\tsort = deepCopy(stage.$sort);\n\t\t}\n\t}\n\n\tconst meta: QueryMeta = {};\n\n\tif (limit !== undefined) {\n\t\tmeta.limit = limit;\n\t}\n\n\tif (skip !== undefined) {\n\t\tmeta.skip = skip;\n\t}\n\n\tif (sort) {\n\t\tmeta.sort = sort;\n\t}\n\n\treturn Object.keys(meta).length ? meta : null;\n}\n\nfunction collectLookupValues(source: unknown, path: string, output: unknown[]) {\n\tif (!source) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(source)) {\n\t\tfor (const item of source) {\n\t\t\tcollectLookupValues(item, path, output);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof source !== 'object') {\n\t\treturn;\n\t}\n\n\tconst pathSegments = path.split('.');\n\tcollectLookupPathValues(source as Record<string, unknown>, pathSegments, 0, output);\n}\n\nfunction collectLookupPathValues(value: Record<string, unknown>, path: string[], index: number, output: unknown[]) {\n\tif (!value) {\n\t\treturn;\n\t}\n\n\tconst current = value[path[index]];\n\n\tif (current === undefined) {\n\t\treturn;\n\t}\n\n\tif (index === path.length - 1) {\n\t\toutput.push(current);\n\t\treturn;\n\t}\n\n\tif (Array.isArray(current)) {\n\t\tfor (const item of current) {\n\t\t\tif (item && typeof item === 'object') {\n\t\t\t\tcollectLookupPathValues(item as Record<string, unknown>, path, index + 1, output);\n\t\t\t}\n\t\t}\n\t}\n\telse if (current && typeof current === 'object') {\n\t\tcollectLookupPathValues(current as Record<string, unknown>, path, index + 1, output);\n\t}\n}\n\nfunction buildLookupFilter(result: unknown, localField?: string, foreignField?: string) {\n\tif (!localField || !foreignField) {\n\t\treturn null;\n\t}\n\n\tconst values: any[] = [];\n\tconst segments = localField.split('.');\n\tcollectFieldValues(result, segments, 0, values);\n\n\tconst uniqueValues = dedupeFilterValues(values);\n\n\tif (!uniqueValues.length) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\t[foreignField]: {\n\t\t\t$in: uniqueValues\n\t\t}\n\t};\n}\n\nfunction collectFieldValues(source: unknown, path: string[], index: number, output: any[]) {\n\tif (!source) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(source)) {\n\t\tfor (const item of source) {\n\t\t\tcollectFieldValues(item, path, index, output);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof source !== 'object') {\n\t\treturn;\n\t}\n\n\tconst obj = source as Record<string, unknown>;\n\tconst key = path[index];\n\tconst current = obj[key];\n\n\tif (current === undefined) {\n\t\treturn;\n\t}\n\n\tif (index === path.length - 1) {\n\t\tappendFilterValue(output, current);\n\t\treturn;\n\t}\n\n\tif (Array.isArray(current)) {\n\t\tfor (const item of current) {\n\t\t\tcollectFieldValues(item, path, index + 1, output);\n\t\t}\n\t}\n\telse {\n\t\tcollectFieldValues(current, path, index + 1, output);\n\t}\n}\n\nfunction appendFilterValue(output: any[], value: any) {\n\tif (value === undefined || value === null) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tfor (const item of value) {\n\t\t\tappendFilterValue(output, item);\n\t\t}\n\t\treturn;\n\t}\n\n\toutput.push(value);\n}\n\nfunction dedupeFilterValues(values: any[]): any[] {\n\tconst unique = new Map<string, any>();\n\n\tfor (const value of values) {\n\t\tconst key = serializeFilterValue(value);\n\t\tif (!unique.has(key)) {\n\t\t\tunique.set(key, value);\n\t\t}\n\t}\n\n\treturn Array.from(unique.values());\n}\n\nfunction serializeFilterValue(value: any): string {\n\tif (value === null || value === undefined) {\n\t\treturn 'null';\n\t}\n\n\tif (typeof value === 'object') {\n\t\tif (typeof value.toHexString === 'function') {\n\t\t\treturn value.toHexString();\n\t\t}\n\n\t\tif (value instanceof Date) {\n\t\t\treturn value.toISOString();\n\t\t}\n\n\t\tif (typeof value.toString === 'function' && value.toString !== Object.prototype.toString) {\n\t\t\treturn value.toString();\n\t\t}\n\n\t\ttry {\n\t\t\treturn JSON.stringify(value);\n\t\t}\n\t\tcatch {\n\t\t\treturn '[object]';\n\t\t}\n\t}\n\n\treturn String(value);\n}\n\nfunction collectIdsFromResult(source: unknown, ids: Set<string>, visited = new WeakSet<object>()) {\n\tif (!source) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(source)) {\n\t\tfor (const item of source) {\n\t\t\tcollectIdsFromResult(item, ids, visited);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof source !== 'object') {\n\t\treturn;\n\t}\n\n\tconst objectSource = source as Record<string, unknown>;\n\n\tif (visited.has(objectSource)) {\n\t\treturn;\n\t}\n\n\tvisited.add(objectSource);\n\n\tconst normalizedId = normalizeId(objectSource._id);\n\n\tif (normalizedId) {\n\t\tids.add(normalizedId);\n\t}\n\n\tfor (const value of Object.values(objectSource)) {\n\t\tif (value && (typeof value === 'object' || Array.isArray(value))) {\n\t\t\tcollectIdsFromResult(value, ids, visited);\n\t\t}\n\t}\n}\n\nfunction collectIdsFromFilter(filter: unknown, ids: Set<string>) {\n\tif (!filter) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(filter)) {\n\t\tfor (const item of filter) {\n\t\t\tcollectIdsFromFilter(item, ids);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof filter !== 'object') {\n\t\treturn;\n\t}\n\n\tconst filterObject = filter as Record<string, unknown>;\n\n\tif (filterObject._id !== undefined) {\n\t\tcollectIdsFromFilterValue(filterObject._id, ids);\n\t}\n\n\tfor (const [key, value] of Object.entries(filterObject)) {\n\t\tif (key === '$or' || key === '$and' || key === '$nor') {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tfor (const item of value) {\n\t\t\t\t\tcollectIdsFromFilter(item, ids);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (key !== '_id' && value && typeof value === 'object') {\n\t\t\tcollectIdsFromFilter(value, ids);\n\t\t}\n\t}\n}\n\nfunction collectIdsFromFilterValue(value: unknown, ids: Set<string>) {\n\tif (value === null || value === undefined) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tfor (const item of value) {\n\t\t\tcollectIdsFromFilterValue(item, ids);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof value === 'object') {\n\t\tfor (const [key, inner] of Object.entries(value as Record<string, unknown>)) {\n\t\t\tif (key === '$in' || key === '$nin' || key === '$all') {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t\telse if (key === '$eq' || key === '$ne') {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t\telse if (key === '$or' || key === '$and' || key === '$nor') {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t}\n\t\treturn;\n\t}\n\n\tconst normalized = normalizeId(value);\n\n\tif (normalized) {\n\t\tids.add(normalized);\n\t}\n}\n\nfunction normalizeId(value: unknown): string {\n\tif (value === null || value === undefined) {\n\t\treturn null;\n\t}\n\n\tif (typeof value === 'string') {\n\t\tconst trimmed = value.trim();\n\t\treturn trimmed.length ? trimmed : null;\n\t}\n\n\tif (typeof value === 'number' || typeof value === 'bigint') {\n\t\treturn value.toString();\n\t}\n\n\tif (typeof value === 'object') {\n\t\tconst objValue = value as { toHexString?: () => string, toString?: () => string };\n\n\t\tif (typeof objValue.toHexString === 'function') {\n\t\t\treturn objValue.toHexString();\n\t\t}\n\n\t\tif (value instanceof Date) {\n\t\t\treturn value.toISOString();\n\t\t}\n\n\t\tif (typeof objValue.toString === 'function') {\n\t\t\tconst str = objValue.toString();\n\t\t\tif (str && str !== '[object Object]') {\n\t\t\t\treturn str;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction cloneDependencyMap(original: Map<string, Set<string>>): Map<string, Set<string>> {\n\tconst cloned = new Map<string, Set<string>>();\n\n\tfor (const [collection, ids] of original.entries()) {\n\t\tcloned.set(collection, new Set(ids));\n\t}\n\n\treturn cloned;\n}\n\nfunction cloneFilterMap(original: Map<string, any[]>): Map<string, any[]> {\n\tconst cloned = new Map<string, any[]>();\n\n\tfor (const [collection, filters] of original.entries()) {\n\t\tcloned.set(collection, filters.map(filter => deepCopy(filter)));\n\t}\n\n\treturn cloned;\n}\n\nfunction cloneQueryMetaMap(original: Map<string, QueryMeta[]>): Map<string, QueryMeta[]> {\n\tconst cloned = new Map<string, QueryMeta[]>();\n\n\tfor (const [collection, metaList] of original.entries()) {\n\t\tcloned.set(collection, metaList.map(meta => deepCopy(meta)));\n\t}\n\n\treturn cloned;\n}\n\n\nfunction buildLookupPipelineFilters(rootDoc: any, target: LookupTarget): { filters: any[], unresolved: boolean } {\n\tif (!target.pipeline || !target.pipeline.length) {\n\t\treturn { filters: [], unresolved: false };\n\t}\n\nconst matchStages = target.pipeline.map(stage => ({ stage, base: stage.$match })).filter(entry => entry.base);\n\n\tif (!matchStages.length) {\n\t\treturn buildLookupPipelineFromStack(target.pipeline, [], rootDoc, target.let);\n\t}\n\n\tconst letValuesResult = resolveLetVariables(rootDoc, target.let);\n\n\tif (!letValuesResult.resolved) {\n\t\treturn { filters: [], unresolved: true };\n\t}\n\n\tconst combinedMatches = [];\n\n\tfor (const { base } of matchStages) {\n\t\tconst substitutionState = { unresolved: false };\n\t\tconst substituted = substituteLetVariables(base, letValuesResult.values, rootDoc, substitutionState);\n\n\t\tif (substitutionState.unresolved || containsUnresolvedLetReference(substituted)) {\n\t\t\treturn { filters: [], unresolved: true };\n\t\t}\n\n\t\tcombinedMatches.push(substituted);\n\t}\n\n\tif (!combinedMatches.length) {\n\t\treturn buildLookupPipelineFromStack(target.pipeline, [], rootDoc, target.let);\n\t}\n\n\tif (combinedMatches.length === 1) {\n\t\treturn { filters: [combinedMatches[0]], unresolved: false };\n\t}\n\n\treturn { filters: [{ $and: combinedMatches }], unresolved: false };\n}\n\nfunction buildLookupPipelineFromStack(pipeline: any[], initialFilters: any[], rootDoc: any, letMap: Record<string, any>) {\n\tlet currentFilters = initialFilters.slice();\n\tlet unresolved = false;\n\n\tconst entries = pipeline.map(stage => stage ? Object.keys(stage)[0] : null);\n\n\tfor (let i = 0; i < pipeline.length; i++) {\n\t\tconst stage = pipeline[i];\n\t\tconst stageType = entries[i];\n\n\t\tif (stageType === '$match' && stage.$match) {\n\t\t\tconst letValuesResult = resolveLetVariables(rootDoc, letMap);\n\t\t\tif (!letValuesResult.resolved) {\n\t\t\t\tunresolved = true;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst substitutionState = { unresolved: false };\n\t\t\tconst substituted = substituteLetVariables(stage.$match, letValuesResult.values, rootDoc, substitutionState);\n\n\t\t\tif (substitutionState.unresolved || containsUnresolvedLetReference(substituted)) {\n\t\t\t\tunresolved = true;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcurrentFilters.push(substituted);\n\t\t}\n\t\telse if (stageType === '$match') {\n\t\t\tunresolved = true;\n\t\t\tbreak;\n\t\t}\n\t\telse if (stageType === '$facet') {\n\t\t\tunresolved = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!currentFilters.length) {\n\t\treturn { filters: [], unresolved };\n\t}\n\n\tif (currentFilters.length === 1) {\n\t\treturn { filters: currentFilters, unresolved };\n\t}\n\n\treturn { filters: [{ $and: currentFilters }], unresolved };\n}\n\nfunction resolveLetVariables(rootDoc: any, letMap: Record<string, any>) {\n\tif (!letMap || typeof letMap !== 'object') {\n\t\treturn { resolved: true, values: {} };\n\t}\n\n\tconst values = {};\n\n\tfor (const [key, expression] of Object.entries(letMap)) {\n\t\tconst evaluation = evaluateLetExpression(rootDoc, expression);\n\n\t\tif (!evaluation.resolved) {\n\t\t\treturn { resolved: false, values: null };\n\t\t}\n\n\t\tvalues[key] = evaluation.value;\n\t}\n\n\treturn { resolved: true, values };\n}\n\nfunction evaluateLetExpression(rootDoc: any, expression: any): { resolved: boolean, value: any } {\n\tif (typeof expression === 'string') {\n\t\tif (expression.startsWith('$$ROOT.')) {\n\t\t\tconst path = expression.slice('$$ROOT.'.length);\n\t\t\treturn { resolved: true, value: getValueByPath(rootDoc, path) };\n\t\t}\n\t\telse if (expression === '$$ROOT') {\n\t\t\treturn { resolved: true, value: rootDoc };\n\t\t}\n\t\telse if (expression.startsWith('$$')) {\n\t\t\treturn { resolved: false, value: null };\n\t\t}\n\t\telse if (expression.startsWith('$')) {\n\t\t\tconst path = expression.slice(1);\n\t\t\treturn { resolved: true, value: getValueByPath(rootDoc, path) };\n\t\t}\n\t\telse {\n\t\t\treturn { resolved: true, value: expression };\n\t\t}\n\t}\n\telse if (Array.isArray(expression)) {\n\t\treturn { resolved: false, value: null };\n\t}\n\telse if (expression && typeof expression === 'object') {\n\t\treturn { resolved: false, value: null };\n\t}\n\n\treturn { resolved: true, value: expression };\n}\n\nfunction substituteLetVariables(node: any, letValues: Record<string, any>, rootDoc: any, state: { unresolved: boolean }) {\n\tif (Array.isArray(node)) {\n\t\treturn node.map(item => substituteLetVariables(item, letValues, rootDoc, state));\n\t}\n\n\tif (node && typeof node === 'object') {\n\t\tconst output = {};\n\n\t\tfor (const [key, value] of Object.entries(node)) {\n\t\t\toutput[key] = substituteLetVariables(value, letValues, rootDoc, state);\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tif (typeof node === 'string') {\n\t\tif (node.startsWith('$$ROOT.')) {\n\t\t\tconst path = node.slice('$$ROOT.'.length);\n\t\t\treturn getValueByPath(rootDoc, path);\n\t\t}\n\n\t\tif (node === '$$ROOT') {\n\t\t\treturn rootDoc;\n\t\t}\n\n\t\tif (node.startsWith('$$')) {\n\t\t\tconst varName = node.slice(2);\n\n\t\t\tif (Object.prototype.hasOwnProperty.call(letValues, varName)) {\n\t\t\t\treturn letValues[varName];\n\t\t\t}\n\n\t\t\tstate.unresolved = true;\n\t\t\treturn node;\n\t\t}\n\t}\n\n\treturn node;\n}\n\nfunction containsUnresolvedLetReference(node: any): boolean {\n\tif (typeof node === 'string') {\n\t\treturn node.includes('$$');\n\t}\n\n\tif (Array.isArray(node)) {\n\t\treturn node.some(item => containsUnresolvedLetReference(item));\n\t}\n\n\tif (node && typeof node === 'object') {\n\t\treturn Object.values(node).some(value => containsUnresolvedLetReference(value));\n\t}\n\n\treturn false;\n}\n\nfunction getValueByPath(source: any, path: string) {\n\tif (!source || !path) {\n\t\treturn undefined;\n\t}\n\n\tconst segments = path.split('.');\n\tlet current = source;\n\n\tfor (const segment of segments) {\n\t\tif (current === null || current === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (Array.isArray(current)) {\n\t\t\tconst index = parseInt(segment, 10);\n\n\t\t\tif (isNaN(index) || index < 0 || index >= current.length) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tcurrent = current[index];\n\t\t}\n\t\telse {\n\t\t\tcurrent = current[segment];\n\t\t}\n\t}\n\n\treturn current;\n}\n\nfunction canonicalizeFilter(filter: any): string {\n\treturn JSON.stringify(sortKeys(filter));\n}\n\nfunction sortKeys(value: any): any {\n\tif (Array.isArray(value)) {\n\t\treturn value.map(item => sortKeys(item));\n\t}\n\n\tif (value && typeof value === 'object') {\n\t\tconst sorted = {};\n\t\tconst keys = Object.keys(value).sort();\n\n\t\tfor (const key of keys) {\n\t\t\tsorted[key] = sortKeys(value[key]);\n\t\t}\n\n\t\treturn sorted;\n\t}\n\n\treturn value;\n}\n\nfunction dedupeFilters(filters: any[]): any[] {\n\tconst map = new Map<string, any>();\n\n\tfor (const filter of filters) {\n\t\tconst key = canonicalizeFilter(filter);\n\n\t\tif (!map.has(key)) {\n\t\t\tmap.set(key, filter);\n\t\t}\n\t}\n\n\treturn Array.from(map.values());\n}\n"]}
1
+ {"version":3,"sources":["../../src/util/subscription-dependency-context.ts"],"names":[],"mappings":"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","file":"subscription-dependency-context.js","sourcesContent":["import { AsyncLocalStorage } from 'async_hooks';\nimport { deepCopy } from './common';\n\nexport interface QueryMeta {\n\tlimit?: number;\n\tskip?: number;\n\tsort?: any;\n}\n\nexport interface DependencyContextSnapshot {\n\tdependencies: Map<string, Set<string>>;\n\tfilters: Map<string, any[]>;\n\twatchAllCollections: Set<string>;\n\tqueryMetadata: Map<string, QueryMeta[]>;\n}\n\ninterface LookupTarget {\n\tfrom: string;\n\tas: string;\n\tlocalField?: string;\n\tforeignField?: string;\n\tlet?: Record<string, any>;\n\tpipeline?: any[];\n}\n\ninterface DependencyContext extends DependencyContextSnapshot {}\n\nconst dependencyStorage = new AsyncLocalStorage<DependencyContext>();\n\nexport async function withDependencyTracking<T>(fn: () => Promise<T>): Promise<{ result: T; snapshot: DependencyContextSnapshot }> {\n\tconst context: DependencyContext = {\n\t\tdependencies: new Map(),\n\t\tfilters: new Map(),\n\t\twatchAllCollections: new Set(),\n\t\tqueryMetadata: new Map()\n\t};\n\n\tlet result: T;\n\n\tawait dependencyStorage.run(context, async () => {\n\t\tresult = await fn();\n\t});\n\n\treturn {\n\t\tresult,\n\t\tsnapshot: {\n\t\t\tdependencies: cloneDependencyMap(context.dependencies),\n\t\t\tfilters: cloneFilterMap(context.filters),\n\t\t\twatchAllCollections: new Set(context.watchAllCollections),\n\t\t\tqueryMetadata: cloneQueryMetaMap(context.queryMetadata)\n\t\t}\n\t};\n}\n\nexport function recordDependencyResult(collection: string, result: unknown, options?: { filter?: any, meta?: QueryMeta }) {\n\tconst context = dependencyStorage.getStore();\n\n\tif (!context) {\n\t\treturn;\n\t}\n\n\tif (options?.filter) {\n\t\tlet filterList = context.filters.get(collection);\n\n\t\tif (!filterList) {\n\t\t\tfilterList = [];\n\t\t\tcontext.filters.set(collection, filterList);\n\t\t}\n\n\t\tfilterList.push(deepCopy(options.filter));\n\t\tcontext.watchAllCollections.delete(collection);\n\t}\n\n\tif (options?.meta) {\n\t\tlet metaList = context.queryMetadata.get(collection);\n\n\t\tif (!metaList) {\n\t\t\tmetaList = [];\n\t\t\tcontext.queryMetadata.set(collection, metaList);\n\t\t}\n\n\t\tmetaList.push(deepCopy(options.meta));\n\t}\n\n\tconst ids = new Set<string>();\n\tcollectIdsFromResult(result, ids);\n\n\tif (!ids.size && options?.filter) {\n\t\tcollectIdsFromFilter(options.filter, ids);\n\t}\n\n\tif (ids.size) {\n\t\tcontext.watchAllCollections.delete(collection);\n\t\tlet existing = context.dependencies.get(collection);\n\n\t\tif (!existing) {\n\t\t\texisting = new Set();\n\t\t\tcontext.dependencies.set(collection, existing);\n\t\t}\n\n\t\tfor (const id of ids) {\n\t\t\texisting.add(id);\n\t\t}\n\t}\n\telse if (!options?.filter) {\n\t\tcontext.watchAllCollections.add(collection);\n\t}\n}\n\nexport function recordAggregateDependencies(collection: string, pipeline: any[], result: unknown) {\n\tconst context = dependencyStorage.getStore();\n\n\tif (!context) {\n\t\treturn;\n\t}\n\n\tconst lookupTargets = extractLookupTargets(pipeline);\n\tconst lookupAliases = new Set<string>(lookupTargets.map(target => target.as).filter(Boolean));\n\tconst matchFilter = sanitizeMatchFilter(extractMatchFilter(pipeline), lookupAliases);\n\tconst meta = extractAggregateMeta(pipeline);\n\trecordDependencyResult(collection, result, {\n\t\tfilter: matchFilter || undefined,\n\t\tmeta\n\t});\n\n\tif (shouldWatchAllForAggregatePipeline(pipeline)) {\n\t\tcontext.watchAllCollections.add(collection);\n\t}\n\n\tif (!lookupTargets.length) {\n\t\treturn;\n\t}\n\n\tfor (const target of lookupTargets) {\n\t\tconst nestedValues: unknown[] = [];\n\t\tcollectLookupValues(result, target.as, nestedValues);\n\t\tconst rootDocs = Array.isArray(result) ? result : [result];\n\t\tconst pipelineFilters: any[] = [];\n\t\tlet pipelineUnresolved = false;\n\n\t\tfor (const rootDoc of rootDocs) {\n\t\t\tconst { filters: filtersFromPipeline, unresolved } = buildLookupPipelineFilters(rootDoc, target);\n\t\t\tif (unresolved) {\n\t\t\t\tpipelineUnresolved = true;\n\t\t\t}\n\t\t\tif (filtersFromPipeline?.length) {\n\t\t\t\tpipelineFilters.push(...filtersFromPipeline);\n\t\t\t}\n\t\t}\n\n\t\tconst filter = buildLookupFilter(result, target.localField, target.foreignField);\n\n\t\tconst uniquePipelineFilters = dedupeFilters(pipelineFilters);\n\n\t\tif (nestedValues.length) {\n\t\t\trecordDependencyResult(target.from, nestedValues, filter ? { filter } : undefined);\n\t\t}\n\n\t\tif (uniquePipelineFilters.length) {\n\t\t\tconst pipelineMeta = extractAggregationMetaFromPipeline(target.pipeline);\n\t\t\tfor (const pipelineFilter of uniquePipelineFilters) {\n\t\t\t\trecordDependencyResult(target.from, [], { filter: pipelineFilter, meta: pipelineMeta });\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!nestedValues.length && filter) {\n\t\t\trecordDependencyResult(target.from, [], { filter });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!nestedValues.length) {\n\t\t\tif (pipelineUnresolved) {\n\t\t\t\tcontext.watchAllCollections.add(target.from);\n\t\t\t}\n\t\t\telse if (!target.pipeline || !target.pipeline.length) {\n\t\t\t\tcontext.watchAllCollections.add(target.from);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction shouldWatchAllForAggregatePipeline(pipeline: any[]): boolean {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn false;\n\t}\n\n\treturn pipeline.some(stage => isGroupStageWithPush(stage));\n}\n\nfunction isGroupStageWithPush(stage: any): boolean {\n\tif (!stage || typeof stage !== 'object') {\n\t\treturn false;\n\t}\n\n\tconst groupStage = stage.$group;\n\tif (!groupStage || typeof groupStage !== 'object') {\n\t\treturn false;\n\t}\n\n\treturn Object.values(groupStage).some(accumulator => isPushAccumulator(accumulator));\n}\n\nfunction isPushAccumulator(accumulator: unknown): boolean {\n\treturn !!(accumulator && typeof accumulator === 'object' && Object.prototype.hasOwnProperty.call(accumulator, '$push'));\n}\n\nfunction extractLookupTargets(pipeline: any[]): LookupTarget[] {\n\tconst lookups: LookupTarget[] = [];\n\n\tif (!Array.isArray(pipeline)) {\n\t\treturn lookups;\n\t}\n\n\tfor (const stage of pipeline) {\n\t\tif (stage && stage.$lookup && typeof stage.$lookup === 'object') {\n\t\t\tconst lookup = stage.$lookup;\n\t\t\tif (typeof lookup.from === 'string' && typeof lookup.as === 'string') {\n\t\t\t\tlookups.push({\n\t\t\t\t\tfrom: lookup.from,\n\t\t\t\t\tas: lookup.as,\n\t\t\t\t\tlocalField: typeof lookup.localField === 'string' ? lookup.localField : undefined,\n\t\t\t\t\tforeignField: typeof lookup.foreignField === 'string' ? lookup.foreignField : undefined,\n\t\t\t\t\tlet: lookup.let && typeof lookup.let === 'object' ? lookup.let : undefined,\n\t\t\t\t\tpipeline: Array.isArray(lookup.pipeline) ? lookup.pipeline : undefined\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\treturn lookups;\n}\n\nfunction extractMatchFilter(pipeline: any[]): any {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn null;\n\t}\n\n\tconst filters: any[] = [];\n\n\tfor (const stage of pipeline) {\n\t\tif (stage && stage.$match && typeof stage.$match === 'object') {\n\t\t\tfilters.push(deepCopy(stage.$match));\n\t\t}\n\t}\n\n\tif (!filters.length) {\n\t\treturn null;\n\t}\n\n\tif (filters.length === 1) {\n\t\treturn filters[0];\n\t}\n\n\treturn { $and: filters };\n}\n\nfunction sanitizeMatchFilter(filter: any, lookupAliases: Set<string>) {\n\tif (!filter || !lookupAliases?.size) {\n\t\treturn filter;\n\t}\n\n\treturn sanitizeFilterNode(filter, lookupAliases);\n}\n\nfunction sanitizeFilterNode(node: any, lookupAliases: Set<string>): any {\n\tif (!node) {\n\t\treturn null;\n\t}\n\n\tif (Array.isArray(node)) {\n\t\tconst sanitizedArray = node\n\t\t\t.map(entry => sanitizeFilterNode(entry, lookupAliases))\n\t\t\t.filter(isMeaningfulFilterNode);\n\n\t\treturn sanitizedArray.length ? sanitizedArray : null;\n\t}\n\n\tif (typeof node !== 'object') {\n\t\treturn node;\n\t}\n\n\tconst result = {};\n\n\tfor (const [key, value] of Object.entries(node)) {\n\t\tif (key === '$and' || key === '$or' || key === '$nor') {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tconst sanitizedChildren = value\n\t\t\t\t\t.map(entry => sanitizeFilterNode(entry, lookupAliases))\n\t\t\t\t\t.filter(isMeaningfulFilterNode);\n\n\t\t\t\tif (sanitizedChildren.length) {\n\t\t\t\t\tresult[key] = sanitizedChildren;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst rootKey = key.split('.')[0];\n\n\t\tif (lookupAliases.has(rootKey)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tresult[key] = value;\n\t}\n\n\treturn Object.keys(result).length ? result : null;\n}\n\nfunction isMeaningfulFilterNode(node: any) {\n\tif (!node) {\n\t\treturn false;\n\t}\n\n\tif (Array.isArray(node)) {\n\t\treturn node.length > 0;\n\t}\n\n\tif (typeof node !== 'object') {\n\t\treturn true;\n\t}\n\n\treturn Object.keys(node).length > 0;\n}\n\nfunction extractAggregateMeta(pipeline: any[]): QueryMeta {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn null;\n\t}\n\n\tlet limit = undefined;\n\tlet skip = undefined;\n\tlet sort = null;\n\n\tfor (const stage of pipeline) {\n\t\tif (stage?.$limit !== undefined && typeof stage.$limit === 'number') {\n\t\t\tlimit = stage.$limit;\n\t\t}\n\t\telse if (stage?.$skip !== undefined && typeof stage.$skip === 'number') {\n\t\t\tskip = stage.$skip;\n\t\t}\n\t\telse if (stage?.$sort && typeof stage.$sort === 'object') {\n\t\t\tsort = deepCopy(stage.$sort);\n\t\t}\n\t}\n\n\tconst meta: QueryMeta = {};\n\n\tif (limit !== undefined) {\n\t\tmeta.limit = limit;\n\t}\n\n\tif (skip !== undefined) {\n\t\tmeta.skip = skip;\n\t}\n\n\tif (sort) {\n\t\tmeta.sort = sort;\n\t}\n\n\treturn Object.keys(meta).length ? meta : null;\n}\n\nfunction extractAggregationMetaFromPipeline(pipeline: any[]): QueryMeta {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn null;\n\t}\n\n\tlet limit = undefined;\n\tlet skip = undefined;\n\tlet sort = null;\n\n\tfor (const stage of pipeline) {\n\t\tif (stage?.$limit !== undefined && typeof stage.$limit === 'number') {\n\t\t\tlimit = stage.$limit;\n\t\t}\n\t\telse if (stage?.$skip !== undefined && typeof stage.$skip === 'number') {\n\t\t\tskip = stage.$skip;\n\t\t}\n\t\telse if (stage?.$sort && typeof stage.$sort === 'object') {\n\t\t\tsort = deepCopy(stage.$sort);\n\t\t}\n\t}\n\n\tconst meta: QueryMeta = {};\n\n\tif (limit !== undefined) {\n\t\tmeta.limit = limit;\n\t}\n\n\tif (skip !== undefined) {\n\t\tmeta.skip = skip;\n\t}\n\n\tif (sort) {\n\t\tmeta.sort = sort;\n\t}\n\n\treturn Object.keys(meta).length ? meta : null;\n}\n\nfunction collectLookupValues(source: unknown, path: string, output: unknown[]) {\n\tif (!source) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(source)) {\n\t\tfor (const item of source) {\n\t\t\tcollectLookupValues(item, path, output);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof source !== 'object') {\n\t\treturn;\n\t}\n\n\tconst pathSegments = path.split('.');\n\tcollectLookupPathValues(source as Record<string, unknown>, pathSegments, 0, output);\n}\n\nfunction collectLookupPathValues(value: Record<string, unknown>, path: string[], index: number, output: unknown[]) {\n\tif (!value) {\n\t\treturn;\n\t}\n\n\tconst current = value[path[index]];\n\n\tif (current === undefined) {\n\t\treturn;\n\t}\n\n\tif (index === path.length - 1) {\n\t\toutput.push(current);\n\t\treturn;\n\t}\n\n\tif (Array.isArray(current)) {\n\t\tfor (const item of current) {\n\t\t\tif (item && typeof item === 'object') {\n\t\t\t\tcollectLookupPathValues(item as Record<string, unknown>, path, index + 1, output);\n\t\t\t}\n\t\t}\n\t}\n\telse if (current && typeof current === 'object') {\n\t\tcollectLookupPathValues(current as Record<string, unknown>, path, index + 1, output);\n\t}\n}\n\nfunction buildLookupFilter(result: unknown, localField?: string, foreignField?: string) {\n\tif (!localField || !foreignField) {\n\t\treturn null;\n\t}\n\n\tconst values: any[] = [];\n\tconst segments = localField.split('.');\n\tcollectFieldValues(result, segments, 0, values);\n\n\tconst uniqueValues = dedupeFilterValues(values);\n\n\tif (!uniqueValues.length) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\t[foreignField]: {\n\t\t\t$in: uniqueValues\n\t\t}\n\t};\n}\n\nfunction collectFieldValues(source: unknown, path: string[], index: number, output: any[]) {\n\tif (!source) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(source)) {\n\t\tfor (const item of source) {\n\t\t\tcollectFieldValues(item, path, index, output);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof source !== 'object') {\n\t\treturn;\n\t}\n\n\tconst obj = source as Record<string, unknown>;\n\tconst key = path[index];\n\tconst current = obj[key];\n\n\tif (current === undefined) {\n\t\treturn;\n\t}\n\n\tif (index === path.length - 1) {\n\t\tappendFilterValue(output, current);\n\t\treturn;\n\t}\n\n\tif (Array.isArray(current)) {\n\t\tfor (const item of current) {\n\t\t\tcollectFieldValues(item, path, index + 1, output);\n\t\t}\n\t}\n\telse {\n\t\tcollectFieldValues(current, path, index + 1, output);\n\t}\n}\n\nfunction appendFilterValue(output: any[], value: any) {\n\tif (value === undefined || value === null) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tfor (const item of value) {\n\t\t\tappendFilterValue(output, item);\n\t\t}\n\t\treturn;\n\t}\n\n\toutput.push(value);\n}\n\nfunction dedupeFilterValues(values: any[]): any[] {\n\tconst unique = new Map<string, any>();\n\n\tfor (const value of values) {\n\t\tconst key = serializeFilterValue(value);\n\t\tif (!unique.has(key)) {\n\t\t\tunique.set(key, value);\n\t\t}\n\t}\n\n\treturn Array.from(unique.values());\n}\n\nfunction serializeFilterValue(value: any): string {\n\tif (value === null || value === undefined) {\n\t\treturn 'null';\n\t}\n\n\tif (typeof value === 'object') {\n\t\tif (typeof value.toHexString === 'function') {\n\t\t\treturn value.toHexString();\n\t\t}\n\n\t\tif (value instanceof Date) {\n\t\t\treturn value.toISOString();\n\t\t}\n\n\t\tif (typeof value.toString === 'function' && value.toString !== Object.prototype.toString) {\n\t\t\treturn value.toString();\n\t\t}\n\n\t\ttry {\n\t\t\treturn JSON.stringify(value);\n\t\t}\n\t\tcatch {\n\t\t\treturn '[object]';\n\t\t}\n\t}\n\n\treturn String(value);\n}\n\nfunction collectIdsFromResult(source: unknown, ids: Set<string>, visited = new WeakSet<object>()) {\n\tif (!source) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(source)) {\n\t\tfor (const item of source) {\n\t\t\tcollectIdsFromResult(item, ids, visited);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof source !== 'object') {\n\t\treturn;\n\t}\n\n\tconst objectSource = source as Record<string, unknown>;\n\n\tif (visited.has(objectSource)) {\n\t\treturn;\n\t}\n\n\tvisited.add(objectSource);\n\n\tconst normalizedId = normalizeId(objectSource._id);\n\n\tif (normalizedId) {\n\t\tids.add(normalizedId);\n\t}\n\n\tfor (const value of Object.values(objectSource)) {\n\t\tif (value && (typeof value === 'object' || Array.isArray(value))) {\n\t\t\tcollectIdsFromResult(value, ids, visited);\n\t\t}\n\t}\n}\n\nfunction collectIdsFromFilter(filter: unknown, ids: Set<string>) {\n\tif (!filter) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(filter)) {\n\t\tfor (const item of filter) {\n\t\t\tcollectIdsFromFilter(item, ids);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof filter !== 'object') {\n\t\treturn;\n\t}\n\n\tconst filterObject = filter as Record<string, unknown>;\n\n\tif (filterObject._id !== undefined) {\n\t\tcollectIdsFromFilterValue(filterObject._id, ids);\n\t}\n\n\tfor (const [key, value] of Object.entries(filterObject)) {\n\t\tif (key === '$or' || key === '$and' || key === '$nor') {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tfor (const item of value) {\n\t\t\t\t\tcollectIdsFromFilter(item, ids);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (key !== '_id' && value && typeof value === 'object') {\n\t\t\tcollectIdsFromFilter(value, ids);\n\t\t}\n\t}\n}\n\nfunction collectIdsFromFilterValue(value: unknown, ids: Set<string>) {\n\tif (value === null || value === undefined) {\n\t\treturn;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\tfor (const item of value) {\n\t\t\tcollectIdsFromFilterValue(item, ids);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (typeof value === 'object') {\n\t\tfor (const [key, inner] of Object.entries(value as Record<string, unknown>)) {\n\t\t\tif (key === '$in' || key === '$nin' || key === '$all') {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t\telse if (key === '$eq' || key === '$ne') {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t\telse if (key === '$or' || key === '$and' || key === '$nor') {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcollectIdsFromFilterValue(inner, ids);\n\t\t\t}\n\t\t}\n\t\treturn;\n\t}\n\n\tconst normalized = normalizeId(value);\n\n\tif (normalized) {\n\t\tids.add(normalized);\n\t}\n}\n\nfunction normalizeId(value: unknown): string {\n\tif (value === null || value === undefined) {\n\t\treturn null;\n\t}\n\n\tif (typeof value === 'string') {\n\t\tconst trimmed = value.trim();\n\t\treturn trimmed.length ? trimmed : null;\n\t}\n\n\tif (typeof value === 'number' || typeof value === 'bigint') {\n\t\treturn value.toString();\n\t}\n\n\tif (typeof value === 'object') {\n\t\tconst objValue = value as { toHexString?: () => string, toString?: () => string };\n\n\t\tif (typeof objValue.toHexString === 'function') {\n\t\t\treturn objValue.toHexString();\n\t\t}\n\n\t\tif (value instanceof Date) {\n\t\t\treturn value.toISOString();\n\t\t}\n\n\t\tif (typeof objValue.toString === 'function') {\n\t\t\tconst str = objValue.toString();\n\t\t\tif (str && str !== '[object Object]') {\n\t\t\t\treturn str;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction cloneDependencyMap(original: Map<string, Set<string>>): Map<string, Set<string>> {\n\tconst cloned = new Map<string, Set<string>>();\n\n\tfor (const [collection, ids] of original.entries()) {\n\t\tcloned.set(collection, new Set(ids));\n\t}\n\n\treturn cloned;\n}\n\nfunction cloneFilterMap(original: Map<string, any[]>): Map<string, any[]> {\n\tconst cloned = new Map<string, any[]>();\n\n\tfor (const [collection, filters] of original.entries()) {\n\t\tcloned.set(collection, filters.map(filter => deepCopy(filter)));\n\t}\n\n\treturn cloned;\n}\n\nfunction cloneQueryMetaMap(original: Map<string, QueryMeta[]>): Map<string, QueryMeta[]> {\n\tconst cloned = new Map<string, QueryMeta[]>();\n\n\tfor (const [collection, metaList] of original.entries()) {\n\t\tcloned.set(collection, metaList.map(meta => deepCopy(meta)));\n\t}\n\n\treturn cloned;\n}\n\n\nfunction buildLookupPipelineFilters(rootDoc: any, target: LookupTarget): { filters: any[], unresolved: boolean } {\n\tif (!target.pipeline || !target.pipeline.length) {\n\t\treturn { filters: [], unresolved: false };\n\t}\n\nconst matchStages = target.pipeline.map(stage => ({ stage, base: stage.$match })).filter(entry => entry.base);\n\n\tif (!matchStages.length) {\n\t\treturn buildLookupPipelineFromStack(target.pipeline, [], rootDoc, target.let);\n\t}\n\n\tconst letValuesResult = resolveLetVariables(rootDoc, target.let);\n\n\tif (!letValuesResult.resolved) {\n\t\treturn { filters: [], unresolved: true };\n\t}\n\n\tconst combinedMatches = [];\n\n\tfor (const { base } of matchStages) {\n\t\tconst substitutionState = { unresolved: false };\n\t\tconst substituted = substituteLetVariables(base, letValuesResult.values, rootDoc, substitutionState);\n\n\t\tif (substitutionState.unresolved || containsUnresolvedLetReference(substituted)) {\n\t\t\treturn { filters: [], unresolved: true };\n\t\t}\n\n\t\tcombinedMatches.push(substituted);\n\t}\n\n\tif (!combinedMatches.length) {\n\t\treturn buildLookupPipelineFromStack(target.pipeline, [], rootDoc, target.let);\n\t}\n\n\tif (combinedMatches.length === 1) {\n\t\treturn { filters: [combinedMatches[0]], unresolved: false };\n\t}\n\n\treturn { filters: [{ $and: combinedMatches }], unresolved: false };\n}\n\nfunction buildLookupPipelineFromStack(pipeline: any[], initialFilters: any[], rootDoc: any, letMap: Record<string, any>) {\n\tlet currentFilters = initialFilters.slice();\n\tlet unresolved = false;\n\n\tconst entries = pipeline.map(stage => stage ? Object.keys(stage)[0] : null);\n\n\tfor (let i = 0; i < pipeline.length; i++) {\n\t\tconst stage = pipeline[i];\n\t\tconst stageType = entries[i];\n\n\t\tif (stageType === '$match' && stage.$match) {\n\t\t\tconst letValuesResult = resolveLetVariables(rootDoc, letMap);\n\t\t\tif (!letValuesResult.resolved) {\n\t\t\t\tunresolved = true;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst substitutionState = { unresolved: false };\n\t\t\tconst substituted = substituteLetVariables(stage.$match, letValuesResult.values, rootDoc, substitutionState);\n\n\t\t\tif (substitutionState.unresolved || containsUnresolvedLetReference(substituted)) {\n\t\t\t\tunresolved = true;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcurrentFilters.push(substituted);\n\t\t}\n\t\telse if (stageType === '$match') {\n\t\t\tunresolved = true;\n\t\t\tbreak;\n\t\t}\n\t\telse if (stageType === '$facet') {\n\t\t\tunresolved = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!currentFilters.length) {\n\t\treturn { filters: [], unresolved };\n\t}\n\n\tif (currentFilters.length === 1) {\n\t\treturn { filters: currentFilters, unresolved };\n\t}\n\n\treturn { filters: [{ $and: currentFilters }], unresolved };\n}\n\nfunction resolveLetVariables(rootDoc: any, letMap: Record<string, any>) {\n\tif (!letMap || typeof letMap !== 'object') {\n\t\treturn { resolved: true, values: {} };\n\t}\n\n\tconst values = {};\n\n\tfor (const [key, expression] of Object.entries(letMap)) {\n\t\tconst evaluation = evaluateLetExpression(rootDoc, expression);\n\n\t\tif (!evaluation.resolved) {\n\t\t\treturn { resolved: false, values: null };\n\t\t}\n\n\t\tvalues[key] = evaluation.value;\n\t}\n\n\treturn { resolved: true, values };\n}\n\nfunction evaluateLetExpression(rootDoc: any, expression: any): { resolved: boolean, value: any } {\n\tif (typeof expression === 'string') {\n\t\tif (expression.startsWith('$$ROOT.')) {\n\t\t\tconst path = expression.slice('$$ROOT.'.length);\n\t\t\treturn { resolved: true, value: getValueByPath(rootDoc, path) };\n\t\t}\n\t\telse if (expression === '$$ROOT') {\n\t\t\treturn { resolved: true, value: rootDoc };\n\t\t}\n\t\telse if (expression.startsWith('$$')) {\n\t\t\treturn { resolved: false, value: null };\n\t\t}\n\t\telse if (expression.startsWith('$')) {\n\t\t\tconst path = expression.slice(1);\n\t\t\treturn { resolved: true, value: getValueByPath(rootDoc, path) };\n\t\t}\n\t\telse {\n\t\t\treturn { resolved: true, value: expression };\n\t\t}\n\t}\n\telse if (Array.isArray(expression)) {\n\t\treturn { resolved: false, value: null };\n\t}\n\telse if (expression && typeof expression === 'object') {\n\t\treturn { resolved: false, value: null };\n\t}\n\n\treturn { resolved: true, value: expression };\n}\n\nfunction substituteLetVariables(node: any, letValues: Record<string, any>, rootDoc: any, state: { unresolved: boolean }) {\n\tif (Array.isArray(node)) {\n\t\treturn node.map(item => substituteLetVariables(item, letValues, rootDoc, state));\n\t}\n\n\tif (node && typeof node === 'object') {\n\t\tconst output = {};\n\n\t\tfor (const [key, value] of Object.entries(node)) {\n\t\t\toutput[key] = substituteLetVariables(value, letValues, rootDoc, state);\n\t\t}\n\n\t\treturn output;\n\t}\n\n\tif (typeof node === 'string') {\n\t\tif (node.startsWith('$$ROOT.')) {\n\t\t\tconst path = node.slice('$$ROOT.'.length);\n\t\t\treturn getValueByPath(rootDoc, path);\n\t\t}\n\n\t\tif (node === '$$ROOT') {\n\t\t\treturn rootDoc;\n\t\t}\n\n\t\tif (node.startsWith('$$')) {\n\t\t\tconst varName = node.slice(2);\n\n\t\t\tif (Object.prototype.hasOwnProperty.call(letValues, varName)) {\n\t\t\t\treturn letValues[varName];\n\t\t\t}\n\n\t\t\tstate.unresolved = true;\n\t\t\treturn node;\n\t\t}\n\t}\n\n\treturn node;\n}\n\nfunction containsUnresolvedLetReference(node: any): boolean {\n\tif (typeof node === 'string') {\n\t\treturn node.includes('$$');\n\t}\n\n\tif (Array.isArray(node)) {\n\t\treturn node.some(item => containsUnresolvedLetReference(item));\n\t}\n\n\tif (node && typeof node === 'object') {\n\t\treturn Object.values(node).some(value => containsUnresolvedLetReference(value));\n\t}\n\n\treturn false;\n}\n\nfunction getValueByPath(source: any, path: string) {\n\tif (!source || !path) {\n\t\treturn undefined;\n\t}\n\n\tconst segments = path.split('.');\n\tlet current = source;\n\n\tfor (const segment of segments) {\n\t\tif (current === null || current === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (Array.isArray(current)) {\n\t\t\tconst index = parseInt(segment, 10);\n\n\t\t\tif (isNaN(index) || index < 0 || index >= current.length) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tcurrent = current[index];\n\t\t}\n\t\telse {\n\t\t\tcurrent = current[segment];\n\t\t}\n\t}\n\n\treturn current;\n}\n\nfunction canonicalizeFilter(filter: any): string {\n\treturn JSON.stringify(sortKeys(filter));\n}\n\nfunction sortKeys(value: any): any {\n\tif (Array.isArray(value)) {\n\t\treturn value.map(item => sortKeys(item));\n\t}\n\n\tif (value && typeof value === 'object') {\n\t\tconst sorted = {};\n\t\tconst keys = Object.keys(value).sort();\n\n\t\tfor (const key of keys) {\n\t\t\tsorted[key] = sortKeys(value[key]);\n\t\t}\n\n\t\treturn sorted;\n\t}\n\n\treturn value;\n}\n\nfunction dedupeFilters(filters: any[]): any[] {\n\tconst map = new Map<string, any>();\n\n\tfor (const filter of filters) {\n\t\tconst key = canonicalizeFilter(filter);\n\n\t\tif (!map.has(key)) {\n\t\t\tmap.set(key, filter);\n\t\t}\n\t}\n\n\treturn Array.from(map.values());\n}\n"]}