@resolveio/server-lib 6.4.21 → 6.4.22
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.
|
@@ -510,7 +510,6 @@ var SubscriptionManager = /** @class */ (function () {
|
|
|
510
510
|
var that = this;
|
|
511
511
|
setInterval(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
512
512
|
var uniqueOplog_1, uniquePubs, _loop_4, this_3, i, _loop_5, i, i, pub;
|
|
513
|
-
var _this = this;
|
|
514
513
|
return __generator(this, function (_a) {
|
|
515
514
|
if (this._oplogQueue.length) {
|
|
516
515
|
uniqueOplog_1 = common_1.deepCopy(this._oplogQueue);
|
|
@@ -518,11 +517,12 @@ var SubscriptionManager = /** @class */ (function () {
|
|
|
518
517
|
uniquePubs = [];
|
|
519
518
|
_loop_4 = function (i) {
|
|
520
519
|
if (!that._subscriptions.some(function (a) { return a.collections.includes(uniqueOplog_1[i].collection); })) {
|
|
521
|
-
this_3._subCache.
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
520
|
+
for (var j = this_3._subCache.length - 1; j >= 0; j--) {
|
|
521
|
+
if (this_3._subCache[j].collection === uniqueOplog_1[i].collection) {
|
|
522
|
+
this_3._nodeCache.del(this_3._subCache[j].id);
|
|
523
|
+
this_3._subCache.splice(j, 1);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
526
|
uniqueOplog_1.splice(i, 1);
|
|
527
527
|
}
|
|
528
528
|
};
|
|
@@ -589,20 +589,20 @@ var SubscriptionManager = /** @class */ (function () {
|
|
|
589
589
|
};
|
|
590
590
|
SubscriptionManager.prototype.resendPubsForDelete = function (collection) {
|
|
591
591
|
return __awaiter(this, void 0, void 0, function () {
|
|
592
|
-
var that, subCopy, _loop_7, this_4,
|
|
592
|
+
var that, subCopy, _loop_7, this_4, i, zz, sub, aa, client, bb, ws;
|
|
593
593
|
var _this = this;
|
|
594
594
|
return __generator(this, function (_a) {
|
|
595
595
|
that = this;
|
|
596
596
|
subCopy = common_1.deepCopy(that._subscriptions.filter(function (a) { return a.collections.includes(collection); }));
|
|
597
|
-
_loop_7 = function (
|
|
598
|
-
if (this_4._subCache[
|
|
599
|
-
this_4._nodeCache.del(this_4._subCache[
|
|
600
|
-
this_4._subCache.splice(
|
|
597
|
+
_loop_7 = function (i) {
|
|
598
|
+
if (this_4._subCache[i].collection === collection || subCopy.some(function (a) { return a.publication === _this._subCache[i].publication; })) {
|
|
599
|
+
this_4._nodeCache.del(this_4._subCache[i].id);
|
|
600
|
+
this_4._subCache.splice(i, 1);
|
|
601
601
|
}
|
|
602
602
|
};
|
|
603
603
|
this_4 = this;
|
|
604
|
-
for (
|
|
605
|
-
_loop_7(
|
|
604
|
+
for (i = this._subCache.length - 1; i >= 0; i--) {
|
|
605
|
+
_loop_7(i);
|
|
606
606
|
}
|
|
607
607
|
for (zz = subCopy.length - 1; zz >= 0; zz--) {
|
|
608
608
|
sub = subCopy[zz];
|
|
@@ -761,7 +761,7 @@ var SubscriptionManager = /** @class */ (function () {
|
|
|
761
761
|
SubscriptionManager.prototype.sendPubDataOnce = function (ws, messageId, subscription, type, collection) {
|
|
762
762
|
var _this = this;
|
|
763
763
|
return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
|
|
764
|
-
var that, serverRes;
|
|
764
|
+
var that, serverRes, i;
|
|
765
765
|
var _a, _b;
|
|
766
766
|
var _this = this;
|
|
767
767
|
return __generator(this, function (_c) {
|
|
@@ -780,6 +780,12 @@ var SubscriptionManager = /** @class */ (function () {
|
|
|
780
780
|
if (subscription.publication !== 'superadminAPM' && subscription.publication !== 'loggedInUsers') {
|
|
781
781
|
that._mainServer.getMethodManager().callMethodInternal('insertSubscriptionLog', type, subscription.publication, collection, JSON.stringify(subscription.subscriptionData));
|
|
782
782
|
}
|
|
783
|
+
for (i = this._subCache.length - 1; i >= 0; i--) {
|
|
784
|
+
if (this._subCache[i].publication === subscription.publication && JSON.stringify(this._subCache[i].subscriptionData) === JSON.stringify(subscription.subscriptionData)) {
|
|
785
|
+
this._nodeCache.del(this._subCache[i].id);
|
|
786
|
+
this._subCache.splice(i, 1);
|
|
787
|
+
}
|
|
788
|
+
}
|
|
783
789
|
(_a = that._publications[subscription.publication].function).call.apply(_a, __spreadArrays([Object.assign({}, that, SubscriptionManager.prototype)], subscription.subscriptionData)).then(function (res) {
|
|
784
790
|
var nodeCacheSize = _this._nodeCache.getStats().vsize;
|
|
785
791
|
if (nodeCacheSize > 500000000) {
|
|
@@ -794,23 +800,23 @@ var SubscriptionManager = /** @class */ (function () {
|
|
|
794
800
|
// console.log('Cache1: ' + 'Too Big - ' + subscription.publication + ' - ' + getBinarySize(JSON.stringify(this._subCache)));
|
|
795
801
|
_this._subCache.splice(0, neededSizeIndex);
|
|
796
802
|
}
|
|
797
|
-
|
|
798
|
-
_this._subCache.
|
|
799
|
-
|
|
800
|
-
_this.
|
|
801
|
-
|
|
802
|
-
|
|
803
|
+
for (var i = _this._subCache.length - 1; i >= 0; i--) {
|
|
804
|
+
if (_this._subCache[i].publication === subscription.publication && JSON.stringify(_this._subCache[i].subscriptionData) === JSON.stringify(subscription.subscriptionData)) {
|
|
805
|
+
_this._nodeCache.del(_this._subCache[i].id);
|
|
806
|
+
_this._subCache.splice(i, 1);
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
if (_this._subscriptions.some(function (a) { return a.collections.includes(collection) && a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData); })) {
|
|
810
|
+
var cacheId = _this._cacheId++;
|
|
811
|
+
_this._nodeCache.set(cacheId, res);
|
|
812
|
+
_this._subCache.push({ collection: collection, publication: subscription.publication, subscriptionData: subscription.subscriptionData, id: cacheId });
|
|
813
|
+
var serverRes = {
|
|
814
|
+
messageId: messageId,
|
|
815
|
+
hasError: false,
|
|
816
|
+
data: res
|
|
817
|
+
};
|
|
818
|
+
_this.sendWS(ws, serverRes);
|
|
803
819
|
}
|
|
804
|
-
var cacheId = _this._cacheId++;
|
|
805
|
-
_this._nodeCache.set(cacheId, res);
|
|
806
|
-
_this._subCache.push({ collection: collection, publication: subscription.publication, subscriptionData: subscription.subscriptionData, id: cacheId });
|
|
807
|
-
// console.log('Cache1: ' + 'Create - ' + subscription.publication + ' - ' + getBinarySize(JSON.stringify(this._subCache)));
|
|
808
|
-
var serverRes = {
|
|
809
|
-
messageId: messageId,
|
|
810
|
-
hasError: false,
|
|
811
|
-
data: res
|
|
812
|
-
};
|
|
813
|
-
_this.sendWS(ws, serverRes);
|
|
814
820
|
resolve(true);
|
|
815
821
|
}, function (err) {
|
|
816
822
|
var serverRes = {
|
|
@@ -852,18 +858,17 @@ var SubscriptionManager = /** @class */ (function () {
|
|
|
852
858
|
SubscriptionManager.prototype.sendPubData = function (subscription, type, collection) {
|
|
853
859
|
var _this = this;
|
|
854
860
|
return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
|
|
855
|
-
var that;
|
|
861
|
+
var that, i, i;
|
|
856
862
|
var _a;
|
|
857
863
|
var _this = this;
|
|
858
864
|
return __generator(this, function (_b) {
|
|
859
865
|
that = this;
|
|
860
866
|
if (!subscription.clients.length) {
|
|
861
|
-
|
|
862
|
-
this._subCache.
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
});
|
|
867
|
+
for (i = this._subCache.length - 1; i >= 0; i--) {
|
|
868
|
+
if (this._subCache[i].publication === subscription.publication && JSON.stringify(this._subCache[i].subscriptionData) === JSON.stringify(subscription.subscriptionData)) {
|
|
869
|
+
this._nodeCache.del(this._subCache[i].id);
|
|
870
|
+
this._subCache.splice(i, 1);
|
|
871
|
+
}
|
|
867
872
|
}
|
|
868
873
|
that._subscriptions.splice(that._subscriptions.findIndex(function (a) { return a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData); }), 1);
|
|
869
874
|
}
|
|
@@ -871,6 +876,12 @@ var SubscriptionManager = /** @class */ (function () {
|
|
|
871
876
|
if (subscription.publication !== 'superadminAPM' && subscription.publication !== 'loggedInUsers') {
|
|
872
877
|
that._mainServer.getMethodManager().callMethodInternal('insertSubscriptionLog', type, subscription.publication, collection, JSON.stringify(subscription.subscriptionData));
|
|
873
878
|
}
|
|
879
|
+
for (i = this._subCache.length - 1; i >= 0; i--) {
|
|
880
|
+
if (this._subCache[i].publication === subscription.publication && JSON.stringify(this._subCache[i].subscriptionData) === JSON.stringify(subscription.subscriptionData)) {
|
|
881
|
+
this._nodeCache.del(this._subCache[i].id);
|
|
882
|
+
this._subCache.splice(i, 1);
|
|
883
|
+
}
|
|
884
|
+
}
|
|
874
885
|
(_a = that._publications[subscription.publication].function).call.apply(_a, __spreadArrays([Object.assign({}, that, SubscriptionManager.prototype)], subscription.subscriptionData)).then(function (res) {
|
|
875
886
|
var nodeCacheSize = _this._nodeCache.getStats().vsize;
|
|
876
887
|
if (nodeCacheSize > 500000000) {
|
|
@@ -885,33 +896,33 @@ var SubscriptionManager = /** @class */ (function () {
|
|
|
885
896
|
// console.log('Cache: ' + 'Too Big - ' + subscription.publication + ' - ' + getBinarySize(JSON.stringify(this._subCache)));
|
|
886
897
|
_this._subCache.splice(0, neededSizeIndex);
|
|
887
898
|
}
|
|
888
|
-
|
|
889
|
-
_this._subCache.
|
|
890
|
-
|
|
891
|
-
_this.
|
|
892
|
-
|
|
893
|
-
});
|
|
899
|
+
for (var i = _this._subCache.length - 1; i >= 0; i--) {
|
|
900
|
+
if (_this._subCache[i].publication === subscription.publication && JSON.stringify(_this._subCache[i].subscriptionData) === JSON.stringify(subscription.subscriptionData)) {
|
|
901
|
+
_this._nodeCache.del(_this._subCache[i].id);
|
|
902
|
+
_this._subCache.splice(i, 1);
|
|
903
|
+
}
|
|
894
904
|
}
|
|
895
905
|
if (!subscription.clients.length) {
|
|
896
906
|
that._subscriptions.splice(that._subscriptions.findIndex(function (a) { return a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData); }), 1);
|
|
897
907
|
}
|
|
898
908
|
else {
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
909
|
+
if (_this._subscriptions.some(function (a) { return a.collections.includes(collection) && a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData); })) {
|
|
910
|
+
var cacheId = _this._cacheId++;
|
|
911
|
+
_this._nodeCache.set(cacheId, res);
|
|
912
|
+
_this._subCache.push({ collection: collection, publication: subscription.publication, subscriptionData: subscription.subscriptionData, id: cacheId });
|
|
913
|
+
subscription.clients.forEach(function (client) {
|
|
914
|
+
that._wss.clients.forEach(function (ws) {
|
|
915
|
+
if (ws['id_socket'] === client.id_socket) {
|
|
916
|
+
var serverRes = {
|
|
917
|
+
messageId: client.messageId,
|
|
918
|
+
hasError: false,
|
|
919
|
+
data: res
|
|
920
|
+
};
|
|
921
|
+
_this.sendWS(ws, serverRes);
|
|
922
|
+
}
|
|
923
|
+
});
|
|
913
924
|
});
|
|
914
|
-
}
|
|
925
|
+
}
|
|
915
926
|
}
|
|
916
927
|
resolve(true);
|
|
917
928
|
}, function (err) {
|
|
@@ -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';\nimport { loadReportBuilderLibraryPublications } from '../publications/report-builder-libraries';\nimport { loadUserGroupPublications } from '../publications/user-groups';\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\t\tloadReportBuilderLibraryPublications(this);\n\t\tloadUserGroupPublications(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 = 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}\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\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\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\tthis._subCache.filter(a => a.collection === uniqueOplog[i].collection).forEach(subCache => {\n\t\t\t\t\t\t\tlet index = this._subCache.findIndex(a => a.collection === uniqueOplog[i].collection);\n\t\t\t\t\t\t\tthis._nodeCache.del(this._subCache[index].id);\n\t\t\t\t\t\t\tthis._subCache.splice(index, 1);\n\t\t\t\t\t\t});\n\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\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\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 (!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\tsub['oplog'] = oplog;\n\t\t\t\t\t\t\t\t\t\tuniquePubs.push(deepCopy(sub));\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\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\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\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}\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\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\tthat.sendPubData(sub, 'delete', collection);\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.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData))) {\n\t\t\t\t\t\t\tthis._subCache.filter(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)).forEach(subCache => {\n\t\t\t\t\t\t\t\tlet index = this._subCache.findIndex(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData));\n\t\t\t\t\t\t\t\tthis._nodeCache.del(this._subCache[index].id);\n\t\t\t\t\t\t\t\tthis._subCache.splice(index, 1);\n\t\t\t\t\t\t\t});\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.clients.length) {\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\tthis._subCache.filter(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)).forEach(subCache => {\n\t\t\t\t\t\tlet index = this._subCache.findIndex(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData));\n\t\t\t\t\t\tthis._nodeCache.del(this._subCache[index].id);\n\t\t\t\t\t\tthis._subCache.splice(index, 1);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tthat._subscriptions.splice(that._subscriptions.findIndex(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)), 1);\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.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData))) {\n\t\t\t\t\t\tthis._subCache.filter(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)).forEach(subCache => {\n\t\t\t\t\t\t\tlet index = this._subCache.findIndex(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData));\n\t\t\t\t\t\t\tthis._nodeCache.del(this._subCache[index].id);\n\t\t\t\t\t\t\tthis._subCache.splice(index, 1);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!subscription.clients.length) {\n\t\t\t\t\t\tthat._subscriptions.splice(that._subscriptions.findIndex(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)), 1);\n\t\t\t\t\t}\n\t\t\t\t\telse {\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('Cache: ' + 'Create - ' + subscription.publication + ' - ' + getBinarySize(JSON.stringify(this._subCache)));\n\n\t\t\t\t\t\tsubscription.clients.forEach(client => {\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\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\t\t\t\tdata: res\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\n\t\t\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\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';\nimport { loadReportBuilderLibraryPublications } from '../publications/report-builder-libraries';\nimport { loadUserGroupPublications } from '../publications/user-groups';\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\t\tloadReportBuilderLibraryPublications(this);\n\t\tloadUserGroupPublications(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 = 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}\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\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\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\tfor (let j = this._subCache.length - 1; j >= 0; j--) {\n\t\t\t\t\t\t\tif (this._subCache[j].collection === uniqueOplog[i].collection) {\n\t\t\t\t\t\t\t\tthis._nodeCache.del(this._subCache[j].id);\n\t\t\t\t\t\t\t\tthis._subCache.splice(j, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\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\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\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 (!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\tsub['oplog'] = oplog;\n\t\t\t\t\t\t\t\t\t\tuniquePubs.push(deepCopy(sub));\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\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\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\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}\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 i = this._subCache.length - 1; i >= 0; i--) {\n\t\t\tif (this._subCache[i].collection === collection || subCopy.some(a => a.publication === this._subCache[i].publication)) {\n\t\t\t\tthis._nodeCache.del(this._subCache[i].id);\n\t\t\t\tthis._subCache.splice(i, 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\tthat.sendPubData(sub, 'delete', collection);\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\tfor (let i = this._subCache.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tif (this._subCache[i].publication === subscription.publication && JSON.stringify(this._subCache[i].subscriptionData) === JSON.stringify(subscription.subscriptionData)) {\n\t\t\t\t\t\t\tthis._nodeCache.del(this._subCache[i].id);\n\t\t\t\t\t\t\tthis._subCache.splice(i, 1);\n\t\t\t\t\t\t}\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\tfor (let i = this._subCache.length - 1; i >= 0; i--) {\n\t\t\t\t\t\t\tif (this._subCache[i].publication === subscription.publication && JSON.stringify(this._subCache[i].subscriptionData) === JSON.stringify(subscription.subscriptionData)) {\n\t\t\t\t\t\t\t\tthis._nodeCache.del(this._subCache[i].id);\n\t\t\t\t\t\t\t\tthis._subCache.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this._subscriptions.some(a => a.collections.includes(collection) && a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData))) {\n\t\t\t\t\t\t\tlet cacheId = this._cacheId++;\n\t\t\t\t\t\t\tthis._nodeCache.set(cacheId, res);\n\t\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\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\t\tmessageId: 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\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.clients.length) {\n\t\t\t\tfor (let i = this._subCache.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (this._subCache[i].publication === subscription.publication && JSON.stringify(this._subCache[i].subscriptionData) === JSON.stringify(subscription.subscriptionData)) {\n\t\t\t\t\t\tthis._nodeCache.del(this._subCache[i].id);\n\t\t\t\t\t\tthis._subCache.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthat._subscriptions.splice(that._subscriptions.findIndex(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)), 1);\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\tfor (let i = this._subCache.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (this._subCache[i].publication === subscription.publication && JSON.stringify(this._subCache[i].subscriptionData) === JSON.stringify(subscription.subscriptionData)) {\n\t\t\t\t\t\tthis._nodeCache.del(this._subCache[i].id);\n\t\t\t\t\t\tthis._subCache.splice(i, 1);\n\t\t\t\t\t}\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\tfor (let i = this._subCache.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tif (this._subCache[i].publication === subscription.publication && JSON.stringify(this._subCache[i].subscriptionData) === JSON.stringify(subscription.subscriptionData)) {\n\t\t\t\t\t\t\tthis._nodeCache.del(this._subCache[i].id);\n\t\t\t\t\t\t\tthis._subCache.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!subscription.clients.length) {\n\t\t\t\t\t\tthat._subscriptions.splice(that._subscriptions.findIndex(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)), 1);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (this._subscriptions.some(a => a.collections.includes(collection) && a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData))) {\n\t\t\t\t\t\t\tlet cacheId = this._cacheId++;\n\t\t\t\t\t\t\tthis._nodeCache.set(cacheId, res);\n\t\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\tsubscription.clients.forEach(client => {\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\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\t\t\t\t\tdata: res\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\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\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"]}
|