@resolveio/server-lib 9.7.15 → 9.7.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +3 -2
- package/index.js +1 -4
- package/index.js.map +1 -1
- package/managers/method.manager.js +1 -1
- package/managers/method.manager.js.map +1 -1
- package/managers/mongo.manager.d.ts +39 -56
- package/managers/mongo.manager.js +112 -105
- package/managers/mongo.manager.js.map +1 -1
- package/managers/monitor.manager.js +82 -6
- package/managers/monitor.manager.js.map +1 -1
- package/managers/subscription.manager.js +40 -40
- package/managers/subscription.manager.js.map +1 -1
- package/methods/accounts.js.map +1 -1
- package/package.json +3 -3
- package/server-app.js +83 -82
- package/server-app.js.map +1 -1
|
@@ -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 { 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 { loadMethodResponsePublications } from '../publications/method-responses';\nimport ResolveIOMainServer from '../server-app';\nimport { ResolveIOServer } from '../index';\nimport { loadNotificationPublications } from '../publications/notifications';\nimport { loadReportBuilderReportPublications } from '../publications/report-builder-reports';\nimport { LoggedInUserModel } from '../models/logged-in-users.model';\n\nimport { ChangeStream } from 'mongodb';\nimport { loadReportBuilderLibraryPublications } from '../publications/report-builder-libraries';\nimport { loadUserGroupPublications } from '../publications/user-groups';\nimport { loadUserGuidePublications } from '../publications/user-guides';\nimport { loadReportBuilderDashboardBuilderPublications } from '../publications/report-builder-dashboard-builders';\nimport { objectIdHexString } from './mongo.manager';\nimport { dateReviver, deepCopy } from '../util/common';\nimport * as moment from 'moment';\nimport * as NodeCache from 'node-cache';\n\nconst v8 = require('v8');\n\n// Performance Dependencies\n// import * as path from 'path';\n// const { Worker } = require('worker_threads');\n\ninterface MongoQueueModel {\n\t_id: number,\n\ttype: string;\n\tcollection: string;\n\tsubscription: ActiveSubscriptionModel;\n\trunning: boolean;\n\trun_again: boolean;\n}\n\n// interface CurrentPerformanceMonitor {\n// \t_id: number;\n// \tfunction: string;\n// \tpublication: string;\n// \tsubscriptionData: any[];\n// \tdate_start: Date;\n// \tdate_end: Date;\n// \tduration: number;\n// \tresult: string;\n// }\n\nexport class SubscriptionManager {\n\n\tprivate _mainServer: ResolveIOMainServer;\n\tprivate _publications: SubscriptionModel = {};\n\tprivate _subscriptions: ActiveSubscriptionModel[] = [];\n\tprivate _wss: WebSocket.Server;\n\tprivate _loggedInUsers: LoggedInUserModel[] = [];\n\n\tprivate _mongoQueue: MongoQueueModel[] = [];\n\tprivate _mongoQueueId = 0;\n\n\tprivate _sendQueue = [];\n\tprivate _runningQueue = false;\n\t\n\tprivate _oplog: ChangeStream;\n\n\tprivate _nodeCache;\n\tprivate _cacheId = 1;\n\n\tprivate serverConfig;\n\n\tprivate _heapStats = v8.getHeapStatistics();\n\tprivate _heapLimit = 0;\n\n\t// private currentPerfomanceMonitor: CurrentPerformanceMonitor[] = [];\n\t// private idPerformance: number = 0;\n\t// private performanceThread;\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._heapLimit = this._heapStats.heap_size_limit / 4;\n\n\t\t// setTimeout(() => {\n\t\t// \tconsole.log('Setting up performance thread');\n\n\t\t// \tthis.performanceThread = new Worker(path.join(__dirname, './subscription.performance.js'));\n\n\t\t// \tthis.performanceThread.on('exit', code => {\n\t\t// \t\tconsole.error(new Date(), 'THREAD EXITED!!!!!!!!!!!!!!!!!!', code);\n\t\t// \t});\n\n\t\t// \tthis.performanceThread.on('error', code => {\n\t\t// \t\tconsole.error(new Date(), 'THREAD RECV ERROR !!!!!!!!!!!!!!!!!!', code);\n\t\t// \t});\n\t\t// }, 5000);\n\n\t\t// setInterval(() => {\n\t\t// \tconsole.log('Post thread msg');\n\t\t// \tthis.performanceThread.postMessage(this.currentPerfomanceMonitor);\n\t\t// \tthis.currentPerfomanceMonitor = [];\n\t\t// }, 10000);\n\n\t\tthis.serverConfig = serverConfig;\n\t\tthis._wss = wss;\n\n\t\t// Publications\n\t\tloadSuperAdminPublications(this);\n\t\tloadAppVersionPublications(this);\n\t\tloadAppStatusPublications(this);\n\t\tloadLogPublications(this);\n\t\tloadFilePublications(this);\n\t\tloadCronJobPublications(this);\n\t\tloadFlagsPublications(this);\n\t\tloadMethodResponsePublications(this);\n\t\tloadNotificationPublications(this);\n\t\tloadReportBuilderReportPublications(this);\n\t\tloadReportBuilderLibraryPublications(this);\n\t\tloadUserGroupPublications(this);\n\t\tloadUserGuidePublications(this);\n\t\tloadReportBuilderDashboardBuilderPublications(this);\n\n\t\tthis.tailOpLog();\n\n\t\tsetInterval(async () => {\n\t\t\tif (!this._runningQueue) {\n\t\t\t\tif (this._sendQueue.length) {\n\t\t\t\t\t// let startDate = new Date();\n\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\n\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t// \tfunction: 'sendInterval',\n\t\t\t\t\t// \tpublication: '',\n\t\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t// \tresult: 'Done'\n\t\t\t\t\t// });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst queueArr = this._mongoQueue.filter(a => !a.running);\n\t\t\tif (queueArr.length) {\n\t\t\t\tqueueArr.forEach(entry => {\n\t\t\t\t\tentry.running = true;\n\t\t\t\t});\n\n\t\t\t\t// let startDate = new Date();\n\n\t\t\t\tfor (let i = queueArr.length - 1; i >= 0; i--) {\n\t\t\t\t\tlet mongoQueue = queueArr[i];\n\n\t\t\t\t\tif (this._publications[mongoQueue.subscription.publication].ws_specific) {\n\t\t\t\t\t\tfor (let j = 0; j < mongoQueue.subscription.clients.length; j++) {\n\t\t\t\t\t\t\tlet client = mongoQueue.subscription.clients[j];\n\t\t\t\t\t\t\tlet ws = this._mainServer.getWS(client.id_socket);\n\t\t\t\t\t\t\tif (ws && ws['id_socket'] === client.id_socket) {\n\t\t\t\t\t\t\t\tthis.sendPubDataOnce(ws, client.messageId, mongoQueue.subscription, mongoQueue.type, mongoQueue.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\telse {\n\t\t\t\t\t\tthis.sendPubData(mongoQueue.subscription, mongoQueue.type, mongoQueue.collection);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (mongoQueue.run_again) {\n\t\t\t\t\t\tmongoQueue.running = false;\n\t\t\t\t\t\tmongoQueue.run_again = false;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._mongoQueue.splice(this._mongoQueue.map(a => a._id).indexOf(mongoQueue._id), 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'mongoQueue',\n\t\t\t\t// \tpublication: '',\n\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Done'\n\t\t\t\t// });\n\t\t\t}\n\t\t}, 10);\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') >= 30) {\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\tLoggedInUsers.deleteOne({_id: loggedInUser._id});\n\n\t\t\t\t\t\tif (this._loggedInUsers.findIndex(a => a._id === loggedInUser._id) >= 0) {\n\t\t\t\t\t\t\tthis._loggedInUsers.splice(this._loggedInUsers.findIndex(a => a._id === loggedInUser._id), 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < this._subscriptions.length; i++) {\n\t\t\t\tlet sub = this._subscriptions[i];\n\n\t\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\t\tlet client = sub.clients[j];\n\n\t\t\t\t\tif (!this._loggedInUsers.some(a => a.id_ws === client.id_socket)) {\n\t\t\t\t\t\tsub.clients.splice(j, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, 30000);\n\t}\n\n\tprivate addToQueue(mongoQueue: MongoQueueModel) {\n\t\t// let startDate = new Date();\n\n\t\tlet _mongoQueue = this._mongoQueue.filter(a => a.subscription.publication === mongoQueue.subscription.publication && JSON.stringify(a.subscription.subscriptionData) === JSON.stringify(mongoQueue.subscription.subscriptionData))[0];\n\t\t\n\t\tif (_mongoQueue) {\n\t\t\tif (_mongoQueue.running) {\n\t\t\t\t_mongoQueue.run_again = true;\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'addToQueue',\n\t\t\t\t// \tpublication: mongoQueue.subscription.publication,\n\t\t\t\t// // \tsubscriptionData: mongoQueue.subscription.subscriptionData,\n\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Run Again'\n\t\t\t\t// });\n\t\t\t}\n\t\t\t// else {\n\t\t\t// \tlet endDate = new Date();\n\t\t\t// \tthis.currentPerfomanceMonitor.push({\n\t\t\t// \t\t_id: this.idPerformance++,\n\t\t\t// \t\tfunction: 'addToQueue',\n\t\t\t// \t\tpublication: mongoQueue.subscription.publication,\n\t\t\t// // \tsubscriptionData: mongoQueue.subscription.subscriptionData,\n\t\t\t// \t\tsubscriptionData: [],\n\t\t\t// \t\tdate_start: startDate,\n\t\t\t// \t\tdate_end: endDate,\n\t\t\t// \t\tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t// \t\tresult: 'Not Running Yet'\n\t\t\t// \t});\n\t\t\t// }\n\t\t}\n\t\telse {\n\t\t\tmongoQueue._id = this._mongoQueueId;\n\t\t\tthis._mongoQueueId += 1;\n\n\t\t\tthis._mongoQueue.splice(0, 0, mongoQueue);\n\t\t\t\n\t\t\t// let endDate = new Date();\n\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t// \t_id: this.idPerformance++,\n\t\t\t// \tfunction: 'addToQueue',\n\t\t\t// \tpublication: mongoQueue.subscription.publication,\n\t\t\t// // \tsubscriptionData: mongoQueue.subscription.subscriptionData,\n\t\t\t// \tsubscriptionData: [],\n\t\t\t// \tdate_start: startDate,\n\t\t\t// \tdate_end: endDate,\n\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t// \tresult: 'Add to Queue'\n\t\t\t// });\n\t\t}\n\t}\n\n\tpublic invalidatePubsCache(collection, type) {\n\t\t// let startDate = new Date();\n\n\t\tlet collSubs = this._subscriptions.filter(a => a.collections.includes(collection));\n\n\t\tfor (let i = collSubs.length - 1; i >= 0; i--) {\n\t\t\tlet sub = collSubs[i];\n\n\t\t\tif (sub.cacheId) {\n\t\t\t\tthis._nodeCache.del(sub.cacheId);\n\t\t\t\tsub.cacheId = 0;\n\t\t\t}\n\n\t\t\tthis.addToQueue({\n\t\t\t\t_id: 0,\n\t\t\t\ttype: type,\n\t\t\t\tcollection: collection,\n\t\t\t\tsubscription: sub,\n\t\t\t\trunning: false,\n\t\t\t\trun_again: false\n\t\t\t});\n\t\t}\n\n\t\tResolveIOServer.getMongoManager().invalidateQueryCache(collection);\n\n\t\t// let endDate = new Date();\n\t\t// this.currentPerfomanceMonitor.push({\n\t\t// \t_id: this.idPerformance++,\n\t\t// \tfunction: 'invalidatePubsCache',\n\t\t// \tpublication: collection,\n\t\t// \tsubscriptionData: [],\n\t\t// \tdate_start: startDate,\n\t\t// \tdate_end: endDate,\n\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t// \tresult: 'Done'\n\t\t// });\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 loggedInUser = this._loggedInUsers.filter(a => a.id_ws === ws['id_socket'])[0];\n\n\t\tif (loggedInUser) {\n\t\t\tloggedInUser.date = new Date();\n\n\t\t\tLoggedInUsers.updateOne({id_ws: ws['id_socket']}, {$set: {latency: ws['latency'], date: loggedInUser.date}}).then(res => {\n\t\t\t\tif (!res) {\n\t\t\t\t\tthis.unsubscribeAll(ws);\n\t\t\t\t}\n\t\t\t}, () => {\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\t// let startDate = new Date();\n\n\t\tlet pub = this._publications[publication];\n\n\t\tif (!pub) {\n\t\t\tconsole.error(new Date(), 'No Publication: ' + publication);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tif (subscriptionData.length > 1 || subscriptionData[0]) {\n\t\t\t\tif (!pub.check) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Function For Pub ' + publication);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if (!pub.check._schema) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Schema For Pub ' + publication);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet valObj = {};\n\t\t\t\t\tlet valKeys = Object.keys(pub.check._schema);\n\n\t\t\t\t\tlet rootKeys = valKeys.filter(a => !a.includes('.'));\n\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(new Date(), 'Error in Pub Check (' + publication + ')', errors);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet sub = this._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\tif (!sub.clients.some(a => a.id_socket === ws['id_socket'] && a.messageId === messageId)) {\n\t\t\t\t\tsub.clients.push({\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\tid_socket: ws['id_socket']\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If sub not found, create new sub\n\t\t\telse {\n\t\t\t\tthis._subscriptions.push({\n\t\t\t\t\tpublication: publication,\n\t\t\t\t\tsubscriptionData: subscriptionData,\n\t\t\t\t\tcollections: this.getPublicationCollections(publication),\n\t\t\t\t\tclients: [{\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\tid_socket: ws['id_socket']\n\t\t\t\t\t}],\n\t\t\t\t\tcacheId: 0\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!sub) {\n\t\t\t\tsub = this._subscriptions.filter(a => a.publication === publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscriptionData))[0];\n\t\t\t}\n\n\t\t\tif (!sub.cacheId && !this._mongoQueue.some(a => a.subscription.publication === sub.publication && JSON.stringify(a.subscription.subscriptionData) === JSON.stringify(sub.subscriptionData))) {\n\t\t\t\tthis.addToQueue({\n\t\t\t\t\t_id: 0,\n\t\t\t\t\ttype: 'newSub',\n\t\t\t\t\tcollection: '',\n\t\t\t\t\tsubscription: sub,\n\t\t\t\t\trunning: false,\n\t\t\t\t\trun_again: false\n\t\t\t\t});\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'subscribe',\n\t\t\t\t// \tpublication: publication,\n\t\t\t\t// // \tsubscriptionData: subscriptionData,\n\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Add to Queue'\n\t\t\t\t// });\n\t\t\t}\n\t\t\telse if (sub.cacheId) {\n\t\t\t\tthis.sendPubDataOnce(ws, messageId, sub, 'newSub', publication);\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'subscribe',\n\t\t\t\t// \tpublication: publication,\n\t\t\t\t// // \tsubscriptionData: subscriptionData,\n\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Send Pub Data Once'\n\t\t\t\t// });\n\t\t\t}\n\t\t}\n\n\t\tif (publication === 'appversion') {\n\t\t\tlet newLoggedInUser = this._loggedInUsers.filter(a => a.id_ws === ws['id_socket'])[0];\n\n\t\t\tif (newLoggedInUser) {\n\t\t\t\tif (ws['user'] !== 'Admin' && this.serverConfig['CLIENT_NAME'] !== 'ResolveIO') {\n\t\t\t\t\tthis._mainServer.getMethodManager().callMethodInternal.call(this._mainServer.getMethodManager(), 'supportCreateBillingUser', {\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\telse {\n\t\t\t\tthis.unsubscribeAll(ws);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic async createLoggedInUser(id_ws: string): Promise<LoggedInUserModel> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tlet ws = this._mainServer.getWS(id_ws);\n\n\t\t\tif (ws) {\n\t\t\t\tlet user = {\n\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t__v: 0,\n\t\t\t\t\tdate: new Date(),\n\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\tuser: ws['user'],\n\t\t\t\t\tid_ws: ws['id_socket']\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tawait LoggedInUsers.insertOne(user);\n\t\t\t\tthis._loggedInUsers.push(user);\n\t\t\t\t\n\t\t\t\tresolve(user);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tresolve(null);\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\t// let startDate = new Date();\n\t\t// console.log('Before');\n\t\t// console.dir(this._subscriptions.map(a => a.publication));\n\n\t\tif (!this._publications[publication]) {\n\t\t\tconsole.log('No Publication: ' + publication);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tlet sub = this._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\n\t\t// let endDate = new Date();\n\t\t// this.currentPerfomanceMonitor.push({\n\t\t// \t_id: this.idPerformance++,\n\t\t// \tfunction: 'unsubscribe',\n\t\t// \tpublication: publication,\n\t\t// // \tsubscriptionData: subscriptionData,\n\t\t// \tsubscriptionData: [],\n\t\t// \tdate_start: startDate,\n\t\t// \tdate_end: endDate,\n\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t// \tresult: 'Done'\n\t\t// });\n\t}\n\n\t// Unsubscribe from publication\n\tpublic async unsubscribeAll(ws: WebSocket) {\n\t\t// console.log('Before');\n\t\t// console.dir(this._subscriptions.map(a => a.publication));\n\n\t\t// let startDate = new Date();\n\n\t\tif (ws) {\n\t\t\tlet loggedInUser = await LoggedInUsers.findOne({id_ws: ws['id_socket']});\n\n\t\t\tif (loggedInUser) {\t\n\t\t\t\tif (this._loggedInUsers.map(a => a._id).indexOf(loggedInUser._id) >= 0) {\n\t\t\t\t\tthis._loggedInUsers.splice(this._loggedInUsers.map(a => a._id).indexOf(loggedInUser._id), 1);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tLoggedInUsers.deleteOne({_id: loggedInUser._id});\n\t\t\t}\n\n\t\t\tlet userSubs = this._subscriptions.filter(a => a.clients.some(b => b.id_user === ws['id_user'] && b.id_socket === ws['id_socket']));\n\n\t\t\tfor (let i = userSubs.length - 1; i >= 0; i--) {\n\t\t\t\tlet sub = userSubs[i];\n\n\t\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\t\tif (sub.clients[j].id_socket === ws['id_socket']) {\n\t\t\t\t\t\tsub.clients.splice(j, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tws.terminate();\n\n\t\t\t// let endDate = new Date();\n\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t// \t_id: this.idPerformance++,\n\t\t\t// \tfunction: 'unsubscribeAll',\n\t\t\t// \tpublication: '',\n\t\t\t// \tsubscriptionData: [],\n\t\t\t// \tdate_start: startDate,\n\t\t\t// \tdate_end: endDate,\n\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t// \tresult: 'Done'\n\t\t\t// });\n\t\t}\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().watch();\n\n\t\tthis._oplog.on('change', (doc: any) => {\n\t\t\t// let startDate = new Date();\n\n\t\t\tif (doc.ns) {\n\t\t\t\tlet collection = doc.ns.coll;\n\t\t\t\t// console.log(new Date(), 'Op log doc', doc.operationType, collection);\n\n\t\t\t\tif (collection && !collection.endsWith('.versions') && !collection.startsWith('monitor-') && collection !== 'logs' && collection !== 'log-method-latencies' && collection !== 'log-subscriptions') {\n\t\t\t\t\tif (doc.operationType === 'insert') {\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\t\t\t\t\t\telse if (collection === 'support-tickets') {\n\t\t\t\t\t\t\tif (this.serverConfig['ROOT_URL'] === 'https://resolveio.com') {\n\t\t\t\t\t\t\t\tthis._mainServer.getMethodManager().callMethodInternal.call(this._mainServer.getMethodManager(), 'sendSupportTicketEmail', doc.documentKey._id);\n\t\t\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'insert');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (collection !== 'method-responses') {\n\t\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'insert');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t// \tfunction: 'oplog',\n\t\t\t\t\t\t// \tpublication: collection,\n\t\t\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t// \tresult: 'Insert'\n\t\t\t\t\t\t// });\n\t\t\t\t\t}\n\t\t\t\t\telse if (doc.operationType === 'update' || doc.operationType === 'replace') {\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\t\t\t\t\t\t\n\t\t\t\t\t\tif (collection !== 'method-responses') {\n\t\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'update');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t// \tfunction: 'oplog',\n\t\t\t\t\t\t// \tpublication: collection,\n\t\t\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t// \tresult: 'Update'\n\t\t\t\t\t\t// });\n\t\t\t\t\t}\n\t\t\t\t\telse if (doc.operationType === 'delete') {\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\t\t\t\t\t\t\n\t\t\t\t\t\tif (collection !== 'method-responses') {\n\t\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'delete');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t// \tfunction: 'oplog',\n\t\t\t\t\t\t// \tpublication: collection,\n\t\t\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t// \tresult: 'Delete'\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});\n\t\t\n\t\tthis._oplog.on('error', error => {\n\t\t\tconsole.log('oplog error', error);\n\n\t\t\tprocess.exit(1);\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(1);\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\t// let startDate = new Date();\n\n\t\t\tif (!this._publications[subscription.publication].ws_specific) { // Same pub for all users\n\t\t\t\tif (subscription.cacheId) {\n\t\t\t\t\tlet cacheData = null;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcacheData = JSON.parse(this._nodeCache.get(subscription.cacheId), dateReviver);\n\t\t\t\t\t}\n\t\t\t\t\tcatch(err) {\n\t\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t\t\tsubscription.cacheId = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (cacheData) {\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: cacheData\n\t\t\t\t\t\t};\n\t\n\t\t\t\t\t\tif (serverRes.data === undefined) {\n\t\t\t\t\t\t\tsubscription.cacheId = 0;\n\t\t\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During SendPubDataOnce - Invalid Cache! - ' + subscription.publication + '\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (subscription.publication === 'userWithId' && cacheData._id !== ws['id_user']) {\n\t\t\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'SENDING INCORRECT USER FOR USERWITHID - 2!! Cached Data: : ' + JSON.stringify(cacheData) + ', Socket User: ' + ws['id_user'] + ', Sub: ' + JSON.stringify(subscription, null, 2) + ', All Subs: ' + JSON.stringify(this._publications, null, 2));\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.addToQueue({\n\t\t\t\t\t\t\t_id: 0,\n\t\t\t\t\t\t\ttype: 'newSub',\n\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\tsubscription: subscription,\n\t\t\t\t\t\t\trunning: false,\n\t\t\t\t\t\t\trun_again: false\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t// \tfunction: 'sendPubDataOnce',\n\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t// // \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t// \tresult: 'Send cache'\n\t\t\t\t\t// });\n\n\t\t\t\t\tresolve(true);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During SendPubDataOnce - No Cache! - ' + subscription.publication + '\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2));\n\n\t\t\t\t\tresolve(false);\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\tthis._publications[subscription.publication].function.call(Object.assign({}, this, SubscriptionManager.prototype), ws['id_user'], ...subscription.subscriptionData)\n\t\t\t\t.catch(methodErrs => {\n\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During Subscription ' + subscription.publication + ' - (sendPubDataOnce - WS)\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2) + '\\n\\nErrors\\n' + JSON.stringify(methodErrs, null, 2));\n\t\t\t\t})\n\t\t\t\t.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\tif (subscription.publication === 'userWithId' && res._id !== ws['id_user']) {\n\t\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'SENDING INCORRECT USER FOR USERWITHID - 3!! Cached Data: : ' + JSON.stringify(res) + ', Socket User: ' + ws['id_user'] + ', Sub: ' + JSON.stringify(subscription, null, 2) + ', All Subs: ' + JSON.stringify(this._publications, null, 2));\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\t// let endDate = new Date();\n\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t// \tfunction: 'sendPubDataOnce',\n\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t// // \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t// \tresult: 'Send ws spec data'\n\t\t\t\t\t// });\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\t// let startDate = new Date();\n\n\t\t\tif (!subscription.clients.length) {\n\t\t\t\tif (subscription.cacheId) {\n\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t}\n\n\t\t\t\tthis._subscriptions.splice(this._subscriptions.findIndex(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)), 1);\n\n\t\t\t\tresolve(false);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (subscription.publication !== 'superadminAPM' && subscription.publication !== 'loggedInUsers') {\n\t\t\t\t\tthis._mainServer.getMethodManager().callMethodInternal.call(this._mainServer.getMethodManager(), 'insertSubscriptionLog', type, subscription.publication, collection, JSON.stringify(subscription.subscriptionData));\n\t\t\t\t}\n\n\t\t\t\tthis._publications[subscription.publication].function.call(Object.assign({}, this, SubscriptionManager.prototype), ...subscription.subscriptionData)\n\t\t\t\t.catch(methodErrs => {\n\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During Subscription ' + subscription.publication + ' - (sendPubData)\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2) + '\\n\\nErrors\\n' + JSON.stringify(methodErrs, null, 2));\n\t\t\t\t})\n\t\t\t\t.then(res => {\n\t\t\t\t\tif (!subscription.clients.length) {\n\t\t\t\t\t\tif (subscription.cacheId) {\n\t\t\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._subscriptions.splice(this._subscriptions.findIndex(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)), 1);\n\n\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t// \tfunction: 'sendPubData',\n\t\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t\t// // \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t// \tresult: 'No clients'\n\t\t\t\t\t\t// });\n\n\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (!subscription.cacheId || this._nodeCache.get(subscription.cacheId) !== JSON.stringify(res)) {\n\t\t\t\t\t\t\tsubscription.clients.forEach(client => {\n\t\t\t\t\t\t\t\tlet ws = this._mainServer.getWS(client.id_socket);\n\n\t\t\t\t\t\t\t\tif (ws) {\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\n\t\t\t\t\t\t\t\t\tif (subscription.publication === 'userWithId' && client.id_user !== ws['id_user']) {\n\t\t\t\t\t\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'SENDING INCORRECT USER FOR USERWITHID!! Client User: ' + client.id_user + ', Socket User: ' + ws['id_user'] + ', Sub: ' + JSON.stringify(subscription, null, 2) + ', All Subs: ' + JSON.stringify(this._publications, null, 2));\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\n\t\t\t\t\t\t\tlet nodeCacheSize = this._nodeCache.getStats().vsize;\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (nodeCacheSize > this._heapLimit) {\n\t\t\t\t\t\t\t\tlet deleteCount = 0;\n\n\t\t\t\t\t\t\t\tconst subArr = this._subscriptions.filter(a => a.cacheId);\n\t\n\t\t\t\t\t\t\t\tfor (let zz = 0; zz < subArr.length; zz++) {\n\t\t\t\t\t\t\t\t\tthis._nodeCache.del(subArr[zz].cacheId);\n\t\t\t\t\t\t\t\t\tsubArr[zz].cacheId = 0;\n\t\n\t\t\t\t\t\t\t\t\tdeleteCount += 1;\n\n\t\t\t\t\t\t\t\t\tnodeCacheSize = this._nodeCache.getStats().vsize;\n\t\n\t\t\t\t\t\t\t\t\tif (nodeCacheSize < this._heapLimit * 0.75) {\n\t\t\t\t\t\t\t\t\t\tbreak;\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\t\n\t\t\t\t\t\t\t\tconsole.log('Sub Cache: ' + 'Too Big - ' + subscription.publication + ' - Deleted: ' + deleteCount + ' - ' + nodeCacheSize);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (subscription.cacheId) {\n\t\t\t\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tlet cacheId = this._cacheId;\n\t\t\t\t\t\t\tthis._cacheId += 1;\n\n\t\t\t\t\t\t\tthis._nodeCache.set(cacheId, JSON.stringify(res));\n\t\t\t\t\t\t\tsubscription.cacheId = cacheId;\n\n\t\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t\t// \tfunction: 'sendPubData',\n\t\t\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t\t\t// // \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t\t// \tresult: 'Same data'\n\t\t\t\t\t\t\t// });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t}\n\t\t\t\t}, err => {\n\t\t\t\t\tsubscription.clients.forEach(client => {\n\t\t\t\t\t\tlet ws = this._mainServer.getWS(client.id_socket);\n\n\t\t\t\t\t\tif (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 { 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 { loadMethodResponsePublications } from '../publications/method-responses';\nimport ResolveIOMainServer from '../server-app';\nimport { ResolveIOServer } from '../index';\nimport { loadNotificationPublications } from '../publications/notifications';\nimport { loadReportBuilderReportPublications } from '../publications/report-builder-reports';\nimport { LoggedInUserModel } from '../models/logged-in-users.model';\n\nimport { ChangeStream } from 'mongodb';\nimport { loadReportBuilderLibraryPublications } from '../publications/report-builder-libraries';\nimport { loadUserGroupPublications } from '../publications/user-groups';\nimport { loadUserGuidePublications } from '../publications/user-guides';\nimport { loadReportBuilderDashboardBuilderPublications } from '../publications/report-builder-dashboard-builders';\nimport { objectIdHexString } from './mongo.manager';\nimport { dateReviver, deepCopy } from '../util/common';\nimport * as moment from 'moment';\nimport * as NodeCache from 'node-cache';\n\nconst v8 = require('v8');\n\n// Performance Dependencies\n// import * as path from 'path';\n// const { Worker } = require('worker_threads');\n\ninterface MongoQueueModel {\n\t_id: number,\n\ttype: string;\n\tcollection: string;\n\tsubscription: ActiveSubscriptionModel;\n\trunning: boolean;\n\trun_again: boolean;\n}\n\n// interface CurrentPerformanceMonitor {\n// \t_id: number;\n// \tfunction: string;\n// \tpublication: string;\n// \tsubscriptionData: any[];\n// \tdate_start: Date;\n// \tdate_end: Date;\n// \tduration: number;\n// \tresult: string;\n// }\n\nexport class SubscriptionManager {\n\n\tprivate _mainServer: ResolveIOMainServer;\n\tprivate _publications: SubscriptionModel = {};\n\tprivate _subscriptions: ActiveSubscriptionModel[] = [];\n\tprivate _wss: WebSocket.Server;\n\tprivate _loggedInUsers: LoggedInUserModel[] = [];\n\n\tprivate _mongoQueue: MongoQueueModel[] = [];\n\tprivate _mongoQueueId = 0;\n\n\tprivate _sendQueue = [];\n\tprivate _runningQueue = false;\n\t\n\tprivate _oplog: ChangeStream;\n\n\tprivate _nodeCache;\n\tprivate _cacheId = 1;\n\n\tprivate serverConfig;\n\n\tprivate _heapStats = v8.getHeapStatistics();\n\tprivate _heapLimit = 0;\n\n\t// private currentPerfomanceMonitor: CurrentPerformanceMonitor[] = [];\n\t// private idPerformance: number = 0;\n\t// private performanceThread;\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._heapLimit = this._heapStats.heap_size_limit / 4;\n\n\t\t// setTimeout(() => {\n\t\t// \tconsole.log('Setting up performance thread');\n\n\t\t// \tthis.performanceThread = new Worker(path.join(__dirname, './subscription.performance.js'));\n\n\t\t// \tthis.performanceThread.on('exit', code => {\n\t\t// \t\tconsole.error(new Date(), 'THREAD EXITED!!!!!!!!!!!!!!!!!!', code);\n\t\t// \t});\n\n\t\t// \tthis.performanceThread.on('error', code => {\n\t\t// \t\tconsole.error(new Date(), 'THREAD RECV ERROR !!!!!!!!!!!!!!!!!!', code);\n\t\t// \t});\n\t\t// }, 5000);\n\n\t\t// setInterval(() => {\n\t\t// \tconsole.log('Post thread msg');\n\t\t// \tthis.performanceThread.postMessage(this.currentPerfomanceMonitor);\n\t\t// \tthis.currentPerfomanceMonitor = [];\n\t\t// }, 10000);\n\n\t\tthis.serverConfig = serverConfig;\n\t\tthis._wss = wss;\n\n\t\t// Publications\n\t\tloadSuperAdminPublications(this);\n\t\tloadAppVersionPublications(this);\n\t\tloadAppStatusPublications(this);\n\t\tloadLogPublications(this);\n\t\tloadFilePublications(this);\n\t\tloadCronJobPublications(this);\n\t\tloadFlagsPublications(this);\n\t\tloadMethodResponsePublications(this);\n\t\tloadNotificationPublications(this);\n\t\tloadReportBuilderReportPublications(this);\n\t\tloadReportBuilderLibraryPublications(this);\n\t\tloadUserGroupPublications(this);\n\t\tloadUserGuidePublications(this);\n\t\tloadReportBuilderDashboardBuilderPublications(this);\n\n\t\tthis.tailOpLog();\n\n\t\tsetInterval(async () => {\n\t\t\tif (!this._runningQueue) {\n\t\t\t\tthis._runningQueue = true;\n\n\t\t\t\tif (this._sendQueue.length) {\n\t\t\t\t\t// let startDate = new Date();\n\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\t// let endDate = new Date();\n\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t// \tfunction: 'sendInterval',\n\t\t\t\t\t// \tpublication: '',\n\t\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t// \tresult: 'Done'\n\t\t\t\t\t// });\n\t\t\t\t}\n\n\t\t\t\tconst queueArr = this._mongoQueue.filter(a => !a.running);\n\t\t\t\tif (queueArr.length) {\n\t\t\t\t\tqueueArr.forEach(entry => {\n\t\t\t\t\t\tentry.running = true;\n\t\t\t\t\t});\n\n\t\t\t\t\t// let startDate = new Date();\n\n\t\t\t\t\tfor (let i = queueArr.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tlet mongoQueue = queueArr[i];\n\n\t\t\t\t\t\tif (this._publications[mongoQueue.subscription.publication].ws_specific) {\n\t\t\t\t\t\t\tfor (let j = 0; j < mongoQueue.subscription.clients.length; j++) {\n\t\t\t\t\t\t\t\tlet client = mongoQueue.subscription.clients[j];\n\t\t\t\t\t\t\t\tlet ws = this._mainServer.getWS(client.id_socket);\n\t\t\t\t\t\t\t\tif (ws && ws['id_socket'] === client.id_socket) {\n\t\t\t\t\t\t\t\t\tthis.sendPubDataOnce(ws, client.messageId, mongoQueue.subscription, mongoQueue.type, mongoQueue.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\telse {\n\t\t\t\t\t\t\tthis.sendPubData(mongoQueue.subscription, mongoQueue.type, mongoQueue.collection);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (mongoQueue.run_again) {\n\t\t\t\t\t\t\tmongoQueue.running = false;\n\t\t\t\t\t\t\tmongoQueue.run_again = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._mongoQueue.splice(this._mongoQueue.map(a => a._id).indexOf(mongoQueue._id), 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\n\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t// \tfunction: 'mongoQueue',\n\t\t\t\t\t// \tpublication: '',\n\t\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t// \tresult: 'Done'\n\t\t\t\t\t// });\n\t\t\t\t}\t\n\n\t\t\t\tthis._runningQueue = false;\n\t\t\t}\n\t\t}, 1);\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') >= 30) {\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\tLoggedInUsers.deleteOne({_id: loggedInUser._id});\n\n\t\t\t\t\t\tif (this._loggedInUsers.findIndex(a => a._id === loggedInUser._id) >= 0) {\n\t\t\t\t\t\t\tthis._loggedInUsers.splice(this._loggedInUsers.findIndex(a => a._id === loggedInUser._id), 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < this._subscriptions.length; i++) {\n\t\t\t\tlet sub = this._subscriptions[i];\n\n\t\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\t\tlet client = sub.clients[j];\n\n\t\t\t\t\tif (!this._loggedInUsers.some(a => a.id_ws === client.id_socket)) {\n\t\t\t\t\t\tsub.clients.splice(j, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, 30000);\n\t}\n\n\tprivate addToQueue(mongoQueue: MongoQueueModel) {\n\t\t// let startDate = new Date();\n\n\t\tlet _mongoQueue = this._mongoQueue.filter(a => a.subscription.publication === mongoQueue.subscription.publication && JSON.stringify(a.subscription.subscriptionData) === JSON.stringify(mongoQueue.subscription.subscriptionData))[0];\n\t\t\n\t\tif (_mongoQueue) {\n\t\t\tif (_mongoQueue.running) {\n\t\t\t\t_mongoQueue.run_again = true;\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'addToQueue',\n\t\t\t\t// \tpublication: mongoQueue.subscription.publication,\n\t\t\t\t// // \tsubscriptionData: mongoQueue.subscription.subscriptionData,\n\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Run Again'\n\t\t\t\t// });\n\t\t\t}\n\t\t\t// else {\n\t\t\t// \tlet endDate = new Date();\n\t\t\t// \tthis.currentPerfomanceMonitor.push({\n\t\t\t// \t\t_id: this.idPerformance++,\n\t\t\t// \t\tfunction: 'addToQueue',\n\t\t\t// \t\tpublication: mongoQueue.subscription.publication,\n\t\t\t// // \tsubscriptionData: mongoQueue.subscription.subscriptionData,\n\t\t\t// \t\tsubscriptionData: [],\n\t\t\t// \t\tdate_start: startDate,\n\t\t\t// \t\tdate_end: endDate,\n\t\t\t// \t\tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t// \t\tresult: 'Not Running Yet'\n\t\t\t// \t});\n\t\t\t// }\n\t\t}\n\t\telse {\n\t\t\tmongoQueue._id = this._mongoQueueId;\n\t\t\tthis._mongoQueueId += 1;\n\n\t\t\tthis._mongoQueue.splice(0, 0, mongoQueue);\n\t\t\t\n\t\t\t// let endDate = new Date();\n\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t// \t_id: this.idPerformance++,\n\t\t\t// \tfunction: 'addToQueue',\n\t\t\t// \tpublication: mongoQueue.subscription.publication,\n\t\t\t// // \tsubscriptionData: mongoQueue.subscription.subscriptionData,\n\t\t\t// \tsubscriptionData: [],\n\t\t\t// \tdate_start: startDate,\n\t\t\t// \tdate_end: endDate,\n\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t// \tresult: 'Add to Queue'\n\t\t\t// });\n\t\t}\n\t}\n\n\tpublic invalidatePubsCache(collection, type) {\n\t\t// let startDate = new Date();\n\n\t\tlet collSubs = this._subscriptions.filter(a => a.collections.includes(collection));\n\n\t\tfor (let i = collSubs.length - 1; i >= 0; i--) {\n\t\t\tlet sub = collSubs[i];\n\n\t\t\tif (sub.cacheId) {\n\t\t\t\tthis._nodeCache.del(sub.cacheId);\n\t\t\t\tsub.cacheId = 0;\n\t\t\t}\n\n\t\t\tthis.addToQueue({\n\t\t\t\t_id: 0,\n\t\t\t\ttype: type,\n\t\t\t\tcollection: collection,\n\t\t\t\tsubscription: sub,\n\t\t\t\trunning: false,\n\t\t\t\trun_again: false\n\t\t\t});\n\t\t}\n\n\t\tResolveIOServer.getMongoManager().invalidateQueryCache(collection);\n\n\t\t// let endDate = new Date();\n\t\t// this.currentPerfomanceMonitor.push({\n\t\t// \t_id: this.idPerformance++,\n\t\t// \tfunction: 'invalidatePubsCache',\n\t\t// \tpublication: collection,\n\t\t// \tsubscriptionData: [],\n\t\t// \tdate_start: startDate,\n\t\t// \tdate_end: endDate,\n\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t// \tresult: 'Done'\n\t\t// });\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 loggedInUser = this._loggedInUsers.filter(a => a.id_ws === ws['id_socket'])[0];\n\n\t\tif (loggedInUser) {\n\t\t\tloggedInUser.date = new Date();\n\n\t\t\tLoggedInUsers.updateOne({id_ws: ws['id_socket']}, {$set: {latency: ws['latency'], date: loggedInUser.date}}).then(res => {\n\t\t\t\tif (!res) {\n\t\t\t\t\tthis.unsubscribeAll(ws);\n\t\t\t\t}\n\t\t\t}, () => {\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\t// let startDate = new Date();\n\n\t\tlet pub = this._publications[publication];\n\n\t\tif (!pub) {\n\t\t\tconsole.error(new Date(), 'No Publication: ' + publication);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tif (subscriptionData.length > 1 || subscriptionData[0]) {\n\t\t\t\tif (!pub.check) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Function For Pub ' + publication);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if (!pub.check._schema) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Schema For Pub ' + publication);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet valObj = {};\n\t\t\t\t\tlet valKeys = Object.keys(pub.check._schema);\n\n\t\t\t\t\tlet rootKeys = valKeys.filter(a => !a.includes('.'));\n\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(new Date(), 'Error in Pub Check (' + publication + ')', errors);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet sub = this._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\tif (!sub.clients.some(a => a.id_socket === ws['id_socket'] && a.messageId === messageId)) {\n\t\t\t\t\tsub.clients.push({\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\tid_socket: ws['id_socket']\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If sub not found, create new sub\n\t\t\telse {\n\t\t\t\tthis._subscriptions.push({\n\t\t\t\t\tpublication: publication,\n\t\t\t\t\tsubscriptionData: subscriptionData,\n\t\t\t\t\tcollections: this.getPublicationCollections(publication),\n\t\t\t\t\tclients: [{\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\tid_socket: ws['id_socket']\n\t\t\t\t\t}],\n\t\t\t\t\tcacheId: 0\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!sub) {\n\t\t\t\tsub = this._subscriptions.filter(a => a.publication === publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscriptionData))[0];\n\t\t\t}\n\n\t\t\tif (!sub.cacheId && !this._mongoQueue.some(a => a.subscription.publication === sub.publication && JSON.stringify(a.subscription.subscriptionData) === JSON.stringify(sub.subscriptionData))) {\n\t\t\t\tthis.addToQueue({\n\t\t\t\t\t_id: 0,\n\t\t\t\t\ttype: 'newSub',\n\t\t\t\t\tcollection: '',\n\t\t\t\t\tsubscription: sub,\n\t\t\t\t\trunning: false,\n\t\t\t\t\trun_again: false\n\t\t\t\t});\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'subscribe',\n\t\t\t\t// \tpublication: publication,\n\t\t\t\t// // \tsubscriptionData: subscriptionData,\n\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Add to Queue'\n\t\t\t\t// });\n\t\t\t}\n\t\t\telse if (sub.cacheId) {\n\t\t\t\tthis.sendPubDataOnce(ws, messageId, sub, 'newSub', publication);\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'subscribe',\n\t\t\t\t// \tpublication: publication,\n\t\t\t\t// // \tsubscriptionData: subscriptionData,\n\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Send Pub Data Once'\n\t\t\t\t// });\n\t\t\t}\n\t\t}\n\n\t\tif (publication === 'appversion') {\n\t\t\tlet newLoggedInUser = this._loggedInUsers.filter(a => a.id_ws === ws['id_socket'])[0];\n\n\t\t\tif (newLoggedInUser) {\n\t\t\t\tif (ws['user'] !== 'Admin' && this.serverConfig['CLIENT_NAME'] !== 'ResolveIO') {\n\t\t\t\t\tthis._mainServer.getMethodManager().callMethodInternal.call(this._mainServer.getMethodManager(), 'supportCreateBillingUser', {\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\telse {\n\t\t\t\tthis.unsubscribeAll(ws);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic async createLoggedInUser(id_ws: string): Promise<LoggedInUserModel> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tlet ws = this._mainServer.getWS(id_ws);\n\n\t\t\tif (ws) {\n\t\t\t\tlet user = {\n\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t__v: 0,\n\t\t\t\t\tdate: new Date(),\n\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\tuser: ws['user'],\n\t\t\t\t\tid_ws: ws['id_socket']\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tawait LoggedInUsers.insertOne(user);\n\t\t\t\tthis._loggedInUsers.push(user);\n\t\t\t\t\n\t\t\t\tresolve(user);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tresolve(null);\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\t// let startDate = new Date();\n\t\t// console.log('Before');\n\t\t// console.dir(this._subscriptions.map(a => a.publication));\n\n\t\tif (!this._publications[publication]) {\n\t\t\tconsole.log('No Publication: ' + publication);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tlet sub = this._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\n\t\t// let endDate = new Date();\n\t\t// this.currentPerfomanceMonitor.push({\n\t\t// \t_id: this.idPerformance++,\n\t\t// \tfunction: 'unsubscribe',\n\t\t// \tpublication: publication,\n\t\t// // \tsubscriptionData: subscriptionData,\n\t\t// \tsubscriptionData: [],\n\t\t// \tdate_start: startDate,\n\t\t// \tdate_end: endDate,\n\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t// \tresult: 'Done'\n\t\t// });\n\t}\n\n\t// Unsubscribe from publication\n\tpublic async unsubscribeAll(ws: WebSocket) {\n\t\t// console.log('Before');\n\t\t// console.dir(this._subscriptions.map(a => a.publication));\n\n\t\t// let startDate = new Date();\n\n\t\tif (ws) {\n\t\t\tlet loggedInUser = await LoggedInUsers.findOne({id_ws: ws['id_socket']});\n\n\t\t\tif (loggedInUser) {\t\n\t\t\t\tif (this._loggedInUsers.map(a => a._id).indexOf(loggedInUser._id) >= 0) {\n\t\t\t\t\tthis._loggedInUsers.splice(this._loggedInUsers.map(a => a._id).indexOf(loggedInUser._id), 1);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tLoggedInUsers.deleteOne({_id: loggedInUser._id});\n\t\t\t}\n\n\t\t\tlet userSubs = this._subscriptions.filter(a => a.clients.some(b => b.id_user === ws['id_user'] && b.id_socket === ws['id_socket']));\n\n\t\t\tfor (let i = userSubs.length - 1; i >= 0; i--) {\n\t\t\t\tlet sub = userSubs[i];\n\n\t\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\t\tif (sub.clients[j].id_socket === ws['id_socket']) {\n\t\t\t\t\t\tsub.clients.splice(j, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tws.terminate();\n\n\t\t\t// let endDate = new Date();\n\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t// \t_id: this.idPerformance++,\n\t\t\t// \tfunction: 'unsubscribeAll',\n\t\t\t// \tpublication: '',\n\t\t\t// \tsubscriptionData: [],\n\t\t\t// \tdate_start: startDate,\n\t\t\t// \tdate_end: endDate,\n\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t// \tresult: 'Done'\n\t\t\t// });\n\t\t}\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().watch();\n\n\t\tthis._oplog.on('change', (doc: any) => {\n\t\t\t// let startDate = new Date();\n\n\t\t\tif (doc.ns) {\n\t\t\t\tlet collection = doc.ns.coll;\n\t\t\t\t// console.log(new Date(), 'Op log doc', doc.operationType, collection);\n\n\t\t\t\tif (collection && !collection.endsWith('.versions') && !collection.startsWith('monitor-') && collection !== 'logs' && collection !== 'log-method-latencies' && collection !== 'log-subscriptions') {\n\t\t\t\t\tif (doc.operationType === 'insert') {\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\t\t\t\t\t\telse if (collection === 'support-tickets') {\n\t\t\t\t\t\t\tif (this.serverConfig['ROOT_URL'] === 'https://resolveio.com') {\n\t\t\t\t\t\t\t\tthis._mainServer.getMethodManager().callMethodInternal.call(this._mainServer.getMethodManager(), 'sendSupportTicketEmail', doc.documentKey._id);\n\t\t\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'insert');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (collection !== 'method-responses') {\n\t\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'insert');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t// \tfunction: 'oplog',\n\t\t\t\t\t\t// \tpublication: collection,\n\t\t\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t// \tresult: 'Insert'\n\t\t\t\t\t\t// });\n\t\t\t\t\t}\n\t\t\t\t\telse if (doc.operationType === 'update' || doc.operationType === 'replace') {\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\t\t\t\t\t\t\n\t\t\t\t\t\tif (collection !== 'method-responses') {\n\t\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'update');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t// \tfunction: 'oplog',\n\t\t\t\t\t\t// \tpublication: collection,\n\t\t\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t// \tresult: 'Update'\n\t\t\t\t\t\t// });\n\t\t\t\t\t}\n\t\t\t\t\telse if (doc.operationType === 'delete') {\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\t\t\t\t\t\t\n\t\t\t\t\t\tif (collection !== 'method-responses') {\n\t\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'delete');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t// \tfunction: 'oplog',\n\t\t\t\t\t\t// \tpublication: collection,\n\t\t\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t// \tresult: 'Delete'\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});\n\t\t\n\t\tthis._oplog.on('error', error => {\n\t\t\tconsole.log('oplog error', error);\n\n\t\t\tprocess.exit(1);\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(1);\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\t// let startDate = new Date();\n\n\t\t\tif (!this._publications[subscription.publication].ws_specific) { // Same pub for all users\n\t\t\t\tif (subscription.cacheId) {\n\t\t\t\t\tlet cacheData = null;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcacheData = JSON.parse(this._nodeCache.get(subscription.cacheId), dateReviver);\n\t\t\t\t\t}\n\t\t\t\t\tcatch(err) {\n\t\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t\t\tsubscription.cacheId = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (cacheData) {\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: cacheData\n\t\t\t\t\t\t};\n\t\n\t\t\t\t\t\tif (serverRes.data === undefined) {\n\t\t\t\t\t\t\tsubscription.cacheId = 0;\n\t\t\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During SendPubDataOnce - Invalid Cache! - ' + subscription.publication + '\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (subscription.publication === 'userWithId' && cacheData._id !== ws['id_user']) {\n\t\t\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'SENDING INCORRECT USER FOR USERWITHID - 2!! Cached Data: : ' + JSON.stringify(cacheData) + ', Socket User: ' + ws['id_user'] + ', Sub: ' + JSON.stringify(subscription, null, 2) + ', All Subs: ' + JSON.stringify(this._publications, null, 2));\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.addToQueue({\n\t\t\t\t\t\t\t_id: 0,\n\t\t\t\t\t\t\ttype: 'newSub',\n\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\tsubscription: subscription,\n\t\t\t\t\t\t\trunning: false,\n\t\t\t\t\t\t\trun_again: false\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t// \tfunction: 'sendPubDataOnce',\n\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t// // \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t// \tresult: 'Send cache'\n\t\t\t\t\t// });\n\n\t\t\t\t\tresolve(true);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During SendPubDataOnce - No Cache! - ' + subscription.publication + '\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2));\n\n\t\t\t\t\tresolve(false);\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\tthis._publications[subscription.publication].function.call(Object.assign({}, this, SubscriptionManager.prototype), ws['id_user'], ...subscription.subscriptionData)\n\t\t\t\t.catch(methodErrs => {\n\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During Subscription ' + subscription.publication + ' - (sendPubDataOnce - WS)\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2) + '\\n\\nErrors\\n' + JSON.stringify(methodErrs, null, 2));\n\t\t\t\t})\n\t\t\t\t.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\tif (subscription.publication === 'userWithId' && res._id !== ws['id_user']) {\n\t\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'SENDING INCORRECT USER FOR USERWITHID - 3!! Cached Data: : ' + JSON.stringify(res) + ', Socket User: ' + ws['id_user'] + ', Sub: ' + JSON.stringify(subscription, null, 2) + ', All Subs: ' + JSON.stringify(this._publications, null, 2));\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\t// let endDate = new Date();\n\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t// \tfunction: 'sendPubDataOnce',\n\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t// // \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t// \tresult: 'Send ws spec data'\n\t\t\t\t\t// });\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\t// let startDate = new Date();\n\n\t\t\tif (!subscription.clients.length) {\n\t\t\t\tif (subscription.cacheId) {\n\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t}\n\n\t\t\t\tthis._subscriptions.splice(this._subscriptions.findIndex(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)), 1);\n\n\t\t\t\tresolve(false);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (subscription.publication !== 'superadminAPM' && subscription.publication !== 'loggedInUsers') {\n\t\t\t\t\tthis._mainServer.getMethodManager().callMethodInternal.call(this._mainServer.getMethodManager(), 'insertSubscriptionLog', type, subscription.publication, collection, JSON.stringify(subscription.subscriptionData));\n\t\t\t\t}\n\n\t\t\t\tthis._publications[subscription.publication].function.call(Object.assign({}, this, SubscriptionManager.prototype), ...subscription.subscriptionData)\n\t\t\t\t.catch(methodErrs => {\n\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During Subscription ' + subscription.publication + ' - (sendPubData)\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2) + '\\n\\nErrors\\n' + JSON.stringify(methodErrs, null, 2));\n\t\t\t\t})\n\t\t\t\t.then(res => {\n\t\t\t\t\tif (!subscription.clients.length) {\n\t\t\t\t\t\tif (subscription.cacheId) {\n\t\t\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._subscriptions.splice(this._subscriptions.findIndex(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)), 1);\n\n\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t// \tfunction: 'sendPubData',\n\t\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t\t// // \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t// \tresult: 'No clients'\n\t\t\t\t\t\t// });\n\n\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (!subscription.cacheId || this._nodeCache.get(subscription.cacheId) !== JSON.stringify(res)) {\n\t\t\t\t\t\t\tsubscription.clients.forEach(client => {\n\t\t\t\t\t\t\t\tlet ws = this._mainServer.getWS(client.id_socket);\n\n\t\t\t\t\t\t\t\tif (ws) {\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\n\t\t\t\t\t\t\t\t\tif (subscription.publication === 'userWithId' && client.id_user !== ws['id_user']) {\n\t\t\t\t\t\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'SENDING INCORRECT USER FOR USERWITHID!! Client User: ' + client.id_user + ', Socket User: ' + ws['id_user'] + ', Sub: ' + JSON.stringify(subscription, null, 2) + ', All Subs: ' + JSON.stringify(this._publications, null, 2));\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\n\t\t\t\t\t\t\tlet nodeCacheSize = this._nodeCache.getStats().vsize;\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (nodeCacheSize > this._heapLimit) {\n\t\t\t\t\t\t\t\tlet deleteCount = 0;\n\n\t\t\t\t\t\t\t\tconst subArr = this._subscriptions.filter(a => a.cacheId);\n\t\n\t\t\t\t\t\t\t\tfor (let zz = 0; zz < subArr.length; zz++) {\n\t\t\t\t\t\t\t\t\tthis._nodeCache.del(subArr[zz].cacheId);\n\t\t\t\t\t\t\t\t\tsubArr[zz].cacheId = 0;\n\t\n\t\t\t\t\t\t\t\t\tdeleteCount += 1;\n\n\t\t\t\t\t\t\t\t\tnodeCacheSize = this._nodeCache.getStats().vsize;\n\t\n\t\t\t\t\t\t\t\t\tif (nodeCacheSize < this._heapLimit * 0.75) {\n\t\t\t\t\t\t\t\t\t\tbreak;\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\t\n\t\t\t\t\t\t\t\tconsole.log('Sub Cache: ' + 'Too Big - ' + subscription.publication + ' - Deleted: ' + deleteCount + ' - ' + nodeCacheSize);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (subscription.cacheId) {\n\t\t\t\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tlet cacheId = this._cacheId;\n\t\t\t\t\t\t\tthis._cacheId += 1;\n\n\t\t\t\t\t\t\tthis._nodeCache.set(cacheId, JSON.stringify(res));\n\t\t\t\t\t\t\tsubscription.cacheId = cacheId;\n\n\t\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t\t// \tfunction: 'sendPubData',\n\t\t\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t\t\t// // \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t\t// \tresult: 'Same data'\n\t\t\t\t\t\t\t// });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t}\n\t\t\t\t}, err => {\n\t\t\t\t\tsubscription.clients.forEach(client => {\n\t\t\t\t\t\tlet ws = this._mainServer.getWS(client.id_socket);\n\n\t\t\t\t\t\tif (ws) {\n\t\t\t\t\t\t\tif (ws['id_socket'] === client.id_socket) {\n\t\t\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\t\t\t\tdata: err\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate sendWS(ws: WebSocket, data: ServerResponseModel) {\n\t\tthis._sendQueue.splice(0, 0, {\n\t\t\tid_ws: ws['id_socket'],\n\t\t\tdata: data\n\t\t});\n\t}\n}\n"]}
|
package/methods/accounts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/methods/accounts.ts"],"names":[],"mappings":"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","file":"accounts.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { Users } from '../collections/user.collection';\nimport * as handlebars from 'handlebars';\nimport * as jwt from 'jsonwebtoken';\nimport { LoggedInUsers } from '../collections/logged-in-users.collection';\nimport { MethodManager } from '../managers/method.manager';\nimport { ResolveIOServer } from '../index';\nimport { UserModel } from '../models/user.model';\nimport { objectIdHexString } from '../managers/mongo.manager';\n\nexport function loadAccountMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\tsetWSAppVersion: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tversion: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(version) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tLoggedInUsers.updateOne({id_ws: this.id_ws}, {$set: {app_version: version}}).then(res => {\n\t\t\t\t\t\tif (res) {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tResolveIOServer.getMainServer().getSubscriptionManager().unsubscribeAll(this._mainServer.getWS(this.id_ws));\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tResolveIOServer.getMainServer().getSubscriptionManager().unsubscribeAll(this._mainServer.getWS(this.id_ws));\n\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\treloadWS: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_ws: String\n\t\t\t}),\n\t\t\tfunction: function(id_ws) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet ws = ResolveIOServer.getMainServer().getWS(id_ws);\n\n\t\t\t\t\tif (ws) {\n\t\t\t\t\t\tResolveIOServer.getMainServer().unsubscribeWS(ws);\n\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treject('No WS');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\treconnectWS: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_ws: String\n\t\t\t}),\n\t\t\tfunction: function(id_ws) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet ws = ResolveIOServer.getMainServer().getWS(id_ws);\n\n\t\t\t\t\tif (ws) {\n\t\t\t\t\t\tResolveIOServer.getMainServer().unsubscribeWS(ws);\n\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treject('No WS');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tdisconnectWS: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_ws: String\n\t\t\t}),\n\t\t\tfunction: function(id_ws) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet ws = ResolveIOServer.getMainServer().getWS(id_ws);\n\n\t\t\t\t\tif (ws) {\n\t\t\t\t\t\tResolveIOServer.getMainServer().unsubscribeWS(ws);\n\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treject('No WS');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tcreateUserAndEmailEnrollment: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tnewUser: {\n\t\t\t\t\ttype: Users['simplschema']\n\t\t\t\t},\n\t\t\t\tsendEnrollmentEmail: {\n\t\t\t\t\ttype: Boolean,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(newUser: UserModel, sendEnrollmentEmail = true) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tnewUser._id = objectIdHexString();\n\n\t\t\t\t\tnewUser.services = {\n\t\t\t\t\t\tenrollment: jwt.sign({id_user: newUser._id}, this.serverConfig['JWT_SECRET'], {\n\t\t\t\t\t\t\texpiresIn : 3 * 24 * 60 * 60 * 1000 // 3 days\n\t\t\t\t\t\t})\n\t\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\t\tawait Users.insertOne(newUser);\n\n\t\t\t\t\tif (sendEnrollmentEmail) {\n\t\t\t\t\t\tlet emailData = {\n\t\t\t\t\t\t\tfullname: newUser.fullname,\n\t\t\t\t\t\t\tuser: this.user,\n\t\t\t\t\t\t\turl: this.serverConfig['ROOT_URL'] + '/enroll-account?' + encodeURIComponent(this.serverConfig['SERVER_URL']) + '&' + newUser.services['enrollment']\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tthis.readFile('email-templates/enrollment.html').then(html => {\n\t\t\t\t\t\t\tlet template = handlebars.compile(html);\n\t\t\t\t\t\t\thandlebars.registerHelper('equals', (a, b) => {\n\t\t\t\t\t\t\t\treturn a === b;\n\t\t\t\t\t\t\t});\n\t\t\n\t\t\t\t\t\t\tthis.sendEmail(newUser.email, 'ResolveIO (' + ResolveIOServer.getClientName() + ') - Enrollment Email', '', template(emailData));\n\t\t\n\t\t\t\t\t\t\tresolve(newUser);\n\t\t\t\t\t\t}, errEmail => reject(errEmail));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tresetUserPassword: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tuserId: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(userId: string) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\t\t\t\t\n\t\t\t\t\tlet user = await Users.findOne({_id: userId});\n\t\t\n\t\t\t\t\tif (user) {\n\n\t\t\t\t\t\tuser.services['forgot_password'] = jwt.sign({id_user: userId}, this.serverConfig['JWT_SECRET']);\n\n\t\t\t\t\t\tlet emailData = {\n\t\t\t\t\t\t\tuserToChangePassword: user.fullname,\n\t\t\t\t\t\t\tuserWhoResetPassword: this.user,\n\t\t\t\t\t\t\turl: this.serverConfig['ROOT_URL'] + '/forgot-password?' + encodeURIComponent(this.serverConfig['SERVER_URL']) + '&' + user.services['forgot_password']\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tUsers.updateOne({_id: user._id}, {$set: {services: user.services, attempts: 0}}).then(() => {\n\t\t\t\t\t\t\tthis.readFile('email-templates/forgot-password.html').then(html => {\n\t\t\t\t\t\t\t\tlet template = handlebars.compile(html);\n\t\t\t\t\t\t\t\thandlebars.registerHelper('equals', (a, b) => {\n\t\t\t\t\t\t\t\t\treturn a === b;\n\t\t\t\t\t\t\t\t});\n\t\t\t\n\t\t\t\t\t\t\t\tthis.sendEmail(user.email, 'ResolveIO (' + ResolveIOServer.getClientName() + ') - Forgot Password', '', template(emailData));\n\t\t\t\n\t\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t\t}, errEmail => reject(errEmail));\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},\n\t\tsetUserPassword: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tuserId: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tpassword: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(userId: string, password: string) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\t\t\t\t\n\t\t\t\t\tlet user = await Users.findOne({_id: userId});\n\t\t\n\t\t\t\t\tif (user && !user.roles.super_admin) {\n\t\t\t\t\t\tawait Users.setPassword(user, password);\n\n\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treject('Invalid User');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../src/methods/accounts.ts"],"names":[],"mappings":"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","file":"accounts.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { Users } from '../collections/user.collection';\nimport * as handlebars from 'handlebars';\nimport * as jwt from 'jsonwebtoken';\nimport { LoggedInUsers } from '../collections/logged-in-users.collection';\nimport { MethodManager } from '../managers/method.manager';\nimport { ResolveIOServer } from '../index';\nimport { UserModel } from '../models/user.model';\nimport { objectIdHexString } from '../managers/mongo.manager';\n\nexport function loadAccountMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\tsetWSAppVersion: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tversion: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(version) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tLoggedInUsers.updateOne({id_ws: this.id_ws}, {$set: {app_version: version}}).then(res => {\n\t\t\t\t\t\tif (res) {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tResolveIOServer.getMainServer().getSubscriptionManager().unsubscribeAll(this._mainServer.getWS(this.id_ws));\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tResolveIOServer.getMainServer().getSubscriptionManager().unsubscribeAll(this._mainServer.getWS(this.id_ws));\n\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\treloadWS: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_ws: String\n\t\t\t}),\n\t\t\tfunction: function(id_ws) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet ws = ResolveIOServer.getMainServer().getWS(id_ws);\n\n\t\t\t\t\tif (ws) {\n\t\t\t\t\t\tResolveIOServer.getMainServer().unsubscribeWS(ws);\n\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treject('No WS');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\treconnectWS: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_ws: String\n\t\t\t}),\n\t\t\tfunction: function(id_ws) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet ws = ResolveIOServer.getMainServer().getWS(id_ws);\n\n\t\t\t\t\tif (ws) {\n\t\t\t\t\t\tResolveIOServer.getMainServer().unsubscribeWS(ws);\n\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treject('No WS');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tdisconnectWS: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_ws: String\n\t\t\t}),\n\t\t\tfunction: function(id_ws) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet ws = ResolveIOServer.getMainServer().getWS(id_ws);\n\n\t\t\t\t\tif (ws) {\n\t\t\t\t\t\tResolveIOServer.getMainServer().unsubscribeWS(ws);\n\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treject('No WS');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tcreateUserAndEmailEnrollment: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tnewUser: {\n\t\t\t\t\ttype: Users['simplschema']\n\t\t\t\t},\n\t\t\t\tsendEnrollmentEmail: {\n\t\t\t\t\ttype: Boolean,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(newUser: UserModel, sendEnrollmentEmail = true) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tnewUser._id = objectIdHexString();\n\n\t\t\t\t\tnewUser.services = {\n\t\t\t\t\t\tenrollment: jwt.sign({id_user: newUser._id}, this.serverConfig['JWT_SECRET'], {\n\t\t\t\t\t\t\texpiresIn : 3 * 24 * 60 * 60 * 1000 // 3 days\n\t\t\t\t\t\t})\n\t\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\t\tawait Users.insertOne(newUser);\n\n\t\t\t\t\tif (sendEnrollmentEmail) {\n\t\t\t\t\t\tlet emailData = {\n\t\t\t\t\t\t\tfullname: newUser.fullname,\n\t\t\t\t\t\t\tuser: this.user,\n\t\t\t\t\t\t\turl: this.serverConfig['ROOT_URL'] + '/enroll-account?' + encodeURIComponent(this.serverConfig['SERVER_URL']) + '&' + newUser.services['enrollment']\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tthis.readFile('email-templates/enrollment.html').then(html => {\n\t\t\t\t\t\t\tlet template = handlebars.compile(html);\n\t\t\t\t\t\t\thandlebars.registerHelper('equals', (a, b) => {\n\t\t\t\t\t\t\t\treturn a === b;\n\t\t\t\t\t\t\t});\n\t\t\n\t\t\t\t\t\t\tthis.sendEmail(newUser.email, 'ResolveIO (' + ResolveIOServer.getClientName() + ') - Enrollment Email', '', template(emailData));\n\t\t\n\t\t\t\t\t\t\tresolve(newUser);\n\t\t\t\t\t\t}, errEmail => reject(errEmail));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tresetUserPassword: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tuserId: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(userId: string) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\t\t\t\t\n\t\t\t\t\tlet user = await Users.findOne({_id: userId});\n\t\t\n\t\t\t\t\tif (user) {\n\n\t\t\t\t\t\tuser.services['forgot_password'] = jwt.sign({id_user: userId}, this.serverConfig['JWT_SECRET']);\n\n\t\t\t\t\t\tlet emailData = {\n\t\t\t\t\t\t\tuserToChangePassword: user.fullname,\n\t\t\t\t\t\t\tuserWhoResetPassword: this.user,\n\t\t\t\t\t\t\turl: this.serverConfig['ROOT_URL'] + '/forgot-password?' + encodeURIComponent(this.serverConfig['SERVER_URL']) + '&' + user.services['forgot_password']\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tUsers.updateOne({_id: user._id}, {$set: {services: user.services, attempts: 0}}).then(() => {\n\t\t\t\t\t\t\tthis.readFile('email-templates/forgot-password.html').then(html => {\n\t\t\t\t\t\t\t\tlet template = handlebars.compile(html);\n\t\t\t\t\t\t\t\thandlebars.registerHelper('equals', (a, b) => {\n\t\t\t\t\t\t\t\t\treturn a === b;\n\t\t\t\t\t\t\t\t});\n\t\t\t\n\t\t\t\t\t\t\t\tthis.sendEmail(user.email, 'ResolveIO (' + ResolveIOServer.getClientName() + ') - Forgot Password', '', template(emailData));\n\t\t\t\n\t\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t\t}, errEmail => reject(errEmail));\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},\n\t\tsetUserPassword: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tuserId: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tpassword: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(userId: string, password: string) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\t\t\n\t\t\t\t\tlet user = await Users.findOne({_id: userId});\n\t\t\n\t\t\t\t\tif (user && !user.roles.super_admin) {\n\t\t\t\t\t\tawait Users.setPassword(user, password);\n\n\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treject('Invalid User');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n}"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@resolveio/server-lib",
|
|
3
|
-
"version": "9.7.
|
|
3
|
+
"version": "9.7.17",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "index.ts",
|
|
6
6
|
"scripts": {
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"jwt-decode": "3.1.2",
|
|
33
33
|
"moment": "2.29.1",
|
|
34
34
|
"moment-timezone": "0.5.31",
|
|
35
|
-
"mongodb": "
|
|
35
|
+
"mongodb": "4.1.3",
|
|
36
36
|
"node-cache": "5.1.2",
|
|
37
37
|
"node-google-timezone": "0.1.1",
|
|
38
38
|
"nodemailer": "6.4.14",
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
"jwt-decode": "3.1.2",
|
|
91
91
|
"moment": "2.29.1",
|
|
92
92
|
"moment-timezone": "0.5.31",
|
|
93
|
-
"mongodb": "
|
|
93
|
+
"mongodb": "4.1.3",
|
|
94
94
|
"node-cache": "5.1.2",
|
|
95
95
|
"node-google-timezone": "0.1.1",
|
|
96
96
|
"nodemailer": "6.4.14",
|
package/server-app.js
CHANGED
|
@@ -83,7 +83,7 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
83
83
|
this.standardProgram = standardProgram;
|
|
84
84
|
this._serverStartTime = new Date();
|
|
85
85
|
this._lastErrorMsg = null;
|
|
86
|
-
if (
|
|
86
|
+
if (monitorAgent) {
|
|
87
87
|
this._monitorManager = new monitor_manager_1.MonitorManager(mainServer, monitorAgent, serverConfig);
|
|
88
88
|
}
|
|
89
89
|
process.on('unhandledRejection', function (error, rej) { return __awaiter(_this, void 0, void 0, function () {
|
|
@@ -613,97 +613,98 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
613
613
|
var _loop_1, this_1, i;
|
|
614
614
|
var _this = this;
|
|
615
615
|
return __generator(this, function (_a) {
|
|
616
|
-
// console.log(data);
|
|
617
616
|
if (!this._msgQueueRunning) {
|
|
618
|
-
this.
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
if (method !== 'reportBuilderGetResults' && method !== 'reportBuilderGetDistinctValue' && method !== 'reportBuilderBuildTree' && method !== 'generatePDF' && method !== 'getWOOfflineData' && method !== 'countQuery' && method !== 'countWithQuery' && method !== 'countCollectionWithQuery' && method !== 'find' && method !== 'findOne' && method !== 'findWithOptions' && method !== 'getDrivers') {
|
|
644
|
-
log_collection_1.Logs.insertOne({
|
|
645
|
-
_id: mongo_manager_1.objectIdHexString(),
|
|
646
|
-
type: 'client-request',
|
|
647
|
-
collection: '',
|
|
648
|
-
id_document: '',
|
|
649
|
-
payload: common_1.getBinarySize(JSON.stringify(data)) < 200000 ? JSON.stringify(data, null, 2) : 'Too Big',
|
|
650
|
-
method: method,
|
|
651
|
-
id_user: ws['id_user'] || '',
|
|
652
|
-
user: ws['user'] || '',
|
|
653
|
-
messageId: messageId,
|
|
654
|
-
route: messageRoute
|
|
617
|
+
if (this._msgQueue.length) {
|
|
618
|
+
this._msgQueueRunning = true;
|
|
619
|
+
_loop_1 = function (i) {
|
|
620
|
+
var _a;
|
|
621
|
+
var msg = this_1._msgQueue.pop();
|
|
622
|
+
var data = msg.data;
|
|
623
|
+
var ws = msg.ws;
|
|
624
|
+
var messageRoute = data.shift();
|
|
625
|
+
var messageDate = data.shift();
|
|
626
|
+
var messageId = data.shift();
|
|
627
|
+
var type = data.shift();
|
|
628
|
+
// Method call
|
|
629
|
+
if (type === 'method') {
|
|
630
|
+
var method = data.shift();
|
|
631
|
+
if (ws['user_readonly']) {
|
|
632
|
+
return "continue";
|
|
633
|
+
}
|
|
634
|
+
var methodLatencyId = mongo_manager_1.objectIdHexString();
|
|
635
|
+
log_method_latency_collection_1.LogMethodLatencies.create({
|
|
636
|
+
_id: methodLatencyId,
|
|
637
|
+
__v: 0,
|
|
638
|
+
date_start: new Date(),
|
|
639
|
+
date_end: null,
|
|
640
|
+
latency_ms: 0,
|
|
641
|
+
method: method
|
|
655
642
|
});
|
|
643
|
+
if (method !== 'reportBuilderGetResults' && method !== 'reportBuilderGetDistinctValue' && method !== 'reportBuilderBuildTree' && method !== 'generatePDF' && method !== 'getWOOfflineData' && method !== 'countQuery' && method !== 'countWithQuery' && method !== 'countCollectionWithQuery' && method !== 'find' && method !== 'findOne' && method !== 'findWithOptions' && method !== 'getDrivers') {
|
|
644
|
+
log_collection_1.Logs.insertOne({
|
|
645
|
+
_id: mongo_manager_1.objectIdHexString(),
|
|
646
|
+
type: 'client-request',
|
|
647
|
+
collection: '',
|
|
648
|
+
id_document: '',
|
|
649
|
+
payload: common_1.getBinarySize(JSON.stringify(data)) < 200000 ? JSON.stringify(data, null, 2) : 'Too Big',
|
|
650
|
+
method: method,
|
|
651
|
+
id_user: ws['id_user'] || '',
|
|
652
|
+
user: ws['user'] || '',
|
|
653
|
+
messageId: messageId,
|
|
654
|
+
route: messageRoute
|
|
655
|
+
});
|
|
656
|
+
}
|
|
657
|
+
var serverRes = {
|
|
658
|
+
messageId: messageId,
|
|
659
|
+
hasError: false,
|
|
660
|
+
data: 'ACK'
|
|
661
|
+
};
|
|
662
|
+
if (ws && ws.readyState === ws.OPEN) {
|
|
663
|
+
ws.send(JSON.stringify(serverRes), function (error) {
|
|
664
|
+
if (error) {
|
|
665
|
+
console.log('Error on WS: ', error);
|
|
666
|
+
_this.unsubscribeWS(ws);
|
|
667
|
+
}
|
|
668
|
+
});
|
|
669
|
+
}
|
|
670
|
+
if (this_1._methodManager._methods[method]) {
|
|
671
|
+
(_a = this_1._methodManager).callMethod.apply(_a, __spreadArrays([methodLatencyId, ws, messageDate, messageId, method], data));
|
|
672
|
+
}
|
|
673
|
+
else {
|
|
674
|
+
console.log('Could not find method: ' + method);
|
|
675
|
+
}
|
|
656
676
|
}
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
677
|
+
else if (type === 'methodResponse') {
|
|
678
|
+
var method = data.shift();
|
|
679
|
+
method_response_collection_1.MethodResponses.findOne({ $and: [
|
|
680
|
+
{ id_user: ws['id_user'] },
|
|
681
|
+
{ message_id: messageId },
|
|
682
|
+
{ method: method },
|
|
683
|
+
{ date: messageDate }
|
|
684
|
+
] }).then(function (res) {
|
|
685
|
+
if (res) {
|
|
686
|
+
if (ws && ws.readyState === ws.OPEN) {
|
|
687
|
+
ws.send(JSON.stringify(res.response), function (error) {
|
|
688
|
+
if (error) {
|
|
689
|
+
console.log('Error on WS: ', error);
|
|
690
|
+
_this.unsubscribeWS(ws);
|
|
691
|
+
}
|
|
692
|
+
});
|
|
693
|
+
}
|
|
667
694
|
}
|
|
668
|
-
});
|
|
669
|
-
}
|
|
670
|
-
if (this_1._methodManager._methods[method]) {
|
|
671
|
-
(_a = this_1._methodManager).callMethod.apply(_a, __spreadArrays([methodLatencyId, ws, messageDate, messageId, method], data));
|
|
695
|
+
}, function (err) { });
|
|
672
696
|
}
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
else if (type === 'methodResponse') {
|
|
678
|
-
var method = data.shift();
|
|
679
|
-
method_response_collection_1.MethodResponses.findOne({ $and: [
|
|
680
|
-
{ id_user: ws['id_user'] },
|
|
681
|
-
{ message_id: messageId },
|
|
682
|
-
{ method: method },
|
|
683
|
-
{ date: messageDate }
|
|
684
|
-
] }).then(function (res) {
|
|
685
|
-
if (res) {
|
|
686
|
-
if (ws && ws.readyState === ws.OPEN) {
|
|
687
|
-
ws.send(JSON.stringify(res.response), function (error) {
|
|
688
|
-
if (error) {
|
|
689
|
-
console.log('Error on WS: ', error);
|
|
690
|
-
_this.unsubscribeWS(ws);
|
|
691
|
-
}
|
|
692
|
-
});
|
|
693
|
-
}
|
|
694
|
-
}
|
|
695
|
-
}, function (err) { });
|
|
697
|
+
};
|
|
698
|
+
this_1 = this;
|
|
699
|
+
for (i = this._msgQueue.length - 1; i >= 0; i--) {
|
|
700
|
+
_loop_1(i);
|
|
696
701
|
}
|
|
697
|
-
|
|
698
|
-
this_1 = this;
|
|
699
|
-
for (i = this._msgQueue.length - 1; i >= 0; i--) {
|
|
700
|
-
_loop_1(i);
|
|
702
|
+
this._msgQueueRunning = false;
|
|
701
703
|
}
|
|
702
|
-
this._msgQueueRunning = false;
|
|
703
704
|
}
|
|
704
705
|
return [2 /*return*/];
|
|
705
706
|
});
|
|
706
|
-
}); },
|
|
707
|
+
}); }, 1);
|
|
707
708
|
};
|
|
708
709
|
ResolveIOMainServer.prototype.unsubscribeWS = function (ws) {
|
|
709
710
|
this._subscriptionManager.unsubscribeAll(ws);
|