@resolveio/server-lib 20.0.28 → 20.1.0
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/client-server-app.js +1 -1
- package/client-server-app.js.map +1 -1
- package/cron/cron.js +1 -1
- package/cron/cron.js.map +1 -1
- package/fixtures/cron-jobs.js +1 -1
- package/fixtures/cron-jobs.js.map +1 -1
- package/fixtures/init.js +1 -1
- package/fixtures/init.js.map +1 -1
- package/http/auth.js +1 -1
- package/http/auth.js.map +1 -1
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/managers/cron.manager.js +1 -1
- package/managers/cron.manager.js.map +1 -1
- package/managers/method.manager.js +1 -1
- package/managers/method.manager.js.map +1 -1
- package/managers/mongo.manager.js +1 -1
- package/managers/mongo.manager.js.map +1 -1
- package/managers/monitor.manager.js +1 -1
- package/managers/monitor.manager.js.map +1 -1
- package/managers/subscription.manager.js +1 -1
- package/managers/subscription.manager.js.map +1 -1
- package/methods/accounts.js +1 -1
- package/methods/accounts.js.map +1 -1
- package/methods/aws.js +1 -1
- package/methods/aws.js.map +1 -1
- package/methods/counters.js +1 -1
- package/methods/counters.js.map +1 -1
- package/methods/cron-jobs.js +1 -1
- package/methods/cron-jobs.js.map +1 -1
- package/methods/logs.js +1 -1
- package/methods/logs.js.map +1 -1
- package/methods/monitor.js +1 -1
- package/methods/monitor.js.map +1 -1
- package/methods/pdf.js +1 -1
- package/methods/pdf.js.map +1 -1
- package/methods/report-builder.js +1 -1
- package/methods/report-builder.js.map +1 -1
- package/methods/support.js +1 -1
- package/methods/support.js.map +1 -1
- package/methods.ts +34 -0
- package/package.json +1 -1
- package/publications/report-builder-libraries.js +1 -1
- package/publications/report-builder-libraries.js.map +1 -1
- package/publications.ts +31 -0
- package/server-app.js +1 -1
- package/server-app.js.map +1 -1
- package/util/schema-report-builder.js +1 -1
- package/util/schema-report-builder.js.map +1 -1
package/server-app.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var __awaiter=this&&this.__awaiter||function(e,i,a,u){return new(a=a||Promise)(function(r,t){function n(e){try{s(u.next(e))}catch(e){t(e)}}function o(e){try{s(u.throw(e))}catch(e){t(e)}}function s(e){var t;e.done?r(e.value):((t=e.value)instanceof a?t:new a(function(e){e(t)})).then(n,o)}s((u=u.apply(e,i||[])).next())})},__generator=this&&this.__generator||function(n,o){var s,i,a,u={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},l={next:e(0),throw:e(1),return:e(2)};return"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function e(r){return function(e){var t=[r,e];if(s)throw new TypeError("Generator is already executing.");for(;u=l&&t[l=0]?0:u;)try{if(s=1,i&&(a=2&t[0]?i.return:t[0]?i.throw||((a=i.return)&&a.call(i),0):i.next)&&!(a=a.call(i,t[1])).done)return a;switch(i=0,(t=a?[2&t[0],a.value]:t)[0]){case 0:case 1:a=t;break;case 4:return u.label++,{value:t[1],done:!1};case 5:u.label++,i=t[1],t=[0];continue;case 7:t=u.ops.pop(),u.trys.pop();continue;default:if(!(a=0<(a=u.trys).length&&a[a.length-1])&&(6===t[0]||2===t[0])){u=0;continue}if(3===t[0]&&(!a||t[1]>a[0]&&t[1]<a[3]))u.label=t[1];else if(6===t[0]&&u.label<a[1])u.label=a[1],a=t;else{if(!(a&&u.label<a[2])){a[2]&&u.ops.pop(),u.trys.pop();continue}u.label=a[2],u.ops.push(t)}}t=o.call(n,u)}catch(e){t=[6,e],i=0}finally{s=a=0}if(5&t[0])throw t[1];return{value:t[0]?t[1]:void 0,done:!0}}}},__spreadArray=this&&this.__spreadArray||function(e,t,r){if(r||2===arguments.length)for(var n,o=0,s=t.length;o<s;o++)!n&&o in t||((n=n||Array.prototype.slice.call(t,0,o))[o]=t[o]);return e.concat(n||Array.prototype.slice.call(t))},http_1=(Object.defineProperty(exports,"__esModule",{value:!0}),require("http")),express=require("express"),bodyParser=require("body-parser"),xmlParser=require("express-xml-bodyparser"),WebSocket=require("ws"),jwt=require("jsonwebtoken"),moment=require("moment-timezone"),common_1=require("./util/common"),mongo_manager_1=require("./managers/mongo.manager"),cron_manager_1=require("./managers/cron.manager"),method_manager_1=require("./managers/method.manager"),subscription_manager_1=require("./managers/subscription.manager"),monitor_manager_1=require("./managers/monitor.manager"),method_response_collection_1=require("./collections/method-response.collection"),log_collection_1=require("./collections/log.collection"),log_method_latency_collection_1=require("./collections/log-method-latency.collection"),user_collection_1=require("./collections/user.collection"),home_1=require("./http/home"),auth_1=require("./http/auth"),health_1=require("./http/health"),index_1=require("./index"),mongodb_1=require("mongodb"),ResolveIOMainServer=function(){function e(e,t,r,n,o,s,i){void 0===i&&(i=!1);var a=this;this._offlineUpdates=[],this._msgQueue=[],this._msgQueueRunning=!1,this.sesMail=!1,this.standardProgram=!1,this.publicProgram=!1,this._rebootFlag=!1,this.LOGGER="ERROR",this._clientRoutes=[],this._lastErrorMsg=null,this._debugMsgRecv=0,this._debugMsgQueue=0,this._safeShutdown=!1,this._serverConfig=t,this._clientRoutes=r,this._clientDir=n,this.sesMail=o,this.standardProgram=s,this.publicProgram=i,this._serverStartTime=new Date,this._lastErrorMsg=null,this._monitorManager=new monitor_manager_1.MonitorManager(e,t),this._monitorManagerFunction=new monitor_manager_1.MonitorManagerFunction,setInterval(function(){a._subscriptionManager.getEnableDebug()&&(console.log(new Date,"Server App","Msg Queue Length",a._msgQueue.length),console.log(new Date,"Server App","Msg Recv Hits",a._debugMsgRecv),console.log(new Date,"Server App","Msg Queue Hits",a._debugMsgQueue)),a._debugMsgQueue=0,a._debugMsgRecv=0},6e4),process.on("unhandledRejection",function(n,o){return __awaiter(a,void 0,void 0,function(){var t,r=this;return __generator(this,function(e){switch(e.label){case 0:return n&&"MongoError"===n.name&&48===n.code?[2]:(console.error(new Date,"Unhandled Rejection at Promise",[n,o]),t=moment().diff(this._serverStartTime,"seconds"),n&&("MongoNetworkTimeoutError"===n.name||n instanceof mongodb_1.MongoNetworkTimeoutError)?60<t&&!this._lastErrorMsg?(this._lastErrorMsg=new Date,setTimeout(function(){r._lastErrorMsg=null},6e4),[4,this._methodManager.sendEmail("dev@resolveio.com","SERVER - MongoNetworkTimeoutError - Quitting NodeJS - "+this._serverConfig.CLIENT_NAME,JSON.stringify({name:n.name,message:n.message,stack:n.stack},null,2))]):[3,2]:[3,3]);case 1:e.sent(),process.exit(1),e.label=2;case 2:return[3,10];case 3:return n&&"MongoError"===n.name&&"not master"===n.message?60<t&&!this._lastErrorMsg?(this._lastErrorMsg=new Date,setTimeout(function(){r._lastErrorMsg=null},6e4),[4,this._methodManager.sendEmail("dev@resolveio.com","SERVER - Unhandled Rejection - Quitting NodeJS - "+this._serverConfig.CLIENT_NAME,JSON.stringify([n.name,n.message,n.stack],null,2))]):[3,5]:[3,6];case 4:e.sent(),e.label=5;case 5:return process.exit(1),[3,10];case 6:return n&&"MongoError"===n.name&&"not master and slaveOk=false"===n.message?60<t&&!this._lastErrorMsg?(this._lastErrorMsg=new Date,setTimeout(function(){r._lastErrorMsg=null},6e4),[4,this._methodManager.sendEmail("dev@resolveio.com","SERVER - Unhandled Rejection - Quitting NodeJS - "+this._serverConfig.CLIENT_NAME,JSON.stringify([n.name,n.message,n.stack],null,2))]):[3,8]:[3,9];case 7:e.sent(),e.label=8;case 8:return process.exit(1),[3,10];case 9:n&&"StatusError"!==n.name&&""!==n.message&&60<t&&!this._lastErrorMsg&&(this._lastErrorMsg=new Date,setTimeout(function(){r._lastErrorMsg=null},6e4),this._methodManager.sendEmail("dev@resolveio.com","SERVER - Unhandled Rejection - "+this._serverConfig.CLIENT_NAME,JSON.stringify([n.name,n.message,n.stack],null,2))),e.label=10;case 10:return[2]}})})}),process.on("uncaughtException",function(r){return __awaiter(a,void 0,void 0,function(){var t=this;return __generator(this,function(e){switch(e.label){case 0:return(console.error(r,"Uncaught Exception thrown"),60<moment().diff(this._serverStartTime,"seconds")&&!this._lastErrorMsg)?(this._lastErrorMsg=new Date,setTimeout(function(){t._lastErrorMsg=null},6e4),[4,this._methodManager.sendEmail("dev@resolveio.com","SERVER - Unhandled Exception - "+this._serverConfig.CLIENT_NAME,JSON.stringify([r.name,r.message,r.stack],null,2))]):[3,2];case 1:e.sent(),e.label=2;case 2:return[2]}})})}),process.on("SIGINT",function(){a._rebootFlag=!0,a._serverHTTP.close(),a.safeShutdown()}),process.on("SIGTERM",function(){a._rebootFlag=!0,a._serverHTTP.close(),a.safeShutdown()}),process.on("SIGQUIT",function(){a._rebootFlag=!0,a._serverHTTP.close(),a.safeShutdown()}),"DEBUG"===this.LOGGER&&console.log("Starting ResolveIO Server"),this._app=express(),this._app.use(bodyParser.json({limit:"50mb",reviver:common_1.dateReviver})),this._app.use(bodyParser.urlencoded({limit:"50mb",extended:!0,parameterLimit:1e6})),this._app.use(xmlParser()),this._portHTTP=process.env.PORT_HTTP||t.PORT_HTTP||8080,this._portWSS=process.env.PORT_WSS||t.PORT_WSS||8081,"DEBUG"===this.LOGGER&&console.log("Setup ports"),this.createServer(),"DEBUG"===this.LOGGER&&console.log("Create server"),this._app.use(function(e,t,r){t.setHeader("Access-Control-Allow-Origin","*"),t.setHeader("Access-Control-Allow-Methods","GET, POST"),t.setHeader("Access-Control-Allow-Headers","X-Requested-With,content-type"),t.setHeader("Access-Control-Allow-Credentials","false"),r()}),"DEBUG"===this.LOGGER&&console.log("Setup cors"),(0,auth_1.setupAuthRoutes)(this,this._app,t),(0,health_1.setupHealthRoutes)(this._app,t),"ResolveIO"!==t.CLIENT_NAME&&!this.standardProgram||(0,home_1.setupHomeRoutes)(this,this._app,t),"DEBUG"===this.LOGGER&&console.log("Setup express routes")}return e.prototype.safeShutdown=function(){var e=this;this._safeShutdown||console.log(new Date,"Safe Shutdown Command Received"),this._monitorManagerFunction.getActiveMonitorFunctions().length||this._msgQueue.length||this._msgQueueRunning||this._offlineUpdates.length?(this._safeShutdown||(this._safeShutdown=!0,setTimeout(function(){e._safeShutdown=!1},1e3),console.log(new Date,"Safe Exit In Progress",this._monitorManagerFunction.getActiveMonitorFunctions().length,this._msgQueue.length,this._msgQueueRunning,this._offlineUpdates.length)),setImmediate(function(){e.safeShutdown()})):index_1.ResolveIOServer.getMongoConnection().close(!1).then(function(){console.log(new Date,"Safe Exit Complete, Process Exit"),process.exit(0)},function(){process.exit(1)})},e.prototype.getWS=function(t){return Array.from(this._serverWSS.clients).filter(function(e){return e.id_socket===t})[0]},e.prototype.getWSList=function(){var t=[];return this._serverWSS.clients.forEach(function(e){t.push(e.id_socket)}),t},e.prototype.getWSUserList=function(){var t=[];return this._serverWSS.clients.forEach(function(e){t.push(e.id_user)}),t},e.prototype.getHTTPServer=function(){return this._serverHTTP},e.prototype.getCronManager=function(){return this._cronManager},e.prototype.getMethodManager=function(){return this._methodManager},e.prototype.getSubscriptionManager=function(){return this._subscriptionManager},e.prototype.getMonitorManager=function(){return this._monitorManager},e.prototype.getRebootFlag=function(){return this._rebootFlag},e.prototype.createServer=function(){var e=this;this._serverHTTP=(0,http_1.createServer)(this._app),this._serverHTTP.keepAliveTimeout=65e3,this._serverHTTP.headersTimeout=66e3,this._serverWSS=new WebSocket.Server({port:this._portWSS,verifyClient:this.publicProgram?null:function(s,i){return __awaiter(e,void 0,void 0,function(){var t,o=this;return __generator(this,function(e){return this._rebootFlag?i(!1,409,"Unable To Process"):("DEBUG"===this.LOGGER&&console.log("Verify Client",s,i),t=s.req.headers["sec-websocket-protocol"].split(/,/),(s.origin===this._serverConfig.ROOT_URL||s.origin===this._serverConfig.SEC_ROOT_URL||s.origin===this._serverConfig.RESOLVEIO_URL||s.origin===this._serverConfig.RESOLVEIO_SECONDARY_URL)&&(t=t[0])?jwt.verify(t,this._serverConfig.JWT_SECRET,function(r,n){return __awaiter(o,void 0,void 0,function(){var t;return __generator(this,function(e){switch(e.label){case 0:return r?(i(!1,401,"Unauthorized"),[3,5]):[3,1];case 1:s.req.id_user=n.id_user,e.label=2;case 2:return e.trys.push([2,4,,5]),[4,user_collection_1.Users.findById(n.id_user)];case 3:return(t=e.sent())?(s.req.user=t.fullname,s.req.user_readonly=t.readonly||!1,s.req.doc_user=t,i(!0)):i(!1),[3,5];case 4:return e.sent(),i(!1),[3,5];case 5:return[2]}})})}):i(!1,401,"Unauthorized")),[2]})})}}),this.setUpMongo()},e.prototype.setUpMongo=function(){"DEBUG"===this.LOGGER&&console.log("Start Managers"),this._subscriptionManager=new subscription_manager_1.SubscriptionManager(this,this._serverWSS,this._serverConfig,this._monitorManagerFunction),this._methodManager=new method_manager_1.MethodManager(this,this._serverConfig,this._clientDir,this._monitorManagerFunction),this._cronManager=new cron_manager_1.CronManager(this),"DEBUG"===this.LOGGER&&console.log("End Managers"),this.listen()},e.prototype.listen=function(){var u=this;this._serverHTTP.listen(this._portHTTP,function(){console.log("Running server on port %s",u._portHTTP)}),this._serverWSS.on("listening",function(){console.log("Running server on port %s",u._portWSS)}),this._serverWSS.on("connection",function(f,e){u.publicProgram||(f.id_user=e.id_user,f.user=e.user,f.user_readonly=e.user_readonly,f.doc_user=e.doc_user,"Admin"!==f.user&&"ResolveIO"!==u._serverConfig.CLIENT_NAME&&u.getMethodManager().callMethodInternal.call(u.getMethodManager(),"supportCreateBillingUser",{id_user:f.id_user,user:f.user,date:new Date,client:index_1.ResolveIOServer.getClientName()})),f.id_socket=(0,mongo_manager_1.objectIdHexString)(),f.retryCnt=0,u._subscriptionManager.createLoggedInUser(f.id_socket).then(function(){setTimeout(function(){f.pingTime=new Date,f.ping(function(){})},5e3)}),"DEBUG"===u.LOGGER&&console.log("Connection from: "+e.user),f.isAlive=!0,f.on("pong",function(){f.isAlive=!0,f.pongTime=new Date,f.latency=moment.duration(moment(f.pongTime).diff(f.pingTime)).asMilliseconds(),u._subscriptionManager.loggedInLatency(f)}).on("message",function(p){return __awaiter(u,void 0,void 0,function(){var t,r,n,o,s,i,a,u,l,c,g,_,h,d=this;return __generator(this,function(e){switch(e.label){case 0:"DEBUG"===this.LOGGER&&console.log("Message from: "+f.user,p),this._debugMsgRecv+=1,u=!1,t=[];try{t=JSON.parse(p,common_1.dateReviver)}catch(e){console.log("Error - JSON.parse",p),this._methodManager.sendEmail("dev@resolveio.com","SERVER - JSON Parse Error - "+this._serverConfig.CLIENT_NAME,JSON.stringify([p,e])),u=!0}if(!u){if("ping"===t[0])return f&&f.readyState===f.OPEN&&f.send("pong",function(e){e&&(d._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","Error WS Pong"),d.unsubscribeWS(f))}),[2];if(r=t[0],!this.publicProgram&&this._clientRoutes.some(function(e){return r.includes(e)})&&!f.doc_user.roles.groups.some(function(e){return e.views.some(function(e){return r.includes(e)||e.includes(r)})})&&!f.doc_user.roles.super_admin)return[2];if(u=t[1],n=t[2],"subscription"!==(o=t[3]))return[3,1];s=t[4],c=t[5],"sub"===s?this._subscriptionManager.subscribe(r,u,f,n,c,t.slice(6)):this._subscriptionManager.unsubscribe(r,u,f,n,c,t.slice(6))}return[3,11];case 1:if(this.publicProgram||"offline"!==o)return[3,10];s={messageId:n,hasError:!1,data:"ACK"},f&&f.readyState===f.OPEN&&f.send(JSON.stringify(s),function(e){e&&(d._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","Error WS Offline Ack Main"),d.unsubscribeWS(f))}),this._offlineUpdates.push(f),i=t[4],a=0,e.label=2;case 2:if(!(a<i.length))return[3,9];if(u=i[a],l=u.data,c={messageId:u.data[2],hasError:!1,data:"ACK"},f&&f.readyState===f.OPEN&&f.send(JSON.stringify(c),function(e){e&&(d._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","Error WS Offline Ack Each"),d.unsubscribeWS(f))}),l.shift(),l.shift(),l.shift(),l.shift(),g=l.shift(),h=(0,mongo_manager_1.objectIdHexString)(),log_method_latency_collection_1.LogMethodLatencies.create({_id:h,__v:0,date_start:new Date,date_end:null,latency_ms:0,method:g}),"reportBuilderGetResults"!==g&&"reportBuilderGetDistinctValue"!==g&&"reportBuilderBuildTree"!==g&&"generatePDF"!==g&&"getWOOfflineData"!==g&&"countQuery"!==g&&"countWithQuery"!==g&&"countCollectionWithQuery"!==g&&"find"!==g&&"findOne"!==g&&"findWithOptions"!==g&&"getDrivers"!==g&&"processAirdropDistribution"!==g&&log_collection_1.Logs.insertOne({_id:(0,mongo_manager_1.objectIdHexString)(),type:"client-request",collection:"",id_document:"",payload:(0,common_1.getBinarySize)(JSON.stringify(l))<2e5?JSON.stringify(l,null,2):"Too Big",method:g,id_user:f.id_user||"",user:f.user||"",messageId:n,route:r}),!this._methodManager._methods[g])return[3,7];e.label=3;case 3:return e.trys.push([3,5,,6]),[4,(h=this._methodManager.callMethodInternal).call.apply(h,__spreadArray([Object.assign({},this._methodManager,{id_user:f.id_user,user:f.user,id_ws:f.id_socket}),g],l,!1))];case 4:return e.sent(),[3,6];case 5:return _=e.sent(),console.log(new Date,"Offline Error",JSON.stringify(_,null,2)),[3,6];case 6:return"updateDocumentOffline"!==g&&"updateDocumentPropsOffline"!==g||index_1.ResolveIOServer.getMongoManager().invalidateQueryCache(l[0]),[3,8];case 7:console.log("Offline - Could not find method: "+g),e.label=8;case 8:return a++,[3,2];case 9:return this._offlineUpdates.splice(this._offlineUpdates.map(function(e){return e.id_socket}).indexOf(f.id_socket),1),[3,11];case 10:this._msgQueue.splice(0,0,{ws:f,data:t}),e.label=11;case 11:return[2]}})})}).on("end",function(){u.unsubscribeWS(f),u._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","WS End")}).on("close",function(){u.unsubscribeWS(f),u._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","WS Close")}).on("error",function(e){u.unsubscribeWS(f),u._subscriptionManager.getEnableDebug()&&console.log(new Date,f.user,f.id_socket,"WS Error")})}),setInterval(function(){u._serverWSS.clients.forEach(function(e){e.pingTime&&2e4<=Date.now()-e.pingTime.getTime()&&(!1===e.isAlive?(e.retryCnt++,3<=e.retryCnt?u.unsubscribeWS(e):(e.pingTime=new Date,e.ping(function(){}))):(e.retryCnt=0,e.isAlive=!1,e.pingTime=new Date,e.ping(function(){})))})},2e4),setInterval(function(){if(!u._msgQueueRunning&&u._msgQueue.length){u._msgQueueRunning=!0,u._debugMsgQueue+=1;var e=u._msgQueue.pop(),t=e.data,r=e.ws,e=t.shift(),n=t.shift(),o=t.shift(),s=t.shift();if("method"===s){var i=t.shift();if(r.user_readonly)return;var a=(0,mongo_manager_1.objectIdHexString)(),e=(log_method_latency_collection_1.LogMethodLatencies.create({_id:a,__v:0,date_start:new Date,date_end:null,latency_ms:0,method:i}),"reportBuilderGetResults"!==i&&"reportBuilderGetDistinctValue"!==i&&"reportBuilderBuildTree"!==i&&"generatePDF"!==i&&"getWOOfflineData"!==i&&"countQuery"!==i&&"countWithQuery"!==i&&"countCollectionWithQuery"!==i&&"find"!==i&&"findOne"!==i&&"findWithOptions"!==i&&"getDrivers"!==i&&"processAirdropDistribution"!==i&&log_collection_1.Logs.insertOne({_id:(0,mongo_manager_1.objectIdHexString)(),type:"client-request",collection:"",id_document:"",payload:(0,common_1.getBinarySize)(JSON.stringify(t))<2e5?JSON.stringify(t,null,2):"Too Big",method:i,id_user:r.id_user||"",user:r.user||"",messageId:o,route:e}),{messageId:o,hasError:!1,data:"ACK"});r&&r.readyState===r.OPEN&&r.send(JSON.stringify(e),function(e){e&&u.unsubscribeWS(r)}),u._methodManager._methods[i]?(e=u._methodManager).callMethod.apply(e,__spreadArray([a,r,n,o,i],t,!1)):console.log("Could not find method: "+i)}else"methodResponse"===s&&(i=t.shift(),method_response_collection_1.MethodResponses.findOne({$and:[{id_user:r.id_user},{message_id:o},{method:i},{date:n}]}).then(function(e){e&&r&&r.readyState===r.OPEN&&r.send(JSON.stringify(e.response),function(e){e&&u.unsubscribeWS(r)})},function(e){}));u._msgQueueRunning=!1}},25)},e.prototype.unsubscribeWS=function(e){this._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","Unsub WS",e.user,e.id_socket),this._subscriptionManager.unsubscribeAll(e),e.removeAllListeners()},e.prototype.getApp=function(){return this._app},e.prototype.getServerConfig=function(){return this._serverConfig},e}();exports.default=ResolveIOMainServer;
|
|
1
|
+
"use strict";var __awaiter=this&&this.__awaiter||function(e,n,o,s){return new(o=o||Promise)(function(r,t){function fulfilled(e){try{step(s.next(e))}catch(e){t(e)}}function rejected(e){try{step(s.throw(e))}catch(e){t(e)}}function step(e){var t;e.done?r(e.value):((t=e.value)instanceof o?t:new o(function(e){e(t)})).then(fulfilled,rejected)}step((s=s.apply(e,n||[])).next())})},__generator=this&&this.__generator||function(n,o){var s,i,a,u={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},l={next:verb(0),throw:verb(1),return:verb(2)};return"function"==typeof Symbol&&(l[Symbol.iterator]=function(){return this}),l;function verb(r){return function(e){var t=[r,e];if(s)throw new TypeError("Generator is already executing.");for(;u=l&&t[l=0]?0:u;)try{if(s=1,i&&(a=2&t[0]?i.return:t[0]?i.throw||((a=i.return)&&a.call(i),0):i.next)&&!(a=a.call(i,t[1])).done)return a;switch(i=0,(t=a?[2&t[0],a.value]:t)[0]){case 0:case 1:a=t;break;case 4:return u.label++,{value:t[1],done:!1};case 5:u.label++,i=t[1],t=[0];continue;case 7:t=u.ops.pop(),u.trys.pop();continue;default:if(!(a=0<(a=u.trys).length&&a[a.length-1])&&(6===t[0]||2===t[0])){u=0;continue}if(3===t[0]&&(!a||t[1]>a[0]&&t[1]<a[3]))u.label=t[1];else if(6===t[0]&&u.label<a[1])u.label=a[1],a=t;else{if(!(a&&u.label<a[2])){a[2]&&u.ops.pop(),u.trys.pop();continue}u.label=a[2],u.ops.push(t)}}t=o.call(n,u)}catch(e){t=[6,e],i=0}finally{s=a=0}if(5&t[0])throw t[1];return{value:t[0]?t[1]:void 0,done:!0}}}},__spreadArray=this&&this.__spreadArray||function(e,t,r){if(r||2===arguments.length)for(var n,o=0,s=t.length;o<s;o++)!n&&o in t||((n=n||Array.prototype.slice.call(t,0,o))[o]=t[o]);return e.concat(n||Array.prototype.slice.call(t))},http_1=(Object.defineProperty(exports,"__esModule",{value:!0}),require("http")),express=require("express"),bodyParser=require("body-parser"),xmlParser=require("express-xml-bodyparser"),WebSocket=require("ws"),jwt=require("jsonwebtoken"),moment=require("moment-timezone"),common_1=require("./util/common"),mongo_manager_1=require("./managers/mongo.manager"),cron_manager_1=require("./managers/cron.manager"),method_manager_1=require("./managers/method.manager"),subscription_manager_1=require("./managers/subscription.manager"),monitor_manager_1=require("./managers/monitor.manager"),method_response_collection_1=require("./collections/method-response.collection"),log_collection_1=require("./collections/log.collection"),log_method_latency_collection_1=require("./collections/log-method-latency.collection"),user_collection_1=require("./collections/user.collection"),home_1=require("./http/home"),auth_1=require("./http/auth"),health_1=require("./http/health"),index_1=require("./index"),mongodb_1=require("mongodb"),ResolveIOMainServer=function(){function ResolveIOMainServer(e,t,r,n,o,s,i){void 0===i&&(i=!1);var a=this;this._offlineUpdates=[],this._msgQueue=[],this._msgQueueRunning=!1,this.sesMail=!1,this.standardProgram=!1,this.publicProgram=!1,this._rebootFlag=!1,this.LOGGER="ERROR",this._clientRoutes=[],this._lastErrorMsg=null,this._debugMsgRecv=0,this._debugMsgQueue=0,this._safeShutdown=!1,this._serverConfig=t,this._clientRoutes=r,this._clientDir=n,this.sesMail=o,this.standardProgram=s,this.publicProgram=i,this._serverStartTime=new Date,this._lastErrorMsg=null,this._monitorManager=new monitor_manager_1.MonitorManager(e,t),this._monitorManagerFunction=new monitor_manager_1.MonitorManagerFunction,setInterval(function(){a._subscriptionManager.getEnableDebug()&&(console.log(new Date,"Server App","Msg Queue Length",a._msgQueue.length),console.log(new Date,"Server App","Msg Recv Hits",a._debugMsgRecv),console.log(new Date,"Server App","Msg Queue Hits",a._debugMsgQueue)),a._debugMsgQueue=0,a._debugMsgRecv=0},6e4),process.on("unhandledRejection",function(n,o){return __awaiter(a,void 0,void 0,function(){var t,r=this;return __generator(this,function(e){switch(e.label){case 0:return n&&"MongoError"===n.name&&48===n.code?[2]:(console.error(new Date,"Unhandled Rejection at Promise",[n,o]),t=moment().diff(this._serverStartTime,"seconds"),n&&("MongoNetworkTimeoutError"===n.name||n instanceof mongodb_1.MongoNetworkTimeoutError)?60<t&&!this._lastErrorMsg?(this._lastErrorMsg=new Date,setTimeout(function(){r._lastErrorMsg=null},6e4),[4,this._methodManager.sendEmail("dev@resolveio.com","SERVER - MongoNetworkTimeoutError - Quitting NodeJS - "+this._serverConfig.CLIENT_NAME,JSON.stringify({name:n.name,message:n.message,stack:n.stack},null,2))]):[3,2]:[3,3]);case 1:e.sent(),process.exit(1),e.label=2;case 2:return[3,10];case 3:return n&&"MongoError"===n.name&&"not master"===n.message?60<t&&!this._lastErrorMsg?(this._lastErrorMsg=new Date,setTimeout(function(){r._lastErrorMsg=null},6e4),[4,this._methodManager.sendEmail("dev@resolveio.com","SERVER - Unhandled Rejection - Quitting NodeJS - "+this._serverConfig.CLIENT_NAME,JSON.stringify([n.name,n.message,n.stack],null,2))]):[3,5]:[3,6];case 4:e.sent(),e.label=5;case 5:return process.exit(1),[3,10];case 6:return n&&"MongoError"===n.name&&"not master and slaveOk=false"===n.message?60<t&&!this._lastErrorMsg?(this._lastErrorMsg=new Date,setTimeout(function(){r._lastErrorMsg=null},6e4),[4,this._methodManager.sendEmail("dev@resolveio.com","SERVER - Unhandled Rejection - Quitting NodeJS - "+this._serverConfig.CLIENT_NAME,JSON.stringify([n.name,n.message,n.stack],null,2))]):[3,8]:[3,9];case 7:e.sent(),e.label=8;case 8:return process.exit(1),[3,10];case 9:n&&"StatusError"!==n.name&&""!==n.message&&60<t&&!this._lastErrorMsg&&(this._lastErrorMsg=new Date,setTimeout(function(){r._lastErrorMsg=null},6e4),this._methodManager.sendEmail("dev@resolveio.com","SERVER - Unhandled Rejection - "+this._serverConfig.CLIENT_NAME,JSON.stringify([n.name,n.message,n.stack],null,2))),e.label=10;case 10:return[2]}})})}),process.on("uncaughtException",function(r){return __awaiter(a,void 0,void 0,function(){var t=this;return __generator(this,function(e){switch(e.label){case 0:return(console.error(r,"Uncaught Exception thrown"),60<moment().diff(this._serverStartTime,"seconds")&&!this._lastErrorMsg)?(this._lastErrorMsg=new Date,setTimeout(function(){t._lastErrorMsg=null},6e4),[4,this._methodManager.sendEmail("dev@resolveio.com","SERVER - Unhandled Exception - "+this._serverConfig.CLIENT_NAME,JSON.stringify([r.name,r.message,r.stack],null,2))]):[3,2];case 1:e.sent(),e.label=2;case 2:return[2]}})})}),process.on("SIGINT",function(){a._rebootFlag=!0,a._serverHTTP.close(),a.safeShutdown()}),process.on("SIGTERM",function(){a._rebootFlag=!0,a._serverHTTP.close(),a.safeShutdown()}),process.on("SIGQUIT",function(){a._rebootFlag=!0,a._serverHTTP.close(),a.safeShutdown()}),"DEBUG"===this.LOGGER&&console.log("Starting ResolveIO Server"),this._app=express(),this._app.use(bodyParser.json({limit:"50mb",reviver:common_1.dateReviver})),this._app.use(bodyParser.urlencoded({limit:"50mb",extended:!0,parameterLimit:1e6})),this._app.use(xmlParser()),this._portHTTP=process.env.PORT_HTTP||t.PORT_HTTP||8080,this._portWSS=process.env.PORT_WSS||t.PORT_WSS||8081,"DEBUG"===this.LOGGER&&console.log("Setup ports"),this.createServer(),"DEBUG"===this.LOGGER&&console.log("Create server"),this._app.use(function(e,t,r){t.setHeader("Access-Control-Allow-Origin","*"),t.setHeader("Access-Control-Allow-Methods","GET, POST"),t.setHeader("Access-Control-Allow-Headers","X-Requested-With,content-type"),t.setHeader("Access-Control-Allow-Credentials","false"),r()}),"DEBUG"===this.LOGGER&&console.log("Setup cors"),(0,auth_1.setupAuthRoutes)(this,this._app,t),(0,health_1.setupHealthRoutes)(this._app,t),"ResolveIO"!==t.CLIENT_NAME&&!this.standardProgram||(0,home_1.setupHomeRoutes)(this,this._app,t),"DEBUG"===this.LOGGER&&console.log("Setup express routes")}return ResolveIOMainServer.prototype.safeShutdown=function(){var e=this;this._safeShutdown||console.log(new Date,"Safe Shutdown Command Received"),this._monitorManagerFunction.getActiveMonitorFunctions().length||this._msgQueue.length||this._msgQueueRunning||this._offlineUpdates.length?(this._safeShutdown||(this._safeShutdown=!0,setTimeout(function(){e._safeShutdown=!1},1e3),console.log(new Date,"Safe Exit In Progress",this._monitorManagerFunction.getActiveMonitorFunctions().length,this._msgQueue.length,this._msgQueueRunning,this._offlineUpdates.length)),setImmediate(function(){e.safeShutdown()})):index_1.ResolveIOServer.getMongoConnection().close(!1).then(function(){console.log(new Date,"Safe Exit Complete, Process Exit"),process.exit(0)},function(){process.exit(1)})},ResolveIOMainServer.prototype.getWS=function(t){return Array.from(this._serverWSS.clients).filter(function(e){return e.id_socket===t})[0]},ResolveIOMainServer.prototype.getWSList=function(){var t=[];return this._serverWSS.clients.forEach(function(e){t.push(e.id_socket)}),t},ResolveIOMainServer.prototype.getWSUserList=function(){var t=[];return this._serverWSS.clients.forEach(function(e){t.push(e.id_user)}),t},ResolveIOMainServer.prototype.getHTTPServer=function(){return this._serverHTTP},ResolveIOMainServer.prototype.getCronManager=function(){return this._cronManager},ResolveIOMainServer.prototype.getMethodManager=function(){return this._methodManager},ResolveIOMainServer.prototype.getSubscriptionManager=function(){return this._subscriptionManager},ResolveIOMainServer.prototype.getMonitorManager=function(){return this._monitorManager},ResolveIOMainServer.prototype.getRebootFlag=function(){return this._rebootFlag},ResolveIOMainServer.prototype.createServer=function(){var e=this;this._serverHTTP=(0,http_1.createServer)(this._app),this._serverHTTP.keepAliveTimeout=65e3,this._serverHTTP.headersTimeout=66e3,this._serverWSS=new WebSocket.Server({port:this._portWSS,verifyClient:this.publicProgram?null:function(s,i){return __awaiter(e,void 0,void 0,function(){var t,o=this;return __generator(this,function(e){return this._rebootFlag?i(!1,409,"Unable To Process"):("DEBUG"===this.LOGGER&&console.log("Verify Client",s,i),t=s.req.headers["sec-websocket-protocol"].split(/,/),(s.origin===this._serverConfig.ROOT_URL||s.origin===this._serverConfig.SEC_ROOT_URL||s.origin===this._serverConfig.RESOLVEIO_URL||s.origin===this._serverConfig.RESOLVEIO_SECONDARY_URL)&&(t=t[0])?jwt.verify(t,this._serverConfig.JWT_SECRET,function(r,n){return __awaiter(o,void 0,void 0,function(){var t;return __generator(this,function(e){switch(e.label){case 0:return r?(i(!1,401,"Unauthorized"),[3,5]):[3,1];case 1:s.req.id_user=n.id_user,e.label=2;case 2:return e.trys.push([2,4,,5]),[4,user_collection_1.Users.findById(n.id_user)];case 3:return(t=e.sent())?(s.req.user=t.fullname,s.req.user_readonly=t.readonly||!1,s.req.doc_user=t,i(!0)):i(!1),[3,5];case 4:return e.sent(),i(!1),[3,5];case 5:return[2]}})})}):i(!1,401,"Unauthorized")),[2]})})}}),this.setUpMongo()},ResolveIOMainServer.prototype.setUpMongo=function(){"DEBUG"===this.LOGGER&&console.log("Start Managers"),this._subscriptionManager=new subscription_manager_1.SubscriptionManager(this,this._serverWSS,this._serverConfig,this._monitorManagerFunction),this._methodManager=new method_manager_1.MethodManager(this,this._serverConfig,this._clientDir,this._monitorManagerFunction),this._cronManager=new cron_manager_1.CronManager(this),"DEBUG"===this.LOGGER&&console.log("End Managers"),this.listen()},ResolveIOMainServer.prototype.listen=function(){var u=this;this._serverHTTP.listen(this._portHTTP,function(){console.log("Running server on port %s",u._portHTTP)}),this._serverWSS.on("listening",function(){console.log("Running server on port %s",u._portWSS)}),this._serverWSS.on("connection",function(f,e){u.publicProgram||(f.id_user=e.id_user,f.user=e.user,f.user_readonly=e.user_readonly,f.doc_user=e.doc_user,"Admin"!==f.user&&"ResolveIO"!==u._serverConfig.CLIENT_NAME&&u.getMethodManager().callMethodInternal.call(u.getMethodManager(),"supportCreateBillingUser",{id_user:f.id_user,user:f.user,date:new Date,client:index_1.ResolveIOServer.getClientName()})),f.id_socket=(0,mongo_manager_1.objectIdHexString)(),f.retryCnt=0,u._subscriptionManager.createLoggedInUser(f.id_socket).then(function(){setTimeout(function(){f.pingTime=new Date,f.ping(function(){})},5e3)}),"DEBUG"===u.LOGGER&&console.log("Connection from: "+e.user),f.isAlive=!0,f.on("pong",function(){f.isAlive=!0,f.pongTime=new Date,f.latency=moment.duration(moment(f.pongTime).diff(f.pingTime)).asMilliseconds(),u._subscriptionManager.loggedInLatency(f)}).on("message",function(p){return __awaiter(u,void 0,void 0,function(){var t,r,n,o,s,i,a,u,l,c,g,_,h,d=this;return __generator(this,function(e){switch(e.label){case 0:"DEBUG"===this.LOGGER&&console.log("Message from: "+f.user,p),this._debugMsgRecv+=1,u=!1,t=[];try{t=JSON.parse(p,common_1.dateReviver)}catch(e){console.log("Error - JSON.parse",p),this._methodManager.sendEmail("dev@resolveio.com","SERVER - JSON Parse Error - "+this._serverConfig.CLIENT_NAME,JSON.stringify([p,e])),u=!0}if(!u){if("ping"===t[0])return f&&f.readyState===f.OPEN&&f.send("pong",function(e){e&&(d._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","Error WS Pong"),d.unsubscribeWS(f))}),[2];if(r=t[0],!this.publicProgram&&this._clientRoutes.some(function(e){return r.includes(e)})&&!f.doc_user.roles.groups.some(function(e){return e.views.some(function(e){return r.includes(e)||e.includes(r)})})&&!f.doc_user.roles.super_admin)return[2];if(u=t[1],n=t[2],"subscription"!==(o=t[3]))return[3,1];s=t[4],c=t[5],"sub"===s?this._subscriptionManager.subscribe(r,u,f,n,c,t.slice(6)):this._subscriptionManager.unsubscribe(r,u,f,n,c,t.slice(6))}return[3,11];case 1:if(this.publicProgram||"offline"!==o)return[3,10];s={messageId:n,hasError:!1,data:"ACK"},f&&f.readyState===f.OPEN&&f.send(JSON.stringify(s),function(e){e&&(d._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","Error WS Offline Ack Main"),d.unsubscribeWS(f))}),this._offlineUpdates.push(f),i=t[4],a=0,e.label=2;case 2:if(!(a<i.length))return[3,9];if(u=i[a],l=u.data,c={messageId:u.data[2],hasError:!1,data:"ACK"},f&&f.readyState===f.OPEN&&f.send(JSON.stringify(c),function(e){e&&(d._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","Error WS Offline Ack Each"),d.unsubscribeWS(f))}),l.shift(),l.shift(),l.shift(),l.shift(),g=l.shift(),h=(0,mongo_manager_1.objectIdHexString)(),log_method_latency_collection_1.LogMethodLatencies.create({_id:h,__v:0,date_start:new Date,date_end:null,latency_ms:0,method:g}),"reportBuilderGetResults"!==g&&"reportBuilderGetDistinctValue"!==g&&"reportBuilderBuildTree"!==g&&"generatePDF"!==g&&"getWOOfflineData"!==g&&"countQuery"!==g&&"countWithQuery"!==g&&"countCollectionWithQuery"!==g&&"find"!==g&&"findOne"!==g&&"findWithOptions"!==g&&"getDrivers"!==g&&"processAirdropDistribution"!==g&&log_collection_1.Logs.insertOne({_id:(0,mongo_manager_1.objectIdHexString)(),type:"client-request",collection:"",id_document:"",payload:(0,common_1.getBinarySize)(JSON.stringify(l))<2e5?JSON.stringify(l,null,2):"Too Big",method:g,id_user:f.id_user||"",user:f.user||"",messageId:n,route:r}),!this._methodManager._methods[g])return[3,7];e.label=3;case 3:return e.trys.push([3,5,,6]),[4,(h=this._methodManager.callMethodInternal).call.apply(h,__spreadArray([Object.assign({},this._methodManager,{id_user:f.id_user,user:f.user,id_ws:f.id_socket}),g],l,!1))];case 4:return e.sent(),[3,6];case 5:return _=e.sent(),console.log(new Date,"Offline Error",JSON.stringify(_,null,2)),[3,6];case 6:return"updateDocumentOffline"!==g&&"updateDocumentPropsOffline"!==g||index_1.ResolveIOServer.getMongoManager().invalidateQueryCache(l[0]),[3,8];case 7:console.log("Offline - Could not find method: "+g),e.label=8;case 8:return a++,[3,2];case 9:return this._offlineUpdates.splice(this._offlineUpdates.map(function(e){return e.id_socket}).indexOf(f.id_socket),1),[3,11];case 10:this._msgQueue.splice(0,0,{ws:f,data:t}),e.label=11;case 11:return[2]}})})}).on("end",function(){u.unsubscribeWS(f),u._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","WS End")}).on("close",function(){u.unsubscribeWS(f),u._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","WS Close")}).on("error",function(e){u.unsubscribeWS(f),u._subscriptionManager.getEnableDebug()&&console.log(new Date,f.user,f.id_socket,"WS Error")})}),setInterval(function(){u._serverWSS.clients.forEach(function(e){e.pingTime&&2e4<=Date.now()-e.pingTime.getTime()&&(!1===e.isAlive?(e.retryCnt++,3<=e.retryCnt?u.unsubscribeWS(e):(e.pingTime=new Date,e.ping(function(){}))):(e.retryCnt=0,e.isAlive=!1,e.pingTime=new Date,e.ping(function(){})))})},2e4),setInterval(function(){if(!u._msgQueueRunning&&u._msgQueue.length){u._msgQueueRunning=!0,u._debugMsgQueue+=1;var e=u._msgQueue.pop(),t=e.data,r=e.ws,e=t.shift(),n=t.shift(),o=t.shift(),s=t.shift();if("method"===s){var i=t.shift();if(r.user_readonly)return;var a=(0,mongo_manager_1.objectIdHexString)(),e=(log_method_latency_collection_1.LogMethodLatencies.create({_id:a,__v:0,date_start:new Date,date_end:null,latency_ms:0,method:i}),"reportBuilderGetResults"!==i&&"reportBuilderGetDistinctValue"!==i&&"reportBuilderBuildTree"!==i&&"generatePDF"!==i&&"getWOOfflineData"!==i&&"countQuery"!==i&&"countWithQuery"!==i&&"countCollectionWithQuery"!==i&&"find"!==i&&"findOne"!==i&&"findWithOptions"!==i&&"getDrivers"!==i&&"processAirdropDistribution"!==i&&log_collection_1.Logs.insertOne({_id:(0,mongo_manager_1.objectIdHexString)(),type:"client-request",collection:"",id_document:"",payload:(0,common_1.getBinarySize)(JSON.stringify(t))<2e5?JSON.stringify(t,null,2):"Too Big",method:i,id_user:r.id_user||"",user:r.user||"",messageId:o,route:e}),{messageId:o,hasError:!1,data:"ACK"});r&&r.readyState===r.OPEN&&r.send(JSON.stringify(e),function(e){e&&u.unsubscribeWS(r)}),u._methodManager._methods[i]?(e=u._methodManager).callMethod.apply(e,__spreadArray([a,r,n,o,i],t,!1)):console.log("Could not find method: "+i)}else"methodResponse"===s&&(i=t.shift(),method_response_collection_1.MethodResponses.findOne({$and:[{id_user:r.id_user},{message_id:o},{method:i},{date:n}]}).then(function(e){e&&r&&r.readyState===r.OPEN&&r.send(JSON.stringify(e.response),function(e){e&&u.unsubscribeWS(r)})},function(e){}));u._msgQueueRunning=!1}},25)},ResolveIOMainServer.prototype.unsubscribeWS=function(e){this._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","Unsub WS",e.user,e.id_socket),this._subscriptionManager.unsubscribeAll(e),e.removeAllListeners()},ResolveIOMainServer.prototype.getApp=function(){return this._app},ResolveIOMainServer.prototype.getServerConfig=function(){return this._serverConfig},ResolveIOMainServer}();exports.default=ResolveIOMainServer;
|
|
2
2
|
//# sourceMappingURL=server-app.js.map
|
package/server-app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/server-app.ts"],"names":["http_1","require","express","bodyParser","xmlParser","WebSocket","jwt","moment","common_1","mongo_manager_1","cron_manager_1","method_manager_1","subscription_manager_1","monitor_manager_1","method_response_collection_1","log_collection_1","log_method_latency_collection_1","user_collection_1","home_1","auth_1","health_1","index_1","mongodb_1","ResolveIOMainServer","mainServer","serverConfig","clientRoutes","clientDir","sesMail","standardProgram","publicProgram","_this","this","_offlineUpdates","_msgQueue","_msgQueueRunning","_rebootFlag","LOGGER","_clientRoutes","_lastErrorMsg","_debugMsgRecv","_debugMsgQueue","_safeShutdown","_serverConfig","_clientDir","_serverStartTime","Date","_monitorManager","MonitorManager","_monitorManagerFunction","MonitorManagerFunction","setInterval","_subscriptionManager","getEnableDebug","console","log","length","process","on","error","rej","__awaiter","diffTimeSec","diff","MongoNetworkTimeoutError","setTimeout","_methodManager","sendEmail","JSON","stringify","name","message","stack","_a","sent","exit","_serverHTTP","close","safeShutdown","_app","use","json","limit","reviver","dateReviver","urlencoded","extended","parameterLimit","_portHTTP","env","PORT_HTTP","_portWSS","PORT_WSS","createServer","req","res","next","setHeader","setupAuthRoutes","setupHealthRoutes","setupHomeRoutes","prototype","getActiveMonitorFunctions","setImmediate","ResolveIOServer","getMongoConnection","then","getWS","id_ws","Array","from","_serverWSS","clients","filter","a","getWSList","forEach","ws","push","getWSUserList","getHTTPServer","getCronManager","_cronManager","getMethodManager","getSubscriptionManager","getMonitorManager","getRebootFlag","keepAliveTimeout","headersTimeout","Server","port","verifyClient","info","cb","infoData","headers","split","origin","token","verify","err","decoded","Users","findById","user","fullname","readonly","setUpMongo","SubscriptionManager","MethodManager","CronManager","listen","callMethodInternal","call","id_user","date","client","getClientName","objectIdHexString","createLoggedInUser","ping","duration","asMilliseconds","loggedInLatency","parseErrorFound","socketData","parse","e","readyState","OPEN","send","unsubscribeWS","messageRoute_1","some","includes","roles","groups","views","b","super_admin","messageDate","messageId","type","subType","pub","subscribe","slice","unsubscribe","serverRes","hasError","data","offlineUpdates","i","update","serverResMethod","shift","method","methodLatencyId","LogMethodLatencies","create","_id","__v","date_start","date_end","latency_ms","Logs","insertOne","collection","id_document","payload","getBinarySize","route","_methods","apply","__spreadArray","Object","assign","_b","err_2","getMongoManager","invalidateQueryCache","splice","map","indexOf","now","getTime","msg","pop","ws_1","messageRoute","callMethod","MethodResponses","findOne","$and","message_id","response","unsubscribeAll","removeAllListeners","getApp","getServerConfig"],"mappings":"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","file":"server-app.js","sourcesContent":["import { createServer, Server } from 'http';\nimport * as express from 'express';\nimport * as bodyParser from 'body-parser';\nimport * as xmlParser from 'express-xml-bodyparser';\nimport * as WebSocket from 'ws';\nimport * as jwt from 'jsonwebtoken';\n// import * as SegfaultHandler from 'segfault-handler';\nimport * as moment from 'moment-timezone';\n\nimport { dateReviver, getBinarySize, deepCopy } from './util/common';\n\nimport { objectIdHexString } from './managers/mongo.manager';\nimport { CronManager } from './managers/cron.manager';\nimport { MethodManager } from './managers/method.manager';\nimport { SubscriptionManager } from './managers/subscription.manager';\nimport { MonitorManager, MonitorManagerFunction } from './managers/monitor.manager';\n\nimport { ServerResponseModel } from './models/server-response.model';\n\nimport { MethodResponses } from './collections/method-response.collection';\nimport { Logs } from './collections/log.collection';\nimport { LogMethodLatencies } from './collections/log-method-latency.collection';\nimport { Users } from './collections/user.collection';\n\nimport { setupHomeRoutes } from './http/home';\nimport { setupAuthRoutes } from './http/auth';\nimport { setupHealthRoutes } from './http/health';\nimport { ResolveIOServer } from './index';\nimport { MongoNetworkTimeoutError } from 'mongodb';\n\nexport default class ResolveIOMainServer {\n\tprivate _app: express.Application;\n\tprivate _serverHTTP: Server;\n\tprivate _portHTTP: string | number;\n\tprivate _serverWSS: WebSocket.Server;\n\tprivate _portWSS: number;\n\tprivate _serverConfig;\n\tprivate _clientDir;\n\tprivate _offlineUpdates = [];\n\tprivate _msgQueue = [];\n\tprivate _msgQueueRunning = false;\n\tpublic sesMail = false;\n\tprivate standardProgram = false;\n\tprivate publicProgram = false;\n\tprivate _rebootFlag = false;\n\n\tprivate LOGGER = 'ERROR'; //ERROR / DEBUG\n\n\tprivate _monitorManager: MonitorManager;\n\tprivate _monitorManagerFunction: MonitorManagerFunction;\n\tprivate _subscriptionManager: SubscriptionManager;\n\tprivate _methodManager: MethodManager;\n\tprivate _cronManager: CronManager;\n\tprivate _clientRoutes: string[] = [];\n\n\tprivate _serverStartTime: Date;\n\tprivate _lastErrorMsg: Date = null;\n\n\tprivate _debugMsgRecv = 0;\n\tprivate _debugMsgQueue = 0;\n\n\tprivate _safeShutdown = false;\n\n\tconstructor(mainServer, serverConfig, clientRoutes, clientDir, sesMail, standardProgram, publicProgram = false) {\n\t\tthis._serverConfig = serverConfig;\n\t\tthis._clientRoutes = clientRoutes;\n\t\tthis._clientDir = clientDir;\n\t\tthis.sesMail = sesMail;\n\t\tthis.standardProgram = standardProgram;\n\t\tthis.publicProgram = publicProgram;\n\n\t\tthis._serverStartTime = new Date();\n\t\tthis._lastErrorMsg = null;\n\t\tthis._monitorManager = new MonitorManager(mainServer, serverConfig);\n\t\tthis._monitorManagerFunction = new MonitorManagerFunction();\n\n\t\tsetInterval(() => {\n\t\t\tif (this._subscriptionManager.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Server App', 'Msg Queue Length', this._msgQueue.length);\n\t\t\t\tconsole.log(new Date(), 'Server App', 'Msg Recv Hits', this._debugMsgRecv);\n\t\t\t\tconsole.log(new Date(), 'Server App', 'Msg Queue Hits', this._debugMsgQueue);\n\t\t\t}\n\n\t\t\tthis._debugMsgQueue = 0;\n\t\t\tthis._debugMsgRecv = 0;\n\t\t}, 60000);\n\n\t\tprocess.on('unhandledRejection', async (error, rej) => {\n\t\t\t// Condition to filter out the MongoError with code 48 (NamespaceExists)\n\t\t\tif (error && error['name'] === 'MongoError' && error['code'] === 48) {\n\t\t\t\treturn; // Simply return without doing anything further\n\t\t\t}\n\n\t\t\tconsole.error(new Date(), 'Unhandled Rejection at Promise', [error, rej]);\n\t\t\t\n\t\t\tlet diffTimeSec = moment().diff(this._serverStartTime, 'seconds');\n\n\t\t\t// If this is a MongoNetworkTimeoutError, handle it specifically\n\t\t\tif (error && (error['name'] === 'MongoNetworkTimeoutError' || error instanceof MongoNetworkTimeoutError)) {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\t// Sending email notification (using your existing method)\n\t\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - MongoNetworkTimeoutError - Quitting NodeJS - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify({\n\t\t\t\t\t\tname: error['name'],\n\t\t\t\t\t\tmessage: error['message'],\n\t\t\t\t\t\tstack: error['stack']\n\t\t\t\t\t}, null, 2));\n\n\t\t\t\t\t// Exiting the process\n\t\t\t\t\tprocess.exit(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (error && error['name'] === 'MongoError' && error['message'] === 'not master') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Rejection - Quitting NodeJS - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t\t}\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\telse if (error && error['name'] === 'MongoError' && error['message'] === 'not master and slaveOk=false') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Rejection - Quitting NodeJS - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t\t}\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\telse if (error) {\n\t\t\t\tif (error['name'] !== 'StatusError' && error['message'] !== '') {\n\t\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t\t}, 60000);\n\n\t\t\t\t\t\tthis._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Rejection - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tprocess.on('uncaughtException', async error => {\n\t\t\tconsole.error(error, 'Uncaught Exception thrown');\n\n\t\t\tlet diffTimeSec = moment().diff(this._serverStartTime, 'seconds');\n\n\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t}, 60000);\n\t\t\t\t\n\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Exception - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t}\n\t\t});\n\n\t\t//PM2 wants to reboot/restart\n\t\tprocess.on('SIGINT', () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\tthis._serverHTTP.close();\n\t\t\tthis.safeShutdown();\n\t\t});\n\n\t\tprocess.on('SIGTERM', () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\tthis._serverHTTP.close();\n\t\t\tthis.safeShutdown();\n\t\t});\n\n\t\tprocess.on('SIGQUIT', () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\tthis._serverHTTP.close();\n\t\t\tthis.safeShutdown();\n\t\t});\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Starting ResolveIO Server');\n\t\t}\n\n\t\t// Start express app\n\t\tthis._app = express();\n\n\t\t// Use body parser for http call (login)\n\t\tthis._app.use(bodyParser.json({limit: '50mb', reviver: dateReviver}));\n\t\tthis._app.use(bodyParser.urlencoded({limit: '50mb', extended: true, parameterLimit: 1000000 }));\n\t\tthis._app.use(xmlParser());\n\t\t\n\t\t// Set port\n\t\tthis._portHTTP = process.env.PORT_HTTP || serverConfig['PORT_HTTP'] || 8080;\n\t\tthis._portWSS = process.env.PORT_WSS || serverConfig['PORT_WSS'] || 8081;\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup ports');\n\t\t}\n\n\t\t// Create http server and websock server\n\t\tthis.createServer();\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Create server');\n\t\t}\n\t\t\n\t\t// Set CORS\n\t\tthis._app.use(function (req, res, next) {\n\n\t\t\t// Website you wish to allow to connect\n\t\t\t// res.setHeader('Access-Control-Allow-Origin', serverConfig['ROOT_URL']);\n\t\t\tres.setHeader('Access-Control-Allow-Origin', '*');\n\t\t\n\t\t\t// Request methods you wish to allow\n\t\t\t// res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');\n\t\t\tres.setHeader('Access-Control-Allow-Methods', 'GET, POST');\n\t\t\n\t\t\t// Request headers you wish to allow\n\t\t\tres.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');\n\t\t\n\t\t\t// Set to true if you need the website to include cookies in the requests sent\n\t\t\t// to the API (e.g. in case you use sessions)\n\t\t\tres.setHeader('Access-Control-Allow-Credentials', 'false');\n\t\t\n\t\t\t// Pass to next layer of middleware\n\t\t\tnext();\n\t\t});\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup cors');\n\t\t}\n\n\t\t// Set up http login route\n\t\tsetupAuthRoutes(this, this._app, serverConfig);\n\t\tsetupHealthRoutes(this._app, serverConfig);\n\n\t\tif (serverConfig['CLIENT_NAME'] === 'ResolveIO' || this.standardProgram) {\n\t\t\tsetupHomeRoutes(this, this._app, serverConfig);\n\t\t}\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup express routes');\n\t\t}\n\t}\n\n\tprivate safeShutdown() {\n\t\tif (!this._safeShutdown) {\n\t\t\tconsole.log(new Date(), 'Safe Shutdown Command Received');\n\t\t}\n\n\t\tif (\n\t\t\t!this._monitorManagerFunction.getActiveMonitorFunctions().length && \n\t\t\t// (!this._monitorManagerFunction.getLastCompletedMonitorFunction() ||\n\t\t\t// Date.now() >= this._monitorManagerFunction.getLastCompletedMonitorFunction().endTime.getTime() + 1500) &&\n\t\t\t!this._msgQueue.length &&\n\t\t\t!this._msgQueueRunning &&\n\t\t\t!this._offlineUpdates.length\n\t\t) {\n\t\t\tResolveIOServer.getMongoConnection().close(false).then(() => {\n\t\t\t\tconsole.log(new Date(), 'Safe Exit Complete, Process Exit');\n\t\t\t\tprocess.exit(0);\n\t\t\t}, () => {process.exit(1)});\n\t\t}\n\t\telse {\n\t\t\tif (!this._safeShutdown) {\n\t\t\t\tthis._safeShutdown = true;\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis._safeShutdown = false;\n\t\t\t\t}, 1000);\n\n\t\t\t\tconsole.log(new Date(), \n\t\t\t\t\t'Safe Exit In Progress', \n\t\t\t\t\tthis._monitorManagerFunction.getActiveMonitorFunctions().length, \n\t\t\t\t\t// this._monitorManagerFunction.getLastCompletedMonitorFunction() ? this._monitorManagerFunction.getLastCompletedMonitorFunction().endTime : '',\n\t\t\t\t\tthis._msgQueue.length, \n\t\t\t\t\tthis._msgQueueRunning,\n\t\t\t\t\tthis._offlineUpdates.length\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tsetImmediate(() => {\n\t\t\t\tthis.safeShutdown();\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic getWS(id_ws: string) {\n\t\treturn Array.from(this._serverWSS.clients).filter(a => a['id_socket'] === id_ws)[0];\n\t}\n\n\tpublic getWSList() {\n\t\tlet res = [];\n\n\t\tthis._serverWSS.clients.forEach((ws: WebSocket) => {\n\t\t\tres.push(ws['id_socket']);\n\t\t});\n\n\t\treturn res;\n\t}\n\n\tpublic getWSUserList() {\n\t\tlet res = [];\n\n\t\tthis._serverWSS.clients.forEach((ws: WebSocket) => {\n\t\t\tres.push(ws['id_user']);\n\t\t});\n\n\t\treturn res;\n\t}\n\n\tpublic getHTTPServer() {\n\t\treturn this._serverHTTP;\n\t}\n\n\tpublic getCronManager() {\n\t\treturn this._cronManager;\n\t}\n\n\tpublic getMethodManager() {\n\t\treturn this._methodManager;\n\t}\n\n\tpublic getSubscriptionManager() {\n\t\treturn this._subscriptionManager;\n\t}\n\n\tpublic getMonitorManager() {\n\t\treturn this._monitorManager;\n\t}\n\n\tpublic getRebootFlag() {\n\t\treturn this._rebootFlag;\n\t}\n\n\tprivate createServer(): void {\n\t\t// Start express server\n\t\tthis._serverHTTP = createServer(this._app);\n\t\tthis._serverHTTP.keepAliveTimeout = 65000;\n\t\tthis._serverHTTP.headersTimeout = 66000; // This should be bigger than `keepAliveTimeout + your server's expected response time`\n\n\t\t// Start websocket server\n\t\t// Verify client with token before opening socket\n\t\tthis._serverWSS = new WebSocket.Server({ \n\t\t\tport: this._portWSS,\n\t\t\tverifyClient: this.publicProgram ? null : async (info, cb) => {\n\t\t\t\tif (this._rebootFlag) {\n\t\t\t\t\tcb(false, 409, 'Unable To Process');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\t\t\t\tconsole.log('Verify Client', info, cb);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet infoData = (<string>info.req.headers['sec-websocket-protocol']).split(/,/);\n\n\t\t\t\t\tif (info.origin !== this._serverConfig['ROOT_URL'] && info.origin !== this._serverConfig['SEC_ROOT_URL'] && info.origin !== this._serverConfig['RESOLVEIO_URL'] && info.origin !== this._serverConfig['RESOLVEIO_SECONDARY_URL']) {\n\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet token = infoData[0];\n\t\t\t\t\t\tif (!token) {\n\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tjwt.verify(token, this._serverConfig['JWT_SECRET'], async (err, decoded) => {\n\t\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tinfo.req['id_user'] = decoded['id_user'];\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tlet user = await Users.findById(decoded['id_user']);\n\t\t\t\t\t\t\t\t\t\tif (user) {\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['user'] = user.fullname;\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['user_readonly'] = user.readonly || false;\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['doc_user'] = user;\n\t\t\t\t\t\t\t\t\t\t\tcb(true);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tcb(false);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t\t\t\t\tcb(false);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// Start MongoDB Connection\n\t\tthis.setUpMongo();\n\t}\n\n\tprivate setUpMongo() {\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Start Managers');\n\t\t}\n\n\t\t// Start Managers\n\t\tthis._subscriptionManager = new SubscriptionManager(this, this._serverWSS, this._serverConfig, this._monitorManagerFunction);\n\t\tthis._methodManager = new MethodManager(this, this._serverConfig, this._clientDir, this._monitorManagerFunction);\n\t\tthis._cronManager = new CronManager(this);\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('End Managers');\n\t\t}\n\n\t\tthis.listen();\n\t}\n\n\t// Listen to port for websocket\n\tprivate listen(): void {\n\t\tthis._serverHTTP.listen(this._portHTTP, () => {\n\t\t\tconsole.log('Running server on port %s', this._portHTTP);\n\t\t});\n\n\t\tthis._serverWSS.on('listening', () => {\n\t\t\tconsole.log('Running server on port %s', this._portWSS);\n\t\t});\n\n\t\t// On websocket connection (already verified)\n\t\tthis._serverWSS.on('connection', (ws, req) => {\n\t\t\tif (!this.publicProgram) {\n\t\t\t\t// Get user from token\n\t\t\t\tws['id_user'] = req['id_user'];\n\t\t\t\tws['user'] = req['user'];\n\t\t\t\tws['user_readonly'] = req['user_readonly'];\n\t\t\t\tws['doc_user'] = req['doc_user'];\n\n\t\t\t\tif (ws['user'] !== 'Admin' && this._serverConfig['CLIENT_NAME'] !== 'ResolveIO') {\n\t\t\t\t\tthis.getMethodManager().callMethodInternal.call(this.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\n\t\t\tws['id_socket'] = objectIdHexString();\n\t\t\tws['retryCnt'] = 0;\n\n\t\t\tthis._subscriptionManager.createLoggedInUser(ws['id_socket']).then(() => {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tws['pingTime'] = new Date();\n\t\t\t\t\tws.ping(() => {});\n\t\t\t\t}, 5000);\n\t\t\t});\n\n\t\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\t\tconsole.log('Connection from: ' + req['user']);\n\t\t\t}\n\t\t\t\n\t\t\t// Use for keeping connection alive (ping/pong)\n\t\t\tws['isAlive'] = true;\n\t\t\tws.on('pong', () => {\n\t\t\t\tws['isAlive'] = true;\n\t\t\t\tws['pongTime'] = new Date();\n\t\t\t\tws['latency'] = moment.duration(moment(ws['pongTime']).diff(ws['pingTime'])).asMilliseconds();\n\t\t\t\tthis._subscriptionManager.loggedInLatency(ws);\n\t\t\t})\n\t\t\t.on('message', async (message: string) => {\n\t\t\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\t\t\tconsole.log('Message from: ' + ws['user'], message);\n\t\t\t\t}\n\n\t\t\t\tthis._debugMsgRecv += 1;\n\n\t\t\t\tlet parseErrorFound = false;\n\n\t\t\t\tlet socketData = [];\n\t\t\t\t\n\t\t\t\ttry {\n\t\t\t\t\tsocketData = JSON.parse(message, dateReviver);\n\t\t\t\t}\n\t\t\t\tcatch(e) {\n\t\t\t\t\tconsole.log('Error - JSON.parse', message);\n\t\t\t\t\t\n\t\t\t\t\tthis._methodManager.sendEmail('dev@resolveio.com', 'SERVER - JSON Parse Error - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([message, e]));\n\n\t\t\t\t\tparseErrorFound = true;\n\t\t\t\t}\n\n\t\t\t\tif (!parseErrorFound) {\n\t\t\t\t\tif (socketData[0] === 'ping') {\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tws.send('pong', (error) => {\n\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\tif (this._subscriptionManager.getEnableDebug()) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(new Date(), 'Server App', 'Error WS Pong');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\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\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet messageRoute = socketData[0];\n\n\t\t\t\t\tif (!this.publicProgram && this._clientRoutes.some(a => messageRoute.includes(a)) && !ws['doc_user'].roles.groups.some(a => a.views.some(b => messageRoute.includes(b) || b.includes(messageRoute))) && !ws['doc_user'].roles.super_admin) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet messageDate = socketData[1];\n\t\t\t\t\tlet messageId = socketData[2]\n\t\t\t\t\tlet type = socketData[3]\n\n\t\t\t\t\tif (type === 'subscription') {\n\t\t\t\t\t\tlet subType = socketData[4];\n\t\t\t\t\t\tlet pub = socketData[5];\n\t\t\n\t\t\t\t\t\t// Subscribe\n\t\t\t\t\t\tif (subType === 'sub') {\n\t\t\t\t\t\t\tthis._subscriptionManager.subscribe(messageRoute, messageDate, ws, messageId, pub, socketData.slice(6));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Unsubscribe\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._subscriptionManager.unsubscribe(messageRoute, messageDate, ws, messageId, pub, socketData.slice(6));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (!this.publicProgram && type === 'offline') {\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: 'ACK'\n\t\t\t\t\t\t};\n\t\t\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tws.send(JSON.stringify(serverRes), (error) => {\n\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\tif (this._subscriptionManager.getEnableDebug()) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(new Date(), 'Server App', 'Error WS Offline Ack Main');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\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\tthis._offlineUpdates.push(ws);\n\t\t\t\t\t\tlet offlineUpdates = socketData[4];\n\n\t\t\t\t\t\tfor (let i = 0; i < offlineUpdates.length; i++) {\n\t\t\t\t\t\t\tlet update = offlineUpdates[i];\n\t\t\t\t\t\t\tlet data = update.data;\n\n\t\t\t\t\t\t\tlet serverResMethod: ServerResponseModel = {\n\t\t\t\t\t\t\t\tmessageId: update.data[2],\n\t\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\t\tdata: 'ACK'\n\t\t\t\t\t\t\t};\n\t\t\t\n\t\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\t\tws.send(JSON.stringify(serverResMethod), (error) => {\n\t\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\t\tif (this._subscriptionManager.getEnableDebug()) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log(new Date(), 'Server App', 'Error WS Offline Ack Each');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tthis.unsubscribeWS(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\n\t\t\t\t\t\t\tlet updateRoute = data.shift();\n\t\t\t\t\t\t\tlet updateDate = data.shift();\n\t\t\t\t\t\t\tlet updateMessageId = data.shift();\n\t\t\t\t\t\t\tlet updateType = data.shift();\n\t\t\t\t\t\t\tlet method = data.shift();\n\t\t\t\t\t\t\tlet methodLatencyId = objectIdHexString();\n\n\t\t\t\t\t\t\tLogMethodLatencies.create({\n\t\t\t\t\t\t\t\t_id: methodLatencyId,\n\t\t\t\t\t\t\t\t__v: 0,\n\t\t\t\t\t\t\t\tdate_start: new Date(),\n\t\t\t\t\t\t\t\tdate_end: null,\n\t\t\t\t\t\t\t\tlatency_ms: 0,\n\t\t\t\t\t\t\t\tmethod: method\n\t\t\t\t\t\t\t});\n\t\t\t\n\t\t\t\t\t\t\tif (method !== 'reportBuilderGetResults' && method !== 'reportBuilderGetDistinctValue' && method !== 'reportBuilderBuildTree' && method !== 'generatePDF' && method !== 'getWOOfflineData' && method !== 'countQuery' && method !== 'countWithQuery' && method !== 'countCollectionWithQuery' && method !== 'find' && method !== 'findOne' && method !== 'findWithOptions' && method !== 'getDrivers' && method !== 'processAirdropDistribution') {\n\t\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(data)) < 200000 ? JSON.stringify(data, null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\t\t\troute: messageRoute\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this._methodManager._methods[method]) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tawait this._methodManager.callMethodInternal.call(Object.assign({}, this._methodManager, {id_user: ws['id_user'], user: ws['user'], id_ws: ws['id_socket']}), method, ...data);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), 'Offline Error', JSON.stringify(err, null, 2));\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (method === 'updateDocumentOffline' || method === 'updateDocumentPropsOffline') {\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(data[0]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tconsole.log('Offline - Could not find method: ' + method);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._offlineUpdates.splice(this._offlineUpdates.map(a => a['id_socket']).indexOf(ws['id_socket']), 1);\n\t\t\t\t\t}\n\t\t\t\t\telse { //methods\n\t\t\t\t\t\tthis._msgQueue.splice(0, 0, {\n\t\t\t\t\t\t\tws: ws,\n\t\t\t\t\t\t\tdata: socketData\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\t.on('end', () => {\n\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\tif (this._subscriptionManager.getEnableDebug()) {\n\t\t\t\t\tconsole.log(new Date(), 'Server App', 'WS End');\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('close', () => {\n\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\tif (this._subscriptionManager.getEnableDebug()) {\n\t\t\t\t\tconsole.log(new Date(), 'Server App', 'WS Close');\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('error', error => {\n\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\tif (this._subscriptionManager.getEnableDebug()) {\n\t\t\t\t\tconsole.log(new Date(), ws['user'], ws['id_socket'], 'WS Error');\n\t\t\t\t}\n\t\t\t\t\n\t\t\t});\n\t\t});\n\n\t\t// Keep alive timer to ping/pong\n\t\tsetInterval(() => {\n\t\t\tthis._serverWSS.clients.forEach((ws: WebSocket) => {\n\t\t\t\tif (ws['pingTime'] && Date.now() - ws['pingTime'].getTime() >= 20000) {\n\t\t\t\t\tif (ws['isAlive'] === false) {\n\t\t\t\t\t\tws['retryCnt']++;\n\n\t\t\t\t\t\tif (ws['retryCnt'] >= 3) {\n\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tws['pingTime'] = new Date();\n\t\t\t\t\t\t\tws.ping(() => {});\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\tws['retryCnt'] = 0;\n\t\t\t\t\t\tws['isAlive'] = false;\n\t\t\t\t\t\tws['pingTime'] = new Date();\n\t\t\t\t\t\tws.ping(() => {});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}, 20000);\n\n\t\tsetInterval(() => {\n\t\t\tif (!this._msgQueueRunning) {\t\t\t\t\n\t\t\t\tif (this._msgQueue.length) {\n\t\t\t\t\tthis._msgQueueRunning = true;\n\t\t\t\t\tthis._debugMsgQueue += 1;\n\n\t\t\t\t\tlet msg = this._msgQueue.pop();\n\t\t\t\t\tlet data = msg.data;\n\t\t\t\t\tlet ws = msg.ws;\n\t\t\n\t\t\t\t\tlet messageRoute: string = data.shift();\n\t\t\t\t\tlet messageDate: Date = data.shift();\n\t\t\t\t\tlet messageId: number = data.shift();\n\t\t\t\t\tlet type: string = data.shift();\n\t\t\n\t\t\t\t\t// Method call\n\t\t\t\t\tif (type === 'method') {\n\t\t\t\t\t\tlet method = data.shift();\n\n\t\t\t\t\t\tif (ws['user_readonly']) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet methodLatencyId = objectIdHexString();\n\n\t\t\t\t\t\tLogMethodLatencies.create({\n\t\t\t\t\t\t\t_id: methodLatencyId,\n\t\t\t\t\t\t\t__v: 0,\n\t\t\t\t\t\t\tdate_start: new Date(),\n\t\t\t\t\t\t\tdate_end: null,\n\t\t\t\t\t\t\tlatency_ms: 0,\n\t\t\t\t\t\t\tmethod: method\n\t\t\t\t\t\t});\n\t\t\n\t\t\t\t\t\tif (method !== 'reportBuilderGetResults' && method !== 'reportBuilderGetDistinctValue' && method !== 'reportBuilderBuildTree' && method !== 'generatePDF' && method !== 'getWOOfflineData' && method !== 'countQuery' && method !== 'countWithQuery' && method !== 'countCollectionWithQuery' && method !== 'find' && method !== 'findOne' && method !== 'findWithOptions' && method !== 'getDrivers' && method !== 'processAirdropDistribution') {\n\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(data)) < 200000 ? JSON.stringify(data, null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\t\troute: messageRoute\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\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: 'ACK'\n\t\t\t\t\t\t};\n\t\t\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tws.send(JSON.stringify(serverRes), (error) => {\n\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\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\n\t\t\t\t\t\tif (this._methodManager._methods[method]) {\n\t\t\t\t\t\t\tthis._methodManager.callMethod(methodLatencyId, ws, messageDate, messageId, method, ...data);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconsole.log('Could not find method: ' + method);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (type === 'methodResponse') {\n\t\t\t\t\t\tlet method = data.shift();\n\t\t\n\t\t\t\t\t\tMethodResponses.findOne({$and: [\n\t\t\t\t\t\t\t{id_user: ws['id_user']}, \n\t\t\t\t\t\t\t{message_id: messageId},\n\t\t\t\t\t\t\t{method: method},\n\t\t\t\t\t\t\t{date: messageDate}\n\t\t\t\t\t\t]}).then(res => {\n\t\t\t\t\t\t\tif (res) {\n\t\t\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\t\t\tws.send(JSON.stringify(res.response), (error) => {\n\t\t\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, err => {});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis._msgQueueRunning = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}, 25);\n\t}\n\n\tpublic unsubscribeWS(ws: WebSocket) {\n\t\tif (this._subscriptionManager.getEnableDebug()) {\n\t\t\tconsole.log(new Date(), 'Server App', 'Unsub WS', ws['user'], ws['id_socket']);\n\t\t}\n\t\tthis._subscriptionManager.unsubscribeAll(ws);\n\t\tws.removeAllListeners();\n\t\tws = null;\n\t}\n\n\tpublic getApp() {\n\t\treturn this._app;\n\t}\n\n\tpublic getServerConfig() {\n\t\treturn this._serverConfig;\n\t}\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../src/server-app.ts"],"names":["http_1","require","express","bodyParser","xmlParser","WebSocket","jwt","moment","common_1","mongo_manager_1","cron_manager_1","method_manager_1","subscription_manager_1","monitor_manager_1","method_response_collection_1","log_collection_1","log_method_latency_collection_1","user_collection_1","home_1","auth_1","health_1","index_1","mongodb_1","ResolveIOMainServer","mainServer","serverConfig","clientRoutes","clientDir","sesMail","standardProgram","publicProgram","_this","this","_offlineUpdates","_msgQueue","_msgQueueRunning","_rebootFlag","LOGGER","_clientRoutes","_lastErrorMsg","_debugMsgRecv","_debugMsgQueue","_safeShutdown","_serverConfig","_clientDir","_serverStartTime","Date","_monitorManager","MonitorManager","_monitorManagerFunction","MonitorManagerFunction","setInterval","_subscriptionManager","getEnableDebug","console","log","length","process","on","error","rej","__awaiter","diffTimeSec","diff","MongoNetworkTimeoutError","setTimeout","_methodManager","sendEmail","JSON","stringify","name","message","stack","_a","sent","exit","_serverHTTP","close","safeShutdown","_app","use","json","limit","reviver","dateReviver","urlencoded","extended","parameterLimit","_portHTTP","env","PORT_HTTP","_portWSS","PORT_WSS","createServer","req","res","next","setHeader","setupAuthRoutes","setupHealthRoutes","setupHomeRoutes","prototype","getActiveMonitorFunctions","setImmediate","ResolveIOServer","getMongoConnection","then","getWS","id_ws","Array","from","_serverWSS","clients","filter","a","getWSList","forEach","ws","push","getWSUserList","getHTTPServer","getCronManager","_cronManager","getMethodManager","getSubscriptionManager","getMonitorManager","getRebootFlag","keepAliveTimeout","headersTimeout","Server","port","verifyClient","info","cb","infoData","headers","split","origin","token","verify","err","decoded","Users","findById","user","fullname","readonly","setUpMongo","SubscriptionManager","MethodManager","CronManager","listen","callMethodInternal","call","id_user","date","client","getClientName","objectIdHexString","createLoggedInUser","ping","duration","asMilliseconds","loggedInLatency","parseErrorFound","socketData","parse","e","readyState","OPEN","send","unsubscribeWS","messageRoute_1","some","includes","roles","groups","views","b","super_admin","messageDate","messageId","type","subType","pub","subscribe","slice","unsubscribe","serverRes","hasError","data","offlineUpdates","i","update","serverResMethod","shift","method","methodLatencyId","LogMethodLatencies","create","_id","__v","date_start","date_end","latency_ms","Logs","insertOne","collection","id_document","payload","getBinarySize","route","_methods","apply","__spreadArray","Object","assign","_b","err_2","getMongoManager","invalidateQueryCache","splice","map","indexOf","now","getTime","msg","pop","ws_1","messageRoute","callMethod","MethodResponses","findOne","$and","message_id","response","unsubscribeAll","removeAllListeners","getApp","getServerConfig"],"mappings":"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","file":"server-app.js","sourcesContent":["import { createServer, Server } from 'http';\nimport * as express from 'express';\nimport * as bodyParser from 'body-parser';\nimport * as xmlParser from 'express-xml-bodyparser';\nimport * as WebSocket from 'ws';\nimport * as jwt from 'jsonwebtoken';\n// import * as SegfaultHandler from 'segfault-handler';\nimport * as moment from 'moment-timezone';\n\nimport { dateReviver, getBinarySize, deepCopy } from './util/common';\n\nimport { objectIdHexString } from './managers/mongo.manager';\nimport { CronManager } from './managers/cron.manager';\nimport { MethodManager } from './managers/method.manager';\nimport { SubscriptionManager } from './managers/subscription.manager';\nimport { MonitorManager, MonitorManagerFunction } from './managers/monitor.manager';\n\nimport { ServerResponseModel } from './models/server-response.model';\n\nimport { MethodResponses } from './collections/method-response.collection';\nimport { Logs } from './collections/log.collection';\nimport { LogMethodLatencies } from './collections/log-method-latency.collection';\nimport { Users } from './collections/user.collection';\n\nimport { setupHomeRoutes } from './http/home';\nimport { setupAuthRoutes } from './http/auth';\nimport { setupHealthRoutes } from './http/health';\nimport { ResolveIOServer } from './index';\nimport { MongoNetworkTimeoutError } from 'mongodb';\n\nexport default class ResolveIOMainServer {\n\tprivate _app: express.Application;\n\tprivate _serverHTTP: Server;\n\tprivate _portHTTP: string | number;\n\tprivate _serverWSS: WebSocket.Server;\n\tprivate _portWSS: number;\n\tprivate _serverConfig;\n\tprivate _clientDir;\n\tprivate _offlineUpdates = [];\n\tprivate _msgQueue = [];\n\tprivate _msgQueueRunning = false;\n\tpublic sesMail = false;\n\tprivate standardProgram = false;\n\tprivate publicProgram = false;\n\tprivate _rebootFlag = false;\n\n\tprivate LOGGER = 'ERROR'; //ERROR / DEBUG\n\n\tprivate _monitorManager: MonitorManager;\n\tprivate _monitorManagerFunction: MonitorManagerFunction;\n\tprivate _subscriptionManager: SubscriptionManager;\n\tprivate _methodManager: MethodManager;\n\tprivate _cronManager: CronManager;\n\tprivate _clientRoutes: string[] = [];\n\n\tprivate _serverStartTime: Date;\n\tprivate _lastErrorMsg: Date = null;\n\n\tprivate _debugMsgRecv = 0;\n\tprivate _debugMsgQueue = 0;\n\n\tprivate _safeShutdown = false;\n\n\tconstructor(mainServer, serverConfig, clientRoutes, clientDir, sesMail, standardProgram, publicProgram = false) {\n\t\tthis._serverConfig = serverConfig;\n\t\tthis._clientRoutes = clientRoutes;\n\t\tthis._clientDir = clientDir;\n\t\tthis.sesMail = sesMail;\n\t\tthis.standardProgram = standardProgram;\n\t\tthis.publicProgram = publicProgram;\n\n\t\tthis._serverStartTime = new Date();\n\t\tthis._lastErrorMsg = null;\n\t\tthis._monitorManager = new MonitorManager(mainServer, serverConfig);\n\t\tthis._monitorManagerFunction = new MonitorManagerFunction();\n\n\t\tsetInterval(() => {\n\t\t\tif (this._subscriptionManager.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Server App', 'Msg Queue Length', this._msgQueue.length);\n\t\t\t\tconsole.log(new Date(), 'Server App', 'Msg Recv Hits', this._debugMsgRecv);\n\t\t\t\tconsole.log(new Date(), 'Server App', 'Msg Queue Hits', this._debugMsgQueue);\n\t\t\t}\n\n\t\t\tthis._debugMsgQueue = 0;\n\t\t\tthis._debugMsgRecv = 0;\n\t\t}, 60000);\n\n\t\tprocess.on('unhandledRejection', async (error, rej) => {\n\t\t\t// Condition to filter out the MongoError with code 48 (NamespaceExists)\n\t\t\tif (error && error['name'] === 'MongoError' && error['code'] === 48) {\n\t\t\t\treturn; // Simply return without doing anything further\n\t\t\t}\n\n\t\t\tconsole.error(new Date(), 'Unhandled Rejection at Promise', [error, rej]);\n\t\t\t\n\t\t\tlet diffTimeSec = moment().diff(this._serverStartTime, 'seconds');\n\n\t\t\t// If this is a MongoNetworkTimeoutError, handle it specifically\n\t\t\tif (error && (error['name'] === 'MongoNetworkTimeoutError' || error instanceof MongoNetworkTimeoutError)) {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\t// Sending email notification (using your existing method)\n\t\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - MongoNetworkTimeoutError - Quitting NodeJS - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify({\n\t\t\t\t\t\tname: error['name'],\n\t\t\t\t\t\tmessage: error['message'],\n\t\t\t\t\t\tstack: error['stack']\n\t\t\t\t\t}, null, 2));\n\n\t\t\t\t\t// Exiting the process\n\t\t\t\t\tprocess.exit(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (error && error['name'] === 'MongoError' && error['message'] === 'not master') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Rejection - Quitting NodeJS - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t\t}\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\telse if (error && error['name'] === 'MongoError' && error['message'] === 'not master and slaveOk=false') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Rejection - Quitting NodeJS - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t\t}\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\telse if (error) {\n\t\t\t\tif (error['name'] !== 'StatusError' && error['message'] !== '') {\n\t\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t\t}, 60000);\n\n\t\t\t\t\t\tthis._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Rejection - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tprocess.on('uncaughtException', async error => {\n\t\t\tconsole.error(error, 'Uncaught Exception thrown');\n\n\t\t\tlet diffTimeSec = moment().diff(this._serverStartTime, 'seconds');\n\n\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t}, 60000);\n\t\t\t\t\n\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Exception - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t}\n\t\t});\n\n\t\t//PM2 wants to reboot/restart\n\t\tprocess.on('SIGINT', () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\tthis._serverHTTP.close();\n\t\t\tthis.safeShutdown();\n\t\t});\n\n\t\tprocess.on('SIGTERM', () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\tthis._serverHTTP.close();\n\t\t\tthis.safeShutdown();\n\t\t});\n\n\t\tprocess.on('SIGQUIT', () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\tthis._serverHTTP.close();\n\t\t\tthis.safeShutdown();\n\t\t});\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Starting ResolveIO Server');\n\t\t}\n\n\t\t// Start express app\n\t\tthis._app = express();\n\n\t\t// Use body parser for http call (login)\n\t\tthis._app.use(bodyParser.json({limit: '50mb', reviver: dateReviver}));\n\t\tthis._app.use(bodyParser.urlencoded({limit: '50mb', extended: true, parameterLimit: 1000000 }));\n\t\tthis._app.use(xmlParser());\n\t\t\n\t\t// Set port\n\t\tthis._portHTTP = process.env.PORT_HTTP || serverConfig['PORT_HTTP'] || 8080;\n\t\tthis._portWSS = process.env.PORT_WSS || serverConfig['PORT_WSS'] || 8081;\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup ports');\n\t\t}\n\n\t\t// Create http server and websock server\n\t\tthis.createServer();\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Create server');\n\t\t}\n\t\t\n\t\t// Set CORS\n\t\tthis._app.use(function (req, res, next) {\n\n\t\t\t// Website you wish to allow to connect\n\t\t\t// res.setHeader('Access-Control-Allow-Origin', serverConfig['ROOT_URL']);\n\t\t\tres.setHeader('Access-Control-Allow-Origin', '*');\n\t\t\n\t\t\t// Request methods you wish to allow\n\t\t\t// res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');\n\t\t\tres.setHeader('Access-Control-Allow-Methods', 'GET, POST');\n\t\t\n\t\t\t// Request headers you wish to allow\n\t\t\tres.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');\n\t\t\n\t\t\t// Set to true if you need the website to include cookies in the requests sent\n\t\t\t// to the API (e.g. in case you use sessions)\n\t\t\tres.setHeader('Access-Control-Allow-Credentials', 'false');\n\t\t\n\t\t\t// Pass to next layer of middleware\n\t\t\tnext();\n\t\t});\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup cors');\n\t\t}\n\n\t\t// Set up http login route\n\t\tsetupAuthRoutes(this, this._app, serverConfig);\n\t\tsetupHealthRoutes(this._app, serverConfig);\n\n\t\tif (serverConfig['CLIENT_NAME'] === 'ResolveIO' || this.standardProgram) {\n\t\t\tsetupHomeRoutes(this, this._app, serverConfig);\n\t\t}\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup express routes');\n\t\t}\n\t}\n\n\tprivate safeShutdown() {\n\t\tif (!this._safeShutdown) {\n\t\t\tconsole.log(new Date(), 'Safe Shutdown Command Received');\n\t\t}\n\n\t\tif (\n\t\t\t!this._monitorManagerFunction.getActiveMonitorFunctions().length && \n\t\t\t// (!this._monitorManagerFunction.getLastCompletedMonitorFunction() ||\n\t\t\t// Date.now() >= this._monitorManagerFunction.getLastCompletedMonitorFunction().endTime.getTime() + 1500) &&\n\t\t\t!this._msgQueue.length &&\n\t\t\t!this._msgQueueRunning &&\n\t\t\t!this._offlineUpdates.length\n\t\t) {\n\t\t\tResolveIOServer.getMongoConnection().close(false).then(() => {\n\t\t\t\tconsole.log(new Date(), 'Safe Exit Complete, Process Exit');\n\t\t\t\tprocess.exit(0);\n\t\t\t}, () => {process.exit(1)});\n\t\t}\n\t\telse {\n\t\t\tif (!this._safeShutdown) {\n\t\t\t\tthis._safeShutdown = true;\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis._safeShutdown = false;\n\t\t\t\t}, 1000);\n\n\t\t\t\tconsole.log(new Date(), \n\t\t\t\t\t'Safe Exit In Progress', \n\t\t\t\t\tthis._monitorManagerFunction.getActiveMonitorFunctions().length, \n\t\t\t\t\t// this._monitorManagerFunction.getLastCompletedMonitorFunction() ? this._monitorManagerFunction.getLastCompletedMonitorFunction().endTime : '',\n\t\t\t\t\tthis._msgQueue.length, \n\t\t\t\t\tthis._msgQueueRunning,\n\t\t\t\t\tthis._offlineUpdates.length\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tsetImmediate(() => {\n\t\t\t\tthis.safeShutdown();\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic getWS(id_ws: string) {\n\t\treturn Array.from(this._serverWSS.clients).filter(a => a['id_socket'] === id_ws)[0];\n\t}\n\n\tpublic getWSList() {\n\t\tlet res = [];\n\n\t\tthis._serverWSS.clients.forEach((ws: WebSocket) => {\n\t\t\tres.push(ws['id_socket']);\n\t\t});\n\n\t\treturn res;\n\t}\n\n\tpublic getWSUserList() {\n\t\tlet res = [];\n\n\t\tthis._serverWSS.clients.forEach((ws: WebSocket) => {\n\t\t\tres.push(ws['id_user']);\n\t\t});\n\n\t\treturn res;\n\t}\n\n\tpublic getHTTPServer() {\n\t\treturn this._serverHTTP;\n\t}\n\n\tpublic getCronManager() {\n\t\treturn this._cronManager;\n\t}\n\n\tpublic getMethodManager() {\n\t\treturn this._methodManager;\n\t}\n\n\tpublic getSubscriptionManager() {\n\t\treturn this._subscriptionManager;\n\t}\n\n\tpublic getMonitorManager() {\n\t\treturn this._monitorManager;\n\t}\n\n\tpublic getRebootFlag() {\n\t\treturn this._rebootFlag;\n\t}\n\n\tprivate createServer(): void {\n\t\t// Start express server\n\t\tthis._serverHTTP = createServer(this._app);\n\t\tthis._serverHTTP.keepAliveTimeout = 65000;\n\t\tthis._serverHTTP.headersTimeout = 66000; // This should be bigger than `keepAliveTimeout + your server's expected response time`\n\n\t\t// Start websocket server\n\t\t// Verify client with token before opening socket\n\t\tthis._serverWSS = new WebSocket.Server({ \n\t\t\tport: this._portWSS,\n\t\t\tverifyClient: this.publicProgram ? null : async (info, cb) => {\n\t\t\t\tif (this._rebootFlag) {\n\t\t\t\t\tcb(false, 409, 'Unable To Process');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\t\t\t\tconsole.log('Verify Client', info, cb);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet infoData = (<string>info.req.headers['sec-websocket-protocol']).split(/,/);\n\n\t\t\t\t\tif (info.origin !== this._serverConfig['ROOT_URL'] && info.origin !== this._serverConfig['SEC_ROOT_URL'] && info.origin !== this._serverConfig['RESOLVEIO_URL'] && info.origin !== this._serverConfig['RESOLVEIO_SECONDARY_URL']) {\n\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet token = infoData[0];\n\t\t\t\t\t\tif (!token) {\n\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tjwt.verify(token, this._serverConfig['JWT_SECRET'], async (err, decoded) => {\n\t\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tinfo.req['id_user'] = decoded['id_user'];\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tlet user = await Users.findById(decoded['id_user']);\n\t\t\t\t\t\t\t\t\t\tif (user) {\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['user'] = user.fullname;\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['user_readonly'] = user.readonly || false;\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['doc_user'] = user;\n\t\t\t\t\t\t\t\t\t\t\tcb(true);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tcb(false);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t\t\t\t\tcb(false);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// Start MongoDB Connection\n\t\tthis.setUpMongo();\n\t}\n\n\tprivate setUpMongo() {\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Start Managers');\n\t\t}\n\n\t\t// Start Managers\n\t\tthis._subscriptionManager = new SubscriptionManager(this, this._serverWSS, this._serverConfig, this._monitorManagerFunction);\n\t\tthis._methodManager = new MethodManager(this, this._serverConfig, this._clientDir, this._monitorManagerFunction);\n\t\tthis._cronManager = new CronManager(this);\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('End Managers');\n\t\t}\n\n\t\tthis.listen();\n\t}\n\n\t// Listen to port for websocket\n\tprivate listen(): void {\n\t\tthis._serverHTTP.listen(this._portHTTP, () => {\n\t\t\tconsole.log('Running server on port %s', this._portHTTP);\n\t\t});\n\n\t\tthis._serverWSS.on('listening', () => {\n\t\t\tconsole.log('Running server on port %s', this._portWSS);\n\t\t});\n\n\t\t// On websocket connection (already verified)\n\t\tthis._serverWSS.on('connection', (ws, req) => {\n\t\t\tif (!this.publicProgram) {\n\t\t\t\t// Get user from token\n\t\t\t\tws['id_user'] = req['id_user'];\n\t\t\t\tws['user'] = req['user'];\n\t\t\t\tws['user_readonly'] = req['user_readonly'];\n\t\t\t\tws['doc_user'] = req['doc_user'];\n\n\t\t\t\tif (ws['user'] !== 'Admin' && this._serverConfig['CLIENT_NAME'] !== 'ResolveIO') {\n\t\t\t\t\tthis.getMethodManager().callMethodInternal.call(this.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\n\t\t\tws['id_socket'] = objectIdHexString();\n\t\t\tws['retryCnt'] = 0;\n\n\t\t\tthis._subscriptionManager.createLoggedInUser(ws['id_socket']).then(() => {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tws['pingTime'] = new Date();\n\t\t\t\t\tws.ping(() => {});\n\t\t\t\t}, 5000);\n\t\t\t});\n\n\t\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\t\tconsole.log('Connection from: ' + req['user']);\n\t\t\t}\n\t\t\t\n\t\t\t// Use for keeping connection alive (ping/pong)\n\t\t\tws['isAlive'] = true;\n\t\t\tws.on('pong', () => {\n\t\t\t\tws['isAlive'] = true;\n\t\t\t\tws['pongTime'] = new Date();\n\t\t\t\tws['latency'] = moment.duration(moment(ws['pongTime']).diff(ws['pingTime'])).asMilliseconds();\n\t\t\t\tthis._subscriptionManager.loggedInLatency(ws);\n\t\t\t})\n\t\t\t.on('message', async (message: string) => {\n\t\t\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\t\t\tconsole.log('Message from: ' + ws['user'], message);\n\t\t\t\t}\n\n\t\t\t\tthis._debugMsgRecv += 1;\n\n\t\t\t\tlet parseErrorFound = false;\n\n\t\t\t\tlet socketData = [];\n\t\t\t\t\n\t\t\t\ttry {\n\t\t\t\t\tsocketData = JSON.parse(message, dateReviver);\n\t\t\t\t}\n\t\t\t\tcatch(e) {\n\t\t\t\t\tconsole.log('Error - JSON.parse', message);\n\t\t\t\t\t\n\t\t\t\t\tthis._methodManager.sendEmail('dev@resolveio.com', 'SERVER - JSON Parse Error - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([message, e]));\n\n\t\t\t\t\tparseErrorFound = true;\n\t\t\t\t}\n\n\t\t\t\tif (!parseErrorFound) {\n\t\t\t\t\tif (socketData[0] === 'ping') {\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tws.send('pong', (error) => {\n\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\tif (this._subscriptionManager.getEnableDebug()) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(new Date(), 'Server App', 'Error WS Pong');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\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\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet messageRoute = socketData[0];\n\n\t\t\t\t\tif (!this.publicProgram && this._clientRoutes.some(a => messageRoute.includes(a)) && !ws['doc_user'].roles.groups.some(a => a.views.some(b => messageRoute.includes(b) || b.includes(messageRoute))) && !ws['doc_user'].roles.super_admin) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet messageDate = socketData[1];\n\t\t\t\t\tlet messageId = socketData[2]\n\t\t\t\t\tlet type = socketData[3]\n\n\t\t\t\t\tif (type === 'subscription') {\n\t\t\t\t\t\tlet subType = socketData[4];\n\t\t\t\t\t\tlet pub = socketData[5];\n\t\t\n\t\t\t\t\t\t// Subscribe\n\t\t\t\t\t\tif (subType === 'sub') {\n\t\t\t\t\t\t\tthis._subscriptionManager.subscribe(messageRoute, messageDate, ws, messageId, pub, socketData.slice(6));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Unsubscribe\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._subscriptionManager.unsubscribe(messageRoute, messageDate, ws, messageId, pub, socketData.slice(6));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (!this.publicProgram && type === 'offline') {\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: 'ACK'\n\t\t\t\t\t\t};\n\t\t\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tws.send(JSON.stringify(serverRes), (error) => {\n\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\tif (this._subscriptionManager.getEnableDebug()) {\n\t\t\t\t\t\t\t\t\t\tconsole.log(new Date(), 'Server App', 'Error WS Offline Ack Main');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\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\tthis._offlineUpdates.push(ws);\n\t\t\t\t\t\tlet offlineUpdates = socketData[4];\n\n\t\t\t\t\t\tfor (let i = 0; i < offlineUpdates.length; i++) {\n\t\t\t\t\t\t\tlet update = offlineUpdates[i];\n\t\t\t\t\t\t\tlet data = update.data;\n\n\t\t\t\t\t\t\tlet serverResMethod: ServerResponseModel = {\n\t\t\t\t\t\t\t\tmessageId: update.data[2],\n\t\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\t\tdata: 'ACK'\n\t\t\t\t\t\t\t};\n\t\t\t\n\t\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\t\tws.send(JSON.stringify(serverResMethod), (error) => {\n\t\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\t\tif (this._subscriptionManager.getEnableDebug()) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log(new Date(), 'Server App', 'Error WS Offline Ack Each');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tthis.unsubscribeWS(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\n\t\t\t\t\t\t\tlet updateRoute = data.shift();\n\t\t\t\t\t\t\tlet updateDate = data.shift();\n\t\t\t\t\t\t\tlet updateMessageId = data.shift();\n\t\t\t\t\t\t\tlet updateType = data.shift();\n\t\t\t\t\t\t\tlet method = data.shift();\n\t\t\t\t\t\t\tlet methodLatencyId = objectIdHexString();\n\n\t\t\t\t\t\t\tLogMethodLatencies.create({\n\t\t\t\t\t\t\t\t_id: methodLatencyId,\n\t\t\t\t\t\t\t\t__v: 0,\n\t\t\t\t\t\t\t\tdate_start: new Date(),\n\t\t\t\t\t\t\t\tdate_end: null,\n\t\t\t\t\t\t\t\tlatency_ms: 0,\n\t\t\t\t\t\t\t\tmethod: method\n\t\t\t\t\t\t\t});\n\t\t\t\n\t\t\t\t\t\t\tif (method !== 'reportBuilderGetResults' && method !== 'reportBuilderGetDistinctValue' && method !== 'reportBuilderBuildTree' && method !== 'generatePDF' && method !== 'getWOOfflineData' && method !== 'countQuery' && method !== 'countWithQuery' && method !== 'countCollectionWithQuery' && method !== 'find' && method !== 'findOne' && method !== 'findWithOptions' && method !== 'getDrivers' && method !== 'processAirdropDistribution') {\n\t\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(data)) < 200000 ? JSON.stringify(data, null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\t\t\troute: messageRoute\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this._methodManager._methods[method]) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tawait this._methodManager.callMethodInternal.call(Object.assign({}, this._methodManager, {id_user: ws['id_user'], user: ws['user'], id_ws: ws['id_socket']}), method, ...data);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), 'Offline Error', JSON.stringify(err, null, 2));\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (method === 'updateDocumentOffline' || method === 'updateDocumentPropsOffline') {\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(data[0]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tconsole.log('Offline - Could not find method: ' + method);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._offlineUpdates.splice(this._offlineUpdates.map(a => a['id_socket']).indexOf(ws['id_socket']), 1);\n\t\t\t\t\t}\n\t\t\t\t\telse { //methods\n\t\t\t\t\t\tthis._msgQueue.splice(0, 0, {\n\t\t\t\t\t\t\tws: ws,\n\t\t\t\t\t\t\tdata: socketData\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\t.on('end', () => {\n\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\tif (this._subscriptionManager.getEnableDebug()) {\n\t\t\t\t\tconsole.log(new Date(), 'Server App', 'WS End');\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('close', () => {\n\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\tif (this._subscriptionManager.getEnableDebug()) {\n\t\t\t\t\tconsole.log(new Date(), 'Server App', 'WS Close');\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('error', error => {\n\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\tif (this._subscriptionManager.getEnableDebug()) {\n\t\t\t\t\tconsole.log(new Date(), ws['user'], ws['id_socket'], 'WS Error');\n\t\t\t\t}\n\t\t\t\t\n\t\t\t});\n\t\t});\n\n\t\t// Keep alive timer to ping/pong\n\t\tsetInterval(() => {\n\t\t\tthis._serverWSS.clients.forEach((ws: WebSocket) => {\n\t\t\t\tif (ws['pingTime'] && Date.now() - ws['pingTime'].getTime() >= 20000) {\n\t\t\t\t\tif (ws['isAlive'] === false) {\n\t\t\t\t\t\tws['retryCnt']++;\n\n\t\t\t\t\t\tif (ws['retryCnt'] >= 3) {\n\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tws['pingTime'] = new Date();\n\t\t\t\t\t\t\tws.ping(() => {});\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\tws['retryCnt'] = 0;\n\t\t\t\t\t\tws['isAlive'] = false;\n\t\t\t\t\t\tws['pingTime'] = new Date();\n\t\t\t\t\t\tws.ping(() => {});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}, 20000);\n\n\t\tsetInterval(() => {\n\t\t\tif (!this._msgQueueRunning) {\t\t\t\t\n\t\t\t\tif (this._msgQueue.length) {\n\t\t\t\t\tthis._msgQueueRunning = true;\n\t\t\t\t\tthis._debugMsgQueue += 1;\n\n\t\t\t\t\tlet msg = this._msgQueue.pop();\n\t\t\t\t\tlet data = msg.data;\n\t\t\t\t\tlet ws = msg.ws;\n\t\t\n\t\t\t\t\tlet messageRoute: string = data.shift();\n\t\t\t\t\tlet messageDate: Date = data.shift();\n\t\t\t\t\tlet messageId: number = data.shift();\n\t\t\t\t\tlet type: string = data.shift();\n\t\t\n\t\t\t\t\t// Method call\n\t\t\t\t\tif (type === 'method') {\n\t\t\t\t\t\tlet method = data.shift();\n\n\t\t\t\t\t\tif (ws['user_readonly']) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet methodLatencyId = objectIdHexString();\n\n\t\t\t\t\t\tLogMethodLatencies.create({\n\t\t\t\t\t\t\t_id: methodLatencyId,\n\t\t\t\t\t\t\t__v: 0,\n\t\t\t\t\t\t\tdate_start: new Date(),\n\t\t\t\t\t\t\tdate_end: null,\n\t\t\t\t\t\t\tlatency_ms: 0,\n\t\t\t\t\t\t\tmethod: method\n\t\t\t\t\t\t});\n\t\t\n\t\t\t\t\t\tif (method !== 'reportBuilderGetResults' && method !== 'reportBuilderGetDistinctValue' && method !== 'reportBuilderBuildTree' && method !== 'generatePDF' && method !== 'getWOOfflineData' && method !== 'countQuery' && method !== 'countWithQuery' && method !== 'countCollectionWithQuery' && method !== 'find' && method !== 'findOne' && method !== 'findWithOptions' && method !== 'getDrivers' && method !== 'processAirdropDistribution') {\n\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(data)) < 200000 ? JSON.stringify(data, null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\t\troute: messageRoute\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\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: 'ACK'\n\t\t\t\t\t\t};\n\t\t\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tws.send(JSON.stringify(serverRes), (error) => {\n\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\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\n\t\t\t\t\t\tif (this._methodManager._methods[method]) {\n\t\t\t\t\t\t\tthis._methodManager.callMethod(methodLatencyId, ws, messageDate, messageId, method, ...data);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconsole.log('Could not find method: ' + method);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (type === 'methodResponse') {\n\t\t\t\t\t\tlet method = data.shift();\n\t\t\n\t\t\t\t\t\tMethodResponses.findOne({$and: [\n\t\t\t\t\t\t\t{id_user: ws['id_user']}, \n\t\t\t\t\t\t\t{message_id: messageId},\n\t\t\t\t\t\t\t{method: method},\n\t\t\t\t\t\t\t{date: messageDate}\n\t\t\t\t\t\t]}).then(res => {\n\t\t\t\t\t\t\tif (res) {\n\t\t\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\t\t\tws.send(JSON.stringify(res.response), (error) => {\n\t\t\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, err => {});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis._msgQueueRunning = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}, 25);\n\t}\n\n\tpublic unsubscribeWS(ws: WebSocket) {\n\t\tif (this._subscriptionManager.getEnableDebug()) {\n\t\t\tconsole.log(new Date(), 'Server App', 'Unsub WS', ws['user'], ws['id_socket']);\n\t\t}\n\t\tthis._subscriptionManager.unsubscribeAll(ws);\n\t\tws.removeAllListeners();\n\t\tws = null;\n\t}\n\n\tpublic getApp() {\n\t\treturn this._app;\n\t}\n\n\tpublic getServerConfig() {\n\t\treturn this._serverConfig;\n\t}\n}"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var __awaiter=this&&this.__awaiter||function(e,
|
|
1
|
+
"use strict";var __awaiter=this&&this.__awaiter||function(e,l,a,r){return new(a=a||Promise)(function(t,o){function fulfilled(e){try{step(r.next(e))}catch(e){o(e)}}function rejected(e){try{step(r.throw(e))}catch(e){o(e)}}function step(e){var o;e.done?t(e.value):((o=e.value)instanceof a?o:new a(function(e){e(o)})).then(fulfilled,rejected)}step((r=r.apply(e,l||[])).next())})},__generator=this&&this.__generator||function(l,a){var r,u,n,i={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]},c={next:verb(0),throw:verb(1),return:verb(2)};return"function"==typeof Symbol&&(c[Symbol.iterator]=function(){return this}),c;function verb(t){return function(e){var o=[t,e];if(r)throw new TypeError("Generator is already executing.");for(;i=c&&o[c=0]?0:i;)try{if(r=1,u&&(n=2&o[0]?u.return:o[0]?u.throw||((n=u.return)&&n.call(u),0):u.next)&&!(n=n.call(u,o[1])).done)return n;switch(u=0,(o=n?[2&o[0],n.value]:o)[0]){case 0:case 1:n=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,u=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(n=0<(n=i.trys).length&&n[n.length-1])&&(6===o[0]||2===o[0])){i=0;continue}if(3===o[0]&&(!n||o[1]>n[0]&&o[1]<n[3]))i.label=o[1];else if(6===o[0]&&i.label<n[1])i.label=n[1],n=o;else{if(!(n&&i.label<n[2])){n[2]&&i.ops.pop(),i.trys.pop();continue}i.label=n[2],i.ops.push(o)}}o=a.call(l,i)}catch(e){o=[6,e],u=0}finally{r=n=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}}},index_1=(Object.defineProperty(exports,"__esModule",{value:!0}),exports.mongoCommand=exports.getLeafFormatTypes=exports.getLeafValueTypes=exports.buildTree=exports.getReportLookupSchemas=void 0,require("../index")),common_1=require("./common");function getReportLookupSchemas(e){var t=[],l=(t.push({collection_name:e,tree:index_1.ResolveIOServer.getMongoManager().collection(e).rbSchema,is_root:!0}),index_1.ResolveIOServer.getMongoManager().collection(e).rbSchema);return Object.keys(l).forEach(function(e){var o;l[e].lookup_collection&&(o=l[e].lookup_collection,e=index_1.ResolveIOServer.getMongoManager().collection(o),t.filter(function(e){return e.collection_name===o}).length||t.push({collection_name:o,tree:e.rbSchema,is_root:!1}))}),t}function buildTree(a,r,u){var n=[];return Object.keys(r).filter(function(e){return"_id"!==e&&"id"!==e&&"__v"!==e}).forEach(function(t){var e,l;u&&r[t].lookup_collection||(1===(e=t.split(".")).length?("String"===r[t].rbType||"Number"===r[t].rbType||"Boolean"===r[t].rbType||"Date"===r[t].rbType?n.push({collection_name:a,columnName:(0,common_1.toTitleCase)(t.replace(/\_/g," ")),fieldName:t,fieldType:r[t].rbType,fieldTypeName:"String"===r[t].rbType?"Text":"Boolean"===r[t].rbType?"T/F":r[t].rbType,distinctFieldValues:[],fieldPath:u?u.lookup_as+".$."+t:t,fieldPathName:u?(0,common_1.toTitleCase)(u.lookup_as.replace(/\.\$\./g," (List) -> ").replace(/\./g," (Group) -> "))+" (List) -> "+(0,common_1.toTitleCase)(t.replace(/\.\$\./g," (List) -> ").replace(/\./g," (Group) -> ")):(0,common_1.toTitleCase)(t.replace(/\.\$\./g," (List) -> ").replace(/\./g," (Group) -> ")),lookup_collection:u?u.lookup_collection:r[t].lookup_collection||"",lookup_local_key:u?u.lookup_local_key:r[t].lookup_collection?r[t].local_key:"",lookup_foreign_key:u?u.lookup_foreign_key:r[t].lookup_collection?r[t].lookup_key:"",lookup_as:u?u.lookup_as:r[t].lookup_collection?r[t].lookup_as:"",text:(0,common_1.toTitleCase)(t.replace(/\_/g," ")),value:t,isLeaf:!0,isActive:!1,isSelected:!1,depth:0,leafValueType:"",leafValueTypes:getLeafValueTypes(r[t],t),leafFormatType:"",leafFormatTypes:getLeafFormatTypes(r[t],t)}):n.push({collection_name:a,columnName:(0,common_1.toTitleCase)(t.replace(/\_/g," ")),fieldName:t,fieldType:r[t].lookup_collection?"Lookup":r[t].rbType,fieldTypeName:r[t].lookup_collection?"Lookup":"Array"===r[t].rbType?"List":"Group",distinctFieldValues:[],fieldPath:u?u.lookup_as+".$."+t:t,fieldPathName:u?(0,common_1.toTitleCase)(u.lookup_as.replace(/\.\$\./g," (List) -> ").replace(/\./g," (Group) -> "))+" (List) -> "+(0,common_1.toTitleCase)(t.replace(/\.\$\./g," (List) -> ").replace(/\./g," (Group) -> ")):(0,common_1.toTitleCase)(t.replace(/\.\$\./g," (List) -> ").replace(/\./g," (Group) -> ")),lookup_collection:u?u.lookup_collection:r[t].lookup_collection||"",lookup_local_key:u?u.lookup_local_key:r[t].lookup_collection?r[t].local_key:"",lookup_foreign_key:u?u.lookup_foreign_key:r[t].lookup_collection?r[t].lookup_key:"",lookup_as:u?u.lookup_as:r[t].lookup_collection?r[t].lookup_as:"",text:(0,common_1.toTitleCase)(t.replace(/\_/g," ")),value:t,isLeaf:!1,isActive:!1,isSelected:!1,depth:0,leafValueType:"",leafFormatType:"",children:[]}),n=n.sort(function(e,o){return e.fieldName.localeCompare(o.fieldName)})):(l=null,e.forEach(function(o,e){l?l.children.filter(function(e){return e.fieldName===o})[0]?l=l.children.filter(function(e){return e.fieldName===o})[0]:("String"===r[t].rbType||"Number"===r[t].rbType||"Boolean"===r[t].rbType||"Date"===r[t].rbType?l.children.push({collection_name:a,columnName:(0,common_1.toTitleCase)(t.replace(/\_/g," ")),fieldName:o,fieldType:r[t].rbType,fieldTypeName:"String"===r[t].rbType?"Text":"Boolean"===r[t].rbType?"T/F":r[t].rbType,distinctFieldValues:[],fieldPath:u?u.lookup_as+".$."+t:t,fieldPathName:u?(0,common_1.toTitleCase)(u.lookup_as.replace(/\.\$\./g," (List) -> ").replace(/\./g," (Group) -> "))+" (List) -> "+(0,common_1.toTitleCase)(t.replace(/\.\$\./g," (List) -> ").replace(/\./g," (Group) -> ")):(0,common_1.toTitleCase)(t.replace(/\.\$\./g," (List) -> ").replace(/\./g," (Group) -> ")),lookup_collection:u?u.lookup_collection:r[t].lookup_collection||"",lookup_local_key:u?u.lookup_local_key:r[t].lookup_collection?r[t].local_key:"",lookup_foreign_key:u?u.lookup_foreign_key:r[t].lookup_collection?r[t].lookup_key:"",lookup_as:u?u.lookup_as:r[t].lookup_collection?r[t].lookup_as:"",text:(0,common_1.toTitleCase)(o.replace(/\_/g," ")),value:o,isLeaf:!0,isActive:!1,isSelected:!1,depth:e,leafValueType:"",leafValueTypes:getLeafValueTypes(r[t],t),leafFormatType:"",leafFormatTypes:getLeafFormatTypes(r[t],t)}):l.children.push({collection_name:a,columnName:(0,common_1.toTitleCase)(t.replace(/\_/g," ")),fieldName:o,fieldType:r[t].lookup_collection?"Lookup":r[t].rbType,fieldTypeName:r[t].lookup_collection?"Lookup":"Array"===r[t].rbType?"List":"Group",distinctFieldValues:[],fieldPath:u?u.lookup_as+".$."+t:t,fieldPathName:u?(0,common_1.toTitleCase)(u.lookup_as.replace(/\.\$\./g," (List) -> ").replace(/\./g," (Group) -> "))+" (List) -> "+(0,common_1.toTitleCase)(t.replace(/\.\$\./g," (List) -> ").replace(/\./g," (Group) -> ")):(0,common_1.toTitleCase)(t.replace(/\.\$\./g," (List) -> ").replace(/\./g," (Group) -> ")),lookup_collection:u?u.lookup_collection:r[t].lookup_collection||"",lookup_local_key:u?u.lookup_local_key:r[t].lookup_collection?r[t].local_key:"",lookup_foreign_key:u?u.lookup_foreign_key:r[t].lookup_collection?r[t].lookup_key:"",lookup_as:u?u.lookup_as:r[t].lookup_collection?r[t].lookup_as:"",text:(0,common_1.toTitleCase)(o.replace(/\_/g," ")),value:o,isLeaf:!1,isActive:!1,isSelected:!1,depth:e,leafValueType:"",leafFormatType:"",children:[]}),l.children=l.children.sort(function(e,o){return e.fieldName.localeCompare(o.fieldName)})):l=n.filter(function(e){return e.fieldName===o})[0]})))}),n}function getLeafValueTypes(e,o){var t=[];return"String"===e.rbType?t=[{text:"As Value",value:"Value"},{text:"Unique",value:"Unique"},{text:"As Count",value:"Count"},{text:"First",value:"First"},{text:"Last",value:"Last"}]:"Number"===e.rbType?t=[{text:"As Value",value:"Value"},{text:"Unique",value:"Unique"},{text:"As Average",value:"Average"},{text:"As Count",value:"Count"},{text:"As Sum",value:"Sum"},{text:"Minimum",value:"Minimum"},{text:"Maximum",value:"Maximum"},{text:"First",value:"First"},{text:"Last",value:"Last"}]:"Boolean"===e.rbType?t=[{text:"As Value",value:"Value"},{text:"Unique",value:"Unique"},{text:"As Count",value:"Count"},{text:"First",value:"First"},{text:"Last",value:"Last"}]:"Date"===e.rbType&&(t=[{text:"As Value",value:"Value"},{text:"Unique",value:"Unique"},{text:"As Count",value:"Count"},{text:"Minimum",value:"Minimum"},{text:"Maximum",value:"Maximum"},{text:"First",value:"First"},{text:"Last",value:"Last"}]),t}function getLeafFormatTypes(e,o){var t=[];return"String"===e.rbType?t=[{text:"As Text",value:"String"},{text:"As Number",value:"Number"}]:"Number"===e.rbType?t=[{text:"As Number",value:"Number"},{text:"As Currency",value:"Currency"},{text:"As Text",value:"String"}]:"Boolean"===e.rbType?t=[{text:"As Number",value:"Number"},{text:"As Boolean (True/False)",value:"Boolean"},{text:"As Text (Yes/No)",value:"String"},{text:"As Number (1/0)",value:"Boolean_Number"}]:"Date"===e.rbType&&(t=[{text:"As Number",value:"Number"},{text:"As Date (Short Format)",value:"Date"},{text:"As Time (Short Format)",value:"Time"},{text:"As Date/Time (Short Format)",value:"DateTime"},{text:"As Date (Long Format)",value:"Date_long"},{text:"As Date/Time (Long Format)",value:"DateTime_long"},{text:"As Timestamp (MS since 1970)",value:"Timestamp"}]),t}function mongoCommand(l,a,r){return __awaiter(this,void 0,void 0,function(){var o,t;return __generator(this,function(e){switch(e.label){case 0:return(e.trys.push([0,6,,7]),"count"!==l)?[3,2]:((t={count:a,query:{}}).query[r]={$ne:null},[4,index_1.ResolveIOServer.getMainDB().command(t)]);case 1:return o=e.sent(),[3,5];case 2:return"distinct"!==l?[3,4]:(t={distinct:a,query:{},key:r},[4,index_1.ResolveIOServer.getMainDB().command(t)]);case 3:return o=e.sent(),[3,5];case 4:e.label=5;case 5:return[3,7];case 6:return e.sent(),[2,-1];case 7:return o?[2,o.values]:[2]}})})}exports.getReportLookupSchemas=getReportLookupSchemas,exports.buildTree=buildTree,exports.getLeafValueTypes=getLeafValueTypes,exports.getLeafFormatTypes=getLeafFormatTypes,exports.mongoCommand=mongoCommand;
|
|
2
2
|
//# sourceMappingURL=schema-report-builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/util/schema-report-builder.ts"],"names":["index_1","require","common_1","getReportLookupSchemas","collection_root","lookupTrees","schemaObj","push","collection_name","tree","ResolveIOServer","getMongoManager","collection","is_root","Object","keys","forEach","field","collectionName_1","lookup_collection","collectionModel","filter","a","length","buildTree","current_root","schemaTree","lookup","res","key","treeItemSplit","child_1","split","rbType","columnName","toTitleCase","replace","fieldName","fieldType","fieldTypeName","distinctFieldValues","fieldPath","lookup_as","fieldPathName","lookup_local_key","local_key","lookup_foreign_key","lookup_key","text","value","isLeaf","isActive","isSelected","depth","leafValueType","leafValueTypes","getLeafValueTypes","leafFormatType","leafFormatTypes","getLeafFormatTypes","children","sort","b","localeCompare","layer","index","leafTypes","mongoCommand","commandstr","obj","count","query","$ne","getMainDB","command","tmpObj","_a","sent","distinct","values","exports"],"mappings":"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","file":"schema-report-builder.js","sourcesContent":["import { ResolveIOServer } from '../index';\nimport { CollectionTree } from '../models/report-builder.model';\nimport { toTitleCase } from './common';\n\nexport function getReportLookupSchemas(collection_root: string) {\n\tlet lookupTrees: CollectionTree[] = [];\n\tlookupTrees.push({ collection_name: collection_root, tree: ResolveIOServer.getMongoManager().collection(collection_root)['rbSchema'], is_root: true });\n\tlet schemaObj = ResolveIOServer.getMongoManager().collection(collection_root)['rbSchema'];\n\tlet modelKeys = Object.keys(schemaObj);\n\tmodelKeys.forEach(field => {\n\t\tif (schemaObj[field].lookup_collection) {\n\t\t\tlet collectionName = schemaObj[field].lookup_collection;\n\t\t\tlet collectionModel = ResolveIOServer.getMongoManager().collection(collectionName);\n\n\t\t\tif (!lookupTrees.filter(a => a.collection_name === collectionName).length) {\n\t\t\t\tlookupTrees.push({ collection_name: collectionName, tree: collectionModel['rbSchema'], is_root: false });\n\t\t\t}\n\t\t}\n\t});\n\n\treturn lookupTrees;\n}\n\nexport function buildTree(current_root, schemaTree, lookup?) {\n\tlet res = [];\n\n\tObject.keys(schemaTree).filter(a => a !== '_id' && a !== 'id' && a !== '__v').forEach(key => {\n\t// Object.keys(schemaTree).filter(a => a !== '__v').forEach(key => {\n\t\tif (!lookup || (lookup && !schemaTree[key].lookup_collection)) {\n\t\t\tlet treeItemSplit = key.split('.');\n\t\t\n\t\t\t// debugger;\n\n\t\t\tif (treeItemSplit.length === 1) {\n\t\t\t\tif (schemaTree[key].rbType === 'String' || schemaTree[key].rbType === 'Number' || schemaTree[key].rbType === 'Boolean' || schemaTree[key].rbType === 'Date') {\n\t\t\t\t\tres.push({\n\t\t\t\t\t\tcollection_name: current_root,\n\t\t\t\t\t\tcolumnName: toTitleCase(key.replace(/\\_/g, ' ')),\n\t\t\t\t\t\tfieldName: key,\n\t\t\t\t\t\tfieldType: schemaTree[key].rbType,\n\t\t\t\t\t\tfieldTypeName: schemaTree[key].rbType === 'String' ? 'Text' : (schemaTree[key].rbType === 'Boolean' ? 'T/F' : schemaTree[key].rbType),\n\t\t\t\t\t\tdistinctFieldValues: [],\n\t\t\t\t\t\tfieldPath: lookup ? lookup.lookup_as + '.$.' + key : key,\n\t\t\t\t\t\tfieldPathName: lookup ? (toTitleCase(lookup.lookup_as.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> '))) + ' (List) -> ' + (toTitleCase(key.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> '))) : toTitleCase(key.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> ')),\n\t\t\t\t\t\tlookup_collection: lookup ? lookup.lookup_collection : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_collection : ''),\n\t\t\t\t\t\tlookup_local_key: lookup ? lookup.lookup_local_key : (schemaTree[key].lookup_collection ? schemaTree[key].local_key : ''),\n\t\t\t\t\t\tlookup_foreign_key: lookup ? lookup.lookup_foreign_key : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_key : ''),\n\t\t\t\t\t\tlookup_as: lookup ? lookup.lookup_as : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_as : ''),\n\t\t\t\t\t\ttext: toTitleCase(key.replace(/\\_/g, ' ')),\n\t\t\t\t\t\tvalue: key,\n\t\t\t\t\t\tisLeaf: true,\n\t\t\t\t\t\tisActive: false,\n\t\t\t\t\t\tisSelected: false,\n\t\t\t\t\t\tdepth: 0,\n\t\t\t\t\t\tleafValueType: '',\n\t\t\t\t\t\tleafValueTypes: getLeafValueTypes(schemaTree[key], key),\n\t\t\t\t\t\tleafFormatType: '',\n\t\t\t\t\t\tleafFormatTypes: getLeafFormatTypes(schemaTree[key], key)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tres.push({\n\t\t\t\t\t\tcollection_name: current_root,\n\t\t\t\t\t\tcolumnName: toTitleCase(key.replace(/\\_/g, ' ')),\n\t\t\t\t\t\tfieldName: key,\n\t\t\t\t\t\tfieldType: schemaTree[key].lookup_collection ? 'Lookup' : schemaTree[key].rbType,\n\t\t\t\t\t\tfieldTypeName: schemaTree[key].lookup_collection ? 'Lookup' : (schemaTree[key].rbType === 'Array' ? 'List' : 'Group'),\n\t\t\t\t\t\tdistinctFieldValues: [],\n\t\t\t\t\t\tfieldPath: lookup ? lookup.lookup_as + '.$.' + key : key,\n\t\t\t\t\t\tfieldPathName: lookup ? (toTitleCase(lookup.lookup_as.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> '))) + ' (List) -> ' + (toTitleCase(key.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> '))) : toTitleCase(key.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> ')),\n\t\t\t\t\t\tlookup_collection: lookup ? lookup.lookup_collection : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_collection : ''),\n\t\t\t\t\t\tlookup_local_key: lookup ? lookup.lookup_local_key : (schemaTree[key].lookup_collection ? schemaTree[key].local_key : ''),\n\t\t\t\t\t\tlookup_foreign_key: lookup ? lookup.lookup_foreign_key : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_key : ''),\n\t\t\t\t\t\tlookup_as: lookup ? lookup.lookup_as : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_as : ''),\n\t\t\t\t\t\ttext: toTitleCase(key.replace(/\\_/g, ' ')),\n\t\t\t\t\t\tvalue: key,\n\t\t\t\t\t\tisLeaf: false,\n\t\t\t\t\t\tisActive: false,\n\t\t\t\t\t\tisSelected: false,\n\t\t\t\t\t\tdepth: 0,\n\t\t\t\t\t\tleafValueType: '',\n\t\t\t\t\t\tleafFormatType: '',\n\t\t\t\t\t\tchildren: []\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tres = res.sort((a, b) => a.fieldName.localeCompare(b.fieldName));\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet child = null;\n\n\t\t\t\ttreeItemSplit.forEach((layer, index) => {\n\t\t\t\t\tif (!child) {\n\t\t\t\t\t\tchild = res.filter(a => a.fieldName === layer)[0];\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (child.children.filter(a => a.fieldName === layer)[0]) {\n\t\t\t\t\t\t\tchild = child.children.filter(a => a.fieldName === layer)[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (schemaTree[key].rbType === 'String' || schemaTree[key].rbType === 'Number' || schemaTree[key].rbType === 'Boolean' || schemaTree[key].rbType === 'Date') {\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tchild.children.push({\n\t\t\t\t\t\t\t\t\tcollection_name: current_root,\n\t\t\t\t\t\t\t\t\tcolumnName: toTitleCase(key.replace(/\\_/g, ' ')),\n\t\t\t\t\t\t\t\t\tfieldName: layer,\n\t\t\t\t\t\t\t\t\tfieldType: schemaTree[key].rbType,\n\t\t\t\t\t\t\t\t\tfieldTypeName: schemaTree[key].rbType === 'String' ? 'Text' : (schemaTree[key].rbType === 'Boolean' ? 'T/F' : schemaTree[key].rbType),\n\t\t\t\t\t\t\t\t\tdistinctFieldValues: [],\n\t\t\t\t\t\t\t\t\tfieldPath: lookup ? lookup.lookup_as + '.$.' + key : key,\n\t\t\t\t\t\t\t\t\tfieldPathName: lookup ? (toTitleCase(lookup.lookup_as.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> '))) + ' (List) -> ' + (toTitleCase(key.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> '))) : toTitleCase(key.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> ')),\n\t\t\t\t\t\t\t\t\tlookup_collection: lookup ? lookup.lookup_collection : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_collection : ''),\n\t\t\t\t\t\t\t\t\tlookup_local_key: lookup ? lookup.lookup_local_key : (schemaTree[key].lookup_collection ? schemaTree[key].local_key : ''),\n\t\t\t\t\t\t\t\t\tlookup_foreign_key: lookup ? lookup.lookup_foreign_key : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_key : ''),\n\t\t\t\t\t\t\t\t\tlookup_as: lookup ? lookup.lookup_as : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_as : ''),\n\t\t\t\t\t\t\t\t\ttext: toTitleCase(layer.replace(/\\_/g, ' ')),\n\t\t\t\t\t\t\t\t\tvalue: layer,\n\t\t\t\t\t\t\t\t\tisLeaf: true,\n\t\t\t\t\t\t\t\t\tisActive: false,\n\t\t\t\t\t\t\t\t\tisSelected: false,\n\t\t\t\t\t\t\t\t\tdepth: index,\n\t\t\t\t\t\t\t\t\tleafValueType: '',\n\t\t\t\t\t\t\t\t\tleafValueTypes: getLeafValueTypes(schemaTree[key], key),\n\t\t\t\t\t\t\t\t\tleafFormatType: '',\n\t\t\t\t\t\t\t\t\tleafFormatTypes: getLeafFormatTypes(schemaTree[key], key)\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tchild.children.push({\n\t\t\t\t\t\t\t\t\tcollection_name: current_root,\n\t\t\t\t\t\t\t\t\tcolumnName: toTitleCase(key.replace(/\\_/g, ' ')),\n\t\t\t\t\t\t\t\t\tfieldName: layer,\n\t\t\t\t\t\t\t\t\tfieldType: schemaTree[key].lookup_collection ? 'Lookup' : schemaTree[key].rbType,\n\t\t\t\t\t\t\t\t\tfieldTypeName: schemaTree[key].lookup_collection ? 'Lookup' : (schemaTree[key].rbType === 'Array' ? 'List' : 'Group'),\n\t\t\t\t\t\t\t\t\tdistinctFieldValues: [],\n\t\t\t\t\t\t\t\t\tfieldPath: lookup ? lookup.lookup_as + '.$.' + key : key,\n\t\t\t\t\t\t\t\t\tfieldPathName: lookup ? (toTitleCase(lookup.lookup_as.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> '))) + ' (List) -> ' + (toTitleCase(key.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> '))) : toTitleCase(key.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> ')),\n\t\t\t\t\t\t\t\t\tlookup_collection: lookup ? lookup.lookup_collection : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_collection : ''),\n\t\t\t\t\t\t\t\t\tlookup_local_key: lookup ? lookup.lookup_local_key : (schemaTree[key].lookup_collection ? schemaTree[key].local_key : ''),\n\t\t\t\t\t\t\t\t\tlookup_foreign_key: lookup ? lookup.lookup_foreign_key : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_key : ''),\n\t\t\t\t\t\t\t\t\tlookup_as: lookup ? lookup.lookup_as : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_as : ''),\n\t\t\t\t\t\t\t\t\ttext: toTitleCase(layer.replace(/\\_/g, ' ')),\n\t\t\t\t\t\t\t\t\tvalue: layer,\n\t\t\t\t\t\t\t\t\tisLeaf: false,\n\t\t\t\t\t\t\t\t\tisActive: false,\n\t\t\t\t\t\t\t\t\tisSelected: false,\n\t\t\t\t\t\t\t\t\tdepth: index,\n\t\t\t\t\t\t\t\t\tleafValueType: '',\n\t\t\t\t\t\t\t\t\tleafFormatType: '',\n\t\t\t\t\t\t\t\t\tchildren: []\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tchild.children = child.children.sort((a, b) => a.fieldName.localeCompare(b.fieldName));\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});\n\n\treturn res;\n}\n\nexport function getLeafValueTypes(schemaTree, fieldPath) {\n\tlet leafTypes = [];\n\n\tif (schemaTree.rbType === 'String') {\n\t\tleafTypes = [\n\t\t\t{\n\t\t\t\ttext: 'As Value',\n\t\t\t\tvalue: 'Value'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Unique',\n\t\t\t\tvalue: 'Unique'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Count',\n\t\t\t\tvalue: 'Count'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'First',\n\t\t\t\tvalue: 'First'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Last',\n\t\t\t\tvalue: 'Last'\n\t\t\t}\n\t\t];\n\t}\n\telse if (schemaTree.rbType === 'Number') {\n\t\tleafTypes = [\n\t\t\t{\n\t\t\t\ttext: 'As Value',\n\t\t\t\tvalue: 'Value'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Unique',\n\t\t\t\tvalue: 'Unique'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Average',\n\t\t\t\tvalue: 'Average'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Count',\n\t\t\t\tvalue: 'Count'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Sum',\n\t\t\t\tvalue: 'Sum'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Minimum',\n\t\t\t\tvalue: 'Minimum'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Maximum',\n\t\t\t\tvalue: 'Maximum'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'First',\n\t\t\t\tvalue: 'First'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Last',\n\t\t\t\tvalue: 'Last'\n\t\t\t}\n\t\t];\n\t}\n\telse if (schemaTree.rbType === 'Boolean') {\n\t\tleafTypes = [\n\t\t\t{\n\t\t\t\ttext: 'As Value',\n\t\t\t\tvalue: 'Value'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Unique',\n\t\t\t\tvalue: 'Unique'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Count',\n\t\t\t\tvalue: 'Count'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'First',\n\t\t\t\tvalue: 'First'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Last',\n\t\t\t\tvalue: 'Last'\n\t\t\t}\n\t\t];\n\t}\n\telse if (schemaTree.rbType === 'Date') {\n\t\tleafTypes = [\n\t\t\t{\n\t\t\t\ttext: 'As Value',\n\t\t\t\tvalue: 'Value'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Unique',\n\t\t\t\tvalue: 'Unique'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Count',\n\t\t\t\tvalue: 'Count'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Minimum',\n\t\t\t\tvalue: 'Minimum'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Maximum',\n\t\t\t\tvalue: 'Maximum'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'First',\n\t\t\t\tvalue: 'First'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Last',\n\t\t\t\tvalue: 'Last'\n\t\t\t}\n\t\t];\n\t}\n\treturn leafTypes;\n}\n\nexport function getLeafFormatTypes(schemaTree, fieldPath) {\n\tlet leafTypes = [];\n\n\tif (schemaTree.rbType === 'String') {\n\t\tleafTypes = [\n\t\t\t{\n\t\t\t\ttext: 'As Text',\n\t\t\t\tvalue: 'String'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Number',\n\t\t\t\tvalue: 'Number'\n\t\t\t}\n\t\t];\n\t}\n\telse if (schemaTree.rbType === 'Number') {\n\t\tleafTypes = [\n\t\t\t{\n\t\t\t\ttext: 'As Number',\n\t\t\t\tvalue: 'Number'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Currency',\n\t\t\t\tvalue: 'Currency'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Text',\n\t\t\t\tvalue: 'String'\n\t\t\t}\n\t\t];\n\t}\n\telse if (schemaTree.rbType === 'Boolean') {\n\t\tleafTypes = [\n\t\t\t{\n\t\t\t\ttext: 'As Number',\n\t\t\t\tvalue: 'Number'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Boolean (True/False)',\n\t\t\t\tvalue: 'Boolean'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Text (Yes/No)',\n\t\t\t\tvalue: 'String'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Number (1/0)',\n\t\t\t\tvalue: 'Boolean_Number'\n\t\t\t}\n\t\t];\n\t}\n\telse if (schemaTree.rbType === 'Date') {\n\t\tleafTypes = [\n\t\t\t{\n\t\t\t\ttext: 'As Number',\n\t\t\t\tvalue: 'Number'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Date (Short Format)',\n\t\t\t\tvalue: 'Date'\n\t\t\t}, \n\t\t\t{\n\t\t\t\ttext: 'As Time (Short Format)',\n\t\t\t\tvalue: 'Time'\n\t\t\t}, \n\t\t\t{\n\t\t\t\ttext: 'As Date/Time (Short Format)',\n\t\t\t\tvalue: 'DateTime'\n\t\t\t}, \n\t\t\t{\n\t\t\t\ttext: 'As Date (Long Format)',\n\t\t\t\tvalue: 'Date_long'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Date/Time (Long Format)',\n\t\t\t\tvalue: 'DateTime_long'\n\t\t\t}, \n\t\t\t{\n\t\t\t\ttext: 'As Timestamp (MS since 1970)',\n\t\t\t\tvalue: 'Timestamp'\n\t\t\t}\n\t\t];\n\t}\n\treturn leafTypes;\n}\n\n\n\n\n\nexport async function mongoCommand(commandstr: string, collection: string, field?: any) {\n\tlet tmpObj;\n\ttry {\n\t\t// Count the number of non-empty fields in a given collection:\n\t\tif (commandstr === 'count') {\n\t\t\tlet obj = {\n\t\t\t\tcount: collection,\n\t\t\t\tquery: {}\n\t\t\t};\n\t\t\tobj.query[field] = {$ne: null};\n\t\t\ttmpObj = await ResolveIOServer.getMainDB().command(obj);\n\t\t}\n\t\t// Get all distinct values in a given field.\n\t\telse if (commandstr === 'distinct') {\n\t\t\tlet obj = {\n\t\t\t\tdistinct: collection,\n\t\t\t\tquery: {},\n\t\t\t\tkey: field,\n\t\t\t};\n\t\t\ttmpObj = await ResolveIOServer.getMainDB().command(obj);\n\t\t}\n\t\telse if (commandstr === 'listIndexes') {\n\t\t\t// tmpObj = await this.mainDb.db[collection].getIndexes();\n\t\t\t// let obj = { 'listIndexes': collection };\n\t\t\t// tmpObj = await this.mainDb.db.getIndexes(obj);\n\t\t}\n\t} catch (err) {\n\t\t// console.log('----------- mongoCommand err: ', err);\n\t\treturn -1;\n\t}\n\tif (tmpObj) {\n\t\treturn tmpObj.values;\n\t}\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../src/util/schema-report-builder.ts"],"names":["index_1","require","common_1","getReportLookupSchemas","collection_root","lookupTrees","schemaObj","push","collection_name","tree","ResolveIOServer","getMongoManager","collection","is_root","Object","keys","forEach","field","collectionName_1","lookup_collection","collectionModel","filter","a","length","buildTree","current_root","schemaTree","lookup","res","key","treeItemSplit","child_1","split","rbType","columnName","toTitleCase","replace","fieldName","fieldType","fieldTypeName","distinctFieldValues","fieldPath","lookup_as","fieldPathName","lookup_local_key","local_key","lookup_foreign_key","lookup_key","text","value","isLeaf","isActive","isSelected","depth","leafValueType","leafValueTypes","getLeafValueTypes","leafFormatType","leafFormatTypes","getLeafFormatTypes","children","sort","b","localeCompare","layer","index","leafTypes","mongoCommand","commandstr","obj","count","query","$ne","getMainDB","command","tmpObj","_a","sent","distinct","values","exports"],"mappings":"k8CAAAA,S,yLAAAC,QAAA,UAAA,GAEAC,SAAAD,QAAA,UAAA,EAEA,SAAgBE,uBAAuBC,GACtC,IAAIC,EAAgC,GAEhCC,GADJD,EAAYE,KAAK,CAAEC,gBAAiBJ,EAAiBK,KAAMT,QAAAU,gBAAgBC,gBAAe,EAAGC,WAAWR,CAAe,EAAY,SAAGS,QAAS,CAAA,CAAI,CAAE,EACrIb,QAAAU,gBAAgBC,gBAAe,EAAGC,WAAWR,CAAe,EAAY,UAaxF,OAZgBU,OAAOC,KAAKT,CAAS,EAC3BU,QAAQ,SAAAC,GACjB,IACKC,EADDZ,EAAUW,GAAOE,oBAChBD,EAAiBZ,EAAUW,GAAOE,kBAClCC,EAAkBpB,QAAAU,gBAAgBC,gBAAe,EAAGC,WAAWM,CAAc,EAE5Eb,EAAYgB,OAAO,SAAAC,GAAK,OAAAA,EAAEd,kBAAoBU,CAAtB,CAAoC,EAAEK,QAClElB,EAAYE,KAAK,CAAEC,gBAAiBU,EAAgBT,KAAMW,EAA0B,SAAGP,QAAS,CAAA,CAAK,CAAE,EAG1G,CAAC,EAEMR,CACR,CAEA,SAAgBmB,UAAUC,EAAcC,EAAYC,GACnD,IAAIC,EAAM,GAwIV,OAtIAd,OAAOC,KAAKW,CAAU,EAAEL,OAAO,SAAAC,GAAK,MAAM,QAANA,GAAqB,OAANA,GAAoB,QAANA,CAA7B,CAAwC,EAAEN,QAAQ,SAAAa,GAErF,IACKC,EA4DCC,EA7DDJ,GAAsBD,EAAWG,GAAKV,oBAKb,KAJzBW,EAAgBD,EAAIG,MAAM,GAAG,GAIfT,QACc,WAA3BG,EAAWG,GAAKI,QAAkD,WAA3BP,EAAWG,GAAKI,QAAkD,YAA3BP,EAAWG,GAAKI,QAAmD,SAA3BP,EAAWG,GAAKI,OACzIL,EAAIrB,KAAK,CACRC,gBAAiBiB,EACjBS,YAAY,EAAAhC,SAAAiC,aAAYN,EAAIO,QAAQ,MAAO,GAAG,CAAC,EAC/CC,UAAWR,EACXS,UAAWZ,EAAWG,GAAKI,OAC3BM,cAA0C,WAA3Bb,EAAWG,GAAKI,OAAsB,OAAqC,YAA3BP,EAAWG,GAAKI,OAAuB,MAAQP,EAAWG,GAAKI,OAC9HO,oBAAqB,GACrBC,UAAWd,EAASA,EAAOe,UAAY,MAAQb,EAAMA,EACrDc,cAAehB,GAAU,EAAAzB,SAAAiC,aAAYR,EAAOe,UAAUN,QAAQ,UAAW,aAAa,EAAEA,QAAQ,MAAO,cAAc,CAAE,EAAI,eAAiB,EAAAlC,SAAAiC,aAAYN,EAAIO,QAAQ,UAAW,aAAa,EAAEA,QAAQ,MAAO,cAAc,CAAE,GAAI,EAAAlC,SAAAiC,aAAYN,EAAIO,QAAQ,UAAW,aAAa,EAAEA,QAAQ,MAAO,cAAc,CAAC,EACjTjB,kBAAmBQ,EAASA,EAAOR,kBAAqBO,EAAWG,GAAKV,mBAAwD,GAChIyB,iBAAkBjB,EAASA,EAAOiB,iBAAoBlB,EAAWG,GAAKV,kBAAoBO,EAAWG,GAAKgB,UAAY,GACtHC,mBAAoBnB,EAASA,EAAOmB,mBAAsBpB,EAAWG,GAAKV,kBAAoBO,EAAWG,GAAKkB,WAAa,GAC3HL,UAAWf,EAASA,EAAOe,UAAahB,EAAWG,GAAKV,kBAAoBO,EAAWG,GAAKa,UAAY,GACxGM,MAAM,EAAA9C,SAAAiC,aAAYN,EAAIO,QAAQ,MAAO,GAAG,CAAC,EACzCa,MAAOpB,EACPqB,OAAQ,CAAA,EACRC,SAAU,CAAA,EACVC,WAAY,CAAA,EACZC,MAAO,EACPC,cAAe,GACfC,eAAgBC,kBAAkB9B,EAAWG,GAAMA,CAAG,EACtD4B,eAAgB,GAChBC,gBAAiBC,mBAAmBjC,EAAWG,GAAMA,CAAG,C,CACxD,EAGDD,EAAIrB,KAAK,CACRC,gBAAiBiB,EACjBS,YAAY,EAAAhC,SAAAiC,aAAYN,EAAIO,QAAQ,MAAO,GAAG,CAAC,EAC/CC,UAAWR,EACXS,UAAWZ,EAAWG,GAAKV,kBAAoB,SAAWO,EAAWG,GAAKI,OAC1EM,cAAeb,EAAWG,GAAKV,kBAAoB,SAAuC,UAA3BO,EAAWG,GAAKI,OAAqB,OAAS,QAC7GO,oBAAqB,GACrBC,UAAWd,EAASA,EAAOe,UAAY,MAAQb,EAAMA,EACrDc,cAAehB,GAAU,EAAAzB,SAAAiC,aAAYR,EAAOe,UAAUN,QAAQ,UAAW,aAAa,EAAEA,QAAQ,MAAO,cAAc,CAAE,EAAI,eAAiB,EAAAlC,SAAAiC,aAAYN,EAAIO,QAAQ,UAAW,aAAa,EAAEA,QAAQ,MAAO,cAAc,CAAE,GAAI,EAAAlC,SAAAiC,aAAYN,EAAIO,QAAQ,UAAW,aAAa,EAAEA,QAAQ,MAAO,cAAc,CAAC,EACjTjB,kBAAmBQ,EAASA,EAAOR,kBAAqBO,EAAWG,GAAKV,mBAAwD,GAChIyB,iBAAkBjB,EAASA,EAAOiB,iBAAoBlB,EAAWG,GAAKV,kBAAoBO,EAAWG,GAAKgB,UAAY,GACtHC,mBAAoBnB,EAASA,EAAOmB,mBAAsBpB,EAAWG,GAAKV,kBAAoBO,EAAWG,GAAKkB,WAAa,GAC3HL,UAAWf,EAASA,EAAOe,UAAahB,EAAWG,GAAKV,kBAAoBO,EAAWG,GAAKa,UAAY,GACxGM,MAAM,EAAA9C,SAAAiC,aAAYN,EAAIO,QAAQ,MAAO,GAAG,CAAC,EACzCa,MAAOpB,EACPqB,OAAQ,CAAA,EACRC,SAAU,CAAA,EACVC,WAAY,CAAA,EACZC,MAAO,EACPC,cAAe,GACfG,eAAgB,GAChBG,SAAU,E,CACV,EAGFhC,EAAMA,EAAIiC,KAAK,SAACvC,EAAGwC,GAAM,OAAAxC,EAAEe,UAAU0B,cAAcD,EAAEzB,SAAS,CAArC,CAAsC,IAG3DN,EAAQ,KAEZD,EAAcd,QAAQ,SAACgD,EAAOC,GACxBlC,EAIAA,EAAM6B,SAASvC,OAAO,SAAAC,GAAK,OAAAA,EAAEe,YAAc2B,CAAhB,CAAqB,EAAE,GACrDjC,EAAQA,EAAM6B,SAASvC,OAAO,SAAAC,GAAK,OAAAA,EAAEe,YAAc2B,CAAhB,CAAqB,EAAE,IAG3B,WAA3BtC,EAAWG,GAAKI,QAAkD,WAA3BP,EAAWG,GAAKI,QAAkD,YAA3BP,EAAWG,GAAKI,QAAmD,SAA3BP,EAAWG,GAAKI,OACzIF,EAAM6B,SAASrD,KAAK,CACnBC,gBAAiBiB,EACjBS,YAAY,EAAAhC,SAAAiC,aAAYN,EAAIO,QAAQ,MAAO,GAAG,CAAC,EAC/CC,UAAW2B,EACX1B,UAAWZ,EAAWG,GAAKI,OAC3BM,cAA0C,WAA3Bb,EAAWG,GAAKI,OAAsB,OAAqC,YAA3BP,EAAWG,GAAKI,OAAuB,MAAQP,EAAWG,GAAKI,OAC9HO,oBAAqB,GACrBC,UAAWd,EAASA,EAAOe,UAAY,MAAQb,EAAMA,EACrDc,cAAehB,GAAU,EAAAzB,SAAAiC,aAAYR,EAAOe,UAAUN,QAAQ,UAAW,aAAa,EAAEA,QAAQ,MAAO,cAAc,CAAE,EAAI,eAAiB,EAAAlC,SAAAiC,aAAYN,EAAIO,QAAQ,UAAW,aAAa,EAAEA,QAAQ,MAAO,cAAc,CAAE,GAAI,EAAAlC,SAAAiC,aAAYN,EAAIO,QAAQ,UAAW,aAAa,EAAEA,QAAQ,MAAO,cAAc,CAAC,EACjTjB,kBAAmBQ,EAASA,EAAOR,kBAAqBO,EAAWG,GAAKV,mBAAwD,GAChIyB,iBAAkBjB,EAASA,EAAOiB,iBAAoBlB,EAAWG,GAAKV,kBAAoBO,EAAWG,GAAKgB,UAAY,GACtHC,mBAAoBnB,EAASA,EAAOmB,mBAAsBpB,EAAWG,GAAKV,kBAAoBO,EAAWG,GAAKkB,WAAa,GAC3HL,UAAWf,EAASA,EAAOe,UAAahB,EAAWG,GAAKV,kBAAoBO,EAAWG,GAAKa,UAAY,GACxGM,MAAM,EAAA9C,SAAAiC,aAAY6B,EAAM5B,QAAQ,MAAO,GAAG,CAAC,EAC3Ca,MAAOe,EACPd,OAAQ,CAAA,EACRC,SAAU,CAAA,EACVC,WAAY,CAAA,EACZC,MAAOY,EACPX,cAAe,GACfC,eAAgBC,kBAAkB9B,EAAWG,GAAMA,CAAG,EACtD4B,eAAgB,GAChBC,gBAAiBC,mBAAmBjC,EAAWG,GAAMA,CAAG,C,CACxD,EAGDE,EAAM6B,SAASrD,KAAK,CACnBC,gBAAiBiB,EACjBS,YAAY,EAAAhC,SAAAiC,aAAYN,EAAIO,QAAQ,MAAO,GAAG,CAAC,EAC/CC,UAAW2B,EACX1B,UAAWZ,EAAWG,GAAKV,kBAAoB,SAAWO,EAAWG,GAAKI,OAC1EM,cAAeb,EAAWG,GAAKV,kBAAoB,SAAuC,UAA3BO,EAAWG,GAAKI,OAAqB,OAAS,QAC7GO,oBAAqB,GACrBC,UAAWd,EAASA,EAAOe,UAAY,MAAQb,EAAMA,EACrDc,cAAehB,GAAU,EAAAzB,SAAAiC,aAAYR,EAAOe,UAAUN,QAAQ,UAAW,aAAa,EAAEA,QAAQ,MAAO,cAAc,CAAE,EAAI,eAAiB,EAAAlC,SAAAiC,aAAYN,EAAIO,QAAQ,UAAW,aAAa,EAAEA,QAAQ,MAAO,cAAc,CAAE,GAAI,EAAAlC,SAAAiC,aAAYN,EAAIO,QAAQ,UAAW,aAAa,EAAEA,QAAQ,MAAO,cAAc,CAAC,EACjTjB,kBAAmBQ,EAASA,EAAOR,kBAAqBO,EAAWG,GAAKV,mBAAwD,GAChIyB,iBAAkBjB,EAASA,EAAOiB,iBAAoBlB,EAAWG,GAAKV,kBAAoBO,EAAWG,GAAKgB,UAAY,GACtHC,mBAAoBnB,EAASA,EAAOmB,mBAAsBpB,EAAWG,GAAKV,kBAAoBO,EAAWG,GAAKkB,WAAa,GAC3HL,UAAWf,EAASA,EAAOe,UAAahB,EAAWG,GAAKV,kBAAoBO,EAAWG,GAAKa,UAAY,GACxGM,MAAM,EAAA9C,SAAAiC,aAAY6B,EAAM5B,QAAQ,MAAO,GAAG,CAAC,EAC3Ca,MAAOe,EACPd,OAAQ,CAAA,EACRC,SAAU,CAAA,EACVC,WAAY,CAAA,EACZC,MAAOY,EACPX,cAAe,GACfG,eAAgB,GAChBG,SAAU,E,CACV,EAGF7B,EAAM6B,SAAW7B,EAAM6B,SAASC,KAAK,SAACvC,EAAGwC,GAAM,OAAAxC,EAAEe,UAAU0B,cAAcD,EAAEzB,SAAS,CAArC,CAAsC,GA3DtFN,EAAQH,EAAIP,OAAO,SAAAC,GAAK,OAAAA,EAAEe,YAAc2B,CAAhB,CAAqB,EAAE,EA8DjD,CAAC,GAGJ,CAAC,EAEMpC,CACR,CAEA,SAAgB4B,kBAAkB9B,EAAYe,GAC7C,IAAIyB,EAAY,GA0HhB,MAxH0B,WAAtBxC,EAAWO,OACdiC,EAAY,CACX,CACClB,KAAM,WACNC,MAAO,O,EAER,CACCD,KAAM,SACNC,MAAO,Q,EAER,CACCD,KAAM,WACNC,MAAO,O,EAER,CACCD,KAAM,QACNC,MAAO,O,EAER,CACCD,KAAM,OACNC,MAAO,M,GAIqB,WAAtBvB,EAAWO,OACnBiC,EAAY,CACX,CACClB,KAAM,WACNC,MAAO,O,EAER,CACCD,KAAM,SACNC,MAAO,Q,EAER,CACCD,KAAM,aACNC,MAAO,S,EAER,CACCD,KAAM,WACNC,MAAO,O,EAER,CACCD,KAAM,SACNC,MAAO,K,EAER,CACCD,KAAM,UACNC,MAAO,S,EAER,CACCD,KAAM,UACNC,MAAO,S,EAER,CACCD,KAAM,QACNC,MAAO,O,EAER,CACCD,KAAM,OACNC,MAAO,M,GAIqB,YAAtBvB,EAAWO,OACnBiC,EAAY,CACX,CACClB,KAAM,WACNC,MAAO,O,EAER,CACCD,KAAM,SACNC,MAAO,Q,EAER,CACCD,KAAM,WACNC,MAAO,O,EAER,CACCD,KAAM,QACNC,MAAO,O,EAER,CACCD,KAAM,OACNC,MAAO,M,GAIqB,SAAtBvB,EAAWO,SACnBiC,EAAY,CACX,CACClB,KAAM,WACNC,MAAO,O,EAER,CACCD,KAAM,SACNC,MAAO,Q,EAER,CACCD,KAAM,WACNC,MAAO,O,EAER,CACCD,KAAM,UACNC,MAAO,S,EAER,CACCD,KAAM,UACNC,MAAO,S,EAER,CACCD,KAAM,QACNC,MAAO,O,EAER,CACCD,KAAM,OACNC,MAAO,M,IAIHiB,CACR,CAEA,SAAgBP,mBAAmBjC,EAAYe,GAC9C,IAAIyB,EAAY,GAkFhB,MAhF0B,WAAtBxC,EAAWO,OACdiC,EAAY,CACX,CACClB,KAAM,UACNC,MAAO,Q,EAER,CACCD,KAAM,YACNC,MAAO,Q,GAIqB,WAAtBvB,EAAWO,OACnBiC,EAAY,CACX,CACClB,KAAM,YACNC,MAAO,Q,EAER,CACCD,KAAM,cACNC,MAAO,U,EAER,CACCD,KAAM,UACNC,MAAO,Q,GAIqB,YAAtBvB,EAAWO,OACnBiC,EAAY,CACX,CACClB,KAAM,YACNC,MAAO,Q,EAER,CACCD,KAAM,0BACNC,MAAO,S,EAER,CACCD,KAAM,mBACNC,MAAO,Q,EAER,CACCD,KAAM,kBACNC,MAAO,gB,GAIqB,SAAtBvB,EAAWO,SACnBiC,EAAY,CACX,CACClB,KAAM,YACNC,MAAO,Q,EAER,CACCD,KAAM,yBACNC,MAAO,M,EAER,CACCD,KAAM,yBACNC,MAAO,M,EAER,CACCD,KAAM,8BACNC,MAAO,U,EAER,CACCD,KAAM,wBACNC,MAAO,W,EAER,CACCD,KAAM,6BACNC,MAAO,e,EAER,CACCD,KAAM,+BACNC,MAAO,W,IAIHiB,CACR,CAMA,SAAsBC,aAAaC,EAAoBxD,EAAoBK,G,+IAItD,UAAfmD,GAAA,CAAA,EAAA,KACCC,EAAM,CACTC,MAAO1D,EACP2D,MAAO,E,GAEJA,MAAMtD,GAAS,CAACuD,IAAK,IAAI,EACpB,CAAA,EAAMxE,QAAAU,gBAAgB+D,UAAS,EAAGC,QAAQL,CAAG,I,cAAtDM,EAASC,EAAAC,KAAA,E,mBAGc,aAAfT,EAAA,CAAA,EAAA,IACJC,EAAM,CACTS,SAAUlE,EACV2D,MAAO,GACP1C,IAAKZ,C,EAEG,CAAA,EAAMjB,QAAAU,gBAAgB+D,UAAS,EAAGC,QAAQL,CAAG,I,cAAtDM,EAASC,EAAAC,KAAA,E,iDASV,O,SAAA,CAAA,EAAO,CAAC,G,OAET,OAAIF,EACH,CAAA,EAAOA,EAAOI,Q,SAtZhBC,QAAA7E,uBAAAA,uBAmBA6E,QAAAxD,UAAAA,UA4IAwD,QAAAxB,kBAAAA,kBA8HAwB,QAAArB,mBAAAA,mBA0FAqB,QAAAb,aAAAA","file":"schema-report-builder.js","sourcesContent":["import { ResolveIOServer } from '../index';\nimport { CollectionTree } from '../models/report-builder.model';\nimport { toTitleCase } from './common';\n\nexport function getReportLookupSchemas(collection_root: string) {\n\tlet lookupTrees: CollectionTree[] = [];\n\tlookupTrees.push({ collection_name: collection_root, tree: ResolveIOServer.getMongoManager().collection(collection_root)['rbSchema'], is_root: true });\n\tlet schemaObj = ResolveIOServer.getMongoManager().collection(collection_root)['rbSchema'];\n\tlet modelKeys = Object.keys(schemaObj);\n\tmodelKeys.forEach(field => {\n\t\tif (schemaObj[field].lookup_collection) {\n\t\t\tlet collectionName = schemaObj[field].lookup_collection;\n\t\t\tlet collectionModel = ResolveIOServer.getMongoManager().collection(collectionName);\n\n\t\t\tif (!lookupTrees.filter(a => a.collection_name === collectionName).length) {\n\t\t\t\tlookupTrees.push({ collection_name: collectionName, tree: collectionModel['rbSchema'], is_root: false });\n\t\t\t}\n\t\t}\n\t});\n\n\treturn lookupTrees;\n}\n\nexport function buildTree(current_root, schemaTree, lookup?) {\n\tlet res = [];\n\n\tObject.keys(schemaTree).filter(a => a !== '_id' && a !== 'id' && a !== '__v').forEach(key => {\n\t// Object.keys(schemaTree).filter(a => a !== '__v').forEach(key => {\n\t\tif (!lookup || (lookup && !schemaTree[key].lookup_collection)) {\n\t\t\tlet treeItemSplit = key.split('.');\n\t\t\n\t\t\t// debugger;\n\n\t\t\tif (treeItemSplit.length === 1) {\n\t\t\t\tif (schemaTree[key].rbType === 'String' || schemaTree[key].rbType === 'Number' || schemaTree[key].rbType === 'Boolean' || schemaTree[key].rbType === 'Date') {\n\t\t\t\t\tres.push({\n\t\t\t\t\t\tcollection_name: current_root,\n\t\t\t\t\t\tcolumnName: toTitleCase(key.replace(/\\_/g, ' ')),\n\t\t\t\t\t\tfieldName: key,\n\t\t\t\t\t\tfieldType: schemaTree[key].rbType,\n\t\t\t\t\t\tfieldTypeName: schemaTree[key].rbType === 'String' ? 'Text' : (schemaTree[key].rbType === 'Boolean' ? 'T/F' : schemaTree[key].rbType),\n\t\t\t\t\t\tdistinctFieldValues: [],\n\t\t\t\t\t\tfieldPath: lookup ? lookup.lookup_as + '.$.' + key : key,\n\t\t\t\t\t\tfieldPathName: lookup ? (toTitleCase(lookup.lookup_as.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> '))) + ' (List) -> ' + (toTitleCase(key.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> '))) : toTitleCase(key.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> ')),\n\t\t\t\t\t\tlookup_collection: lookup ? lookup.lookup_collection : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_collection : ''),\n\t\t\t\t\t\tlookup_local_key: lookup ? lookup.lookup_local_key : (schemaTree[key].lookup_collection ? schemaTree[key].local_key : ''),\n\t\t\t\t\t\tlookup_foreign_key: lookup ? lookup.lookup_foreign_key : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_key : ''),\n\t\t\t\t\t\tlookup_as: lookup ? lookup.lookup_as : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_as : ''),\n\t\t\t\t\t\ttext: toTitleCase(key.replace(/\\_/g, ' ')),\n\t\t\t\t\t\tvalue: key,\n\t\t\t\t\t\tisLeaf: true,\n\t\t\t\t\t\tisActive: false,\n\t\t\t\t\t\tisSelected: false,\n\t\t\t\t\t\tdepth: 0,\n\t\t\t\t\t\tleafValueType: '',\n\t\t\t\t\t\tleafValueTypes: getLeafValueTypes(schemaTree[key], key),\n\t\t\t\t\t\tleafFormatType: '',\n\t\t\t\t\t\tleafFormatTypes: getLeafFormatTypes(schemaTree[key], key)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tres.push({\n\t\t\t\t\t\tcollection_name: current_root,\n\t\t\t\t\t\tcolumnName: toTitleCase(key.replace(/\\_/g, ' ')),\n\t\t\t\t\t\tfieldName: key,\n\t\t\t\t\t\tfieldType: schemaTree[key].lookup_collection ? 'Lookup' : schemaTree[key].rbType,\n\t\t\t\t\t\tfieldTypeName: schemaTree[key].lookup_collection ? 'Lookup' : (schemaTree[key].rbType === 'Array' ? 'List' : 'Group'),\n\t\t\t\t\t\tdistinctFieldValues: [],\n\t\t\t\t\t\tfieldPath: lookup ? lookup.lookup_as + '.$.' + key : key,\n\t\t\t\t\t\tfieldPathName: lookup ? (toTitleCase(lookup.lookup_as.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> '))) + ' (List) -> ' + (toTitleCase(key.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> '))) : toTitleCase(key.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> ')),\n\t\t\t\t\t\tlookup_collection: lookup ? lookup.lookup_collection : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_collection : ''),\n\t\t\t\t\t\tlookup_local_key: lookup ? lookup.lookup_local_key : (schemaTree[key].lookup_collection ? schemaTree[key].local_key : ''),\n\t\t\t\t\t\tlookup_foreign_key: lookup ? lookup.lookup_foreign_key : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_key : ''),\n\t\t\t\t\t\tlookup_as: lookup ? lookup.lookup_as : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_as : ''),\n\t\t\t\t\t\ttext: toTitleCase(key.replace(/\\_/g, ' ')),\n\t\t\t\t\t\tvalue: key,\n\t\t\t\t\t\tisLeaf: false,\n\t\t\t\t\t\tisActive: false,\n\t\t\t\t\t\tisSelected: false,\n\t\t\t\t\t\tdepth: 0,\n\t\t\t\t\t\tleafValueType: '',\n\t\t\t\t\t\tleafFormatType: '',\n\t\t\t\t\t\tchildren: []\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tres = res.sort((a, b) => a.fieldName.localeCompare(b.fieldName));\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet child = null;\n\n\t\t\t\ttreeItemSplit.forEach((layer, index) => {\n\t\t\t\t\tif (!child) {\n\t\t\t\t\t\tchild = res.filter(a => a.fieldName === layer)[0];\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (child.children.filter(a => a.fieldName === layer)[0]) {\n\t\t\t\t\t\t\tchild = child.children.filter(a => a.fieldName === layer)[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (schemaTree[key].rbType === 'String' || schemaTree[key].rbType === 'Number' || schemaTree[key].rbType === 'Boolean' || schemaTree[key].rbType === 'Date') {\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tchild.children.push({\n\t\t\t\t\t\t\t\t\tcollection_name: current_root,\n\t\t\t\t\t\t\t\t\tcolumnName: toTitleCase(key.replace(/\\_/g, ' ')),\n\t\t\t\t\t\t\t\t\tfieldName: layer,\n\t\t\t\t\t\t\t\t\tfieldType: schemaTree[key].rbType,\n\t\t\t\t\t\t\t\t\tfieldTypeName: schemaTree[key].rbType === 'String' ? 'Text' : (schemaTree[key].rbType === 'Boolean' ? 'T/F' : schemaTree[key].rbType),\n\t\t\t\t\t\t\t\t\tdistinctFieldValues: [],\n\t\t\t\t\t\t\t\t\tfieldPath: lookup ? lookup.lookup_as + '.$.' + key : key,\n\t\t\t\t\t\t\t\t\tfieldPathName: lookup ? (toTitleCase(lookup.lookup_as.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> '))) + ' (List) -> ' + (toTitleCase(key.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> '))) : toTitleCase(key.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> ')),\n\t\t\t\t\t\t\t\t\tlookup_collection: lookup ? lookup.lookup_collection : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_collection : ''),\n\t\t\t\t\t\t\t\t\tlookup_local_key: lookup ? lookup.lookup_local_key : (schemaTree[key].lookup_collection ? schemaTree[key].local_key : ''),\n\t\t\t\t\t\t\t\t\tlookup_foreign_key: lookup ? lookup.lookup_foreign_key : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_key : ''),\n\t\t\t\t\t\t\t\t\tlookup_as: lookup ? lookup.lookup_as : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_as : ''),\n\t\t\t\t\t\t\t\t\ttext: toTitleCase(layer.replace(/\\_/g, ' ')),\n\t\t\t\t\t\t\t\t\tvalue: layer,\n\t\t\t\t\t\t\t\t\tisLeaf: true,\n\t\t\t\t\t\t\t\t\tisActive: false,\n\t\t\t\t\t\t\t\t\tisSelected: false,\n\t\t\t\t\t\t\t\t\tdepth: index,\n\t\t\t\t\t\t\t\t\tleafValueType: '',\n\t\t\t\t\t\t\t\t\tleafValueTypes: getLeafValueTypes(schemaTree[key], key),\n\t\t\t\t\t\t\t\t\tleafFormatType: '',\n\t\t\t\t\t\t\t\t\tleafFormatTypes: getLeafFormatTypes(schemaTree[key], key)\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tchild.children.push({\n\t\t\t\t\t\t\t\t\tcollection_name: current_root,\n\t\t\t\t\t\t\t\t\tcolumnName: toTitleCase(key.replace(/\\_/g, ' ')),\n\t\t\t\t\t\t\t\t\tfieldName: layer,\n\t\t\t\t\t\t\t\t\tfieldType: schemaTree[key].lookup_collection ? 'Lookup' : schemaTree[key].rbType,\n\t\t\t\t\t\t\t\t\tfieldTypeName: schemaTree[key].lookup_collection ? 'Lookup' : (schemaTree[key].rbType === 'Array' ? 'List' : 'Group'),\n\t\t\t\t\t\t\t\t\tdistinctFieldValues: [],\n\t\t\t\t\t\t\t\t\tfieldPath: lookup ? lookup.lookup_as + '.$.' + key : key,\n\t\t\t\t\t\t\t\t\tfieldPathName: lookup ? (toTitleCase(lookup.lookup_as.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> '))) + ' (List) -> ' + (toTitleCase(key.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> '))) : toTitleCase(key.replace(/\\.\\$\\./g, ' (List) -> ').replace(/\\./g, ' (Group) -> ')),\n\t\t\t\t\t\t\t\t\tlookup_collection: lookup ? lookup.lookup_collection : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_collection : ''),\n\t\t\t\t\t\t\t\t\tlookup_local_key: lookup ? lookup.lookup_local_key : (schemaTree[key].lookup_collection ? schemaTree[key].local_key : ''),\n\t\t\t\t\t\t\t\t\tlookup_foreign_key: lookup ? lookup.lookup_foreign_key : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_key : ''),\n\t\t\t\t\t\t\t\t\tlookup_as: lookup ? lookup.lookup_as : (schemaTree[key].lookup_collection ? schemaTree[key].lookup_as : ''),\n\t\t\t\t\t\t\t\t\ttext: toTitleCase(layer.replace(/\\_/g, ' ')),\n\t\t\t\t\t\t\t\t\tvalue: layer,\n\t\t\t\t\t\t\t\t\tisLeaf: false,\n\t\t\t\t\t\t\t\t\tisActive: false,\n\t\t\t\t\t\t\t\t\tisSelected: false,\n\t\t\t\t\t\t\t\t\tdepth: index,\n\t\t\t\t\t\t\t\t\tleafValueType: '',\n\t\t\t\t\t\t\t\t\tleafFormatType: '',\n\t\t\t\t\t\t\t\t\tchildren: []\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tchild.children = child.children.sort((a, b) => a.fieldName.localeCompare(b.fieldName));\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});\n\n\treturn res;\n}\n\nexport function getLeafValueTypes(schemaTree, fieldPath) {\n\tlet leafTypes = [];\n\n\tif (schemaTree.rbType === 'String') {\n\t\tleafTypes = [\n\t\t\t{\n\t\t\t\ttext: 'As Value',\n\t\t\t\tvalue: 'Value'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Unique',\n\t\t\t\tvalue: 'Unique'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Count',\n\t\t\t\tvalue: 'Count'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'First',\n\t\t\t\tvalue: 'First'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Last',\n\t\t\t\tvalue: 'Last'\n\t\t\t}\n\t\t];\n\t}\n\telse if (schemaTree.rbType === 'Number') {\n\t\tleafTypes = [\n\t\t\t{\n\t\t\t\ttext: 'As Value',\n\t\t\t\tvalue: 'Value'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Unique',\n\t\t\t\tvalue: 'Unique'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Average',\n\t\t\t\tvalue: 'Average'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Count',\n\t\t\t\tvalue: 'Count'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Sum',\n\t\t\t\tvalue: 'Sum'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Minimum',\n\t\t\t\tvalue: 'Minimum'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Maximum',\n\t\t\t\tvalue: 'Maximum'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'First',\n\t\t\t\tvalue: 'First'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Last',\n\t\t\t\tvalue: 'Last'\n\t\t\t}\n\t\t];\n\t}\n\telse if (schemaTree.rbType === 'Boolean') {\n\t\tleafTypes = [\n\t\t\t{\n\t\t\t\ttext: 'As Value',\n\t\t\t\tvalue: 'Value'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Unique',\n\t\t\t\tvalue: 'Unique'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Count',\n\t\t\t\tvalue: 'Count'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'First',\n\t\t\t\tvalue: 'First'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Last',\n\t\t\t\tvalue: 'Last'\n\t\t\t}\n\t\t];\n\t}\n\telse if (schemaTree.rbType === 'Date') {\n\t\tleafTypes = [\n\t\t\t{\n\t\t\t\ttext: 'As Value',\n\t\t\t\tvalue: 'Value'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Unique',\n\t\t\t\tvalue: 'Unique'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Count',\n\t\t\t\tvalue: 'Count'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Minimum',\n\t\t\t\tvalue: 'Minimum'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Maximum',\n\t\t\t\tvalue: 'Maximum'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'First',\n\t\t\t\tvalue: 'First'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'Last',\n\t\t\t\tvalue: 'Last'\n\t\t\t}\n\t\t];\n\t}\n\treturn leafTypes;\n}\n\nexport function getLeafFormatTypes(schemaTree, fieldPath) {\n\tlet leafTypes = [];\n\n\tif (schemaTree.rbType === 'String') {\n\t\tleafTypes = [\n\t\t\t{\n\t\t\t\ttext: 'As Text',\n\t\t\t\tvalue: 'String'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Number',\n\t\t\t\tvalue: 'Number'\n\t\t\t}\n\t\t];\n\t}\n\telse if (schemaTree.rbType === 'Number') {\n\t\tleafTypes = [\n\t\t\t{\n\t\t\t\ttext: 'As Number',\n\t\t\t\tvalue: 'Number'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Currency',\n\t\t\t\tvalue: 'Currency'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Text',\n\t\t\t\tvalue: 'String'\n\t\t\t}\n\t\t];\n\t}\n\telse if (schemaTree.rbType === 'Boolean') {\n\t\tleafTypes = [\n\t\t\t{\n\t\t\t\ttext: 'As Number',\n\t\t\t\tvalue: 'Number'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Boolean (True/False)',\n\t\t\t\tvalue: 'Boolean'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Text (Yes/No)',\n\t\t\t\tvalue: 'String'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Number (1/0)',\n\t\t\t\tvalue: 'Boolean_Number'\n\t\t\t}\n\t\t];\n\t}\n\telse if (schemaTree.rbType === 'Date') {\n\t\tleafTypes = [\n\t\t\t{\n\t\t\t\ttext: 'As Number',\n\t\t\t\tvalue: 'Number'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Date (Short Format)',\n\t\t\t\tvalue: 'Date'\n\t\t\t}, \n\t\t\t{\n\t\t\t\ttext: 'As Time (Short Format)',\n\t\t\t\tvalue: 'Time'\n\t\t\t}, \n\t\t\t{\n\t\t\t\ttext: 'As Date/Time (Short Format)',\n\t\t\t\tvalue: 'DateTime'\n\t\t\t}, \n\t\t\t{\n\t\t\t\ttext: 'As Date (Long Format)',\n\t\t\t\tvalue: 'Date_long'\n\t\t\t},\n\t\t\t{\n\t\t\t\ttext: 'As Date/Time (Long Format)',\n\t\t\t\tvalue: 'DateTime_long'\n\t\t\t}, \n\t\t\t{\n\t\t\t\ttext: 'As Timestamp (MS since 1970)',\n\t\t\t\tvalue: 'Timestamp'\n\t\t\t}\n\t\t];\n\t}\n\treturn leafTypes;\n}\n\n\n\n\n\nexport async function mongoCommand(commandstr: string, collection: string, field?: any) {\n\tlet tmpObj;\n\ttry {\n\t\t// Count the number of non-empty fields in a given collection:\n\t\tif (commandstr === 'count') {\n\t\t\tlet obj = {\n\t\t\t\tcount: collection,\n\t\t\t\tquery: {}\n\t\t\t};\n\t\t\tobj.query[field] = {$ne: null};\n\t\t\ttmpObj = await ResolveIOServer.getMainDB().command(obj);\n\t\t}\n\t\t// Get all distinct values in a given field.\n\t\telse if (commandstr === 'distinct') {\n\t\t\tlet obj = {\n\t\t\t\tdistinct: collection,\n\t\t\t\tquery: {},\n\t\t\t\tkey: field,\n\t\t\t};\n\t\t\ttmpObj = await ResolveIOServer.getMainDB().command(obj);\n\t\t}\n\t\telse if (commandstr === 'listIndexes') {\n\t\t\t// tmpObj = await this.mainDb.db[collection].getIndexes();\n\t\t\t// let obj = { 'listIndexes': collection };\n\t\t\t// tmpObj = await this.mainDb.db.getIndexes(obj);\n\t\t}\n\t} catch (err) {\n\t\t// console.log('----------- mongoCommand err: ', err);\n\t\treturn -1;\n\t}\n\tif (tmpObj) {\n\t\treturn tmpObj.values;\n\t}\n}"]}
|