@resolveio/server-lib 20.12.50 → 20.12.51

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.
@@ -92,8 +92,8 @@ var user_groups_1 = require("../publications/user-groups");
92
92
  var user_guides_1 = require("../publications/user-guides");
93
93
  var resolveio_server_app_1 = require("../resolveio-server-app");
94
94
  var common_1 = require("../util/common");
95
- var error_tracking_1 = require("../util/error-tracking");
96
95
  var error_reporter_1 = require("../util/error-reporter");
96
+ var error_tracking_1 = require("../util/error-tracking");
97
97
  var subscription_dependency_context_1 = require("../util/subscription-dependency-context");
98
98
  var numCPUs = (0, os_1.cpus)().length;
99
99
  var v8 = require('v8');
@@ -112,6 +112,7 @@ var SubscriptionManager = /** @class */ (function () {
112
112
  this._publications = {};
113
113
  this._subscriptions = [];
114
114
  this._loggedInUsers = [];
115
+ this._lastRouteBySocket = new Map();
115
116
  this._mongoQueue = [];
116
117
  this._mongoQueueId = 0;
117
118
  this._cacheId = 1;
@@ -129,6 +130,14 @@ var SubscriptionManager = /** @class */ (function () {
129
130
  this._debugSendQueueHits = 0;
130
131
  this._debugRemoveCacheHits = 0;
131
132
  this._oplogRetryCount = 0;
133
+ this._lastResumeToken = null;
134
+ this._lastResumeTokenSaveMs = 0;
135
+ this._resumeTokenSavePromise = null;
136
+ this._resumeTokenSaveForcePending = false;
137
+ this._fullResyncPromise = null;
138
+ this.RESUME_TOKEN_COLLECTION = 'subscription-manager-resume-tokens';
139
+ this.RESUME_TOKEN_DOC_ID = 'oplog';
140
+ this.RESUME_TOKEN_SAVE_INTERVAL_MS = 5000;
132
141
  // Buffer to store throttled latency updates with timestamps
133
142
  this.latencyBuffer = new Map();
134
143
  // Interval to flush latency updates in MongoDB
@@ -161,7 +170,7 @@ var SubscriptionManager = /** @class */ (function () {
161
170
  };
162
171
  SubscriptionManager.prototype.initialize = function (wss, serverConfig, monitorManagerFunction) {
163
172
  return __awaiter(this, void 0, void 0, function () {
164
- var flag, dependencyFlag;
173
+ var resumeToken, flag, dependencyFlag;
165
174
  var _this = this;
166
175
  return __generator(this, function (_a) {
167
176
  switch (_a.label) {
@@ -201,8 +210,11 @@ var SubscriptionManager = /** @class */ (function () {
201
210
  (0, user_groups_1.loadUserGroupPublications)(this);
202
211
  (0, user_guides_1.loadUserGuidePublications)(this);
203
212
  (0, report_builder_dashboard_builders_1.loadReportBuilderDashboardBuilderPublications)(this);
204
- return [4 /*yield*/, this.tailOpLog()];
213
+ return [4 /*yield*/, this.loadResumeToken()];
205
214
  case 1:
215
+ resumeToken = _a.sent();
216
+ return [4 /*yield*/, this.tailOpLog(resumeToken || undefined)];
217
+ case 2:
206
218
  _a.sent();
207
219
  setInterval(function () {
208
220
  _this._oplogRetryCount = 0;
@@ -310,10 +322,10 @@ var SubscriptionManager = /** @class */ (function () {
310
322
  });
311
323
  }); }, 30000);
312
324
  return [4 /*yield*/, flag_collection_1.Flags.findOne({ type: 'Enable Debug' })];
313
- case 2:
325
+ case 3:
314
326
  flag = _a.sent();
315
327
  return [4 /*yield*/, flag_collection_1.Flags.findOne({ type: 'Enable Dependency Debug' })];
316
- case 3:
328
+ case 4:
317
329
  dependencyFlag = _a.sent();
318
330
  if (flag && flag.value) {
319
331
  this._enableDebug = true;
@@ -523,6 +535,41 @@ var SubscriptionManager = /** @class */ (function () {
523
535
  });
524
536
  });
525
537
  };
538
+ SubscriptionManager.prototype.getMessageDateMs = function (messageDate) {
539
+ if (messageDate instanceof Date && !isNaN(messageDate.getTime())) {
540
+ return messageDate.getTime();
541
+ }
542
+ if (typeof messageDate === 'string' || typeof messageDate === 'number') {
543
+ var parsed = new Date(messageDate);
544
+ if (!isNaN(parsed.getTime())) {
545
+ return parsed.getTime();
546
+ }
547
+ }
548
+ return Date.now();
549
+ };
550
+ SubscriptionManager.prototype.isStaleRouteMessage = function (ws, messageRoute, messageDate) {
551
+ var socketId = ws ? ws['id_socket'] : '';
552
+ if (!socketId) {
553
+ return false;
554
+ }
555
+ if (!messageRoute || messageRoute === 'Bypass') {
556
+ return false;
557
+ }
558
+ var messageDateMs = this.getMessageDateMs(messageDate);
559
+ var lastRoute = this._lastRouteBySocket.get(socketId);
560
+ if (lastRoute && messageDateMs < lastRoute.dateMs) {
561
+ this.dependencyDebug('Skip route cleanup due to stale route message', {
562
+ socketId: socketId,
563
+ messageRoute: messageRoute,
564
+ messageDateMs: messageDateMs,
565
+ lastRoute: lastRoute.route,
566
+ lastRouteDateMs: lastRoute.dateMs
567
+ });
568
+ return true;
569
+ }
570
+ this._lastRouteBySocket.set(socketId, { route: messageRoute, dateMs: messageDateMs });
571
+ return false;
572
+ };
526
573
  SubscriptionManager.prototype.sendDataToAllWithRetry = function (sub, collection, type) {
527
574
  return __awaiter(this, void 0, void 0, function () {
528
575
  return __generator(this, function (_a) {
@@ -652,7 +699,7 @@ var SubscriptionManager = /** @class */ (function () {
652
699
  // Subscribe to publication
653
700
  SubscriptionManager.prototype.subscribe = function (messageRoute, messageDate, ws, messageId, publication, subscriptionData) {
654
701
  return __awaiter(this, void 0, void 0, function () {
655
- var pub, valObj, valKeys, rootKeys, i, urlData, urlModule_1, urlNext, otherRouteSubs, normalizedSubscriptionData, subscriptionKey_1, sub;
702
+ var pub, valObj, valKeys, rootKeys, i, staleRouteMessage, urlData, urlModule_1, urlNext, otherRouteSubs, normalizedSubscriptionData, subscriptionKey_1, sub;
656
703
  var _this = this;
657
704
  return __generator(this, function (_a) {
658
705
  switch (_a.label) {
@@ -699,7 +746,8 @@ var SubscriptionManager = /** @class */ (function () {
699
746
  }
700
747
  }
701
748
  }
702
- if (messageRoute !== 'Bypass') {
749
+ staleRouteMessage = this.isStaleRouteMessage(ws, messageRoute, messageDate);
750
+ if (messageRoute !== 'Bypass' && messageRoute !== '/' && !staleRouteMessage) {
703
751
  urlData = messageRoute.split('/');
704
752
  urlModule_1 = '';
705
753
  urlNext = urlData[0];
@@ -833,6 +881,9 @@ var SubscriptionManager = /** @class */ (function () {
833
881
  case 0:
834
882
  this._debugUnSubAllHits += 1;
835
883
  if (!ws) return [3 /*break*/, 2];
884
+ if (ws['id_socket']) {
885
+ this._lastRouteBySocket.delete(ws['id_socket']);
886
+ }
836
887
  // Check if WebSocket has already been unsubscribed
837
888
  if (ws['isUnsubscribed']) {
838
889
  return [2 /*return*/]; // Skip if already unsubscribed
@@ -878,27 +929,274 @@ var SubscriptionManager = /** @class */ (function () {
878
929
  var mainDb = config && typeof config['DATABASE'] === 'string' ? config['DATABASE'] : '';
879
930
  return mainDb ? [mainDb] : [];
880
931
  };
932
+ SubscriptionManager.prototype.loadResumeToken = function () {
933
+ return __awaiter(this, void 0, void 0, function () {
934
+ var db, doc, error_2;
935
+ return __generator(this, function (_a) {
936
+ switch (_a.label) {
937
+ case 0:
938
+ _a.trys.push([0, 2, , 3]);
939
+ db = resolveio_server_app_1.ResolveIOServer.getMainDB();
940
+ if (!db) {
941
+ return [2 /*return*/, null];
942
+ }
943
+ return [4 /*yield*/, db.collection(this.RESUME_TOKEN_COLLECTION).findOne({ _id: this.RESUME_TOKEN_DOC_ID })];
944
+ case 1:
945
+ doc = _a.sent();
946
+ return [2 /*return*/, (doc === null || doc === void 0 ? void 0 : doc.token) || null];
947
+ case 2:
948
+ error_2 = _a.sent();
949
+ console.log(new Date(), 'Sub Manager', 'Failed to load oplog resume token', error_2);
950
+ return [2 /*return*/, null];
951
+ case 3: return [2 /*return*/];
952
+ }
953
+ });
954
+ });
955
+ };
956
+ SubscriptionManager.prototype.saveResumeToken = function (token) {
957
+ return __awaiter(this, void 0, void 0, function () {
958
+ var db, error_3;
959
+ return __generator(this, function (_a) {
960
+ switch (_a.label) {
961
+ case 0:
962
+ if (!token) {
963
+ return [2 /*return*/];
964
+ }
965
+ _a.label = 1;
966
+ case 1:
967
+ _a.trys.push([1, 3, , 4]);
968
+ db = resolveio_server_app_1.ResolveIOServer.getMainDB();
969
+ if (!db) {
970
+ return [2 /*return*/];
971
+ }
972
+ return [4 /*yield*/, db.collection(this.RESUME_TOKEN_COLLECTION).updateOne({ _id: this.RESUME_TOKEN_DOC_ID }, { $set: { token: token, updatedAt: new Date() } }, { upsert: true })];
973
+ case 2:
974
+ _a.sent();
975
+ return [3 /*break*/, 4];
976
+ case 3:
977
+ error_3 = _a.sent();
978
+ console.log(new Date(), 'Sub Manager', 'Failed to persist oplog resume token', error_3);
979
+ return [3 /*break*/, 4];
980
+ case 4: return [2 /*return*/];
981
+ }
982
+ });
983
+ });
984
+ };
985
+ SubscriptionManager.prototype.clearResumeToken = function () {
986
+ return __awaiter(this, void 0, void 0, function () {
987
+ var db, error_4;
988
+ return __generator(this, function (_a) {
989
+ switch (_a.label) {
990
+ case 0:
991
+ _a.trys.push([0, 2, , 3]);
992
+ db = resolveio_server_app_1.ResolveIOServer.getMainDB();
993
+ if (!db) {
994
+ return [2 /*return*/];
995
+ }
996
+ return [4 /*yield*/, db.collection(this.RESUME_TOKEN_COLLECTION).deleteOne({ _id: this.RESUME_TOKEN_DOC_ID })];
997
+ case 1:
998
+ _a.sent();
999
+ return [3 /*break*/, 3];
1000
+ case 2:
1001
+ error_4 = _a.sent();
1002
+ console.log(new Date(), 'Sub Manager', 'Failed to clear oplog resume token', error_4);
1003
+ return [3 /*break*/, 3];
1004
+ case 3: return [2 /*return*/];
1005
+ }
1006
+ });
1007
+ });
1008
+ };
1009
+ SubscriptionManager.prototype.queueResumeTokenSave = function (token, options) {
1010
+ var _this = this;
1011
+ if (!token) {
1012
+ return;
1013
+ }
1014
+ this._lastResumeToken = token;
1015
+ var now = Date.now();
1016
+ var shouldSave = !!(options === null || options === void 0 ? void 0 : options.force) || (now - this._lastResumeTokenSaveMs) >= this.RESUME_TOKEN_SAVE_INTERVAL_MS;
1017
+ if (!shouldSave) {
1018
+ return;
1019
+ }
1020
+ if (this._resumeTokenSavePromise !== null) {
1021
+ if (options === null || options === void 0 ? void 0 : options.force) {
1022
+ this._resumeTokenSaveForcePending = true;
1023
+ }
1024
+ return;
1025
+ }
1026
+ this._lastResumeTokenSaveMs = now;
1027
+ var tokenToSave = this._lastResumeToken;
1028
+ this._resumeTokenSavePromise = (function () { return __awaiter(_this, void 0, void 0, function () {
1029
+ return __generator(this, function (_a) {
1030
+ switch (_a.label) {
1031
+ case 0:
1032
+ _a.trys.push([0, , 2, 3]);
1033
+ return [4 /*yield*/, this.saveResumeToken(tokenToSave)];
1034
+ case 1:
1035
+ _a.sent();
1036
+ return [3 /*break*/, 3];
1037
+ case 2:
1038
+ this._resumeTokenSavePromise = null;
1039
+ if (this._resumeTokenSaveForcePending) {
1040
+ this._resumeTokenSaveForcePending = false;
1041
+ this.queueResumeTokenSave(this._lastResumeToken, { force: true });
1042
+ }
1043
+ return [7 /*endfinally*/];
1044
+ case 3: return [2 /*return*/];
1045
+ }
1046
+ });
1047
+ }); })();
1048
+ };
1049
+ SubscriptionManager.prototype.queueFullResync = function (reason) {
1050
+ var _this = this;
1051
+ if (this._fullResyncPromise !== null) {
1052
+ return;
1053
+ }
1054
+ this._fullResyncPromise = (function () { return __awaiter(_this, void 0, void 0, function () {
1055
+ return __generator(this, function (_a) {
1056
+ switch (_a.label) {
1057
+ case 0:
1058
+ _a.trys.push([0, , 2, 3]);
1059
+ return [4 /*yield*/, this.fullResyncSubscriptions(reason)];
1060
+ case 1:
1061
+ _a.sent();
1062
+ return [3 /*break*/, 3];
1063
+ case 2:
1064
+ this._fullResyncPromise = null;
1065
+ return [7 /*endfinally*/];
1066
+ case 3: return [2 /*return*/];
1067
+ }
1068
+ });
1069
+ }); })();
1070
+ };
1071
+ SubscriptionManager.prototype.fullResyncSubscriptions = function (reason) {
1072
+ return __awaiter(this, void 0, void 0, function () {
1073
+ var subs, subs_1, subs_1_1, sub, pub, _a, _b, client, ws, _c, e_3_1, e_4_1, error_5;
1074
+ var e_4, _d, e_3, _e;
1075
+ var _f, _g, _h, _j, _k;
1076
+ return __generator(this, function (_l) {
1077
+ switch (_l.label) {
1078
+ case 0:
1079
+ _l.trys.push([0, 20, , 21]);
1080
+ if (this._enableDebug) {
1081
+ console.log(new Date(), 'Sub Manager', 'Full subscription resync', reason, this._subscriptions.length);
1082
+ }
1083
+ try {
1084
+ (_g = (_f = resolveio_server_app_1.ResolveIOServer.getMongoManager()) === null || _f === void 0 ? void 0 : _f.clearQueryCache) === null || _g === void 0 ? void 0 : _g.call(_f, reason);
1085
+ }
1086
+ catch (_m) {
1087
+ // ignore cache-clear errors
1088
+ }
1089
+ try {
1090
+ (_j = (_h = this._nodeCache) === null || _h === void 0 ? void 0 : _h.flushAll) === null || _j === void 0 ? void 0 : _j.call(_h);
1091
+ }
1092
+ catch (_o) {
1093
+ // ignore cache-clear errors
1094
+ }
1095
+ subs = this._subscriptions.slice();
1096
+ _l.label = 1;
1097
+ case 1:
1098
+ _l.trys.push([1, 17, 18, 19]);
1099
+ subs_1 = __values(subs), subs_1_1 = subs_1.next();
1100
+ _l.label = 2;
1101
+ case 2:
1102
+ if (!!subs_1_1.done) return [3 /*break*/, 16];
1103
+ sub = subs_1_1.value;
1104
+ if (!((_k = sub === null || sub === void 0 ? void 0 : sub.clients) === null || _k === void 0 ? void 0 : _k.length)) {
1105
+ return [3 /*break*/, 15];
1106
+ }
1107
+ pub = this._publications[sub.publication];
1108
+ if (!pub) {
1109
+ return [3 /*break*/, 15];
1110
+ }
1111
+ if (sub.running) {
1112
+ sub.runAgain = true;
1113
+ return [3 /*break*/, 15];
1114
+ }
1115
+ if (!pub.user_specific) return [3 /*break*/, 13];
1116
+ _l.label = 3;
1117
+ case 3:
1118
+ _l.trys.push([3, 10, 11, 12]);
1119
+ _a = (e_3 = void 0, __values(sub.clients)), _b = _a.next();
1120
+ _l.label = 4;
1121
+ case 4:
1122
+ if (!!_b.done) return [3 /*break*/, 9];
1123
+ client = _b.value;
1124
+ ws = this._websocketManager.getWebSocket(client.id_socket);
1125
+ if (!((ws === null || ws === void 0 ? void 0 : ws.readyState) === ws.OPEN)) return [3 /*break*/, 8];
1126
+ _l.label = 5;
1127
+ case 5:
1128
+ _l.trys.push([5, 7, , 8]);
1129
+ return [4 /*yield*/, this.sendDataToOneWithRetry(ws, client.messageId, sub, '', reason)];
1130
+ case 6:
1131
+ _l.sent();
1132
+ return [3 /*break*/, 8];
1133
+ case 7:
1134
+ _c = _l.sent();
1135
+ return [3 /*break*/, 8];
1136
+ case 8:
1137
+ _b = _a.next();
1138
+ return [3 /*break*/, 4];
1139
+ case 9: return [3 /*break*/, 12];
1140
+ case 10:
1141
+ e_3_1 = _l.sent();
1142
+ e_3 = { error: e_3_1 };
1143
+ return [3 /*break*/, 12];
1144
+ case 11:
1145
+ try {
1146
+ if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
1147
+ }
1148
+ finally { if (e_3) throw e_3.error; }
1149
+ return [7 /*endfinally*/];
1150
+ case 12: return [3 /*break*/, 15];
1151
+ case 13: return [4 /*yield*/, this.sendDataToAllWithRetry(sub, '', reason)];
1152
+ case 14:
1153
+ _l.sent();
1154
+ _l.label = 15;
1155
+ case 15:
1156
+ subs_1_1 = subs_1.next();
1157
+ return [3 /*break*/, 2];
1158
+ case 16: return [3 /*break*/, 19];
1159
+ case 17:
1160
+ e_4_1 = _l.sent();
1161
+ e_4 = { error: e_4_1 };
1162
+ return [3 /*break*/, 19];
1163
+ case 18:
1164
+ try {
1165
+ if (subs_1_1 && !subs_1_1.done && (_d = subs_1.return)) _d.call(subs_1);
1166
+ }
1167
+ finally { if (e_4) throw e_4.error; }
1168
+ return [7 /*endfinally*/];
1169
+ case 19: return [3 /*break*/, 21];
1170
+ case 20:
1171
+ error_5 = _l.sent();
1172
+ console.log(new Date(), 'Sub Manager', 'Full resync failed', reason, error_5);
1173
+ return [3 /*break*/, 21];
1174
+ case 21: return [2 /*return*/];
1175
+ }
1176
+ });
1177
+ });
1178
+ };
881
1179
  // Watch (tail) Mongo's operation log on the entire database (all insert/modify/delete will trigger this function)
882
1180
  SubscriptionManager.prototype.tailOpLog = function (resumeToken) {
883
1181
  return __awaiter(this, void 0, void 0, function () {
884
- var watchDatabases, pipeline, lastResumeToken_1, _a;
1182
+ var watchDatabases, pipeline, lastResumeToken_1, startedWithResumeToken, error_6;
885
1183
  var _this = this;
886
- return __generator(this, function (_b) {
887
- switch (_b.label) {
1184
+ return __generator(this, function (_a) {
1185
+ switch (_a.label) {
888
1186
  case 0:
889
1187
  if (!(this._oplog$ && !this._oplog$.closed)) return [3 /*break*/, 2];
890
1188
  this._oplog$.removeAllListeners();
891
1189
  return [4 /*yield*/, this._oplog$.close()];
892
1190
  case 1:
893
- _b.sent();
1191
+ _a.sent();
894
1192
  this._oplog$ = null;
895
- _b.label = 2;
1193
+ _a.label = 2;
896
1194
  case 2:
897
1195
  // eslint-disable-next-line no-restricted-syntax
898
1196
  return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 1000); })];
899
1197
  case 3:
900
1198
  // eslint-disable-next-line no-restricted-syntax
901
- _b.sent();
1199
+ _a.sent();
902
1200
  if (!(!this._oplog$ || this._oplog$.closed)) return [3 /*break*/, 12];
903
1201
  this._oplogRetryCount += 1;
904
1202
  if (this._oplogRetryCount > 5) {
@@ -928,32 +1226,39 @@ var SubscriptionManager = /** @class */ (function () {
928
1226
  },
929
1227
  },
930
1228
  ];
1229
+ startedWithResumeToken = false;
931
1230
  if (!resumeToken) return [3 /*break*/, 10];
932
1231
  lastResumeToken_1 = resumeToken;
933
- _b.label = 4;
1232
+ _a.label = 4;
934
1233
  case 4:
935
- _b.trys.push([4, 5, , 9]);
1234
+ _a.trys.push([4, 5, , 9]);
936
1235
  this._oplog$ = resolveio_server_app_1.ResolveIOServer.getMongoConnection().watch(pipeline, { resumeAfter: resumeToken });
1236
+ startedWithResumeToken = true;
937
1237
  return [3 /*break*/, 9];
938
1238
  case 5:
939
- _a = _b.sent();
1239
+ error_6 = _a.sent();
940
1240
  if (!this._oplog$) return [3 /*break*/, 7];
941
1241
  this._oplog$.removeAllListeners();
942
1242
  return [4 /*yield*/, this._oplog$.close()];
943
1243
  case 6:
944
- _b.sent();
1244
+ _a.sent();
945
1245
  this._oplog$ = null;
946
- _b.label = 7;
947
- case 7: return [4 /*yield*/, this.tailOpLog(resumeToken)];
1246
+ _a.label = 7;
1247
+ case 7: return [4 /*yield*/, this.clearResumeToken()];
948
1248
  case 8:
949
- _b.sent();
950
- return [2 /*return*/];
1249
+ _a.sent();
1250
+ lastResumeToken_1 = null;
1251
+ console.log(new Date(), 'oplog resumeAfter failed, starting fresh', error_6);
1252
+ this._oplog$ = resolveio_server_app_1.ResolveIOServer.getMongoConnection().watch(pipeline);
1253
+ startedWithResumeToken = false;
1254
+ this.queueFullResync('oplog-resumeAfter-failed');
1255
+ return [3 /*break*/, 9];
951
1256
  case 9: return [3 /*break*/, 11];
952
1257
  case 10:
953
1258
  this._oplog$ = resolveio_server_app_1.ResolveIOServer.getMongoConnection().watch(pipeline);
954
- _b.label = 11;
1259
+ _a.label = 11;
955
1260
  case 11:
956
- console.log(new Date(), 'oplog started');
1261
+ console.log(new Date(), 'oplog started', startedWithResumeToken ? '(resumeAfter)' : '');
957
1262
  this._oplog$.on('change', function (doc) { return __awaiter(_this, void 0, void 0, function () {
958
1263
  var collection, docId, flag, dependencyFlag;
959
1264
  return __generator(this, function (_a) {
@@ -1030,6 +1335,7 @@ var SubscriptionManager = /** @class */ (function () {
1030
1335
  _a.label = 13;
1031
1336
  case 13:
1032
1337
  lastResumeToken_1 = doc._id;
1338
+ this.queueResumeTokenSave(lastResumeToken_1);
1033
1339
  if ((!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'))) {
1034
1340
  }
1035
1341
  _a.label = 14;
@@ -1066,6 +1372,7 @@ var SubscriptionManager = /** @class */ (function () {
1066
1372
  switch (_a.label) {
1067
1373
  case 0:
1068
1374
  console.log(new Date(), 'oplog close');
1375
+ this.queueResumeTokenSave(lastResumeToken_1, { force: true });
1069
1376
  this._oplog$.removeAllListeners();
1070
1377
  this._oplog$ = null;
1071
1378
  return [4 /*yield*/, this.tailOpLog(lastResumeToken_1)];
@@ -1075,7 +1382,7 @@ var SubscriptionManager = /** @class */ (function () {
1075
1382
  }
1076
1383
  });
1077
1384
  }); });
1078
- _b.label = 12;
1385
+ _a.label = 12;
1079
1386
  case 12: return [2 /*return*/];
1080
1387
  }
1081
1388
  });
@@ -1227,7 +1534,7 @@ var SubscriptionManager = /** @class */ (function () {
1227
1534
  SubscriptionManager.prototype.sendDataToAll = function (sub, collection, type) {
1228
1535
  return __awaiter(this, void 0, void 0, function () {
1229
1536
  var subIndex, monitor, res_1, dependencySnapshot, execution, cacheData, _a, _b, client, ws, serverRes, _c, _d, client, ws, serverRes, nodeCacheSize, deleteCount, subArr, zz, err_2, _e, normalizedError, correlationId, _f, _g, client, ws, serverRes, errorPayload;
1230
- var e_3, _h, e_4, _j, e_5, _k;
1537
+ var e_5, _h, e_6, _j, e_7, _k;
1231
1538
  var _this = this;
1232
1539
  var _l;
1233
1540
  return __generator(this, function (_m) {
@@ -1282,12 +1589,12 @@ var SubscriptionManager = /** @class */ (function () {
1282
1589
  }
1283
1590
  }
1284
1591
  }
1285
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
1592
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
1286
1593
  finally {
1287
1594
  try {
1288
1595
  if (_b && !_b.done && (_h = _a.return)) _h.call(_a);
1289
1596
  }
1290
- finally { if (e_3) throw e_3.error; }
1597
+ finally { if (e_5) throw e_5.error; }
1291
1598
  }
1292
1599
  this._nodeCache.del(sub.cacheId);
1293
1600
  if ((0, common_1.getBinarySize)(JSON.stringify(res_1)) < 1000000 &&
@@ -1340,12 +1647,12 @@ var SubscriptionManager = /** @class */ (function () {
1340
1647
  }
1341
1648
  }
1342
1649
  }
1343
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
1650
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
1344
1651
  finally {
1345
1652
  try {
1346
1653
  if (_d && !_d.done && (_j = _c.return)) _j.call(_c);
1347
1654
  }
1348
- finally { if (e_4) throw e_4.error; }
1655
+ finally { if (e_6) throw e_6.error; }
1349
1656
  }
1350
1657
  if ((0, common_1.getBinarySize)(JSON.stringify(res_1)) < 1000000 &&
1351
1658
  !sub.collections.includes('logs') &&
@@ -1399,12 +1706,12 @@ var SubscriptionManager = /** @class */ (function () {
1399
1706
  }
1400
1707
  }
1401
1708
  }
1402
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
1709
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
1403
1710
  finally {
1404
1711
  try {
1405
1712
  if (_g && !_g.done && (_k = _f.return)) _k.call(_f);
1406
1713
  }
1407
- finally { if (e_5) throw e_5.error; }
1714
+ finally { if (e_7) throw e_7.error; }
1408
1715
  }
1409
1716
  errorPayload = {
1410
1717
  publication: sub.publication,
@@ -1527,8 +1834,8 @@ var SubscriptionManager = /** @class */ (function () {
1527
1834
  };
1528
1835
  SubscriptionManager.prototype.documentMatchesFilter = function (collection, documentId, filter) {
1529
1836
  return __awaiter(this, void 0, void 0, function () {
1530
- var db, filterCopy, idCandidates, idCandidates_1, idCandidates_1_1, idValue, combinedFilter, doc, e_6_1, _a;
1531
- var e_6, _b;
1837
+ var db, filterCopy, idCandidates, idCandidates_1, idCandidates_1_1, idValue, combinedFilter, doc, e_8_1, _a;
1838
+ var e_8, _b;
1532
1839
  return __generator(this, function (_c) {
1533
1840
  switch (_c.label) {
1534
1841
  case 0:
@@ -1562,14 +1869,14 @@ var SubscriptionManager = /** @class */ (function () {
1562
1869
  return [3 /*break*/, 2];
1563
1870
  case 5: return [3 /*break*/, 8];
1564
1871
  case 6:
1565
- e_6_1 = _c.sent();
1566
- e_6 = { error: e_6_1 };
1872
+ e_8_1 = _c.sent();
1873
+ e_8 = { error: e_8_1 };
1567
1874
  return [3 /*break*/, 8];
1568
1875
  case 7:
1569
1876
  try {
1570
1877
  if (idCandidates_1_1 && !idCandidates_1_1.done && (_b = idCandidates_1.return)) _b.call(idCandidates_1);
1571
1878
  }
1572
- finally { if (e_6) throw e_6.error; }
1879
+ finally { if (e_8) throw e_8.error; }
1573
1880
  return [7 /*endfinally*/];
1574
1881
  case 8: return [2 /*return*/, false];
1575
1882
  case 9:
@@ -1582,8 +1889,8 @@ var SubscriptionManager = /** @class */ (function () {
1582
1889
  };
1583
1890
  SubscriptionManager.prototype.shouldInvalidateSubscription = function (sub, collection, type, documentId) {
1584
1891
  return __awaiter(this, void 0, void 0, function () {
1585
- var normalizedDocumentId, hasDependencyData, trackedIds, filters, filters_1, filters_1_1, filter, e_7_1;
1586
- var e_7, _a;
1892
+ var normalizedDocumentId, hasDependencyData, trackedIds, filters, filters_1, filters_1_1, filter, e_9_1;
1893
+ var e_9, _a;
1587
1894
  var _b, _c;
1588
1895
  return __generator(this, function (_d) {
1589
1896
  switch (_d.label) {
@@ -1640,14 +1947,14 @@ var SubscriptionManager = /** @class */ (function () {
1640
1947
  return [3 /*break*/, 2];
1641
1948
  case 5: return [3 /*break*/, 8];
1642
1949
  case 6:
1643
- e_7_1 = _d.sent();
1644
- e_7 = { error: e_7_1 };
1950
+ e_9_1 = _d.sent();
1951
+ e_9 = { error: e_9_1 };
1645
1952
  return [3 /*break*/, 8];
1646
1953
  case 7:
1647
1954
  try {
1648
1955
  if (filters_1_1 && !filters_1_1.done && (_a = filters_1.return)) _a.call(filters_1);
1649
1956
  }
1650
- finally { if (e_7) throw e_7.error; }
1957
+ finally { if (e_9) throw e_9.error; }
1651
1958
  return [7 /*endfinally*/];
1652
1959
  case 8:
1653
1960
  this.dependencyDebug('Skip invalidation after dependency checks', { publication: sub.publication, collection: collection, type: type, documentId: normalizedDocumentId });
@@ -1658,8 +1965,8 @@ var SubscriptionManager = /** @class */ (function () {
1658
1965
  };
1659
1966
  SubscriptionManager.prototype.shouldInvalidateSubscriptionForEvents = function (sub, collection, events) {
1660
1967
  return __awaiter(this, void 0, void 0, function () {
1661
- var sawInsert, sawDelete, events_1, events_1_1, event_1, e_8_1, paginationMeta, paginationReasons;
1662
- var e_8, _a;
1968
+ var sawInsert, sawDelete, events_1, events_1_1, event_1, e_10_1, paginationMeta, paginationReasons;
1969
+ var e_10, _a;
1663
1970
  return __generator(this, function (_b) {
1664
1971
  switch (_b.label) {
1665
1972
  case 0:
@@ -1690,14 +1997,14 @@ var SubscriptionManager = /** @class */ (function () {
1690
1997
  return [3 /*break*/, 2];
1691
1998
  case 5: return [3 /*break*/, 8];
1692
1999
  case 6:
1693
- e_8_1 = _b.sent();
1694
- e_8 = { error: e_8_1 };
2000
+ e_10_1 = _b.sent();
2001
+ e_10 = { error: e_10_1 };
1695
2002
  return [3 /*break*/, 8];
1696
2003
  case 7:
1697
2004
  try {
1698
2005
  if (events_1_1 && !events_1_1.done && (_a = events_1.return)) _a.call(events_1);
1699
2006
  }
1700
- finally { if (e_8) throw e_8.error; }
2007
+ finally { if (e_10) throw e_10.error; }
1701
2008
  return [7 /*endfinally*/];
1702
2009
  case 8:
1703
2010
  paginationMeta = this.getPaginationMeta(sub, collection);