@resolveio/server-lib 6.1.4 → 6.1.5

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.
package/fixtures/init.js CHANGED
@@ -37,7 +37,6 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  var app_version_collection_1 = require("../collections/app-version.collection");
40
- var active_subscription_collection_1 = require("../collections/active-subscription.collection");
41
40
  var mongoose_1 = require("mongoose");
42
41
  function loadServerInit() {
43
42
  return __awaiter(this, void 0, void 0, function () {
@@ -53,9 +52,6 @@ function loadServerInit() {
53
52
  version: 1
54
53
  });
55
54
  }
56
- return [4 /*yield*/, active_subscription_collection_1.ActiveSubscriptions.deleteMany({}).exec()];
57
- case 2:
58
- _a.sent();
59
55
  return [2 /*return*/];
60
56
  }
61
57
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/fixtures/init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gFAAoE;AAEpE,gGAAoF;AACpF,qCAAiC;AAEjC,SAAsB,cAAc;;;;;wBAClB,qBAAM,oCAAW,CAAC,OAAO,EAAE,EAAA;;oBAAxC,UAAU,GAAG,SAA2B;oBAE5C,IAAI,CAAC,UAAU,EAAE;wBAChB,oCAAW,CAAC,MAAM,CAAC;4BAClB,GAAG,EAAE,gBAAK,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE;4BACnC,OAAO,EAAE,CAAC;yBACV,CAAC,CAAC;qBACH;oBAED,qBAAM,oDAAmB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,EAAA;;oBAA/C,SAA+C,CAAC;;;;;CAChD;AAXD,wCAWC","file":"init.js","sourcesContent":["import { AppVersions } from '../collections/app-version.collection';\nimport { LoggedInUsers } from '../collections/logged-in-users.collection';\nimport { ActiveSubscriptions } from '../collections/active-subscription.collection';\nimport { Types } from 'mongoose';\n\nexport async function loadServerInit() {\n\tlet appVersion = await AppVersions.findOne();\n\n\tif (!appVersion) {\n\t\tAppVersions.create({\n\t\t\t_id: Types.ObjectId().toHexString(),\n\t\t\tversion: 1\n\t\t});\n\t}\n\n\tawait ActiveSubscriptions.deleteMany({}).exec();\n}"]}
1
+ {"version":3,"sources":["../../src/fixtures/init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gFAAoE;AACpE,qCAAiC;AAEjC,SAAsB,cAAc;;;;;wBAClB,qBAAM,oCAAW,CAAC,OAAO,EAAE,EAAA;;oBAAxC,UAAU,GAAG,SAA2B;oBAE5C,IAAI,CAAC,UAAU,EAAE;wBAChB,oCAAW,CAAC,MAAM,CAAC;4BAClB,GAAG,EAAE,gBAAK,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE;4BACnC,OAAO,EAAE,CAAC;yBACV,CAAC,CAAC;qBACH;;;;;CACD;AATD,wCASC","file":"init.js","sourcesContent":["import { AppVersions } from '../collections/app-version.collection';\nimport { Types } from 'mongoose';\n\nexport async function loadServerInit() {\n\tlet appVersion = await AppVersions.findOne();\n\n\tif (!appVersion) {\n\t\tAppVersions.create({\n\t\t\t_id: Types.ObjectId().toHexString(),\n\t\t\tversion: 1\n\t\t});\n\t}\n}"]}
@@ -50,7 +50,6 @@ var app_version_1 = require("../publications/app-version");
50
50
  var mongoose_1 = require("mongoose");
51
51
  var files_1 = require("../publications/files");
52
52
  var super_admin_1 = require("../publications/super-admin");
53
- var active_subscription_collection_1 = require("../collections/active-subscription.collection");
54
53
  var logged_in_users_collection_1 = require("../collections/logged-in-users.collection");
55
54
  var cron_jobs_1 = require("../publications/cron-jobs");
56
55
  var flags_1 = require("../publications/flags");
@@ -239,7 +238,7 @@ var SubscriptionManager = /** @class */ (function () {
239
238
  subscriptionData[_i - 4] = arguments[_i];
240
239
  }
241
240
  return __awaiter(this, void 0, void 0, function () {
242
- var that, pub, valObj, valKeys, rootKeys, i, sub, _a, newActiveSub, newLoggedInUser, begDate, endDate, billUser;
241
+ var that, pub, valObj, valKeys, rootKeys, i, sub, _a, newLoggedInUser, begDate, endDate, billUser;
243
242
  var _b;
244
243
  return __generator(this, function (_c) {
245
244
  switch (_c.label) {
@@ -312,22 +311,7 @@ var SubscriptionManager = /** @class */ (function () {
312
311
  _a.preSubscriptionData = _c.sent();
313
312
  _c.label = 3;
314
313
  case 3:
315
- newActiveSub = new active_subscription_collection_1.ActiveSubscriptions({
316
- date: new Date(),
317
- publication: publication,
318
- subData: JSON.stringify(subscriptionData),
319
- collections: pub.collections,
320
- clients: sub.clients
321
- });
322
- active_subscription_collection_1.ActiveSubscriptions.findOneAndUpdate({
323
- $and: [
324
- { publication: publication },
325
- { subData: JSON.stringify(subscriptionData) }
326
- ]
327
- }, { $setOnInsert: { _id: mongoose_1.Types.ObjectId().toHexString(), __v: 0 }, $set: newActiveSub }, { upsert: true }).exec();
328
- _c.label = 4;
329
- case 4:
330
- if (!(publication === 'appversion')) return [3 /*break*/, 6];
314
+ if (!(publication === 'appversion')) return [3 /*break*/, 5];
331
315
  newLoggedInUser = {
332
316
  _id: mongoose_1.Types.ObjectId().toHexString(),
333
317
  __v: 0,
@@ -338,7 +322,7 @@ var SubscriptionManager = /** @class */ (function () {
338
322
  };
339
323
  this._loggedInUsers.push(newLoggedInUser);
340
324
  logged_in_users_collection_1.LoggedInUsers.create(newLoggedInUser);
341
- if (!(ws['user'] !== 'Admin' && index_1.ResolveIOServer.getSupportDB())) return [3 /*break*/, 6];
325
+ if (!(ws['user'] !== 'Admin' && index_1.ResolveIOServer.getSupportDB())) return [3 /*break*/, 5];
342
326
  begDate = moment().startOf('month');
343
327
  endDate = moment().endOf('month');
344
328
  return [4 /*yield*/, billing_logged_in_users_collection_1.BillingLoggedInUsers.findOne({
@@ -357,7 +341,7 @@ var SubscriptionManager = /** @class */ (function () {
357
341
  }
358
342
  ]
359
343
  })];
360
- case 5:
344
+ case 4:
361
345
  billUser = _c.sent();
362
346
  if (!billUser) {
363
347
  billing_logged_in_users_collection_1.BillingLoggedInUsers.create({
@@ -369,8 +353,8 @@ var SubscriptionManager = /** @class */ (function () {
369
353
  client: index_1.ResolveIOServer.getClientName()
370
354
  });
371
355
  }
372
- _c.label = 6;
373
- case 6: return [2 /*return*/];
356
+ _c.label = 5;
357
+ case 5: return [2 /*return*/];
374
358
  }
375
359
  });
376
360
  });
@@ -382,46 +366,36 @@ var SubscriptionManager = /** @class */ (function () {
382
366
  subscriptionData[_i - 4] = arguments[_i];
383
367
  }
384
368
  return __awaiter(this, void 0, void 0, function () {
385
- var that, sub, i, activeSub;
369
+ var that, sub, i;
386
370
  return __generator(this, function (_a) {
387
- switch (_a.label) {
388
- case 0:
389
- that = this;
390
- if (!!that._publications[publication]) return [3 /*break*/, 1];
391
- console.log('No Publication: ' + publication);
392
- return [2 /*return*/];
393
- case 1:
394
- sub = that._subscriptions.filter(function (a) { return a.publication === publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscriptionData); })[0];
395
- if (!sub) return [3 /*break*/, 3];
371
+ that = this;
372
+ // console.log('Before');
373
+ // console.dir(this._subscriptions.map(a => a.publication));
374
+ if (!that._publications[publication]) {
375
+ console.log('No Publication: ' + publication);
376
+ return [2 /*return*/];
377
+ }
378
+ else {
379
+ sub = that._subscriptions.filter(function (a) { return a.publication === publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscriptionData); })[0];
380
+ if (sub) {
396
381
  for (i = sub.clients.length - 1; i >= 0; i--) {
397
382
  if (sub.clients[i].id_user === ws['id_user'] && sub.clients[i].messageId === messageId && sub.clients[i].id_socket === ws['id_socket']) {
398
383
  sub.clients.splice(i, 1);
399
384
  }
400
385
  }
401
- return [4 /*yield*/, active_subscription_collection_1.ActiveSubscriptions.findOne({
402
- $and: [
403
- { publication: publication },
404
- { subData: JSON.stringify(subscriptionData) }
405
- ]
406
- })];
407
- case 2:
408
- activeSub = _a.sent();
409
- if (activeSub) {
410
- active_subscription_collection_1.ActiveSubscriptions.updateOne({ _id: activeSub._id }, { $set: { clients: sub.clients } }).exec();
411
- }
412
- return [3 /*break*/, 4];
413
- case 3:
386
+ }
387
+ else {
414
388
  console.log(ws['user'] + ' - Did not find sub on unsubscribe - publication: ' + publication + ', subData: ' + JSON.stringify(subscriptionData, null, 2));
415
- _a.label = 4;
416
- case 4: return [2 /*return*/];
389
+ }
417
390
  }
391
+ return [2 /*return*/];
418
392
  });
419
393
  });
420
394
  };
421
395
  // Unsubscribe from publication
422
396
  SubscriptionManager.prototype.unsubscribeAll = function (ws) {
423
397
  return __awaiter(this, void 0, void 0, function () {
424
- var that, loggedInUser, userSubs, i, sub, j, activeSubs;
398
+ var that, loggedInUser, userSubs, i, sub, j;
425
399
  return __generator(this, function (_a) {
426
400
  switch (_a.label) {
427
401
  case 0:
@@ -444,22 +418,6 @@ var SubscriptionManager = /** @class */ (function () {
444
418
  }
445
419
  }
446
420
  }
447
- return [4 /*yield*/, active_subscription_collection_1.ActiveSubscriptions.find({ 'clients.id_socket': ws['id_socket'] })];
448
- case 2:
449
- activeSubs = _a.sent();
450
- activeSubs.forEach(function (sub) {
451
- for (var j = sub.clients.length - 1; j >= 0; j--) {
452
- if (sub.clients[j].id_socket === ws['id_socket']) {
453
- sub.clients.splice(j, 1);
454
- }
455
- }
456
- for (var j = sub.clients.length - 1; j >= 0; j--) {
457
- if (sub.clients[j].id_socket === ws['id_socket']) {
458
- sub.clients.splice(j, 1);
459
- }
460
- }
461
- active_subscription_collection_1.ActiveSubscriptions.updateOne({ _id: sub._id }, { $set: { clients: sub.clients } }).exec();
462
- });
463
421
  ws.terminate();
464
422
  return [2 /*return*/];
465
423
  }
@@ -630,7 +588,7 @@ var SubscriptionManager = /** @class */ (function () {
630
588
  return __generator(this, function (_a) {
631
589
  switch (_a.label) {
632
590
  case 0:
633
- if (!this._oplogQueue.length) return [3 /*break*/, 12];
591
+ if (!this._oplogQueue.length) return [3 /*break*/, 8];
634
592
  uniqueOplog_1 = common_1.deepCopy(this._oplogQueue);
635
593
  this._oplogQueue = [];
636
594
  uniquePubs = [];
@@ -703,159 +661,103 @@ var SubscriptionManager = /** @class */ (function () {
703
661
  return [3 /*break*/, 1];
704
662
  case 4:
705
663
  _loop_6 = function (i) {
706
- var oplog, _loop_7, j;
707
- return __generator(this, function (_a) {
708
- switch (_a.label) {
709
- case 0:
710
- oplog = uniqueOplog_1[i];
711
- _loop_7 = function (j) {
712
- var sub;
713
- var _a;
714
- return __generator(this, function (_b) {
715
- switch (_b.label) {
716
- case 0:
717
- sub = that._subscriptions[j];
718
- if (!sub) return [3 /*break*/, 16];
719
- if (!sub.collections.includes(oplog.collection)) return [3 /*break*/, 16];
720
- if (!sub.preSubscriptionData) return [3 /*break*/, 5];
721
- if (!that._publications[sub.publication].fetchFunction(oplog.doc, sub.preSubscriptionData)) return [3 /*break*/, 5];
722
- if (!!uniquePubs.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData) && JSON.stringify(oplog) === JSON.stringify(a.oplog); }).length) return [3 /*break*/, 4];
723
- if (!!sub.clients.length) return [3 /*break*/, 2];
664
+ var oplog = uniqueOplog_1[i];
665
+ var _loop_7 = function (j) {
666
+ var _a;
667
+ var sub = that._subscriptions[j];
668
+ if (sub) {
669
+ if (sub.collections.includes(oplog.collection)) {
670
+ if (sub.preSubscriptionData) {
671
+ if (that._publications[sub.publication].fetchFunction(oplog.doc, sub.preSubscriptionData)) {
672
+ if (!uniquePubs.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData) && JSON.stringify(oplog) === JSON.stringify(a.oplog); }).length) {
673
+ if (!sub.clients.length) {
724
674
  that._subscriptions.splice(j, 1);
725
- return [4 /*yield*/, active_subscription_collection_1.ActiveSubscriptions.deleteOne({
726
- $and: [
727
- { publication: sub.publication },
728
- { subData: JSON.stringify(sub.subscriptionData) }
729
- ]
730
- }).exec()];
731
- case 1:
732
- _b.sent();
733
- return [3 /*break*/, 3];
734
- case 2:
675
+ }
676
+ else {
735
677
  sub['oplog'] = oplog;
736
678
  uniquePubs.push(common_1.deepCopy(sub));
737
- _b.label = 3;
738
- case 3:
739
- if (this_3._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }) >= 0) {
740
- this_3._nodeCache.del(this_3._subCache.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); })[0].id);
741
- this_3._subCache.splice(this_3._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }), 1);
742
- }
743
- _b.label = 4;
744
- case 4: return [2 /*return*/, "continue"];
745
- case 5:
746
- if (!that._publications[sub.publication].preFunction) return [3 /*break*/, 9];
747
- if (!!sub.clients.length) return [3 /*break*/, 7];
748
- that._subscriptions.splice(j, 1);
749
- return [4 /*yield*/, active_subscription_collection_1.ActiveSubscriptions.deleteOne({
750
- $and: [
751
- { publication: sub.publication },
752
- { subData: JSON.stringify(sub.subscriptionData) }
753
- ]
754
- }).exec()];
755
- case 6:
756
- _b.sent();
757
- if (this_3._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }) >= 0) {
758
- this_3._nodeCache.del(this_3._subCache.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); })[0].id);
759
- this_3._subCache.splice(this_3._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }), 1);
679
+ }
680
+ if (this_3._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }) >= 0) {
681
+ this_3._nodeCache.del(this_3._subCache.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); })[0].id);
682
+ this_3._subCache.splice(this_3._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }), 1);
683
+ }
684
+ }
685
+ return "continue";
686
+ }
687
+ }
688
+ if (that._publications[sub.publication].preFunction) {
689
+ if (!sub.clients.length) {
690
+ that._subscriptions.splice(j, 1);
691
+ if (this_3._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }) >= 0) {
692
+ this_3._nodeCache.del(this_3._subCache.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); })[0].id);
693
+ this_3._subCache.splice(this_3._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }), 1);
694
+ }
695
+ }
696
+ else {
697
+ if (!uniquePubs.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData) && JSON.stringify(oplog) === JSON.stringify(a.oplog); }).length) {
698
+ sub['oplog'] = oplog;
699
+ uniquePubs.push(common_1.deepCopy(sub));
700
+ }
701
+ }
702
+ }
703
+ else {
704
+ if (that._publications[sub.publication].fetchFunction) {
705
+ if ((_a = that._publications[sub.publication]).fetchFunction.apply(_a, __spreadArrays([oplog.doc], sub.subscriptionData))) {
706
+ if (!uniquePubs.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }).length) {
707
+ if (!sub.clients.length) {
708
+ that._subscriptions.splice(j, 1);
709
+ if (this_3._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }) >= 0) {
710
+ this_3._nodeCache.del(this_3._subCache.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); })[0].id);
711
+ this_3._subCache.splice(this_3._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }), 1);
712
+ }
760
713
  }
761
- return [3 /*break*/, 8];
762
- case 7:
763
- if (!uniquePubs.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData) && JSON.stringify(oplog) === JSON.stringify(a.oplog); }).length) {
714
+ else {
764
715
  sub['oplog'] = oplog;
765
716
  uniquePubs.push(common_1.deepCopy(sub));
766
717
  }
767
- _b.label = 8;
768
- case 8: return [3 /*break*/, 16];
769
- case 9:
770
- if (!that._publications[sub.publication].fetchFunction) return [3 /*break*/, 13];
771
- if (!(_a = that._publications[sub.publication]).fetchFunction.apply(_a, __spreadArrays([oplog.doc], sub.subscriptionData))) return [3 /*break*/, 12];
772
- if (!!uniquePubs.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }).length) return [3 /*break*/, 12];
773
- if (!!sub.clients.length) return [3 /*break*/, 11];
774
- that._subscriptions.splice(j, 1);
775
- return [4 /*yield*/, active_subscription_collection_1.ActiveSubscriptions.deleteOne({
776
- $and: [
777
- { publication: sub.publication },
778
- { subData: JSON.stringify(sub.subscriptionData) }
779
- ]
780
- }).exec()];
781
- case 10:
782
- _b.sent();
783
- if (this_3._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }) >= 0) {
784
- this_3._nodeCache.del(this_3._subCache.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); })[0].id);
785
- this_3._subCache.splice(this_3._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }), 1);
786
- }
787
- return [3 /*break*/, 12];
788
- case 11:
789
- sub['oplog'] = oplog;
790
- uniquePubs.push(common_1.deepCopy(sub));
791
- _b.label = 12;
792
- case 12: return [3 /*break*/, 16];
793
- case 13:
794
- if (!!uniquePubs.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }).length) return [3 /*break*/, 16];
795
- if (!!sub.clients.length) return [3 /*break*/, 15];
718
+ }
719
+ }
720
+ }
721
+ else {
722
+ if (!uniquePubs.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }).length) {
723
+ if (!sub.clients.length) {
796
724
  that._subscriptions.splice(j, 1);
797
- return [4 /*yield*/, active_subscription_collection_1.ActiveSubscriptions.deleteOne({
798
- $and: [
799
- { publication: sub.publication },
800
- { subData: JSON.stringify(sub.subscriptionData) }
801
- ]
802
- }).exec()];
803
- case 14:
804
- _b.sent();
805
725
  if (this_3._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }) >= 0) {
806
726
  this_3._nodeCache.del(this_3._subCache.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); })[0].id);
807
727
  this_3._subCache.splice(this_3._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }), 1);
808
728
  }
809
- return [3 /*break*/, 16];
810
- case 15:
729
+ }
730
+ else {
811
731
  sub['oplog'] = oplog;
812
732
  uniquePubs.push(common_1.deepCopy(sub));
813
- _b.label = 16;
814
- case 16: return [2 /*return*/];
733
+ }
815
734
  }
816
- });
817
- };
818
- j = that._subscriptions.length - 1;
819
- _a.label = 1;
820
- case 1:
821
- if (!(j >= 0)) return [3 /*break*/, 4];
822
- return [5 /*yield**/, _loop_7(j)];
823
- case 2:
824
- _a.sent();
825
- _a.label = 3;
826
- case 3:
827
- j--;
828
- return [3 /*break*/, 1];
829
- case 4: return [2 /*return*/];
735
+ }
736
+ }
737
+ }
830
738
  }
831
- });
739
+ };
740
+ for (var j = that._subscriptions.length - 1; j >= 0; j--) {
741
+ _loop_7(j);
742
+ }
832
743
  };
833
744
  this_3 = this;
834
- i = uniqueOplog_1.length - 1;
745
+ for (i = uniqueOplog_1.length - 1; i >= 0; i--) {
746
+ _loop_6(i);
747
+ }
748
+ i = 0;
835
749
  _a.label = 5;
836
750
  case 5:
837
- if (!(i >= 0)) return [3 /*break*/, 8];
838
- return [5 /*yield**/, _loop_6(i)];
751
+ if (!(i < uniquePubs.length)) return [3 /*break*/, 8];
752
+ pub = uniquePubs[i];
753
+ return [4 /*yield*/, this.checkPubsForChanges(pub['oplog'].collection, pub['oplog'].doc, pub['oplog'].type, pub)];
839
754
  case 6:
840
755
  _a.sent();
841
756
  _a.label = 7;
842
757
  case 7:
843
- i--;
844
- return [3 /*break*/, 5];
845
- case 8:
846
- i = 0;
847
- _a.label = 9;
848
- case 9:
849
- if (!(i < uniquePubs.length)) return [3 /*break*/, 12];
850
- pub = uniquePubs[i];
851
- return [4 /*yield*/, this.checkPubsForChanges(pub['oplog'].collection, pub['oplog'].doc, pub['oplog'].type, pub)];
852
- case 10:
853
- _a.sent();
854
- _a.label = 11;
855
- case 11:
856
758
  i++;
857
- return [3 /*break*/, 9];
858
- case 12: return [2 /*return*/];
759
+ return [3 /*break*/, 5];
760
+ case 8: return [2 /*return*/];
859
761
  }
860
762
  });
861
763
  }); }, 250);
@@ -907,26 +809,18 @@ var SubscriptionManager = /** @class */ (function () {
907
809
  case 5:
908
810
  aa++;
909
811
  return [3 /*break*/, 1];
910
- case 6: return [3 /*break*/, 11];
812
+ case 6: return [3 /*break*/, 10];
911
813
  case 7:
912
- if (!!sub.clients.length) return [3 /*break*/, 9];
814
+ if (!!sub.clients.length) return [3 /*break*/, 8];
913
815
  if (that._subscriptions.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }) >= 0) {
914
816
  that._subscriptions.splice(that._subscriptions.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }), 1);
915
817
  }
916
- return [4 /*yield*/, active_subscription_collection_1.ActiveSubscriptions.deleteOne({
917
- $and: [
918
- { publication: sub.publication },
919
- { subData: JSON.stringify(sub.subscriptionData) }
920
- ]
921
- }).exec()];
922
- case 8:
923
- _a.sent();
924
- return [3 /*break*/, 11];
925
- case 9: return [4 /*yield*/, that.sendPubData(sub, 'delete', collection)];
926
- case 10:
818
+ return [3 /*break*/, 10];
819
+ case 8: return [4 /*yield*/, that.sendPubData(sub, 'delete', collection)];
820
+ case 9:
927
821
  _a.sent();
928
- _a.label = 11;
929
- case 11: return [2 /*return*/];
822
+ _a.label = 10;
823
+ case 10: return [2 /*return*/];
930
824
  }
931
825
  });
932
826
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/managers/subscription.manager.ts"],"names":[],"mappings":"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","file":"subscription.manager.js","sourcesContent":["import { ServerResponseModel } from '../models/server-response.model';\nimport { ActiveSubscriptionModel, SubscriptionModel } from '../models/subscription.model';\nimport * as WebSocket from 'ws';\nimport * as MongoOplog from 'mongo-oplog';\nimport { loadLogPublications } from '../publications/logs';\nimport { loadAppStatusPublications } from '../publications/app-status';\nimport { loadAppVersionPublications } from '../publications/app-version';\nimport { Types } from 'mongoose';\nimport { loadFilePublications } from '../publications/files';\nimport { loadSuperAdminPublications } from '../publications/super-admin';\nimport { ActiveSubscriptions } from '../collections/active-subscription.collection';\nimport { LoggedInUsers } from '../collections/logged-in-users.collection';\nimport { loadCronJobPublications } from '../publications/cron-jobs';\nimport { loadFlagsPublications } from '../publications/flags';\nimport { loadMethodCallsPublications } from '../publications/method-calls';\nimport { loadMethodResponsePublications } from '../publications/method-responses';\nimport { loadSupportTicketPublications } from '../publications/support-tickets';\nimport ResolveIOMainServer from '../server-app';\nimport { ResolveIOServer } from '../index';\nimport { loadNotificationPublications } from '../publications/notifications';\nimport { deepCopy } from '../util/common';\nimport { BillingLoggedInUsers } from '../collections/billing-logged-in-users.collection';\nimport * as moment from 'moment';\nimport { loadBillingLoggedInUsersPublications } from '../publications/billing-logged-in-users';\nimport { loadReportBuilderReportPublications } from '../publications/report-builder-reports';\nimport { LoggedInUserModel } from '../models/logged-in-users.model';\n\nimport * as NodeCache from 'node-cache';\n\nexport class SubscriptionManager {\n\n\tprivate _mainServer: ResolveIOMainServer;\n\tprivate _publications: SubscriptionModel = {};\n\tprivate _subscriptions: ActiveSubscriptionModel[] = [];\n\tprivate _wss: WebSocket.Server;\n\tprivate _loggedInUsers: LoggedInUserModel[] = [];\n\t\n\tprivate _oplogQueue = [];\n\tprivate _subCache = [];\n\tprivate _nodeCache;\n\tprivate _cacheId = 0;\n\tprivate _sendQueue = [];\n\tprivate _runningQueue = false;\n\n\tprivate _initOplogStart = false;\n\tprivate _initOplogSupportStart = false;\n\n\tprivate serverConfig;\n\n\tconstructor(mainServer, wss: WebSocket.Server, serverConfig) {\n\t\tthis._mainServer = mainServer;\n\n\t\tthis._nodeCache = new NodeCache( { stdTTL: 0, checkperiod: 0 } );\n\n\t\tthis.serverConfig = serverConfig;\n\t\tthis._wss = wss;\n\n\t\t// Publications\n\t\tloadSuperAdminPublications(this);\n\t\tloadAppVersionPublications(this);\n\t\tloadAppStatusPublications(this);\n\t\tloadLogPublications(this);\n\t\tloadFilePublications(this);\n\t\tloadCronJobPublications(this);\n\t\tloadFlagsPublications(this);\n\t\tloadMethodCallsPublications(this);\n\t\tloadMethodResponsePublications(this);\n\t\tloadBillingLoggedInUsersPublications(this);\n\t\tloadNotificationPublications(this);\n\t\tloadReportBuilderReportPublications(this);\n\n\t\tthis.tailOpLog();\n\t\tthis.runOpLogQueue();\n\n\t\tif (ResolveIOServer.getSupportDB()) {\n\t\t\tloadSupportTicketPublications(this);\n\t\t\t\n\t\t\tthis.tailOpLogSupport();\n\t\t}\n\n\t\tsetInterval(() => {\n\t\t\tconsole.log(new Date());\n\t\t\tconsole.log('Sub Cache Length: ' + this._subCache.length);\n\t\t\tconsole.log('Sub Length: ' + this._subscriptions.length);\n\t\t\tconsole.log(this._nodeCache.getStats().vsize);\n\t\t}, 43200000);\n\n\t\tsetInterval(() => {\n\t\t\tif (!this._runningQueue) {\n\t\t\t\tif (this._sendQueue.length) {\n\t\t\t\t\tthis._runningQueue = true;\n\t\t\t\t\tfor (let i = this._sendQueue.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tlet ws = this._mainServer.getWS(this._sendQueue[i].id_ws);\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tif (ws.bufferedAmount < 20480) {\n\t\t\t\t\t\t\t\tlet sendItem = this._sendQueue.pop();\n\t\t\t\t\t\t\t\tws.send(JSON.stringify(sendItem.data), (error) => {\n\t\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\t\tconsole.log('Error on WS: ', error);\n\t\t\t\t\t\t\t\t\t\tthis.unsubscribeAll(ws);\n\t\t\t\t\t\t\t\t\t}\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\telse {\n\t\t\t\t\t\t\tthis._sendQueue.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._runningQueue = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}, 25);\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 || moment().diff(moment(loggedInUser.date), 'seconds') >= 60) {\n\t\t\t\t\tif (this._mainServer.getWS(loggedInUser.id_ws)) {\n\t\t\t\t\t\tthis.unsubscribeAll(this._mainServer.getWS(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\tif (await LoggedInUsers.findById(loggedInUser._id)) {\n\t\t\t\t\t\t\tawait LoggedInUsers.deleteOne({_id: loggedInUser._id}).exec();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._loggedInUsers.splice(i, 1);\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}, 60000);\n\t}\n\n\t// Add all files to publications private object\n\tpublic publications(method: SubscriptionModel) {\n\t\tthis._publications = Object.assign(this._publications, method);\n\t}\n\n\tpublic async loggedInLatency(ws: WebSocket) {\n\t\tlet date = new Date();\n\n\t\tlet loggedInUser = this._loggedInUsers.filter(a => a.id_ws === ws['id_socket'])[0];\n\n\t\tif (loggedInUser) {\n\t\t\tloggedInUser.date = date;\n\t\t}\n\n\t\tLoggedInUsers.findOneAndUpdate({id_ws: ws['id_socket']}, {$set: {latency: ws['latency'], date: date}}).exec((err, res) => {\n\t\t\tif (err) {\n\t\t\t\tthis.unsubscribeAll(ws);\n\t\t\t}\n\t\t});\n\t}\n\n\t// Subscribe to publication\n\tpublic async subscribe(messageDate: Date, ws: WebSocket, messageId: number, publication: string, ...subscriptionData: any[]) {\n\t\tlet that = this;\n\n\t\tlet pub = that._publications[publication];\n\n\t\tif (!pub) {\n\t\t\tconsole.error('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('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('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\t\t\t\t\t\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('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\tlet sub = that._subscriptions.filter(a => a.publication === publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscriptionData))[0];\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\tsub.clients.push({\n\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\tid_socket: ws['id_socket']\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\tthat._subscriptions.push({\n\t\t\t\t\tpublication: publication,\n\t\t\t\t\tsubscriptionData: subscriptionData,\n\t\t\t\t\tcollections: that.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}]\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!sub) {\n\t\t\t\tsub = that._subscriptions.filter(a => a.publication === publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscriptionData))[0];\n\t\t\t}\n\n\t\t\t// console.log('Subscribe', new Date(), 'Success', sub);\n\n\t\t\t// Send pub data to client who just subscribed only, don't want to send to existing clients since nothing has changed\n\t\t\tthat.sendPubDataOnce(ws, messageId, sub, 'newSub', that.getPublicationCollections(publication)[0]);\n\n\t\t\tif (that._publications[sub.publication].preFunction && !sub.preSubscriptionData) {\n\t\t\t\tsub.preSubscriptionData = await that._publications[sub.publication].preFunction(...sub.subscriptionData);\n\t\t\t}\n\n\t\t\tlet newActiveSub = new ActiveSubscriptions({\n\t\t\t\tdate: new Date(),\n\t\t\t\tpublication: publication,\n\t\t\t\tsubData: JSON.stringify(subscriptionData),\n\t\t\t\tcollections: pub.collections,\n\t\t\t\tclients: sub.clients\n\t\t\t});\n\n\t\t\tActiveSubscriptions.findOneAndUpdate({\n\t\t\t\t$and: [\n\t\t\t\t\t{publication: publication},\n\t\t\t\t\t{subData: JSON.stringify(subscriptionData)}\n\t\t\t\t]\n\t\t\t}, {$setOnInsert: {_id: Types.ObjectId().toHexString(), __v: 0}, $set: newActiveSub}, {upsert: true}).exec();\n\t\t}\n\n\t\tif (publication === 'appversion') {\n\t\t\tlet newLoggedInUser = {\n\t\t\t\t_id: Types.ObjectId().toHexString(),\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\n\t\t\tthis._loggedInUsers.push(newLoggedInUser);\n\n\t\t\tLoggedInUsers.create(newLoggedInUser);\n\n\t\t\tif (ws['user'] !== 'Admin' && ResolveIOServer.getSupportDB()) {\n\t\t\t\tlet begDate = moment().startOf('month');\n\t\t\t\tlet endDate = moment().endOf('month');\n\n\t\t\t\tlet billUser = await BillingLoggedInUsers.findOne({\n\t\t\t\t\t$and: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclient: ResolveIOServer.getClientName()\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid_user: ws['id_user']\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdate: {$gte: begDate}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdate: {$lte: endDate}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t});\n\n\t\t\t\tif (!billUser) {\n\t\t\t\t\tBillingLoggedInUsers.create({\n\t\t\t\t\t\t_id: Types.ObjectId().toHexString(),\n\t\t\t\t\t\t__v: 0,\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tuser: ws['user'],\n\t\t\t\t\t\tdate: new Date(),\n\t\t\t\t\t\tclient: ResolveIOServer.getClientName()\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Unsubscribe from publication \n\tpublic async unsubscribe(messageDate: Date, ws: WebSocket, messageId: number, publication: string, ...subscriptionData: any[]) {\n\t\tlet that = this;\n\n\t\t// console.log('Before');\n\t\t// console.dir(this._subscriptions.map(a => a.publication));\n\n\t\tif (!that._publications[publication]) {\n\t\t\tconsole.log('No Publication: ' + publication);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tlet sub = that._subscriptions.filter(a => a.publication === publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscriptionData))[0];\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\tlet activeSub = await ActiveSubscriptions.findOne({\n\t\t\t\t\t$and: [\n\t\t\t\t\t\t{publication: publication},\n\t\t\t\t\t\t{subData: JSON.stringify(subscriptionData)}\n\t\t\t\t\t]\n\t\t\t\t});\n\t\n\t\t\t\tif (activeSub) {\n\t\t\t\t\tActiveSubscriptions.updateOne({_id: activeSub._id}, {$set: {clients: sub.clients}}).exec();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.log(ws['user'] + ' - Did not find sub on unsubscribe - publication: ' + publication + ', subData: ' + JSON.stringify(subscriptionData, null, 2));\n\t\t\t}\n\t\t}\n\t}\n\n\t// Unsubscribe from publication\n\tpublic async unsubscribeAll(ws: WebSocket) {\n\t\tlet that = this;\n\n\t\t// console.log('Before');\n\t\t// console.dir(this._subscriptions.map(a => a.publication));\n\n\t\tlet loggedInUser = await LoggedInUsers.findOne({id_ws: ws['id_socket']});\n\n\t\tif (loggedInUser) {\t\n\t\t\tif (this._loggedInUsers.map(a => a._id).indexOf(loggedInUser._id) >= 0) {\n\t\t\t\tthis._loggedInUsers.splice(this._loggedInUsers.map(a => a._id).indexOf(loggedInUser._id), 1);\n\t\t\t}\n\t\t\t\n\t\t\tLoggedInUsers.deleteOne({_id: loggedInUser._id}).exec();\n\t\t}\n\n\t\tlet userSubs = that._subscriptions.filter(a => a.clients.some(b => b.id_user === ws['id_user'] && b.id_socket === ws['id_socket']));\n\n\t\tfor (let i = userSubs.length - 1; i >= 0; i--) {\n\t\t\tlet sub = userSubs[i];\n\n\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\tif (sub.clients[j].id_socket === ws['id_socket']) {\n\t\t\t\t\tsub.clients.splice(j, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet activeSubs = await ActiveSubscriptions.find({'clients.id_socket': ws['id_socket']});\n\n\t\tactiveSubs.forEach(sub => {\n\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\tif (sub.clients[j].id_socket === ws['id_socket']) {\n\t\t\t\t\tsub.clients.splice(j, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\tif (sub.clients[j].id_socket === ws['id_socket']) {\n\t\t\t\t\tsub.clients.splice(j, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tActiveSubscriptions.updateOne({_id: sub._id}, {$set: {clients: sub.clients}}).exec();\n\t\t});\n\n\t\tws.terminate();\n\n\t\t// console.log('After');\n\t\t// console.dir(this._subscriptions.map(a => a.publication));\n\t}\n\n\t// Get publication collection\n\tprivate getPublicationCollections(publication: string) {\n\t\treturn this._publications[publication].collections;\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 tailOpLog() {\n\t\tlet that = this;\n\n\t\tconst oplog = MongoOplog(that.serverConfig['OPLOG_URL']);\n\t\toplog.tail().then(() => {\n\t\t\tconsole.log('tail started');\n\t\t\tthis._initOplogStart = true;\n\t\t}, err => {\n\t\t\tconsole.log(err);\n\t\t});\n\t\t\n\t\toplog.on('insert', doc => {\t\t\t\n\t\t\tlet nsArray = doc.ns.split('.');\n\t\t\tlet database = nsArray[0];\n\n\t\t\tif (this.serverConfig['DATABASE'] === database) {\n\t\t\t\tlet collection = nsArray[1];\n\n\t\t\t\tif (nsArray[2]) {\n\t\t\t\t\tcollection += '.' + nsArray[2];\n\t\t\t\t}\n\n\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t}\n\t\t\t\telse if (collection === 'queue-methods') {\n\t\t\t\t\tthis._mainServer.getQueueManager().runMethodQueue();\n\t\t\t\t}\n\t\t\t\telse if (collection === 'queue-responses') {\n\t\t\t\t\tthis._mainServer.getQueueManager().runMethodResponse();\n\t\t\t\t}\n\t\t\t\telse if (collection === 'support-tickets' && this.serverConfig['ROOT_URL'] !== 'http://localhost:4200') {\n\t\t\t\t\tthis._mainServer.getMethodManager().callMethodInternal('sendSupportTicketEmail', doc.o._id);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (!collection.endsWith('.versions') && !collection.startsWith('system.')) {\n\t\t\t\t\tthis._oplogQueue.push({\n\t\t\t\t\t\ttype: 'insert',\n\t\t\t\t\t\tcollection: collection,\n\t\t\t\t\t\tdoc: doc.o\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\toplog.on('update', doc => {\t\t\t\n\t\t\tlet nsArray = doc.ns.split('.');\n\t\t\tlet database = nsArray[0];\n\n\t\t\tif (this.serverConfig['DATABASE'] === database) {\n\t\t\t\tlet collection = nsArray[1];\n\n\t\t\t\tif (nsArray[2]) {\n\t\t\t\t\tcollection += '.' + nsArray[2];\n\t\t\t\t}\n\n\t\t\t\tdoc.o['_id'] = doc.o2['_id'];\n\n\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t}\n\n\t\t\t\tif (!collection.endsWith('.versions') && !collection.startsWith('system.')) {\n\t\t\t\t\tthis._oplogQueue.push({\n\t\t\t\t\t\ttype: 'update',\n\t\t\t\t\t\tcollection: collection,\n\t\t\t\t\t\tdoc: doc.o\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\toplog.on('delete', doc => {\n\t\t\tlet nsArray = doc.ns.split('.');\n\t\t\tlet database = nsArray[0];\n\n\t\t\tif (this.serverConfig['DATABASE'] === database) {\n\t\t\t\tlet collection = nsArray[1];\n\n\t\t\t\tif (nsArray[2]) {\n\t\t\t\t\tcollection += '.' + nsArray[2];\n\t\t\t\t}\n\n\t\t\t\tthat.resendPubsForDelete(collection);\n\n\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\toplog.on('error', error => {\n\t\t\tconsole.log('oplog error', error);\n\n\t\t\tif (this._initOplogStart) {\n\t\t\t\tprocess.exit();\n\t\t\t}\n\t\t});\n\t\t\n\t\toplog.on('end', () => {\n\t\t\tconsole.log('oplog ended');\n\n\t\t\tif (this._initOplogStart) {\n\t\t\t\tprocess.exit();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate tailOpLogSupport() {\n\t\tlet that = this;\n\n\t\tconst oplog = MongoOplog(that.serverConfig['RESOLVEIO_SUPPORT_OPLOG_URL']);\n\t\toplog.tail().then(() => {\n\t\t\tconsole.log('tail started support');\n\n\t\t\tthis._initOplogSupportStart = true;\n\t\t}, err => {\n\t\t\tconsole.log(err);\n\t\t});\n\t\t\n\t\toplog.on('insert', doc => {\t\t\t\n\t\t\tlet nsArray = doc.ns.split('.');\n\t\t\tlet database = nsArray[0];\n\n\t\t\tif (this.serverConfig['DATABASE'] === database) {\n\t\t\t\tlet collection = nsArray[1];\n\n\t\t\t\tif (nsArray[2]) {\n\t\t\t\t\tcollection += '.' + nsArray[2];\n\t\t\t\t}\n\n\t\t\t\tif (collection === 'support-tickets') {\n\t\t\t\t\tthat.checkSupportPubsForChanges(collection, doc.o);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\toplog.on('update', doc => {\t\t\t\n\t\t\tlet nsArray = doc.ns.split('.');\n\t\t\tlet database = nsArray[0];\n\n\t\t\tif (this.serverConfig['DATABASE'] === database) {\n\t\t\t\tlet collection = nsArray[1];\n\n\t\t\t\tif (nsArray[2]) {\n\t\t\t\t\tcollection += '.' + nsArray[2];\n\t\t\t\t}\n\n\t\t\t\tdoc.o['_id'] = doc.o2['_id'];\n\n\t\t\t\tif (collection === 'support-tickets') {\n\t\t\t\t\tthat.checkSupportPubsForChanges(collection, doc.o);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\toplog.on('delete', doc => {\n\t\t\tlet nsArray = doc.ns.split('.');\n\t\t\tlet database = nsArray[0];\n\n\t\t\tif (this.serverConfig['DATABASE'] === database) {\n\t\t\t\tlet collection = nsArray[1];\n\n\t\t\t\tif (nsArray[2]) {\n\t\t\t\t\tcollection += '.' + nsArray[2];\n\t\t\t\t}\n\n\t\t\t\tif (collection === 'support-tickets') {\n\t\t\t\t\tthat.resendPubsForDelete(collection);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\toplog.on('error', error => {\n\t\t\tconsole.log('oplog error support', error);\n\n\t\t\tif (this._initOplogSupportStart) {\n\t\t\t\tprocess.exit();\n\t\t\t}\n\t\t});\n\t\t\n\t\toplog.on('end', () => {\n\t\t\tconsole.log('oplog ended support');\n\n\t\t\tif (this._initOplogSupportStart) {\n\t\t\t\tprocess.exit();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate runOpLogQueue() {\n\t\tlet that = this;\n\t\tsetInterval(async () => {\n\t\t\tif (this._oplogQueue.length) {\n\t\t\t\tlet uniqueOplog = deepCopy(this._oplogQueue);\n\t\t\t\tthis._oplogQueue = [];\n\n\t\t\t\tlet uniquePubs = [];\n\n\t\t\t\tlet needIds = {};\n\n\t\t\t\tfor (let i = uniqueOplog.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (!that._subscriptions.some(a => a.collections.includes(uniqueOplog[i].collection))) {\n\t\t\t\t\t\tuniqueOplog.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tuniqueOplog.forEach(oplog => {\n\t\t\t\t\tlet schemaErrors = null;\n\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tResolveIOServer.getMainDB().model(oplog.collection)['simplschema'].validate(oplog.doc);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (errors) {\n\t\t\t\t\t\tschemaErrors = errors;\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\tif (schemaErrors) {\n\t\t\t\t\t\tif (!needIds[oplog.collection]) {\n\t\t\t\t\t\t\tneedIds[oplog.collection] = [oplog.doc['_id']];\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (!needIds[oplog.collection].filter(a => a === oplog.doc['_id'])[0]) {\n\t\t\t\t\t\t\t\tneedIds[oplog.collection].push(oplog.doc['_id']);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tfor (let i = 0; i < Object.keys(needIds).length; i++) {\n\t\t\t\t\tlet collection = Object.keys(needIds)[i];\n\t\t\t\t\tlet docs = await ResolveIOServer.getMainDB().model(collection).find({_id: {$in: needIds[collection]}});\n\n\t\t\t\t\tneedIds[collection].forEach(id_doc => {\n\t\t\t\t\t\tif (uniqueOplog.filter(a => a.doc && a.doc._id === id_doc)[0]) {\n\t\t\t\t\t\t\tif (docs.filter(a => a._id === id_doc)[0]) {\n\t\t\t\t\t\t\t\tuniqueOplog.filter(a => a.doc && a.doc._id === id_doc).forEach(op => {\n\t\t\t\t\t\t\t\t\top.doc = docs.filter(a => a._id === id_doc)[0];\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tuniqueOplog.splice(uniqueOplog.findIndex(a => a.doc && a.doc._id === id_doc)[0], 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Oplog Doc Error Detected - ' + that.serverConfig['CLIENT_NAME'], 'id_doc: ' + id_doc + ', UniqueOplogs: ' + JSON.stringify(uniqueOplog, null, 2));\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfor (let i = uniqueOplog.length - 1; i >= 0; i--) {\n\t\t\t\t\tlet oplog = uniqueOplog[i];\n\n\t\t\t\t\tfor (let j = that._subscriptions.length - 1; j >= 0; j--) {\n\t\t\t\t\t\tlet sub = that._subscriptions[j];\n\n\t\t\t\t\t\tif (sub) {\n\t\t\t\t\t\t\tif (sub.collections.includes(oplog.collection)) {\n\t\t\t\t\t\t\t\tif (sub.preSubscriptionData) {\n\t\t\t\t\t\t\t\t\tif (that._publications[sub.publication].fetchFunction(oplog.doc, sub.preSubscriptionData)) {\n\t\t\t\t\t\t\t\t\t\tif (!uniquePubs.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData) && JSON.stringify(oplog) === JSON.stringify(a.oplog)).length) {\n\t\t\t\t\t\t\t\t\t\t\tif (!sub.clients.length) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat._subscriptions.splice(j, 1);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\tawait ActiveSubscriptions.deleteOne({\n\t\t\t\t\t\t\t\t\t\t\t\t\t$and: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{publication: sub.publication},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{subData: JSON.stringify(sub.subscriptionData)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t}).exec();\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\tsub['oplog'] = oplog;\n\t\t\t\t\t\t\t\t\t\t\t\tuniquePubs.push(deepCopy(sub));\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tif (this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)) >= 0) {\n\t\t\t\t\t\t\t\t\t\t\t\tthis._nodeCache.del(this._subCache.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData))[0].id);\n\t\t\t\t\t\t\t\t\t\t\t\tthis._subCache.splice(this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)), 1);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (that._publications[sub.publication].preFunction) {\n\t\t\t\t\t\t\t\t\tif (!sub.clients.length) {\n\t\t\t\t\t\t\t\t\t\tthat._subscriptions.splice(j, 1);\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tawait ActiveSubscriptions.deleteOne({\n\t\t\t\t\t\t\t\t\t\t\t$and: [\n\t\t\t\t\t\t\t\t\t\t\t\t{publication: sub.publication},\n\t\t\t\t\t\t\t\t\t\t\t\t{subData: JSON.stringify(sub.subscriptionData)}\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t}).exec();\n\n\t\t\t\t\t\t\t\t\t\tif (this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)) >= 0) {\n\t\t\t\t\t\t\t\t\t\t\tthis._nodeCache.del(this._subCache.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData))[0].id);\n\t\t\t\t\t\t\t\t\t\t\tthis._subCache.splice(this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)), 1);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tif (!uniquePubs.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData) && JSON.stringify(oplog) === JSON.stringify(a.oplog)).length) {\n\t\t\t\t\t\t\t\t\t\t\tsub['oplog'] = oplog;\n\t\t\t\t\t\t\t\t\t\t\tuniquePubs.push(deepCopy(sub));\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tif (that._publications[sub.publication].fetchFunction) {\n\t\t\t\t\t\t\t\t\t\tif (that._publications[sub.publication].fetchFunction(oplog.doc, ...sub.subscriptionData)) {\n\t\t\t\t\t\t\t\t\t\t\tif (!uniquePubs.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)).length) {\n\t\t\t\t\t\t\t\t\t\t\t\tif (!sub.clients.length) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat._subscriptions.splice(j, 1);\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\tawait ActiveSubscriptions.deleteOne({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$and: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{publication: sub.publication},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{subData: JSON.stringify(sub.subscriptionData)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t}).exec();\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)) >= 0) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis._nodeCache.del(this._subCache.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData))[0].id);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis._subCache.splice(this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)), 1);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\tsub['oplog'] = oplog;\n\t\t\t\t\t\t\t\t\t\t\t\t\tuniquePubs.push(deepCopy(sub));\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tif (!uniquePubs.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)).length) {\n\t\t\t\t\t\t\t\t\t\t\tif (!sub.clients.length) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat._subscriptions.splice(j, 1);\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\tawait ActiveSubscriptions.deleteOne({\n\t\t\t\t\t\t\t\t\t\t\t\t\t$and: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{publication: sub.publication},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{subData: JSON.stringify(sub.subscriptionData)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t}).exec();\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)) >= 0) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis._nodeCache.del(this._subCache.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData))[0].id);\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis._subCache.splice(this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)), 1);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\tsub['oplog'] = oplog;\n\t\t\t\t\t\t\t\t\t\t\t\tuniquePubs.push(deepCopy(sub));\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\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}\n\n\t\t\t\tfor (let i = 0; i < uniquePubs.length; i++) {\n\t\t\t\t\tlet pub = uniquePubs[i];\n\t\t\t\t\tawait this.checkPubsForChanges(pub['oplog'].collection, pub['oplog'].doc, pub['oplog'].type, pub);\n\t\t\t\t}\n\t\t\t}\n\t\t}, 250);\n\t}\n\n\tprivate async resendPubsForDelete(collection: string) {\n\t\tlet that = this;\n\n\t\tlet subCopy = deepCopy(that._subscriptions.filter(a => a.collections.includes(collection)));\n\n\t\tfor (let jj = this._subCache.length - 1; jj >= 0; jj--) {\n\t\t\tif (this._subCache[jj].collection === collection || subCopy.some(a => a.publication === this._subCache[jj].publication)) {\n\t\t\t\tthis._nodeCache.del(this._subCache[jj].id);\n\n\t\t\t\tthis._subCache.splice(jj, 1);\n\t\t\t}\n\t\t}\n\n\t\tfor (let zz = subCopy.length - 1; zz >= 0; zz--) {\n\t\t\tlet sub = subCopy[zz];\n\n\t\t\tif (that._publications[sub.publication].ws_specific) {\n\t\t\t\tfor (let aa = 0; aa < sub.clients.length; aa++) {\n\t\t\t\t\tlet client = sub.clients[aa];\n\t\t\t\t\tfor (let bb = 0; bb < that._wss.clients.size; bb++) {\n\t\t\t\t\t\tlet ws = Array.from(that._wss.clients)[bb];\n\t\t\t\t\t\tif (ws['id_socket'] === client.id_socket) {\n\t\t\t\t\t\t\tawait that.sendPubDataOnce(ws, client.messageId, sub, 'delete', collection);\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\tif (!sub.clients.length) {\n\t\t\t\t\tif (that._subscriptions.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)) >= 0) {\n\t\t\t\t\t\tthat._subscriptions.splice(that._subscriptions.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)), 1);\n\t\t\t\t\t}\n\n\t\t\t\t\tawait ActiveSubscriptions.deleteOne({\n\t\t\t\t\t\t$and: [\n\t\t\t\t\t\t\t{publication: sub.publication},\n\t\t\t\t\t\t\t{subData: JSON.stringify(sub.subscriptionData)}\n\t\t\t\t\t\t]\n\t\t\t\t\t}).exec();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tawait that.sendPubData(sub, 'delete', collection);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Document: Inserted/Modified Document\n\t// Collection: Collection Document Lives In\n\t// Check to see if any pubs need to refetch due to Mongo operation\n\tprivate async checkPubsForChanges(collection: string, document: Object, type: string, sub: ActiveSubscriptionModel) {\n\t\tlet that = this;\n\n\t\tif (sub.preSubscriptionData) {\n\t\t\tif (that._publications[sub.publication].fetchFunction(document, sub.preSubscriptionData)) {\n\t\t\t\tif (this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)) >= 0) {\n\t\t\t\t\tthis._nodeCache.del(this._subCache.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData))[0].id);\n\t\t\t\t\tthis._subCache.splice(this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)), 1);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tawait that.sendPubData(sub, type, collection);\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (that._publications[sub.publication].preFunction) {\n\t\t\tsub.preSubscriptionData = await that._publications[sub.publication].preFunction(sub.subscriptionData);\n\t\t\tif (that._publications[sub.publication].fetchFunction(document, sub.preSubscriptionData)) {\n\t\t\t\tif (this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)) >= 0) {\n\t\t\t\t\tthis._nodeCache.del(this._subCache.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData))[0].id);\n\t\t\t\t\tthis._subCache.splice(this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)), 1);\n\t\t\t\t}\n\n\t\t\t\tawait that.sendPubData(sub, type, collection);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (that._publications[sub.publication].ws_specific) {\n\t\t\t\tif (this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)) >= 0) {\n\t\t\t\t\tthis._nodeCache.del(this._subCache.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData))[0].id);\n\t\t\t\t\tthis._subCache.splice(this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)), 1);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor (let k = 0; k < sub.clients.length; k++) {\n\t\t\t\t\tlet client = sub.clients[k];\n\t\t\t\t\tif (that._publications[sub.publication].fetchFunction) {\n\t\t\t\t\t\tif (that._publications[sub.publication].fetchFunction(document, client.id_user, ...sub.subscriptionData)) {\n\t\t\t\t\t\t\tfor (let j = 0; j < that._wss.clients.size; j++) {\n\t\t\t\t\t\t\t\tlet ws = Array.from(that._wss.clients)[j];\n\t\t\t\t\t\t\t\tif (ws['id_socket'] === client.id_socket) {\n\t\t\t\t\t\t\t\t\tawait that.sendPubDataOnce(ws, client.messageId, sub, type, collection);\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\tfor (let j = 0; j < that._wss.clients.size; j++) {\n\t\t\t\t\t\t\tlet ws = Array.from(that._wss.clients)[j];\n\t\t\t\t\t\t\tif (ws['id_socket'] === client.id_socket) {\n\t\t\t\t\t\t\t\tawait that.sendPubDataOnce(ws, client.messageId, sub, type, collection);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (that._publications[sub.publication].fetchFunction) {\n\t\t\t\t\tif (that._publications[sub.publication].fetchFunction(document, ...sub.subscriptionData)) {\n\t\t\t\t\t\tif (this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)) >= 0) {\n\t\t\t\t\t\t\tthis._nodeCache.del(this._subCache.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData))[0].id);\n\t\t\t\t\t\t\tthis._subCache.splice(this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)), 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tawait that.sendPubData(sub, type, collection);\n\t\t\t\t\t}\n\t\t\t\t\t// else\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)) >= 0) {\n\t\t\t\t\t\tthis._nodeCache.del(this._subCache.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData))[0].id);\n\t\t\t\t\t\tthis._subCache.splice(this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)), 1);\n\t\t\t\t\t}\n\n\t\t\t\t\tawait that.sendPubData(sub, type, collection);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate checkSupportPubsForChanges(collection: string, document: Object) {\n\t\tlet that = this;\n\n\t\tthat._subscriptions.filter(a => a.collections.includes(collection)).forEach(async sub => {\n\t\t\tlet schemaErrors = null;\n\n\t\t\ttry {\n\t\t\t\tResolveIOServer.getSupportDB().model(collection)['simplschema'].validate(document);\n\t\t\t}\n\t\t\tcatch (errors) {\n\t\t\t\tschemaErrors = errors;\n\t\t\t}\n\n\t\t\tif (schemaErrors) {\n\t\t\t\tdocument = await ResolveIOServer.getSupportDB().model(collection).findById(document['_id']);\n\t\t\t}\n\n\t\t\tif (sub.preSubscriptionData) {\n\t\t\t\tif (that._publications[sub.publication].fetchFunction(document, sub.preSubscriptionData)) {\n\t\t\t\t\tthat.sendPubData(sub, 'support', collection);\n\n\t\t\t\t\tsub.preSubscriptionData = await that._publications[sub.publication].preFunction(...sub.subscriptionData);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (that._publications[sub.publication].preFunction) {\n\t\t\t\tsub.preSubscriptionData = await that._publications[sub.publication].preFunction(...sub.subscriptionData);\n\t\t\t\tif (that._publications[sub.publication].fetchFunction(document, sub.preSubscriptionData)) {\n\t\t\t\t\tthat.sendPubData(sub, 'support', collection);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (that._publications[sub.publication].ws_specific) {\n\t\t\t\t\tsub.clients.forEach(client => {\n\t\t\t\t\t\tif (that._publications[sub.publication].fetchFunction) {\n\t\t\t\t\t\t\tif (that._publications[sub.publication].fetchFunction(document, client.id_user, ...sub.subscriptionData)) {\n\t\t\t\t\t\t\t\tthat._wss.clients.forEach(ws => {\n\t\t\t\t\t\t\t\t\tif (ws['id_socket'] === client.id_socket) {\n\t\t\t\t\t\t\t\t\t\tthat.sendPubDataOnce(ws, client.messageId, sub, 'support', collection);\n\t\t\t\t\t\t\t\t\t}\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\telse {\n\t\t\t\t\t\t\tthat._wss.clients.forEach(ws => {\n\t\t\t\t\t\t\t\tif (ws['id_socket'] === client.id_socket) {\n\t\t\t\t\t\t\t\t\tthat.sendPubDataOnce(ws, client.messageId, sub, 'support', collection);\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}\n\t\t\t\telse {\n\t\t\t\t\tif (that._publications[sub.publication].fetchFunction) {\n\t\t\t\t\t\tif (that._publications[sub.publication].fetchFunction(document, ...sub.subscriptionData)) {\n\t\t\t\t\t\t\tthat.sendPubData(sub, 'support', collection);\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\tthat.sendPubData(sub, 'support', collection);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t// Fetch pub once, send to all clients linked to this pub\n\tprivate sendPubDataOnce(ws: WebSocket, messageId: number, subscription: ActiveSubscriptionModel, type: string, collection: string) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tlet that = this;\n\n\t\t\tif (!that._publications[subscription.publication].ws_specific) { // Same pub for all users\n\t\t\t\tif (this._subCache.some(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData))) {\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: this._nodeCache.get(this._subCache.filter(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData))[0].id)\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.sendWS(ws, serverRes);\n\n\t\t\t\t\tresolve(true);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (subscription.publication !== 'superadminAPM' && subscription.publication !== 'loggedInUsers') {\n\t\t\t\t\t\tthat._mainServer.getMethodManager().callMethodInternal('insertSubscriptionLog', type, subscription.publication, collection, JSON.stringify(subscription.subscriptionData));\n\t\t\t\t\t}\n\n\t\t\t\t\tthat._publications[subscription.publication].function.call(Object.assign({}, that, SubscriptionManager.prototype), ...subscription.subscriptionData).then(res => {\n\t\t\t\t\t\tlet nodeCacheSize = this._nodeCache.getStats().vsize;\n\n\t\t\t\t\t\tif (nodeCacheSize > 500000000) {\n\t\t\t\t\t\t\tlet neededSizeIndex = 0;\n\n\t\t\t\t\t\t\tfor (let zz = 0; zz < this._subCache.length; zz++) {\n\t\t\t\t\t\t\t\tthis._nodeCache.del(this._subCache[zz].id);\n\n\t\t\t\t\t\t\t\tif (this._nodeCache.getStats().vsize < 500000000) {\n\t\t\t\t\t\t\t\t\tneededSizeIndex = zz;\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\t\t\t\t\t\t\t// console.log('Cache1: ' + 'Too Big - ' + subscription.publication + ' - ' + getBinarySize(JSON.stringify(this._subCache)));\n\t\t\t\t\t\t\tthis._subCache.splice(0, neededSizeIndex);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this._subCache.some(a => a.collection === collection && a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData))) {\n\t\t\t\t\t\t\tthis._subCache.splice(this._subCache.findIndex(a => a.collection === collection && a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)), 1);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet cacheId = this._cacheId++;\n\t\t\t\t\t\tthis._nodeCache.set(cacheId, res);\n\t\t\t\t\t\tthis._subCache.push({collection: collection, publication: subscription.publication, subscriptionData: subscription.subscriptionData, id: cacheId});\n\n\t\t\t\t\t\t// console.log('Cache1: ' + 'Create - ' + subscription.publication + ' - ' + getBinarySize(JSON.stringify(this._subCache)));\n\n\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\tdata: res\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\n\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\t\tdata: err\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\telse { // Pub is different for each user (Look at users publication) [MUCH SLOWER, RE-RUNS FOR EACH USER]\n\t\t\t\tthat._publications[subscription.publication].function.call(Object.assign({}, that, SubscriptionManager.prototype), ws['id_user'], ...subscription.subscriptionData).then(res => {\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: res\n\t\t\t\t\t};\n\n\t\t\t\t\t// console.log('Send Pub Data Once 2', new Date(), 'Success', subscription);\n\n\t\t\t\t\tthis.sendWS(ws, serverRes);\n\n\t\t\t\t\tresolve(true);\n\n\t\t\t\t}, err => {\n\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\tdata: err\n\t\t\t\t\t};\n\n\t\t\t\t\t// console.log('Send Pub Data Once 2', new Date(), 'Error', subscription);\n\n\t\t\t\t\tthis.sendWS(ws, serverRes);\n\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t// Fetch pub once, send to all clients linked to this pub\n\tprivate sendPubData(subscription: ActiveSubscriptionModel, type: string, collection: string) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tlet that = this;\n\n\t\t\tif (this._subCache.some(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData))) {\n\t\t\t\tsubscription.clients.forEach(client => {\n\t\t\t\t\tthat._wss.clients.forEach(ws => {\n\t\t\t\t\t\tif (ws['id_socket'] === client.id_socket) {\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: this._nodeCache.get(this._subCache.filter(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData))[0].id)\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// console.log('Cache: ' + 'Found - ' + subscription.publication + ' - ' + getBinarySize(JSON.stringify(this._subCache)));\n\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\n\t\t\t\t\t\t\tresolve(true);\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\tif (subscription.publication !== 'superadminAPM' && subscription.publication !== 'loggedInUsers') {\n\t\t\t\t\tthat._mainServer.getMethodManager().callMethodInternal('insertSubscriptionLog', type, subscription.publication, collection, JSON.stringify(subscription.subscriptionData));\n\t\t\t\t}\n\n\t\t\t\tthat._publications[subscription.publication].function.call(Object.assign({}, that, SubscriptionManager.prototype), ...subscription.subscriptionData).then(res => {\n\t\t\t\t\tlet nodeCacheSize = this._nodeCache.getStats().vsize;\n\t\t\t\t\t\n\t\t\t\t\tif (nodeCacheSize > 500000000) {\n\t\t\t\t\t\tlet neededSizeIndex = 0;\n\n\t\t\t\t\t\tfor (let zz = 0; zz < this._subCache.length; zz++) {\n\t\t\t\t\t\t\tthis._nodeCache.del(this._subCache[zz].id);\n\n\t\t\t\t\t\t\tif (this._nodeCache.getStats().vsize < 500000000) {\n\t\t\t\t\t\t\t\tneededSizeIndex = zz;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// console.log('Cache: ' + 'Too Big - ' + subscription.publication + ' - ' + getBinarySize(JSON.stringify(this._subCache)));\n\t\t\t\t\t\tthis._subCache.splice(0, neededSizeIndex);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._subCache.some(a => a.collection === collection && a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData))) {\n\t\t\t\t\t\tthis._subCache.splice(this._subCache.findIndex(a => a.collection === collection && a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)), 1);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet cacheId = this._cacheId++;\n\t\t\t\t\tthis._nodeCache.set(cacheId, res);\n\t\t\t\t\tthis._subCache.push({collection: collection, publication: subscription.publication, subscriptionData: subscription.subscriptionData, id: cacheId});\n\n\t\t\t\t\t// console.log('Cache: ' + 'Create - ' + subscription.publication + ' - ' + getBinarySize(JSON.stringify(this._subCache)));\n\n\t\t\t\t\tsubscription.clients.forEach(client => {\n\t\t\t\t\t\tthat._wss.clients.forEach(ws => {\n\t\t\t\t\t\t\tif (ws['id_socket'] === client.id_socket) {\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\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\t\t\t\t\t});\n\n\t\t\t\t\tresolve(true);\n\t\t\t\t}, err => {\n\t\t\t\t\tsubscription.clients.forEach(client => {\n\t\t\t\t\t\tthat._wss.clients.forEach(ws => {\n\t\t\t\t\t\t\tif (ws['id_socket'] === client.id_socket) {\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: true,\n\t\t\t\t\t\t\t\t\tdata: err\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\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\t\t\t\t\t});\n\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate sendWS(ws: WebSocket, data: ServerResponseModel) {\n\t\tthis._sendQueue.splice(0, 0, {\n\t\t\tid_ws: ws['id_socket'],\n\t\t\tdata: data\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 { ServerResponseModel } from '../models/server-response.model';\nimport { ActiveSubscriptionModel, SubscriptionModel } from '../models/subscription.model';\nimport * as WebSocket from 'ws';\nimport * as MongoOplog from 'mongo-oplog';\nimport { loadLogPublications } from '../publications/logs';\nimport { loadAppStatusPublications } from '../publications/app-status';\nimport { loadAppVersionPublications } from '../publications/app-version';\nimport { Types } from 'mongoose';\nimport { loadFilePublications } from '../publications/files';\nimport { loadSuperAdminPublications } from '../publications/super-admin';\nimport { LoggedInUsers } from '../collections/logged-in-users.collection';\nimport { loadCronJobPublications } from '../publications/cron-jobs';\nimport { loadFlagsPublications } from '../publications/flags';\nimport { loadMethodCallsPublications } from '../publications/method-calls';\nimport { loadMethodResponsePublications } from '../publications/method-responses';\nimport { loadSupportTicketPublications } from '../publications/support-tickets';\nimport ResolveIOMainServer from '../server-app';\nimport { ResolveIOServer } from '../index';\nimport { loadNotificationPublications } from '../publications/notifications';\nimport { deepCopy } from '../util/common';\nimport { BillingLoggedInUsers } from '../collections/billing-logged-in-users.collection';\nimport * as moment from 'moment';\nimport { loadBillingLoggedInUsersPublications } from '../publications/billing-logged-in-users';\nimport { loadReportBuilderReportPublications } from '../publications/report-builder-reports';\nimport { LoggedInUserModel } from '../models/logged-in-users.model';\n\nimport * as NodeCache from 'node-cache';\n\nexport class SubscriptionManager {\n\n\tprivate _mainServer: ResolveIOMainServer;\n\tprivate _publications: SubscriptionModel = {};\n\tprivate _subscriptions: ActiveSubscriptionModel[] = [];\n\tprivate _wss: WebSocket.Server;\n\tprivate _loggedInUsers: LoggedInUserModel[] = [];\n\t\n\tprivate _oplogQueue = [];\n\tprivate _subCache = [];\n\tprivate _nodeCache;\n\tprivate _cacheId = 0;\n\tprivate _sendQueue = [];\n\tprivate _runningQueue = false;\n\n\tprivate _initOplogStart = false;\n\tprivate _initOplogSupportStart = false;\n\n\tprivate serverConfig;\n\n\tconstructor(mainServer, wss: WebSocket.Server, serverConfig) {\n\t\tthis._mainServer = mainServer;\n\n\t\tthis._nodeCache = new NodeCache( { stdTTL: 0, checkperiod: 0 } );\n\n\t\tthis.serverConfig = serverConfig;\n\t\tthis._wss = wss;\n\n\t\t// Publications\n\t\tloadSuperAdminPublications(this);\n\t\tloadAppVersionPublications(this);\n\t\tloadAppStatusPublications(this);\n\t\tloadLogPublications(this);\n\t\tloadFilePublications(this);\n\t\tloadCronJobPublications(this);\n\t\tloadFlagsPublications(this);\n\t\tloadMethodCallsPublications(this);\n\t\tloadMethodResponsePublications(this);\n\t\tloadBillingLoggedInUsersPublications(this);\n\t\tloadNotificationPublications(this);\n\t\tloadReportBuilderReportPublications(this);\n\n\t\tthis.tailOpLog();\n\t\tthis.runOpLogQueue();\n\n\t\tif (ResolveIOServer.getSupportDB()) {\n\t\t\tloadSupportTicketPublications(this);\n\t\t\t\n\t\t\tthis.tailOpLogSupport();\n\t\t}\n\n\t\tsetInterval(() => {\n\t\t\tconsole.log(new Date());\n\t\t\tconsole.log('Sub Cache Length: ' + this._subCache.length);\n\t\t\tconsole.log('Sub Length: ' + this._subscriptions.length);\n\t\t\tconsole.log(this._nodeCache.getStats().vsize);\n\t\t}, 43200000);\n\n\t\tsetInterval(() => {\n\t\t\tif (!this._runningQueue) {\n\t\t\t\tif (this._sendQueue.length) {\n\t\t\t\t\tthis._runningQueue = true;\n\t\t\t\t\tfor (let i = this._sendQueue.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tlet ws = this._mainServer.getWS(this._sendQueue[i].id_ws);\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tif (ws.bufferedAmount < 20480) {\n\t\t\t\t\t\t\t\tlet sendItem = this._sendQueue.pop();\n\t\t\t\t\t\t\t\tws.send(JSON.stringify(sendItem.data), (error) => {\n\t\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\t\tconsole.log('Error on WS: ', error);\n\t\t\t\t\t\t\t\t\t\tthis.unsubscribeAll(ws);\n\t\t\t\t\t\t\t\t\t}\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\telse {\n\t\t\t\t\t\t\tthis._sendQueue.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._runningQueue = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}, 25);\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 || moment().diff(moment(loggedInUser.date), 'seconds') >= 60) {\n\t\t\t\t\tif (this._mainServer.getWS(loggedInUser.id_ws)) {\n\t\t\t\t\t\tthis.unsubscribeAll(this._mainServer.getWS(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\tif (await LoggedInUsers.findById(loggedInUser._id)) {\n\t\t\t\t\t\t\tawait LoggedInUsers.deleteOne({_id: loggedInUser._id}).exec();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._loggedInUsers.splice(i, 1);\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}, 60000);\n\t}\n\n\t// Add all files to publications private object\n\tpublic publications(method: SubscriptionModel) {\n\t\tthis._publications = Object.assign(this._publications, method);\n\t}\n\n\tpublic async loggedInLatency(ws: WebSocket) {\n\t\tlet date = new Date();\n\n\t\tlet loggedInUser = this._loggedInUsers.filter(a => a.id_ws === ws['id_socket'])[0];\n\n\t\tif (loggedInUser) {\n\t\t\tloggedInUser.date = date;\n\t\t}\n\n\t\tLoggedInUsers.findOneAndUpdate({id_ws: ws['id_socket']}, {$set: {latency: ws['latency'], date: date}}).exec((err, res) => {\n\t\t\tif (err) {\n\t\t\t\tthis.unsubscribeAll(ws);\n\t\t\t}\n\t\t});\n\t}\n\n\t// Subscribe to publication\n\tpublic async subscribe(messageDate: Date, ws: WebSocket, messageId: number, publication: string, ...subscriptionData: any[]) {\n\t\tlet that = this;\n\n\t\tlet pub = that._publications[publication];\n\n\t\tif (!pub) {\n\t\t\tconsole.error('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('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('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\t\t\t\t\t\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('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\tlet sub = that._subscriptions.filter(a => a.publication === publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscriptionData))[0];\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\tsub.clients.push({\n\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\tid_socket: ws['id_socket']\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\tthat._subscriptions.push({\n\t\t\t\t\tpublication: publication,\n\t\t\t\t\tsubscriptionData: subscriptionData,\n\t\t\t\t\tcollections: that.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}]\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!sub) {\n\t\t\t\tsub = that._subscriptions.filter(a => a.publication === publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscriptionData))[0];\n\t\t\t}\n\n\t\t\t// console.log('Subscribe', new Date(), 'Success', sub);\n\n\t\t\t// Send pub data to client who just subscribed only, don't want to send to existing clients since nothing has changed\n\t\t\tthat.sendPubDataOnce(ws, messageId, sub, 'newSub', that.getPublicationCollections(publication)[0]);\n\n\t\t\tif (that._publications[sub.publication].preFunction && !sub.preSubscriptionData) {\n\t\t\t\tsub.preSubscriptionData = await that._publications[sub.publication].preFunction(...sub.subscriptionData);\n\t\t\t}\n\t\t}\n\n\t\tif (publication === 'appversion') {\n\t\t\tlet newLoggedInUser = {\n\t\t\t\t_id: Types.ObjectId().toHexString(),\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\n\t\t\tthis._loggedInUsers.push(newLoggedInUser);\n\n\t\t\tLoggedInUsers.create(newLoggedInUser);\n\n\t\t\tif (ws['user'] !== 'Admin' && ResolveIOServer.getSupportDB()) {\n\t\t\t\tlet begDate = moment().startOf('month');\n\t\t\t\tlet endDate = moment().endOf('month');\n\n\t\t\t\tlet billUser = await BillingLoggedInUsers.findOne({\n\t\t\t\t\t$and: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclient: ResolveIOServer.getClientName()\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid_user: ws['id_user']\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdate: {$gte: begDate}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdate: {$lte: endDate}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t});\n\n\t\t\t\tif (!billUser) {\n\t\t\t\t\tBillingLoggedInUsers.create({\n\t\t\t\t\t\t_id: Types.ObjectId().toHexString(),\n\t\t\t\t\t\t__v: 0,\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tuser: ws['user'],\n\t\t\t\t\t\tdate: new Date(),\n\t\t\t\t\t\tclient: ResolveIOServer.getClientName()\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Unsubscribe from publication \n\tpublic async unsubscribe(messageDate: Date, ws: WebSocket, messageId: number, publication: string, ...subscriptionData: any[]) {\n\t\tlet that = this;\n\n\t\t// console.log('Before');\n\t\t// console.dir(this._subscriptions.map(a => a.publication));\n\n\t\tif (!that._publications[publication]) {\n\t\t\tconsole.log('No Publication: ' + publication);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tlet sub = that._subscriptions.filter(a => a.publication === publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscriptionData))[0];\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\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.log(ws['user'] + ' - Did not find sub on unsubscribe - publication: ' + publication + ', subData: ' + JSON.stringify(subscriptionData, null, 2));\n\t\t\t}\n\t\t}\n\t}\n\n\t// Unsubscribe from publication\n\tpublic async unsubscribeAll(ws: WebSocket) {\n\t\tlet that = this;\n\n\t\t// console.log('Before');\n\t\t// console.dir(this._subscriptions.map(a => a.publication));\n\n\t\tlet loggedInUser = await LoggedInUsers.findOne({id_ws: ws['id_socket']});\n\n\t\tif (loggedInUser) {\t\n\t\t\tif (this._loggedInUsers.map(a => a._id).indexOf(loggedInUser._id) >= 0) {\n\t\t\t\tthis._loggedInUsers.splice(this._loggedInUsers.map(a => a._id).indexOf(loggedInUser._id), 1);\n\t\t\t}\n\t\t\t\n\t\t\tLoggedInUsers.deleteOne({_id: loggedInUser._id}).exec();\n\t\t}\n\n\t\tlet userSubs = that._subscriptions.filter(a => a.clients.some(b => b.id_user === ws['id_user'] && b.id_socket === ws['id_socket']));\n\n\t\tfor (let i = userSubs.length - 1; i >= 0; i--) {\n\t\t\tlet sub = userSubs[i];\n\n\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\tif (sub.clients[j].id_socket === ws['id_socket']) {\n\t\t\t\t\tsub.clients.splice(j, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tws.terminate();\n\n\t\t// console.log('After');\n\t\t// console.dir(this._subscriptions.map(a => a.publication));\n\t}\n\n\t// Get publication collection\n\tprivate getPublicationCollections(publication: string) {\n\t\treturn this._publications[publication].collections;\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 tailOpLog() {\n\t\tlet that = this;\n\n\t\tconst oplog = MongoOplog(that.serverConfig['OPLOG_URL']);\n\t\toplog.tail().then(() => {\n\t\t\tconsole.log('tail started');\n\t\t\tthis._initOplogStart = true;\n\t\t}, err => {\n\t\t\tconsole.log(err);\n\t\t});\n\t\t\n\t\toplog.on('insert', doc => {\t\t\t\n\t\t\tlet nsArray = doc.ns.split('.');\n\t\t\tlet database = nsArray[0];\n\n\t\t\tif (this.serverConfig['DATABASE'] === database) {\n\t\t\t\tlet collection = nsArray[1];\n\n\t\t\t\tif (nsArray[2]) {\n\t\t\t\t\tcollection += '.' + nsArray[2];\n\t\t\t\t}\n\n\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t}\n\t\t\t\telse if (collection === 'queue-methods') {\n\t\t\t\t\tthis._mainServer.getQueueManager().runMethodQueue();\n\t\t\t\t}\n\t\t\t\telse if (collection === 'queue-responses') {\n\t\t\t\t\tthis._mainServer.getQueueManager().runMethodResponse();\n\t\t\t\t}\n\t\t\t\telse if (collection === 'support-tickets' && this.serverConfig['ROOT_URL'] !== 'http://localhost:4200') {\n\t\t\t\t\tthis._mainServer.getMethodManager().callMethodInternal('sendSupportTicketEmail', doc.o._id);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (!collection.endsWith('.versions') && !collection.startsWith('system.')) {\n\t\t\t\t\tthis._oplogQueue.push({\n\t\t\t\t\t\ttype: 'insert',\n\t\t\t\t\t\tcollection: collection,\n\t\t\t\t\t\tdoc: doc.o\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\toplog.on('update', doc => {\t\t\t\n\t\t\tlet nsArray = doc.ns.split('.');\n\t\t\tlet database = nsArray[0];\n\n\t\t\tif (this.serverConfig['DATABASE'] === database) {\n\t\t\t\tlet collection = nsArray[1];\n\n\t\t\t\tif (nsArray[2]) {\n\t\t\t\t\tcollection += '.' + nsArray[2];\n\t\t\t\t}\n\n\t\t\t\tdoc.o['_id'] = doc.o2['_id'];\n\n\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t}\n\n\t\t\t\tif (!collection.endsWith('.versions') && !collection.startsWith('system.')) {\n\t\t\t\t\tthis._oplogQueue.push({\n\t\t\t\t\t\ttype: 'update',\n\t\t\t\t\t\tcollection: collection,\n\t\t\t\t\t\tdoc: doc.o\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\toplog.on('delete', doc => {\n\t\t\tlet nsArray = doc.ns.split('.');\n\t\t\tlet database = nsArray[0];\n\n\t\t\tif (this.serverConfig['DATABASE'] === database) {\n\t\t\t\tlet collection = nsArray[1];\n\n\t\t\t\tif (nsArray[2]) {\n\t\t\t\t\tcollection += '.' + nsArray[2];\n\t\t\t\t}\n\n\t\t\t\tthat.resendPubsForDelete(collection);\n\n\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\toplog.on('error', error => {\n\t\t\tconsole.log('oplog error', error);\n\n\t\t\tif (this._initOplogStart) {\n\t\t\t\tprocess.exit();\n\t\t\t}\n\t\t});\n\t\t\n\t\toplog.on('end', () => {\n\t\t\tconsole.log('oplog ended');\n\n\t\t\tif (this._initOplogStart) {\n\t\t\t\tprocess.exit();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate tailOpLogSupport() {\n\t\tlet that = this;\n\n\t\tconst oplog = MongoOplog(that.serverConfig['RESOLVEIO_SUPPORT_OPLOG_URL']);\n\t\toplog.tail().then(() => {\n\t\t\tconsole.log('tail started support');\n\n\t\t\tthis._initOplogSupportStart = true;\n\t\t}, err => {\n\t\t\tconsole.log(err);\n\t\t});\n\t\t\n\t\toplog.on('insert', doc => {\t\t\t\n\t\t\tlet nsArray = doc.ns.split('.');\n\t\t\tlet database = nsArray[0];\n\n\t\t\tif (this.serverConfig['DATABASE'] === database) {\n\t\t\t\tlet collection = nsArray[1];\n\n\t\t\t\tif (nsArray[2]) {\n\t\t\t\t\tcollection += '.' + nsArray[2];\n\t\t\t\t}\n\n\t\t\t\tif (collection === 'support-tickets') {\n\t\t\t\t\tthat.checkSupportPubsForChanges(collection, doc.o);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\toplog.on('update', doc => {\t\t\t\n\t\t\tlet nsArray = doc.ns.split('.');\n\t\t\tlet database = nsArray[0];\n\n\t\t\tif (this.serverConfig['DATABASE'] === database) {\n\t\t\t\tlet collection = nsArray[1];\n\n\t\t\t\tif (nsArray[2]) {\n\t\t\t\t\tcollection += '.' + nsArray[2];\n\t\t\t\t}\n\n\t\t\t\tdoc.o['_id'] = doc.o2['_id'];\n\n\t\t\t\tif (collection === 'support-tickets') {\n\t\t\t\t\tthat.checkSupportPubsForChanges(collection, doc.o);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\toplog.on('delete', doc => {\n\t\t\tlet nsArray = doc.ns.split('.');\n\t\t\tlet database = nsArray[0];\n\n\t\t\tif (this.serverConfig['DATABASE'] === database) {\n\t\t\t\tlet collection = nsArray[1];\n\n\t\t\t\tif (nsArray[2]) {\n\t\t\t\t\tcollection += '.' + nsArray[2];\n\t\t\t\t}\n\n\t\t\t\tif (collection === 'support-tickets') {\n\t\t\t\t\tthat.resendPubsForDelete(collection);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\toplog.on('error', error => {\n\t\t\tconsole.log('oplog error support', error);\n\n\t\t\tif (this._initOplogSupportStart) {\n\t\t\t\tprocess.exit();\n\t\t\t}\n\t\t});\n\t\t\n\t\toplog.on('end', () => {\n\t\t\tconsole.log('oplog ended support');\n\n\t\t\tif (this._initOplogSupportStart) {\n\t\t\t\tprocess.exit();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate runOpLogQueue() {\n\t\tlet that = this;\n\t\tsetInterval(async () => {\n\t\t\tif (this._oplogQueue.length) {\n\t\t\t\tlet uniqueOplog = deepCopy(this._oplogQueue);\n\t\t\t\tthis._oplogQueue = [];\n\n\t\t\t\tlet uniquePubs = [];\n\n\t\t\t\tlet needIds = {};\n\n\t\t\t\tfor (let i = uniqueOplog.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (!that._subscriptions.some(a => a.collections.includes(uniqueOplog[i].collection))) {\n\t\t\t\t\t\tuniqueOplog.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tuniqueOplog.forEach(oplog => {\n\t\t\t\t\tlet schemaErrors = null;\n\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tResolveIOServer.getMainDB().model(oplog.collection)['simplschema'].validate(oplog.doc);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (errors) {\n\t\t\t\t\t\tschemaErrors = errors;\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\tif (schemaErrors) {\n\t\t\t\t\t\tif (!needIds[oplog.collection]) {\n\t\t\t\t\t\t\tneedIds[oplog.collection] = [oplog.doc['_id']];\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (!needIds[oplog.collection].filter(a => a === oplog.doc['_id'])[0]) {\n\t\t\t\t\t\t\t\tneedIds[oplog.collection].push(oplog.doc['_id']);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tfor (let i = 0; i < Object.keys(needIds).length; i++) {\n\t\t\t\t\tlet collection = Object.keys(needIds)[i];\n\t\t\t\t\tlet docs = await ResolveIOServer.getMainDB().model(collection).find({_id: {$in: needIds[collection]}});\n\n\t\t\t\t\tneedIds[collection].forEach(id_doc => {\n\t\t\t\t\t\tif (uniqueOplog.filter(a => a.doc && a.doc._id === id_doc)[0]) {\n\t\t\t\t\t\t\tif (docs.filter(a => a._id === id_doc)[0]) {\n\t\t\t\t\t\t\t\tuniqueOplog.filter(a => a.doc && a.doc._id === id_doc).forEach(op => {\n\t\t\t\t\t\t\t\t\top.doc = docs.filter(a => a._id === id_doc)[0];\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tuniqueOplog.splice(uniqueOplog.findIndex(a => a.doc && a.doc._id === id_doc)[0], 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Oplog Doc Error Detected - ' + that.serverConfig['CLIENT_NAME'], 'id_doc: ' + id_doc + ', UniqueOplogs: ' + JSON.stringify(uniqueOplog, null, 2));\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfor (let i = uniqueOplog.length - 1; i >= 0; i--) {\n\t\t\t\t\tlet oplog = uniqueOplog[i];\n\n\t\t\t\t\tfor (let j = that._subscriptions.length - 1; j >= 0; j--) {\n\t\t\t\t\t\tlet sub = that._subscriptions[j];\n\n\t\t\t\t\t\tif (sub) {\n\t\t\t\t\t\t\tif (sub.collections.includes(oplog.collection)) {\n\t\t\t\t\t\t\t\tif (sub.preSubscriptionData) {\n\t\t\t\t\t\t\t\t\tif (that._publications[sub.publication].fetchFunction(oplog.doc, sub.preSubscriptionData)) {\n\t\t\t\t\t\t\t\t\t\tif (!uniquePubs.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData) && JSON.stringify(oplog) === JSON.stringify(a.oplog)).length) {\n\t\t\t\t\t\t\t\t\t\t\tif (!sub.clients.length) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat._subscriptions.splice(j, 1);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\tsub['oplog'] = oplog;\n\t\t\t\t\t\t\t\t\t\t\t\tuniquePubs.push(deepCopy(sub));\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tif (this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)) >= 0) {\n\t\t\t\t\t\t\t\t\t\t\t\tthis._nodeCache.del(this._subCache.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData))[0].id);\n\t\t\t\t\t\t\t\t\t\t\t\tthis._subCache.splice(this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)), 1);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (that._publications[sub.publication].preFunction) {\n\t\t\t\t\t\t\t\t\tif (!sub.clients.length) {\n\t\t\t\t\t\t\t\t\t\tthat._subscriptions.splice(j, 1);\n\n\t\t\t\t\t\t\t\t\t\tif (this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)) >= 0) {\n\t\t\t\t\t\t\t\t\t\t\tthis._nodeCache.del(this._subCache.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData))[0].id);\n\t\t\t\t\t\t\t\t\t\t\tthis._subCache.splice(this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)), 1);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tif (!uniquePubs.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData) && JSON.stringify(oplog) === JSON.stringify(a.oplog)).length) {\n\t\t\t\t\t\t\t\t\t\t\tsub['oplog'] = oplog;\n\t\t\t\t\t\t\t\t\t\t\tuniquePubs.push(deepCopy(sub));\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tif (that._publications[sub.publication].fetchFunction) {\n\t\t\t\t\t\t\t\t\t\tif (that._publications[sub.publication].fetchFunction(oplog.doc, ...sub.subscriptionData)) {\n\t\t\t\t\t\t\t\t\t\t\tif (!uniquePubs.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)).length) {\n\t\t\t\t\t\t\t\t\t\t\t\tif (!sub.clients.length) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat._subscriptions.splice(j, 1);\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)) >= 0) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis._nodeCache.del(this._subCache.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData))[0].id);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis._subCache.splice(this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)), 1);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\t\tsub['oplog'] = oplog;\n\t\t\t\t\t\t\t\t\t\t\t\t\tuniquePubs.push(deepCopy(sub));\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tif (!uniquePubs.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)).length) {\n\t\t\t\t\t\t\t\t\t\t\tif (!sub.clients.length) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat._subscriptions.splice(j, 1);\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)) >= 0) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis._nodeCache.del(this._subCache.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData))[0].id);\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis._subCache.splice(this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)), 1);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\tsub['oplog'] = oplog;\n\t\t\t\t\t\t\t\t\t\t\t\tuniquePubs.push(deepCopy(sub));\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\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}\n\n\t\t\t\tfor (let i = 0; i < uniquePubs.length; i++) {\n\t\t\t\t\tlet pub = uniquePubs[i];\n\t\t\t\t\tawait this.checkPubsForChanges(pub['oplog'].collection, pub['oplog'].doc, pub['oplog'].type, pub);\n\t\t\t\t}\n\t\t\t}\n\t\t}, 250);\n\t}\n\n\tprivate async resendPubsForDelete(collection: string) {\n\t\tlet that = this;\n\n\t\tlet subCopy = deepCopy(that._subscriptions.filter(a => a.collections.includes(collection)));\n\n\t\tfor (let jj = this._subCache.length - 1; jj >= 0; jj--) {\n\t\t\tif (this._subCache[jj].collection === collection || subCopy.some(a => a.publication === this._subCache[jj].publication)) {\n\t\t\t\tthis._nodeCache.del(this._subCache[jj].id);\n\n\t\t\t\tthis._subCache.splice(jj, 1);\n\t\t\t}\n\t\t}\n\n\t\tfor (let zz = subCopy.length - 1; zz >= 0; zz--) {\n\t\t\tlet sub = subCopy[zz];\n\n\t\t\tif (that._publications[sub.publication].ws_specific) {\n\t\t\t\tfor (let aa = 0; aa < sub.clients.length; aa++) {\n\t\t\t\t\tlet client = sub.clients[aa];\n\t\t\t\t\tfor (let bb = 0; bb < that._wss.clients.size; bb++) {\n\t\t\t\t\t\tlet ws = Array.from(that._wss.clients)[bb];\n\t\t\t\t\t\tif (ws['id_socket'] === client.id_socket) {\n\t\t\t\t\t\t\tawait that.sendPubDataOnce(ws, client.messageId, sub, 'delete', collection);\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\tif (!sub.clients.length) {\n\t\t\t\t\tif (that._subscriptions.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)) >= 0) {\n\t\t\t\t\t\tthat._subscriptions.splice(that._subscriptions.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)), 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tawait that.sendPubData(sub, 'delete', collection);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Document: Inserted/Modified Document\n\t// Collection: Collection Document Lives In\n\t// Check to see if any pubs need to refetch due to Mongo operation\n\tprivate async checkPubsForChanges(collection: string, document: Object, type: string, sub: ActiveSubscriptionModel) {\n\t\tlet that = this;\n\n\t\tif (sub.preSubscriptionData) {\n\t\t\tif (that._publications[sub.publication].fetchFunction(document, sub.preSubscriptionData)) {\n\t\t\t\tif (this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)) >= 0) {\n\t\t\t\t\tthis._nodeCache.del(this._subCache.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData))[0].id);\n\t\t\t\t\tthis._subCache.splice(this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)), 1);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tawait that.sendPubData(sub, type, collection);\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (that._publications[sub.publication].preFunction) {\n\t\t\tsub.preSubscriptionData = await that._publications[sub.publication].preFunction(sub.subscriptionData);\n\t\t\tif (that._publications[sub.publication].fetchFunction(document, sub.preSubscriptionData)) {\n\t\t\t\tif (this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)) >= 0) {\n\t\t\t\t\tthis._nodeCache.del(this._subCache.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData))[0].id);\n\t\t\t\t\tthis._subCache.splice(this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)), 1);\n\t\t\t\t}\n\n\t\t\t\tawait that.sendPubData(sub, type, collection);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (that._publications[sub.publication].ws_specific) {\n\t\t\t\tif (this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)) >= 0) {\n\t\t\t\t\tthis._nodeCache.del(this._subCache.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData))[0].id);\n\t\t\t\t\tthis._subCache.splice(this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)), 1);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor (let k = 0; k < sub.clients.length; k++) {\n\t\t\t\t\tlet client = sub.clients[k];\n\t\t\t\t\tif (that._publications[sub.publication].fetchFunction) {\n\t\t\t\t\t\tif (that._publications[sub.publication].fetchFunction(document, client.id_user, ...sub.subscriptionData)) {\n\t\t\t\t\t\t\tfor (let j = 0; j < that._wss.clients.size; j++) {\n\t\t\t\t\t\t\t\tlet ws = Array.from(that._wss.clients)[j];\n\t\t\t\t\t\t\t\tif (ws['id_socket'] === client.id_socket) {\n\t\t\t\t\t\t\t\t\tawait that.sendPubDataOnce(ws, client.messageId, sub, type, collection);\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\tfor (let j = 0; j < that._wss.clients.size; j++) {\n\t\t\t\t\t\t\tlet ws = Array.from(that._wss.clients)[j];\n\t\t\t\t\t\t\tif (ws['id_socket'] === client.id_socket) {\n\t\t\t\t\t\t\t\tawait that.sendPubDataOnce(ws, client.messageId, sub, type, collection);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (that._publications[sub.publication].fetchFunction) {\n\t\t\t\t\tif (that._publications[sub.publication].fetchFunction(document, ...sub.subscriptionData)) {\n\t\t\t\t\t\tif (this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)) >= 0) {\n\t\t\t\t\t\t\tthis._nodeCache.del(this._subCache.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData))[0].id);\n\t\t\t\t\t\t\tthis._subCache.splice(this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)), 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tawait that.sendPubData(sub, type, collection);\n\t\t\t\t\t}\n\t\t\t\t\t// else\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)) >= 0) {\n\t\t\t\t\t\tthis._nodeCache.del(this._subCache.filter(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData))[0].id);\n\t\t\t\t\t\tthis._subCache.splice(this._subCache.findIndex(a => a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData)), 1);\n\t\t\t\t\t}\n\n\t\t\t\t\tawait that.sendPubData(sub, type, collection);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate checkSupportPubsForChanges(collection: string, document: Object) {\n\t\tlet that = this;\n\n\t\tthat._subscriptions.filter(a => a.collections.includes(collection)).forEach(async sub => {\n\t\t\tlet schemaErrors = null;\n\n\t\t\ttry {\n\t\t\t\tResolveIOServer.getSupportDB().model(collection)['simplschema'].validate(document);\n\t\t\t}\n\t\t\tcatch (errors) {\n\t\t\t\tschemaErrors = errors;\n\t\t\t}\n\n\t\t\tif (schemaErrors) {\n\t\t\t\tdocument = await ResolveIOServer.getSupportDB().model(collection).findById(document['_id']);\n\t\t\t}\n\n\t\t\tif (sub.preSubscriptionData) {\n\t\t\t\tif (that._publications[sub.publication].fetchFunction(document, sub.preSubscriptionData)) {\n\t\t\t\t\tthat.sendPubData(sub, 'support', collection);\n\n\t\t\t\t\tsub.preSubscriptionData = await that._publications[sub.publication].preFunction(...sub.subscriptionData);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (that._publications[sub.publication].preFunction) {\n\t\t\t\tsub.preSubscriptionData = await that._publications[sub.publication].preFunction(...sub.subscriptionData);\n\t\t\t\tif (that._publications[sub.publication].fetchFunction(document, sub.preSubscriptionData)) {\n\t\t\t\t\tthat.sendPubData(sub, 'support', collection);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (that._publications[sub.publication].ws_specific) {\n\t\t\t\t\tsub.clients.forEach(client => {\n\t\t\t\t\t\tif (that._publications[sub.publication].fetchFunction) {\n\t\t\t\t\t\t\tif (that._publications[sub.publication].fetchFunction(document, client.id_user, ...sub.subscriptionData)) {\n\t\t\t\t\t\t\t\tthat._wss.clients.forEach(ws => {\n\t\t\t\t\t\t\t\t\tif (ws['id_socket'] === client.id_socket) {\n\t\t\t\t\t\t\t\t\t\tthat.sendPubDataOnce(ws, client.messageId, sub, 'support', collection);\n\t\t\t\t\t\t\t\t\t}\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\telse {\n\t\t\t\t\t\t\tthat._wss.clients.forEach(ws => {\n\t\t\t\t\t\t\t\tif (ws['id_socket'] === client.id_socket) {\n\t\t\t\t\t\t\t\t\tthat.sendPubDataOnce(ws, client.messageId, sub, 'support', collection);\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}\n\t\t\t\telse {\n\t\t\t\t\tif (that._publications[sub.publication].fetchFunction) {\n\t\t\t\t\t\tif (that._publications[sub.publication].fetchFunction(document, ...sub.subscriptionData)) {\n\t\t\t\t\t\t\tthat.sendPubData(sub, 'support', collection);\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\tthat.sendPubData(sub, 'support', collection);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t// Fetch pub once, send to all clients linked to this pub\n\tprivate sendPubDataOnce(ws: WebSocket, messageId: number, subscription: ActiveSubscriptionModel, type: string, collection: string) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tlet that = this;\n\n\t\t\tif (!that._publications[subscription.publication].ws_specific) { // Same pub for all users\n\t\t\t\tif (this._subCache.some(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData))) {\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: this._nodeCache.get(this._subCache.filter(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData))[0].id)\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.sendWS(ws, serverRes);\n\n\t\t\t\t\tresolve(true);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (subscription.publication !== 'superadminAPM' && subscription.publication !== 'loggedInUsers') {\n\t\t\t\t\t\tthat._mainServer.getMethodManager().callMethodInternal('insertSubscriptionLog', type, subscription.publication, collection, JSON.stringify(subscription.subscriptionData));\n\t\t\t\t\t}\n\n\t\t\t\t\tthat._publications[subscription.publication].function.call(Object.assign({}, that, SubscriptionManager.prototype), ...subscription.subscriptionData).then(res => {\n\t\t\t\t\t\tlet nodeCacheSize = this._nodeCache.getStats().vsize;\n\n\t\t\t\t\t\tif (nodeCacheSize > 500000000) {\n\t\t\t\t\t\t\tlet neededSizeIndex = 0;\n\n\t\t\t\t\t\t\tfor (let zz = 0; zz < this._subCache.length; zz++) {\n\t\t\t\t\t\t\t\tthis._nodeCache.del(this._subCache[zz].id);\n\n\t\t\t\t\t\t\t\tif (this._nodeCache.getStats().vsize < 500000000) {\n\t\t\t\t\t\t\t\t\tneededSizeIndex = zz;\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\t\t\t\t\t\t\t// console.log('Cache1: ' + 'Too Big - ' + subscription.publication + ' - ' + getBinarySize(JSON.stringify(this._subCache)));\n\t\t\t\t\t\t\tthis._subCache.splice(0, neededSizeIndex);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this._subCache.some(a => a.collection === collection && a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData))) {\n\t\t\t\t\t\t\tthis._subCache.splice(this._subCache.findIndex(a => a.collection === collection && a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)), 1);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet cacheId = this._cacheId++;\n\t\t\t\t\t\tthis._nodeCache.set(cacheId, res);\n\t\t\t\t\t\tthis._subCache.push({collection: collection, publication: subscription.publication, subscriptionData: subscription.subscriptionData, id: cacheId});\n\n\t\t\t\t\t\t// console.log('Cache1: ' + 'Create - ' + subscription.publication + ' - ' + getBinarySize(JSON.stringify(this._subCache)));\n\n\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\tdata: res\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\n\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\t\tdata: err\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\telse { // Pub is different for each user (Look at users publication) [MUCH SLOWER, RE-RUNS FOR EACH USER]\n\t\t\t\tthat._publications[subscription.publication].function.call(Object.assign({}, that, SubscriptionManager.prototype), ws['id_user'], ...subscription.subscriptionData).then(res => {\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: res\n\t\t\t\t\t};\n\n\t\t\t\t\t// console.log('Send Pub Data Once 2', new Date(), 'Success', subscription);\n\n\t\t\t\t\tthis.sendWS(ws, serverRes);\n\n\t\t\t\t\tresolve(true);\n\n\t\t\t\t}, err => {\n\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\tdata: err\n\t\t\t\t\t};\n\n\t\t\t\t\t// console.log('Send Pub Data Once 2', new Date(), 'Error', subscription);\n\n\t\t\t\t\tthis.sendWS(ws, serverRes);\n\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t// Fetch pub once, send to all clients linked to this pub\n\tprivate sendPubData(subscription: ActiveSubscriptionModel, type: string, collection: string) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tlet that = this;\n\n\t\t\tif (this._subCache.some(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData))) {\n\t\t\t\tsubscription.clients.forEach(client => {\n\t\t\t\t\tthat._wss.clients.forEach(ws => {\n\t\t\t\t\t\tif (ws['id_socket'] === client.id_socket) {\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: this._nodeCache.get(this._subCache.filter(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData))[0].id)\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// console.log('Cache: ' + 'Found - ' + subscription.publication + ' - ' + getBinarySize(JSON.stringify(this._subCache)));\n\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\n\t\t\t\t\t\t\tresolve(true);\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\tif (subscription.publication !== 'superadminAPM' && subscription.publication !== 'loggedInUsers') {\n\t\t\t\t\tthat._mainServer.getMethodManager().callMethodInternal('insertSubscriptionLog', type, subscription.publication, collection, JSON.stringify(subscription.subscriptionData));\n\t\t\t\t}\n\n\t\t\t\tthat._publications[subscription.publication].function.call(Object.assign({}, that, SubscriptionManager.prototype), ...subscription.subscriptionData).then(res => {\n\t\t\t\t\tlet nodeCacheSize = this._nodeCache.getStats().vsize;\n\t\t\t\t\t\n\t\t\t\t\tif (nodeCacheSize > 500000000) {\n\t\t\t\t\t\tlet neededSizeIndex = 0;\n\n\t\t\t\t\t\tfor (let zz = 0; zz < this._subCache.length; zz++) {\n\t\t\t\t\t\t\tthis._nodeCache.del(this._subCache[zz].id);\n\n\t\t\t\t\t\t\tif (this._nodeCache.getStats().vsize < 500000000) {\n\t\t\t\t\t\t\t\tneededSizeIndex = zz;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// console.log('Cache: ' + 'Too Big - ' + subscription.publication + ' - ' + getBinarySize(JSON.stringify(this._subCache)));\n\t\t\t\t\t\tthis._subCache.splice(0, neededSizeIndex);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._subCache.some(a => a.collection === collection && a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData))) {\n\t\t\t\t\t\tthis._subCache.splice(this._subCache.findIndex(a => a.collection === collection && a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)), 1);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet cacheId = this._cacheId++;\n\t\t\t\t\tthis._nodeCache.set(cacheId, res);\n\t\t\t\t\tthis._subCache.push({collection: collection, publication: subscription.publication, subscriptionData: subscription.subscriptionData, id: cacheId});\n\n\t\t\t\t\t// console.log('Cache: ' + 'Create - ' + subscription.publication + ' - ' + getBinarySize(JSON.stringify(this._subCache)));\n\n\t\t\t\t\tsubscription.clients.forEach(client => {\n\t\t\t\t\t\tthat._wss.clients.forEach(ws => {\n\t\t\t\t\t\t\tif (ws['id_socket'] === client.id_socket) {\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\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\t\t\t\t\t});\n\n\t\t\t\t\tresolve(true);\n\t\t\t\t}, err => {\n\t\t\t\t\tsubscription.clients.forEach(client => {\n\t\t\t\t\t\tthat._wss.clients.forEach(ws => {\n\t\t\t\t\t\t\tif (ws['id_socket'] === client.id_socket) {\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: true,\n\t\t\t\t\t\t\t\t\tdata: err\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\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\t\t\t\t\t});\n\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate sendWS(ws: WebSocket, data: ServerResponseModel) {\n\t\tthis._sendQueue.splice(0, 0, {\n\t\t\tid_ws: ws['id_socket'],\n\t\t\tdata: data\n\t\t});\n\t}\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@resolveio/server-lib",
3
- "version": "6.1.4",
3
+ "version": "6.1.5",
4
4
  "description": "",
5
5
  "main": "index.ts",
6
6
  "scripts": {
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var logged_in_users_collection_1 = require("../collections/logged-in-users.collection");
4
- var active_subscription_collection_1 = require("../collections/active-subscription.collection");
5
4
  function loadSuperAdminPublications(subscriptionManager) {
6
5
  subscriptionManager.publications({
7
6
  loggedInUsers: {
@@ -9,12 +8,6 @@ function loadSuperAdminPublications(subscriptionManager) {
9
8
  return logged_in_users_collection_1.LoggedInUsers.find({}).sort({ user: 1 }).exec();
10
9
  },
11
10
  collections: ['logged-in-users']
12
- },
13
- currentSubscriptions: {
14
- function: function () {
15
- return active_subscription_collection_1.ActiveSubscriptions.find({}).sort({ publication: 1 }).exec();
16
- },
17
- collections: ['active-subscriptions']
18
11
  }
19
12
  });
20
13
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/publications/super-admin.ts"],"names":[],"mappings":";;AACA,wFAA0E;AAC1E,gGAAoF;AAEpF,SAAgB,0BAA0B,CAAC,mBAAwC;IAClF,mBAAmB,CAAC,YAAY,CAAC;QAChC,aAAa,EAAE;YACd,QAAQ,EAAE;gBACT,OAAO,0CAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,CAAC,EAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACtD,CAAC;YACD,WAAW,EAAE,CAAC,iBAAiB,CAAC;SAChC;QACD,oBAAoB,EAAE;YACrB,QAAQ,EAAE;gBACT,OAAO,oDAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAC,WAAW,EAAE,CAAC,EAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACnE,CAAC;YACD,WAAW,EAAE,CAAC,sBAAsB,CAAC;SACrC;KACD,CAAC,CAAC;AACJ,CAAC;AAfD,gEAeC","file":"super-admin.js","sourcesContent":["import { SubscriptionManager } from '../managers/subscription.manager';\nimport { LoggedInUsers } from '../collections/logged-in-users.collection';\nimport { ActiveSubscriptions } from '../collections/active-subscription.collection';\n\nexport function loadSuperAdminPublications(subscriptionManager: SubscriptionManager) {\n\tsubscriptionManager.publications({\n\t\tloggedInUsers: {\n\t\t\tfunction: function() {\n\t\t\t\treturn LoggedInUsers.find({}).sort({user: 1}).exec();\n\t\t\t},\n\t\t\tcollections: ['logged-in-users']\n\t\t},\n\t\tcurrentSubscriptions: {\n\t\t\tfunction: function() {\n\t\t\t\treturn ActiveSubscriptions.find({}).sort({publication: 1}).exec();\n\t\t\t},\n\t\t\tcollections: ['active-subscriptions']\n\t\t}\n\t});\n}"]}
1
+ {"version":3,"sources":["../../src/publications/super-admin.ts"],"names":[],"mappings":";;AACA,wFAA0E;AAE1E,SAAgB,0BAA0B,CAAC,mBAAwC;IAClF,mBAAmB,CAAC,YAAY,CAAC;QAChC,aAAa,EAAE;YACd,QAAQ,EAAE;gBACT,OAAO,0CAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,CAAC,EAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACtD,CAAC;YACD,WAAW,EAAE,CAAC,iBAAiB,CAAC;SAChC;KACD,CAAC,CAAC;AACJ,CAAC;AATD,gEASC","file":"super-admin.js","sourcesContent":["import { SubscriptionManager } from '../managers/subscription.manager';\nimport { LoggedInUsers } from '../collections/logged-in-users.collection';\n\nexport function loadSuperAdminPublications(subscriptionManager: SubscriptionManager) {\n\tsubscriptionManager.publications({\n\t\tloggedInUsers: {\n\t\t\tfunction: function() {\n\t\t\t\treturn LoggedInUsers.find({}).sort({user: 1}).exec();\n\t\t\t},\n\t\t\tcollections: ['logged-in-users']\n\t\t}\n\t});\n}"]}
@@ -1,7 +0,0 @@
1
- import { Model, Document } from 'mongoose';
2
- import { ActiveSubscriptionModel } from '../models/active-subscription.model';
3
- interface ResolveIOModel extends ActiveSubscriptionModel, Document {
4
- }
5
- export declare const ActiveSubscriptions: Model<ResolveIOModel>;
6
- export declare const ActiveSubscriptionVersions: Model<ResolveIOModel>;
7
- export {};
@@ -1,70 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var mongoose_1 = require("mongoose");
4
- var index_1 = require("../index");
5
- var schema = {
6
- _id: {
7
- type: String,
8
- optional: true
9
- },
10
- __v: {
11
- type: Number,
12
- optional: true
13
- },
14
- updatedAt: {
15
- type: Date,
16
- optional: true
17
- },
18
- createdAt: {
19
- type: Date,
20
- optional: true
21
- },
22
- date: {
23
- type: Date
24
- },
25
- publication: {
26
- type: String
27
- },
28
- subData: {
29
- type: String
30
- },
31
- collections: {
32
- type: Array
33
- },
34
- 'collections.$': {
35
- type: String
36
- },
37
- clients: {
38
- type: Array
39
- },
40
- 'clients.$': {
41
- type: Object
42
- },
43
- 'clients.$.id_user': {
44
- type: String
45
- },
46
- 'clients.$.messageId': {
47
- type: Number
48
- },
49
- 'clients.$.id_socket': {
50
- type: String
51
- }
52
- };
53
- var DefaultSchema = new mongoose_1.Schema(schema, {
54
- skipVersioning: true,
55
- versionKey: false,
56
- timestamps: true
57
- });
58
- exports.ActiveSubscriptions = index_1.ResolveIOServer.getMainDB().model('active-subscriptions', DefaultSchema);
59
- schema._id = {
60
- type: mongoose_1.Schema.Types.Mixed
61
- };
62
- var VersionSchema = new mongoose_1.Schema(schema, {
63
- skipVersioning: true,
64
- versionKey: false,
65
- timestamps: true
66
- });
67
- exports.ActiveSubscriptions['versionCollection'] = 'active-subscriptions.versions';
68
- exports.ActiveSubscriptionVersions = index_1.ResolveIOServer.getMainDB().model(exports.ActiveSubscriptions['versionCollection'], VersionSchema);
69
-
70
- //# sourceMappingURL=active-subscription.collection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/collections/active-subscription.collection.ts"],"names":[],"mappings":";;AAAA,qCAAmD;AAEnD,kCAA2C;AAE3C,IAAI,MAAM,GAAQ;IACjB,GAAG,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACd;IACD,GAAG,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACd;IACD,SAAS,EAAE;QACV,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,IAAI;KACd;IACD,SAAS,EAAE;QACV,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,IAAI;KACd;IACD,IAAI,EAAE;QACL,IAAI,EAAE,IAAI;KACV;IACD,WAAW,EAAE;QACZ,IAAI,EAAE,MAAM;KACZ;IACD,OAAO,EAAE;QACR,IAAI,EAAE,MAAM;KACZ;IACD,WAAW,EAAE;QACZ,IAAI,EAAE,KAAK;KACX;IACD,eAAe,EAAE;QAChB,IAAI,EAAE,MAAM;KACZ;IACD,OAAO,EAAE;QACR,IAAI,EAAE,KAAK;KACX;IACD,WAAW,EAAE;QACZ,IAAI,EAAE,MAAM;KACZ;IACD,mBAAmB,EAAE;QACpB,IAAI,EAAE,MAAM;KACZ;IACD,qBAAqB,EAAE;QACtB,IAAI,EAAE,MAAM;KACZ;IACD,qBAAqB,EAAE;QACtB,IAAI,EAAE,MAAM;KACZ;CACD,CAAC;AAEF,IAAM,aAAa,GAAG,IAAI,iBAAM,CAAC,MAAM,EAAE;IACxC,cAAc,EAAE,IAAI;IACpB,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,IAAI;CAChB,CAAC,CAAC;AAGU,QAAA,mBAAmB,GAA0B,uBAAe,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,sBAAsB,EAAE,aAAa,CAAC,CAAC;AAEnI,MAAM,CAAC,GAAG,GAAG;IACZ,IAAI,EAAE,iBAAM,CAAC,KAAK,CAAC,KAAK;CACxB,CAAC;AAEF,IAAI,aAAa,GAAG,IAAI,iBAAM,CAAC,MAAM,EAAE;IACtC,cAAc,EAAE,IAAI;IACpB,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,IAAI;CAChB,CAAC,CAAC;AAEH,2BAAmB,CAAC,mBAAmB,CAAC,GAAG,+BAA+B,CAAC;AAE9D,QAAA,0BAA0B,GAA0B,uBAAe,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,2BAAmB,CAAC,mBAAmB,CAAC,EAAE,aAAa,CAAC,CAAC","file":"active-subscription.collection.js","sourcesContent":["import { Schema, Model, Document } from 'mongoose';\nimport { ActiveSubscriptionModel } from '../models/active-subscription.model';\nimport { ResolveIOServer } from '../index';\n\nlet schema: any = {\n\t_id: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\t__v: {\n\t\ttype: Number,\n\t\toptional: true\n\t},\n\tupdatedAt: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\tcreatedAt: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\tdate: {\n\t\ttype: Date\n\t},\n\tpublication: { \n\t\ttype: String\n\t},\n\tsubData: {\n\t\ttype: String\n\t},\n\tcollections: {\n\t\ttype: Array\n\t},\n\t'collections.$': {\n\t\ttype: String\n\t},\n\tclients: {\n\t\ttype: Array\n\t},\n\t'clients.$': {\n\t\ttype: Object\n\t},\n\t'clients.$.id_user': {\n\t\ttype: String\n\t},\n\t'clients.$.messageId': {\n\t\ttype: Number\n\t},\n\t'clients.$.id_socket': {\n\t\ttype: String\n\t}\n};\n\nconst DefaultSchema = new Schema(schema, {\n\tskipVersioning: true,\n\tversionKey: false,\n\ttimestamps: true\n});\n\ninterface ResolveIOModel extends ActiveSubscriptionModel, Document {}\nexport const ActiveSubscriptions: Model<ResolveIOModel> = ResolveIOServer.getMainDB().model('active-subscriptions', DefaultSchema);\n\nschema._id = {\n\ttype: Schema.Types.Mixed\n};\n\nlet VersionSchema = new Schema(schema, {\n\tskipVersioning: true,\n\tversionKey: false,\n\ttimestamps: true\n});\n\nActiveSubscriptions['versionCollection'] = 'active-subscriptions.versions';\n\nexport const ActiveSubscriptionVersions: Model<ResolveIOModel> = ResolveIOServer.getMainDB().model(ActiveSubscriptions['versionCollection'], VersionSchema);"]}
@@ -1,13 +0,0 @@
1
- import { CollectionDocument } from './collection-document.model';
2
- export interface ActiveSubscriptionModel extends CollectionDocument {
3
- date: Date;
4
- publication: string;
5
- subData: string | Object;
6
- collections: string[];
7
- clients: ActiveSubscriptionClientModel[];
8
- }
9
- export interface ActiveSubscriptionClientModel {
10
- id_user: string;
11
- messageId: number;
12
- id_socket: string;
13
- }
@@ -1,4 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
-
4
- //# sourceMappingURL=active-subscription.model.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/models/active-subscription.model.ts"],"names":[],"mappings":"","file":"active-subscription.model.js","sourcesContent":["import { CollectionDocument } from './collection-document.model';\n\nexport interface ActiveSubscriptionModel extends CollectionDocument {\n\tdate: Date;\n\tpublication: string;\n\tsubData: string | Object;\n\tcollections: string[];\n\tclients: ActiveSubscriptionClientModel[];\n}\n\nexport interface ActiveSubscriptionClientModel {\n\tid_user: string;\n\tmessageId: number;\n\tid_socket: string;\n}"]}