@resolveio/server-lib 6.3.5 → 6.3.6

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.
@@ -508,7 +508,7 @@ var SubscriptionManager = /** @class */ (function () {
508
508
  var _this = this;
509
509
  var that = this;
510
510
  setInterval(function () { return __awaiter(_this, void 0, void 0, function () {
511
- var uniqueOplog_1, uniquePubs, _loop_4, i, _loop_5, this_3, i, i, pub;
511
+ var uniqueOplog_1, uniquePubs, _loop_4, i, _loop_5, i, i, pub;
512
512
  return __generator(this, function (_a) {
513
513
  if (this._oplogQueue.length) {
514
514
  uniqueOplog_1 = common_1.deepCopy(this._oplogQueue);
@@ -531,7 +531,7 @@ var SubscriptionManager = /** @class */ (function () {
531
531
  if (sub.collections.includes(oplog.collection)) {
532
532
  if (sub.preSubscriptionData) {
533
533
  if (that._publications[sub.publication].fetchFunction(oplog.doc, sub.preSubscriptionData)) {
534
- 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) {
534
+ if (!uniquePubs.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }).length) {
535
535
  if (!sub.clients.length) {
536
536
  that._subscriptions.splice(j, 1);
537
537
  }
@@ -539,10 +539,6 @@ var SubscriptionManager = /** @class */ (function () {
539
539
  sub['oplog'] = oplog;
540
540
  uniquePubs.push(common_1.deepCopy(sub));
541
541
  }
542
- if (this_3._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }) >= 0) {
543
- 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);
544
- this_3._subCache.splice(this_3._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }), 1);
545
- }
546
542
  }
547
543
  return "continue";
548
544
  }
@@ -550,10 +546,6 @@ var SubscriptionManager = /** @class */ (function () {
550
546
  if (that._publications[sub.publication].preFunction) {
551
547
  if (!sub.clients.length) {
552
548
  that._subscriptions.splice(j, 1);
553
- if (this_3._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }) >= 0) {
554
- 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);
555
- this_3._subCache.splice(this_3._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }), 1);
556
- }
557
549
  }
558
550
  else {
559
551
  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) {
@@ -568,10 +560,6 @@ var SubscriptionManager = /** @class */ (function () {
568
560
  if (!uniquePubs.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }).length) {
569
561
  if (!sub.clients.length) {
570
562
  that._subscriptions.splice(j, 1);
571
- if (this_3._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }) >= 0) {
572
- 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);
573
- this_3._subCache.splice(this_3._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }), 1);
574
- }
575
563
  }
576
564
  else {
577
565
  sub['oplog'] = oplog;
@@ -584,10 +572,6 @@ var SubscriptionManager = /** @class */ (function () {
584
572
  if (!uniquePubs.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }).length) {
585
573
  if (!sub.clients.length) {
586
574
  that._subscriptions.splice(j, 1);
587
- if (this_3._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }) >= 0) {
588
- 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);
589
- this_3._subCache.splice(this_3._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }), 1);
590
- }
591
575
  }
592
576
  else {
593
577
  sub['oplog'] = oplog;
@@ -603,7 +587,6 @@ var SubscriptionManager = /** @class */ (function () {
603
587
  _loop_6(j);
604
588
  }
605
589
  };
606
- this_3 = this;
607
590
  for (i = uniqueOplog_1.length - 1; i >= 0; i--) {
608
591
  _loop_5(i);
609
592
  }
@@ -618,18 +601,18 @@ var SubscriptionManager = /** @class */ (function () {
618
601
  };
619
602
  SubscriptionManager.prototype.resendPubsForDelete = function (collection) {
620
603
  return __awaiter(this, void 0, void 0, function () {
621
- var that, subCopy, _loop_7, this_4, jj, _loop_8, zz;
604
+ var that, subCopy, _loop_7, this_3, jj, _loop_8, zz;
622
605
  var _this = this;
623
606
  return __generator(this, function (_a) {
624
607
  that = this;
625
608
  subCopy = common_1.deepCopy(that._subscriptions.filter(function (a) { return a.collections.includes(collection); }));
626
609
  _loop_7 = function (jj) {
627
- if (this_4._subCache[jj].collection === collection || subCopy.some(function (a) { return a.publication === _this._subCache[jj].publication; })) {
628
- this_4._nodeCache.del(this_4._subCache[jj].id);
629
- this_4._subCache.splice(jj, 1);
610
+ if (this_3._subCache[jj].collection === collection || subCopy.some(function (a) { return a.publication === _this._subCache[jj].publication; })) {
611
+ this_3._nodeCache.del(this_3._subCache[jj].id);
612
+ this_3._subCache.splice(jj, 1);
630
613
  }
631
614
  };
632
- this_4 = this;
615
+ this_3 = this;
633
616
  for (jj = this._subCache.length - 1; jj >= 0; jj--) {
634
617
  _loop_7(jj);
635
618
  }
@@ -677,10 +660,6 @@ var SubscriptionManager = /** @class */ (function () {
677
660
  that = this;
678
661
  if (sub.preSubscriptionData) {
679
662
  if (that._publications[sub.publication].fetchFunction(document, sub.preSubscriptionData)) {
680
- if (this._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }) >= 0) {
681
- this._nodeCache.del(this._subCache.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); })[0].id);
682
- this._subCache.splice(this._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }), 1);
683
- }
684
663
  that.sendPubData(sub, type, collection);
685
664
  return [2 /*return*/];
686
665
  }
@@ -691,19 +670,11 @@ var SubscriptionManager = /** @class */ (function () {
691
670
  case 1:
692
671
  _a.preSubscriptionData = _d.sent();
693
672
  if (that._publications[sub.publication].fetchFunction(document, sub.preSubscriptionData)) {
694
- if (this._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }) >= 0) {
695
- this._nodeCache.del(this._subCache.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); })[0].id);
696
- this._subCache.splice(this._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }), 1);
697
- }
698
673
  that.sendPubData(sub, type, collection);
699
674
  }
700
675
  return [3 /*break*/, 3];
701
676
  case 2:
702
677
  if (that._publications[sub.publication].ws_specific) {
703
- if (this._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }) >= 0) {
704
- this._nodeCache.del(this._subCache.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); })[0].id);
705
- this._subCache.splice(this._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }), 1);
706
- }
707
678
  for (k = 0; k < sub.clients.length; k++) {
708
679
  client = sub.clients[k];
709
680
  if (that._publications[sub.publication].fetchFunction) {
@@ -729,19 +700,11 @@ var SubscriptionManager = /** @class */ (function () {
729
700
  else {
730
701
  if (that._publications[sub.publication].fetchFunction) {
731
702
  if ((_c = that._publications[sub.publication]).fetchFunction.apply(_c, __spreadArrays([document], sub.subscriptionData))) {
732
- if (this._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }) >= 0) {
733
- this._nodeCache.del(this._subCache.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); })[0].id);
734
- this._subCache.splice(this._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }), 1);
735
- }
736
703
  that.sendPubData(sub, type, collection);
737
704
  }
738
705
  // else
739
706
  }
740
707
  else {
741
- if (this._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }) >= 0) {
742
- this._nodeCache.del(this._subCache.filter(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); })[0].id);
743
- this._subCache.splice(this._subCache.findIndex(function (a) { return a.publication === sub.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(sub.subscriptionData); }), 1);
744
- }
745
708
  that.sendPubData(sub, type, collection);
746
709
  }
747
710
  }
@@ -912,76 +875,58 @@ var SubscriptionManager = /** @class */ (function () {
912
875
  var _this = this;
913
876
  return __generator(this, function (_b) {
914
877
  that = this;
915
- if (this._subCache.some(function (a) { return a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData); })) {
878
+ if (subscription.publication !== 'superadminAPM' && subscription.publication !== 'loggedInUsers') {
879
+ that._mainServer.getMethodManager().callMethodInternal('insertSubscriptionLog', type, subscription.publication, collection, JSON.stringify(subscription.subscriptionData));
880
+ }
881
+ (_a = that._publications[subscription.publication].function).call.apply(_a, __spreadArrays([Object.assign({}, that, SubscriptionManager.prototype)], subscription.subscriptionData)).then(function (res) {
882
+ var nodeCacheSize = _this._nodeCache.getStats().vsize;
883
+ if (nodeCacheSize > 500000000) {
884
+ var neededSizeIndex = 0;
885
+ for (var zz = 0; zz < _this._subCache.length; zz++) {
886
+ _this._nodeCache.del(_this._subCache[zz].id);
887
+ if (_this._nodeCache.getStats().vsize < 500000000) {
888
+ neededSizeIndex = zz;
889
+ break;
890
+ }
891
+ }
892
+ // console.log('Cache: ' + 'Too Big - ' + subscription.publication + ' - ' + getBinarySize(JSON.stringify(this._subCache)));
893
+ _this._subCache.splice(0, neededSizeIndex);
894
+ }
895
+ if (_this._subCache.some(function (a) { return a.collection === collection && a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData); })) {
896
+ _this._subCache.splice(_this._subCache.findIndex(function (a) { return a.collection === collection && a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData); }), 1);
897
+ }
898
+ var cacheId = _this._cacheId++;
899
+ _this._nodeCache.set(cacheId, res);
900
+ _this._subCache.push({ collection: collection, publication: subscription.publication, subscriptionData: subscription.subscriptionData, id: cacheId });
901
+ // console.log('Cache: ' + 'Create - ' + subscription.publication + ' - ' + getBinarySize(JSON.stringify(this._subCache)));
916
902
  subscription.clients.forEach(function (client) {
917
903
  that._wss.clients.forEach(function (ws) {
918
904
  if (ws['id_socket'] === client.id_socket) {
919
905
  var serverRes = {
920
906
  messageId: client.messageId,
921
907
  hasError: false,
922
- data: _this._nodeCache.get(_this._subCache.filter(function (a) { return a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData); })[0].id)
908
+ data: res
923
909
  };
924
- // console.log('Cache: ' + 'Found - ' + subscription.publication + ' - ' + getBinarySize(JSON.stringify(this._subCache)));
925
910
  _this.sendWS(ws, serverRes);
926
- resolve(true);
927
911
  }
928
912
  });
929
913
  });
930
- }
931
- else {
932
- if (subscription.publication !== 'superadminAPM' && subscription.publication !== 'loggedInUsers') {
933
- that._mainServer.getMethodManager().callMethodInternal('insertSubscriptionLog', type, subscription.publication, collection, JSON.stringify(subscription.subscriptionData));
934
- }
935
- (_a = that._publications[subscription.publication].function).call.apply(_a, __spreadArrays([Object.assign({}, that, SubscriptionManager.prototype)], subscription.subscriptionData)).then(function (res) {
936
- var nodeCacheSize = _this._nodeCache.getStats().vsize;
937
- if (nodeCacheSize > 500000000) {
938
- var neededSizeIndex = 0;
939
- for (var zz = 0; zz < _this._subCache.length; zz++) {
940
- _this._nodeCache.del(_this._subCache[zz].id);
941
- if (_this._nodeCache.getStats().vsize < 500000000) {
942
- neededSizeIndex = zz;
943
- break;
944
- }
914
+ resolve(true);
915
+ }, function (err) {
916
+ subscription.clients.forEach(function (client) {
917
+ that._wss.clients.forEach(function (ws) {
918
+ if (ws['id_socket'] === client.id_socket) {
919
+ var serverRes = {
920
+ messageId: client.messageId,
921
+ hasError: true,
922
+ data: err
923
+ };
924
+ _this.sendWS(ws, serverRes);
945
925
  }
946
- // console.log('Cache: ' + 'Too Big - ' + subscription.publication + ' - ' + getBinarySize(JSON.stringify(this._subCache)));
947
- _this._subCache.splice(0, neededSizeIndex);
948
- }
949
- if (_this._subCache.some(function (a) { return a.collection === collection && a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData); })) {
950
- _this._subCache.splice(_this._subCache.findIndex(function (a) { return a.collection === collection && a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData); }), 1);
951
- }
952
- var cacheId = _this._cacheId++;
953
- _this._nodeCache.set(cacheId, res);
954
- _this._subCache.push({ collection: collection, publication: subscription.publication, subscriptionData: subscription.subscriptionData, id: cacheId });
955
- // console.log('Cache: ' + 'Create - ' + subscription.publication + ' - ' + getBinarySize(JSON.stringify(this._subCache)));
956
- subscription.clients.forEach(function (client) {
957
- that._wss.clients.forEach(function (ws) {
958
- if (ws['id_socket'] === client.id_socket) {
959
- var serverRes = {
960
- messageId: client.messageId,
961
- hasError: false,
962
- data: res
963
- };
964
- _this.sendWS(ws, serverRes);
965
- }
966
- });
967
- });
968
- resolve(true);
969
- }, function (err) {
970
- subscription.clients.forEach(function (client) {
971
- that._wss.clients.forEach(function (ws) {
972
- if (ws['id_socket'] === client.id_socket) {
973
- var serverRes = {
974
- messageId: client.messageId,
975
- hasError: true,
976
- data: err
977
- };
978
- _this.sendWS(ws, serverRes);
979
- }
980
- });
981
926
  });
982
- reject(err);
983
927
  });
984
- }
928
+ reject(err);
929
+ });
985
930
  return [2 /*return*/];
986
931
  });
987
932
  }); });
@@ -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 { 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';\nimport { ChangeStream } from 'mongodb';\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 _oplog: ChangeStream;\n\tprivate _oplogSupport: ChangeStream;\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\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\tLoggedInUsers.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 = 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\tthis._oplog = ResolveIOServer.getMainDB().db.watch(<any>{fullDocument: 'updateLookup'});\n\n\t\tthis._oplog.on('change', doc => {\n\t\t\tlet collection = doc.ns.coll;\n\n\t\t\tif (!collection.endsWith('.versions')) {\n\t\t\t\tif (doc.operationType === 'insert') {\n\t\t\t\t\tif (collection === 'queue-methods') {\n\t\t\t\t\t\tthis._mainServer.getQueueManager().runMethodQueue();\n\t\t\t\t\t}\n\t\t\t\t\telse if (collection === 'queue-responses') {\n\t\t\t\t\t\tthis._mainServer.getQueueManager().runMethodResponse();\n\t\t\t\t\t}\n\t\t\t\t\telse if (collection === 'support-tickets' && this.serverConfig['ROOT_URL'] !== 'http://localhost:4200') {\n\t\t\t\t\t\tthis._mainServer.getMethodManager().callMethodInternal('sendSupportTicketEmail', doc.fullDocument);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._oplogQueue.push({\n\t\t\t\t\t\t\ttype: 'insert',\n\t\t\t\t\t\t\tcollection: collection,\n\t\t\t\t\t\t\tdoc: doc.fullDocument\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (doc.operationType === 'update' || doc.operationType === 'replace') {\n\t\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// console.log(doc);\n\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.fullDocument\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse if (doc.operationType === 'delete') {\n\t\t\t\t\t// console.log(doc);\n\t\t\t\t\t\n\t\t\t\t\tthis.resendPubsForDelete(collection);\n\n\t\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis._oplog.on('error', error => {\n\t\t\tconsole.log('oplog error', error);\n\n\t\t\tprocess.exit();\n\t\t});\n\t\t\n\t\tthis._oplog.on('end', () => {\n\t\t\tconsole.log('oplog ended');\n\n\t\t\tprocess.exit();\n\t\t});\n\t}\n\n\tprivate tailOpLogSupport() {\n\t\tthis._oplogSupport = ResolveIOServer.getSupportDB().db.watch(<any>{fullDocument: 'updateLookup'});\n\n\t\tthis._oplog.on('change', doc => {\n\t\t\tlet collection = doc.ns.coll;\n\n\t\t\tif (!collection.endsWith('.versions')) {\n\t\t\t\tif (doc.operationType === 'insert' || doc.operationType === 'update' || doc.operationType === 'replace') {\n\t\t\t\t\tif (collection === 'support-tickets') {\n\t\t\t\t\t\tthis.checkSupportPubsForChanges(collection, doc.fullDocument);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (doc.operationType === 'delete') {\n\t\t\t\t\tif (collection === 'support-tickets') {\n\t\t\t\t\t\tthis.resendPubsForDelete(collection);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis._oplogSupport.on('error', error => {\n\t\t\tconsole.log('oplog error', error);\n\n\t\t\tprocess.exit();\n\t\t});\n\t\t\n\t\tthis._oplogSupport.on('end', () => {\n\t\t\tconsole.log('oplog ended');\n\n\t\t\tprocess.exit();\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\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\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\tthis.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\tthat.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\tthat.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\tthat.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\tthat.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\tthat.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\tthat.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\tthat.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\tthat.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\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 { 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';\nimport { ChangeStream } from 'mongodb';\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 _oplog: ChangeStream;\n\tprivate _oplogSupport: ChangeStream;\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\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\tLoggedInUsers.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 = 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\tthis._oplog = ResolveIOServer.getMainDB().db.watch(<any>{fullDocument: 'updateLookup'});\n\n\t\tthis._oplog.on('change', doc => {\n\t\t\tlet collection = doc.ns.coll;\n\n\t\t\tif (!collection.endsWith('.versions')) {\n\t\t\t\tif (doc.operationType === 'insert') {\n\t\t\t\t\tif (collection === 'queue-methods') {\n\t\t\t\t\t\tthis._mainServer.getQueueManager().runMethodQueue();\n\t\t\t\t\t}\n\t\t\t\t\telse if (collection === 'queue-responses') {\n\t\t\t\t\t\tthis._mainServer.getQueueManager().runMethodResponse();\n\t\t\t\t\t}\n\t\t\t\t\telse if (collection === 'support-tickets' && this.serverConfig['ROOT_URL'] !== 'http://localhost:4200') {\n\t\t\t\t\t\tthis._mainServer.getMethodManager().callMethodInternal('sendSupportTicketEmail', doc.fullDocument);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._oplogQueue.push({\n\t\t\t\t\t\t\ttype: 'insert',\n\t\t\t\t\t\t\tcollection: collection,\n\t\t\t\t\t\t\tdoc: doc.fullDocument\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (doc.operationType === 'update' || doc.operationType === 'replace') {\n\t\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// console.log(doc);\n\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.fullDocument\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse if (doc.operationType === 'delete') {\n\t\t\t\t\t// console.log(doc);\n\t\t\t\t\t\n\t\t\t\t\tthis.resendPubsForDelete(collection);\n\n\t\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis._oplog.on('error', error => {\n\t\t\tconsole.log('oplog error', error);\n\n\t\t\tprocess.exit();\n\t\t});\n\t\t\n\t\tthis._oplog.on('end', () => {\n\t\t\tconsole.log('oplog ended');\n\n\t\t\tprocess.exit();\n\t\t});\n\t}\n\n\tprivate tailOpLogSupport() {\n\t\tthis._oplogSupport = ResolveIOServer.getSupportDB().db.watch(<any>{fullDocument: 'updateLookup'});\n\n\t\tthis._oplog.on('change', doc => {\n\t\t\tlet collection = doc.ns.coll;\n\n\t\t\tif (!collection.endsWith('.versions')) {\n\t\t\t\tif (doc.operationType === 'insert' || doc.operationType === 'update' || doc.operationType === 'replace') {\n\t\t\t\t\tif (collection === 'support-tickets') {\n\t\t\t\t\t\tthis.checkSupportPubsForChanges(collection, doc.fullDocument);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (doc.operationType === 'delete') {\n\t\t\t\t\tif (collection === 'support-tickets') {\n\t\t\t\t\t\tthis.resendPubsForDelete(collection);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis._oplogSupport.on('error', error => {\n\t\t\tconsole.log('oplog error', error);\n\n\t\t\tprocess.exit();\n\t\t});\n\t\t\n\t\tthis._oplogSupport.on('end', () => {\n\t\t\tconsole.log('oplog ended');\n\n\t\t\tprocess.exit();\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\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\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)).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\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\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\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\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\tthis.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\tthat.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\tthat.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\tthat.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\tthat.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\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\tthat.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\tthat.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\tthat.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\tthat.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\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 (subscription.publication !== 'superadminAPM' && subscription.publication !== 'loggedInUsers') {\n\t\t\t\tthat._mainServer.getMethodManager().callMethodInternal('insertSubscriptionLog', type, subscription.publication, collection, JSON.stringify(subscription.subscriptionData));\n\t\t\t}\n\n\t\t\tthat._publications[subscription.publication].function.call(Object.assign({}, that, SubscriptionManager.prototype), ...subscription.subscriptionData).then(res => {\n\t\t\t\tlet nodeCacheSize = this._nodeCache.getStats().vsize;\n\t\t\t\t\n\t\t\t\tif (nodeCacheSize > 500000000) {\n\t\t\t\t\tlet neededSizeIndex = 0;\n\n\t\t\t\t\tfor (let zz = 0; zz < this._subCache.length; zz++) {\n\t\t\t\t\t\tthis._nodeCache.del(this._subCache[zz].id);\n\n\t\t\t\t\t\tif (this._nodeCache.getStats().vsize < 500000000) {\n\t\t\t\t\t\t\tneededSizeIndex = zz;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// console.log('Cache: ' + 'Too Big - ' + subscription.publication + ' - ' + getBinarySize(JSON.stringify(this._subCache)));\n\t\t\t\t\tthis._subCache.splice(0, neededSizeIndex);\n\t\t\t\t}\n\n\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\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}\n\t\t\t\t\n\t\t\t\tlet cacheId = this._cacheId++;\n\t\t\t\tthis._nodeCache.set(cacheId, res);\n\t\t\t\tthis._subCache.push({collection: collection, publication: subscription.publication, subscriptionData: subscription.subscriptionData, id: cacheId});\n\n\t\t\t\t// console.log('Cache: ' + 'Create - ' + subscription.publication + ' - ' + getBinarySize(JSON.stringify(this._subCache)));\n\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: res\n\t\t\t\t\t\t\t};\n\t\n\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tresolve(true);\n\t\t\t}, err => {\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: true,\n\t\t\t\t\t\t\t\tdata: err\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\treject(err);\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.3.5",
3
+ "version": "6.3.6",
4
4
  "description": "",
5
5
  "main": "index.ts",
6
6
  "scripts": {