@resolveio/server-lib 20.5.6 → 20.5.8

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.
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CronJobHistories=void 0;var resolveio_server_app_1=require("../resolveio-server-app"),mongo_manager_1=require("../managers/mongo.manager"),simpl_schema_1=require("simpl-schema"),schema={_id:{type:String,optional:!0},__v:{type:Number,optional:!0},updatedAt:{type:Date,optional:!0},createdAt:{type:Date,optional:!0},name:{type:String},reoccuring:{type:Boolean},time_to_run:{type:simpl_schema_1.default.oneOf(String,Date)},method_name:{type:String},server_restart:{type:Boolean},id_cronjob:{type:String},passed:{type:Boolean},error:{type:String},date_scheduled:{type:Date,optional:!0},date_start:{type:Date},date_end:{type:Date,optional:!0},date_next:{type:Date,optional:!0}};function initializeCollection(){var e;resolveio_server_app_1.ResolveIOServer&&resolveio_server_app_1.ResolveIOServer.getMainDB()?(e=new mongo_manager_1.MongoManagerModel({collectionName:"cron-job-histories",schema:schema,useVersionCollection:!1,useReportBuilder:!1,reportBuilderLookupTables:[],timestamps:!0,createLogs:!1,checkSchema:!0,collectionOptions:null}),exports.CronJobHistories=e.collection_main,exports.CronJobHistories.createIndex({createdAt:1},{expireAfterSeconds:7776e3})):setTimeout(function(){initializeCollection()},1)}exports.CronJobHistories=null,initializeCollection();
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CronJobHistories=void 0;var resolveio_server_app_1=require("../resolveio-server-app"),mongo_manager_1=require("../managers/mongo.manager"),simpl_schema_1=require("simpl-schema"),schema={_id:{type:String,optional:!0},__v:{type:Number,optional:!0},updatedAt:{type:Date,optional:!0},createdAt:{type:Date,optional:!0},name:{type:String},reoccuring:{type:Boolean},time_to_run:{type:simpl_schema_1.default.oneOf(String,Date)},method_name:{type:String},server_restart:{type:Boolean},id_cronjob:{type:String},passed:{type:Boolean},error:{type:String},date_scheduled:{type:Date,optional:!0},date_start:{type:Date},date_end:{type:Date,optional:!0},date_next:{type:Date,optional:!0}};function initializeCollection(){var e;resolveio_server_app_1.ResolveIOServer&&resolveio_server_app_1.ResolveIOServer.getMainDB()?(e=new mongo_manager_1.MongoManagerModel({collectionName:"cron-job-histories",schema:schema,useVersionCollection:!1,useReportBuilder:!1,reportBuilderLookupTables:[],timestamps:!0,createLogs:!1,checkSchema:!0,collectionOptions:null}),exports.CronJobHistories=e.collection_main,exports.CronJobHistories.createIndex({createdAt:1},{expireAfterSeconds:604800})):setTimeout(function(){initializeCollection()},1)}exports.CronJobHistories=null,initializeCollection();
2
2
  //# sourceMappingURL=cron-job-history.collection.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/collections/cron-job-history.collection.ts"],"names":["resolveio_server_app_1","require","mongo_manager_1","simpl_schema_1","schema","_id","type","String","optional","__v","Number","updatedAt","Date","createdAt","name","reoccuring","Boolean","time_to_run","default","oneOf","method_name","server_restart","id_cronjob","passed","error","date_scheduled","date_start","date_end","date_next","initializeCollection","model","ResolveIOServer","getMainDB","MongoManagerModel","collectionName","useVersionCollection","useReportBuilder","reportBuilderLookupTables","timestamps","createLogs","checkSchema","collectionOptions","exports","CronJobHistories","collection_main","createIndex","expireAfterSeconds","setTimeout"],"mappings":"oGAAA,IAAAA,uBAAAC,QAAA,yBAAA,EACAC,gBAAAD,QAAA,2BAAA,EAEAE,eAAAF,QAAA,cAAA,EAEIG,OAAc,CACjBC,IAAK,CACJC,KAAMC,OACNC,SAAU,CAAA,C,EAEXC,IAAK,CACJH,KAAMI,OACNF,SAAU,CAAA,C,EAEXG,UAAW,CACVL,KAAMM,KACNJ,SAAU,CAAA,C,EAEXK,UAAW,CACVP,KAAMM,KACNJ,SAAU,CAAA,C,EAEXM,KAAM,CACLR,KAAMC,M,EAEPQ,WAAY,CACXT,KAAMU,O,EAEPC,YAAa,CACZX,KAAMH,eAAAe,QAAaC,MAAMZ,OAAQK,IAAI,C,EAEtCQ,YAAa,CACZd,KAAMC,M,EAEPc,eAAgB,CACff,KAAMU,O,EAEPM,WAAY,CACXhB,KAAMC,M,EAEPgB,OAAQ,CACPjB,KAAMU,O,EAEPQ,MAAO,CACNlB,KAAMC,M,EAEPkB,eAAgB,CACfnB,KAAMM,KACNJ,SAAU,CAAA,C,EAEXkB,WAAY,CACXpB,KAAMM,I,EAEPe,SAAU,CACTrB,KAAMM,KACNJ,SAAU,CAAA,C,EAEXoB,UAAW,CACVtB,KAAMM,KACNJ,SAAU,CAAA,C,GAQZ,SAASqB,uBACR,IACOC,EADH9B,uBAAA+B,iBAAmB/B,uBAAA+B,gBAAgBC,UAAS,GACzCF,EAAQ,IAAI5B,gBAAA+B,kBAAuC,CACxDC,eAAgB,qBAChB9B,OAAQA,OACR+B,qBAAsB,CAAA,EACtBC,iBAAkB,CAAA,EAClBC,0BAA2B,GAC3BC,WAAY,CAAA,EACZC,WAAY,CAAA,EACZC,YAAa,CAAA,EACbC,kBAAmB,I,CACnB,EACDC,QAAAC,iBAAmBb,EAAMc,gBACzBF,QAAAC,iBAAiBE,YAAY,CAAChC,UAAW,CAAC,EAAG,CAACiC,mBAAoB,MAAqB,CAAC,GAGxFC,WAAW,WACVlB,qBAAoB,CACrB,EAAG,CAAC,CAEN,CAzBWa,QAAAC,iBAAgE,KAE3Ed,qBAAoB","file":"cron-job-history.collection.js","sourcesContent":["import { ResolveIOServer } from '../resolveio-server-app';\nimport { MongoManagerCollection, MongoManagerModel } from '../managers/mongo.manager';\nimport { CronJobHistoryModel } from '../models/cron-job-history.model';\nimport SimpleSchema from 'simpl-schema';\n\nlet schema: any = {\n\t_id: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\t__v: {\n\t\ttype: Number,\n\t\toptional: true\n\t},\n\tupdatedAt: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\tcreatedAt: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\tname: {\n\t\ttype: String\n\t},\n\treoccuring: {\n\t\ttype: Boolean\n\t},\n\ttime_to_run: {\n\t\ttype: SimpleSchema.oneOf(String, Date)\n\t},\n\tmethod_name: {\n\t\ttype: String\n\t},\n\tserver_restart: {\n\t\ttype: Boolean\n\t},\n\tid_cronjob: {\n\t\ttype: String\n\t},\n\tpassed: {\n\t\ttype: Boolean\n\t},\n\terror: {\n\t\ttype: String\n\t},\n\tdate_scheduled: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\tdate_start: {\n\t\ttype: Date\n\t},\n\tdate_end: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\tdate_next: {\n\t\ttype: Date,\n\t\toptional: true\n\t}\n};\n\nexport let CronJobHistories: MongoManagerCollection<CronJobHistoryModel> = null;\n\ninitializeCollection();\n\nfunction initializeCollection() {\n\tif (ResolveIOServer && ResolveIOServer.getMainDB()) {\n\t\tconst model = new MongoManagerModel<CronJobHistoryModel>({\n\t\t\tcollectionName: 'cron-job-histories',\n\t\t\tschema: schema,\n\t\t\tuseVersionCollection: false,\n\t\t\tuseReportBuilder: false,\n\t\t\treportBuilderLookupTables: [],\n\t\t\ttimestamps: true,\n\t\t\tcreateLogs: false,\n\t\t\tcheckSchema: true,\n\t\t\tcollectionOptions: null\n\t\t});\n\t\tCronJobHistories = model.collection_main;\n\t\tCronJobHistories.createIndex({createdAt: 1}, {expireAfterSeconds: 60 * 60 * 24 * 30 * 3});\n\t}\n\telse {\n\t\tsetTimeout(() => {\n\t\t\tinitializeCollection();\n\t\t}, 1);\n\t}\n}"]}
1
+ {"version":3,"sources":["../../src/collections/cron-job-history.collection.ts"],"names":["resolveio_server_app_1","require","mongo_manager_1","simpl_schema_1","schema","_id","type","String","optional","__v","Number","updatedAt","Date","createdAt","name","reoccuring","Boolean","time_to_run","default","oneOf","method_name","server_restart","id_cronjob","passed","error","date_scheduled","date_start","date_end","date_next","initializeCollection","model","ResolveIOServer","getMainDB","MongoManagerModel","collectionName","useVersionCollection","useReportBuilder","reportBuilderLookupTables","timestamps","createLogs","checkSchema","collectionOptions","exports","CronJobHistories","collection_main","createIndex","expireAfterSeconds","setTimeout"],"mappings":"oGAAA,IAAAA,uBAAAC,QAAA,yBAAA,EACAC,gBAAAD,QAAA,2BAAA,EAEAE,eAAAF,QAAA,cAAA,EAEIG,OAAc,CACjBC,IAAK,CACJC,KAAMC,OACNC,SAAU,CAAA,C,EAEXC,IAAK,CACJH,KAAMI,OACNF,SAAU,CAAA,C,EAEXG,UAAW,CACVL,KAAMM,KACNJ,SAAU,CAAA,C,EAEXK,UAAW,CACVP,KAAMM,KACNJ,SAAU,CAAA,C,EAEXM,KAAM,CACLR,KAAMC,M,EAEPQ,WAAY,CACXT,KAAMU,O,EAEPC,YAAa,CACZX,KAAMH,eAAAe,QAAaC,MAAMZ,OAAQK,IAAI,C,EAEtCQ,YAAa,CACZd,KAAMC,M,EAEPc,eAAgB,CACff,KAAMU,O,EAEPM,WAAY,CACXhB,KAAMC,M,EAEPgB,OAAQ,CACPjB,KAAMU,O,EAEPQ,MAAO,CACNlB,KAAMC,M,EAEPkB,eAAgB,CACfnB,KAAMM,KACNJ,SAAU,CAAA,C,EAEXkB,WAAY,CACXpB,KAAMM,I,EAEPe,SAAU,CACTrB,KAAMM,KACNJ,SAAU,CAAA,C,EAEXoB,UAAW,CACVtB,KAAMM,KACNJ,SAAU,CAAA,C,GAQZ,SAASqB,uBACR,IACOC,EADH9B,uBAAA+B,iBAAmB/B,uBAAA+B,gBAAgBC,UAAS,GACzCF,EAAQ,IAAI5B,gBAAA+B,kBAAuC,CACxDC,eAAgB,qBAChB9B,OAAQA,OACR+B,qBAAsB,CAAA,EACtBC,iBAAkB,CAAA,EAClBC,0BAA2B,GAC3BC,WAAY,CAAA,EACZC,WAAY,CAAA,EACZC,YAAa,CAAA,EACbC,kBAAmB,I,CACnB,EACDC,QAAAC,iBAAmBb,EAAMc,gBACzBF,QAAAC,iBAAiBE,YAAY,CAAChC,UAAW,CAAC,EAAG,CAACiC,mBAAoB,MAAgB,CAAC,GAGnFC,WAAW,WACVlB,qBAAoB,CACrB,EAAG,CAAC,CAEN,CAzBWa,QAAAC,iBAAgE,KAE3Ed,qBAAoB","file":"cron-job-history.collection.js","sourcesContent":["import { ResolveIOServer } from '../resolveio-server-app';\nimport { MongoManagerCollection, MongoManagerModel } from '../managers/mongo.manager';\nimport { CronJobHistoryModel } from '../models/cron-job-history.model';\nimport SimpleSchema from 'simpl-schema';\n\nlet schema: any = {\n\t_id: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\t__v: {\n\t\ttype: Number,\n\t\toptional: true\n\t},\n\tupdatedAt: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\tcreatedAt: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\tname: {\n\t\ttype: String\n\t},\n\treoccuring: {\n\t\ttype: Boolean\n\t},\n\ttime_to_run: {\n\t\ttype: SimpleSchema.oneOf(String, Date)\n\t},\n\tmethod_name: {\n\t\ttype: String\n\t},\n\tserver_restart: {\n\t\ttype: Boolean\n\t},\n\tid_cronjob: {\n\t\ttype: String\n\t},\n\tpassed: {\n\t\ttype: Boolean\n\t},\n\terror: {\n\t\ttype: String\n\t},\n\tdate_scheduled: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\tdate_start: {\n\t\ttype: Date\n\t},\n\tdate_end: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\tdate_next: {\n\t\ttype: Date,\n\t\toptional: true\n\t}\n};\n\nexport let CronJobHistories: MongoManagerCollection<CronJobHistoryModel> = null;\n\ninitializeCollection();\n\nfunction initializeCollection() {\n\tif (ResolveIOServer && ResolveIOServer.getMainDB()) {\n\t\tconst model = new MongoManagerModel<CronJobHistoryModel>({\n\t\t\tcollectionName: 'cron-job-histories',\n\t\t\tschema: schema,\n\t\t\tuseVersionCollection: false,\n\t\t\tuseReportBuilder: false,\n\t\t\treportBuilderLookupTables: [],\n\t\t\ttimestamps: true,\n\t\t\tcreateLogs: false,\n\t\t\tcheckSchema: true,\n\t\t\tcollectionOptions: null\n\t\t});\n\t\tCronJobHistories = model.collection_main;\n\t\tCronJobHistories.createIndex({createdAt: 1}, {expireAfterSeconds: 60 * 60 * 24 * 7});\n\t}\n\telse {\n\t\tsetTimeout(() => {\n\t\t\tinitializeCollection();\n\t\t}, 1);\n\t}\n}"]}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.WorkerTaskRequests=void 0;var resolveio_server_app_1=require("../resolveio-server-app"),mongo_manager_1=require("../managers/mongo.manager"),simpl_schema_1=require("simpl-schema"),schema={_id:{type:String,optional:!0},__v:{type:Number,optional:!0},updatedAt:{type:Date,optional:!0},createdAt:{type:Date,optional:!0},method:{type:String},params:{type:Array},"params.$":{type:simpl_schema_1.default.oneOf(Object,String,Number,Boolean,Date),blackbox:!0},status:{type:String},id_user:{type:String},user:{type:String},id_ws:{type:String}};function initializeCollection(){var e;resolveio_server_app_1.ResolveIOServer&&resolveio_server_app_1.ResolveIOServer.getMainDB()?(e=new mongo_manager_1.MongoManagerModel({collectionName:"worker-task-requests",schema:schema,useVersionCollection:!1,useReportBuilder:!1,reportBuilderLookupTables:[],timestamps:!0,createLogs:!1,checkSchema:!1,collectionOptions:null}),exports.WorkerTaskRequests=e.collection_main,exports.WorkerTaskRequests.createIndex({createdAt:1},{expireAfterSeconds:1296e3}),exports.WorkerTaskRequests.createIndex({status:1,createdAt:1}),exports.WorkerTaskRequests.createIndex({_id:1,status:1}),exports.WorkerTaskRequests.createIndex({user:1,createdAt:-1})):setTimeout(function(){initializeCollection()},0)}exports.WorkerTaskRequests=null,initializeCollection();
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.WorkerTaskRequests=void 0;var resolveio_server_app_1=require("../resolveio-server-app"),mongo_manager_1=require("../managers/mongo.manager"),simpl_schema_1=require("simpl-schema"),schema={_id:{type:String,optional:!0},__v:{type:Number,optional:!0},updatedAt:{type:Date,optional:!0},createdAt:{type:Date,optional:!0},method:{type:String},params:{type:Array},"params.$":{type:simpl_schema_1.default.oneOf(Object,String,Number,Boolean,Date),blackbox:!0},status:{type:String},id_user:{type:String},user:{type:String},id_ws:{type:String}};function initializeCollection(){var e;resolveio_server_app_1.ResolveIOServer&&resolveio_server_app_1.ResolveIOServer.getMainDB()?(e=new mongo_manager_1.MongoManagerModel({collectionName:"worker-task-requests",schema:schema,useVersionCollection:!1,useReportBuilder:!1,reportBuilderLookupTables:[],timestamps:!0,createLogs:!1,checkSchema:!1,collectionOptions:null}),exports.WorkerTaskRequests=e.collection_main,exports.WorkerTaskRequests.createIndex({createdAt:1},{expireAfterSeconds:3600}),exports.WorkerTaskRequests.createIndex({status:1,createdAt:1}),exports.WorkerTaskRequests.createIndex({_id:1,status:1}),exports.WorkerTaskRequests.createIndex({user:1,createdAt:-1})):setTimeout(function(){initializeCollection()},0)}exports.WorkerTaskRequests=null,initializeCollection();
2
2
  //# sourceMappingURL=worker-task-request.collection.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/collections/worker-task-request.collection.ts"],"names":["resolveio_server_app_1","require","mongo_manager_1","simpl_schema_1","schema","_id","type","String","optional","__v","Number","updatedAt","Date","createdAt","method","params","Array","params.$","default","oneOf","Object","Boolean","blackbox","status","id_user","user","id_ws","initializeCollection","model","ResolveIOServer","getMainDB","MongoManagerModel","collectionName","useVersionCollection","useReportBuilder","reportBuilderLookupTables","timestamps","createLogs","checkSchema","collectionOptions","exports","WorkerTaskRequests","collection_main","createIndex","expireAfterSeconds","setTimeout"],"mappings":"sGACA,IAAAA,uBAAAC,QAAA,yBAAA,EACAC,gBAAAD,QAAA,2BAAA,EACAE,eAAAF,QAAA,cAAA,EAEIG,OAAc,CACjBC,IAAK,CACJC,KAAMC,OACNC,SAAU,CAAA,C,EAEXC,IAAK,CACJH,KAAMI,OACNF,SAAU,CAAA,C,EAEXG,UAAW,CACVL,KAAMM,KACNJ,SAAU,CAAA,C,EAEXK,UAAW,CACVP,KAAMM,KACNJ,SAAU,CAAA,C,EAEXM,OAAQ,CACPR,KAAMC,M,EAEPQ,OAAQ,CACPT,KAAMU,K,EAEPC,WAAY,CACXX,KAAMH,eAAAe,QAAaC,MAAMC,OAAQb,OAAQG,OAAQW,QAAST,IAAI,EAC9DU,SAAU,CAAA,C,EAEXC,OAAQ,CACPjB,KAAMC,M,EAEPiB,QAAS,CACRlB,KAAMC,M,EAEPkB,KAAM,CACLnB,KAAMC,M,EAEPmB,MAAO,CACNpB,KAAMC,M,GAQR,SAASoB,uBACR,IACOC,EADH5B,uBAAA6B,iBAAmB7B,uBAAA6B,gBAAgBC,UAAS,GACzCF,EAAQ,IAAI1B,gBAAA6B,kBAA0C,CAC3DC,eAAgB,uBAChB5B,OAAQA,OACR6B,qBAAsB,CAAA,EACtBC,iBAAkB,CAAA,EAClBC,0BAA2B,GAC3BC,WAAY,CAAA,EACZC,WAAY,CAAA,EACZC,YAAa,CAAA,EACbC,kBAAmB,I,CACnB,EACDC,QAAAC,mBAAqBb,EAAMc,gBAC3BF,QAAAC,mBAAmBE,YAAY,CAAC9B,UAAW,CAAC,EAAG,CAAC+B,mBAAoB,MAAiB,CAAC,EACtFJ,QAAAC,mBAAmBE,YAAY,CAACpB,OAAQ,EAAGV,UAAW,CAAC,CAAC,EACxD2B,QAAAC,mBAAmBE,YAAY,CAACtC,IAAK,EAAGkB,OAAQ,CAAC,CAAC,EAClDiB,QAAAC,mBAAmBE,YAAY,CAAClB,KAAM,EAAGZ,UAAW,CAAC,CAAC,CAAC,GAGvDgC,WAAW,WACVlB,qBAAoB,CACrB,EAAG,CAAC,CAEN,CA5BWa,QAAAC,mBAAqE,KAEhFd,qBAAoB","file":"worker-task-request.collection.js","sourcesContent":["import { WorkerTaskRequestModel } from '../models/worker-task-request.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { MongoManagerCollection, MongoManagerModel } from '../managers/mongo.manager';\nimport SimpleSchema from 'simpl-schema';\n\nlet schema: any = {\n\t_id: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\t__v: {\n\t\ttype: Number,\n\t\toptional: true\n\t},\n\tupdatedAt: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\tcreatedAt: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\tmethod: {\n\t\ttype: String\n\t},\n\tparams: {\n\t\ttype: Array, // Declaring params as an array\n\t},\n\t'params.$': {\n\t\ttype: SimpleSchema.oneOf(Object, String, Number, Boolean, Date), // Allowing multiple types\n\t\tblackbox: true // Blackbox for the object type\n\t},\n\tstatus: {\n\t\ttype: String\n\t},\n\tid_user: {\n\t\ttype: String\n\t},\n\tuser: {\n\t\ttype: String\n\t},\n\tid_ws: {\n\t\ttype: String\n\t}\n};\n\nexport let WorkerTaskRequests: MongoManagerCollection<WorkerTaskRequestModel> = null;\n\ninitializeCollection();\n\nfunction initializeCollection() {\n\tif (ResolveIOServer && ResolveIOServer.getMainDB()) {\n\t\tconst model = new MongoManagerModel<WorkerTaskRequestModel>({\n\t\t\tcollectionName: 'worker-task-requests',\n\t\t\tschema: schema,\n\t\t\tuseVersionCollection: false,\n\t\t\tuseReportBuilder: false,\n\t\t\treportBuilderLookupTables: [],\n\t\t\ttimestamps: true,\n\t\t\tcreateLogs: false,\n\t\t\tcheckSchema: false,\n\t\t\tcollectionOptions: null\n\t\t});\n\t\tWorkerTaskRequests = model.collection_main;\n\t\tWorkerTaskRequests.createIndex({createdAt: 1}, {expireAfterSeconds: 60 * 60 * 24 * 15});\n\t\tWorkerTaskRequests.createIndex({status: 1, createdAt: 1});\n\t\tWorkerTaskRequests.createIndex({_id: 1, status: 1});\n\t\tWorkerTaskRequests.createIndex({user: 1, createdAt: -1});\n\t}\n\telse {\n\t\tsetTimeout(() => {\n\t\t\tinitializeCollection();\n\t\t}, 0);\n\t}\n}"]}
1
+ {"version":3,"sources":["../../src/collections/worker-task-request.collection.ts"],"names":["resolveio_server_app_1","require","mongo_manager_1","simpl_schema_1","schema","_id","type","String","optional","__v","Number","updatedAt","Date","createdAt","method","params","Array","params.$","default","oneOf","Object","Boolean","blackbox","status","id_user","user","id_ws","initializeCollection","model","ResolveIOServer","getMainDB","MongoManagerModel","collectionName","useVersionCollection","useReportBuilder","reportBuilderLookupTables","timestamps","createLogs","checkSchema","collectionOptions","exports","WorkerTaskRequests","collection_main","createIndex","expireAfterSeconds","setTimeout"],"mappings":"sGACA,IAAAA,uBAAAC,QAAA,yBAAA,EACAC,gBAAAD,QAAA,2BAAA,EACAE,eAAAF,QAAA,cAAA,EAEIG,OAAc,CACjBC,IAAK,CACJC,KAAMC,OACNC,SAAU,CAAA,C,EAEXC,IAAK,CACJH,KAAMI,OACNF,SAAU,CAAA,C,EAEXG,UAAW,CACVL,KAAMM,KACNJ,SAAU,CAAA,C,EAEXK,UAAW,CACVP,KAAMM,KACNJ,SAAU,CAAA,C,EAEXM,OAAQ,CACPR,KAAMC,M,EAEPQ,OAAQ,CACPT,KAAMU,K,EAEPC,WAAY,CACXX,KAAMH,eAAAe,QAAaC,MAAMC,OAAQb,OAAQG,OAAQW,QAAST,IAAI,EAC9DU,SAAU,CAAA,C,EAEXC,OAAQ,CACPjB,KAAMC,M,EAEPiB,QAAS,CACRlB,KAAMC,M,EAEPkB,KAAM,CACLnB,KAAMC,M,EAEPmB,MAAO,CACNpB,KAAMC,M,GAQR,SAASoB,uBACR,IACOC,EADH5B,uBAAA6B,iBAAmB7B,uBAAA6B,gBAAgBC,UAAS,GACzCF,EAAQ,IAAI1B,gBAAA6B,kBAA0C,CAC3DC,eAAgB,uBAChB5B,OAAQA,OACR6B,qBAAsB,CAAA,EACtBC,iBAAkB,CAAA,EAClBC,0BAA2B,GAC3BC,WAAY,CAAA,EACZC,WAAY,CAAA,EACZC,YAAa,CAAA,EACbC,kBAAmB,I,CACnB,EACDC,QAAAC,mBAAqBb,EAAMc,gBAC3BF,QAAAC,mBAAmBE,YAAY,CAAC9B,UAAW,CAAC,EAAG,CAAC+B,mBAAoB,IAAO,CAAC,EAC5EJ,QAAAC,mBAAmBE,YAAY,CAACpB,OAAQ,EAAGV,UAAW,CAAC,CAAC,EACxD2B,QAAAC,mBAAmBE,YAAY,CAACtC,IAAK,EAAGkB,OAAQ,CAAC,CAAC,EAClDiB,QAAAC,mBAAmBE,YAAY,CAAClB,KAAM,EAAGZ,UAAW,CAAC,CAAC,CAAC,GAGvDgC,WAAW,WACVlB,qBAAoB,CACrB,EAAG,CAAC,CAEN,CA5BWa,QAAAC,mBAAqE,KAEhFd,qBAAoB","file":"worker-task-request.collection.js","sourcesContent":["import { WorkerTaskRequestModel } from '../models/worker-task-request.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { MongoManagerCollection, MongoManagerModel } from '../managers/mongo.manager';\nimport SimpleSchema from 'simpl-schema';\n\nlet schema: any = {\n\t_id: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\t__v: {\n\t\ttype: Number,\n\t\toptional: true\n\t},\n\tupdatedAt: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\tcreatedAt: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\tmethod: {\n\t\ttype: String\n\t},\n\tparams: {\n\t\ttype: Array, // Declaring params as an array\n\t},\n\t'params.$': {\n\t\ttype: SimpleSchema.oneOf(Object, String, Number, Boolean, Date), // Allowing multiple types\n\t\tblackbox: true // Blackbox for the object type\n\t},\n\tstatus: {\n\t\ttype: String\n\t},\n\tid_user: {\n\t\ttype: String\n\t},\n\tuser: {\n\t\ttype: String\n\t},\n\tid_ws: {\n\t\ttype: String\n\t}\n};\n\nexport let WorkerTaskRequests: MongoManagerCollection<WorkerTaskRequestModel> = null;\n\ninitializeCollection();\n\nfunction initializeCollection() {\n\tif (ResolveIOServer && ResolveIOServer.getMainDB()) {\n\t\tconst model = new MongoManagerModel<WorkerTaskRequestModel>({\n\t\t\tcollectionName: 'worker-task-requests',\n\t\t\tschema: schema,\n\t\t\tuseVersionCollection: false,\n\t\t\tuseReportBuilder: false,\n\t\t\treportBuilderLookupTables: [],\n\t\t\ttimestamps: true,\n\t\t\tcreateLogs: false,\n\t\t\tcheckSchema: false,\n\t\t\tcollectionOptions: null\n\t\t});\n\t\tWorkerTaskRequests = model.collection_main;\n\t\tWorkerTaskRequests.createIndex({createdAt: 1}, {expireAfterSeconds: 60 * 60});\n\t\tWorkerTaskRequests.createIndex({status: 1, createdAt: 1});\n\t\tWorkerTaskRequests.createIndex({_id: 1, status: 1});\n\t\tWorkerTaskRequests.createIndex({user: 1, createdAt: -1});\n\t}\n\telse {\n\t\tsetTimeout(() => {\n\t\t\tinitializeCollection();\n\t\t}, 0);\n\t}\n}"]}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.WorkerTaskResponses=void 0;var resolveio_server_app_1=require("../resolveio-server-app"),mongo_manager_1=require("../managers/mongo.manager"),simpl_schema_1=require("simpl-schema"),schema={_id:{type:String,optional:!0},__v:{type:Number,optional:!0},updatedAt:{type:Date,optional:!0},createdAt:{type:Date,optional:!0},id_request:{type:String},data:{type:Array},"data.$":{type:simpl_schema_1.default.oneOf(Object,String,Number,Boolean,Date),blackbox:!0},id_user:{type:String},user:{type:String},id_ws:{type:String}};function initializeCollection(){var e;resolveio_server_app_1.ResolveIOServer&&resolveio_server_app_1.ResolveIOServer.getMainDB()?(e=new mongo_manager_1.MongoManagerModel({collectionName:"worker-task-responses",schema:schema,useVersionCollection:!1,useReportBuilder:!1,reportBuilderLookupTables:[],timestamps:!0,createLogs:!1,checkSchema:!1,collectionOptions:null}),exports.WorkerTaskResponses=e.collection_main,exports.WorkerTaskResponses.createIndex({createdAt:1},{expireAfterSeconds:1296e3}),exports.WorkerTaskResponses.createIndex({id_request:1})):setTimeout(function(){initializeCollection()},0)}exports.WorkerTaskResponses=null,initializeCollection();
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.WorkerTaskResponses=void 0;var resolveio_server_app_1=require("../resolveio-server-app"),mongo_manager_1=require("../managers/mongo.manager"),simpl_schema_1=require("simpl-schema"),schema={_id:{type:String,optional:!0},__v:{type:Number,optional:!0},updatedAt:{type:Date,optional:!0},createdAt:{type:Date,optional:!0},id_request:{type:String},data:{type:Array},"data.$":{type:simpl_schema_1.default.oneOf(Object,String,Number,Boolean,Date),blackbox:!0},id_user:{type:String},user:{type:String},id_ws:{type:String}};function initializeCollection(){var e;resolveio_server_app_1.ResolveIOServer&&resolveio_server_app_1.ResolveIOServer.getMainDB()?(e=new mongo_manager_1.MongoManagerModel({collectionName:"worker-task-responses",schema:schema,useVersionCollection:!1,useReportBuilder:!1,reportBuilderLookupTables:[],timestamps:!0,createLogs:!1,checkSchema:!1,collectionOptions:null}),exports.WorkerTaskResponses=e.collection_main,exports.WorkerTaskResponses.createIndex({createdAt:1},{expireAfterSeconds:3600}),exports.WorkerTaskResponses.createIndex({id_request:1})):setTimeout(function(){initializeCollection()},0)}exports.WorkerTaskResponses=null,initializeCollection();
2
2
  //# sourceMappingURL=worker-task-response.collection.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/collections/worker-task-response.collection.ts"],"names":["resolveio_server_app_1","require","mongo_manager_1","simpl_schema_1","schema","_id","type","String","optional","__v","Number","updatedAt","Date","createdAt","id_request","data","Array","data.$","default","oneOf","Object","Boolean","blackbox","id_user","user","id_ws","initializeCollection","model","ResolveIOServer","getMainDB","MongoManagerModel","collectionName","useVersionCollection","useReportBuilder","reportBuilderLookupTables","timestamps","createLogs","checkSchema","collectionOptions","exports","WorkerTaskResponses","collection_main","createIndex","expireAfterSeconds","setTimeout"],"mappings":"uGACA,IAAAA,uBAAAC,QAAA,yBAAA,EACAC,gBAAAD,QAAA,2BAAA,EACAE,eAAAF,QAAA,cAAA,EAEIG,OAAc,CACjBC,IAAK,CACJC,KAAMC,OACNC,SAAU,CAAA,C,EAEXC,IAAK,CACJH,KAAMI,OACNF,SAAU,CAAA,C,EAEXG,UAAW,CACVL,KAAMM,KACNJ,SAAU,CAAA,C,EAEXK,UAAW,CACVP,KAAMM,KACNJ,SAAU,CAAA,C,EAEXM,WAAY,CACXR,KAAMC,M,EAEPQ,KAAM,CACLT,KAAMU,K,EAEPC,SAAU,CACTX,KAAMH,eAAAe,QAAaC,MAAMC,OAAQb,OAAQG,OAAQW,QAAST,IAAI,EAC9DU,SAAU,CAAA,C,EAEXC,QAAS,CACRjB,KAAMC,M,EAEPiB,KAAM,CACLlB,KAAMC,M,EAEPkB,MAAO,CACNnB,KAAMC,M,GAQR,SAASmB,uBACR,IACOC,EADH3B,uBAAA4B,iBAAmB5B,uBAAA4B,gBAAgBC,UAAS,GACzCF,EAAQ,IAAIzB,gBAAA4B,kBAA2C,CAC5DC,eAAgB,wBAChB3B,OAAQA,OACR4B,qBAAsB,CAAA,EACtBC,iBAAkB,CAAA,EAClBC,0BAA2B,GAC3BC,WAAY,CAAA,EACZC,WAAY,CAAA,EACZC,YAAa,CAAA,EACbC,kBAAmB,I,CACnB,EACDC,QAAAC,oBAAsBb,EAAMc,gBAC5BF,QAAAC,oBAAoBE,YAAY,CAAC7B,UAAW,CAAC,EAAG,CAAC8B,mBAAoB,MAAiB,CAAC,EACvFJ,QAAAC,oBAAoBE,YAAY,CAAC5B,WAAY,CAAC,CAAC,GAG/C8B,WAAW,WACVlB,qBAAoB,CACrB,EAAG,CAAC,CAEN,CA1BWa,QAAAC,oBAAuE,KAElFd,qBAAoB","file":"worker-task-response.collection.js","sourcesContent":["import { WorkerTaskResponseModel } from '../models/worker-task-response.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { MongoManagerCollection, MongoManagerModel } from '../managers/mongo.manager';\nimport SimpleSchema from 'simpl-schema';\n\nlet schema: any = {\n\t_id: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\t__v: {\n\t\ttype: Number,\n\t\toptional: true\n\t},\n\tupdatedAt: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\tcreatedAt: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\tid_request: {\n\t\ttype: String\n\t},\n\tdata: {\n\t\ttype: Array, // Declaring params as an array\n\t},\n\t'data.$': {\n\t\ttype: SimpleSchema.oneOf(Object, String, Number, Boolean, Date), // Allowing multiple types\n\t\tblackbox: true // Blackbox for the object type\n\t},\n\tid_user: {\n\t\ttype: String\n\t},\n\tuser: {\n\t\ttype: String\n\t},\n\tid_ws: {\n\t\ttype: String\n\t}\n};\n\nexport let WorkerTaskResponses: MongoManagerCollection<WorkerTaskResponseModel> = null;\n\ninitializeCollection();\n\nfunction initializeCollection() {\n\tif (ResolveIOServer && ResolveIOServer.getMainDB()) {\n\t\tconst model = new MongoManagerModel<WorkerTaskResponseModel>({\n\t\t\tcollectionName: 'worker-task-responses',\n\t\t\tschema: schema,\n\t\t\tuseVersionCollection: false,\n\t\t\tuseReportBuilder: false,\n\t\t\treportBuilderLookupTables: [],\n\t\t\ttimestamps: true,\n\t\t\tcreateLogs: false,\n\t\t\tcheckSchema: false,\n\t\t\tcollectionOptions: null\n\t\t});\n\t\tWorkerTaskResponses = model.collection_main;\n\t\tWorkerTaskResponses.createIndex({createdAt: 1}, {expireAfterSeconds: 60 * 60 * 24 * 15});\n\t\tWorkerTaskResponses.createIndex({id_request: 1});\n\t}\n\telse {\n\t\tsetTimeout(() => {\n\t\t\tinitializeCollection();\n\t\t}, 0);\n\t}\n}"]}
1
+ {"version":3,"sources":["../../src/collections/worker-task-response.collection.ts"],"names":["resolveio_server_app_1","require","mongo_manager_1","simpl_schema_1","schema","_id","type","String","optional","__v","Number","updatedAt","Date","createdAt","id_request","data","Array","data.$","default","oneOf","Object","Boolean","blackbox","id_user","user","id_ws","initializeCollection","model","ResolveIOServer","getMainDB","MongoManagerModel","collectionName","useVersionCollection","useReportBuilder","reportBuilderLookupTables","timestamps","createLogs","checkSchema","collectionOptions","exports","WorkerTaskResponses","collection_main","createIndex","expireAfterSeconds","setTimeout"],"mappings":"uGACA,IAAAA,uBAAAC,QAAA,yBAAA,EACAC,gBAAAD,QAAA,2BAAA,EACAE,eAAAF,QAAA,cAAA,EAEIG,OAAc,CACjBC,IAAK,CACJC,KAAMC,OACNC,SAAU,CAAA,C,EAEXC,IAAK,CACJH,KAAMI,OACNF,SAAU,CAAA,C,EAEXG,UAAW,CACVL,KAAMM,KACNJ,SAAU,CAAA,C,EAEXK,UAAW,CACVP,KAAMM,KACNJ,SAAU,CAAA,C,EAEXM,WAAY,CACXR,KAAMC,M,EAEPQ,KAAM,CACLT,KAAMU,K,EAEPC,SAAU,CACTX,KAAMH,eAAAe,QAAaC,MAAMC,OAAQb,OAAQG,OAAQW,QAAST,IAAI,EAC9DU,SAAU,CAAA,C,EAEXC,QAAS,CACRjB,KAAMC,M,EAEPiB,KAAM,CACLlB,KAAMC,M,EAEPkB,MAAO,CACNnB,KAAMC,M,GAQR,SAASmB,uBACR,IACOC,EADH3B,uBAAA4B,iBAAmB5B,uBAAA4B,gBAAgBC,UAAS,GACzCF,EAAQ,IAAIzB,gBAAA4B,kBAA2C,CAC5DC,eAAgB,wBAChB3B,OAAQA,OACR4B,qBAAsB,CAAA,EACtBC,iBAAkB,CAAA,EAClBC,0BAA2B,GAC3BC,WAAY,CAAA,EACZC,WAAY,CAAA,EACZC,YAAa,CAAA,EACbC,kBAAmB,I,CACnB,EACDC,QAAAC,oBAAsBb,EAAMc,gBAC5BF,QAAAC,oBAAoBE,YAAY,CAAC7B,UAAW,CAAC,EAAG,CAAC8B,mBAAoB,IAAO,CAAC,EAC7EJ,QAAAC,oBAAoBE,YAAY,CAAC5B,WAAY,CAAC,CAAC,GAG/C8B,WAAW,WACVlB,qBAAoB,CACrB,EAAG,CAAC,CAEN,CA1BWa,QAAAC,oBAAuE,KAElFd,qBAAoB","file":"worker-task-response.collection.js","sourcesContent":["import { WorkerTaskResponseModel } from '../models/worker-task-response.model';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { MongoManagerCollection, MongoManagerModel } from '../managers/mongo.manager';\nimport SimpleSchema from 'simpl-schema';\n\nlet schema: any = {\n\t_id: {\n\t\ttype: String,\n\t\toptional: true\n\t},\n\t__v: {\n\t\ttype: Number,\n\t\toptional: true\n\t},\n\tupdatedAt: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\tcreatedAt: {\n\t\ttype: Date,\n\t\toptional: true\n\t},\n\tid_request: {\n\t\ttype: String\n\t},\n\tdata: {\n\t\ttype: Array, // Declaring params as an array\n\t},\n\t'data.$': {\n\t\ttype: SimpleSchema.oneOf(Object, String, Number, Boolean, Date), // Allowing multiple types\n\t\tblackbox: true // Blackbox for the object type\n\t},\n\tid_user: {\n\t\ttype: String\n\t},\n\tuser: {\n\t\ttype: String\n\t},\n\tid_ws: {\n\t\ttype: String\n\t}\n};\n\nexport let WorkerTaskResponses: MongoManagerCollection<WorkerTaskResponseModel> = null;\n\ninitializeCollection();\n\nfunction initializeCollection() {\n\tif (ResolveIOServer && ResolveIOServer.getMainDB()) {\n\t\tconst model = new MongoManagerModel<WorkerTaskResponseModel>({\n\t\t\tcollectionName: 'worker-task-responses',\n\t\t\tschema: schema,\n\t\t\tuseVersionCollection: false,\n\t\t\tuseReportBuilder: false,\n\t\t\treportBuilderLookupTables: [],\n\t\t\ttimestamps: true,\n\t\t\tcreateLogs: false,\n\t\t\tcheckSchema: false,\n\t\t\tcollectionOptions: null\n\t\t});\n\t\tWorkerTaskResponses = model.collection_main;\n\t\tWorkerTaskResponses.createIndex({createdAt: 1}, {expireAfterSeconds: 60 * 60});\n\t\tWorkerTaskResponses.createIndex({id_request: 1});\n\t}\n\telse {\n\t\tsetTimeout(() => {\n\t\t\tinitializeCollection();\n\t\t}, 0);\n\t}\n}"]}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.LocalLogManager=void 0;var fs=require("fs"),resolveio_server_app_1=require("../resolveio-server-app"),LocalLogManager=function(){function LocalLogManager(){"https://resolveio.com"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||"http://localhost:4200"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||fs.existsSync("~/logs")||fs.mkdirSync("~/logs"),this._logFilePath="~/logs/local-logs.jsonl"}return LocalLogManager.prototype.writeLog=function(e){try{var o=JSON.stringify(e)+"\n";fs.appendFileSync(this._logFilePath,o,{encoding:"utf8"})}catch(e){console.error(new Date,"LocalLogManager","Failed to write log to file:",e)}},LocalLogManager.prototype.writeLogs=function(e){if(e&&0!==e.length)try{var o=e.map(function(e){return JSON.stringify(e)}).join("\n")+"\n";fs.appendFileSync(this._logFilePath,o,{encoding:"utf8"})}catch(e){console.error(new Date,"LocalLogManager","Failed to write logs batch:",e)}},LocalLogManager.prototype.offloadLogs=function(){var e=[];try{if(!fs.existsSync(this._logFilePath))return e;var o=fs.readFileSync(this._logFilePath,"utf8");if(0===o.trim().length)return e;e=o.split("\n").filter(function(e){return""!==e.trim()}),fs.writeFileSync(this._logFilePath,"")}catch(e){console.error(new Date,"LocalLogManager","Failed to offload logs:",e)}return e},LocalLogManager}();exports.LocalLogManager=LocalLogManager;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.LocalLogManager=void 0;var fs=require("fs"),resolveio_server_app_1=require("../resolveio-server-app"),LocalLogManager=function(){function LocalLogManager(){"https://resolveio.com"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||"http://localhost:4200"===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||fs.existsSync("/home/ubuntu/resolveio/logs")||fs.mkdirSync("/home/ubuntu/resolveio/logs"),this._logFilePath="/home/ubuntu/resolveio/logs/local-logs.jsonl"}return LocalLogManager.prototype.writeLog=function(e){try{var o=JSON.stringify(e)+"\n";fs.appendFileSync(this._logFilePath,o,{encoding:"utf8"})}catch(e){console.error(new Date,"LocalLogManager","Failed to write log to file:",e)}},LocalLogManager.prototype.writeLogs=function(e){if(e&&0!==e.length)try{var o=e.map(function(e){return JSON.stringify(e)}).join("\n")+"\n";fs.appendFileSync(this._logFilePath,o,{encoding:"utf8"})}catch(e){console.error(new Date,"LocalLogManager","Failed to write logs batch:",e)}},LocalLogManager.prototype.offloadLogs=function(){var e=[];try{if(!fs.existsSync(this._logFilePath))return e;var o=fs.readFileSync(this._logFilePath,"utf8");if(0===o.trim().length)return e;e=o.split("\n").filter(function(e){return""!==e.trim()}),fs.writeFileSync(this._logFilePath,"")}catch(e){console.error(new Date,"LocalLogManager","Failed to offload logs:",e)}return e},LocalLogManager}();exports.LocalLogManager=LocalLogManager;
2
2
  //# sourceMappingURL=local-log.manager.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/managers/local-log.manager.ts"],"names":["fs","require","resolveio_server_app_1","LocalLogManager","ResolveIOServer","getServerConfig","existsSync","mkdirSync","this","_logFilePath","prototype","writeLog","logEntry","line","JSON","stringify","appendFileSync","encoding","err","console","error","Date","writeLogs","items","length","lines","map","item","join","offloadLogs","result","fileData","readFileSync","trim","split","filter","l","writeFileSync","exports"],"mappings":"mGAGA,IAAAA,GAAAC,QAAA,IAAA,EACAC,uBAAAD,QAAA,yBAAA,EAeAE,gBAAA,WAGC,SAAAA,kBAEoD,0BAAlDD,uBAAAE,gBAAgBC,gBAAe,EAAa,UACS,0BAAlDH,uBAAAE,gBAAgBC,gBAAe,EAAa,UAE1CL,GAAGM,WAAW,QAAQ,GAC1BN,GAAGO,UAAU,QAAQ,EAIvBC,KAAKC,aAAe,yBACrB,CAwDD,OArDQN,gBAAAO,UAAAC,SAAP,SAAgBC,GACf,IACC,IAAIC,EAAOC,KAAKC,UAAUH,CAAQ,EAAI,KACtCZ,GAAGgB,eAAeR,KAAKC,aAAcI,EAAM,CAAEI,SAAU,MAAM,CAAE,C,CAEhE,MAAMC,GAELC,QAAQC,MAAM,IAAIC,KAAQ,kBAAmB,+BAAgCH,CAAG,C,CAElF,EAEOf,gBAAAO,UAAAY,UAAP,SAAiBC,GAChB,GAAKA,GAA0B,IAAjBA,EAAMC,OAIpB,IAEC,IAAIC,EAAQF,EAAMG,IAAI,SAAAC,GAAQ,OAAAb,KAAKC,UAAUY,CAAI,CAAnB,CAAoB,EAAEC,KAAK,IAAI,EAAI,KACjE5B,GAAGgB,eAAeR,KAAKC,aAAcgB,EAAO,CAAER,SAAU,MAAM,CAAE,C,CAEjE,MAAOC,GACNC,QAAQC,MAAM,IAAIC,KAAQ,kBAAmB,8BAA+BH,CAAG,C,CAEjF,EAKOf,gBAAAO,UAAAmB,YAAP,WACC,IAAIC,EAAS,GAEb,IACC,GAAI,CAAC9B,GAAGM,WAAWE,KAAKC,YAAY,EACnC,OAAOqB,EAGR,IAAIC,EAAW/B,GAAGgC,aAAaxB,KAAKC,aAAc,MAAM,EACxD,GAA+B,IAA3BsB,EAASE,KAAI,EAAGT,OACnB,OAAOM,EAGRA,EAASC,EAASG,MAAM,IAAI,EAAEC,OAAO,SAAAC,GAAK,MAAa,KAAbA,EAAEH,KAAI,CAAN,CAAe,EAGzDjC,GAAGqC,cAAc7B,KAAKC,aAAc,EAAE,C,CAEvC,MAAMS,GACLC,QAAQC,MAAM,IAAIC,KAAQ,kBAAmB,0BAA2BH,CAAG,C,CAG5E,OAAOY,CACR,EACD3B,eAAA,EAAC,EAtEYmC,QAAAnC,gBAAAA","file":"local-log.manager.js","sourcesContent":["/***************\nlocal-logs.manager.ts\n****************/\nimport * as fs from 'fs';\nimport { ResolveIOServer } from '../resolveio-server-app';\n\nexport type LocalLogType = 'monitor-mongo' \n\t| 'monitor-memory'\n\t| 'monitor-cpu'\n\t| 'log'\n\t| 'log-method-latency'\n\t| 'log-subscription';\n\nexport interface LocalLogModel {\n\ttype: LocalLogType;\n\tdate: Date;\n\tdata: any;\n}\n\nexport class LocalLogManager {\n\tprivate _logFilePath: string;\n\n\tconstructor() {\n\t\tif (\n\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t) {\n\t\t\tif (!fs.existsSync('~/logs')) {\n\t\t\t\tfs.mkdirSync('~/logs');\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis._logFilePath = '~/logs/local-logs.jsonl';\n\t}\n\n\t// Internal method to append a JSON line to the file\n\tpublic writeLog(logEntry: LocalLogModel): void {\n\t\ttry {\n\t\t\tlet line = JSON.stringify(logEntry) + '\\n';\n\t\t\tfs.appendFileSync(this._logFilePath, line, { encoding: 'utf8' });\n\t\t}\n\t\tcatch(err) {\n\t\t\t// If there's an error writing logs, you might want to handle it or queue it\n\t\t\tconsole.error(new Date(), 'LocalLogManager', 'Failed to write log to file:', err);\n\t\t}\n\t}\n\n\tpublic writeLogs(items: LocalLogModel[]): void {\n\t\tif (!items || items.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\t// Convert each item to a JSON string, add newline\n\t\t\tlet lines = items.map(item => JSON.stringify(item)).join('\\n') + '\\n';\n\t\t\tfs.appendFileSync(this._logFilePath, lines, { encoding: 'utf8' });\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.error(new Date(), 'LocalLogManager', 'Failed to write logs batch:', err);\n\t\t}\n\t}\n\n\t/**\n\t * Reads all logs from disk, then empties the file.\n\t */\n\tpublic offloadLogs(): any[] {\n\t\tlet result = [];\n\n\t\ttry {\n\t\t\tif (!fs.existsSync(this._logFilePath)) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tlet fileData = fs.readFileSync(this._logFilePath, 'utf8');\n\t\t\tif (fileData.trim().length === 0) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tresult = fileData.split('\\n').filter(l => l.trim() !== '');\n\n\t\t\t// Truncate the file so we don't send logs more than once\n\t\t\tfs.writeFileSync(this._logFilePath, '');\n\t\t}\n\t\tcatch(err) {\n\t\t\tconsole.error(new Date(), 'LocalLogManager', 'Failed to offload logs:', err);\n\t\t}\n\n\t\treturn result;\n\t}\n}"]}
1
+ {"version":3,"sources":["../../src/managers/local-log.manager.ts"],"names":["fs","require","resolveio_server_app_1","LocalLogManager","ResolveIOServer","getServerConfig","existsSync","mkdirSync","this","_logFilePath","prototype","writeLog","logEntry","line","JSON","stringify","appendFileSync","encoding","err","console","error","Date","writeLogs","items","length","lines","map","item","join","offloadLogs","result","fileData","readFileSync","trim","split","filter","l","writeFileSync","exports"],"mappings":"mGAGA,IAAAA,GAAAC,QAAA,IAAA,EACAC,uBAAAD,QAAA,yBAAA,EAeAE,gBAAA,WAGC,SAAAA,kBAEoD,0BAAlDD,uBAAAE,gBAAgBC,gBAAe,EAAa,UACS,0BAAlDH,uBAAAE,gBAAgBC,gBAAe,EAAa,UAE1CL,GAAGM,WAAW,6BAA6B,GAC/CN,GAAGO,UAAU,6BAA6B,EAI5CC,KAAKC,aAAe,8CACrB,CAwDD,OArDQN,gBAAAO,UAAAC,SAAP,SAAgBC,GACf,IACC,IAAIC,EAAOC,KAAKC,UAAUH,CAAQ,EAAI,KACtCZ,GAAGgB,eAAeR,KAAKC,aAAcI,EAAM,CAAEI,SAAU,MAAM,CAAE,C,CAEhE,MAAMC,GAELC,QAAQC,MAAM,IAAIC,KAAQ,kBAAmB,+BAAgCH,CAAG,C,CAElF,EAEOf,gBAAAO,UAAAY,UAAP,SAAiBC,GAChB,GAAKA,GAA0B,IAAjBA,EAAMC,OAIpB,IAEC,IAAIC,EAAQF,EAAMG,IAAI,SAAAC,GAAQ,OAAAb,KAAKC,UAAUY,CAAI,CAAnB,CAAoB,EAAEC,KAAK,IAAI,EAAI,KACjE5B,GAAGgB,eAAeR,KAAKC,aAAcgB,EAAO,CAAER,SAAU,MAAM,CAAE,C,CAEjE,MAAOC,GACNC,QAAQC,MAAM,IAAIC,KAAQ,kBAAmB,8BAA+BH,CAAG,C,CAEjF,EAKOf,gBAAAO,UAAAmB,YAAP,WACC,IAAIC,EAAS,GAEb,IACC,GAAI,CAAC9B,GAAGM,WAAWE,KAAKC,YAAY,EACnC,OAAOqB,EAGR,IAAIC,EAAW/B,GAAGgC,aAAaxB,KAAKC,aAAc,MAAM,EACxD,GAA+B,IAA3BsB,EAASE,KAAI,EAAGT,OACnB,OAAOM,EAGRA,EAASC,EAASG,MAAM,IAAI,EAAEC,OAAO,SAAAC,GAAK,MAAa,KAAbA,EAAEH,KAAI,CAAN,CAAe,EAGzDjC,GAAGqC,cAAc7B,KAAKC,aAAc,EAAE,C,CAEvC,MAAMS,GACLC,QAAQC,MAAM,IAAIC,KAAQ,kBAAmB,0BAA2BH,CAAG,C,CAG5E,OAAOY,CACR,EACD3B,eAAA,EAAC,EAtEYmC,QAAAnC,gBAAAA","file":"local-log.manager.js","sourcesContent":["/***************\nlocal-logs.manager.ts\n****************/\nimport * as fs from 'fs';\nimport { ResolveIOServer } from '../resolveio-server-app';\n\nexport type LocalLogType = 'monitor-mongo' \n\t| 'monitor-memory'\n\t| 'monitor-cpu'\n\t| 'log'\n\t| 'log-method-latency'\n\t| 'log-subscription';\n\nexport interface LocalLogModel {\n\ttype: LocalLogType;\n\tdate: Date;\n\tdata: any;\n}\n\nexport class LocalLogManager {\n\tprivate _logFilePath: string;\n\n\tconstructor() {\n\t\tif (\n\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t) {\n\t\t\tif (!fs.existsSync('/home/ubuntu/resolveio/logs')) {\n\t\t\t\tfs.mkdirSync('/home/ubuntu/resolveio/logs');\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis._logFilePath = '/home/ubuntu/resolveio/logs/local-logs.jsonl';\n\t}\n\n\t// Internal method to append a JSON line to the file\n\tpublic writeLog(logEntry: LocalLogModel): void {\n\t\ttry {\n\t\t\tlet line = JSON.stringify(logEntry) + '\\n';\n\t\t\tfs.appendFileSync(this._logFilePath, line, { encoding: 'utf8' });\n\t\t}\n\t\tcatch(err) {\n\t\t\t// If there's an error writing logs, you might want to handle it or queue it\n\t\t\tconsole.error(new Date(), 'LocalLogManager', 'Failed to write log to file:', err);\n\t\t}\n\t}\n\n\tpublic writeLogs(items: LocalLogModel[]): void {\n\t\tif (!items || items.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\t// Convert each item to a JSON string, add newline\n\t\t\tlet lines = items.map(item => JSON.stringify(item)).join('\\n') + '\\n';\n\t\t\tfs.appendFileSync(this._logFilePath, lines, { encoding: 'utf8' });\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.error(new Date(), 'LocalLogManager', 'Failed to write logs batch:', err);\n\t\t}\n\t}\n\n\t/**\n\t * Reads all logs from disk, then empties the file.\n\t */\n\tpublic offloadLogs(): any[] {\n\t\tlet result = [];\n\n\t\ttry {\n\t\t\tif (!fs.existsSync(this._logFilePath)) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tlet fileData = fs.readFileSync(this._logFilePath, 'utf8');\n\t\t\tif (fileData.trim().length === 0) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tresult = fileData.split('\\n').filter(l => l.trim() !== '');\n\n\t\t\t// Truncate the file so we don't send logs more than once\n\t\t\tfs.writeFileSync(this._logFilePath, '');\n\t\t}\n\t\tcatch(err) {\n\t\t\tconsole.error(new Date(), 'LocalLogManager', 'Failed to offload logs:', err);\n\t\t}\n\n\t\treturn result;\n\t}\n}"]}
package/methods/aws.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var __awaiter=this&&this.__awaiter||function(e,i,r,o){return new(r=r||Promise)(function(n,t){function fulfilled(e){try{step(o.next(e))}catch(e){t(e)}}function rejected(e){try{step(o.throw(e))}catch(e){t(e)}}function step(e){var t;e.done?n(e.value):((t=e.value)instanceof r?t:new r(function(e){e(t)})).then(fulfilled,rejected)}step((o=o.apply(e,i||[])).next())})},__generator=this&&this.__generator||function(i,r){var o,s,c,l={label:0,sent:function(){if(1&c[0])throw c[1];return c[1]},trys:[],ops:[]},a={next:verb(0),throw:verb(1),return:verb(2)};return"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function verb(n){return function(e){var t=[n,e];if(o)throw new TypeError("Generator is already executing.");for(;l=a&&t[a=0]?0:l;)try{if(o=1,s&&(c=2&t[0]?s.return:t[0]?s.throw||((c=s.return)&&c.call(s),0):s.next)&&!(c=c.call(s,t[1])).done)return c;switch(s=0,(t=c?[2&t[0],c.value]:t)[0]){case 0:case 1:c=t;break;case 4:return l.label++,{value:t[1],done:!1};case 5:l.label++,s=t[1],t=[0];continue;case 7:t=l.ops.pop(),l.trys.pop();continue;default:if(!(c=0<(c=l.trys).length&&c[c.length-1])&&(6===t[0]||2===t[0])){l=0;continue}if(3===t[0]&&(!c||t[1]>c[0]&&t[1]<c[3]))l.label=t[1];else if(6===t[0]&&l.label<c[1])l.label=c[1],c=t;else{if(!(c&&l.label<c[2])){c[2]&&l.ops.pop(),l.trys.pop();continue}l.label=c[2],l.ops.push(t)}}t=r.call(i,l)}catch(e){t=[6,e],s=0}finally{o=c=0}if(5&t[0])throw t[1];return{value:t[0]?t[1]:void 0,done:!0}}}},file_collection_1=(Object.defineProperty(exports,"__esModule",{value:!0}),exports.loadAWSMethods=void 0,require("../collections/file.collection")),simpl_schema_1=require("simpl-schema"),resolveio_server_app_1=require("../resolveio-server-app"),client_s3_1=require("@aws-sdk/client-s3"),s3_request_presigner_1=require("@aws-sdk/s3-request-presigner"),common_1=require("../util/common"),request=require("request").defaults({encoding:null}),fs=require("fs"),pdfCnt=1e6;function loadAWSMethods(e){e.methods({uploadFileAndSave:{check:new simpl_schema_1.default({fileName:{type:String},fileData:{type:String},fileSize:{type:Number},fileOrder:{type:Number},fileType:{type:String},compress:{type:Boolean}}),function:function(l,a,u,f,_,e){var t=this;return new Promise(function(s,c){return __awaiter(t,void 0,void 0,function(){var t,n,i,r,o;return __generator(this,function(e){return l?(t="uploads/"+Date.now()+"-"+pdfCnt+++"-"+l,n=this.getAWS().s3(),i=3,r=0,(o=function(){n.putObject({Bucket:process.env.AWS_S3_BUCKET,Key:t,Body:Buffer.from(a.replace("data:"+a.split(",")[0].split(":")[1].split(";")[0]+";base64,",""),"base64"),ACL:"private",ContentType:a.split(",")[0].split(":")[1].split(";")[0],ContentDisposition:"inline"}).then(function(e){e?file_collection_1.Files.create({_id:(0,common_1.objectIdHexString)(),__v:0,name:l,size:u,key:t,order:f,type:_}).then(function(e){s(e)}).catch(function(e){c(e)}):s(null)}).catch(function(e){var t;++r<=i?(t=1e3*Math.pow(2,r),console.warn("Attempt ".concat(r," failed. Retrying in ").concat(t/1e3," seconds...")),setTimeout(o,t)):c(new Error("Failed to upload after ".concat(i," attempts: ").concat(e.message)))})})()):c(new Error("Invalid fileName provided")),[2]})})})}},uploadNonPDFFileAndSave:{check:new simpl_schema_1.default({fileName:{type:String},fileData:{type:String},fileSize:{type:Number},fileOrder:{type:Number},fileType:{type:String}}),function:function(r,e,o,s,c){var l=this;return new Promise(function(t,n){var i;r&&(i="uploads/"+Date.now()+"-"+r,l.getAWS().s3().putObject({Bucket:process.env.AWS_S3_BUCKET,Key:i,Body:Buffer.from(e),ACL:"private",ContentType:"application/gzip",ContentDisposition:"inline"}).then(function(e){e?file_collection_1.Files.create({_id:(0,common_1.objectIdHexString)(),__v:0,name:r,size:o,key:i,order:s,type:c}).then(function(e){t(e)},function(e){return n(e)}):t(null)},function(e){n(e)}))})}},uploadNonPDFBufferAndSave:{check:new simpl_schema_1.default({fileName:{type:String},fileDataBuffer:{type:Buffer},fileSize:{type:Number},fileOrder:{type:Number},fileType:{type:String}}),function:function(r,e,o,s,c){var l=this;return new Promise(function(t,n){var i;r&&(i="uploads/"+Date.now()+"-"+r,l.getAWS().s3().putObject({Bucket:process.env.AWS_S3_BUCKET,Key:i,Body:e,ACL:"private",ContentType:"application/gzip",ContentDisposition:"inline"}).then(function(e){e?file_collection_1.Files.create({_id:(0,common_1.objectIdHexString)(),__v:0,name:r,size:o,key:i,order:s,type:c}).then(function(e){t(e)},function(e){return n(e)}):t(null)},function(e){n(e)}))})}},uploadNonPDFStreamAndSave:{check:new simpl_schema_1.default({fileName:{type:String},fileData:{type:String},fileOrder:{type:Number},fileType:{type:String}}),function:function(r,e,o,s){var c=this;return new Promise(function(t,n){var i;r&&(i="uploads/"+Date.now()+"-"+r,c.getAWS().s3().putObject({Bucket:process.env.AWS_S3_BUCKET,Key:i,Body:fs.createReadStream(e),ACL:"private",ContentType:"application/gzip",ContentDisposition:"inline"}).then(function(e){e?file_collection_1.Files.create({_id:(0,common_1.objectIdHexString)(),__v:0,name:r,size:1,key:i,order:o,type:s}).then(function(e){t(e)},function(e){return n(e)}):t(null)},function(e){n(e)}))})}},deleteFiles:{check:new simpl_schema_1.default({keys:{type:Array},"keys.$":{type:String}}),function:function(o){var t=this;return new Promise(function(r,e){return __awaiter(t,void 0,void 0,function(){var t,n,i=this;return __generator(this,function(e){switch(e.label){case 0:return[4,file_collection_1.Files.find({key:{$in:o}})];case 1:return t=e.sent(),n=t.length,t.forEach(function(e){file_collection_1.Files.deleteOne({_id:e._id}),i.getAWS().s3().deleteObject({Bucket:process.env.AWS_S3_BUCKET,Key:e.key}).then(function(e){!e||--n||r(t.length)})}),[2]}})})})}},deleteFile:{check:new simpl_schema_1.default({key:{type:String}}),function:function(r){var e=this;return new Promise(function(n,i){return __awaiter(e,void 0,void 0,function(){var t;return __generator(this,function(e){switch(e.label){case 0:return[4,file_collection_1.Files.findOne({key:r})];case 1:return(t=e.sent())&&file_collection_1.Files.deleteOne({_id:t._id}),this.getAWS().s3().deleteObject({Bucket:process.env.AWS_S3_BUCKET,Key:r}).then(function(e){n(e)},function(e){i(e)}),[2]}})})})}},deleteFileWithId:{check:new simpl_schema_1.default({id_file:{type:String}}),function:function(r){var e=this;return new Promise(function(n,i){return __awaiter(e,void 0,void 0,function(){var t;return __generator(this,function(e){switch(e.label){case 0:return[4,file_collection_1.Files.findOne({_id:r})];case 1:return(t=e.sent())||i("Could not find file"),this.getAWS().s3().deleteObject({Bucket:process.env.AWS_S3_BUCKET,Key:t.key}).then(function(e){n(e)},function(e){i(e)}),file_collection_1.Files.deleteOne({_id:t._id}),[2]}})})})}},getSignedUrlsAndFilesWithId:{check:new simpl_schema_1.default({ids:{type:Array},"ids.$":{type:String},expires:{type:Number}}),function:function(a,u){var t=this;return new Promise(function(l,e){return __awaiter(t,void 0,void 0,function(){var t,n,i,r,o,s,c;return __generator(this,function(e){switch(e.label){case 0:return t=[],[4,file_collection_1.Files.find({_id:{$in:a}})];case 1:n=e.sent(),i=0,e.label=2;case 2:return i<n.length?(o=n[i],r=this.getAWS().s3(),o=new client_s3_1.GetObjectCommand({Bucket:process.env.AWS_S3_BUCKET,Key:o.key}),c=(s=t).push,[4,(0,s3_request_presigner_1.getSignedUrl)(r,o,{expiresIn:u})]):[3,5];case 3:c.apply(s,[e.sent()]),e.label=4;case 4:return i++,[3,2];case 5:return l({res:t,fileArray:n.map(function(e){return e.name})}),[2]}})})})}},getSignedUrlWithId:{check:new simpl_schema_1.default({id_file:{type:String},expires:{type:Number}}),function:function(o,s){var e=this;return new Promise(function(i,r){return __awaiter(e,void 0,void 0,function(){var t,n;return __generator(this,function(e){switch(e.label){case 0:return[4,file_collection_1.Files.findOne({_id:o})];case 1:return n=e.sent(),t=this.getAWS().s3(),n=new client_s3_1.GetObjectCommand({Bucket:process.env.AWS_S3_BUCKET,Key:n.key}),(0,s3_request_presigner_1.getSignedUrl)(t,n,{expiresIn:s}).then(function(e){i(e)},function(e){r(e)}),[2]}})})})}},getSignedUrlUSEast1BucketAndKey:{check:new simpl_schema_1.default({bucket:{type:String},key:{type:String},expires:{type:Number}}),function:function(r,o,s){var c=this;return new Promise(function(t,n){var e=c.getAWS().s3USEast1(),i=new client_s3_1.GetObjectCommand({Bucket:r,Key:o});(0,s3_request_presigner_1.getSignedUrl)(e,i,{expiresIn:s}).then(function(e){t(e)},function(e){n(e)})})}},getSignedUrl:{check:new simpl_schema_1.default({key:{type:String},expires:{type:Number}}),function:function(r,o){var s=this;return new Promise(function(t,n){var e=s.getAWS().s3(),i=new client_s3_1.GetObjectCommand({Bucket:process.env.AWS_S3_BUCKET,Key:r});(0,s3_request_presigner_1.getSignedUrl)(e,i,{expiresIn:o}).then(function(e){t(e)},function(e){n(e)})})}},getSignedUrls:{check:new simpl_schema_1.default({keys:{type:Array},"keys.$":{type:String},expires:{type:Number}}),function:function(l,a){var t=this;return new Promise(function(c,e){return __awaiter(t,void 0,void 0,function(){var t,n,i,r,o,s;return __generator(this,function(e){switch(e.label){case 0:t=[],n=0,e.label=1;case 1:return n<l.length?(r=l[n],i=this.getAWS().s3(),r=new client_s3_1.GetObjectCommand({Bucket:process.env.AWS_S3_BUCKET,Key:r}),s=(o=t).push,[4,(0,s3_request_presigner_1.getSignedUrl)(i,r,{expiresIn:a})]):[3,4];case 2:s.apply(o,[e.sent()]),e.label=3;case 3:return n++,[3,1];case 4:return c(t),[2]}})})})}},getDataURIfromURL:{check:new simpl_schema_1.default({url:{type:String}}),function:function(e){return new Promise(function(i,r){request.get(e,function(e,t,n){e||200!==t.statusCode?r(e):(e="data:"+t.headers["content-type"]+";base64,"+new Buffer(n).toString("base64"),i(e))})})}},emailFile:{check:new simpl_schema_1.default({id_file:{type:String},email:{type:String},additional_message:{type:String}}),function:function(t,c,l){var e=this;return new Promise(function(o,s){return __awaiter(e,void 0,void 0,function(){var i,r=this;return __generator(this,function(e){switch(e.label){case 0:return[4,file_collection_1.Files.findById(t)];case 1:return(i=e.sent())?this.callMethodInternal("getSignedUrl",i.key,259200,function(e,t){var n;t?(i.size<5e6?(n="Attached is the file requested for email.\n"+(""!==l?"\nAdditional Message:\n"+l+"\n":""),r.sendEmail(c,resolveio_server_app_1.ResolveIOServer.getClientName()+" File - "+i.name,n,"",[{filename:i.name,path:t}],null,"")):(n="Please click the link to the requested file.\n"+(""!==l?"\nAdditional Message:\n"+l+"\n":""),r.sendEmail(c,resolveio_server_app_1.ResolveIOServer.getClientName()+" File - "+i.name,n+t,"",null,null,"")),o(!0)):s("Could not get file URL")}):s("Could not find file"),[2]}})})})}}})}exports.loadAWSMethods=loadAWSMethods;
1
+ "use strict";var __awaiter=this&&this.__awaiter||function(e,i,r,o){return new(r=r||Promise)(function(n,t){function fulfilled(e){try{step(o.next(e))}catch(e){t(e)}}function rejected(e){try{step(o.throw(e))}catch(e){t(e)}}function step(e){var t;e.done?n(e.value):((t=e.value)instanceof r?t:new r(function(e){e(t)})).then(fulfilled,rejected)}step((o=o.apply(e,i||[])).next())})},__generator=this&&this.__generator||function(i,r){var o,s,c,l={label:0,sent:function(){if(1&c[0])throw c[1];return c[1]},trys:[],ops:[]},a={next:verb(0),throw:verb(1),return:verb(2)};return"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function verb(n){return function(e){var t=[n,e];if(o)throw new TypeError("Generator is already executing.");for(;l=a&&t[a=0]?0:l;)try{if(o=1,s&&(c=2&t[0]?s.return:t[0]?s.throw||((c=s.return)&&c.call(s),0):s.next)&&!(c=c.call(s,t[1])).done)return c;switch(s=0,(t=c?[2&t[0],c.value]:t)[0]){case 0:case 1:c=t;break;case 4:return l.label++,{value:t[1],done:!1};case 5:l.label++,s=t[1],t=[0];continue;case 7:t=l.ops.pop(),l.trys.pop();continue;default:if(!(c=0<(c=l.trys).length&&c[c.length-1])&&(6===t[0]||2===t[0])){l=0;continue}if(3===t[0]&&(!c||t[1]>c[0]&&t[1]<c[3]))l.label=t[1];else if(6===t[0]&&l.label<c[1])l.label=c[1],c=t;else{if(!(c&&l.label<c[2])){c[2]&&l.ops.pop(),l.trys.pop();continue}l.label=c[2],l.ops.push(t)}}t=r.call(i,l)}catch(e){t=[6,e],s=0}finally{o=c=0}if(5&t[0])throw t[1];return{value:t[0]?t[1]:void 0,done:!0}}}},file_collection_1=(Object.defineProperty(exports,"__esModule",{value:!0}),exports.loadAWSMethods=void 0,require("../collections/file.collection")),simpl_schema_1=require("simpl-schema"),resolveio_server_app_1=require("../resolveio-server-app"),client_s3_1=require("@aws-sdk/client-s3"),s3_request_presigner_1=require("@aws-sdk/s3-request-presigner"),common_1=require("../util/common"),request=require("request").defaults({encoding:null}),fs=require("fs"),pdfCnt=1e6;function loadAWSMethods(e){e.methods({uploadFileAndSave:{check:new simpl_schema_1.default({fileName:{type:String},fileData:{type:String},fileSize:{type:Number},fileOrder:{type:Number},fileType:{type:String},compress:{type:Boolean}}),function:function(l,a,u,f,_,e){var t=this;return new Promise(function(s,c){return __awaiter(t,void 0,void 0,function(){var t,n,i,r,o;return __generator(this,function(e){return l?(t="uploads/"+Date.now()+"-"+pdfCnt+++"-"+l,n=this.getAWS().s3(),i=3,r=0,(o=function(){n.putObject({Bucket:process.env.AWS_S3_BUCKET,Key:t,Body:Buffer.from(a.replace("data:"+a.split(",")[0].split(":")[1].split(";")[0]+";base64,",""),"base64"),ACL:"private",ContentType:a.split(",")[0].split(":")[1].split(";")[0],ContentDisposition:"inline"}).then(function(e){e?file_collection_1.Files.create({_id:(0,common_1.objectIdHexString)(),__v:0,name:l,size:u,key:t,order:f,type:_}).then(function(e){s(e)}).catch(function(e){c(e)}):s(null)}).catch(function(e){var t;++r<=i?(t=1e3*Math.pow(2,r),console.warn("Attempt ".concat(r," failed. Retrying in ").concat(t/1e3," seconds...")),setTimeout(o,t)):c(new Error("Failed to upload after ".concat(i," attempts: ").concat(e.message)))})})()):c(new Error("Invalid fileName provided")),[2]})})})}},uploadNonPDFFileAndSave:{check:new simpl_schema_1.default({fileName:{type:String},fileData:{type:String},fileSize:{type:Number},fileOrder:{type:Number},fileType:{type:String}}),function:function(r,e,o,s,c){var l=this;return new Promise(function(t,n){var i;r&&(i="uploads/"+Date.now()+"-"+r,l.getAWS().s3().putObject({Bucket:process.env.AWS_S3_BUCKET,Key:i,Body:Buffer.from(e),ACL:"private",ContentType:"application/gzip",ContentDisposition:"inline"}).then(function(e){e?file_collection_1.Files.create({_id:(0,common_1.objectIdHexString)(),__v:0,name:r,size:o,key:i,order:s,type:c}).then(function(e){t(e)},function(e){return n(e)}):t(null)},function(e){n(e)}))})}},uploadNonPDFBufferAndSave:{check:new simpl_schema_1.default({fileName:{type:String},fileDataBuffer:{type:Buffer},fileSize:{type:Number},fileOrder:{type:Number},fileType:{type:String}}),function:function(r,e,o,s,c){var l=this;return new Promise(function(t,n){var i;r&&(i="uploads/"+Date.now()+"-"+r,l.getAWS().s3().putObject({Bucket:process.env.AWS_S3_BUCKET,Key:i,Body:e,ACL:"private",ContentType:"application/gzip",ContentDisposition:"inline"}).then(function(e){e?file_collection_1.Files.create({_id:(0,common_1.objectIdHexString)(),__v:0,name:r,size:o,key:i,order:s,type:c}).then(function(e){t(e)},function(e){return n(e)}):t(null)},function(e){n(e)}))})}},uploadNonPDFStreamAndSave:{check:new simpl_schema_1.default({fileName:{type:String},fileData:{type:String},fileOrder:{type:Number},fileType:{type:String}}),function:function(r,e,o,s){var c=this;return new Promise(function(t,n){var i;r&&(i="uploads/"+Date.now()+"-"+r,c.getAWS().s3().putObject({Bucket:process.env.AWS_S3_BUCKET,Key:i,Body:fs.createReadStream(e),ACL:"private",ContentType:"application/gzip",ContentDisposition:"inline"}).then(function(e){e?file_collection_1.Files.create({_id:(0,common_1.objectIdHexString)(),__v:0,name:r,size:1,key:i,order:o,type:s}).then(function(e){t(e)},function(e){return n(e)}):t(null)},function(e){n(e)}))})}},deleteFiles:{check:new simpl_schema_1.default({keys:{type:Array},"keys.$":{type:String}}),function:function(s){var e=this;return new Promise(function(r,o){return __awaiter(e,void 0,void 0,function(){var t,n,i=this;return __generator(this,function(e){switch(e.label){case 0:return[4,file_collection_1.Files.find({key:{$in:s}})];case 1:return t=e.sent(),n=t.length,t.forEach(function(e){file_collection_1.Files.deleteOne({_id:e._id}),i.getAWS().s3().deleteObject({Bucket:process.env.AWS_S3_BUCKET,Key:e.key}).then(function(e){e&&!--n&&r(t.length),r(!0)},function(e){return o(e)})}),[2]}})})})}},deleteFile:{check:new simpl_schema_1.default({key:{type:String}}),function:function(r){var e=this;return new Promise(function(n,i){return __awaiter(e,void 0,void 0,function(){var t;return __generator(this,function(e){switch(e.label){case 0:return[4,file_collection_1.Files.findOne({key:r})];case 1:return(t=e.sent())&&file_collection_1.Files.deleteOne({_id:t._id}),this.getAWS().s3().deleteObject({Bucket:process.env.AWS_S3_BUCKET,Key:r}).then(function(e){n(e)},function(e){i(e)}),[2]}})})})}},deleteFileWithId:{check:new simpl_schema_1.default({id_file:{type:String}}),function:function(r){var e=this;return new Promise(function(n,i){return __awaiter(e,void 0,void 0,function(){var t;return __generator(this,function(e){switch(e.label){case 0:return[4,file_collection_1.Files.findOne({_id:r})];case 1:return(t=e.sent())||i("Could not find file"),this.getAWS().s3().deleteObject({Bucket:process.env.AWS_S3_BUCKET,Key:t.key}).then(function(e){n(e)},function(e){i(e)}),file_collection_1.Files.deleteOne({_id:t._id}),[2]}})})})}},getSignedUrlsAndFilesWithId:{check:new simpl_schema_1.default({ids:{type:Array},"ids.$":{type:String},expires:{type:Number}}),function:function(a,u){var t=this;return new Promise(function(l,e){return __awaiter(t,void 0,void 0,function(){var t,n,i,r,o,s,c;return __generator(this,function(e){switch(e.label){case 0:return t=[],[4,file_collection_1.Files.find({_id:{$in:a}})];case 1:n=e.sent(),i=0,e.label=2;case 2:return i<n.length?(o=n[i],r=this.getAWS().s3(),o=new client_s3_1.GetObjectCommand({Bucket:process.env.AWS_S3_BUCKET,Key:o.key}),c=(s=t).push,[4,(0,s3_request_presigner_1.getSignedUrl)(r,o,{expiresIn:u})]):[3,5];case 3:c.apply(s,[e.sent()]),e.label=4;case 4:return i++,[3,2];case 5:return l({res:t,fileArray:n.map(function(e){return e.name})}),[2]}})})})}},getSignedUrlWithId:{check:new simpl_schema_1.default({id_file:{type:String},expires:{type:Number}}),function:function(o,s){var e=this;return new Promise(function(i,r){return __awaiter(e,void 0,void 0,function(){var t,n;return __generator(this,function(e){switch(e.label){case 0:return[4,file_collection_1.Files.findOne({_id:o})];case 1:return n=e.sent(),t=this.getAWS().s3(),n=new client_s3_1.GetObjectCommand({Bucket:process.env.AWS_S3_BUCKET,Key:n.key}),(0,s3_request_presigner_1.getSignedUrl)(t,n,{expiresIn:s}).then(function(e){i(e)},function(e){r(e)}),[2]}})})})}},getSignedUrlUSEast1BucketAndKey:{check:new simpl_schema_1.default({bucket:{type:String},key:{type:String},expires:{type:Number}}),function:function(r,o,s){var c=this;return new Promise(function(t,n){var e=c.getAWS().s3USEast1(),i=new client_s3_1.GetObjectCommand({Bucket:r,Key:o});(0,s3_request_presigner_1.getSignedUrl)(e,i,{expiresIn:s}).then(function(e){t(e)},function(e){n(e)})})}},getSignedUrl:{check:new simpl_schema_1.default({key:{type:String},expires:{type:Number}}),function:function(r,o){var s=this;return new Promise(function(t,n){var e=s.getAWS().s3(),i=new client_s3_1.GetObjectCommand({Bucket:process.env.AWS_S3_BUCKET,Key:r});(0,s3_request_presigner_1.getSignedUrl)(e,i,{expiresIn:o}).then(function(e){t(e)},function(e){n(e)})})}},getSignedUrls:{check:new simpl_schema_1.default({keys:{type:Array},"keys.$":{type:String},expires:{type:Number}}),function:function(l,a){var t=this;return new Promise(function(c,e){return __awaiter(t,void 0,void 0,function(){var t,n,i,r,o,s;return __generator(this,function(e){switch(e.label){case 0:t=[],n=0,e.label=1;case 1:return n<l.length?(r=l[n],i=this.getAWS().s3(),r=new client_s3_1.GetObjectCommand({Bucket:process.env.AWS_S3_BUCKET,Key:r}),s=(o=t).push,[4,(0,s3_request_presigner_1.getSignedUrl)(i,r,{expiresIn:a})]):[3,4];case 2:s.apply(o,[e.sent()]),e.label=3;case 3:return n++,[3,1];case 4:return c(t),[2]}})})})}},getDataURIfromURL:{check:new simpl_schema_1.default({url:{type:String}}),function:function(e){return new Promise(function(i,r){request.get(e,function(e,t,n){e||200!==t.statusCode?r(e):(e="data:"+t.headers["content-type"]+";base64,"+new Buffer(n).toString("base64"),i(e))})})}},emailFile:{check:new simpl_schema_1.default({id_file:{type:String},email:{type:String},additional_message:{type:String}}),function:function(t,c,l){var e=this;return new Promise(function(o,s){return __awaiter(e,void 0,void 0,function(){var i,r=this;return __generator(this,function(e){switch(e.label){case 0:return[4,file_collection_1.Files.findById(t)];case 1:return(i=e.sent())?this.callMethodInternal("getSignedUrl",i.key,259200,function(e,t){var n;t?(i.size<5e6?(n="Attached is the file requested for email.\n"+(""!==l?"\nAdditional Message:\n"+l+"\n":""),r.sendEmail(c,resolveio_server_app_1.ResolveIOServer.getClientName()+" File - "+i.name,n,"",[{filename:i.name,path:t}],null,"")):(n="Please click the link to the requested file.\n"+(""!==l?"\nAdditional Message:\n"+l+"\n":""),r.sendEmail(c,resolveio_server_app_1.ResolveIOServer.getClientName()+" File - "+i.name,n+t,"",null,null,"")),o(!0)):s("Could not get file URL")}):s("Could not find file"),[2]}})})})}}})}exports.loadAWSMethods=loadAWSMethods;
2
2
  //# sourceMappingURL=aws.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/methods/aws.ts"],"names":["file_collection_1","require","simpl_schema_1","resolveio_server_app_1","client_s3_1","s3_request_presigner_1","common_1","request","defaults","encoding","fs","pdfCnt","loadAWSMethods","methodManager","methods","uploadFileAndSave","check","default","fileName","type","String","fileData","fileSize","Number","fileOrder","fileType","compress","Boolean","function","_this","this","Promise","resolve","reject","__awaiter","key_1","Date","now","s3_1","getAWS","s3","maxRetries_1","attempt_1","uploadFile_1","putObject","Bucket","process","env","AWS_S3_BUCKET","Key","Body","Buffer","from","replace","split","ACL","ContentType","ContentDisposition","then","res","Files","create","_id","objectIdHexString","__v","name","size","key","order","resFile","catch","errFile","err","backoff","Math","pow","console","warn","concat","setTimeout","Error","message","uploadNonPDFFileAndSave","key_2","uploadNonPDFBufferAndSave","fileDataBuffer","key_3","uploadNonPDFStreamAndSave","key_4","createReadStream","deleteFiles","keys","Array","keys.$","find","$in","files","_a","sent","deleteCnt","length","forEach","file","deleteOne","deleteObject","deleteFile","findOne","deleteFileWithId","id_file","getSignedUrlsAndFilesWithId","ids","ids.$","expires","_c","i","getCommand","GetObjectCommand","_b","push","getSignedUrl","expiresIn","apply","fileArray","map","a","getSignedUrlWithId","getSignedUrlUSEast1BucketAndKey","bucket","s3USEast1","getSignedUrls","getDataURIfromURL","url","get","error","response","body","statusCode","data","headers","toString","emailFile","email","additional_message","findById","callMethodInternal","errPDF","resPDF","emailMessage","sendEmail","ResolveIOServer","getClientName","filename","path","exports"],"mappings":"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","file":"aws.js","sourcesContent":["import { AWS, MethodManager } from '../managers/method.manager';\nimport { Files } from '../collections/file.collection';\nimport SimpleSchema from 'simpl-schema';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { GetObjectCommand } from '@aws-sdk/client-s3';\nimport { getSignedUrl } from '@aws-sdk/s3-request-presigner';\nimport { objectIdHexString } from '../util/common';\n\nlet request = require('request').defaults({ encoding: null });\nlet fs = require('fs');\nlet pdfCnt = 1000000;\n\nexport function loadAWSMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\tuploadFileAndSave: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tfileName: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfileData: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfileSize: {\n\t\t\t\t\ttype: Number\n\t\t\t\t},\n\t\t\t\tfileOrder: {\n\t\t\t\t\ttype: Number\n\t\t\t\t},\n\t\t\t\tfileType: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tcompress: {\n\t\t\t\t\ttype: Boolean\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(fileName: string, fileData: string, fileSize: number, fileOrder: number, fileType: string, compress: Boolean) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tif (fileName) {\n\t\t\t\t\t\tlet key = 'uploads/' + Date.now() + '-' + (pdfCnt++) + '-' + fileName;\n\t\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\t\tconst maxRetries = 3;\n\t\t\t\t\t\tlet attempt = 0;\n\n\t\t\t\t\t\tconst uploadFile = () => {\n\t\t\t\t\t\t\ts3.putObject({\n\t\t\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET,\n\t\t\t\t\t\t\t\tKey: key,\n\t\t\t\t\t\t\t\tBody: Buffer.from(fileData.replace('data:' + fileData.split(',')[0].split(':')[1].split(';')[0] + ';base64,', ''), 'base64'), \n\t\t\t\t\t\t\t\tACL: 'private', \n\t\t\t\t\t\t\t\tContentType: fileData.split(',')[0].split(':')[1].split(';')[0], \n\t\t\t\t\t\t\t\tContentDisposition: 'inline'\n\t\t\t\t\t\t\t}).then(res => {\n\t\t\t\t\t\t\t\tif (res) {\n\t\t\t\t\t\t\t\t\tFiles.create({\n\t\t\t\t\t\t\t\t\t\t_id: objectIdHexString(), __v: 0, name: fileName, size: fileSize, key: key, order: fileOrder, type: fileType\n\t\t\t\t\t\t\t\t\t}).then(resFile => {\n\t\t\t\t\t\t\t\t\t\tresolve(resFile);\n\t\t\t\t\t\t\t\t\t}).catch(errFile => {\n\t\t\t\t\t\t\t\t\t\treject(errFile);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tresolve(null);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}).catch(err => {\n\t\t\t\t\t\t\t\tattempt++;\n\t\t\t\t\t\t\t\tif (attempt <= maxRetries) {\n\t\t\t\t\t\t\t\t\tconst backoff = Math.pow(2, attempt) * 1000; // Exponential backoff\n\t\t\t\t\t\t\t\t\tconsole.warn(`Attempt ${attempt} failed. Retrying in ${backoff / 1000} seconds...`);\n\t\t\t\t\t\t\t\t\tsetTimeout(uploadFile, backoff);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treject(new Error(`Failed to upload after ${maxRetries} attempts: ${err.message}`));\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\tuploadFile(); // Start the upload process\n\t\t\t\t\t} else {\n\t\t\t\t\t\treject(new Error(\"Invalid fileName provided\"));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tuploadNonPDFFileAndSave: {\n\t\t\tcheck: new SimpleSchema({\t\n\t\t\t\tfileName: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t},\t\n\t\t\t\tfileData: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t},\t\n\t\t\t\tfileSize: {\t\n\t\t\t\t\ttype: Number\t\n\t\t\t\t},\t\n\t\t\t\tfileOrder: {\t\n\t\t\t\t\ttype: Number\t\n\t\t\t\t},\t\n\t\t\t\tfileType: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t}\t\n\t\t\t}),\t\n\t\t\tfunction: function(fileName: string, fileData: string, fileSize: number, fileOrder: number, fileType: string) {\t\n\t\t\t\treturn new Promise((resolve, reject) => {\t\n\t\t\t\t\tif (fileName) {\t\n\t\t\t\t\t\tlet key = 'uploads/' + Date.now() + '-' + fileName;\t\n\n\t\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\t\ts3.putObject({\n\t\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\t\tKey: key, \n\t\t\t\t\t\t\tBody: Buffer.from(fileData), \n\t\t\t\t\t\t\tACL: 'private', \n\t\t\t\t\t\t\tContentType: 'application/gzip', \n\t\t\t\t\t\t\tContentDisposition: 'inline'\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\tFiles.create({\t\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(), __v: 0, name: fileName, size: fileSize, key: key, order: fileOrder, type: fileType\n\t\t\t\t\t\t\t\t}).then(resFile => {\t\n\t\t\t\t\t\t\t\t\tresolve(resFile);\t\n\t\t\t\t\t\t\t\t}, errFile => reject(errFile));\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\tresolve(null);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, err => {\n\t\t\t\t\t\t\treject(err);\n\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},\n\t\tuploadNonPDFBufferAndSave: {\n\t\t\tcheck: new SimpleSchema({\t\n\t\t\t\tfileName: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t},\t\n\t\t\t\tfileDataBuffer: {\t\n\t\t\t\t\ttype: Buffer\n\t\t\t\t},\t\n\t\t\t\tfileSize: {\t\n\t\t\t\t\ttype: Number\t\n\t\t\t\t},\t\n\t\t\t\tfileOrder: {\t\n\t\t\t\t\ttype: Number\t\n\t\t\t\t},\t\n\t\t\t\tfileType: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t}\t\n\t\t\t}),\t\n\t\t\tfunction: function(fileName: string, fileDataBuffer, fileSize: number, fileOrder: number, fileType: string) {\t\n\t\t\t\treturn new Promise((resolve, reject) => {\t\n\t\t\t\t\tif (fileName) {\t\n\t\t\t\t\t\tlet key = 'uploads/' + Date.now() + '-' + fileName;\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\t\ts3.putObject({\n\t\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\t\tKey: key, \n\t\t\t\t\t\t\tBody: fileDataBuffer, \n\t\t\t\t\t\t\tACL: 'private', \n\t\t\t\t\t\t\tContentType: 'application/gzip', \n\t\t\t\t\t\t\tContentDisposition: 'inline'\n\t\t\t\t\t\t}).then(res => {\t\n\t\t\t\t\t\t\tif (res) {\n\t\t\t\t\t\t\t\tFiles.create({\t\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(), __v: 0, name: fileName, size: fileSize, key: key, order: fileOrder, type: fileType\n\t\t\t\t\t\t\t\t}).then(resFile => {\t\n\t\t\t\t\t\t\t\t\tresolve(resFile);\t\n\t\t\t\t\t\t\t\t}, errFile => reject(errFile));\t\n\t\t\t\t\t\t\t}\t\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tresolve(null);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, err => {\n\t\t\t\t\t\t\treject(err);\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},\n\t\tuploadNonPDFStreamAndSave: {\n\t\t\tcheck: new SimpleSchema({\t\n\t\t\t\tfileName: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t},\t\n\t\t\t\tfileData: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t},\t\n\t\t\t\tfileOrder: {\t\n\t\t\t\t\ttype: Number\t\n\t\t\t\t},\t\n\t\t\t\tfileType: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t}\t\n\t\t\t}),\t\n\t\t\tfunction: function(fileName: string, fileData: string, fileOrder: number, fileType: string) {\t\n\t\t\t\treturn new Promise((resolve, reject) => {\t\n\t\t\t\t\tif (fileName) {\t\n\t\t\t\t\t\tlet key = 'uploads/' + Date.now() + '-' + fileName;\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\t\ts3.putObject({\n\t\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\t\tKey: key, \n\t\t\t\t\t\t\tBody: fs.createReadStream(fileData), \n\t\t\t\t\t\t\tACL: 'private', \n\t\t\t\t\t\t\tContentType: 'application/gzip', \n\t\t\t\t\t\t\tContentDisposition: 'inline'\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\tFiles.create({\t\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(), __v: 0, name: fileName, size: 1, key: key, order: fileOrder, type: fileType\n\t\t\t\t\t\t\t\t}).then(resFile => {\t\n\t\t\t\t\t\t\t\t\tresolve(resFile);\t\n\t\t\t\t\t\t\t\t}, errFile => reject(errFile));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tresolve(null);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, err => {\n\t\t\t\t\t\t\treject(err);\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},\n\t\tdeleteFiles: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tkeys: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'keys.$': {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(keys: string[]) {\t\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet files = await Files.find({key: {$in: keys}});\n\t\t\n\t\t\t\t\tlet deleteCnt = files.length;\n\t\t\n\t\t\t\t\tfiles.forEach(file => {\n\t\t\t\t\t\tFiles.deleteOne({_id: file._id});\n\t\t\t\t\t\t\n\t\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\t\ts3.deleteObject({\n\t\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\t\tKey: file.key\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\tdeleteCnt--;\n\t\t\t\t\t\t\t\tif (!deleteCnt) {\n\t\t\t\t\t\t\t\t\tresolve(files.length);\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\t\tdeleteFile: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tkey: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(key: string) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\n\t\t\t\t\tlet file = await Files.findOne({key: key});\n\t\t\n\t\t\t\t\tif (file) {\n\t\t\t\t\t\tFiles.deleteOne({_id: file._id});\n\t\t\t\t\t}\n\n\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\ts3.deleteObject({\n\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET,\n\t\t\t\t\t\tKey: key\n\t\t\t\t\t}).then(res => {\n\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tdeleteFileWithId: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_file: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(id_file: string) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\n\t\t\t\t\tlet file = await Files.findOne({_id: id_file});\n\t\t\n\t\t\t\t\tif (!file) {\n\t\t\t\t\t\treject('Could not find file');\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\ts3.deleteObject({\n\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET,\n\t\t\t\t\t\tKey: file.key\n\t\t\t\t\t}).then(res => {\n\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\n\t\t\t\t\tFiles.deleteOne({_id: file._id});\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tgetSignedUrlsAndFilesWithId: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tids: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'ids.$': {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\texpires: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(ids: string[], expires: number) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet res = [];\n\t\t\t\t\tlet fileArray = [];\n\n\t\t\t\t\tlet files = await Files.find({_id: {$in: ids}});\n\t\t\t\t\t\n\t\t\t\t\tfor (let i = 0; i < files.length; i++) {\n\t\t\t\t\t\tlet file = files[i];\n\t\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\t\tlet getCommand = new GetObjectCommand({\n\t\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\t\tKey: file.key\n\t\t\t\t\t\t});\n\t\t\t\t\t\tres.push(await getSignedUrl(s3, getCommand, {expiresIn: expires}));\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tresolve({res: res, fileArray: files.map(a => a.name)});\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tgetSignedUrlWithId: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_file: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\texpires: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(id_file: string, expires: number) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet file = await Files.findOne({_id: id_file});\n\n\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\tlet getCommand = new GetObjectCommand({\n\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\tKey: file.key\n\t\t\t\t\t});\n\t\t\t\t\tgetSignedUrl(s3, getCommand, {expiresIn: expires}).then(res => {\n\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tgetSignedUrlUSEast1BucketAndKey: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tbucket: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tkey: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\texpires: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(bucket: string, key: string, expires: number) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3USEast1();\n\t\t\t\t\tlet getCommand = new GetObjectCommand({\n\t\t\t\t\t\tBucket: bucket, \n\t\t\t\t\t\tKey: key\n\t\t\t\t\t});\n\t\t\t\t\tgetSignedUrl(s3, getCommand, {expiresIn: expires}).then(res => {\n\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tgetSignedUrl: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tkey: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\texpires: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(key: string, expires: number) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\tlet getCommand = new GetObjectCommand({\n\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\tKey: key\n\t\t\t\t\t});\n\t\t\t\t\tgetSignedUrl(s3, getCommand, {expiresIn: expires}).then(res => {\n\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tgetSignedUrls: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tkeys: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'keys.$': {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\texpires: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(keys: string[], expires: number) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet res = [];\n\n\t\t\t\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\t\t\t\tlet key = keys[i];\n\t\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\t\tlet getCommand = new GetObjectCommand({\n\t\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\t\tKey: key\n\t\t\t\t\t\t});\n\t\t\t\t\t\tres.push(await getSignedUrl(s3, getCommand, {expiresIn: expires}));\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(res);\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tgetDataURIfromURL: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\turl: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(url: string) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\trequest.get(url, function (error, response, body) {\n\t\t\t\t\t\tif (!error && response.statusCode === 200) {\n\t\t\t\t\t\t\tlet data = 'data:' + response.headers['content-type'] + ';base64,' + new Buffer(body).toString('base64');\n\t\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(error);\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\temailFile: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_file: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\temail: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n additional_message: {\n type: String\n }\n\t\t\t}),\n\t\t\tfunction: function(id_file: string, email: string, additional_message) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet file = await Files.findById(id_file);\n\n\t\t\t\t\tif (!file) {\n\t\t\t\t\t\treject('Could not find file');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.callMethodInternal('getSignedUrl', file.key, 259200, (errPDF, resPDF) => {\n\t\t\t\t\t\tif (resPDF) {\n\t\t\t\t\t\t\tif (file.size < 5000000) {\n\t\t\t\t\t\t\t\tlet emailMessage = 'Attached is the file requested for email.\\n' + (additional_message !== '' ? '\\nAdditional Message:\\n' + additional_message + '\\n' : '') ;\n\n\t\t\t\t\t\t\t\tthis.sendEmail(email, ResolveIOServer.getClientName() + ' File - ' + file.name, emailMessage, '', [{\n\t\t\t\t\t\t\t\t\tfilename: file.name,\n\t\t\t\t\t\t\t\t\tpath: resPDF\n\t\t\t\t\t\t\t\t}], null, '');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tlet emailMessage = 'Please click the link to the requested file.\\n' + (additional_message !== '' ? '\\nAdditional Message:\\n' + additional_message + '\\n' : '') ;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tthis.sendEmail(email, ResolveIOServer.getClientName() + ' File - ' + file.name, emailMessage + resPDF, '', null, null, '');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject('Could not get file URL');\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}"]}
1
+ {"version":3,"sources":["../../src/methods/aws.ts"],"names":["file_collection_1","require","simpl_schema_1","resolveio_server_app_1","client_s3_1","s3_request_presigner_1","common_1","request","defaults","encoding","fs","pdfCnt","loadAWSMethods","methodManager","methods","uploadFileAndSave","check","default","fileName","type","String","fileData","fileSize","Number","fileOrder","fileType","compress","Boolean","function","_this","this","Promise","resolve","reject","__awaiter","key_1","Date","now","s3_1","getAWS","s3","maxRetries_1","attempt_1","uploadFile_1","putObject","Bucket","process","env","AWS_S3_BUCKET","Key","Body","Buffer","from","replace","split","ACL","ContentType","ContentDisposition","then","res","Files","create","_id","objectIdHexString","__v","name","size","key","order","resFile","catch","errFile","err","backoff","Math","pow","console","warn","concat","setTimeout","Error","message","uploadNonPDFFileAndSave","key_2","uploadNonPDFBufferAndSave","fileDataBuffer","key_3","uploadNonPDFStreamAndSave","key_4","createReadStream","deleteFiles","keys","Array","keys.$","find","$in","files","_a","sent","deleteCnt","length","forEach","file","deleteOne","deleteObject","e","deleteFile","findOne","deleteFileWithId","id_file","getSignedUrlsAndFilesWithId","ids","ids.$","expires","_c","i","getCommand","GetObjectCommand","_b","push","getSignedUrl","expiresIn","apply","fileArray","map","a","getSignedUrlWithId","getSignedUrlUSEast1BucketAndKey","bucket","s3USEast1","getSignedUrls","getDataURIfromURL","url","get","error","response","body","statusCode","data","headers","toString","emailFile","email","additional_message","findById","callMethodInternal","errPDF","resPDF","emailMessage","sendEmail","ResolveIOServer","getClientName","filename","path","exports"],"mappings":"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","file":"aws.js","sourcesContent":["import { AWS, MethodManager } from '../managers/method.manager';\nimport { Files } from '../collections/file.collection';\nimport SimpleSchema from 'simpl-schema';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { GetObjectCommand } from '@aws-sdk/client-s3';\nimport { getSignedUrl } from '@aws-sdk/s3-request-presigner';\nimport { objectIdHexString } from '../util/common';\n\nlet request = require('request').defaults({ encoding: null });\nlet fs = require('fs');\nlet pdfCnt = 1000000;\n\nexport function loadAWSMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\tuploadFileAndSave: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tfileName: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfileData: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfileSize: {\n\t\t\t\t\ttype: Number\n\t\t\t\t},\n\t\t\t\tfileOrder: {\n\t\t\t\t\ttype: Number\n\t\t\t\t},\n\t\t\t\tfileType: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tcompress: {\n\t\t\t\t\ttype: Boolean\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(fileName: string, fileData: string, fileSize: number, fileOrder: number, fileType: string, compress: Boolean) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tif (fileName) {\n\t\t\t\t\t\tlet key = 'uploads/' + Date.now() + '-' + (pdfCnt++) + '-' + fileName;\n\t\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\t\tconst maxRetries = 3;\n\t\t\t\t\t\tlet attempt = 0;\n\n\t\t\t\t\t\tconst uploadFile = () => {\n\t\t\t\t\t\t\ts3.putObject({\n\t\t\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET,\n\t\t\t\t\t\t\t\tKey: key,\n\t\t\t\t\t\t\t\tBody: Buffer.from(fileData.replace('data:' + fileData.split(',')[0].split(':')[1].split(';')[0] + ';base64,', ''), 'base64'), \n\t\t\t\t\t\t\t\tACL: 'private', \n\t\t\t\t\t\t\t\tContentType: fileData.split(',')[0].split(':')[1].split(';')[0], \n\t\t\t\t\t\t\t\tContentDisposition: 'inline'\n\t\t\t\t\t\t\t}).then(res => {\n\t\t\t\t\t\t\t\tif (res) {\n\t\t\t\t\t\t\t\t\tFiles.create({\n\t\t\t\t\t\t\t\t\t\t_id: objectIdHexString(), __v: 0, name: fileName, size: fileSize, key: key, order: fileOrder, type: fileType\n\t\t\t\t\t\t\t\t\t}).then(resFile => {\n\t\t\t\t\t\t\t\t\t\tresolve(resFile);\n\t\t\t\t\t\t\t\t\t}).catch(errFile => {\n\t\t\t\t\t\t\t\t\t\treject(errFile);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tresolve(null);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}).catch(err => {\n\t\t\t\t\t\t\t\tattempt++;\n\t\t\t\t\t\t\t\tif (attempt <= maxRetries) {\n\t\t\t\t\t\t\t\t\tconst backoff = Math.pow(2, attempt) * 1000; // Exponential backoff\n\t\t\t\t\t\t\t\t\tconsole.warn(`Attempt ${attempt} failed. Retrying in ${backoff / 1000} seconds...`);\n\t\t\t\t\t\t\t\t\tsetTimeout(uploadFile, backoff);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treject(new Error(`Failed to upload after ${maxRetries} attempts: ${err.message}`));\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\tuploadFile(); // Start the upload process\n\t\t\t\t\t} else {\n\t\t\t\t\t\treject(new Error(\"Invalid fileName provided\"));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tuploadNonPDFFileAndSave: {\n\t\t\tcheck: new SimpleSchema({\t\n\t\t\t\tfileName: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t},\t\n\t\t\t\tfileData: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t},\t\n\t\t\t\tfileSize: {\t\n\t\t\t\t\ttype: Number\t\n\t\t\t\t},\t\n\t\t\t\tfileOrder: {\t\n\t\t\t\t\ttype: Number\t\n\t\t\t\t},\t\n\t\t\t\tfileType: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t}\t\n\t\t\t}),\t\n\t\t\tfunction: function(fileName: string, fileData: string, fileSize: number, fileOrder: number, fileType: string) {\t\n\t\t\t\treturn new Promise((resolve, reject) => {\t\n\t\t\t\t\tif (fileName) {\t\n\t\t\t\t\t\tlet key = 'uploads/' + Date.now() + '-' + fileName;\t\n\n\t\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\t\ts3.putObject({\n\t\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\t\tKey: key, \n\t\t\t\t\t\t\tBody: Buffer.from(fileData), \n\t\t\t\t\t\t\tACL: 'private', \n\t\t\t\t\t\t\tContentType: 'application/gzip', \n\t\t\t\t\t\t\tContentDisposition: 'inline'\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\tFiles.create({\t\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(), __v: 0, name: fileName, size: fileSize, key: key, order: fileOrder, type: fileType\n\t\t\t\t\t\t\t\t}).then(resFile => {\t\n\t\t\t\t\t\t\t\t\tresolve(resFile);\t\n\t\t\t\t\t\t\t\t}, errFile => reject(errFile));\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\tresolve(null);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, err => {\n\t\t\t\t\t\t\treject(err);\n\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},\n\t\tuploadNonPDFBufferAndSave: {\n\t\t\tcheck: new SimpleSchema({\t\n\t\t\t\tfileName: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t},\t\n\t\t\t\tfileDataBuffer: {\t\n\t\t\t\t\ttype: Buffer\n\t\t\t\t},\t\n\t\t\t\tfileSize: {\t\n\t\t\t\t\ttype: Number\t\n\t\t\t\t},\t\n\t\t\t\tfileOrder: {\t\n\t\t\t\t\ttype: Number\t\n\t\t\t\t},\t\n\t\t\t\tfileType: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t}\t\n\t\t\t}),\t\n\t\t\tfunction: function(fileName: string, fileDataBuffer, fileSize: number, fileOrder: number, fileType: string) {\t\n\t\t\t\treturn new Promise((resolve, reject) => {\t\n\t\t\t\t\tif (fileName) {\t\n\t\t\t\t\t\tlet key = 'uploads/' + Date.now() + '-' + fileName;\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\t\ts3.putObject({\n\t\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\t\tKey: key, \n\t\t\t\t\t\t\tBody: fileDataBuffer, \n\t\t\t\t\t\t\tACL: 'private', \n\t\t\t\t\t\t\tContentType: 'application/gzip', \n\t\t\t\t\t\t\tContentDisposition: 'inline'\n\t\t\t\t\t\t}).then(res => {\t\n\t\t\t\t\t\t\tif (res) {\n\t\t\t\t\t\t\t\tFiles.create({\t\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(), __v: 0, name: fileName, size: fileSize, key: key, order: fileOrder, type: fileType\n\t\t\t\t\t\t\t\t}).then(resFile => {\t\n\t\t\t\t\t\t\t\t\tresolve(resFile);\t\n\t\t\t\t\t\t\t\t}, errFile => reject(errFile));\t\n\t\t\t\t\t\t\t}\t\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tresolve(null);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, err => {\n\t\t\t\t\t\t\treject(err);\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},\n\t\tuploadNonPDFStreamAndSave: {\n\t\t\tcheck: new SimpleSchema({\t\n\t\t\t\tfileName: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t},\t\n\t\t\t\tfileData: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t},\t\n\t\t\t\tfileOrder: {\t\n\t\t\t\t\ttype: Number\t\n\t\t\t\t},\t\n\t\t\t\tfileType: {\t\n\t\t\t\t\ttype: String\t\n\t\t\t\t}\t\n\t\t\t}),\t\n\t\t\tfunction: function(fileName: string, fileData: string, fileOrder: number, fileType: string) {\t\n\t\t\t\treturn new Promise((resolve, reject) => {\t\n\t\t\t\t\tif (fileName) {\t\n\t\t\t\t\t\tlet key = 'uploads/' + Date.now() + '-' + fileName;\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\t\ts3.putObject({\n\t\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\t\tKey: key, \n\t\t\t\t\t\t\tBody: fs.createReadStream(fileData), \n\t\t\t\t\t\t\tACL: 'private', \n\t\t\t\t\t\t\tContentType: 'application/gzip', \n\t\t\t\t\t\t\tContentDisposition: 'inline'\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\tFiles.create({\t\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(), __v: 0, name: fileName, size: 1, key: key, order: fileOrder, type: fileType\n\t\t\t\t\t\t\t\t}).then(resFile => {\t\n\t\t\t\t\t\t\t\t\tresolve(resFile);\t\n\t\t\t\t\t\t\t\t}, errFile => reject(errFile));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tresolve(null);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, err => {\n\t\t\t\t\t\t\treject(err);\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},\n\t\tdeleteFiles: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tkeys: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'keys.$': {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(keys: string[]) {\t\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet files = await Files.find({key: {$in: keys}});\n\t\t\n\t\t\t\t\tlet deleteCnt = files.length;\n\t\t\n\t\t\t\t\tfiles.forEach(file => {\n\t\t\t\t\t\tFiles.deleteOne({_id: file._id});\n\t\t\t\t\t\t\n\t\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\t\ts3.deleteObject({\n\t\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\t\tKey: file.key\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\tdeleteCnt--;\n\t\t\t\t\t\t\t\tif (!deleteCnt) {\n\t\t\t\t\t\t\t\t\tresolve(files.length);\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\tresolve(true);\n\t\t\t\t\t\t}, (e) => reject(e));\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tdeleteFile: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tkey: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(key: string) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\n\t\t\t\t\tlet file = await Files.findOne({key: key});\n\t\t\n\t\t\t\t\tif (file) {\n\t\t\t\t\t\tFiles.deleteOne({_id: file._id});\n\t\t\t\t\t}\n\n\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\ts3.deleteObject({\n\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET,\n\t\t\t\t\t\tKey: key\n\t\t\t\t\t}).then(res => {\n\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tdeleteFileWithId: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_file: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(id_file: string) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\n\t\t\t\t\tlet file = await Files.findOne({_id: id_file});\n\t\t\n\t\t\t\t\tif (!file) {\n\t\t\t\t\t\treject('Could not find file');\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\ts3.deleteObject({\n\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET,\n\t\t\t\t\t\tKey: file.key\n\t\t\t\t\t}).then(res => {\n\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\n\t\t\t\t\tFiles.deleteOne({_id: file._id});\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tgetSignedUrlsAndFilesWithId: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tids: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'ids.$': {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\texpires: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(ids: string[], expires: number) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet res = [];\n\t\t\t\t\tlet fileArray = [];\n\n\t\t\t\t\tlet files = await Files.find({_id: {$in: ids}});\n\t\t\t\t\t\n\t\t\t\t\tfor (let i = 0; i < files.length; i++) {\n\t\t\t\t\t\tlet file = files[i];\n\t\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\t\tlet getCommand = new GetObjectCommand({\n\t\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\t\tKey: file.key\n\t\t\t\t\t\t});\n\t\t\t\t\t\tres.push(await getSignedUrl(s3, getCommand, {expiresIn: expires}));\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tresolve({res: res, fileArray: files.map(a => a.name)});\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tgetSignedUrlWithId: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_file: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\texpires: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(id_file: string, expires: number) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet file = await Files.findOne({_id: id_file});\n\n\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\tlet getCommand = new GetObjectCommand({\n\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\tKey: file.key\n\t\t\t\t\t});\n\t\t\t\t\tgetSignedUrl(s3, getCommand, {expiresIn: expires}).then(res => {\n\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tgetSignedUrlUSEast1BucketAndKey: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tbucket: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tkey: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\texpires: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(bucket: string, key: string, expires: number) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3USEast1();\n\t\t\t\t\tlet getCommand = new GetObjectCommand({\n\t\t\t\t\t\tBucket: bucket, \n\t\t\t\t\t\tKey: key\n\t\t\t\t\t});\n\t\t\t\t\tgetSignedUrl(s3, getCommand, {expiresIn: expires}).then(res => {\n\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tgetSignedUrl: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tkey: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\texpires: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(key: string, expires: number) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\tlet getCommand = new GetObjectCommand({\n\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\tKey: key\n\t\t\t\t\t});\n\t\t\t\t\tgetSignedUrl(s3, getCommand, {expiresIn: expires}).then(res => {\n\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tgetSignedUrls: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tkeys: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'keys.$': {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\texpires: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(keys: string[], expires: number) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet res = [];\n\n\t\t\t\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\t\t\t\tlet key = keys[i];\n\t\t\t\t\t\tlet s3 = (<AWS>this.getAWS()).s3();\n\t\t\t\t\t\tlet getCommand = new GetObjectCommand({\n\t\t\t\t\t\t\tBucket: process.env.AWS_S3_BUCKET, \n\t\t\t\t\t\t\tKey: key\n\t\t\t\t\t\t});\n\t\t\t\t\t\tres.push(await getSignedUrl(s3, getCommand, {expiresIn: expires}));\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(res);\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tgetDataURIfromURL: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\turl: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(url: string) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\trequest.get(url, function (error, response, body) {\n\t\t\t\t\t\tif (!error && response.statusCode === 200) {\n\t\t\t\t\t\t\tlet data = 'data:' + response.headers['content-type'] + ';base64,' + new Buffer(body).toString('base64');\n\t\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(error);\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\temailFile: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_file: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\temail: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n additional_message: {\n type: String\n }\n\t\t\t}),\n\t\t\tfunction: function(id_file: string, email: string, additional_message) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet file = await Files.findById(id_file);\n\n\t\t\t\t\tif (!file) {\n\t\t\t\t\t\treject('Could not find file');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.callMethodInternal('getSignedUrl', file.key, 259200, (errPDF, resPDF) => {\n\t\t\t\t\t\tif (resPDF) {\n\t\t\t\t\t\t\tif (file.size < 5000000) {\n\t\t\t\t\t\t\t\tlet emailMessage = 'Attached is the file requested for email.\\n' + (additional_message !== '' ? '\\nAdditional Message:\\n' + additional_message + '\\n' : '') ;\n\n\t\t\t\t\t\t\t\tthis.sendEmail(email, ResolveIOServer.getClientName() + ' File - ' + file.name, emailMessage, '', [{\n\t\t\t\t\t\t\t\t\tfilename: file.name,\n\t\t\t\t\t\t\t\t\tpath: resPDF\n\t\t\t\t\t\t\t\t}], null, '');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tlet emailMessage = 'Please click the link to the requested file.\\n' + (additional_message !== '' ? '\\nAdditional Message:\\n' + additional_message + '\\n' : '') ;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tthis.sendEmail(email, ResolveIOServer.getClientName() + ' File - ' + file.name, emailMessage + resPDF, '', null, null, '');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject('Could not get file URL');\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}"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@resolveio/server-lib",
3
- "version": "20.5.6",
3
+ "version": "20.5.8",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "package": "./build_package.sh",
package/server-app.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var __awaiter=this&&this.__awaiter||function(e,o,s,n){return new(s=s||Promise)(function(t,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){var r;e.done?t(e.value):((r=e.value)instanceof s?r:new s(function(e){e(r)})).then(fulfilled,rejected)}step((n=n.apply(e,o||[])).next())})},__generator=this&&this.__generator||function(o,s){var n,i,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[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 r=[t,e];if(n)throw new TypeError("Generator is already executing.");for(;l=c&&r[c=0]?0:l;)try{if(n=1,i&&(a=2&r[0]?i.return:r[0]?i.throw||((a=i.return)&&a.call(i),0):i.next)&&!(a=a.call(i,r[1])).done)return a;switch(i=0,(r=a?[2&r[0],a.value]:r)[0]){case 0:case 1:a=r;break;case 4:return l.label++,{value:r[1],done:!1};case 5:l.label++,i=r[1],r=[0];continue;case 7:r=l.ops.pop(),l.trys.pop();continue;default:if(!(a=0<(a=l.trys).length&&a[a.length-1])&&(6===r[0]||2===r[0])){l=0;continue}if(3===r[0]&&(!a||r[1]>a[0]&&r[1]<a[3]))l.label=r[1];else if(6===r[0]&&l.label<a[1])l.label=a[1],a=r;else{if(!(a&&l.label<a[2])){a[2]&&l.ops.pop(),l.trys.pop();continue}l.label=a[2],l.ops.push(r)}}r=s.call(o,l)}catch(e){r=[6,e],i=0}finally{n=a=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}}},__values=this&&this.__values||function(e){var r="function"==typeof Symbol&&Symbol.iterator,t=r&&e[r],o=0;if(t)return t.call(e);if(e&&"number"==typeof e.length)return{next:function(){return{value:(e=e&&o>=e.length?void 0:e)&&e[o++],done:!e}}};throw new TypeError(r?"Object is not iterable.":"Symbol.iterator is not defined.")},__read=this&&this.__read||function(e,r){var t="function"==typeof Symbol&&e[Symbol.iterator];if(!t)return e;var o,s,n=t.call(e),i=[];try{for(;(void 0===r||0<r--)&&!(o=n.next()).done;)i.push(o.value)}catch(e){s={error:e}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(s)throw s.error}}return i},__spreadArray=this&&this.__spreadArray||function(e,r,t){if(t||2===arguments.length)for(var o,s=0,n=r.length;s<n;s++)!o&&s in r||((o=o||Array.prototype.slice.call(r,0,s))[s]=r[s]);return e.concat(o||Array.prototype.slice.call(r))},http_1=(Object.defineProperty(exports,"__esModule",{value:!0}),exports.ResolveIOMainServer=void 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"),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"),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"),mongodb_1=require("mongodb"),worker_task_request_collection_1=require("./collections/worker-task-request.collection"),worker_task_response_collection_1=require("./collections/worker-task-response.collection"),websocket_manager_1=require("./managers/websocket.manager"),resolveio_server_app_1=require("./resolveio-server-app"),ResolveIOMainServer=function(){function ResolveIOMainServer(){this._offlineUpdates=[],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._isWorkersEnabled=!1,this._isWorkerInstance=!1,this._workerTasks=[],this._safeShutdown=!1,this._serverStartTime=new Date,this._lastErrorMsg=null,this._monitorManager=new monitor_manager_1.MonitorManager,this._monitorManagerFunction=new monitor_manager_1.MonitorManagerFunction}return ResolveIOMainServer.prototype.initServerApp=function(){var e=this;this._isWorkersEnabled="true"===process.env.IS_WORKERS_ENABLED,this._isWorkerInstance="true"===process.env.IS_WORKER_INSTANCE,setInterval(function(){e._subscriptionManager&&e._subscriptionManager.getEnableDebug()&&(console.log(new Date,"Server App","Msg Recv Hits",e._debugMsgRecv),console.log(new Date,"Server App","Msg Queue Hits",e._debugMsgQueue)),e._debugMsgQueue=0,e._debugMsgRecv=0},6e4),process.on("unhandledRejection",function(o,s){return __awaiter(e,void 0,void 0,function(){var r,t=this;return __generator(this,function(e){switch(e.label){case 0:return o&&"MongoError"===o.name&&48===o.code?[2]:(console.error(new Date,"Unhandled Rejection at Promise",[o,s]),r=moment().diff(this._serverStartTime,"seconds"),o&&("MongoNetworkTimeoutError"===o.name||o instanceof mongodb_1.MongoNetworkTimeoutError)?60<r&&!this._lastErrorMsg?(this._lastErrorMsg=new Date,setTimeout(function(){t._lastErrorMsg=null},6e4),[4,this._methodManager.sendEmail("dev@resolveio.com","SERVER - MongoNetworkTimeoutError - Quitting NodeJS - "+resolveio_server_app_1.ResolveIOServer.getServerConfig().CLIENT_NAME,JSON.stringify({name:o.name,message:o.message,stack:o.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 o&&"MongoError"===o.name&&"not master"===o.message?60<r&&!this._lastErrorMsg?(this._lastErrorMsg=new Date,setTimeout(function(){t._lastErrorMsg=null},6e4),[4,this._methodManager.sendEmail("dev@resolveio.com","SERVER - Unhandled Rejection - Quitting NodeJS - "+resolveio_server_app_1.ResolveIOServer.getServerConfig().CLIENT_NAME,JSON.stringify([o.name,o.message,o.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 o&&"MongoError"===o.name&&"not master and slaveOk=false"===o.message?60<r&&!this._lastErrorMsg?(this._lastErrorMsg=new Date,setTimeout(function(){t._lastErrorMsg=null},6e4),[4,this._methodManager.sendEmail("dev@resolveio.com","SERVER - Unhandled Rejection - Quitting NodeJS - "+resolveio_server_app_1.ResolveIOServer.getServerConfig().CLIENT_NAME,JSON.stringify([o.name,o.message,o.stack],null,2))]):[3,8]:[3,9];case 7:e.sent(),e.label=8;case 8:return process.exit(1),[3,10];case 9:o&&"StatusError"!==o.name&&""!==o.message&&60<r&&!this._lastErrorMsg&&(this._lastErrorMsg=new Date,setTimeout(function(){t._lastErrorMsg=null},6e4),this._methodManager.sendEmail("dev@resolveio.com","SERVER - Unhandled Rejection - "+resolveio_server_app_1.ResolveIOServer.getServerConfig().CLIENT_NAME,JSON.stringify([o.name,o.message,o.stack],null,2))),e.label=10;case 10:return[2]}})})}),process.on("uncaughtException",function(t){return __awaiter(e,void 0,void 0,function(){var r=this;return __generator(this,function(e){switch(e.label){case 0:return(console.error(t,"Uncaught Exception thrown"),60<moment().diff(this._serverStartTime,"seconds")&&!this._lastErrorMsg)?(this._lastErrorMsg=new Date,setTimeout(function(){r._lastErrorMsg=null},6e4),[4,this._methodManager.sendEmail("dev@resolveio.com","SERVER - Unhandled Exception - "+resolveio_server_app_1.ResolveIOServer.getServerConfig().CLIENT_NAME,JSON.stringify([t.name,t.message,t.stack],null,2))]):[3,2];case 1:e.sent(),e.label=2;case 2:return[2]}})})}),process.on("SIGINT",function(){e._rebootFlag=!0,e._serverHTTP&&e._serverHTTP.close(),e.safeShutdown()}),process.on("SIGTERM",function(){e._rebootFlag=!0,e._serverHTTP&&e._serverHTTP.close(),e.safeShutdown()}),process.on("SIGQUIT",function(){e._rebootFlag=!0,e._serverHTTP&&e._serverHTTP.close(),e.safeShutdown()}),"DEBUG"===this.LOGGER&&console.log("Starting ResolveIO Server"),this._isWorkersEnabled?this._isWorkerInstance?(console.log("Running as a Worker instance"),this._methodManager=new method_manager_1.MethodManager(this._monitorManagerFunction,this._isWorkersEnabled,this._isWorkerInstance),this._cronManager=new cron_manager_1.CronManager,this.startWorkerInstance()):(console.log("Running as a Server instance"),this._websocketManager=new websocket_manager_1.WebSocketManager(this),this.startServerInstance(),this._methodManager=new method_manager_1.MethodManager(this._monitorManagerFunction,this._isWorkersEnabled,this._isWorkerInstance),this._subscriptionManager=new subscription_manager_1.SubscriptionManager(this._serverWSS,resolveio_server_app_1.ResolveIOServer.getServerConfig(),this._monitorManagerFunction),this.listen()):(console.log("Running with Workers Disabled"),this._websocketManager=new websocket_manager_1.WebSocketManager(this),this.startServerInstance(),this._methodManager=new method_manager_1.MethodManager(this._monitorManagerFunction,this._isWorkersEnabled,this._isWorkerInstance),this._subscriptionManager=new subscription_manager_1.SubscriptionManager(this._serverWSS,resolveio_server_app_1.ResolveIOServer.getServerConfig(),this._monitorManagerFunction),this._cronManager=new cron_manager_1.CronManager,this.listen())},ResolveIOMainServer.prototype.startServerInstance=function(){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||resolveio_server_app_1.ResolveIOServer.getServerConfig().PORT_HTTP||8080,this._portWSS=process.env.PORT_WSS||resolveio_server_app_1.ResolveIOServer.getServerConfig().PORT_WSS||8081,"DEBUG"===this.LOGGER&&console.log("Setup ports"),this.createServer(),"DEBUG"===this.LOGGER&&console.log("Create server"),this._app.use(function(e,r,t){r.setHeader("Access-Control-Allow-Origin","*"),r.setHeader("Access-Control-Allow-Methods","GET, POST"),r.setHeader("Access-Control-Allow-Headers","X-Requested-With,content-type"),r.setHeader("Access-Control-Allow-Credentials","false"),t()}),"DEBUG"===this.LOGGER&&console.log("Setup cors"),(0,auth_1.setupAuthRoutes)(this,this._app,resolveio_server_app_1.ResolveIOServer.getServerConfig()),(0,health_1.setupHealthRoutes)(this._app,resolveio_server_app_1.ResolveIOServer.getServerConfig()),"ResolveIO"!==resolveio_server_app_1.ResolveIOServer.getServerConfig().CLIENT_NAME&&!this.standardProgram||(0,home_1.setupHomeRoutes)(this,this._app,resolveio_server_app_1.ResolveIOServer.getServerConfig()),"DEBUG"===this.LOGGER&&console.log("Setup express routes")},ResolveIOMainServer.prototype.startWorkerInstance=function(){return __awaiter(this,void 0,void 0,function(){var r,t,o,s,n,i,a,l=this;return __generator(this,function(e){switch(e.label){case 0:return console.log("Worker instance started, watching worker-task-reqs..."),(r=worker_task_request_collection_1.WorkerTaskRequests.watchCollection([{$match:{"fullDocument.status":"pending"}}],{fullDocument:"updateLookup"})).on("change",function(s){return __awaiter(l,void 0,void 0,function(){var r,t,o=this;return __generator(this,function(e){return"insert"===s.operationType?(r=s.fullDocument)&&setTimeout(function(){o.processTask(r)},25*this._workerTasks.length):"update"===s.operationType&&(t=s.fullDocument)&&"pending"===t.status&&setTimeout(function(){o.processTask(t)},25*this._workerTasks.length),[2]})})}),r.on("error",function(e){console.error("Error in change stream worker task requests:",e),r&&r.close()}),r.on("close",function(){console.log("Change stream worker task requests closed. Restarting..."),setTimeout(function(){return l.startWorkerInstance()},5e3)}),[4,worker_task_request_collection_1.WorkerTaskRequests.find({status:"pending"},{sort:{createdAt:1}})];case 1:t=e.sent();try{for(o=__values(t),s=o.next();!s.done;s=o.next())n=s.value,this.processTask(n)}catch(e){i={error:e}}finally{try{s&&!s.done&&(a=o.return)&&a.call(o)}finally{if(i)throw i.error}}return[2]}})})},ResolveIOMainServer.prototype.processTask=function(s){return __awaiter(this,void 0,void 0,function(){var r=this;return __generator(this,function(e){return this._workerTasks.includes(s._id)||worker_task_request_collection_1.WorkerTaskRequests.updateOne({_id:s._id,status:"pending"},{$set:{status:"processing"}}).then(function(o){return __awaiter(r,void 0,void 0,function(){var r,t;return __generator(this,function(e){switch(e.label){case 0:if(!o)return[3,5];this._workerTasks.push(s._id),e.label=1;case 1:return e.trys.push([1,3,,4]),[4,(t=this._methodManager.callMethodInternal).call.apply(t,__spreadArray([Object.assign({},this._methodManager,method_manager_1.MethodManager.prototype,{id_user:s.id_user,user:s.user,id_ws:s.id_ws}),s.method],__read(s.params),!1))];case 2:return t=e.sent(),worker_task_response_collection_1.WorkerTaskResponses.create({id_request:s._id,has_error:!1,data:t,id_user:s.id_user,user:s.user,id_ws:s.id_ws}),[3,4];case 3:return r=e.sent(),console.error("Worker failed to process task:",s._id,r),worker_task_response_collection_1.WorkerTaskResponses.create({id_request:s._id,has_error:!0,data:r.message,id_user:s.id_user,user:s.user,id_ws:s.id_ws}),[3,4];case 4:this._workerTasks.includes(s._id)&&this._workerTasks.splice(this._workerTasks.indexOf(s._id),1),worker_task_request_collection_1.WorkerTaskRequests.updateOne({_id:s._id},{$set:{status:"complete"}}),e.label=5;case 5:return[2]}})})},function(){}),[2]})})},ResolveIOMainServer.prototype.safeShutdown=function(){var e=this;this._safeShutdown||console.log(new Date,"Safe Shutdown Command Received"),this._monitorManagerFunction.getActiveMonitorFunctions().length||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._offlineUpdates.length)),setImmediate(function(){e.safeShutdown()})):resolveio_server_app_1.ResolveIOServer.getMongoConnection()?resolveio_server_app_1.ResolveIOServer.getMongoConnection().close(!1).then(function(){console.log(new Date,"Safe Exit Complete, Process Exit"),process.exit(0)},function(){process.exit(1)}):process.exit(0)},ResolveIOMainServer.prototype.getIsWorkersEnabled=function(){return this._isWorkersEnabled},ResolveIOMainServer.prototype.getIsWorkerInstance=function(){return this._isWorkerInstance},ResolveIOMainServer.prototype.getWSList=function(){var r=[];return this._serverWSS.clients.forEach(function(e){r.push(e.id_socket)}),r},ResolveIOMainServer.prototype.getWSUserList=function(){var r=[];return this._serverWSS.clients.forEach(function(e){r.push(e.id_user)}),r},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.getWebSocketManager=function(){return this._websocketManager},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(n,i){return __awaiter(e,void 0,void 0,function(){var r,s=this;return __generator(this,function(e){return this._rebootFlag?i(!1,409,"Unable To Process"):("DEBUG"===this.LOGGER&&console.log("Verify Client",n,i),r=n.req.headers["sec-websocket-protocol"].split(/,/),(n.origin===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||n.origin===resolveio_server_app_1.ResolveIOServer.getServerConfig().SEC_ROOT_URL||n.origin===resolveio_server_app_1.ResolveIOServer.getServerConfig().RESOLVEIO_URL||n.origin===resolveio_server_app_1.ResolveIOServer.getServerConfig().RESOLVEIO_SECONDARY_URL)&&(r=r[0])?jwt.verify(r,resolveio_server_app_1.ResolveIOServer.getServerConfig().JWT_SECRET,function(t,o){return __awaiter(s,void 0,void 0,function(){var r;return __generator(this,function(e){switch(e.label){case 0:return t?(i(!1,401,"Unauthorized"),[3,5]):[3,1];case 1:n.req.id_user=o.id_user,e.label=2;case 2:return e.trys.push([2,4,,5]),[4,user_collection_1.Users.findById(o.id_user)];case 3:return(r=e.sent())?(n.req.user=r.fullname,n.req.user_readonly=r.readonly||!1,n.req.doc_user=r,i(!0)):i(!1),[3,5];case 4:return e.sent(),i(!1),[3,5];case 5:return[2]}})})}):i(!1,401,"Unauthorized")),[2]})})}})},ResolveIOMainServer.prototype.listen=function(){var t=this;this._serverHTTP.listen(this._portHTTP,function(){console.log("Running server on port %s",t._portHTTP)}),this._serverWSS.on("listening",function(){console.log("Running server on port %s",t._portWSS)}),this._serverWSS.on("connection",function(c,e){t.publicProgram||(c.id_user=e.id_user,c.user=e.user,c.user_readonly=e.user_readonly,c.doc_user=e.doc_user,"Admin"!==c.user&&"ResolveIO"!==resolveio_server_app_1.ResolveIOServer.getServerConfig().CLIENT_NAME&&t.getMethodManager().callMethodInternal.call(t.getMethodManager(),"supportCreateBillingUser",{id_user:c.id_user,user:c.user,date:new Date,client:resolveio_server_app_1.ResolveIOServer.getClientName()})),c.id_socket=(0,common_1.objectIdHexString)(),c.retryCnt=0,t._websocketManager.addWebSocket(c),t._subscriptionManager.createLoggedInUser(c.id_socket).then(function(){setTimeout(function(){c.pingTime=new Date,c.send("ping",function(e){e&&(t._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","Error WS Ping"),t.unsubscribeWS(c))})},5e3)}),"DEBUG"===t.LOGGER&&console.log("Connection from: "+e.user),c.isAlive=!0,c.on("message",function(l){return __awaiter(t,void 0,void 0,function(){var r,t,o,s,n,i,a=this;return __generator(this,function(e){switch(e.label){case 0:"DEBUG"===this.LOGGER&&console.log("Message from: "+c.user,l),this._debugMsgRecv+=1,s=!1,r=[];try{r=JSON.parse(l,common_1.dateReviver)}catch(e){console.log("Error - JSON.parse",l),this._methodManager.sendEmail("dev@resolveio.com","SERVER - JSON Parse Error - "+resolveio_server_app_1.ResolveIOServer.getServerConfig().CLIENT_NAME,JSON.stringify([l,e])),s=!0}if(s)return[3,8];if("string"==typeof r&&"ping"===r)c&&c.readyState===c.OPEN&&c.send("pong",function(e){e&&(a._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","Error WS Pong"),a.unsubscribeWS(c))});else if("string"==typeof r&&"pong"===r)c.isAlive=!0,c.pongTime=new Date,c.latency=moment.duration(moment(c.pongTime).diff(c.pingTime)).asMilliseconds(),this._subscriptionManager.loggedInLatency(c);else{if(Array.isArray(r[0]))return[3,1];console.log("Invalid message format, expected array:",r)}return[2];case 1:e.trys.push([1,6,7,8]),t=__values(r),o=t.next(),e.label=2;case 2:return o.done?[3,5]:(s=o.value,[4,this.processSocketMessage(c,s)]);case 3:e.sent(),e.label=4;case 4:return o=t.next(),[3,2];case 5:return[3,8];case 6:return n=e.sent(),n={error:n},[3,8];case 7:try{o&&!o.done&&(i=t.return)&&i.call(t)}finally{if(n)throw n.error}return[7];case 8:return[2]}})})}).on("end",function(){t.unsubscribeWS(c),t._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","WS End")}).on("close",function(){t.unsubscribeWS(c),t._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","WS Close")}).on("error",function(e){t.unsubscribeWS(c),t._subscriptionManager.getEnableDebug()&&console.log(new Date,c.user,c.id_socket,"WS Error")})}),setInterval(function(){t._serverWSS.clients.forEach(function(r){r.pingTime&&2e4<=Date.now()-r.pingTime.getTime()&&(!1===r.isAlive?(r.retryCnt++,3<=r.retryCnt?t.unsubscribeWS(r):(r.pingTime=new Date,r.send("ping",function(e){e&&(t._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","Error WS Ping"),t.unsubscribeWS(r))}))):(r.retryCnt=0,r.isAlive=!1,r.pingTime=new Date,r.send("ping",function(e){e&&(t._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","Error WS Ping"),t.unsubscribeWS(r))})))})},2e4)},ResolveIOMainServer.prototype.processSocketMessage=function(f,m){return __awaiter(this,void 0,void 0,function(){var r,t,o,s,n,i,a,l,c,u,_,g,d,p,h,v;return __generator(this,function(e){switch(e.label){case 0:return(r=m[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)?(a=m[1],t=m[2],"subscription"!==(o=m[3])?[3,1]:(i=m[4],l=m[5],"sub"===i?this._subscriptionManager.subscribe(r,a,f,t,l,m.slice(6)):this._subscriptionManager.unsubscribe(r,a,f,t,l,m.slice(6)),[3,11])):[2];case 1:if(this.publicProgram||"offline"!==o)return[3,10];p={messageId:t,hasError:!1,data:"ACK"},f&&f.readyState===f.OPEN&&this._websocketManager.send(f,p),this._offlineUpdates.push(f),s=m[4],n=0,e.label=2;case 2:if(!(n<s.length))return[3,9];if(i=s[n],c=i.data,c.shift(),c.shift(),a=c.shift(),c.shift(),g=c.shift(),d=(0,common_1.objectIdHexString)(),l={messageId:a,hasError:!1,data:"ACK"},f&&f.readyState===f.OPEN&&this._websocketManager.send(f,l),"insertDocument"===g&&"driver-gps"===c[0])return[3,8];if("https://resolveio.com"!==resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL&&"http://localhost:4200"!==resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL?resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({type:"log-method-latency",date:new Date,data:{_id:d,__v:0,date_start:new Date,date_end:null,latency_ms:0,method:g}}):log_method_latency_collection_1.LogMethodLatencies.create({_id:d,__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,common_1.objectIdHexString)(),type:"client-request",collection:"",id_document:"",payload:(0,common_1.getBinarySize)(JSON.stringify(c))<2e5?JSON.stringify(c,null,2):"Too Big",method:g,id_user:f.id_user||"",user:f.user||"",messageId:t,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,method_manager_1.MethodManager.prototype,{id_user:f.id_user,user:f.user,id_ws:f.id_socket}),g],__read(c),!1))];case 4:return e.sent(),[3,6];case 5:return h=e.sent(),console.log(new Date,"Offline Error",JSON.stringify(h,null,2)),[3,6];case 6:return"updateDocumentOffline"!==g&&"updateDocumentPropsOffline"!==g||resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(c[0]),[3,8];case 7:console.log("Offline - Could not find method: "+g),e.label=8;case 8:return n++,[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:if(c=__spreadArray([],__read(m),!1),v=c.shift(),u=c.shift(),_=c.shift(),"method"===c.shift()){if(g=c.shift(),f.user_readonly)return[2];d=(0,common_1.objectIdHexString)(),"https://resolveio.com"!==resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL&&"http://localhost:4200"!==resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL?resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({type:"log-method-latency",date:new Date,data:{_id:d,__v:0,date_start:new Date,date_end:null,latency_ms:0,method:g}}):log_method_latency_collection_1.LogMethodLatencies.create({_id:d,__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,common_1.objectIdHexString)(),type:"client-request",collection:"",id_document:"",payload:(0,common_1.getBinarySize)(JSON.stringify(c))<2e5?JSON.stringify(c,null,2):"Too Big",method:g,id_user:f.id_user||"",user:f.user||"",messageId:_,route:v}),p={messageId:_,hasError:!1,data:"ACK"},f&&f.readyState===f.OPEN&&this._websocketManager.send(f,p),this._methodManager._methods[g]?(v=this._methodManager).callMethod.apply(v,__spreadArray([d,f,u,_,g],__read(c),!1)):console.log("Could not find method: "+g)}e.label=11;case 11:return[2]}})})},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 resolveio_server_app_1.ResolveIOServer.getServerConfig()},ResolveIOMainServer}();exports.ResolveIOMainServer=ResolveIOMainServer;
1
+ "use strict";var __awaiter=this&&this.__awaiter||function(e,o,s,n){return new(s=s||Promise)(function(t,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){var r;e.done?t(e.value):((r=e.value)instanceof s?r:new s(function(e){e(r)})).then(fulfilled,rejected)}step((n=n.apply(e,o||[])).next())})},__generator=this&&this.__generator||function(o,s){var n,i,a,l={label:0,sent:function(){if(1&a[0])throw a[1];return a[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 r=[t,e];if(n)throw new TypeError("Generator is already executing.");for(;l=c&&r[c=0]?0:l;)try{if(n=1,i&&(a=2&r[0]?i.return:r[0]?i.throw||((a=i.return)&&a.call(i),0):i.next)&&!(a=a.call(i,r[1])).done)return a;switch(i=0,(r=a?[2&r[0],a.value]:r)[0]){case 0:case 1:a=r;break;case 4:return l.label++,{value:r[1],done:!1};case 5:l.label++,i=r[1],r=[0];continue;case 7:r=l.ops.pop(),l.trys.pop();continue;default:if(!(a=0<(a=l.trys).length&&a[a.length-1])&&(6===r[0]||2===r[0])){l=0;continue}if(3===r[0]&&(!a||r[1]>a[0]&&r[1]<a[3]))l.label=r[1];else if(6===r[0]&&l.label<a[1])l.label=a[1],a=r;else{if(!(a&&l.label<a[2])){a[2]&&l.ops.pop(),l.trys.pop();continue}l.label=a[2],l.ops.push(r)}}r=s.call(o,l)}catch(e){r=[6,e],i=0}finally{n=a=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}}},__values=this&&this.__values||function(e){var r="function"==typeof Symbol&&Symbol.iterator,t=r&&e[r],o=0;if(t)return t.call(e);if(e&&"number"==typeof e.length)return{next:function(){return{value:(e=e&&o>=e.length?void 0:e)&&e[o++],done:!e}}};throw new TypeError(r?"Object is not iterable.":"Symbol.iterator is not defined.")},__read=this&&this.__read||function(e,r){var t="function"==typeof Symbol&&e[Symbol.iterator];if(!t)return e;var o,s,n=t.call(e),i=[];try{for(;(void 0===r||0<r--)&&!(o=n.next()).done;)i.push(o.value)}catch(e){s={error:e}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(s)throw s.error}}return i},__spreadArray=this&&this.__spreadArray||function(e,r,t){if(t||2===arguments.length)for(var o,s=0,n=r.length;s<n;s++)!o&&s in r||((o=o||Array.prototype.slice.call(r,0,s))[s]=r[s]);return e.concat(o||Array.prototype.slice.call(r))},http_1=(Object.defineProperty(exports,"__esModule",{value:!0}),exports.ResolveIOMainServer=void 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"),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"),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"),mongodb_1=require("mongodb"),worker_task_request_collection_1=require("./collections/worker-task-request.collection"),worker_task_response_collection_1=require("./collections/worker-task-response.collection"),websocket_manager_1=require("./managers/websocket.manager"),resolveio_server_app_1=require("./resolveio-server-app"),ResolveIOMainServer=function(){function ResolveIOMainServer(){this._offlineUpdates=[],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._isWorkersEnabled=!1,this._isWorkerInstance=!1,this._workerTasks=[],this._safeShutdown=!1,this._serverStartTime=new Date,this._lastErrorMsg=null,this._monitorManager=new monitor_manager_1.MonitorManager,this._monitorManagerFunction=new monitor_manager_1.MonitorManagerFunction}return ResolveIOMainServer.prototype.initServerApp=function(){var e=this;this._isWorkersEnabled="true"===process.env.IS_WORKERS_ENABLED,this._isWorkerInstance="true"===process.env.IS_WORKER_INSTANCE,setInterval(function(){e._subscriptionManager&&e._subscriptionManager.getEnableDebug()&&(console.log(new Date,"Server App","Msg Recv Hits",e._debugMsgRecv),console.log(new Date,"Server App","Msg Queue Hits",e._debugMsgQueue)),e._debugMsgQueue=0,e._debugMsgRecv=0},6e4),process.on("unhandledRejection",function(o,s){return __awaiter(e,void 0,void 0,function(){var r,t=this;return __generator(this,function(e){switch(e.label){case 0:return o&&"MongoError"===o.name&&48===o.code?[2]:(console.error(new Date,"Unhandled Rejection at Promise",[o,s]),r=moment().diff(this._serverStartTime,"seconds"),o&&("MongoNetworkTimeoutError"===o.name||o instanceof mongodb_1.MongoNetworkTimeoutError)?60<r&&!this._lastErrorMsg?(this._lastErrorMsg=new Date,setTimeout(function(){t._lastErrorMsg=null},6e4),[4,this._methodManager.sendEmail("dev@resolveio.com","SERVER - MongoNetworkTimeoutError - Quitting NodeJS - "+resolveio_server_app_1.ResolveIOServer.getServerConfig().CLIENT_NAME,JSON.stringify({name:o.name,message:o.message,stack:o.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 o&&"MongoError"===o.name&&"not master"===o.message?60<r&&!this._lastErrorMsg?(this._lastErrorMsg=new Date,setTimeout(function(){t._lastErrorMsg=null},6e4),[4,this._methodManager.sendEmail("dev@resolveio.com","SERVER - Unhandled Rejection - Quitting NodeJS - "+resolveio_server_app_1.ResolveIOServer.getServerConfig().CLIENT_NAME,JSON.stringify([o.name,o.message,o.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 o&&"MongoError"===o.name&&"not master and slaveOk=false"===o.message?60<r&&!this._lastErrorMsg?(this._lastErrorMsg=new Date,setTimeout(function(){t._lastErrorMsg=null},6e4),[4,this._methodManager.sendEmail("dev@resolveio.com","SERVER - Unhandled Rejection - Quitting NodeJS - "+resolveio_server_app_1.ResolveIOServer.getServerConfig().CLIENT_NAME,JSON.stringify([o.name,o.message,o.stack],null,2))]):[3,8]:[3,9];case 7:e.sent(),e.label=8;case 8:return process.exit(1),[3,10];case 9:o&&"StatusError"!==o.name&&""!==o.message&&60<r&&!this._lastErrorMsg&&(this._lastErrorMsg=new Date,setTimeout(function(){t._lastErrorMsg=null},6e4),this._methodManager.sendEmail("dev@resolveio.com","SERVER - Unhandled Rejection - "+resolveio_server_app_1.ResolveIOServer.getServerConfig().CLIENT_NAME,JSON.stringify([o.name,o.message,o.stack],null,2))),e.label=10;case 10:return[2]}})})}),process.on("uncaughtException",function(t){return __awaiter(e,void 0,void 0,function(){var r=this;return __generator(this,function(e){switch(e.label){case 0:return(console.error(t,"Uncaught Exception thrown"),60<moment().diff(this._serverStartTime,"seconds")&&!this._lastErrorMsg)?(this._lastErrorMsg=new Date,setTimeout(function(){r._lastErrorMsg=null},6e4),[4,this._methodManager.sendEmail("dev@resolveio.com","SERVER - Unhandled Exception - "+resolveio_server_app_1.ResolveIOServer.getServerConfig().CLIENT_NAME,JSON.stringify([t.name,t.message,t.stack],null,2))]):[3,2];case 1:e.sent(),e.label=2;case 2:return[2]}})})}),process.on("SIGINT",function(){e._rebootFlag=!0,e._serverHTTP&&e._serverHTTP.close(),e.safeShutdown()}),process.on("SIGTERM",function(){e._rebootFlag=!0,e._serverHTTP&&e._serverHTTP.close(),e.safeShutdown()}),process.on("SIGQUIT",function(){e._rebootFlag=!0,e._serverHTTP&&e._serverHTTP.close(),e.safeShutdown()}),"DEBUG"===this.LOGGER&&console.log("Starting ResolveIO Server"),this._isWorkersEnabled?this._isWorkerInstance?(console.log("Running as a Worker instance"),this._methodManager=new method_manager_1.MethodManager(this._monitorManagerFunction,this._isWorkersEnabled,this._isWorkerInstance),this._cronManager=new cron_manager_1.CronManager,this.startWorkerInstance()):(console.log("Running as a Server instance"),this._websocketManager=new websocket_manager_1.WebSocketManager(this),this.startServerInstance(),this._methodManager=new method_manager_1.MethodManager(this._monitorManagerFunction,this._isWorkersEnabled,this._isWorkerInstance),this._subscriptionManager=new subscription_manager_1.SubscriptionManager(this._serverWSS,resolveio_server_app_1.ResolveIOServer.getServerConfig(),this._monitorManagerFunction),this.listen()):(console.log("Running with Workers Disabled"),this._websocketManager=new websocket_manager_1.WebSocketManager(this),this.startServerInstance(),this._methodManager=new method_manager_1.MethodManager(this._monitorManagerFunction,this._isWorkersEnabled,this._isWorkerInstance),this._subscriptionManager=new subscription_manager_1.SubscriptionManager(this._serverWSS,resolveio_server_app_1.ResolveIOServer.getServerConfig(),this._monitorManagerFunction),this._cronManager=new cron_manager_1.CronManager,this.listen())},ResolveIOMainServer.prototype.startServerInstance=function(){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||resolveio_server_app_1.ResolveIOServer.getServerConfig().PORT_HTTP||8080,this._portWSS=process.env.PORT_WSS||resolveio_server_app_1.ResolveIOServer.getServerConfig().PORT_WSS||8081,"DEBUG"===this.LOGGER&&console.log("Setup ports"),this.createServer(),"DEBUG"===this.LOGGER&&console.log("Create server"),this._app.use(function(e,r,t){r.setHeader("Access-Control-Allow-Origin","*"),r.setHeader("Access-Control-Allow-Methods","GET, POST"),r.setHeader("Access-Control-Allow-Headers","X-Requested-With,content-type"),r.setHeader("Access-Control-Allow-Credentials","false"),t()}),"DEBUG"===this.LOGGER&&console.log("Setup cors"),(0,auth_1.setupAuthRoutes)(this,this._app,resolveio_server_app_1.ResolveIOServer.getServerConfig()),(0,health_1.setupHealthRoutes)(this._app,resolveio_server_app_1.ResolveIOServer.getServerConfig()),"ResolveIO"!==resolveio_server_app_1.ResolveIOServer.getServerConfig().CLIENT_NAME&&!this.standardProgram||(0,home_1.setupHomeRoutes)(this,this._app,resolveio_server_app_1.ResolveIOServer.getServerConfig()),"DEBUG"===this.LOGGER&&console.log("Setup express routes")},ResolveIOMainServer.prototype.startWorkerInstance=function(){return __awaiter(this,void 0,void 0,function(){var r,t,o,s,n,i,a,l=this;return __generator(this,function(e){switch(e.label){case 0:return console.log("Worker instance started, watching worker-task-reqs..."),(r=worker_task_request_collection_1.WorkerTaskRequests.watchCollection([{$match:{"fullDocument.status":"pending"}}],{fullDocument:"updateLookup"})).on("change",function(s){return __awaiter(l,void 0,void 0,function(){var r,t,o=this;return __generator(this,function(e){return"insert"===s.operationType?(r=s.fullDocument)&&setTimeout(function(){o.processTask(r)},25*this._workerTasks.length):"update"===s.operationType&&(t=s.fullDocument)&&"pending"===t.status&&setTimeout(function(){o.processTask(t)},25*this._workerTasks.length),[2]})})}),r.on("error",function(e){console.error("Error in change stream worker task requests:",e),r&&r.close()}),r.on("close",function(){console.log("Change stream worker task requests closed. Restarting..."),setTimeout(function(){return l.startWorkerInstance()},5e3)}),[4,worker_task_request_collection_1.WorkerTaskRequests.find({status:"pending"},{sort:{createdAt:1}})];case 1:t=e.sent();try{for(o=__values(t),s=o.next();!s.done;s=o.next())n=s.value,this.processTask(n)}catch(e){i={error:e}}finally{try{s&&!s.done&&(a=o.return)&&a.call(o)}finally{if(i)throw i.error}}return[2]}})})},ResolveIOMainServer.prototype.processTask=function(a){return __awaiter(this,void 0,void 0,function(){var r=this;return __generator(this,function(e){return this._workerTasks.includes(a._id)||worker_task_request_collection_1.WorkerTaskRequests.updateOne({_id:a._id,status:"pending"},{$set:{status:"processing"}}).then(function(i){return __awaiter(r,void 0,void 0,function(){var r,t,o,s,n=this;return __generator(this,function(e){switch(e.label){case 0:if(!i)return[3,4];this._workerTasks.push(a._id),r=!1,t=setTimeout(function(){r=!0,console.error("Worker timed out processing task:",a._id),worker_task_response_collection_1.WorkerTaskResponses.create({id_request:a._id,has_error:!0,data:"Task timed out.",id_user:a.id_user,user:a.user,id_ws:a.id_ws}),n._workerTasks.includes(a._id)&&n._workerTasks.splice(n._workerTasks.indexOf(a._id),1),worker_task_request_collection_1.WorkerTaskRequests.updateOne({_id:a._id},{$set:{status:"timeout"}})},12e4),e.label=1;case 1:return e.trys.push([1,3,,4]),[4,(s=this._methodManager.callMethodInternal).call.apply(s,__spreadArray([Object.assign({},this._methodManager,method_manager_1.MethodManager.prototype,{id_user:a.id_user,user:a.user,id_ws:a.id_ws}),a.method],__read(a.params),!1))];case 2:return s=e.sent(),r||(clearTimeout(t),worker_task_response_collection_1.WorkerTaskResponses.create({id_request:a._id,has_error:!1,data:s,id_user:a.id_user,user:a.user,id_ws:a.id_ws}),this._workerTasks.includes(a._id)&&this._workerTasks.splice(this._workerTasks.indexOf(a._id),1),worker_task_request_collection_1.WorkerTaskRequests.updateOne({_id:a._id},{$set:{status:"complete"}})),[3,4];case 3:return o=e.sent(),r||(clearTimeout(t),console.error("Worker failed to process task:",a._id,o),worker_task_response_collection_1.WorkerTaskResponses.create({id_request:a._id,has_error:!0,data:o.message,id_user:a.id_user,user:a.user,id_ws:a.id_ws}),this._workerTasks.includes(a._id)&&this._workerTasks.splice(this._workerTasks.indexOf(a._id),1),worker_task_request_collection_1.WorkerTaskRequests.updateOne({_id:a._id},{$set:{status:"complete"}})),[3,4];case 4:return[2]}})})},function(){}),[2]})})},ResolveIOMainServer.prototype.safeShutdown=function(){var e=this;this._safeShutdown||console.log(new Date,"Safe Shutdown Command Received"),this._monitorManagerFunction.getActiveMonitorFunctions().length||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._offlineUpdates.length)),setImmediate(function(){e.safeShutdown()})):resolveio_server_app_1.ResolveIOServer.getMongoConnection()?resolveio_server_app_1.ResolveIOServer.getMongoConnection().close(!1).then(function(){console.log(new Date,"Safe Exit Complete, Process Exit"),process.exit(0)},function(){process.exit(1)}):process.exit(0)},ResolveIOMainServer.prototype.getIsWorkersEnabled=function(){return this._isWorkersEnabled},ResolveIOMainServer.prototype.getIsWorkerInstance=function(){return this._isWorkerInstance},ResolveIOMainServer.prototype.getWSList=function(){var r=[];return this._serverWSS.clients.forEach(function(e){r.push(e.id_socket)}),r},ResolveIOMainServer.prototype.getWSUserList=function(){var r=[];return this._serverWSS.clients.forEach(function(e){r.push(e.id_user)}),r},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.getWebSocketManager=function(){return this._websocketManager},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(n,i){return __awaiter(e,void 0,void 0,function(){var r,s=this;return __generator(this,function(e){return this._rebootFlag?i(!1,409,"Unable To Process"):("DEBUG"===this.LOGGER&&console.log("Verify Client",n,i),r=n.req.headers["sec-websocket-protocol"].split(/,/),(n.origin===resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL||n.origin===resolveio_server_app_1.ResolveIOServer.getServerConfig().SEC_ROOT_URL||n.origin===resolveio_server_app_1.ResolveIOServer.getServerConfig().RESOLVEIO_URL||n.origin===resolveio_server_app_1.ResolveIOServer.getServerConfig().RESOLVEIO_SECONDARY_URL)&&(r=r[0])?jwt.verify(r,resolveio_server_app_1.ResolveIOServer.getServerConfig().JWT_SECRET,function(t,o){return __awaiter(s,void 0,void 0,function(){var r;return __generator(this,function(e){switch(e.label){case 0:return t?(i(!1,401,"Unauthorized"),[3,5]):[3,1];case 1:n.req.id_user=o.id_user,e.label=2;case 2:return e.trys.push([2,4,,5]),[4,user_collection_1.Users.findById(o.id_user)];case 3:return(r=e.sent())?(n.req.user=r.fullname,n.req.user_readonly=r.readonly||!1,n.req.doc_user=r,i(!0)):i(!1),[3,5];case 4:return e.sent(),i(!1),[3,5];case 5:return[2]}})})}):i(!1,401,"Unauthorized")),[2]})})}})},ResolveIOMainServer.prototype.listen=function(){var t=this;this._serverHTTP.listen(this._portHTTP,function(){console.log("Running server on port %s",t._portHTTP)}),this._serverWSS.on("listening",function(){console.log("Running server on port %s",t._portWSS)}),this._serverWSS.on("connection",function(c,e){t.publicProgram||(c.id_user=e.id_user,c.user=e.user,c.user_readonly=e.user_readonly,c.doc_user=e.doc_user,"Admin"!==c.user&&"ResolveIO"!==resolveio_server_app_1.ResolveIOServer.getServerConfig().CLIENT_NAME&&t.getMethodManager().callMethodInternal.call(t.getMethodManager(),"supportCreateBillingUser",{id_user:c.id_user,user:c.user,date:new Date,client:resolveio_server_app_1.ResolveIOServer.getClientName()})),c.id_socket=(0,common_1.objectIdHexString)(),c.retryCnt=0,t._websocketManager.addWebSocket(c),t._subscriptionManager.createLoggedInUser(c.id_socket).then(function(){setTimeout(function(){c.pingTime=new Date,c.send("ping",function(e){e&&(t._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","Error WS Ping"),t.unsubscribeWS(c))})},5e3)}),"DEBUG"===t.LOGGER&&console.log("Connection from: "+e.user),c.isAlive=!0,c.on("message",function(l){return __awaiter(t,void 0,void 0,function(){var r,t,o,s,n,i,a=this;return __generator(this,function(e){switch(e.label){case 0:"DEBUG"===this.LOGGER&&console.log("Message from: "+c.user,l),this._debugMsgRecv+=1,s=!1,r=[];try{r=JSON.parse(l,common_1.dateReviver)}catch(e){console.log("Error - JSON.parse",l),this._methodManager.sendEmail("dev@resolveio.com","SERVER - JSON Parse Error - "+resolveio_server_app_1.ResolveIOServer.getServerConfig().CLIENT_NAME,JSON.stringify([l,e])),s=!0}if(s)return[3,8];if("string"==typeof r&&"ping"===r)c&&c.readyState===c.OPEN&&c.send("pong",function(e){e&&(a._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","Error WS Pong"),a.unsubscribeWS(c))});else if("string"==typeof r&&"pong"===r)c.isAlive=!0,c.pongTime=new Date,c.latency=moment.duration(moment(c.pongTime).diff(c.pingTime)).asMilliseconds(),this._subscriptionManager.loggedInLatency(c);else{if(Array.isArray(r[0]))return[3,1];console.log("Invalid message format, expected array:",r)}return[2];case 1:e.trys.push([1,6,7,8]),t=__values(r),o=t.next(),e.label=2;case 2:return o.done?[3,5]:(s=o.value,[4,this.processSocketMessage(c,s)]);case 3:e.sent(),e.label=4;case 4:return o=t.next(),[3,2];case 5:return[3,8];case 6:return n=e.sent(),n={error:n},[3,8];case 7:try{o&&!o.done&&(i=t.return)&&i.call(t)}finally{if(n)throw n.error}return[7];case 8:return[2]}})})}).on("end",function(){t.unsubscribeWS(c),t._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","WS End")}).on("close",function(){t.unsubscribeWS(c),t._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","WS Close")}).on("error",function(e){t.unsubscribeWS(c),t._subscriptionManager.getEnableDebug()&&console.log(new Date,c.user,c.id_socket,"WS Error")})}),setInterval(function(){t._serverWSS.clients.forEach(function(r){r.pingTime&&2e4<=Date.now()-r.pingTime.getTime()&&(!1===r.isAlive?(r.retryCnt++,3<=r.retryCnt?t.unsubscribeWS(r):(r.pingTime=new Date,r.send("ping",function(e){e&&(t._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","Error WS Ping"),t.unsubscribeWS(r))}))):(r.retryCnt=0,r.isAlive=!1,r.pingTime=new Date,r.send("ping",function(e){e&&(t._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","Error WS Ping"),t.unsubscribeWS(r))})))})},2e4)},ResolveIOMainServer.prototype.processSocketMessage=function(f,m){return __awaiter(this,void 0,void 0,function(){var r,t,o,s,n,i,a,l,c,u,_,g,d,p,h,v;return __generator(this,function(e){switch(e.label){case 0:return(r=m[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)?(a=m[1],t=m[2],"subscription"!==(o=m[3])?[3,1]:(i=m[4],l=m[5],"sub"===i?this._subscriptionManager.subscribe(r,a,f,t,l,m.slice(6)):this._subscriptionManager.unsubscribe(r,a,f,t,l,m.slice(6)),[3,11])):[2];case 1:if(this.publicProgram||"offline"!==o)return[3,10];p={messageId:t,hasError:!1,data:"ACK"},f&&f.readyState===f.OPEN&&this._websocketManager.send(f,p),this._offlineUpdates.push(f),s=m[4],n=0,e.label=2;case 2:if(!(n<s.length))return[3,9];if(i=s[n],c=i.data,c.shift(),c.shift(),a=c.shift(),c.shift(),g=c.shift(),d=(0,common_1.objectIdHexString)(),l={messageId:a,hasError:!1,data:"ACK"},f&&f.readyState===f.OPEN&&this._websocketManager.send(f,l),"insertDocument"===g&&"driver-gps"===c[0])return[3,8];if("https://resolveio.com"!==resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL&&"http://localhost:4200"!==resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL?resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({type:"log-method-latency",date:new Date,data:{_id:d,__v:0,date_start:new Date,date_end:null,latency_ms:0,method:g}}):log_method_latency_collection_1.LogMethodLatencies.create({_id:d,__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,common_1.objectIdHexString)(),type:"client-request",collection:"",id_document:"",payload:(0,common_1.getBinarySize)(JSON.stringify(c))<2e5?JSON.stringify(c,null,2):"Too Big",method:g,id_user:f.id_user||"",user:f.user||"",messageId:t,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,method_manager_1.MethodManager.prototype,{id_user:f.id_user,user:f.user,id_ws:f.id_socket}),g],__read(c),!1))];case 4:return e.sent(),[3,6];case 5:return h=e.sent(),console.log(new Date,"Offline Error",JSON.stringify(h,null,2)),[3,6];case 6:return"updateDocumentOffline"!==g&&"updateDocumentPropsOffline"!==g||resolveio_server_app_1.ResolveIOServer.getMongoManager().invalidateQueryCache(c[0]),[3,8];case 7:console.log("Offline - Could not find method: "+g),e.label=8;case 8:return n++,[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:if(c=__spreadArray([],__read(m),!1),v=c.shift(),u=c.shift(),_=c.shift(),"method"===c.shift()){if(g=c.shift(),f.user_readonly)return[2];d=(0,common_1.objectIdHexString)(),"https://resolveio.com"!==resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL&&"http://localhost:4200"!==resolveio_server_app_1.ResolveIOServer.getServerConfig().ROOT_URL?resolveio_server_app_1.ResolveIOServer.getLocalLogManager().writeLog({type:"log-method-latency",date:new Date,data:{_id:d,__v:0,date_start:new Date,date_end:null,latency_ms:0,method:g}}):log_method_latency_collection_1.LogMethodLatencies.create({_id:d,__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,common_1.objectIdHexString)(),type:"client-request",collection:"",id_document:"",payload:(0,common_1.getBinarySize)(JSON.stringify(c))<2e5?JSON.stringify(c,null,2):"Too Big",method:g,id_user:f.id_user||"",user:f.user||"",messageId:_,route:v}),p={messageId:_,hasError:!1,data:"ACK"},f&&f.readyState===f.OPEN&&this._websocketManager.send(f,p),this._methodManager._methods[g]?(v=this._methodManager).callMethod.apply(v,__spreadArray([d,f,u,_,g],__read(c),!1)):console.log("Could not find method: "+g)}e.label=11;case 11:return[2]}})})},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 resolveio_server_app_1.ResolveIOServer.getServerConfig()},ResolveIOMainServer}();exports.ResolveIOMainServer=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","cron_manager_1","method_manager_1","subscription_manager_1","monitor_manager_1","log_collection_1","log_method_latency_collection_1","user_collection_1","home_1","auth_1","health_1","mongodb_1","worker_task_request_collection_1","worker_task_response_collection_1","websocket_manager_1","resolveio_server_app_1","ResolveIOMainServer","this","_offlineUpdates","sesMail","standardProgram","publicProgram","_rebootFlag","LOGGER","_clientRoutes","_lastErrorMsg","_debugMsgRecv","_debugMsgQueue","_isWorkersEnabled","_isWorkerInstance","_workerTasks","_safeShutdown","_serverStartTime","Date","_monitorManager","MonitorManager","_monitorManagerFunction","MonitorManagerFunction","prototype","initServerApp","_this","process","env","IS_WORKERS_ENABLED","IS_WORKER_INSTANCE","setInterval","_subscriptionManager","getEnableDebug","console","log","on","error","rej","__awaiter","diffTimeSec","diff","MongoNetworkTimeoutError","setTimeout","_methodManager","sendEmail","ResolveIOServer","getServerConfig","JSON","stringify","name","message","stack","_a","sent","exit","_serverHTTP","close","safeShutdown","MethodManager","_cronManager","CronManager","startWorkerInstance","_websocketManager","WebSocketManager","startServerInstance","SubscriptionManager","_serverWSS","listen","_app","use","json","limit","reviver","dateReviver","urlencoded","extended","parameterLimit","_portHTTP","PORT_HTTP","_portWSS","PORT_WSS","createServer","req","res","next","setHeader","setupAuthRoutes","setupHealthRoutes","setupHomeRoutes","changeStream","WorkerTaskRequests","watchCollection","$match","fullDocument.status","fullDocument","change","operationType","task_1","processTask","length","task_2","status","find","sort","createdAt","pendingTasks","_b","pendingTasks_1","__values","pendingTasks_1_1","done","task","value","includes","_id","updateOne","$set","then","resReq","push","callMethodInternal","call","apply","__spreadArray","Object","assign","id_user","user","id_ws","method","__read","params","result","WorkerTaskResponses","create","id_request","has_error","data","err_1","splice","indexOf","getActiveMonitorFunctions","setImmediate","getMongoConnection","getIsWorkersEnabled","getIsWorkerInstance","getWSList","clients","forEach","ws","getWSUserList","getHTTPServer","getCronManager","getMethodManager","getSubscriptionManager","getMonitorManager","getRebootFlag","getWebSocketManager","keepAliveTimeout","headersTimeout","Server","port","verifyClient","info","cb","infoData","headers","split","origin","token","verify","err","decoded","Users","findById","fullname","readonly","date","client","getClientName","objectIdHexString","addWebSocket","createLoggedInUser","send","unsubscribeWS","parseErrorFound","socketData","parse","e","readyState","OPEN","duration","asMilliseconds","loggedInLatency","Array","isArray","socketData_1","socketData_1_1","message_1","processSocketMessage","now","getTime","messageRoute","some","a","roles","groups","views","b","super_admin","messageDate","messageId","type","subType","pub","subscribe","slice","unsubscribe","serverRes","hasError","offlineUpdates","i","update","shift","updateMessageId","methodLatencyId","serverResMethod","getLocalLogManager","writeLog","__v","date_start","date_end","latency_ms","LogMethodLatencies","Logs","insertOne","collection","id_document","payload","getBinarySize","route","_methods","_c","err_3","getMongoManager","invalidateQueryCache","map","messageRoute_1","messageDate_1","messageId_1","callMethod","unsubscribeAll","removeAllListeners","getApp","exports"],"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';\nimport { dateReviver, getBinarySize, objectIdHexString } from './util/common';\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';\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 { MongoNetworkTimeoutError } from 'mongodb';\nimport { WorkerTaskRequests } from './collections/worker-task-request.collection';\nimport { WorkerTaskResponses } from './collections/worker-task-response.collection';\nimport { WorkerTaskRequestModel } from './models/worker-task-request.model';\nimport { WebSocketManager } from './managers/websocket.manager';\nimport { ResolveIOServer } from './resolveio-server-app';\n\nexport 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 _offlineUpdates = [];\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 _websocketManager: WebSocketManager;\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 _isWorkersEnabled = false;\n\tprivate _isWorkerInstance = false;\n\tprivate _workerTasks: string[] = [];\n\n\tprivate _safeShutdown = false;\n\n\tconstructor() {\n\t\tthis._serverStartTime = new Date();\n\t\tthis._lastErrorMsg = null;\n\t\tthis._monitorManager = new MonitorManager();\n\t\tthis._monitorManagerFunction = new MonitorManagerFunction();\n\t}\n\n\tinitServerApp() {\n\t\t// Check for workers and decide what to start\n\t\tthis._isWorkersEnabled = process.env.IS_WORKERS_ENABLED === 'true';\n\t\tthis._isWorkerInstance = process.env.IS_WORKER_INSTANCE === 'true';\n\n\t\tsetInterval(() => {\n\t\t\tif (this._subscriptionManager && this._subscriptionManager.getEnableDebug()) {\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\t// if (error && error['name'] === 'MongoServerError') {\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 - ' + ResolveIOServer.getServerConfig()['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 - ' + ResolveIOServer.getServerConfig()['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 - ' + ResolveIOServer.getServerConfig()['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 - ' + ResolveIOServer.getServerConfig()['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 - ' + ResolveIOServer.getServerConfig()['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\tif (this._serverHTTP) {\n\t\t\t\tthis._serverHTTP.close();\n\t\t\t}\n\t\t\tthis.safeShutdown();\n\t\t});\n\n\t\tprocess.on('SIGTERM', () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\tif (this._serverHTTP) {\n\t\t\t\tthis._serverHTTP.close();\n\t\t\t}\n\t\t\tthis.safeShutdown();\n\t\t});\n\n\t\tprocess.on('SIGQUIT', () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\tif (this._serverHTTP) {\n\t\t\t\tthis._serverHTTP.close();\n\t\t\t}\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 if (this._isWorkersEnabled) {\n if (this._isWorkerInstance) {\n console.log('Running as a Worker instance');\n\t\t\t\tthis._methodManager = new MethodManager(this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n this._cronManager = new CronManager();\n\t\t\t\tthis.startWorkerInstance();\n }\n\t\t\telse {\n console.log('Running as a Server instance');\n\t\t\t\tthis._websocketManager = new WebSocketManager(this);\n this.startServerInstance();\n\t\t\t\tthis._methodManager = new MethodManager(this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n\t\t\t\tthis._subscriptionManager = new SubscriptionManager(this._serverWSS, ResolveIOServer.getServerConfig(), this._monitorManagerFunction);\n\t\t\t\tthis.listen();\n }\n }\n\t\telse {\n console.log('Running with Workers Disabled');\n\t\t\tthis._websocketManager = new WebSocketManager(this);\n this.startServerInstance();\n\t\t\tthis._methodManager = new MethodManager(this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n\t\t\tthis._subscriptionManager = new SubscriptionManager(this._serverWSS, ResolveIOServer.getServerConfig(), this._monitorManagerFunction);\n this._cronManager = new CronManager();\n\t\t\tthis.listen();\n }\n\t}\n\n\tprivate startServerInstance() {\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 || ResolveIOServer.getServerConfig()['PORT_HTTP'] || 8080;\n\t\tthis._portWSS = process.env.PORT_WSS || ResolveIOServer.getServerConfig()['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\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', ResolveIOServer.getServerConfig()['ROOT_URL']);\n\t\t\tres.setHeader('Access-Control-Allow-Origin', '*');\n\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\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\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\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, ResolveIOServer.getServerConfig());\n\t\tsetupHealthRoutes(this._app, ResolveIOServer.getServerConfig());\n\n\t\tif (ResolveIOServer.getServerConfig()['CLIENT_NAME'] === 'ResolveIO' || this.standardProgram) {\n\t\t\tsetupHomeRoutes(this, this._app, ResolveIOServer.getServerConfig());\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 async startWorkerInstance() {\n\t\tconsole.log('Worker instance started, watching worker-task-reqs...');\n\t\n\t\t// Now, set up the change stream to watch for new tasks\n\t\tlet changeStream = WorkerTaskRequests.watchCollection([{ $match: { 'fullDocument.status': 'pending' } }], { fullDocument: 'updateLookup' });\n\t\n\t\tchangeStream.on('change', async (change) => {\n\t\t\tif (change.operationType === 'insert') {\n\t\t\t\tconst task = change.fullDocument;\n\t\t\t\tif (task) {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.processTask(task);\n\t\t\t\t\t}, this._workerTasks.length * 25);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (change.operationType === 'update') {\n\t\t\t\tconst task = change.fullDocument;\n\t\t\t\tif (task && task.status === 'pending') {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.processTask(task);\n\t\t\t\t\t}, this._workerTasks.length * 25);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\n\t\tchangeStream.on('error', (error) => {\n\t\t\tconsole.error('Error in change stream worker task requests:', error);\n\t\t\tif (changeStream) {\n\t\t\t\tchangeStream.close();\n\t\t\t}\n\t\t});\n\t\n\t\tchangeStream.on('close', () => {\n\t\t\tconsole.log('Change stream worker task requests closed. Restarting...');\n\t\t\tsetTimeout(() => this.startWorkerInstance(), 5000); // Restart after a delay\n\t\t});\n\n\t\t// First, process any existing pending tasks in the database\n\t\tconst pendingTasks = await WorkerTaskRequests.find({ status: 'pending' }, {sort: {createdAt: 1}});\n\n\t\tfor (const task of pendingTasks) {\n\t\t\tthis.processTask(task);\n\t\t}\n\t}\n\t\n\t// Process a task (handles both existing and new tasks)\n\tprivate async processTask(task: WorkerTaskRequestModel) {\n\t\tif (this._workerTasks.includes(task._id)) {\n\t\t\treturn;\n\t\t}\n\t\t\t\n\t\tWorkerTaskRequests.updateOne({ _id: task._id, status: 'pending' }, { $set: { status: 'processing' } }).then(async resReq => {\n\t\t\tif (resReq) {\n\t\t\t\tthis._workerTasks.push(task._id);\n\n\t\t\t\ttry {\n\t\t\t\t\t// Run the actual method\n\t\t\t\t\tconst result = await this._methodManager.callMethodInternal.call(Object.assign({}, this._methodManager, MethodManager.prototype, { id_user: task.id_user, user: task.user, id_ws: task.id_ws }), task.method, ...task.params);\n\n\t\t\t\t\tWorkerTaskResponses.create({\n\t\t\t\t\t\tid_request: task._id,\n\t\t\t\t\t\thas_error: false,\n\t\t\t\t\t\tdata: result,\n\t\t\t\t\t\tid_user: task.id_user,\n\t\t\t\t\t\tuser: task.user,\n\t\t\t\t\t\tid_ws: task.id_ws\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tconsole.error('Worker failed to process task:', task._id, err);\n\n\t\t\t\t\tWorkerTaskResponses.create({\n\t\t\t\t\t\tid_request: task._id,\n\t\t\t\t\t\thas_error: true,\n\t\t\t\t\t\tdata: err.message,\n\t\t\t\t\t\tid_user: task.id_user,\n\t\t\t\t\t\tuser: task.user,\n\t\t\t\t\t\tid_ws: task.id_ws\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (this._workerTasks.includes(task._id)) {\n\t\t\t\t\tthis._workerTasks.splice(this._workerTasks.indexOf(task._id), 1);\n\t\t\t\t}\n\n\t\t\t\t// Mark the task as complete\n\t\t\t\tWorkerTaskRequests.updateOne({ _id: task._id }, { $set: { status: 'complete' } });\n\n\t\t\t\t// console.log(new Date(), 'Instance: ' + process.env.NODE_APP_INSTANCE, 'Complete Task', 'Current Jobs: ' + this._workerTasks.length);\n\t\t\t}\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._offlineUpdates.length\n\t\t) {\n\t\t\tif (ResolveIOServer.getMongoConnection()) {\n\t\t\t\tResolveIOServer.getMongoConnection().close(false).then(() => {\n\t\t\t\t\tconsole.log(new Date(), 'Safe Exit Complete, Process Exit');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}, () => {process.exit(1)});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tprocess.exit(0);\n\t\t\t}\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._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\tgetIsWorkersEnabled() {\n\t\treturn this._isWorkersEnabled;\n\t}\n\n\tgetIsWorkerInstance() {\n\t\treturn this._isWorkerInstance;\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\tpublic getWebSocketManager(): WebSocketManager {\n\t\treturn this._websocketManager;\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 !== ResolveIOServer.getServerConfig()['ROOT_URL'] && info.origin !== ResolveIOServer.getServerConfig()['SEC_ROOT_URL'] && info.origin !== ResolveIOServer.getServerConfig()['RESOLVEIO_URL'] && info.origin !== ResolveIOServer.getServerConfig()['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, ResolveIOServer.getServerConfig()['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\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' && ResolveIOServer.getServerConfig()['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._websocketManager.addWebSocket(ws);\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.send('ping', (error) => {\n\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\tif (this._subscriptionManager.getEnableDebug()) {\n\t\t\t\t\t\t\t\tconsole.log(new Date(), 'Server App', 'Error WS Ping');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\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('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 - ' + ResolveIOServer.getServerConfig()['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 (typeof socketData === 'string' && socketData === '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\t\t\t\t\telse if (typeof socketData === 'string' && socketData === 'pong') {\n\t\t\t\t\t\tws['isAlive'] = true;\n\t\t\t\t\t\tws['pongTime'] = new Date();\n\t\t\t\t\t\tws['latency'] = moment.duration(moment(ws['pongTime']).diff(ws['pingTime'])).asMilliseconds();\n\t\t\t\t\t\tthis._subscriptionManager.loggedInLatency(ws);\n\t\t\t\t\t\t\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!Array.isArray(socketData[0])) {\n\t\t\t\t\t\t// Not an array, invalid message\n\t\t\t\t\t\tconsole.log('Invalid message format, expected array:', socketData);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfor (let message of socketData) {\n\t\t\t\t\t\t\tawait this.processSocketMessage(ws, message);\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.send('ping', (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 Ping');\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\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.send('ping', (error) => {\n\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\tif (this._subscriptionManager.getEnableDebug()) {\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), 'Server App', 'Error WS Ping');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\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}, 20000);\n\t}\n\n\tprivate async processSocketMessage(ws: WebSocket, socketData: any[]) {\n\t\tlet messageRoute = socketData[0];\n\n\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\treturn;\n\t\t}\n\n\t\tlet messageDate = socketData[1];\n\t\tlet messageId = socketData[2];\n\t\tlet type = socketData[3];\n\n\t\tif (type === 'subscription') {\n\t\t\tlet subType = socketData[4];\n\t\t\tlet pub = socketData[5];\n\n\t\t\t// Subscribe\n\t\t\tif (subType === 'sub') {\n\t\t\t\tthis._subscriptionManager.subscribe(messageRoute, messageDate, ws, messageId, pub, socketData.slice(6));\n\t\t\t}\n\t\t\t// Unsubscribe\n\t\t\telse {\n\t\t\t\tthis._subscriptionManager.unsubscribe(messageRoute, messageDate, ws, messageId, pub, socketData.slice(6));\n\t\t\t}\n\t\t}\n\t\telse if (!this.publicProgram && type === 'offline') {\n\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\tmessageId: messageId,\n\t\t\t\thasError: false,\n\t\t\t\tdata: 'ACK'\n\t\t\t};\n\n\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\tthis._websocketManager.send(ws, serverRes);\n\t\t\t}\n\n\t\t\tthis._offlineUpdates.push(ws);\n\t\t\tlet offlineUpdates = socketData[4];\n\n\t\t\tfor (let i = 0; i < offlineUpdates.length; i++) {\n\t\t\t\tlet update = offlineUpdates[i];\n\n\t\t\t\tlet data = update.data;\n\n\t\t\t\tlet updateRoute = data.shift();\n\t\t\t\tlet updateDate = data.shift();\n\t\t\t\tlet updateMessageId = data.shift();\n\t\t\t\tlet updateType = data.shift();\n\t\t\t\tlet method = data.shift();\n\t\t\t\tlet methodLatencyId = objectIdHexString();\n\n\t\t\t\tlet serverResMethod: ServerResponseModel = {\n\t\t\t\t\tmessageId: updateMessageId,\n\t\t\t\t\thasError: false,\n\t\t\t\t\tdata: 'ACK'\n\t\t\t\t};\n\n\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\tthis._websocketManager.send(ws, serverResMethod);\n\t\t\t\t}\n\n\t\t\t\tif (method === 'insertDocument' && data[0] === 'driver-gps') {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t) {\n\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\ttype: 'log-method-latency',\n\t\t\t\t\t\tdate: new Date(),\n\t\t\t\t\t\tdata: {\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\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tLogMethodLatencies.create({\n\t\t\t\t\t\t_id: methodLatencyId,\n\t\t\t\t\t\t__v: 0,\n\t\t\t\t\t\tdate_start: new Date(),\n\t\t\t\t\t\tdate_end: null,\n\t\t\t\t\t\tlatency_ms: 0,\n\t\t\t\t\t\tmethod: method\n\t\t\t\t\t});\n\t\t\t\t}\n\n\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\tLogs.insertOne({\n\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(data)) < 200000 ? JSON.stringify(data, null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: method,\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\tmessageId: messageId,\n\t\t\t\t\t\troute: messageRoute\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (this._methodManager._methods[method]) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this._methodManager.callMethodInternal.call(Object.assign({}, this._methodManager, MethodManager.prototype, {id_user: ws['id_user'], user: ws['user'], id_ws: ws['id_socket']}), method, ...data);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\tconsole.log(new Date(), 'Offline Error', JSON.stringify(err, null, 2));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (method === 'updateDocumentOffline' || method === 'updateDocumentPropsOffline') {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(data[0]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.log('Offline - Could not find method: ' + method);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._offlineUpdates.splice(this._offlineUpdates.map(a => a['id_socket']).indexOf(ws['id_socket']), 1);\n\t\t}\n\t\telse { //methods\n\t\t\tlet data = [...socketData];\n\t\t\t\n\t\t\tlet messageRoute: string = data.shift();\n\t\t\tlet messageDate: Date = data.shift();\n\t\t\tlet messageId: number = data.shift();\n\t\t\tlet type: string = data.shift();\n\n\t\t\tif (type === 'method') {\n\t\t\t\tlet method = data.shift();\n\n\t\t\t\tif (ws['user_readonly']) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet methodLatencyId = objectIdHexString();\n\n\t\t\t\tif (\n\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t) {\n\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\ttype: 'log-method-latency',\n\t\t\t\t\t\tdate: new Date(),\n\t\t\t\t\t\tdata: {\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\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tLogMethodLatencies.create({\n\t\t\t\t\t\t_id: methodLatencyId,\n\t\t\t\t\t\t__v: 0,\n\t\t\t\t\t\tdate_start: new Date(),\n\t\t\t\t\t\tdate_end: null,\n\t\t\t\t\t\tlatency_ms: 0,\n\t\t\t\t\t\tmethod: method\n\t\t\t\t\t});\n\t\t\t\t}\n\n\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\tLogs.insertOne({\n\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(data)) < 200000 ? JSON.stringify(data, null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: method,\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\tmessageId: messageId,\n\t\t\t\t\t\troute: messageRoute\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\thasError: false,\n\t\t\t\t\tdata: 'ACK'\n\t\t\t\t};\n\n\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\tthis._websocketManager.send(ws, serverRes);\n\t\t\t\t}\n\n\t\t\t\tif (this._methodManager._methods[method]) {\n\t\t\t\t\tthis._methodManager.callMethod(methodLatencyId, ws, messageDate, messageId, method, ...data);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.log('Could not find method: ' + method);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// else if (type === 'methodResponse') {\n\t\t\t// \tlet method = data.shift();\n\n\t\t\t// \tMethodResponses.findOne({ $and: [{ id_user: ws['id_user'] }, { message_id: messageId }, { method: method }, { date: messageDate }] }).then(\n\t\t\t// \t\tres => {\n\t\t\t// \t\t\tif (res) {\n\t\t\t// \t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t// \t\t\t\t\tthis._websocketManager.send(ws, res.response);\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\terr => {}\n\t\t\t// \t);\n\t\t\t// }\n\t\t}\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 ResolveIOServer.getServerConfig();\n\t}\n}"]}
1
+ {"version":3,"sources":["../../src/server-app.ts"],"names":["http_1","require","express","bodyParser","xmlParser","WebSocket","jwt","moment","common_1","cron_manager_1","method_manager_1","subscription_manager_1","monitor_manager_1","log_collection_1","log_method_latency_collection_1","user_collection_1","home_1","auth_1","health_1","mongodb_1","worker_task_request_collection_1","worker_task_response_collection_1","websocket_manager_1","resolveio_server_app_1","ResolveIOMainServer","this","_offlineUpdates","sesMail","standardProgram","publicProgram","_rebootFlag","LOGGER","_clientRoutes","_lastErrorMsg","_debugMsgRecv","_debugMsgQueue","_isWorkersEnabled","_isWorkerInstance","_workerTasks","_safeShutdown","_serverStartTime","Date","_monitorManager","MonitorManager","_monitorManagerFunction","MonitorManagerFunction","prototype","initServerApp","_this","process","env","IS_WORKERS_ENABLED","IS_WORKER_INSTANCE","setInterval","_subscriptionManager","getEnableDebug","console","log","on","error","rej","__awaiter","diffTimeSec","diff","MongoNetworkTimeoutError","setTimeout","_methodManager","sendEmail","ResolveIOServer","getServerConfig","JSON","stringify","name","message","stack","_a","sent","exit","_serverHTTP","close","safeShutdown","MethodManager","_cronManager","CronManager","startWorkerInstance","_websocketManager","WebSocketManager","startServerInstance","SubscriptionManager","_serverWSS","listen","_app","use","json","limit","reviver","dateReviver","urlencoded","extended","parameterLimit","_portHTTP","PORT_HTTP","_portWSS","PORT_WSS","createServer","req","res","next","setHeader","setupAuthRoutes","setupHealthRoutes","setupHomeRoutes","changeStream","WorkerTaskRequests","watchCollection","$match","fullDocument.status","fullDocument","change","operationType","task_1","processTask","length","task_2","status","find","sort","createdAt","pendingTasks","_b","pendingTasks_1","__values","pendingTasks_1_1","done","task","value","includes","_id","updateOne","$set","then","resReq","push","timedOut_1","timeoutHandle","WorkerTaskResponses","create","id_request","has_error","data","id_user","user","id_ws","splice","indexOf","callMethodInternal","call","apply","__spreadArray","Object","assign","method","__read","params","result","clearTimeout","err_1","getActiveMonitorFunctions","setImmediate","getMongoConnection","getIsWorkersEnabled","getIsWorkerInstance","getWSList","clients","forEach","ws","getWSUserList","getHTTPServer","getCronManager","getMethodManager","getSubscriptionManager","getMonitorManager","getRebootFlag","getWebSocketManager","keepAliveTimeout","headersTimeout","Server","port","verifyClient","info","cb","infoData","headers","split","origin","token","verify","err","decoded","Users","findById","fullname","readonly","date","client","getClientName","objectIdHexString","addWebSocket","createLoggedInUser","send","unsubscribeWS","parseErrorFound","socketData","parse","e","readyState","OPEN","duration","asMilliseconds","loggedInLatency","Array","isArray","socketData_1","socketData_1_1","message_1","processSocketMessage","now","getTime","messageRoute","some","a","roles","groups","views","b","super_admin","messageDate","messageId","type","subType","pub","subscribe","slice","unsubscribe","serverRes","hasError","offlineUpdates","i","update","shift","updateMessageId","methodLatencyId","serverResMethod","getLocalLogManager","writeLog","__v","date_start","date_end","latency_ms","LogMethodLatencies","Logs","insertOne","collection","id_document","payload","getBinarySize","route","_methods","_c","err_3","getMongoManager","invalidateQueryCache","map","messageRoute_1","messageDate_1","messageId_1","callMethod","unsubscribeAll","removeAllListeners","getApp","exports"],"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';\nimport { dateReviver, getBinarySize, objectIdHexString } from './util/common';\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';\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 { MongoNetworkTimeoutError } from 'mongodb';\nimport { WorkerTaskRequests } from './collections/worker-task-request.collection';\nimport { WorkerTaskResponses } from './collections/worker-task-response.collection';\nimport { WorkerTaskRequestModel } from './models/worker-task-request.model';\nimport { WebSocketManager } from './managers/websocket.manager';\nimport { ResolveIOServer } from './resolveio-server-app';\n\nexport 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 _offlineUpdates = [];\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 _websocketManager: WebSocketManager;\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 _isWorkersEnabled = false;\n\tprivate _isWorkerInstance = false;\n\tprivate _workerTasks: string[] = [];\n\n\tprivate _safeShutdown = false;\n\n\tconstructor() {\n\t\tthis._serverStartTime = new Date();\n\t\tthis._lastErrorMsg = null;\n\t\tthis._monitorManager = new MonitorManager();\n\t\tthis._monitorManagerFunction = new MonitorManagerFunction();\n\t}\n\n\tinitServerApp() {\n\t\t// Check for workers and decide what to start\n\t\tthis._isWorkersEnabled = process.env.IS_WORKERS_ENABLED === 'true';\n\t\tthis._isWorkerInstance = process.env.IS_WORKER_INSTANCE === 'true';\n\n\t\tsetInterval(() => {\n\t\t\tif (this._subscriptionManager && this._subscriptionManager.getEnableDebug()) {\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\t// if (error && error['name'] === 'MongoServerError') {\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 - ' + ResolveIOServer.getServerConfig()['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 - ' + ResolveIOServer.getServerConfig()['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 - ' + ResolveIOServer.getServerConfig()['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 - ' + ResolveIOServer.getServerConfig()['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 - ' + ResolveIOServer.getServerConfig()['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\tif (this._serverHTTP) {\n\t\t\t\tthis._serverHTTP.close();\n\t\t\t}\n\t\t\tthis.safeShutdown();\n\t\t});\n\n\t\tprocess.on('SIGTERM', () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\tif (this._serverHTTP) {\n\t\t\t\tthis._serverHTTP.close();\n\t\t\t}\n\t\t\tthis.safeShutdown();\n\t\t});\n\n\t\tprocess.on('SIGQUIT', () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\tif (this._serverHTTP) {\n\t\t\t\tthis._serverHTTP.close();\n\t\t\t}\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 if (this._isWorkersEnabled) {\n if (this._isWorkerInstance) {\n console.log('Running as a Worker instance');\n\t\t\t\tthis._methodManager = new MethodManager(this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n this._cronManager = new CronManager();\n\t\t\t\tthis.startWorkerInstance();\n }\n\t\t\telse {\n console.log('Running as a Server instance');\n\t\t\t\tthis._websocketManager = new WebSocketManager(this);\n this.startServerInstance();\n\t\t\t\tthis._methodManager = new MethodManager(this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n\t\t\t\tthis._subscriptionManager = new SubscriptionManager(this._serverWSS, ResolveIOServer.getServerConfig(), this._monitorManagerFunction);\n\t\t\t\tthis.listen();\n }\n }\n\t\telse {\n console.log('Running with Workers Disabled');\n\t\t\tthis._websocketManager = new WebSocketManager(this);\n this.startServerInstance();\n\t\t\tthis._methodManager = new MethodManager(this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n\t\t\tthis._subscriptionManager = new SubscriptionManager(this._serverWSS, ResolveIOServer.getServerConfig(), this._monitorManagerFunction);\n this._cronManager = new CronManager();\n\t\t\tthis.listen();\n }\n\t}\n\n\tprivate startServerInstance() {\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 || ResolveIOServer.getServerConfig()['PORT_HTTP'] || 8080;\n\t\tthis._portWSS = process.env.PORT_WSS || ResolveIOServer.getServerConfig()['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\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', ResolveIOServer.getServerConfig()['ROOT_URL']);\n\t\t\tres.setHeader('Access-Control-Allow-Origin', '*');\n\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\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\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\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, ResolveIOServer.getServerConfig());\n\t\tsetupHealthRoutes(this._app, ResolveIOServer.getServerConfig());\n\n\t\tif (ResolveIOServer.getServerConfig()['CLIENT_NAME'] === 'ResolveIO' || this.standardProgram) {\n\t\t\tsetupHomeRoutes(this, this._app, ResolveIOServer.getServerConfig());\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 async startWorkerInstance() {\n\t\tconsole.log('Worker instance started, watching worker-task-reqs...');\n\t\t\n\t\tlet changeStream = WorkerTaskRequests.watchCollection(\n\t\t\t[{ $match: { 'fullDocument.status': 'pending' } }],\n\t\t\t{ fullDocument: 'updateLookup' }\n\t\t);\n\t\n\t\tchangeStream.on('change', async (change) => {\n\t\t\tif (change.operationType === 'insert') {\n\t\t\t\tconst task = change.fullDocument;\n\t\t\t\tif (task) {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.processTask(task);\n\t\t\t\t\t}, this._workerTasks.length * 25);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (change.operationType === 'update') {\n\t\t\t\tconst task = change.fullDocument;\n\t\t\t\tif (task && task.status === 'pending') {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.processTask(task);\n\t\t\t\t\t}, this._workerTasks.length * 25);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\n\t\tchangeStream.on('error', (error) => {\n\t\t\tconsole.error('Error in change stream worker task requests:', error);\n\t\t\tif (changeStream) {\n\t\t\t\tchangeStream.close();\n\t\t\t}\n\t\t});\n\t\n\t\tchangeStream.on('close', () => {\n\t\t\tconsole.log('Change stream worker task requests closed. Restarting...');\n\t\t\tsetTimeout(() => this.startWorkerInstance(), 5000);\n\t\t});\n\t\n\t\t// Process existing pending tasks\n\t\tconst pendingTasks = await WorkerTaskRequests.find({ status: 'pending' }, { sort: { createdAt: 1 } });\n\t\tfor (const task of pendingTasks) {\n\t\t\tthis.processTask(task);\n\t\t}\n\t}\n\t\n\tprivate async processTask(task: WorkerTaskRequestModel) {\n\t\tif (this._workerTasks.includes(task._id)) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tWorkerTaskRequests.updateOne(\n\t\t\t{ _id: task._id, status: 'pending' },\n\t\t\t{ $set: { status: 'processing' } }\n\t\t).then(async resReq => {\n\t\t\tif (resReq) {\n\t\t\t\tthis._workerTasks.push(task._id);\n\t\n\t\t\t\tlet timedOut = false;\n\t\t\t\tlet timeoutHandle = setTimeout(() => {\n\t\t\t\t\ttimedOut = true;\n\t\t\t\t\tconsole.error('Worker timed out processing task:', task._id);\n\t\n\t\t\t\t\tWorkerTaskResponses.create({\n\t\t\t\t\t\tid_request: task._id,\n\t\t\t\t\t\thas_error: true,\n\t\t\t\t\t\tdata: 'Task timed out.',\n\t\t\t\t\t\tid_user: task.id_user,\n\t\t\t\t\t\tuser: task.user,\n\t\t\t\t\t\tid_ws: task.id_ws\n\t\t\t\t\t});\n\t\n\t\t\t\t\tif (this._workerTasks.includes(task._id)) {\n\t\t\t\t\t\tthis._workerTasks.splice(this._workerTasks.indexOf(task._id), 1);\n\t\t\t\t\t}\n\t\n\t\t\t\t\tWorkerTaskRequests.updateOne(\n\t\t\t\t\t\t{ _id: task._id },\n\t\t\t\t\t\t{ $set: { status: 'timeout' } }\n\t\t\t\t\t);\n\t\t\t\t}, 120000);\n\t\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await this._methodManager.callMethodInternal.call(\n\t\t\t\t\t\tObject.assign({}, this._methodManager, MethodManager.prototype, {\n\t\t\t\t\t\t\tid_user: task.id_user,\n\t\t\t\t\t\t\tuser: task.user,\n\t\t\t\t\t\t\tid_ws: task.id_ws\n\t\t\t\t\t\t}),\n\t\t\t\t\t\ttask.method,\n\t\t\t\t\t\t...task.params\n\t\t\t\t\t);\n\t\n\t\t\t\t\tif (!timedOut) {\n\t\t\t\t\t\tclearTimeout(timeoutHandle);\n\t\n\t\t\t\t\t\tWorkerTaskResponses.create({\n\t\t\t\t\t\t\tid_request: task._id,\n\t\t\t\t\t\t\thas_error: false,\n\t\t\t\t\t\t\tdata: result,\n\t\t\t\t\t\t\tid_user: task.id_user,\n\t\t\t\t\t\t\tuser: task.user,\n\t\t\t\t\t\t\tid_ws: task.id_ws\n\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\tif (this._workerTasks.includes(task._id)) {\n\t\t\t\t\t\t\tthis._workerTasks.splice(this._workerTasks.indexOf(task._id), 1);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tWorkerTaskRequests.updateOne(\n\t\t\t\t\t\t\t{ _id: task._id },\n\t\t\t\t\t\t\t{ $set: { status: 'complete' } }\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tif (!timedOut) {\n\t\t\t\t\t\tclearTimeout(timeoutHandle);\n\t\n\t\t\t\t\t\tconsole.error('Worker failed to process task:', task._id, err);\n\t\n\t\t\t\t\t\tWorkerTaskResponses.create({\n\t\t\t\t\t\t\tid_request: task._id,\n\t\t\t\t\t\t\thas_error: true,\n\t\t\t\t\t\t\tdata: err.message,\n\t\t\t\t\t\t\tid_user: task.id_user,\n\t\t\t\t\t\t\tuser: task.user,\n\t\t\t\t\t\t\tid_ws: task.id_ws\n\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\tif (this._workerTasks.includes(task._id)) {\n\t\t\t\t\t\t\tthis._workerTasks.splice(this._workerTasks.indexOf(task._id), 1);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tWorkerTaskRequests.updateOne(\n\t\t\t\t\t\t\t{ _id: task._id },\n\t\t\t\t\t\t\t{ $set: { status: 'complete' } }\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\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._offlineUpdates.length\n\t\t) {\n\t\t\tif (ResolveIOServer.getMongoConnection()) {\n\t\t\t\tResolveIOServer.getMongoConnection().close(false).then(() => {\n\t\t\t\t\tconsole.log(new Date(), 'Safe Exit Complete, Process Exit');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}, () => {process.exit(1)});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tprocess.exit(0);\n\t\t\t}\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._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\tgetIsWorkersEnabled() {\n\t\treturn this._isWorkersEnabled;\n\t}\n\n\tgetIsWorkerInstance() {\n\t\treturn this._isWorkerInstance;\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\tpublic getWebSocketManager(): WebSocketManager {\n\t\treturn this._websocketManager;\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 !== ResolveIOServer.getServerConfig()['ROOT_URL'] && info.origin !== ResolveIOServer.getServerConfig()['SEC_ROOT_URL'] && info.origin !== ResolveIOServer.getServerConfig()['RESOLVEIO_URL'] && info.origin !== ResolveIOServer.getServerConfig()['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, ResolveIOServer.getServerConfig()['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\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' && ResolveIOServer.getServerConfig()['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._websocketManager.addWebSocket(ws);\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.send('ping', (error) => {\n\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\tif (this._subscriptionManager.getEnableDebug()) {\n\t\t\t\t\t\t\t\tconsole.log(new Date(), 'Server App', 'Error WS Ping');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\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('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 - ' + ResolveIOServer.getServerConfig()['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 (typeof socketData === 'string' && socketData === '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\t\t\t\t\telse if (typeof socketData === 'string' && socketData === 'pong') {\n\t\t\t\t\t\tws['isAlive'] = true;\n\t\t\t\t\t\tws['pongTime'] = new Date();\n\t\t\t\t\t\tws['latency'] = moment.duration(moment(ws['pongTime']).diff(ws['pingTime'])).asMilliseconds();\n\t\t\t\t\t\tthis._subscriptionManager.loggedInLatency(ws);\n\t\t\t\t\t\t\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!Array.isArray(socketData[0])) {\n\t\t\t\t\t\t// Not an array, invalid message\n\t\t\t\t\t\tconsole.log('Invalid message format, expected array:', socketData);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfor (let message of socketData) {\n\t\t\t\t\t\t\tawait this.processSocketMessage(ws, message);\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.send('ping', (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 Ping');\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\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.send('ping', (error) => {\n\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\tif (this._subscriptionManager.getEnableDebug()) {\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), 'Server App', 'Error WS Ping');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\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}, 20000);\n\t}\n\n\tprivate async processSocketMessage(ws: WebSocket, socketData: any[]) {\n\t\tlet messageRoute = socketData[0];\n\n\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\treturn;\n\t\t}\n\n\t\tlet messageDate = socketData[1];\n\t\tlet messageId = socketData[2];\n\t\tlet type = socketData[3];\n\n\t\tif (type === 'subscription') {\n\t\t\tlet subType = socketData[4];\n\t\t\tlet pub = socketData[5];\n\n\t\t\t// Subscribe\n\t\t\tif (subType === 'sub') {\n\t\t\t\tthis._subscriptionManager.subscribe(messageRoute, messageDate, ws, messageId, pub, socketData.slice(6));\n\t\t\t}\n\t\t\t// Unsubscribe\n\t\t\telse {\n\t\t\t\tthis._subscriptionManager.unsubscribe(messageRoute, messageDate, ws, messageId, pub, socketData.slice(6));\n\t\t\t}\n\t\t}\n\t\telse if (!this.publicProgram && type === 'offline') {\n\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\tmessageId: messageId,\n\t\t\t\thasError: false,\n\t\t\t\tdata: 'ACK'\n\t\t\t};\n\n\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\tthis._websocketManager.send(ws, serverRes);\n\t\t\t}\n\n\t\t\tthis._offlineUpdates.push(ws);\n\t\t\tlet offlineUpdates = socketData[4];\n\n\t\t\tfor (let i = 0; i < offlineUpdates.length; i++) {\n\t\t\t\tlet update = offlineUpdates[i];\n\n\t\t\t\tlet data = update.data;\n\n\t\t\t\tlet updateRoute = data.shift();\n\t\t\t\tlet updateDate = data.shift();\n\t\t\t\tlet updateMessageId = data.shift();\n\t\t\t\tlet updateType = data.shift();\n\t\t\t\tlet method = data.shift();\n\t\t\t\tlet methodLatencyId = objectIdHexString();\n\n\t\t\t\tlet serverResMethod: ServerResponseModel = {\n\t\t\t\t\tmessageId: updateMessageId,\n\t\t\t\t\thasError: false,\n\t\t\t\t\tdata: 'ACK'\n\t\t\t\t};\n\n\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\tthis._websocketManager.send(ws, serverResMethod);\n\t\t\t\t}\n\n\t\t\t\tif (method === 'insertDocument' && data[0] === 'driver-gps') {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t) {\n\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\ttype: 'log-method-latency',\n\t\t\t\t\t\tdate: new Date(),\n\t\t\t\t\t\tdata: {\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\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tLogMethodLatencies.create({\n\t\t\t\t\t\t_id: methodLatencyId,\n\t\t\t\t\t\t__v: 0,\n\t\t\t\t\t\tdate_start: new Date(),\n\t\t\t\t\t\tdate_end: null,\n\t\t\t\t\t\tlatency_ms: 0,\n\t\t\t\t\t\tmethod: method\n\t\t\t\t\t});\n\t\t\t\t}\n\n\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\tLogs.insertOne({\n\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(data)) < 200000 ? JSON.stringify(data, null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: method,\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\tmessageId: messageId,\n\t\t\t\t\t\troute: messageRoute\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (this._methodManager._methods[method]) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this._methodManager.callMethodInternal.call(Object.assign({}, this._methodManager, MethodManager.prototype, {id_user: ws['id_user'], user: ws['user'], id_ws: ws['id_socket']}), method, ...data);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\tconsole.log(new Date(), 'Offline Error', JSON.stringify(err, null, 2));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (method === 'updateDocumentOffline' || method === 'updateDocumentPropsOffline') {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(data[0]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.log('Offline - Could not find method: ' + method);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._offlineUpdates.splice(this._offlineUpdates.map(a => a['id_socket']).indexOf(ws['id_socket']), 1);\n\t\t}\n\t\telse { //methods\n\t\t\tlet data = [...socketData];\n\t\t\t\n\t\t\tlet messageRoute: string = data.shift();\n\t\t\tlet messageDate: Date = data.shift();\n\t\t\tlet messageId: number = data.shift();\n\t\t\tlet type: string = data.shift();\n\n\t\t\tif (type === 'method') {\n\t\t\t\tlet method = data.shift();\n\n\t\t\t\tif (ws['user_readonly']) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet methodLatencyId = objectIdHexString();\n\n\t\t\t\tif (\n\t\t\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t\t\t) {\n\t\t\t\t\tResolveIOServer.getLocalLogManager().writeLog({\n\t\t\t\t\t\ttype: 'log-method-latency',\n\t\t\t\t\t\tdate: new Date(),\n\t\t\t\t\t\tdata: {\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\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tLogMethodLatencies.create({\n\t\t\t\t\t\t_id: methodLatencyId,\n\t\t\t\t\t\t__v: 0,\n\t\t\t\t\t\tdate_start: new Date(),\n\t\t\t\t\t\tdate_end: null,\n\t\t\t\t\t\tlatency_ms: 0,\n\t\t\t\t\t\tmethod: method\n\t\t\t\t\t});\n\t\t\t\t}\n\n\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\tLogs.insertOne({\n\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(data)) < 200000 ? JSON.stringify(data, null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: method,\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\tmessageId: messageId,\n\t\t\t\t\t\troute: messageRoute\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\thasError: false,\n\t\t\t\t\tdata: 'ACK'\n\t\t\t\t};\n\n\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\tthis._websocketManager.send(ws, serverRes);\n\t\t\t\t}\n\n\t\t\t\tif (this._methodManager._methods[method]) {\n\t\t\t\t\tthis._methodManager.callMethod(methodLatencyId, ws, messageDate, messageId, method, ...data);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.log('Could not find method: ' + method);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// else if (type === 'methodResponse') {\n\t\t\t// \tlet method = data.shift();\n\n\t\t\t// \tMethodResponses.findOne({ $and: [{ id_user: ws['id_user'] }, { message_id: messageId }, { method: method }, { date: messageDate }] }).then(\n\t\t\t// \t\tres => {\n\t\t\t// \t\t\tif (res) {\n\t\t\t// \t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t// \t\t\t\t\tthis._websocketManager.send(ws, res.response);\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\terr => {}\n\t\t\t// \t);\n\t\t\t// }\n\t\t}\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 ResolveIOServer.getServerConfig();\n\t}\n}"]}