@resolveio/server-lib 20.4.36 → 20.4.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/methods/pdf.js +1 -1
- package/methods/pdf.js.map +1 -1
- package/package.json +1 -1
- package/server-app.js +1 -1
- package/server-app.js.map +1 -1
package/methods/pdf.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var __awaiter=this&&this.__awaiter||function(t,a,r,i){return new(r=r||Promise)(function(n,e){function fulfilled(t){try{step(i.next(t))}catch(t){e(t)}}function rejected(t){try{step(i.throw(t))}catch(t){e(t)}}function step(t){var e;t.done?n(t.value):((e=t.value)instanceof r?e:new r(function(t){t(e)})).then(fulfilled,rejected)}step((i=i.apply(t,a||[])).next())})},__generator=this&&this.__generator||function(a,r){var i,o,s,l={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]},f={next:verb(0),throw:verb(1),return:verb(2)};return"function"==typeof Symbol&&(f[Symbol.iterator]=function(){return this}),f;function verb(n){return function(t){var e=[n,t];if(i)throw new TypeError("Generator is already executing.");for(;l=f&&e[f=0]?0:l;)try{if(i=1,o&&(s=2&e[0]?o.return:e[0]?o.throw||((s=o.return)&&s.call(o),0):o.next)&&!(s=s.call(o,e[1])).done)return s;switch(o=0,(e=s?[2&e[0],s.value]:e)[0]){case 0:case 1:s=e;break;case 4:return l.label++,{value:e[1],done:!1};case 5:l.label++,o=e[1],e=[0];continue;case 7:e=l.ops.pop(),l.trys.pop();continue;default:if(!(s=0<(s=l.trys).length&&s[s.length-1])&&(6===e[0]||2===e[0])){l=0;continue}if(3===e[0]&&(!s||e[1]>s[0]&&e[1]<s[3]))l.label=e[1];else if(6===e[0]&&l.label<s[1])l.label=s[1],s=e;else{if(!(s&&l.label<s[2])){s[2]&&l.ops.pop(),l.trys.pop();continue}l.label=s[2],l.ops.push(e)}}e=r.call(a,l)}catch(t){e=[6,t],o=0}finally{i=s=0}if(5&e[0])throw e[1];return{value:e[0]?e[1]:void 0,done:!0}}}},fs=(Object.defineProperty(exports,"__esModule",{value:!0}),exports.loadPDFMethods=void 0,require("fs")),flag_collection_1=require("../collections/flag.collection"),simpl_schema_1=require("simpl-schema"),pdf_lib_1=require("pdf-lib"),puppeteer=require("puppeteer"),path=require("path"),pdfCnt=0;function loadPDFMethods(t){t.methods({generatePDF:{check:new simpl_schema_1.default({html:{type:String},fileName:{type:String},orientation:{type:String,optional:!0},fontSize:{type:String,optional:!0},upload:{type:Boolean,optional:!0},uploadFileOrder:{type:Number,optional:!0},uploadFileType:{type:String,optional:!0}}),function:function(u,g,h,b,m,w,y){var t=this;return void 0===h&&(h="portrait"),void 0===b&&(b="12px"),void 0===m&&(m=!1),void 0===w&&(w=-1),void 0===y&&(y=""),new Promise(function(d,p){return __awaiter(t,void 0,void 0,function(){var e,n,a,r,i,o,s,l,f,c=this;return __generator(this,function(t){switch(t.label){case 0:return e=["--disable-dev-shm-usage","--no-sandbox","--disable-setuid-sandbox","--disable-accelerated-2d-canvas","--disable-gpu","--allow-file-access-from-files","--enable-local-file-accesses","--font-render-hinting=none"],n=null,[4,flag_collection_1.Flags.findOne({type:"Enable Debug PDF"})];case 1:return(a=t.sent())&&a.value?[4,puppeteer.launch({headless:!1,devtools:!0,args:e,ignoreDefaultArgs:["--disable-extensions"]})]:[3,3];case 2:return n=t.sent(),[3,5];case 3:return[4,puppeteer.launch({headless:!0,devtools:!1,args:e,ignoreDefaultArgs:["--disable-extensions"]})];case 4:n=t.sent(),t.label=5;case 5:return[4,n.newPage()];case 6:return r=t.sent(),s="",s=fs.existsSync(path.join(__dirname,"../private/fonts/dejavuserif.woff"))?path.join(__dirname,"../private/fonts/"):fs.existsSync(path.join(this.clientDir,"./private/fonts/dejavuserif.woff"))?path.join(this.clientDir,"./private/fonts/"):"/usr/share/fonts/dejavu/",l="data:application/font-woff;base64,"+Buffer.from(fs.readFileSync(s+"dejavuserif.woff").buffer).toString("base64"),i="data:application/font-woff;base64,"+Buffer.from(fs.readFileSync(s+"dejavuserif-bold.woff").buffer).toString("base64"),o="data:application/font-woff;base64,"+Buffer.from(fs.readFileSync(s+"dejavuserif-italic.woff").buffer).toString("base64"),s="data:application/font-woff;base64,"+Buffer.from(fs.readFileSync(s+"dejavuserif-bolditalic.woff").buffer).toString("base64"),l='\n\t\t\t\t\t\t<head>\n\t\t\t\t\t\t\t<style type="text/css">\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: \'Dejavu Serif\';\n\t\t\t\t\t\t\t\t\tfont-style: normal;\n\t\t\t\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\t\t\t\tsrc: url("'+l+"\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: normal;\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tsrc: url(\""+i+"\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: italic;\n\t\t\t\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\t\t\t\tsrc: url(\""+o+"\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: italic;\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tsrc: url(\""+s+"\") format('woff');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tbody {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif', serif;\n\t\t\t\t\t\t\t\t\tfont-size: "+(b||"12px")+";\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.row {\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\tflex-wrap: wrap;\n\t\t\t\t\t\t\t\t\t-webkit-flex-wrap: wrap;\n\t\t\t\t\t\t\t\t\tpage-break-inside: avoid !important;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.page-break {\n\t\t\t\t\t\t\t\t\tpage-break-before: always !important;\n\t\t\t\t\t\t\t\t\tpadding-top: 1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.cell {\n\t\t\t\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\t\t\t\tpadding : 2px;\n\t\t\t\t\t\t\t\t\t-webkit-flex: 1;\n\t\t\t\t\t\t\t\t\tword-wrap: break-word;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.cell-no-padding {\n\t\t\t\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\t\t\t\t-webkit-flex: 1;\n\t\t\t\t\t\t\t\t\tword-wrap: break-word;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered {\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: center;\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered-left {\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: flex-start;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered-right {\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: flex-end;\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t.box {\n\t\t\t\t\t\t\t\t\tborder: 1px solid black;\n\t\t\t\t\t\t\t\t\tmargin: -1px 0px 0px -1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.boxNoBorder {\n\t\t\t\t\t\t\t\t\tmargin: -1px 0px 0px -1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tpre {\n\t\t\t\t\t\t\t\t\twhite-space: pre-wrap; /* css-3 */\n\t\t\t\t\t\t\t\t\twhite-space: -moz-pre-wrap; /* Mozilla, since 1999 */\n\t\t\t\t\t\t\t\t\twhite-space: -pre-wrap; /* Opera 4-6 */\n\t\t\t\t\t\t\t\t\twhite-space: -o-pre-wrap; /* Opera 7 */\n\t\t\t\t\t\t\t\t\tword-wrap: break-word; /* Internet Explorer 5.5+ */\n\t\t\t\t\t\t\t\t\tfont-size: 12px;\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif'; \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</style>\n\t\t\t\t\t\t</head>\n\t\t\t\t\t\t<body>\n\t\t\t\t\t"+u.replace(new RegExp("flex-basis:","g"),"-webkit-flex-basis:").replace(new RegExp("flex:","g"),"-webkit-flex:")+"</body>",[4,r.setContent(l,{waitUntil:["domcontentloaded","load","networkidle0"]})];case 7:return t.sent(),[4,r.evaluateHandle("document.fonts.ready")];case 8:return t.sent(),f=pdfCnt+++"-"+g.replace(new RegExp(/[^0-9\.a-zA-Z]/g),""),[4,r.pdf({scale:1,landscape:"portrait"!==h,format:"letter",margin:{top:"1cm",bottom:"1cm",left:"1cm",right:"1cm"},printBackground:!0,displayHeaderFooter:!0,headerTemplate:"\n\t\t\t\t\t\t\t<style>\n\t\t\t\t\t\t\t\t#header { \n\t\t\t\t\t\t\t\t\tpadding: 0 0 10px 10px !important; \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</style>\n\t\t\t\t\t\t\t<span></span>\n\t\t\t\t\t\t",footerTemplate:'\n\t\t\t\t\t\t\t<style>\n\t\t\t\t\t\t\t\t#footer { \n\t\t\t\t\t\t\t\t\tpadding: 0 0 10px 10px !important;\n\t\t\t\t\t\t\t\t\tfont-size: 10px;\n\t\t\t\t\t\t\t\t\tfont-family: san-serif;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</style>\n\t\t\t\t\t\t\t<div style="padding-bottom: 2px; padding-right: 15px; text-align: right; width: 100%;">\n\t\t\t\t\t\t\t\tPage <span class="pageNumber"></span> of <span class="totalPages"></span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t',path:path.join(__dirname,f),timeout:0})];case 9:return(t.sent(),a&&a.value)?[4,new Promise(function(){})]:[3,11];case 10:t.sent(),t.label=11;case 11:return[4,n.close()];case 12:return t.sent(),fs.existsSync(path.join(__dirname,f))?fs.readFile(path.join(__dirname,f),function(t,e){t?p("No file"):(fs.unlinkSync(path.join(__dirname,f)),m?(t="data:application/pdf;base64,"+Buffer.from(e).toString("base64"),c.callMethodInternal("uploadFileAndSave",g,t,4*Math.ceil(t.length/3),null!==w?w:-1,y,!1,function(t,e){t?p(t):d(e)})):d("data:application/pdf;base64,"+Buffer.from(e).toString("base64")))}):(p("No tmp file"),console.log("No tmp file ",f)),[2]}})})})}},generatePDFNoPageNumber:{check:new simpl_schema_1.default({html:{type:String},fileName:{type:String},orientation:{type:String,optional:!0},fontSize:{type:String,optional:!0},upload:{type:Boolean,optional:!0},uploadFileOrder:{type:Number,optional:!0},uploadFileType:{type:String,optional:!0}}),function:function(p,u,g,h,b,m,w){var t=this;return void 0===g&&(g="portrait"),void 0===h&&(h="12px"),void 0===b&&(b=!1),void 0===m&&(m=-1),void 0===w&&(w=""),new Promise(function(c,d){return __awaiter(t,void 0,void 0,function(){var e,n,a,r,i,o,s,l,f=this;return __generator(this,function(t){switch(t.label){case 0:return a=["--disable-dev-shm-usage","--no-sandbox","--disable-setuid-sandbox","--disable-accelerated-2d-canvas","--disable-gpu","--allow-file-access-from-files","--enable-local-file-accesses","--font-render-hinting=none"],[4,puppeteer.launch({headless:!0,devtools:!1,args:a,ignoreDefaultArgs:["--disable-extensions"]})];case 1:return[4,(e=t.sent()).newPage()];case 2:return n=t.sent(),a="",a=fs.existsSync(path.join(__dirname,"../private/fonts/dejavuserif.woff"))?path.join(__dirname,"../private/fonts/"):fs.existsSync(path.join(this.clientDir,"./private/fonts/dejavuserif.woff"))?path.join(this.clientDir,"./private/fonts/"):"/usr/share/fonts/dejavu/",s="data:application/font-woff;base64,"+Buffer.from(fs.readFileSync(a+"dejavuserif.woff").buffer).toString("base64"),r="data:application/font-woff;base64,"+Buffer.from(fs.readFileSync(a+"dejavuserif-bold.woff").buffer).toString("base64"),i="data:application/font-woff;base64,"+Buffer.from(fs.readFileSync(a+"dejavuserif-italic.woff").buffer).toString("base64"),o="data:application/font-woff;base64,"+Buffer.from(fs.readFileSync(a+"dejavuserif-bolditalic.woff").buffer).toString("base64"),s='\n\t\t\t\t\t\t<head>\n\t\t\t\t\t\t\t<style type="text/css">\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: \'Dejavu Serif\';\n\t\t\t\t\t\t\t\t\tfont-style: normal;\n\t\t\t\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\t\t\t\tsrc: url("'+s+"\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: normal;\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tsrc: url(\""+r+"\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: italic;\n\t\t\t\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\t\t\t\tsrc: url(\""+i+"\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: italic;\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tsrc: url(\""+o+"\") format('woff');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tbody {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif', serif;\n\t\t\t\t\t\t\t\t\tfont-size: "+(h||"12px")+";\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.row {\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\tflex-wrap: wrap;\n\t\t\t\t\t\t\t\t\t-webkit-flex-wrap: wrap;\n\t\t\t\t\t\t\t\t\tpage-break-inside: avoid !important;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.page-break {\n\t\t\t\t\t\t\t\t\tpage-break-before: always !important;\n\t\t\t\t\t\t\t\t\tpadding-top: 1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.cell {\n\t\t\t\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\t\t\t\tpadding : 2px;\n\t\t\t\t\t\t\t\t\t-webkit-flex: 1;\n\t\t\t\t\t\t\t\t\tword-wrap: break-word;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.cell-no-padding {\n\t\t\t\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\t\t\t\t-webkit-flex: 1;\n\t\t\t\t\t\t\t\t\tword-wrap: break-word;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered {\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: center;\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered-left {\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: flex-start;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered-right {\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: flex-end;\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t.box {\n\t\t\t\t\t\t\t\t\tborder: 1px solid black;\n\t\t\t\t\t\t\t\t\tmargin: -1px 0px 0px -1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.boxNoBorder {\n\t\t\t\t\t\t\t\t\tmargin: -1px 0px 0px -1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tpre {\n\t\t\t\t\t\t\t\t\twhite-space: pre-wrap; /* css-3 */\n\t\t\t\t\t\t\t\t\twhite-space: -moz-pre-wrap; /* Mozilla, since 1999 */\n\t\t\t\t\t\t\t\t\twhite-space: -pre-wrap; /* Opera 4-6 */\n\t\t\t\t\t\t\t\t\twhite-space: -o-pre-wrap; /* Opera 7 */\n\t\t\t\t\t\t\t\t\tword-wrap: break-word; /* Internet Explorer 5.5+ */\n\t\t\t\t\t\t\t\t\tfont-size: 12px;\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif'; \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</style>\n\t\t\t\t\t\t\t<meta charset=\"UTF-8\">\n\t\t\t\t\t\t</head>\n\t\t\t\t\t\t<body>\n\t\t\t\t\t"+p.replace(new RegExp("flex-basis:","g"),"-webkit-flex-basis:").replace(new RegExp("flex:","g"),"-webkit-flex:")+"</body>",[4,n.setContent(s,{waitUntil:["domcontentloaded","load","networkidle0"]})];case 3:return t.sent(),[4,n.evaluateHandle("document.fonts.ready")];case 4:return t.sent(),l=pdfCnt+++"-"+u.replace(new RegExp(/[^0-9\.a-zA-Z]/g),""),[4,n.pdf({scale:1,landscape:"portrait"!==g,format:"letter",margin:{top:"1cm",bottom:"1cm",left:"1cm",right:"1cm"},printBackground:!0,displayHeaderFooter:!0,headerTemplate:"\n\t\t\t\t\t\t\t<style>\n\t\t\t\t\t\t\t\t#header { \n\t\t\t\t\t\t\t\t\tpadding: 0 0 10px 10px !important; \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</style>\n\t\t\t\t\t\t\t<span></span>\n\t\t\t\t\t\t",footerTemplate:'\n\t\t\t\t\t\t<style>\n\t\t\t\t\t\t\t#footer { \n\t\t\t\t\t\t\t\tpadding: 0 0 10px 10px !important;\n\t\t\t\t\t\t\t\tfont-size: 10px;\n\t\t\t\t\t\t\t\tfont-family: san-serif;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</style>\n\t\t\t\t\t\t<div style="padding-bottom: 2px; padding-right: 15px; text-align: right; width: 100%;">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t',path:path.join(__dirname,l),timeout:0})];case 5:return t.sent(),[4,e.close()];case 6:return t.sent(),fs.existsSync(path.join(__dirname,l))?fs.readFile(path.join(__dirname,l),function(t,e){t?d("No file"):(fs.unlinkSync(path.join(__dirname,l)),b?(t="data:application/pdf;base64,"+Buffer.from(e).toString("base64"),f.callMethodInternal("uploadFileAndSave",u,t,4*Math.ceil(t.length/3),null!==m?m:-1,w,!1,function(t,e){t?d(t):c(e)})):c("data:application/pdf;base64,"+Buffer.from(e).toString("base64")))}):(d("No tmp file"),console.log("No tmp file ",l)),[2]}})})})}},mergePDFResolve:{check:new simpl_schema_1.default({fileKeys:{type:Array},"fileKeys.$":{type:String},fileName:{type:String},fileType:{type:String,optional:!0}}),function:function(r,p,u){var i=this;return new Promise(function(d,a){i.callMethodInternal("getSignedUrls",r,900,function(t,e){var n;e&&e.length?(n=[],e.forEach(function(t){n.push(i.callMethodInternal("getDataURIfromURL",t))}),Promise.all(n).then(function(c){return __awaiter(i,void 0,void 0,function(){var e,n,a,r,i,o,s,l,f;return __generator(this,function(t){switch(t.label){case 0:return[4,pdf_lib_1.PDFDocument.create()];case 1:e=t.sent(),n=0,t.label=2;case 2:if(!(n<c.length))return[3,20];if(!(a=c[n]))return[3,18];t.label=3;case 3:return(t.trys.push([3,16,,17]),a.startsWith("data:application/pdf;base64,"))?[4,pdf_lib_1.PDFDocument.load(a,{updateMetadata:!1,parseSpeed:pdf_lib_1.ParseSpeeds.Fastest,ignoreEncryption:!0})]:[3,6];case 4:return r=t.sent(),[4,e.copyPages(r,r.getPageIndices())];case 5:return t.sent().forEach(function(t){e.addPage(t)}),[3,15];case 6:return a.startsWith("data:image/jpeg;base64,/9j/")||a.startsWith("data:image/png;base64,/9j/")?[4,pdf_lib_1.PDFDocument.create()]:[3,10];case 7:return[4,(r=t.sent()).embedJpg(a)];case 8:return i=t.sent(),o=r.addPage(),s=i.scaleToFit(.75*o.getWidth(),.75*o.getHeight()),o.drawImage(i,{x:o.getWidth()/2-s.width/2,y:o.getHeight()/2-s.height/2,width:s.width,height:s.height}),[4,e.copyPages(r,r.getPageIndices())];case 9:return t.sent().forEach(function(t){e.addPage(t)}),[3,15];case 10:return a.startsWith("data:image/png;base64,iVBOR")?[4,pdf_lib_1.PDFDocument.create()]:[3,14];case 11:return[4,(r=t.sent()).embedPng(a)];case 12:return i=t.sent(),o=r.addPage(),s=i.scaleToFit(.75*o.getWidth(),.75*o.getHeight()),o.drawImage(i,{x:o.getWidth()/2-s.width/2,y:o.getHeight()/2-s.height/2,width:s.width,height:s.height}),[4,e.copyPages(r,r.getPageIndices())];case 13:return t.sent().forEach(function(t){e.addPage(t)}),[3,15];case 14:console.log("Error - unsupported!!",a.slice(0,60)),t.label=15;case 15:return[3,17];case 16:return l=t.sent(),console.log("Error processing fileData:",a.slice(0,60),l),[3,17];case 17:return[3,19];case 18:console.log("Error - no filedata!!",a),t.label=19;case 19:return n++,[3,2];case 20:return[4,e.save()];case 21:return l=t.sent(),f="data:application/pdf;base64,"+Buffer.from(l).toString("base64"),this.callMethodInternal("uploadFileAndSave",p,f,4*Math.ceil(f.length/3),-1,u,!1,function(t,e){d(e)}),[2]}})})})):(i.callMethodInternal("insertErrorLog","PDF Merge - getSignedUrls",[r,t]),a(t))})})}},mergePDFResolveNoSave:{check:new simpl_schema_1.default({fileKeys:{type:Array},"fileKeys.$":{type:String}}),function:function(r){var i=this;return new Promise(function(d,a){i.callMethodInternal("getSignedUrls",r,900,function(t,e){var n;e&&e.length?(n=[],e.forEach(function(t){n.push(i.callMethodInternal("getDataURIfromURL",t))}),Promise.all(n).then(function(c){return __awaiter(i,void 0,void 0,function(){var e,n,a,r,i,o,s,l,f;return __generator(this,function(t){switch(t.label){case 0:return[4,pdf_lib_1.PDFDocument.create()];case 1:e=t.sent(),n=0,t.label=2;case 2:if(!(n<c.length))return[3,20];if(!(a=c[n]))return[3,18];t.label=3;case 3:return(t.trys.push([3,16,,17]),a.startsWith("data:application/pdf;base64,"))?[4,pdf_lib_1.PDFDocument.load(a,{updateMetadata:!1,parseSpeed:pdf_lib_1.ParseSpeeds.Fastest,ignoreEncryption:!0})]:[3,6];case 4:return r=t.sent(),[4,e.copyPages(r,r.getPageIndices())];case 5:return t.sent().forEach(function(t){e.addPage(t)}),[3,15];case 6:return a.startsWith("data:image/jpeg;base64,/9j/")||a.startsWith("data:image/png;base64,/9j/")?[4,pdf_lib_1.PDFDocument.create()]:[3,10];case 7:return[4,(r=t.sent()).embedJpg(a)];case 8:return i=t.sent(),o=r.addPage(),s=i.scaleToFit(.75*o.getWidth(),.75*o.getHeight()),o.drawImage(i,{x:o.getWidth()/2-s.width/2,y:o.getHeight()/2-s.height/2,width:s.width,height:s.height}),[4,e.copyPages(r,r.getPageIndices())];case 9:return t.sent().forEach(function(t){e.addPage(t)}),[3,15];case 10:return a.startsWith("data:image/png;base64,iVBOR")?[4,pdf_lib_1.PDFDocument.create()]:[3,14];case 11:return[4,(r=t.sent()).embedPng(a)];case 12:return i=t.sent(),o=r.addPage(),s=i.scaleToFit(.75*o.getWidth(),.75*o.getHeight()),o.drawImage(i,{x:o.getWidth()/2-s.width/2,y:o.getHeight()/2-s.height/2,width:s.width,height:s.height}),[4,e.copyPages(r,r.getPageIndices())];case 13:return t.sent().forEach(function(t){e.addPage(t)}),[3,15];case 14:console.log("Error - unsupported!!",a.slice(0,60)),t.label=15;case 15:return[3,17];case 16:return l=t.sent(),console.log("Error processing fileData:",a.slice(0,60),l),[3,17];case 17:return[3,19];case 18:console.log("Error - no filedata!!",a),t.label=19;case 19:return n++,[3,2];case 20:return[4,e.save()];case 21:return l=t.sent(),f="data:application/pdf;base64,"+Buffer.from(l).toString("base64"),d(f),[2]}})})})):(i.callMethodInternal("insertErrorLog","PDF Merge - getSignedUrls",[r,t]),a(t))})})}},mergePDFResolveHtml:{check:new simpl_schema_1.default({htmls:{type:Array},"htmls.$":{type:String},fileName:{type:String},fileType:{type:String,optional:!0},save:{type:Boolean,optional:!0}}),function:function(d,p,u,g){var e=this;return void 0===g&&(g=!0),new Promise(function(c,t){return __awaiter(e,void 0,void 0,function(){var e,n,a,r,i,o,s,l,f;return __generator(this,function(t){switch(t.label){case 0:return[4,pdf_lib_1.PDFDocument.create()];case 1:e=t.sent(),n=0,t.label=2;case 2:if(!(n<d.length))return[3,20];if(!(a=d[n]))return[3,18];t.label=3;case 3:return(t.trys.push([3,16,,17]),a.startsWith("data:application/pdf;base64,"))?[4,pdf_lib_1.PDFDocument.load(a,{updateMetadata:!1,parseSpeed:pdf_lib_1.ParseSpeeds.Fastest,ignoreEncryption:!0})]:[3,6];case 4:return r=t.sent(),[4,e.copyPages(r,r.getPageIndices())];case 5:return t.sent().forEach(function(t){e.addPage(t)}),[3,15];case 6:return a.startsWith("data:image/jpeg;base64,/9j/")||a.startsWith("data:image/png;base64,/9j/")?[4,pdf_lib_1.PDFDocument.create()]:[3,10];case 7:return[4,(r=t.sent()).embedJpg(a)];case 8:return i=t.sent(),o=r.addPage(),s=i.scaleToFit(.75*o.getWidth(),.75*o.getHeight()),o.drawImage(i,{x:o.getWidth()/2-s.width/2,y:o.getHeight()/2-s.height/2,width:s.width,height:s.height}),[4,e.copyPages(r,r.getPageIndices())];case 9:return t.sent().forEach(function(t){e.addPage(t)}),[3,15];case 10:return a.startsWith("data:image/png;base64,iVBOR")?[4,pdf_lib_1.PDFDocument.create()]:[3,14];case 11:return[4,(r=t.sent()).embedPng(a)];case 12:return i=t.sent(),o=r.addPage(),s=i.scaleToFit(.75*o.getWidth(),.75*o.getHeight()),o.drawImage(i,{x:o.getWidth()/2-s.width/2,y:o.getHeight()/2-s.height/2,width:s.width,height:s.height}),[4,e.copyPages(r,r.getPageIndices())];case 13:return t.sent().forEach(function(t){e.addPage(t)}),[3,15];case 14:console.log("Error - unsupported!!",a.slice(0,60)),t.label=15;case 15:return[3,17];case 16:return l=t.sent(),console.log("Error processing fileData:",a.slice(0,60),l),[3,17];case 17:return[3,19];case 18:console.log("Error - no filedata!!",a),t.label=19;case 19:return n++,[3,2];case 20:return[4,e.save()];case 21:return l=t.sent(),f="data:application/pdf;base64,"+Buffer.from(l).toString("base64"),g?this.callMethodInternal("uploadFileAndSave",p,f,4*Math.ceil(f.length/3),-1,u,!1,function(t,e){c(e)}):c(f),[2]}})})})}}})}exports.loadPDFMethods=loadPDFMethods;
|
|
1
|
+
"use strict";var __awaiter=this&&this.__awaiter||function(t,a,r,i){return new(r=r||Promise)(function(n,e){function fulfilled(t){try{step(i.next(t))}catch(t){e(t)}}function rejected(t){try{step(i.throw(t))}catch(t){e(t)}}function step(t){var e;t.done?n(t.value):((e=t.value)instanceof r?e:new r(function(t){t(e)})).then(fulfilled,rejected)}step((i=i.apply(t,a||[])).next())})},__generator=this&&this.__generator||function(a,r){var i,o,s,l={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]},f={next:verb(0),throw:verb(1),return:verb(2)};return"function"==typeof Symbol&&(f[Symbol.iterator]=function(){return this}),f;function verb(n){return function(t){var e=[n,t];if(i)throw new TypeError("Generator is already executing.");for(;l=f&&e[f=0]?0:l;)try{if(i=1,o&&(s=2&e[0]?o.return:e[0]?o.throw||((s=o.return)&&s.call(o),0):o.next)&&!(s=s.call(o,e[1])).done)return s;switch(o=0,(e=s?[2&e[0],s.value]:e)[0]){case 0:case 1:s=e;break;case 4:return l.label++,{value:e[1],done:!1};case 5:l.label++,o=e[1],e=[0];continue;case 7:e=l.ops.pop(),l.trys.pop();continue;default:if(!(s=0<(s=l.trys).length&&s[s.length-1])&&(6===e[0]||2===e[0])){l=0;continue}if(3===e[0]&&(!s||e[1]>s[0]&&e[1]<s[3]))l.label=e[1];else if(6===e[0]&&l.label<s[1])l.label=s[1],s=e;else{if(!(s&&l.label<s[2])){s[2]&&l.ops.pop(),l.trys.pop();continue}l.label=s[2],l.ops.push(e)}}e=r.call(a,l)}catch(t){e=[6,t],o=0}finally{i=s=0}if(5&e[0])throw e[1];return{value:e[0]?e[1]:void 0,done:!0}}}},fs=(Object.defineProperty(exports,"__esModule",{value:!0}),exports.loadPDFMethods=void 0,require("fs")),flag_collection_1=require("../collections/flag.collection"),simpl_schema_1=require("simpl-schema"),pdf_lib_1=require("pdf-lib"),puppeteer=require("puppeteer"),path=require("path"),pdfCnt=0;function loadPDFMethods(t){t.methods({generatePDF:{check:new simpl_schema_1.default({html:{type:String},fileName:{type:String},orientation:{type:String,optional:!0},fontSize:{type:String,optional:!0},upload:{type:Boolean,optional:!0},uploadFileOrder:{type:Number,optional:!0},uploadFileType:{type:String,optional:!0}}),function:function(u,g,h,b,m,w,y){var t=this;return void 0===h&&(h="portrait"),void 0===b&&(b="12px"),void 0===m&&(m=!1),void 0===w&&(w=-1),void 0===y&&(y=""),new Promise(function(d,p){return __awaiter(t,void 0,void 0,function(){var e,n,a,r,i,o,s,l,f,c=this;return __generator(this,function(t){switch(t.label){case 0:return e=["--disable-dev-shm-usage","--no-sandbox","--disable-setuid-sandbox","--disable-accelerated-2d-canvas","--disable-gpu","--allow-file-access-from-files","--enable-local-file-accesses","--font-render-hinting=none"],n=null,[4,flag_collection_1.Flags.findOne({type:"Enable Debug PDF"})];case 1:return(a=t.sent())&&a.value?[4,puppeteer.launch({headless:!1,devtools:!0,args:e,ignoreDefaultArgs:["--disable-extensions"]})]:[3,3];case 2:return n=t.sent(),[3,5];case 3:return[4,puppeteer.launch({headless:!0,devtools:!1,args:e,ignoreDefaultArgs:["--disable-extensions"]})];case 4:n=t.sent(),t.label=5;case 5:return[4,n.newPage()];case 6:return r=t.sent(),s="",s=fs.existsSync(path.join(__dirname,"../private/fonts/dejavuserif.woff"))?path.join(__dirname,"../private/fonts/"):fs.existsSync(path.join(this.clientDir,"./private/fonts/dejavuserif.woff"))?path.join(this.clientDir,"./private/fonts/"):"/usr/share/fonts/dejavu/",l="data:application/font-woff;base64,"+Buffer.from(fs.readFileSync(s+"dejavuserif.woff").buffer).toString("base64"),i="data:application/font-woff;base64,"+Buffer.from(fs.readFileSync(s+"dejavuserif-bold.woff").buffer).toString("base64"),o="data:application/font-woff;base64,"+Buffer.from(fs.readFileSync(s+"dejavuserif-italic.woff").buffer).toString("base64"),s="data:application/font-woff;base64,"+Buffer.from(fs.readFileSync(s+"dejavuserif-bolditalic.woff").buffer).toString("base64"),l='\n\t\t\t\t\t\t<head>\n\t\t\t\t\t\t\t<style type="text/css">\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: \'Dejavu Serif\';\n\t\t\t\t\t\t\t\t\tfont-style: normal;\n\t\t\t\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\t\t\t\tsrc: url("'+l+"\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: normal;\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tsrc: url(\""+i+"\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: italic;\n\t\t\t\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\t\t\t\tsrc: url(\""+o+"\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: italic;\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tsrc: url(\""+s+"\") format('woff');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tbody {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif', serif;\n\t\t\t\t\t\t\t\t\tfont-size: "+(b||"12px")+";\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.row {\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\tflex-wrap: wrap;\n\t\t\t\t\t\t\t\t\t-webkit-flex-wrap: wrap;\n\t\t\t\t\t\t\t\t\tpage-break-inside: avoid !important;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.page-break {\n\t\t\t\t\t\t\t\t\tpage-break-before: always !important;\n\t\t\t\t\t\t\t\t\tpadding-top: 1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.cell {\n\t\t\t\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\t\t\t\tpadding : 2px;\n\t\t\t\t\t\t\t\t\t-webkit-flex: 1;\n\t\t\t\t\t\t\t\t\tword-wrap: break-word;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.cell-no-padding {\n\t\t\t\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\t\t\t\t-webkit-flex: 1;\n\t\t\t\t\t\t\t\t\tword-wrap: break-word;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered {\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: center;\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered-left {\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: flex-start;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered-right {\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: flex-end;\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t.box {\n\t\t\t\t\t\t\t\t\tborder: 1px solid black;\n\t\t\t\t\t\t\t\t\tmargin: -1px 0px 0px -1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.boxNoBorder {\n\t\t\t\t\t\t\t\t\tmargin: -1px 0px 0px -1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tpre {\n\t\t\t\t\t\t\t\t\twhite-space: pre-wrap; /* css-3 */\n\t\t\t\t\t\t\t\t\twhite-space: -moz-pre-wrap; /* Mozilla, since 1999 */\n\t\t\t\t\t\t\t\t\twhite-space: -pre-wrap; /* Opera 4-6 */\n\t\t\t\t\t\t\t\t\twhite-space: -o-pre-wrap; /* Opera 7 */\n\t\t\t\t\t\t\t\t\tword-wrap: break-word; /* Internet Explorer 5.5+ */\n\t\t\t\t\t\t\t\t\tfont-size: 12px;\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif'; \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</style>\n\t\t\t\t\t\t</head>\n\t\t\t\t\t\t<body>\n\t\t\t\t\t"+u.replace(new RegExp("flex-basis:","g"),"-webkit-flex-basis:").replace(new RegExp("flex:","g"),"-webkit-flex:")+"</body>",[4,r.setContent(l,{waitUntil:["domcontentloaded","load","networkidle0"]})];case 7:return t.sent(),[4,r.evaluateHandle("document.fonts.ready")];case 8:return t.sent(),f=pdfCnt+++"-"+g.replace(new RegExp(/[^0-9\.a-zA-Z]/g),""),[4,r.pdf({scale:1,landscape:"portrait"!==h,format:"letter",margin:{top:"1cm",bottom:"1cm",left:"1cm",right:"1cm"},printBackground:!0,displayHeaderFooter:!0,headerTemplate:"\n\t\t\t\t\t\t\t<style>\n\t\t\t\t\t\t\t\t#header { \n\t\t\t\t\t\t\t\t\tpadding: 0 0 10px 10px !important; \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</style>\n\t\t\t\t\t\t\t<span></span>\n\t\t\t\t\t\t",footerTemplate:'\n\t\t\t\t\t\t\t<style>\n\t\t\t\t\t\t\t\t#footer { \n\t\t\t\t\t\t\t\t\tpadding: 0 0 10px 10px !important;\n\t\t\t\t\t\t\t\t\tfont-size: 10px;\n\t\t\t\t\t\t\t\t\tfont-family: san-serif;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</style>\n\t\t\t\t\t\t\t<div style="padding-bottom: 2px; padding-right: 15px; text-align: right; width: 100%;">\n\t\t\t\t\t\t\t\tPage <span class="pageNumber"></span> of <span class="totalPages"></span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t',path:path.join(__dirname,f),timeout:0})];case 9:return(t.sent(),a&&a.value)?"landscape"!==h?[3,11]:[4,r.setViewport({width:1100,height:850})]:[3,15];case 10:return t.sent(),[3,13];case 11:return[4,r.setViewport({width:850,height:1100})];case 12:t.sent(),t.label=13;case 13:return[4,new Promise(function(){})];case 14:t.sent(),t.label=15;case 15:return[4,n.close()];case 16:return t.sent(),fs.existsSync(path.join(__dirname,f))?fs.readFile(path.join(__dirname,f),function(t,e){t?p("No file"):(fs.unlinkSync(path.join(__dirname,f)),m?(t="data:application/pdf;base64,"+Buffer.from(e).toString("base64"),c.callMethodInternal("uploadFileAndSave",g,t,4*Math.ceil(t.length/3),null!==w?w:-1,y,!1,function(t,e){t?p(t):d(e)})):d("data:application/pdf;base64,"+Buffer.from(e).toString("base64")))}):(p("No tmp file"),console.log("No tmp file ",f)),[2]}})})})}},generatePDFNoPageNumber:{check:new simpl_schema_1.default({html:{type:String},fileName:{type:String},orientation:{type:String,optional:!0},fontSize:{type:String,optional:!0},upload:{type:Boolean,optional:!0},uploadFileOrder:{type:Number,optional:!0},uploadFileType:{type:String,optional:!0}}),function:function(p,u,g,h,b,m,w){var t=this;return void 0===g&&(g="portrait"),void 0===h&&(h="12px"),void 0===b&&(b=!1),void 0===m&&(m=-1),void 0===w&&(w=""),new Promise(function(c,d){return __awaiter(t,void 0,void 0,function(){var e,n,a,r,i,o,s,l,f=this;return __generator(this,function(t){switch(t.label){case 0:return a=["--disable-dev-shm-usage","--no-sandbox","--disable-setuid-sandbox","--disable-accelerated-2d-canvas","--disable-gpu","--allow-file-access-from-files","--enable-local-file-accesses","--font-render-hinting=none"],[4,puppeteer.launch({headless:!0,devtools:!1,args:a,ignoreDefaultArgs:["--disable-extensions"]})];case 1:return[4,(e=t.sent()).newPage()];case 2:return n=t.sent(),a="",a=fs.existsSync(path.join(__dirname,"../private/fonts/dejavuserif.woff"))?path.join(__dirname,"../private/fonts/"):fs.existsSync(path.join(this.clientDir,"./private/fonts/dejavuserif.woff"))?path.join(this.clientDir,"./private/fonts/"):"/usr/share/fonts/dejavu/",s="data:application/font-woff;base64,"+Buffer.from(fs.readFileSync(a+"dejavuserif.woff").buffer).toString("base64"),r="data:application/font-woff;base64,"+Buffer.from(fs.readFileSync(a+"dejavuserif-bold.woff").buffer).toString("base64"),i="data:application/font-woff;base64,"+Buffer.from(fs.readFileSync(a+"dejavuserif-italic.woff").buffer).toString("base64"),o="data:application/font-woff;base64,"+Buffer.from(fs.readFileSync(a+"dejavuserif-bolditalic.woff").buffer).toString("base64"),s='\n\t\t\t\t\t\t<head>\n\t\t\t\t\t\t\t<style type="text/css">\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: \'Dejavu Serif\';\n\t\t\t\t\t\t\t\t\tfont-style: normal;\n\t\t\t\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\t\t\t\tsrc: url("'+s+"\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: normal;\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tsrc: url(\""+r+"\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: italic;\n\t\t\t\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\t\t\t\tsrc: url(\""+i+"\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: italic;\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tsrc: url(\""+o+"\") format('woff');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tbody {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif', serif;\n\t\t\t\t\t\t\t\t\tfont-size: "+(h||"12px")+";\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.row {\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\tflex-wrap: wrap;\n\t\t\t\t\t\t\t\t\t-webkit-flex-wrap: wrap;\n\t\t\t\t\t\t\t\t\tpage-break-inside: avoid !important;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.page-break {\n\t\t\t\t\t\t\t\t\tpage-break-before: always !important;\n\t\t\t\t\t\t\t\t\tpadding-top: 1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.cell {\n\t\t\t\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\t\t\t\tpadding : 2px;\n\t\t\t\t\t\t\t\t\t-webkit-flex: 1;\n\t\t\t\t\t\t\t\t\tword-wrap: break-word;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.cell-no-padding {\n\t\t\t\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\t\t\t\t-webkit-flex: 1;\n\t\t\t\t\t\t\t\t\tword-wrap: break-word;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered {\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: center;\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered-left {\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: flex-start;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered-right {\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: flex-end;\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t.box {\n\t\t\t\t\t\t\t\t\tborder: 1px solid black;\n\t\t\t\t\t\t\t\t\tmargin: -1px 0px 0px -1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.boxNoBorder {\n\t\t\t\t\t\t\t\t\tmargin: -1px 0px 0px -1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tpre {\n\t\t\t\t\t\t\t\t\twhite-space: pre-wrap; /* css-3 */\n\t\t\t\t\t\t\t\t\twhite-space: -moz-pre-wrap; /* Mozilla, since 1999 */\n\t\t\t\t\t\t\t\t\twhite-space: -pre-wrap; /* Opera 4-6 */\n\t\t\t\t\t\t\t\t\twhite-space: -o-pre-wrap; /* Opera 7 */\n\t\t\t\t\t\t\t\t\tword-wrap: break-word; /* Internet Explorer 5.5+ */\n\t\t\t\t\t\t\t\t\tfont-size: 12px;\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif'; \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</style>\n\t\t\t\t\t\t\t<meta charset=\"UTF-8\">\n\t\t\t\t\t\t</head>\n\t\t\t\t\t\t<body>\n\t\t\t\t\t"+p.replace(new RegExp("flex-basis:","g"),"-webkit-flex-basis:").replace(new RegExp("flex:","g"),"-webkit-flex:")+"</body>",[4,n.setContent(s,{waitUntil:["domcontentloaded","load","networkidle0"]})];case 3:return t.sent(),[4,n.evaluateHandle("document.fonts.ready")];case 4:return t.sent(),l=pdfCnt+++"-"+u.replace(new RegExp(/[^0-9\.a-zA-Z]/g),""),[4,n.pdf({scale:1,landscape:"portrait"!==g,format:"letter",margin:{top:"1cm",bottom:"1cm",left:"1cm",right:"1cm"},printBackground:!0,displayHeaderFooter:!0,headerTemplate:"\n\t\t\t\t\t\t\t<style>\n\t\t\t\t\t\t\t\t#header { \n\t\t\t\t\t\t\t\t\tpadding: 0 0 10px 10px !important; \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</style>\n\t\t\t\t\t\t\t<span></span>\n\t\t\t\t\t\t",footerTemplate:'\n\t\t\t\t\t\t<style>\n\t\t\t\t\t\t\t#footer { \n\t\t\t\t\t\t\t\tpadding: 0 0 10px 10px !important;\n\t\t\t\t\t\t\t\tfont-size: 10px;\n\t\t\t\t\t\t\t\tfont-family: san-serif;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</style>\n\t\t\t\t\t\t<div style="padding-bottom: 2px; padding-right: 15px; text-align: right; width: 100%;">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t',path:path.join(__dirname,l),timeout:0})];case 5:return t.sent(),[4,e.close()];case 6:return t.sent(),fs.existsSync(path.join(__dirname,l))?fs.readFile(path.join(__dirname,l),function(t,e){t?d("No file"):(fs.unlinkSync(path.join(__dirname,l)),b?(t="data:application/pdf;base64,"+Buffer.from(e).toString("base64"),f.callMethodInternal("uploadFileAndSave",u,t,4*Math.ceil(t.length/3),null!==m?m:-1,w,!1,function(t,e){t?d(t):c(e)})):c("data:application/pdf;base64,"+Buffer.from(e).toString("base64")))}):(d("No tmp file"),console.log("No tmp file ",l)),[2]}})})})}},mergePDFResolve:{check:new simpl_schema_1.default({fileKeys:{type:Array},"fileKeys.$":{type:String},fileName:{type:String},fileType:{type:String,optional:!0}}),function:function(r,p,u){var i=this;return new Promise(function(d,a){i.callMethodInternal("getSignedUrls",r,900,function(t,e){var n;e&&e.length?(n=[],e.forEach(function(t){n.push(i.callMethodInternal("getDataURIfromURL",t))}),Promise.all(n).then(function(c){return __awaiter(i,void 0,void 0,function(){var e,n,a,r,i,o,s,l,f;return __generator(this,function(t){switch(t.label){case 0:return[4,pdf_lib_1.PDFDocument.create()];case 1:e=t.sent(),n=0,t.label=2;case 2:if(!(n<c.length))return[3,20];if(!(a=c[n]))return[3,18];t.label=3;case 3:return(t.trys.push([3,16,,17]),a.startsWith("data:application/pdf;base64,"))?[4,pdf_lib_1.PDFDocument.load(a,{updateMetadata:!1,parseSpeed:pdf_lib_1.ParseSpeeds.Fastest,ignoreEncryption:!0})]:[3,6];case 4:return r=t.sent(),[4,e.copyPages(r,r.getPageIndices())];case 5:return t.sent().forEach(function(t){e.addPage(t)}),[3,15];case 6:return a.startsWith("data:image/jpeg;base64,/9j/")||a.startsWith("data:image/png;base64,/9j/")?[4,pdf_lib_1.PDFDocument.create()]:[3,10];case 7:return[4,(r=t.sent()).embedJpg(a)];case 8:return i=t.sent(),o=r.addPage(),s=i.scaleToFit(.75*o.getWidth(),.75*o.getHeight()),o.drawImage(i,{x:o.getWidth()/2-s.width/2,y:o.getHeight()/2-s.height/2,width:s.width,height:s.height}),[4,e.copyPages(r,r.getPageIndices())];case 9:return t.sent().forEach(function(t){e.addPage(t)}),[3,15];case 10:return a.startsWith("data:image/png;base64,iVBOR")?[4,pdf_lib_1.PDFDocument.create()]:[3,14];case 11:return[4,(r=t.sent()).embedPng(a)];case 12:return i=t.sent(),o=r.addPage(),s=i.scaleToFit(.75*o.getWidth(),.75*o.getHeight()),o.drawImage(i,{x:o.getWidth()/2-s.width/2,y:o.getHeight()/2-s.height/2,width:s.width,height:s.height}),[4,e.copyPages(r,r.getPageIndices())];case 13:return t.sent().forEach(function(t){e.addPage(t)}),[3,15];case 14:console.log("Error - unsupported!!",a.slice(0,60)),t.label=15;case 15:return[3,17];case 16:return l=t.sent(),console.log("Error processing fileData:",a.slice(0,60),l),[3,17];case 17:return[3,19];case 18:console.log("Error - no filedata!!",a),t.label=19;case 19:return n++,[3,2];case 20:return[4,e.save()];case 21:return l=t.sent(),f="data:application/pdf;base64,"+Buffer.from(l).toString("base64"),this.callMethodInternal("uploadFileAndSave",p,f,4*Math.ceil(f.length/3),-1,u,!1,function(t,e){d(e)}),[2]}})})})):(i.callMethodInternal("insertErrorLog","PDF Merge - getSignedUrls",[r,t]),a(t))})})}},mergePDFResolveNoSave:{check:new simpl_schema_1.default({fileKeys:{type:Array},"fileKeys.$":{type:String}}),function:function(r){var i=this;return new Promise(function(d,a){i.callMethodInternal("getSignedUrls",r,900,function(t,e){var n;e&&e.length?(n=[],e.forEach(function(t){n.push(i.callMethodInternal("getDataURIfromURL",t))}),Promise.all(n).then(function(c){return __awaiter(i,void 0,void 0,function(){var e,n,a,r,i,o,s,l,f;return __generator(this,function(t){switch(t.label){case 0:return[4,pdf_lib_1.PDFDocument.create()];case 1:e=t.sent(),n=0,t.label=2;case 2:if(!(n<c.length))return[3,20];if(!(a=c[n]))return[3,18];t.label=3;case 3:return(t.trys.push([3,16,,17]),a.startsWith("data:application/pdf;base64,"))?[4,pdf_lib_1.PDFDocument.load(a,{updateMetadata:!1,parseSpeed:pdf_lib_1.ParseSpeeds.Fastest,ignoreEncryption:!0})]:[3,6];case 4:return r=t.sent(),[4,e.copyPages(r,r.getPageIndices())];case 5:return t.sent().forEach(function(t){e.addPage(t)}),[3,15];case 6:return a.startsWith("data:image/jpeg;base64,/9j/")||a.startsWith("data:image/png;base64,/9j/")?[4,pdf_lib_1.PDFDocument.create()]:[3,10];case 7:return[4,(r=t.sent()).embedJpg(a)];case 8:return i=t.sent(),o=r.addPage(),s=i.scaleToFit(.75*o.getWidth(),.75*o.getHeight()),o.drawImage(i,{x:o.getWidth()/2-s.width/2,y:o.getHeight()/2-s.height/2,width:s.width,height:s.height}),[4,e.copyPages(r,r.getPageIndices())];case 9:return t.sent().forEach(function(t){e.addPage(t)}),[3,15];case 10:return a.startsWith("data:image/png;base64,iVBOR")?[4,pdf_lib_1.PDFDocument.create()]:[3,14];case 11:return[4,(r=t.sent()).embedPng(a)];case 12:return i=t.sent(),o=r.addPage(),s=i.scaleToFit(.75*o.getWidth(),.75*o.getHeight()),o.drawImage(i,{x:o.getWidth()/2-s.width/2,y:o.getHeight()/2-s.height/2,width:s.width,height:s.height}),[4,e.copyPages(r,r.getPageIndices())];case 13:return t.sent().forEach(function(t){e.addPage(t)}),[3,15];case 14:console.log("Error - unsupported!!",a.slice(0,60)),t.label=15;case 15:return[3,17];case 16:return l=t.sent(),console.log("Error processing fileData:",a.slice(0,60),l),[3,17];case 17:return[3,19];case 18:console.log("Error - no filedata!!",a),t.label=19;case 19:return n++,[3,2];case 20:return[4,e.save()];case 21:return l=t.sent(),f="data:application/pdf;base64,"+Buffer.from(l).toString("base64"),d(f),[2]}})})})):(i.callMethodInternal("insertErrorLog","PDF Merge - getSignedUrls",[r,t]),a(t))})})}},mergePDFResolveHtml:{check:new simpl_schema_1.default({htmls:{type:Array},"htmls.$":{type:String},fileName:{type:String},fileType:{type:String,optional:!0},save:{type:Boolean,optional:!0}}),function:function(d,p,u,g){var e=this;return void 0===g&&(g=!0),new Promise(function(c,t){return __awaiter(e,void 0,void 0,function(){var e,n,a,r,i,o,s,l,f;return __generator(this,function(t){switch(t.label){case 0:return[4,pdf_lib_1.PDFDocument.create()];case 1:e=t.sent(),n=0,t.label=2;case 2:if(!(n<d.length))return[3,20];if(!(a=d[n]))return[3,18];t.label=3;case 3:return(t.trys.push([3,16,,17]),a.startsWith("data:application/pdf;base64,"))?[4,pdf_lib_1.PDFDocument.load(a,{updateMetadata:!1,parseSpeed:pdf_lib_1.ParseSpeeds.Fastest,ignoreEncryption:!0})]:[3,6];case 4:return r=t.sent(),[4,e.copyPages(r,r.getPageIndices())];case 5:return t.sent().forEach(function(t){e.addPage(t)}),[3,15];case 6:return a.startsWith("data:image/jpeg;base64,/9j/")||a.startsWith("data:image/png;base64,/9j/")?[4,pdf_lib_1.PDFDocument.create()]:[3,10];case 7:return[4,(r=t.sent()).embedJpg(a)];case 8:return i=t.sent(),o=r.addPage(),s=i.scaleToFit(.75*o.getWidth(),.75*o.getHeight()),o.drawImage(i,{x:o.getWidth()/2-s.width/2,y:o.getHeight()/2-s.height/2,width:s.width,height:s.height}),[4,e.copyPages(r,r.getPageIndices())];case 9:return t.sent().forEach(function(t){e.addPage(t)}),[3,15];case 10:return a.startsWith("data:image/png;base64,iVBOR")?[4,pdf_lib_1.PDFDocument.create()]:[3,14];case 11:return[4,(r=t.sent()).embedPng(a)];case 12:return i=t.sent(),o=r.addPage(),s=i.scaleToFit(.75*o.getWidth(),.75*o.getHeight()),o.drawImage(i,{x:o.getWidth()/2-s.width/2,y:o.getHeight()/2-s.height/2,width:s.width,height:s.height}),[4,e.copyPages(r,r.getPageIndices())];case 13:return t.sent().forEach(function(t){e.addPage(t)}),[3,15];case 14:console.log("Error - unsupported!!",a.slice(0,60)),t.label=15;case 15:return[3,17];case 16:return l=t.sent(),console.log("Error processing fileData:",a.slice(0,60),l),[3,17];case 17:return[3,19];case 18:console.log("Error - no filedata!!",a),t.label=19;case 19:return n++,[3,2];case 20:return[4,e.save()];case 21:return l=t.sent(),f="data:application/pdf;base64,"+Buffer.from(l).toString("base64"),g?this.callMethodInternal("uploadFileAndSave",p,f,4*Math.ceil(f.length/3),-1,u,!1,function(t,e){c(e)}):c(f),[2]}})})})}}})}exports.loadPDFMethods=loadPDFMethods;
|
|
2
2
|
//# sourceMappingURL=pdf.js.map
|
package/methods/pdf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/methods/pdf.ts"],"names":["fs","require","flag_collection_1","simpl_schema_1","pdf_lib_1","puppeteer","path","pdfCnt","loadPDFMethods","methodManager","methods","generatePDF","check","default","html","type","String","fileName","orientation","optional","fontSize","upload","Boolean","uploadFileOrder","Number","uploadFileType","function","_this","this","Promise","resolve","reject","__awaiter","args","browser","Flags","findOne","enableDebugFlag","_a","sent","value","launch","headless","devtools","ignoreDefaultArgs","newPage","page","pathToFont","existsSync","join","__dirname","clientDir","dejavuserif_woff","Buffer","from","readFileSync","buffer","toString","dejavuserifBold_woff","dejavuserifItalic_woff","dejavuserifBoldItalic_woff","content","replace","RegExp","setContent","waitUntil","evaluateHandle","tmpFileName","pdf","scale","landscape","format","margin","top","bottom","left","right","printBackground","displayHeaderFooter","headerTemplate","footerTemplate","timeout","close","readFile","errRead","data","unlinkSync","fileData","callMethodInternal","Math","ceil","length","err","res","console","log","generatePDFNoPageNumber","mergePDFResolve","fileKeys","Array","fileKeys.$","fileType","errSigneds","resSigneds","promises_1","forEach","signedUrl","push","all","then","fileDatas","PDFDocument","create","mergedPdf","i","startsWith","load","updateMetadata","parseSpeed","ParseSpeeds","Fastest","ignoreEncryption","copyPages","getPageIndices","addPage","embedJpg","img","imgDim","scaleToFit","getWidth","getHeight","drawImage","x","width","y","height","embedPng","slice","error_1","save","mergedPDFUint8","b64PDF","errUp","resUp","mergePDFResolveNoSave","promises_2","error_2","mergePDFResolveHtml","htmls","htmls.$","error_3","exports"],"mappings":"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","file":"pdf.js","sourcesContent":["import * as fs from 'fs';\nimport { MethodManager } from '../managers/method.manager';\nimport { Flags } from '../collections/flag.collection';\nimport SimpleSchema from 'simpl-schema';\nimport { ParseSpeeds, PDFDocument } from 'pdf-lib';\nimport * as puppeteer from 'puppeteer';\nimport * as path from 'path';\n\nlet pdfCnt = 0;\n\nexport function loadPDFMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\tgeneratePDF: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\thtml: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfileName: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\torientation: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tfontSize: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tupload: {\n\t\t\t\t\ttype: Boolean,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tuploadFileOrder: {\n\t\t\t\t\ttype: Number,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tuploadFileType: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(html, fileName, orientation = 'portrait', fontSize = '12px', upload = false, uploadFileOrder = -1, uploadFileType = '') {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\t// console.log(new Date(), 'GENERATE PDF CALL', fileName, orientation, fontSize, upload);\n\n\t\t\t\t\tconst args = [\n\t\t\t\t\t\t\"--disable-dev-shm-usage\",\n\t\t\t\t\t\t\"--no-sandbox\",\n\t\t\t\t\t\t\"--disable-setuid-sandbox\",\n\t\t\t\t\t\t\"--disable-accelerated-2d-canvas\",\n\t\t\t\t\t\t\"--disable-gpu\",\n\t\t\t\t\t\t\"--allow-file-access-from-files\", \n\t\t\t\t\t\t\"--enable-local-file-accesses\",\n\t\t\t\t\t\t'--font-render-hinting=none'\n\t\t\t\t\t];\n\n\t\t\t\t\tlet browser = null;\n\n\t\t\t\t\tlet enableDebugFlag = await Flags.findOne({type: 'Enable Debug PDF'});\n\t\t\t\t\t\n\t\t\t\t\tif (enableDebugFlag && enableDebugFlag.value) {\n\t\t\t\t\t\tbrowser = await puppeteer.launch({\n\t\t\t\t\t\t\theadless: false, // run in headless mode\n\t\t\t\t\t\t\tdevtools: true, // run with dev tools\n\t\t\t\t\t\t\targs,\n\t\t\t\t\t\t\tignoreDefaultArgs: [\"--disable-extensions\"]\n\t\t\t\t\t\t}); // run browser\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tbrowser = await puppeteer.launch({\n\t\t\t\t\t\t\theadless: true, // run in headless mode\n\t\t\t\t\t\t\tdevtools: false, // run with dev tools\n\t\t\t\t\t\t\targs,\n\t\t\t\t\t\t\tignoreDefaultArgs: [\"--disable-extensions\"]\n\t\t\t\t\t\t}); // run browser\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tconst page = await browser.newPage(); // create new tab\n\n\t\t\t\t\tlet pathToFont = '';\n\n\t\t\t\t\tif (fs.existsSync(path.join(__dirname, ('../private/fonts/dejavuserif.woff')))) {\n\t\t\t\t\t\tpathToFont = path.join(__dirname, ('../private/fonts/'));\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (fs.existsSync(path.join(this.clientDir, ('./private/fonts/dejavuserif.woff')))) {\n\t\t\t\t\t\t\tpathToFont = path.join(this.clientDir, ('./private/fonts/'));\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tpathToFont = '/usr/share/fonts/dejavu/';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet dejavuserif_woff = 'data:application/font-woff;base64,' + Buffer.from(fs.readFileSync(pathToFont + 'dejavuserif.woff').buffer).toString('base64');\n\t\t\t\t\tlet dejavuserifBold_woff = 'data:application/font-woff;base64,' + Buffer.from(fs.readFileSync(pathToFont + 'dejavuserif-bold.woff').buffer).toString('base64');\n\t\t\t\t\tlet dejavuserifItalic_woff = 'data:application/font-woff;base64,' + Buffer.from(fs.readFileSync(pathToFont + 'dejavuserif-italic.woff').buffer).toString('base64');\n\t\t\t\t\tlet dejavuserifBoldItalic_woff = 'data:application/font-woff;base64,' + Buffer.from(fs.readFileSync(pathToFont + 'dejavuserif-bolditalic.woff').buffer).toString('base64');\n\n\t\t\t\t\tlet content = `\n\t\t\t\t\t\t<head>\n\t\t\t\t\t\t\t<style type=\"text/css\">\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: normal;\n\t\t\t\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\t\t\t\tsrc: url(\"` + dejavuserif_woff + `\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: normal;\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tsrc: url(\"` + dejavuserifBold_woff + `\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: italic;\n\t\t\t\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\t\t\t\tsrc: url(\"` + dejavuserifItalic_woff + `\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: italic;\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tsrc: url(\"` + dejavuserifBoldItalic_woff + `\") format('woff');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tbody {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif', serif;\n\t\t\t\t\t\t\t\t\tfont-size: ` + (fontSize ? fontSize : '12px') + `;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.row {\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\tflex-wrap: wrap;\n\t\t\t\t\t\t\t\t\t-webkit-flex-wrap: wrap;\n\t\t\t\t\t\t\t\t\tpage-break-inside: avoid !important;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.page-break {\n\t\t\t\t\t\t\t\t\tpage-break-before: always !important;\n\t\t\t\t\t\t\t\t\tpadding-top: 1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.cell {\n\t\t\t\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\t\t\t\tpadding : 2px;\n\t\t\t\t\t\t\t\t\t-webkit-flex: 1;\n\t\t\t\t\t\t\t\t\tword-wrap: break-word;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.cell-no-padding {\n\t\t\t\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\t\t\t\t-webkit-flex: 1;\n\t\t\t\t\t\t\t\t\tword-wrap: break-word;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered {\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: center;\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered-left {\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: flex-start;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered-right {\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: flex-end;\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t.box {\n\t\t\t\t\t\t\t\t\tborder: 1px solid black;\n\t\t\t\t\t\t\t\t\tmargin: -1px 0px 0px -1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.boxNoBorder {\n\t\t\t\t\t\t\t\t\tmargin: -1px 0px 0px -1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tpre {\n\t\t\t\t\t\t\t\t\twhite-space: pre-wrap; /* css-3 */\n\t\t\t\t\t\t\t\t\twhite-space: -moz-pre-wrap; /* Mozilla, since 1999 */\n\t\t\t\t\t\t\t\t\twhite-space: -pre-wrap; /* Opera 4-6 */\n\t\t\t\t\t\t\t\t\twhite-space: -o-pre-wrap; /* Opera 7 */\n\t\t\t\t\t\t\t\t\tword-wrap: break-word; /* Internet Explorer 5.5+ */\n\t\t\t\t\t\t\t\t\tfont-size: 12px;\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif'; \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</style>\n\t\t\t\t\t\t</head>\n\t\t\t\t\t\t<body>\n\t\t\t\t\t` + html.replace(new RegExp('flex-basis:', 'g'), '-webkit-flex-basis:').replace(new RegExp('flex:', 'g'), '-webkit-flex:') + '</body>';\n\n\t\t\t\t\tawait page.setContent(content, { waitUntil: ['domcontentloaded', 'load', 'networkidle0'] });\n\t\t\t\t\tawait page.evaluateHandle('document.fonts.ready');\n\t\t\t\t\t\n\t\t\t\t\tlet tmpFileName = (pdfCnt++) + '-' + fileName.replace(new RegExp(/[^0-9\\.a-zA-Z]/g), '');\t\n\t\t\t\t\n\t\t\t\t\tawait page.pdf({\n\t\t\t\t\t\tscale: 1,\n\t\t\t\t\t\tlandscape: orientation === 'portrait' ? false : true,\n\t\t\t\t\t\tformat: 'letter',\n\t\t\t\t\t\tmargin: {\n\t\t\t\t\t\t\ttop: '1cm',\n\t\t\t\t\t\t\tbottom: '1cm',\n\t\t\t\t\t\t\tleft: '1cm',\n\t\t\t\t\t\t\tright: '1cm'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tprintBackground: true,\n\t\t\t\t\t\tdisplayHeaderFooter: true,\n\t\t\t\t\t\theaderTemplate: `\n\t\t\t\t\t\t\t<style>\n\t\t\t\t\t\t\t\t#header { \n\t\t\t\t\t\t\t\t\tpadding: 0 0 10px 10px !important; \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</style>\n\t\t\t\t\t\t\t<span></span>\n\t\t\t\t\t\t`,\n\t\t\t\t\t\tfooterTemplate: `\n\t\t\t\t\t\t\t<style>\n\t\t\t\t\t\t\t\t#footer { \n\t\t\t\t\t\t\t\t\tpadding: 0 0 10px 10px !important;\n\t\t\t\t\t\t\t\t\tfont-size: 10px;\n\t\t\t\t\t\t\t\t\tfont-family: san-serif;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</style>\n\t\t\t\t\t\t\t<div style=\"padding-bottom: 2px; padding-right: 15px; text-align: right; width: 100%;\">\n\t\t\t\t\t\t\t\tPage <span class=\"pageNumber\"></span> of <span class=\"totalPages\"></span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`,\n\t\t\t\t\t\tpath: path.join(__dirname, (tmpFileName)),\n\t\t\t\t\t\ttimeout: 0\n\t\t\t\t\t});\n\n\t\t\t\t\tif (enableDebugFlag && enableDebugFlag.value) {\n\t\t\t\t\t\tawait new Promise(() => {})\n\t\t\t\t\t}\n\n\t\t\t\t\tawait browser.close();\n\t\t\t\t\t\n\t\t\t\t\tif (fs.existsSync(path.join(__dirname, (tmpFileName)))) {\n\t\t\t\t\t\tfs.readFile(path.join(__dirname, (tmpFileName)), (errRead, data) => {\n\t\t\t\t\t\t\tif (!errRead) {\n\t\t\t\t\t\t\t\tfs.unlinkSync(path.join(__dirname, (tmpFileName)));\n\t\t\t\t\t\t\t\tif (!upload) {\n\t\t\t\t\t\t\t\t\tresolve('data:application/pdf;base64,' + Buffer.from(data).toString('base64'));\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\tlet fileData = 'data:application/pdf;base64,' + Buffer.from(data).toString('base64');\n\t\t\t\t\t\t\t\t\tthis.callMethodInternal('uploadFileAndSave', fileName, fileData, (4 * Math.ceil(fileData.length / 3)), uploadFileOrder !== null ? uploadFileOrder : -1, uploadFileType, false, (err, res) => {\n\t\t\t\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\t\t\t\treject(err);\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\tresolve(res);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\treject('No file');\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\treject('No tmp file');\n\t\t\t\t\t\tconsole.log('No tmp file ', tmpFileName);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tgeneratePDFNoPageNumber: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\thtml: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfileName: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\torientation: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tfontSize: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tupload: {\n\t\t\t\t\ttype: Boolean,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tuploadFileOrder: {\n\t\t\t\t\ttype: Number,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tuploadFileType: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(html, fileName, orientation = 'portrait', fontSize = '12px', upload = false, uploadFileOrder = -1, uploadFileType = '') {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\t// console.log(new Date(), 'GENERATE PDF CALL', fileName, orientation, fontSize, upload);\n\n\t\t\t\t\tconst args = [\n\t\t\t\t\t\t\"--disable-dev-shm-usage\",\n\t\t\t\t\t\t\"--no-sandbox\",\n\t\t\t\t\t\t\"--disable-setuid-sandbox\",\n\t\t\t\t\t\t\"--disable-accelerated-2d-canvas\",\n\t\t\t\t\t\t\"--disable-gpu\",\n\t\t\t\t\t\t\"--allow-file-access-from-files\", \n\t\t\t\t\t\t\"--enable-local-file-accesses\",\n\t\t\t\t\t\t'--font-render-hinting=none'\n\t\t\t\t\t];\n\n\t\t\t\t\tconst browser = await puppeteer.launch({\n\t\t\t\t\t\theadless: true, // run in headless mode\n\t\t\t\t\t\tdevtools: false, // run with dev tools\n\t\t\t\t\t\targs,\n\t\t\t\t\t\tignoreDefaultArgs: [\"--disable-extensions\"]\n\t\t\t\t\t}); // run browser\n\t\t\t\t\t\n\t\t\t\t\tconst page = await browser.newPage(); // create new tab\n\n\t\t\t\t\tlet pathToFont = '';\n\n\t\t\t\t\tif (fs.existsSync(path.join(__dirname, ('../private/fonts/dejavuserif.woff')))) {\n\t\t\t\t\t\tpathToFont = path.join(__dirname, ('../private/fonts/'));\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (fs.existsSync(path.join(this.clientDir, ('./private/fonts/dejavuserif.woff')))) {\n\t\t\t\t\t\t\tpathToFont = path.join(this.clientDir, ('./private/fonts/'));\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tpathToFont = '/usr/share/fonts/dejavu/';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet dejavuserif_woff = 'data:application/font-woff;base64,' + Buffer.from(fs.readFileSync(pathToFont + 'dejavuserif.woff').buffer).toString('base64');\n\t\t\t\t\tlet dejavuserifBold_woff = 'data:application/font-woff;base64,' + Buffer.from(fs.readFileSync(pathToFont + 'dejavuserif-bold.woff').buffer).toString('base64');\n\t\t\t\t\tlet dejavuserifItalic_woff = 'data:application/font-woff;base64,' + Buffer.from(fs.readFileSync(pathToFont + 'dejavuserif-italic.woff').buffer).toString('base64');\n\t\t\t\t\tlet dejavuserifBoldItalic_woff = 'data:application/font-woff;base64,' + Buffer.from(fs.readFileSync(pathToFont + 'dejavuserif-bolditalic.woff').buffer).toString('base64');\n\n\t\t\t\t\tlet content = `\n\t\t\t\t\t\t<head>\n\t\t\t\t\t\t\t<style type=\"text/css\">\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: normal;\n\t\t\t\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\t\t\t\tsrc: url(\"` + dejavuserif_woff + `\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: normal;\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tsrc: url(\"` + dejavuserifBold_woff + `\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: italic;\n\t\t\t\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\t\t\t\tsrc: url(\"` + dejavuserifItalic_woff + `\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: italic;\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tsrc: url(\"` + dejavuserifBoldItalic_woff + `\") format('woff');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tbody {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif', serif;\n\t\t\t\t\t\t\t\t\tfont-size: ` + (fontSize ? fontSize : '12px') + `;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.row {\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\tflex-wrap: wrap;\n\t\t\t\t\t\t\t\t\t-webkit-flex-wrap: wrap;\n\t\t\t\t\t\t\t\t\tpage-break-inside: avoid !important;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.page-break {\n\t\t\t\t\t\t\t\t\tpage-break-before: always !important;\n\t\t\t\t\t\t\t\t\tpadding-top: 1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.cell {\n\t\t\t\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\t\t\t\tpadding : 2px;\n\t\t\t\t\t\t\t\t\t-webkit-flex: 1;\n\t\t\t\t\t\t\t\t\tword-wrap: break-word;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.cell-no-padding {\n\t\t\t\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\t\t\t\t-webkit-flex: 1;\n\t\t\t\t\t\t\t\t\tword-wrap: break-word;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered {\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: center;\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered-left {\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: flex-start;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered-right {\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: flex-end;\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t.box {\n\t\t\t\t\t\t\t\t\tborder: 1px solid black;\n\t\t\t\t\t\t\t\t\tmargin: -1px 0px 0px -1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.boxNoBorder {\n\t\t\t\t\t\t\t\t\tmargin: -1px 0px 0px -1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tpre {\n\t\t\t\t\t\t\t\t\twhite-space: pre-wrap; /* css-3 */\n\t\t\t\t\t\t\t\t\twhite-space: -moz-pre-wrap; /* Mozilla, since 1999 */\n\t\t\t\t\t\t\t\t\twhite-space: -pre-wrap; /* Opera 4-6 */\n\t\t\t\t\t\t\t\t\twhite-space: -o-pre-wrap; /* Opera 7 */\n\t\t\t\t\t\t\t\t\tword-wrap: break-word; /* Internet Explorer 5.5+ */\n\t\t\t\t\t\t\t\t\tfont-size: 12px;\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif'; \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</style>\n\t\t\t\t\t\t\t<meta charset=\"UTF-8\">\n\t\t\t\t\t\t</head>\n\t\t\t\t\t\t<body>\n\t\t\t\t\t` + html.replace(new RegExp('flex-basis:', 'g'), '-webkit-flex-basis:').replace(new RegExp('flex:', 'g'), '-webkit-flex:') + '</body>';\n\n\t\t\t\t\tawait page.setContent(content, { waitUntil: ['domcontentloaded', 'load', 'networkidle0'] });\n\t\t\t\t\tawait page.evaluateHandle('document.fonts.ready');\n\t\t\t\t\t\n\t\t\t\t\tlet tmpFileName = (pdfCnt++) + '-' + fileName.replace(new RegExp(/[^0-9\\.a-zA-Z]/g), '');\t\n\t\t\t\t\n\t\t\t\t\tawait page.pdf({\n\t\t\t\t\t\tscale: 1,\n\t\t\t\t\t\tlandscape: orientation === 'portrait' ? false : true,\n\t\t\t\t\t\tformat: 'letter',\n\t\t\t\t\t\tmargin: {\n\t\t\t\t\t\t\ttop: '1cm',\n\t\t\t\t\t\t\tbottom: '1cm',\n\t\t\t\t\t\t\tleft: '1cm',\n\t\t\t\t\t\t\tright: '1cm'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tprintBackground: true,\n\t\t\t\t\t\tdisplayHeaderFooter: true,\n\t\t\t\t\t\theaderTemplate: `\n\t\t\t\t\t\t\t<style>\n\t\t\t\t\t\t\t\t#header { \n\t\t\t\t\t\t\t\t\tpadding: 0 0 10px 10px !important; \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</style>\n\t\t\t\t\t\t\t<span></span>\n\t\t\t\t\t\t`,\n\t\t\t\t\t\tfooterTemplate: `\n\t\t\t\t\t\t<style>\n\t\t\t\t\t\t\t#footer { \n\t\t\t\t\t\t\t\tpadding: 0 0 10px 10px !important;\n\t\t\t\t\t\t\t\tfont-size: 10px;\n\t\t\t\t\t\t\t\tfont-family: san-serif;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</style>\n\t\t\t\t\t\t<div style=\"padding-bottom: 2px; padding-right: 15px; text-align: right; width: 100%;\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`,\n\t\t\t\t\t\tpath: path.join(__dirname, (tmpFileName)),\n\t\t\t\t\t\ttimeout: 0\n\t\t\t\t\t});\n\t\t\t\t\tawait browser.close();\n\t\t\t\t\t\n\t\t\t\t\tif (fs.existsSync(path.join(__dirname, (tmpFileName)))) {\n\t\t\t\t\t\tfs.readFile(path.join(__dirname, (tmpFileName)), (errRead, data) => {\n\t\t\t\t\t\t\tif (!errRead) {\n\t\t\t\t\t\t\t\tfs.unlinkSync(path.join(__dirname, (tmpFileName)));\n\t\t\t\t\t\t\t\tif (!upload) {\n\t\t\t\t\t\t\t\t\tresolve('data:application/pdf;base64,' + Buffer.from(data).toString('base64'));\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\tlet fileData = 'data:application/pdf;base64,' + Buffer.from(data).toString('base64');\n\t\t\t\t\t\t\t\t\tthis.callMethodInternal('uploadFileAndSave', fileName, fileData, (4 * Math.ceil(fileData.length / 3)), uploadFileOrder !== null ? uploadFileOrder : -1, uploadFileType, false, (err, res) => {\n\t\t\t\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\t\t\t\treject(err);\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\tresolve(res);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\treject('No file');\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\treject('No tmp file');\n\t\t\t\t\t\tconsole.log('No tmp file ', tmpFileName);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tmergePDFResolve: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tfileKeys: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'fileKeys.$': {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfileName: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfileType: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(fileKeys: string[], fileName: string, fileType?: string) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\tthis.callMethodInternal('getSignedUrls', fileKeys, 900, (errSigneds, resSigneds) => {\n\t\t\t\t\t\tif (resSigneds && resSigneds.length) {\n\t\t\t\t\t\t\tlet promises = [];\n\t\t\n\t\t\t\t\t\t\tresSigneds.forEach((signedUrl) => {\n\t\t\t\t\t\t\t\tpromises.push(this.callMethodInternal('getDataURIfromURL', signedUrl));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tPromise.all(promises).then(async (fileDatas) => {\n\t\t\t\t\t\t\t\tconst mergedPdf = await PDFDocument.create();\n\t\t\n\t\t\t\t\t\t\t\tfor (let i = 0; i < fileDatas.length; i++) {\n\t\t\t\t\t\t\t\t\tlet fileData = fileDatas[i];\n\t\t\n\t\t\t\t\t\t\t\t\tif (fileData) {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tif (fileData.startsWith('data:application/pdf;base64,')) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst pdf = await PDFDocument.load(fileData, { updateMetadata: false, parseSpeed: ParseSpeeds.Fastest, ignoreEncryption: true });\n\t\t\t\t\t\t\t\t\t\t\t\tconst copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());\n\t\t\t\t\t\t\t\t\t\t\t\tcopiedPages.forEach((page) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmergedPdf.addPage(page);\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse if (fileData.startsWith('data:image/jpeg;base64,/9j/') || fileData.startsWith('data:image/png;base64,/9j/')) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst pdf = await PDFDocument.create();\n\t\t\t\t\t\t\t\t\t\t\t\tconst img = await pdf.embedJpg(fileData);\n\t\t\t\t\t\t\t\t\t\t\t\tconst page = pdf.addPage();\n\t\t\t\t\t\t\t\t\t\t\t\tlet imgDim = img.scaleToFit(page.getWidth() * 0.75, page.getHeight() * 0.75);\n\t\t\t\t\t\t\t\t\t\t\t\tpage.drawImage(img, {\n\t\t\t\t\t\t\t\t\t\t\t\t\tx: page.getWidth() / 2 - imgDim.width / 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\ty: page.getHeight() / 2 - imgDim.height / 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: imgDim.width,\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: imgDim.height,\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\tconst copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());\n\t\t\t\t\t\t\t\t\t\t\t\tcopiedPages.forEach((page) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmergedPdf.addPage(page);\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse if (fileData.startsWith('data:image/png;base64,iVBOR')) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst pdf = await PDFDocument.create();\n\t\t\t\t\t\t\t\t\t\t\t\tconst img = await pdf.embedPng(fileData);\n\t\t\t\t\t\t\t\t\t\t\t\tconst page = pdf.addPage();\n\t\t\t\t\t\t\t\t\t\t\t\tlet imgDim = img.scaleToFit(page.getWidth() * 0.75, page.getHeight() * 0.75);\n\t\t\t\t\t\t\t\t\t\t\t\tpage.drawImage(img, {\n\t\t\t\t\t\t\t\t\t\t\t\t\tx: page.getWidth() / 2 - imgDim.width / 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\ty: page.getHeight() / 2 - imgDim.height / 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: imgDim.width,\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: imgDim.height,\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\tconst copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());\n\t\t\t\t\t\t\t\t\t\t\t\tcopiedPages.forEach((page) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmergedPdf.addPage(page);\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\tconsole.log('Error - unsupported!!', fileData.slice(0, 60));\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t\t\t\tcatch (error) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('Error processing fileData:', fileData.slice(0, 60), error);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tconsole.log('Error - no filedata!!', fileData);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t\tlet mergedPDFUint8 = await mergedPdf.save();\n\t\t\n\t\t\t\t\t\t\t\tconst b64PDF = 'data:application/pdf;base64,' + Buffer.from(mergedPDFUint8).toString('base64');\n\t\t\n\t\t\t\t\t\t\t\tthis.callMethodInternal('uploadFileAndSave', fileName, b64PDF, (4 * Math.ceil(b64PDF.length / 3)), -1, fileType, false, (errUp, resUp) => {\n\t\t\t\t\t\t\t\t\tresolve(resUp);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.callMethodInternal('insertErrorLog', 'PDF Merge - getSignedUrls', [\n\t\t\t\t\t\t\t\tfileKeys,\n\t\t\t\t\t\t\t\terrSigneds\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\treject(errSigneds);\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\t\n\t\tmergePDFResolveNoSave: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tfileKeys: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'fileKeys.$': {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(fileKeys: string[]) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\tthis.callMethodInternal('getSignedUrls', fileKeys, 900, (errSigneds, resSigneds) => {\n\t\t\t\t\t\tif (resSigneds && resSigneds.length) {\n\t\t\t\t\t\t\tlet promises = [];\n\n\t\t\t\t\t\t\tresSigneds.forEach((signedUrl) => {\n\t\t\t\t\t\t\t\tpromises.push(this.callMethodInternal('getDataURIfromURL', signedUrl));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tPromise.all(promises).then(async (fileDatas) => {\n\t\t\t\t\t\t\t\tconst mergedPdf = await PDFDocument.create();\n\n\t\t\t\t\t\t\t\tfor (let i = 0; i < fileDatas.length; i++) {\n\n\t\t\t\t\t\t\t\t\tlet fileData = fileDatas[i];\n\n\t\t\t\t\t\t\t\t\tif (fileData) {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tif (fileData.startsWith('data:application/pdf;base64,')) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst pdf = await PDFDocument.load(fileData, { updateMetadata: false, parseSpeed: ParseSpeeds.Fastest, ignoreEncryption: true});\n\t\t\t\t\t\t\t\t\t\t\t\tconst copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());\n\t\t\t\t\t\t\t\t\t\t\t\tcopiedPages.forEach((page) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmergedPdf.addPage(page);\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse if (fileData.startsWith('data:image/jpeg;base64,/9j/') || fileData.startsWith('data:image/png;base64,/9j/')) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst pdf = await PDFDocument.create();\n\t\t\t\t\t\t\t\t\t\t\t\tconst img = await pdf.embedJpg(fileData);\n\t\t\t\t\t\t\t\t\t\t\t\tconst page = pdf.addPage();\n\t\t\t\t\t\t\t\t\t\t\t\tlet imgDim = img.scaleToFit(page.getWidth() * 0.75, page.getHeight() * 0.75);\n\t\t\t\t\t\t\t\t\t\t\t\tpage.drawImage(img, {\n\t\t\t\t\t\t\t\t\t\t\t\t\tx: page.getWidth() / 2 - imgDim.width / 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\ty: page.getHeight() / 2 - imgDim.height / 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: imgDim.width,\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: imgDim.height,\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\tconst copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());\n\t\t\t\t\t\t\t\t\t\t\t\tcopiedPages.forEach((page) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmergedPdf.addPage(page);\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse if (fileData.startsWith('data:image/png;base64,iVBOR')) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst pdf = await PDFDocument.create();\n\t\t\t\t\t\t\t\t\t\t\t\tconst img = await pdf.embedPng(fileData);\n\t\t\t\t\t\t\t\t\t\t\t\tconst page = pdf.addPage();\n\t\t\t\t\t\t\t\t\t\t\t\tlet imgDim = img.scaleToFit(page.getWidth() * 0.75, page.getHeight() * 0.75);\n\t\t\t\t\t\t\t\t\t\t\t\tpage.drawImage(img, {\n\t\t\t\t\t\t\t\t\t\t\t\t\tx: page.getWidth() / 2 - imgDim.width / 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\ty: page.getHeight() / 2 - imgDim.height / 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: imgDim.width,\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: imgDim.height,\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\tconst copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());\n\t\t\t\t\t\t\t\t\t\t\t\tcopiedPages.forEach((page) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmergedPdf.addPage(page);\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\tconsole.log('Error - unsupported!!', fileData.slice(0, 60));\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcatch (error) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('Error processing fileData:', fileData.slice(0, 60), error);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tconsole.log('Error - no filedata!!', fileData);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tlet mergedPDFUint8 = await mergedPdf.save();\n\n\t\t\t\t\t\t\t\tconst b64PDF = 'data:application/pdf;base64,' + Buffer.from(mergedPDFUint8).toString('base64');\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tresolve(b64PDF);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.callMethodInternal('insertErrorLog', 'PDF Merge - getSignedUrls', [\n\t\t\t\t\t\t\t\tfileKeys,\n\t\t\t\t\t\t\t\terrSigneds\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\treject(errSigneds);\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\tmergePDFResolveHtml: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\thtmls: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'htmls.$': {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfileName: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfileType: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tsave: {\n\t\t\t\t\ttype: Boolean,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(htmls: string[], fileName: string, fileType?: string, save = true) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tconst mergedPdf = await PDFDocument.create();\n\n\t\t\t\t\tfor (let i = 0; i < htmls.length; i++) {\n\n\t\t\t\t\t\tlet fileData = htmls[i];\n\n\t\t\t\t\t\tif (fileData) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tif (fileData.startsWith('data:application/pdf;base64,')) {\n\t\t\t\t\t\t\t\t\tconst pdf = await PDFDocument.load(fileData, { updateMetadata: false, parseSpeed: ParseSpeeds.Fastest, ignoreEncryption: true });\n\t\t\t\t\t\t\t\t\tconst copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());\n\t\t\t\t\t\t\t\t\tcopiedPages.forEach((page) => {\n\t\t\t\t\t\t\t\t\t\tmergedPdf.addPage(page);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (fileData.startsWith('data:image/jpeg;base64,/9j/') || fileData.startsWith('data:image/png;base64,/9j/')) {\n\t\t\t\t\t\t\t\t\tconst pdf = await PDFDocument.create();\n\t\t\t\t\t\t\t\t\tconst img = await pdf.embedJpg(fileData);\n\t\t\t\t\t\t\t\t\tconst page = pdf.addPage();\n\t\t\t\t\t\t\t\t\tlet imgDim = img.scaleToFit(page.getWidth() * 0.75, page.getHeight() * 0.75);\n\t\t\t\t\t\t\t\t\tpage.drawImage(img, {\n\t\t\t\t\t\t\t\t\t\tx: page.getWidth() / 2 - imgDim.width / 2,\n\t\t\t\t\t\t\t\t\t\ty: page.getHeight() / 2 - imgDim.height / 2,\n\t\t\t\t\t\t\t\t\t\twidth: imgDim.width,\n\t\t\t\t\t\t\t\t\t\theight: imgDim.height,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tconst copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());\n\t\t\t\t\t\t\t\t\tcopiedPages.forEach((page) => {\n\t\t\t\t\t\t\t\t\t\tmergedPdf.addPage(page);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (fileData.startsWith('data:image/png;base64,iVBOR')) {\n\t\t\t\t\t\t\t\t\tconst pdf = await PDFDocument.create();\n\t\t\t\t\t\t\t\t\tconst img = await pdf.embedPng(fileData);\n\t\t\t\t\t\t\t\t\tconst page = pdf.addPage();\n\t\t\t\t\t\t\t\t\tlet imgDim = img.scaleToFit(page.getWidth() * 0.75, page.getHeight() * 0.75);\n\t\t\t\t\t\t\t\t\tpage.drawImage(img, {\n\t\t\t\t\t\t\t\t\t\tx: page.getWidth() / 2 - imgDim.width / 2,\n\t\t\t\t\t\t\t\t\t\ty: page.getHeight() / 2 - imgDim.height / 2,\n\t\t\t\t\t\t\t\t\t\twidth: imgDim.width,\n\t\t\t\t\t\t\t\t\t\theight: imgDim.height,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tconst copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());\n\t\t\t\t\t\t\t\t\tcopiedPages.forEach((page) => {\n\t\t\t\t\t\t\t\t\t\tmergedPdf.addPage(page);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tconsole.log('Error - unsupported!!', fileData.slice(0, 60));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcatch (error) {\n\t\t\t\t\t\t\t\tconsole.log('Error processing fileData:', fileData.slice(0, 60), error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconsole.log('Error - no filedata!!', fileData);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet mergedPDFUint8 = await mergedPdf.save();\n\n\t\t\t\t\tconst b64PDF = 'data:application/pdf;base64,' + Buffer.from(mergedPDFUint8).toString('base64');\n\n\t\t\t\t\tif (save) {\n\t\t\t\t\t\tthis.callMethodInternal('uploadFileAndSave', fileName, b64PDF, (4 * Math.ceil(b64PDF.length / 3)), -1, fileType, false, (errUp, resUp) => {\n\t\t\t\t\t\t\tresolve(resUp);\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\tresolve(b64PDF);\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/pdf.ts"],"names":["fs","require","flag_collection_1","simpl_schema_1","pdf_lib_1","puppeteer","path","pdfCnt","loadPDFMethods","methodManager","methods","generatePDF","check","default","html","type","String","fileName","orientation","optional","fontSize","upload","Boolean","uploadFileOrder","Number","uploadFileType","function","_this","this","Promise","resolve","reject","__awaiter","args","browser","Flags","findOne","enableDebugFlag","_a","sent","value","launch","headless","devtools","ignoreDefaultArgs","newPage","page","pathToFont","existsSync","join","__dirname","clientDir","dejavuserif_woff","Buffer","from","readFileSync","buffer","toString","dejavuserifBold_woff","dejavuserifItalic_woff","dejavuserifBoldItalic_woff","content","replace","RegExp","setContent","waitUntil","evaluateHandle","tmpFileName","pdf","scale","landscape","format","margin","top","bottom","left","right","printBackground","displayHeaderFooter","headerTemplate","footerTemplate","timeout","setViewport","width","height","close","readFile","errRead","data","unlinkSync","fileData","callMethodInternal","Math","ceil","length","err","res","console","log","generatePDFNoPageNumber","mergePDFResolve","fileKeys","Array","fileKeys.$","fileType","errSigneds","resSigneds","promises_1","forEach","signedUrl","push","all","then","fileDatas","PDFDocument","create","mergedPdf","i","startsWith","load","updateMetadata","parseSpeed","ParseSpeeds","Fastest","ignoreEncryption","copyPages","getPageIndices","addPage","embedJpg","img","imgDim","scaleToFit","getWidth","getHeight","drawImage","x","y","embedPng","slice","error_1","save","mergedPDFUint8","b64PDF","errUp","resUp","mergePDFResolveNoSave","promises_2","error_2","mergePDFResolveHtml","htmls","htmls.$","error_3","exports"],"mappings":"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","file":"pdf.js","sourcesContent":["import * as fs from 'fs';\nimport { MethodManager } from '../managers/method.manager';\nimport { Flags } from '../collections/flag.collection';\nimport SimpleSchema from 'simpl-schema';\nimport { ParseSpeeds, PDFDocument } from 'pdf-lib';\nimport * as puppeteer from 'puppeteer';\nimport * as path from 'path';\n\nlet pdfCnt = 0;\n\nexport function loadPDFMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\tgeneratePDF: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\thtml: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfileName: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\torientation: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tfontSize: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tupload: {\n\t\t\t\t\ttype: Boolean,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tuploadFileOrder: {\n\t\t\t\t\ttype: Number,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tuploadFileType: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(html, fileName, orientation = 'portrait', fontSize = '12px', upload = false, uploadFileOrder = -1, uploadFileType = '') {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\t// console.log(new Date(), 'GENERATE PDF CALL', fileName, orientation, fontSize, upload);\n\n\t\t\t\t\tconst args = [\n\t\t\t\t\t\t\"--disable-dev-shm-usage\",\n\t\t\t\t\t\t\"--no-sandbox\",\n\t\t\t\t\t\t\"--disable-setuid-sandbox\",\n\t\t\t\t\t\t\"--disable-accelerated-2d-canvas\",\n\t\t\t\t\t\t\"--disable-gpu\",\n\t\t\t\t\t\t\"--allow-file-access-from-files\", \n\t\t\t\t\t\t\"--enable-local-file-accesses\",\n\t\t\t\t\t\t'--font-render-hinting=none'\n\t\t\t\t\t];\n\n\t\t\t\t\tlet browser = null;\n\n\t\t\t\t\tlet enableDebugFlag = await Flags.findOne({type: 'Enable Debug PDF'});\n\t\t\t\t\t\n\t\t\t\t\tif (enableDebugFlag && enableDebugFlag.value) {\n\t\t\t\t\t\tbrowser = await puppeteer.launch({\n\t\t\t\t\t\t\theadless: false, // run in headless mode\n\t\t\t\t\t\t\tdevtools: true, // run with dev tools\n\t\t\t\t\t\t\targs,\n\t\t\t\t\t\t\tignoreDefaultArgs: [\"--disable-extensions\"]\n\t\t\t\t\t\t}); // run browser\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tbrowser = await puppeteer.launch({\n\t\t\t\t\t\t\theadless: true, // run in headless mode\n\t\t\t\t\t\t\tdevtools: false, // run with dev tools\n\t\t\t\t\t\t\targs,\n\t\t\t\t\t\t\tignoreDefaultArgs: [\"--disable-extensions\"]\n\t\t\t\t\t\t}); // run browser\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tconst page = await browser.newPage(); // create new tab\n\n\t\t\t\t\tlet pathToFont = '';\n\n\t\t\t\t\tif (fs.existsSync(path.join(__dirname, ('../private/fonts/dejavuserif.woff')))) {\n\t\t\t\t\t\tpathToFont = path.join(__dirname, ('../private/fonts/'));\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (fs.existsSync(path.join(this.clientDir, ('./private/fonts/dejavuserif.woff')))) {\n\t\t\t\t\t\t\tpathToFont = path.join(this.clientDir, ('./private/fonts/'));\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tpathToFont = '/usr/share/fonts/dejavu/';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet dejavuserif_woff = 'data:application/font-woff;base64,' + Buffer.from(fs.readFileSync(pathToFont + 'dejavuserif.woff').buffer).toString('base64');\n\t\t\t\t\tlet dejavuserifBold_woff = 'data:application/font-woff;base64,' + Buffer.from(fs.readFileSync(pathToFont + 'dejavuserif-bold.woff').buffer).toString('base64');\n\t\t\t\t\tlet dejavuserifItalic_woff = 'data:application/font-woff;base64,' + Buffer.from(fs.readFileSync(pathToFont + 'dejavuserif-italic.woff').buffer).toString('base64');\n\t\t\t\t\tlet dejavuserifBoldItalic_woff = 'data:application/font-woff;base64,' + Buffer.from(fs.readFileSync(pathToFont + 'dejavuserif-bolditalic.woff').buffer).toString('base64');\n\n\t\t\t\t\tlet content = `\n\t\t\t\t\t\t<head>\n\t\t\t\t\t\t\t<style type=\"text/css\">\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: normal;\n\t\t\t\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\t\t\t\tsrc: url(\"` + dejavuserif_woff + `\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: normal;\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tsrc: url(\"` + dejavuserifBold_woff + `\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: italic;\n\t\t\t\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\t\t\t\tsrc: url(\"` + dejavuserifItalic_woff + `\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: italic;\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tsrc: url(\"` + dejavuserifBoldItalic_woff + `\") format('woff');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tbody {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif', serif;\n\t\t\t\t\t\t\t\t\tfont-size: ` + (fontSize ? fontSize : '12px') + `;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.row {\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\tflex-wrap: wrap;\n\t\t\t\t\t\t\t\t\t-webkit-flex-wrap: wrap;\n\t\t\t\t\t\t\t\t\tpage-break-inside: avoid !important;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.page-break {\n\t\t\t\t\t\t\t\t\tpage-break-before: always !important;\n\t\t\t\t\t\t\t\t\tpadding-top: 1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.cell {\n\t\t\t\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\t\t\t\tpadding : 2px;\n\t\t\t\t\t\t\t\t\t-webkit-flex: 1;\n\t\t\t\t\t\t\t\t\tword-wrap: break-word;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.cell-no-padding {\n\t\t\t\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\t\t\t\t-webkit-flex: 1;\n\t\t\t\t\t\t\t\t\tword-wrap: break-word;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered {\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: center;\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered-left {\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: flex-start;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered-right {\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: flex-end;\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t.box {\n\t\t\t\t\t\t\t\t\tborder: 1px solid black;\n\t\t\t\t\t\t\t\t\tmargin: -1px 0px 0px -1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.boxNoBorder {\n\t\t\t\t\t\t\t\t\tmargin: -1px 0px 0px -1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tpre {\n\t\t\t\t\t\t\t\t\twhite-space: pre-wrap; /* css-3 */\n\t\t\t\t\t\t\t\t\twhite-space: -moz-pre-wrap; /* Mozilla, since 1999 */\n\t\t\t\t\t\t\t\t\twhite-space: -pre-wrap; /* Opera 4-6 */\n\t\t\t\t\t\t\t\t\twhite-space: -o-pre-wrap; /* Opera 7 */\n\t\t\t\t\t\t\t\t\tword-wrap: break-word; /* Internet Explorer 5.5+ */\n\t\t\t\t\t\t\t\t\tfont-size: 12px;\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif'; \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</style>\n\t\t\t\t\t\t</head>\n\t\t\t\t\t\t<body>\n\t\t\t\t\t` + html.replace(new RegExp('flex-basis:', 'g'), '-webkit-flex-basis:').replace(new RegExp('flex:', 'g'), '-webkit-flex:') + '</body>';\n\n\t\t\t\t\tawait page.setContent(content, { waitUntil: ['domcontentloaded', 'load', 'networkidle0'] });\n\t\t\t\t\tawait page.evaluateHandle('document.fonts.ready');\n\t\t\t\t\t\n\t\t\t\t\tlet tmpFileName = (pdfCnt++) + '-' + fileName.replace(new RegExp(/[^0-9\\.a-zA-Z]/g), '');\t\n\t\t\t\t\n\t\t\t\t\tawait page.pdf({\n\t\t\t\t\t\tscale: 1,\n\t\t\t\t\t\tlandscape: orientation === 'portrait' ? false : true,\n\t\t\t\t\t\tformat: 'letter',\n\t\t\t\t\t\tmargin: {\n\t\t\t\t\t\t\ttop: '1cm',\n\t\t\t\t\t\t\tbottom: '1cm',\n\t\t\t\t\t\t\tleft: '1cm',\n\t\t\t\t\t\t\tright: '1cm'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tprintBackground: true,\n\t\t\t\t\t\tdisplayHeaderFooter: true,\n\t\t\t\t\t\theaderTemplate: `\n\t\t\t\t\t\t\t<style>\n\t\t\t\t\t\t\t\t#header { \n\t\t\t\t\t\t\t\t\tpadding: 0 0 10px 10px !important; \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</style>\n\t\t\t\t\t\t\t<span></span>\n\t\t\t\t\t\t`,\n\t\t\t\t\t\tfooterTemplate: `\n\t\t\t\t\t\t\t<style>\n\t\t\t\t\t\t\t\t#footer { \n\t\t\t\t\t\t\t\t\tpadding: 0 0 10px 10px !important;\n\t\t\t\t\t\t\t\t\tfont-size: 10px;\n\t\t\t\t\t\t\t\t\tfont-family: san-serif;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</style>\n\t\t\t\t\t\t\t<div style=\"padding-bottom: 2px; padding-right: 15px; text-align: right; width: 100%;\">\n\t\t\t\t\t\t\t\tPage <span class=\"pageNumber\"></span> of <span class=\"totalPages\"></span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`,\n\t\t\t\t\t\tpath: path.join(__dirname, (tmpFileName)),\n\t\t\t\t\t\ttimeout: 0\n\t\t\t\t\t});\n\n\t\t\t\t\tif (enableDebugFlag && enableDebugFlag.value) {\n\t\t\t\t\t\t// Set viewport dimensions based on orientation\n\t\t\t\t\t\tif (orientation === 'landscape') {\n\t\t\t\t\t\t\tawait page.setViewport({ width: 1100, height: 850 });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawait page.setViewport({ width: 850, height: 1100 });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tawait new Promise(() => {})\n\t\t\t\t\t}\n\n\t\t\t\t\tawait browser.close();\n\t\t\t\t\t\n\t\t\t\t\tif (fs.existsSync(path.join(__dirname, (tmpFileName)))) {\n\t\t\t\t\t\tfs.readFile(path.join(__dirname, (tmpFileName)), (errRead, data) => {\n\t\t\t\t\t\t\tif (!errRead) {\n\t\t\t\t\t\t\t\tfs.unlinkSync(path.join(__dirname, (tmpFileName)));\n\t\t\t\t\t\t\t\tif (!upload) {\n\t\t\t\t\t\t\t\t\tresolve('data:application/pdf;base64,' + Buffer.from(data).toString('base64'));\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\tlet fileData = 'data:application/pdf;base64,' + Buffer.from(data).toString('base64');\n\t\t\t\t\t\t\t\t\tthis.callMethodInternal('uploadFileAndSave', fileName, fileData, (4 * Math.ceil(fileData.length / 3)), uploadFileOrder !== null ? uploadFileOrder : -1, uploadFileType, false, (err, res) => {\n\t\t\t\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\t\t\t\treject(err);\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\tresolve(res);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\treject('No file');\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\treject('No tmp file');\n\t\t\t\t\t\tconsole.log('No tmp file ', tmpFileName);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tgeneratePDFNoPageNumber: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\thtml: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfileName: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\torientation: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tfontSize: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tupload: {\n\t\t\t\t\ttype: Boolean,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tuploadFileOrder: {\n\t\t\t\t\ttype: Number,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tuploadFileType: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(html, fileName, orientation = 'portrait', fontSize = '12px', upload = false, uploadFileOrder = -1, uploadFileType = '') {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\t// console.log(new Date(), 'GENERATE PDF CALL', fileName, orientation, fontSize, upload);\n\n\t\t\t\t\tconst args = [\n\t\t\t\t\t\t\"--disable-dev-shm-usage\",\n\t\t\t\t\t\t\"--no-sandbox\",\n\t\t\t\t\t\t\"--disable-setuid-sandbox\",\n\t\t\t\t\t\t\"--disable-accelerated-2d-canvas\",\n\t\t\t\t\t\t\"--disable-gpu\",\n\t\t\t\t\t\t\"--allow-file-access-from-files\", \n\t\t\t\t\t\t\"--enable-local-file-accesses\",\n\t\t\t\t\t\t'--font-render-hinting=none'\n\t\t\t\t\t];\n\n\t\t\t\t\tconst browser = await puppeteer.launch({\n\t\t\t\t\t\theadless: true, // run in headless mode\n\t\t\t\t\t\tdevtools: false, // run with dev tools\n\t\t\t\t\t\targs,\n\t\t\t\t\t\tignoreDefaultArgs: [\"--disable-extensions\"]\n\t\t\t\t\t}); // run browser\n\t\t\t\t\t\n\t\t\t\t\tconst page = await browser.newPage(); // create new tab\n\n\t\t\t\t\tlet pathToFont = '';\n\n\t\t\t\t\tif (fs.existsSync(path.join(__dirname, ('../private/fonts/dejavuserif.woff')))) {\n\t\t\t\t\t\tpathToFont = path.join(__dirname, ('../private/fonts/'));\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (fs.existsSync(path.join(this.clientDir, ('./private/fonts/dejavuserif.woff')))) {\n\t\t\t\t\t\t\tpathToFont = path.join(this.clientDir, ('./private/fonts/'));\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tpathToFont = '/usr/share/fonts/dejavu/';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet dejavuserif_woff = 'data:application/font-woff;base64,' + Buffer.from(fs.readFileSync(pathToFont + 'dejavuserif.woff').buffer).toString('base64');\n\t\t\t\t\tlet dejavuserifBold_woff = 'data:application/font-woff;base64,' + Buffer.from(fs.readFileSync(pathToFont + 'dejavuserif-bold.woff').buffer).toString('base64');\n\t\t\t\t\tlet dejavuserifItalic_woff = 'data:application/font-woff;base64,' + Buffer.from(fs.readFileSync(pathToFont + 'dejavuserif-italic.woff').buffer).toString('base64');\n\t\t\t\t\tlet dejavuserifBoldItalic_woff = 'data:application/font-woff;base64,' + Buffer.from(fs.readFileSync(pathToFont + 'dejavuserif-bolditalic.woff').buffer).toString('base64');\n\n\t\t\t\t\tlet content = `\n\t\t\t\t\t\t<head>\n\t\t\t\t\t\t\t<style type=\"text/css\">\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: normal;\n\t\t\t\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\t\t\t\tsrc: url(\"` + dejavuserif_woff + `\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: normal;\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tsrc: url(\"` + dejavuserifBold_woff + `\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: italic;\n\t\t\t\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\t\t\t\tsrc: url(\"` + dejavuserifItalic_woff + `\") format('woff');\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@font-face {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif';\n\t\t\t\t\t\t\t\t\tfont-style: italic;\n\t\t\t\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\t\t\t\tsrc: url(\"` + dejavuserifBoldItalic_woff + `\") format('woff');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tbody {\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif', serif;\n\t\t\t\t\t\t\t\t\tfont-size: ` + (fontSize ? fontSize : '12px') + `;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.row {\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\t\t\t\tflex-wrap: wrap;\n\t\t\t\t\t\t\t\t\t-webkit-flex-wrap: wrap;\n\t\t\t\t\t\t\t\t\tpage-break-inside: avoid !important;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.page-break {\n\t\t\t\t\t\t\t\t\tpage-break-before: always !important;\n\t\t\t\t\t\t\t\t\tpadding-top: 1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.cell {\n\t\t\t\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\t\t\t\tpadding : 2px;\n\t\t\t\t\t\t\t\t\t-webkit-flex: 1;\n\t\t\t\t\t\t\t\t\tword-wrap: break-word;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.cell-no-padding {\n\t\t\t\t\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\t\t\t\t\t-webkit-flex: 1;\n\t\t\t\t\t\t\t\t\tword-wrap: break-word;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered {\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: center;\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered-left {\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: flex-start;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.centered-right {\n\t\t\t\t\t\t\t\t\t-webkit-justify-content: flex-end;\n\t\t\t\t\t\t\t\t\t-webkit-align-items: center;\n\t\t\t\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t.box {\n\t\t\t\t\t\t\t\t\tborder: 1px solid black;\n\t\t\t\t\t\t\t\t\tmargin: -1px 0px 0px -1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t.boxNoBorder {\n\t\t\t\t\t\t\t\t\tmargin: -1px 0px 0px -1px;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tpre {\n\t\t\t\t\t\t\t\t\twhite-space: pre-wrap; /* css-3 */\n\t\t\t\t\t\t\t\t\twhite-space: -moz-pre-wrap; /* Mozilla, since 1999 */\n\t\t\t\t\t\t\t\t\twhite-space: -pre-wrap; /* Opera 4-6 */\n\t\t\t\t\t\t\t\t\twhite-space: -o-pre-wrap; /* Opera 7 */\n\t\t\t\t\t\t\t\t\tword-wrap: break-word; /* Internet Explorer 5.5+ */\n\t\t\t\t\t\t\t\t\tfont-size: 12px;\n\t\t\t\t\t\t\t\t\tfont-family: 'Dejavu Serif'; \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</style>\n\t\t\t\t\t\t\t<meta charset=\"UTF-8\">\n\t\t\t\t\t\t</head>\n\t\t\t\t\t\t<body>\n\t\t\t\t\t` + html.replace(new RegExp('flex-basis:', 'g'), '-webkit-flex-basis:').replace(new RegExp('flex:', 'g'), '-webkit-flex:') + '</body>';\n\n\t\t\t\t\tawait page.setContent(content, { waitUntil: ['domcontentloaded', 'load', 'networkidle0'] });\n\t\t\t\t\tawait page.evaluateHandle('document.fonts.ready');\n\t\t\t\t\t\n\t\t\t\t\tlet tmpFileName = (pdfCnt++) + '-' + fileName.replace(new RegExp(/[^0-9\\.a-zA-Z]/g), '');\t\n\t\t\t\t\n\t\t\t\t\tawait page.pdf({\n\t\t\t\t\t\tscale: 1,\n\t\t\t\t\t\tlandscape: orientation === 'portrait' ? false : true,\n\t\t\t\t\t\tformat: 'letter',\n\t\t\t\t\t\tmargin: {\n\t\t\t\t\t\t\ttop: '1cm',\n\t\t\t\t\t\t\tbottom: '1cm',\n\t\t\t\t\t\t\tleft: '1cm',\n\t\t\t\t\t\t\tright: '1cm'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tprintBackground: true,\n\t\t\t\t\t\tdisplayHeaderFooter: true,\n\t\t\t\t\t\theaderTemplate: `\n\t\t\t\t\t\t\t<style>\n\t\t\t\t\t\t\t\t#header { \n\t\t\t\t\t\t\t\t\tpadding: 0 0 10px 10px !important; \n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</style>\n\t\t\t\t\t\t\t<span></span>\n\t\t\t\t\t\t`,\n\t\t\t\t\t\tfooterTemplate: `\n\t\t\t\t\t\t<style>\n\t\t\t\t\t\t\t#footer { \n\t\t\t\t\t\t\t\tpadding: 0 0 10px 10px !important;\n\t\t\t\t\t\t\t\tfont-size: 10px;\n\t\t\t\t\t\t\t\tfont-family: san-serif;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</style>\n\t\t\t\t\t\t<div style=\"padding-bottom: 2px; padding-right: 15px; text-align: right; width: 100%;\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`,\n\t\t\t\t\t\tpath: path.join(__dirname, (tmpFileName)),\n\t\t\t\t\t\ttimeout: 0\n\t\t\t\t\t});\n\t\t\t\t\tawait browser.close();\n\t\t\t\t\t\n\t\t\t\t\tif (fs.existsSync(path.join(__dirname, (tmpFileName)))) {\n\t\t\t\t\t\tfs.readFile(path.join(__dirname, (tmpFileName)), (errRead, data) => {\n\t\t\t\t\t\t\tif (!errRead) {\n\t\t\t\t\t\t\t\tfs.unlinkSync(path.join(__dirname, (tmpFileName)));\n\t\t\t\t\t\t\t\tif (!upload) {\n\t\t\t\t\t\t\t\t\tresolve('data:application/pdf;base64,' + Buffer.from(data).toString('base64'));\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\tlet fileData = 'data:application/pdf;base64,' + Buffer.from(data).toString('base64');\n\t\t\t\t\t\t\t\t\tthis.callMethodInternal('uploadFileAndSave', fileName, fileData, (4 * Math.ceil(fileData.length / 3)), uploadFileOrder !== null ? uploadFileOrder : -1, uploadFileType, false, (err, res) => {\n\t\t\t\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\t\t\t\treject(err);\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\tresolve(res);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\treject('No file');\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\treject('No tmp file');\n\t\t\t\t\t\tconsole.log('No tmp file ', tmpFileName);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tmergePDFResolve: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tfileKeys: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'fileKeys.$': {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfileName: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfileType: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(fileKeys: string[], fileName: string, fileType?: string) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\tthis.callMethodInternal('getSignedUrls', fileKeys, 900, (errSigneds, resSigneds) => {\n\t\t\t\t\t\tif (resSigneds && resSigneds.length) {\n\t\t\t\t\t\t\tlet promises = [];\n\t\t\n\t\t\t\t\t\t\tresSigneds.forEach((signedUrl) => {\n\t\t\t\t\t\t\t\tpromises.push(this.callMethodInternal('getDataURIfromURL', signedUrl));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tPromise.all(promises).then(async (fileDatas) => {\n\t\t\t\t\t\t\t\tconst mergedPdf = await PDFDocument.create();\n\t\t\n\t\t\t\t\t\t\t\tfor (let i = 0; i < fileDatas.length; i++) {\n\t\t\t\t\t\t\t\t\tlet fileData = fileDatas[i];\n\t\t\n\t\t\t\t\t\t\t\t\tif (fileData) {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tif (fileData.startsWith('data:application/pdf;base64,')) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst pdf = await PDFDocument.load(fileData, { updateMetadata: false, parseSpeed: ParseSpeeds.Fastest, ignoreEncryption: true });\n\t\t\t\t\t\t\t\t\t\t\t\tconst copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());\n\t\t\t\t\t\t\t\t\t\t\t\tcopiedPages.forEach((page) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmergedPdf.addPage(page);\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse if (fileData.startsWith('data:image/jpeg;base64,/9j/') || fileData.startsWith('data:image/png;base64,/9j/')) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst pdf = await PDFDocument.create();\n\t\t\t\t\t\t\t\t\t\t\t\tconst img = await pdf.embedJpg(fileData);\n\t\t\t\t\t\t\t\t\t\t\t\tconst page = pdf.addPage();\n\t\t\t\t\t\t\t\t\t\t\t\tlet imgDim = img.scaleToFit(page.getWidth() * 0.75, page.getHeight() * 0.75);\n\t\t\t\t\t\t\t\t\t\t\t\tpage.drawImage(img, {\n\t\t\t\t\t\t\t\t\t\t\t\t\tx: page.getWidth() / 2 - imgDim.width / 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\ty: page.getHeight() / 2 - imgDim.height / 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: imgDim.width,\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: imgDim.height,\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\tconst copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());\n\t\t\t\t\t\t\t\t\t\t\t\tcopiedPages.forEach((page) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmergedPdf.addPage(page);\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse if (fileData.startsWith('data:image/png;base64,iVBOR')) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst pdf = await PDFDocument.create();\n\t\t\t\t\t\t\t\t\t\t\t\tconst img = await pdf.embedPng(fileData);\n\t\t\t\t\t\t\t\t\t\t\t\tconst page = pdf.addPage();\n\t\t\t\t\t\t\t\t\t\t\t\tlet imgDim = img.scaleToFit(page.getWidth() * 0.75, page.getHeight() * 0.75);\n\t\t\t\t\t\t\t\t\t\t\t\tpage.drawImage(img, {\n\t\t\t\t\t\t\t\t\t\t\t\t\tx: page.getWidth() / 2 - imgDim.width / 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\ty: page.getHeight() / 2 - imgDim.height / 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: imgDim.width,\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: imgDim.height,\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\tconst copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());\n\t\t\t\t\t\t\t\t\t\t\t\tcopiedPages.forEach((page) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmergedPdf.addPage(page);\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\tconsole.log('Error - unsupported!!', fileData.slice(0, 60));\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t\t\t\tcatch (error) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('Error processing fileData:', fileData.slice(0, 60), error);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tconsole.log('Error - no filedata!!', fileData);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t\tlet mergedPDFUint8 = await mergedPdf.save();\n\t\t\n\t\t\t\t\t\t\t\tconst b64PDF = 'data:application/pdf;base64,' + Buffer.from(mergedPDFUint8).toString('base64');\n\t\t\n\t\t\t\t\t\t\t\tthis.callMethodInternal('uploadFileAndSave', fileName, b64PDF, (4 * Math.ceil(b64PDF.length / 3)), -1, fileType, false, (errUp, resUp) => {\n\t\t\t\t\t\t\t\t\tresolve(resUp);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.callMethodInternal('insertErrorLog', 'PDF Merge - getSignedUrls', [\n\t\t\t\t\t\t\t\tfileKeys,\n\t\t\t\t\t\t\t\terrSigneds\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\treject(errSigneds);\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\t\n\t\tmergePDFResolveNoSave: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tfileKeys: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'fileKeys.$': {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(fileKeys: string[]) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\tthis.callMethodInternal('getSignedUrls', fileKeys, 900, (errSigneds, resSigneds) => {\n\t\t\t\t\t\tif (resSigneds && resSigneds.length) {\n\t\t\t\t\t\t\tlet promises = [];\n\n\t\t\t\t\t\t\tresSigneds.forEach((signedUrl) => {\n\t\t\t\t\t\t\t\tpromises.push(this.callMethodInternal('getDataURIfromURL', signedUrl));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tPromise.all(promises).then(async (fileDatas) => {\n\t\t\t\t\t\t\t\tconst mergedPdf = await PDFDocument.create();\n\n\t\t\t\t\t\t\t\tfor (let i = 0; i < fileDatas.length; i++) {\n\n\t\t\t\t\t\t\t\t\tlet fileData = fileDatas[i];\n\n\t\t\t\t\t\t\t\t\tif (fileData) {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tif (fileData.startsWith('data:application/pdf;base64,')) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst pdf = await PDFDocument.load(fileData, { updateMetadata: false, parseSpeed: ParseSpeeds.Fastest, ignoreEncryption: true});\n\t\t\t\t\t\t\t\t\t\t\t\tconst copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());\n\t\t\t\t\t\t\t\t\t\t\t\tcopiedPages.forEach((page) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmergedPdf.addPage(page);\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse if (fileData.startsWith('data:image/jpeg;base64,/9j/') || fileData.startsWith('data:image/png;base64,/9j/')) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst pdf = await PDFDocument.create();\n\t\t\t\t\t\t\t\t\t\t\t\tconst img = await pdf.embedJpg(fileData);\n\t\t\t\t\t\t\t\t\t\t\t\tconst page = pdf.addPage();\n\t\t\t\t\t\t\t\t\t\t\t\tlet imgDim = img.scaleToFit(page.getWidth() * 0.75, page.getHeight() * 0.75);\n\t\t\t\t\t\t\t\t\t\t\t\tpage.drawImage(img, {\n\t\t\t\t\t\t\t\t\t\t\t\t\tx: page.getWidth() / 2 - imgDim.width / 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\ty: page.getHeight() / 2 - imgDim.height / 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: imgDim.width,\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: imgDim.height,\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\tconst copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());\n\t\t\t\t\t\t\t\t\t\t\t\tcopiedPages.forEach((page) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmergedPdf.addPage(page);\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse if (fileData.startsWith('data:image/png;base64,iVBOR')) {\n\t\t\t\t\t\t\t\t\t\t\t\tconst pdf = await PDFDocument.create();\n\t\t\t\t\t\t\t\t\t\t\t\tconst img = await pdf.embedPng(fileData);\n\t\t\t\t\t\t\t\t\t\t\t\tconst page = pdf.addPage();\n\t\t\t\t\t\t\t\t\t\t\t\tlet imgDim = img.scaleToFit(page.getWidth() * 0.75, page.getHeight() * 0.75);\n\t\t\t\t\t\t\t\t\t\t\t\tpage.drawImage(img, {\n\t\t\t\t\t\t\t\t\t\t\t\t\tx: page.getWidth() / 2 - imgDim.width / 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\ty: page.getHeight() / 2 - imgDim.height / 2,\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: imgDim.width,\n\t\t\t\t\t\t\t\t\t\t\t\t\theight: imgDim.height,\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\tconst copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());\n\t\t\t\t\t\t\t\t\t\t\t\tcopiedPages.forEach((page) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmergedPdf.addPage(page);\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\t\tconsole.log('Error - unsupported!!', fileData.slice(0, 60));\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcatch (error) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('Error processing fileData:', fileData.slice(0, 60), error);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tconsole.log('Error - no filedata!!', fileData);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tlet mergedPDFUint8 = await mergedPdf.save();\n\n\t\t\t\t\t\t\t\tconst b64PDF = 'data:application/pdf;base64,' + Buffer.from(mergedPDFUint8).toString('base64');\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tresolve(b64PDF);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.callMethodInternal('insertErrorLog', 'PDF Merge - getSignedUrls', [\n\t\t\t\t\t\t\t\tfileKeys,\n\t\t\t\t\t\t\t\terrSigneds\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\treject(errSigneds);\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\tmergePDFResolveHtml: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\thtmls: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'htmls.$': {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfileName: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfileType: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tsave: {\n\t\t\t\t\ttype: Boolean,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: function(htmls: string[], fileName: string, fileType?: string, save = true) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tconst mergedPdf = await PDFDocument.create();\n\n\t\t\t\t\tfor (let i = 0; i < htmls.length; i++) {\n\n\t\t\t\t\t\tlet fileData = htmls[i];\n\n\t\t\t\t\t\tif (fileData) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tif (fileData.startsWith('data:application/pdf;base64,')) {\n\t\t\t\t\t\t\t\t\tconst pdf = await PDFDocument.load(fileData, { updateMetadata: false, parseSpeed: ParseSpeeds.Fastest, ignoreEncryption: true });\n\t\t\t\t\t\t\t\t\tconst copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());\n\t\t\t\t\t\t\t\t\tcopiedPages.forEach((page) => {\n\t\t\t\t\t\t\t\t\t\tmergedPdf.addPage(page);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (fileData.startsWith('data:image/jpeg;base64,/9j/') || fileData.startsWith('data:image/png;base64,/9j/')) {\n\t\t\t\t\t\t\t\t\tconst pdf = await PDFDocument.create();\n\t\t\t\t\t\t\t\t\tconst img = await pdf.embedJpg(fileData);\n\t\t\t\t\t\t\t\t\tconst page = pdf.addPage();\n\t\t\t\t\t\t\t\t\tlet imgDim = img.scaleToFit(page.getWidth() * 0.75, page.getHeight() * 0.75);\n\t\t\t\t\t\t\t\t\tpage.drawImage(img, {\n\t\t\t\t\t\t\t\t\t\tx: page.getWidth() / 2 - imgDim.width / 2,\n\t\t\t\t\t\t\t\t\t\ty: page.getHeight() / 2 - imgDim.height / 2,\n\t\t\t\t\t\t\t\t\t\twidth: imgDim.width,\n\t\t\t\t\t\t\t\t\t\theight: imgDim.height,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tconst copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());\n\t\t\t\t\t\t\t\t\tcopiedPages.forEach((page) => {\n\t\t\t\t\t\t\t\t\t\tmergedPdf.addPage(page);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (fileData.startsWith('data:image/png;base64,iVBOR')) {\n\t\t\t\t\t\t\t\t\tconst pdf = await PDFDocument.create();\n\t\t\t\t\t\t\t\t\tconst img = await pdf.embedPng(fileData);\n\t\t\t\t\t\t\t\t\tconst page = pdf.addPage();\n\t\t\t\t\t\t\t\t\tlet imgDim = img.scaleToFit(page.getWidth() * 0.75, page.getHeight() * 0.75);\n\t\t\t\t\t\t\t\t\tpage.drawImage(img, {\n\t\t\t\t\t\t\t\t\t\tx: page.getWidth() / 2 - imgDim.width / 2,\n\t\t\t\t\t\t\t\t\t\ty: page.getHeight() / 2 - imgDim.height / 2,\n\t\t\t\t\t\t\t\t\t\twidth: imgDim.width,\n\t\t\t\t\t\t\t\t\t\theight: imgDim.height,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tconst copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());\n\t\t\t\t\t\t\t\t\tcopiedPages.forEach((page) => {\n\t\t\t\t\t\t\t\t\t\tmergedPdf.addPage(page);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tconsole.log('Error - unsupported!!', fileData.slice(0, 60));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcatch (error) {\n\t\t\t\t\t\t\t\tconsole.log('Error processing fileData:', fileData.slice(0, 60), error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconsole.log('Error - no filedata!!', fileData);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet mergedPDFUint8 = await mergedPdf.save();\n\n\t\t\t\t\tconst b64PDF = 'data:application/pdf;base64,' + Buffer.from(mergedPDFUint8).toString('base64');\n\n\t\t\t\t\tif (save) {\n\t\t\t\t\t\tthis.callMethodInternal('uploadFileAndSave', fileName, b64PDF, (4 * Math.ceil(b64PDF.length / 3)), -1, fileType, false, (errUp, resUp) => {\n\t\t\t\t\t\t\tresolve(resUp);\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\tresolve(b64PDF);\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
package/server-app.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var __awaiter=this&&this.__awaiter||function(e,n,s,o){return new(s=s||Promise)(function(t,r){function fulfilled(e){try{step(o.next(e))}catch(e){r(e)}}function rejected(e){try{step(o.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((o=o.apply(e,n||[])).next())})},__generator=this&&this.__generator||function(n,s){var o,i,a,c={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},u={next:verb(0),throw:verb(1),return:verb(2)};return"function"==typeof Symbol&&(u[Symbol.iterator]=function(){return this}),u;function verb(t){return function(e){var r=[t,e];if(o)throw new TypeError("Generator is already executing.");for(;c=u&&r[u=0]?0:c;)try{if(o=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 c.label++,{value:r[1],done:!1};case 5:c.label++,i=r[1],r=[0];continue;case 7:r=c.ops.pop(),c.trys.pop();continue;default:if(!(a=0<(a=c.trys).length&&a[a.length-1])&&(6===r[0]||2===r[0])){c=0;continue}if(3===r[0]&&(!a||r[1]>a[0]&&r[1]<a[3]))c.label=r[1];else if(6===r[0]&&c.label<a[1])c.label=a[1],a=r;else{if(!(a&&c.label<a[2])){a[2]&&c.ops.pop(),c.trys.pop();continue}c.label=a[2],c.ops.push(r)}}r=s.call(n,c)}catch(e){r=[6,e],i=0}finally{o=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],n=0;if(t)return t.call(e);if(e&&"number"==typeof e.length)return{next:function(){return{value:(e=e&&n>=e.length?void 0:e)&&e[n++],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 n,s,o=t.call(e),i=[];try{for(;(void 0===r||0<r--)&&!(n=o.next()).done;)i.push(n.value)}catch(e){s={error:e}}finally{try{n&&!n.done&&(t=o.return)&&t.call(o)}finally{if(s)throw s.error}}return i},__spreadArray=this&&this.__spreadArray||function(e,r,t){if(t||2===arguments.length)for(var n,s=0,o=r.length;s<o;s++)!n&&s in r||((n=n||Array.prototype.slice.call(r,0,s))[s]=r[s]);return e.concat(n||Array.prototype.slice.call(r))},http_1=(Object.defineProperty(exports,"__esModule",{value:!0}),require("http")),express=require("express"),bodyParser=require("body-parser"),xmlParser=require("express-xml-bodyparser"),WebSocket=require("ws"),jwt=require("jsonwebtoken"),moment=require("moment-timezone"),common_1=require("./util/common"),mongo_manager_1=require("./managers/mongo.manager"),cron_manager_1=require("./managers/cron.manager"),method_manager_1=require("./managers/method.manager"),subscription_manager_1=require("./managers/subscription.manager"),monitor_manager_1=require("./managers/monitor.manager"),log_collection_1=require("./collections/log.collection"),log_method_latency_collection_1=require("./collections/log-method-latency.collection"),user_collection_1=require("./collections/user.collection"),home_1=require("./http/home"),auth_1=require("./http/auth"),health_1=require("./http/health"),index_1=require("./index"),mongodb_1=require("mongodb"),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"),ResolveIOMainServer=function(){function ResolveIOMainServer(e,r,t,n,s,o,i){void 0===i&&(i=!1);var a=this;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._serverConfig=r,this._clientRoutes=t,this._clientDir=n,this.sesMail=s,this.standardProgram=o,this.publicProgram=i,this._serverStartTime=new Date,this._lastErrorMsg=null,this._monitorManager=new monitor_manager_1.MonitorManager(e,r),this._monitorManagerFunction=new monitor_manager_1.MonitorManagerFunction,this._isWorkersEnabled="true"===process.env.IS_WORKERS_ENABLED,this._isWorkerInstance="true"===process.env.IS_WORKER_INSTANCE,setInterval(function(){a._subscriptionManager&&a._subscriptionManager.getEnableDebug()&&(console.log(new Date,"Server App","Msg Recv Hits",a._debugMsgRecv),console.log(new Date,"Server App","Msg Queue Hits",a._debugMsgQueue)),a._debugMsgQueue=0,a._debugMsgRecv=0},6e4),process.on("unhandledRejection",function(n,s){return __awaiter(a,void 0,void 0,function(){var r,t=this;return __generator(this,function(e){switch(e.label){case 0:return n&&"MongoError"===n.name&&48===n.code?[2]:(console.error(new Date,"Unhandled Rejection at Promise",[n,s]),r=moment().diff(this._serverStartTime,"seconds"),n&&("MongoNetworkTimeoutError"===n.name||n 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 - "+this._serverConfig.CLIENT_NAME,JSON.stringify({name:n.name,message:n.message,stack:n.stack},null,2))]):[3,2]:[3,3]);case 1:e.sent(),process.exit(1),e.label=2;case 2:return[3,10];case 3:return n&&"MongoError"===n.name&&"not master"===n.message?60<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 - "+this._serverConfig.CLIENT_NAME,JSON.stringify([n.name,n.message,n.stack],null,2))]):[3,5]:[3,6];case 4:e.sent(),e.label=5;case 5:return process.exit(1),[3,10];case 6:return n&&"MongoError"===n.name&&"not master and slaveOk=false"===n.message?60<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 - "+this._serverConfig.CLIENT_NAME,JSON.stringify([n.name,n.message,n.stack],null,2))]):[3,8]:[3,9];case 7:e.sent(),e.label=8;case 8:return process.exit(1),[3,10];case 9:n&&"StatusError"!==n.name&&""!==n.message&&60<r&&!this._lastErrorMsg&&(this._lastErrorMsg=new Date,setTimeout(function(){t._lastErrorMsg=null},6e4),this._methodManager.sendEmail("dev@resolveio.com","SERVER - Unhandled Rejection - "+this._serverConfig.CLIENT_NAME,JSON.stringify([n.name,n.message,n.stack],null,2))),e.label=10;case 10:return[2]}})})}),process.on("uncaughtException",function(t){return __awaiter(a,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 - "+this._serverConfig.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(){a._rebootFlag=!0,a._serverHTTP&&a._serverHTTP.close(),a.safeShutdown()}),process.on("SIGTERM",function(){a._rebootFlag=!0,a._serverHTTP&&a._serverHTTP.close(),a.safeShutdown()}),process.on("SIGQUIT",function(){a._rebootFlag=!0,a._serverHTTP&&a._serverHTTP.close(),a.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,this._serverConfig,this._clientDir,this._monitorManagerFunction,this._isWorkersEnabled,this._isWorkerInstance),this._cronManager=new cron_manager_1.CronManager(this),this.startWorkerInstance()):(console.log("Running as a Server instance"),this._websocketManager=new websocket_manager_1.WebSocketManager(this),this.startServerInstance(r),this._methodManager=new method_manager_1.MethodManager(this,this._serverConfig,this._clientDir,this._monitorManagerFunction,this._isWorkersEnabled,this._isWorkerInstance),this._subscriptionManager=new subscription_manager_1.SubscriptionManager(this,this._serverWSS,this._serverConfig,this._monitorManagerFunction),this.listen()):(console.log("Running with Workers Disabled"),this._websocketManager=new websocket_manager_1.WebSocketManager(this),this.startServerInstance(r),this._methodManager=new method_manager_1.MethodManager(this,this._serverConfig,this._clientDir,this._monitorManagerFunction,this._isWorkersEnabled,this._isWorkerInstance),this._subscriptionManager=new subscription_manager_1.SubscriptionManager(this,this._serverWSS,this._serverConfig,this._monitorManagerFunction),this._cronManager=new cron_manager_1.CronManager(this),this.listen())}return ResolveIOMainServer.prototype.startServerInstance=function(e){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||e.PORT_HTTP||8080,this._portWSS=process.env.PORT_WSS||e.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,e),(0,health_1.setupHealthRoutes)(this._app,e),"ResolveIO"!==e.CLIENT_NAME&&!this.standardProgram||(0,home_1.setupHomeRoutes)(this,this._app,e),"DEBUG"===this.LOGGER&&console.log("Setup express routes")},ResolveIOMainServer.prototype.startWorkerInstance=function(){return __awaiter(this,void 0,void 0,function(){var r,t,n,s,o,i,a,c=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(c,void 0,void 0,function(){var r,t,n=this;return __generator(this,function(e){return"insert"===s.operationType?(r=s.fullDocument)&&setTimeout(function(){n.processTask(r)},25*this._workerTasks.length):"update"===s.operationType&&(t=s.fullDocument)&&"pending"===t.status&&setTimeout(function(){n.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(),setTimeout(function(){return c.startWorkerInstance()},5e3)}),r.on("close",function(){console.log("Change stream worker task requests closed. Restarting..."),setTimeout(function(){return c.startWorkerInstance()},5e3)}),[4,worker_task_request_collection_1.WorkerTaskRequests.find({status:"pending"},{sort:{createdAt:1}})];case 1:t=e.sent();try{for(n=__values(t),s=n.next();!s.done;s=n.next())o=s.value,this.processTask(o)}catch(e){i={error:e}}finally{try{s&&!s.done&&(a=n.return)&&a.call(n)}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(n){return __awaiter(r,void 0,void 0,function(){var r,t;return __generator(this,function(e){switch(e.label){case 0:if(!n)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()})):index_1.ResolveIOServer.getMongoConnection()?index_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(o,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",o,i),r=o.req.headers["sec-websocket-protocol"].split(/,/),(o.origin===this._serverConfig.ROOT_URL||o.origin===this._serverConfig.SEC_ROOT_URL||o.origin===this._serverConfig.RESOLVEIO_URL||o.origin===this._serverConfig.RESOLVEIO_SECONDARY_URL)&&(r=r[0])?jwt.verify(r,this._serverConfig.JWT_SECRET,function(t,n){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:o.req.id_user=n.id_user,e.label=2;case 2:return e.trys.push([2,4,,5]),[4,user_collection_1.Users.findById(n.id_user)];case 3:return(r=e.sent())?(o.req.user=r.fullname,o.req.user_readonly=r.readonly||!1,o.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(u,e){t.publicProgram||(u.id_user=e.id_user,u.user=e.user,u.user_readonly=e.user_readonly,u.doc_user=e.doc_user,"Admin"!==u.user&&"ResolveIO"!==t._serverConfig.CLIENT_NAME&&t.getMethodManager().callMethodInternal.call(t.getMethodManager(),"supportCreateBillingUser",{id_user:u.id_user,user:u.user,date:new Date,client:index_1.ResolveIOServer.getClientName()})),u.id_socket=(0,mongo_manager_1.objectIdHexString)(),u.retryCnt=0,t._websocketManager.addWebSocket(u),t._subscriptionManager.createLoggedInUser(u.id_socket).then(function(){setTimeout(function(){u.pingTime=new Date,u.send("ping",function(e){e&&(t._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","Error WS Ping"),t.unsubscribeWS(u))})},5e3)}),"DEBUG"===t.LOGGER&&console.log("Connection from: "+e.user),u.isAlive=!0,u.on("message",function(c){return __awaiter(t,void 0,void 0,function(){var r,t,n,s,o,i,a=this;return __generator(this,function(e){switch(e.label){case 0:"DEBUG"===this.LOGGER&&console.log("Message from: "+u.user,c),this._debugMsgRecv+=1,s=!1,r=[];try{r=JSON.parse(c,common_1.dateReviver)}catch(e){console.log("Error - JSON.parse",c),this._methodManager.sendEmail("dev@resolveio.com","SERVER - JSON Parse Error - "+this._serverConfig.CLIENT_NAME,JSON.stringify([c,e])),s=!0}if(s)return[3,8];if("string"==typeof r&&"ping"===r)u&&u.readyState===u.OPEN&&u.send("pong",function(e){e&&(a._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","Error WS Pong"),a.unsubscribeWS(u))});else if("string"==typeof r&&"pong"===r)u.isAlive=!0,u.pongTime=new Date,u.latency=moment.duration(moment(u.pongTime).diff(u.pingTime)).asMilliseconds(),this._subscriptionManager.loggedInLatency(u);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),n=t.next(),e.label=2;case 2:return n.done?[3,5]:(s=n.value,[4,this.processSocketMessage(u,s)]);case 3:e.sent(),e.label=4;case 4:return n=t.next(),[3,2];case 5:return[3,8];case 6:return o=e.sent(),o={error:o},[3,8];case 7:try{n&&!n.done&&(i=t.return)&&i.call(t)}finally{if(o)throw o.error}return[7];case 8:return[2]}})})}).on("end",function(){t.unsubscribeWS(u),t._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","WS End")}).on("close",function(){t.unsubscribeWS(u),t._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","WS Close")}).on("error",function(e){t.unsubscribeWS(u),t._subscriptionManager.getEnableDebug()&&console.log(new Date,u.user,u.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(m,v){return __awaiter(this,void 0,void 0,function(){var r,t,n,s,o,i,a,c,u,l,_,g,h,d,p,f;return __generator(this,function(e){switch(e.label){case 0:return(r=v[0],this.publicProgram||!this._clientRoutes.some(function(e){return r.includes(e)})||m.doc_user.roles.groups.some(function(e){return e.views.some(function(e){return r.includes(e)||e.includes(r)})})||m.doc_user.roles.super_admin)?(a=v[1],t=v[2],"subscription"!==(n=v[3])?[3,1]:(i=v[4],p=v[5],"sub"===i?this._subscriptionManager.subscribe(r,a,m,t,p,v.slice(6)):this._subscriptionManager.unsubscribe(r,a,m,t,p,v.slice(6)),[3,11])):[2];case 1:if(this.publicProgram||"offline"!==n)return[3,10];d={messageId:t,hasError:!1,data:"ACK"},m&&m.readyState===m.OPEN&&this._websocketManager.send(m,JSON.stringify(d)),this._offlineUpdates.push(m),s=v[4],o=0,e.label=2;case 2:if(!(o<s.length))return[3,9];if(i=s[o],c=i.data,a={messageId:i.data[2],hasError:!1,data:"ACK"},m&&m.readyState===m.OPEN&&this._websocketManager.send(m,JSON.stringify(a)),c.shift(),c.shift(),c.shift(),c.shift(),g=c.shift(),h=(0,mongo_manager_1.objectIdHexString)(),"insertDocument"===g&&"driver-gps"===c[0])return[3,8];if(log_method_latency_collection_1.LogMethodLatencies.create({_id:h,__v:0,date_start:new Date,date_end:null,latency_ms:0,method:g}),"reportBuilderGetResults"!==g&&"reportBuilderGetDistinctValue"!==g&&"reportBuilderBuildTree"!==g&&"generatePDF"!==g&&"getWOOfflineData"!==g&&"countQuery"!==g&&"countWithQuery"!==g&&"countCollectionWithQuery"!==g&&"find"!==g&&"findOne"!==g&&"findWithOptions"!==g&&"getDrivers"!==g&&"processAirdropDistribution"!==g&&log_collection_1.Logs.insertOne({_id:(0,mongo_manager_1.objectIdHexString)(),type:"client-request",collection:"",id_document:"",payload:(0,common_1.getBinarySize)(JSON.stringify(c))<2e5?JSON.stringify(c,null,2):"Too Big",method:g,id_user:m.id_user||"",user:m.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,(p=this._methodManager.callMethodInternal).call.apply(p,__spreadArray([Object.assign({},this._methodManager,method_manager_1.MethodManager.prototype,{id_user:m.id_user,user:m.user,id_ws:m.id_socket}),g],__read(c),!1))];case 4:return e.sent(),[3,6];case 5:return u=e.sent(),console.log(new Date,"Offline Error",JSON.stringify(u,null,2)),[3,6];case 6:return"updateDocumentOffline"!==g&&"updateDocumentPropsOffline"!==g||index_1.ResolveIOServer.getMongoManager().invalidateQueryCache(c[0]),[3,8];case 7:console.log("Offline - Could not find method: "+g),e.label=8;case 8:return o++,[3,2];case 9:return this._offlineUpdates.splice(this._offlineUpdates.map(function(e){return e.id_socket}).indexOf(m.id_socket),1),[3,11];case 10:if(c=__spreadArray([],__read(v),!1),u=c.shift(),l=c.shift(),_=c.shift(),"method"===c.shift()){if(g=c.shift(),m.user_readonly)return[2];h=(0,mongo_manager_1.objectIdHexString)(),log_method_latency_collection_1.LogMethodLatencies.create({_id:h,__v:0,date_start:new Date,date_end:null,latency_ms:0,method:g}),"reportBuilderGetResults"!==g&&"reportBuilderGetDistinctValue"!==g&&"reportBuilderBuildTree"!==g&&"generatePDF"!==g&&"getWOOfflineData"!==g&&"countQuery"!==g&&"countWithQuery"!==g&&"countCollectionWithQuery"!==g&&"find"!==g&&"findOne"!==g&&"findWithOptions"!==g&&"getDrivers"!==g&&"processAirdropDistribution"!==g&&log_collection_1.Logs.insertOne({_id:(0,mongo_manager_1.objectIdHexString)(),type:"client-request",collection:"",id_document:"",payload:(0,common_1.getBinarySize)(JSON.stringify(c))<2e5?JSON.stringify(c,null,2):"Too Big",method:g,id_user:m.id_user||"",user:m.user||"",messageId:_,route:u}),d={messageId:_,hasError:!1,data:"ACK"},m&&m.readyState===m.OPEN&&this._websocketManager.send(m,JSON.stringify(d)),this._methodManager._methods[g]?(f=this._methodManager).callMethod.apply(f,__spreadArray([h,m,l,_,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 this._serverConfig},ResolveIOMainServer}();exports.default=ResolveIOMainServer;
|
|
1
|
+
"use strict";var __awaiter=this&&this.__awaiter||function(e,n,s,o){return new(s=s||Promise)(function(t,r){function fulfilled(e){try{step(o.next(e))}catch(e){r(e)}}function rejected(e){try{step(o.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((o=o.apply(e,n||[])).next())})},__generator=this&&this.__generator||function(n,s){var o,i,a,c={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},u={next:verb(0),throw:verb(1),return:verb(2)};return"function"==typeof Symbol&&(u[Symbol.iterator]=function(){return this}),u;function verb(t){return function(e){var r=[t,e];if(o)throw new TypeError("Generator is already executing.");for(;c=u&&r[u=0]?0:c;)try{if(o=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 c.label++,{value:r[1],done:!1};case 5:c.label++,i=r[1],r=[0];continue;case 7:r=c.ops.pop(),c.trys.pop();continue;default:if(!(a=0<(a=c.trys).length&&a[a.length-1])&&(6===r[0]||2===r[0])){c=0;continue}if(3===r[0]&&(!a||r[1]>a[0]&&r[1]<a[3]))c.label=r[1];else if(6===r[0]&&c.label<a[1])c.label=a[1],a=r;else{if(!(a&&c.label<a[2])){a[2]&&c.ops.pop(),c.trys.pop();continue}c.label=a[2],c.ops.push(r)}}r=s.call(n,c)}catch(e){r=[6,e],i=0}finally{o=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],n=0;if(t)return t.call(e);if(e&&"number"==typeof e.length)return{next:function(){return{value:(e=e&&n>=e.length?void 0:e)&&e[n++],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 n,s,o=t.call(e),i=[];try{for(;(void 0===r||0<r--)&&!(n=o.next()).done;)i.push(n.value)}catch(e){s={error:e}}finally{try{n&&!n.done&&(t=o.return)&&t.call(o)}finally{if(s)throw s.error}}return i},__spreadArray=this&&this.__spreadArray||function(e,r,t){if(t||2===arguments.length)for(var n,s=0,o=r.length;s<o;s++)!n&&s in r||((n=n||Array.prototype.slice.call(r,0,s))[s]=r[s]);return e.concat(n||Array.prototype.slice.call(r))},http_1=(Object.defineProperty(exports,"__esModule",{value:!0}),require("http")),express=require("express"),bodyParser=require("body-parser"),xmlParser=require("express-xml-bodyparser"),WebSocket=require("ws"),jwt=require("jsonwebtoken"),moment=require("moment-timezone"),common_1=require("./util/common"),mongo_manager_1=require("./managers/mongo.manager"),cron_manager_1=require("./managers/cron.manager"),method_manager_1=require("./managers/method.manager"),subscription_manager_1=require("./managers/subscription.manager"),monitor_manager_1=require("./managers/monitor.manager"),log_collection_1=require("./collections/log.collection"),log_method_latency_collection_1=require("./collections/log-method-latency.collection"),user_collection_1=require("./collections/user.collection"),home_1=require("./http/home"),auth_1=require("./http/auth"),health_1=require("./http/health"),index_1=require("./index"),mongodb_1=require("mongodb"),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"),ResolveIOMainServer=function(){function ResolveIOMainServer(e,r,t,n,s,o,i){void 0===i&&(i=!1);var a=this;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._serverConfig=r,this._clientRoutes=t,this._clientDir=n,this.sesMail=s,this.standardProgram=o,this.publicProgram=i,this._serverStartTime=new Date,this._lastErrorMsg=null,this._monitorManager=new monitor_manager_1.MonitorManager(e,r),this._monitorManagerFunction=new monitor_manager_1.MonitorManagerFunction,this._isWorkersEnabled="true"===process.env.IS_WORKERS_ENABLED,this._isWorkerInstance="true"===process.env.IS_WORKER_INSTANCE,setInterval(function(){a._subscriptionManager&&a._subscriptionManager.getEnableDebug()&&(console.log(new Date,"Server App","Msg Recv Hits",a._debugMsgRecv),console.log(new Date,"Server App","Msg Queue Hits",a._debugMsgQueue)),a._debugMsgQueue=0,a._debugMsgRecv=0},6e4),process.on("unhandledRejection",function(n,s){return __awaiter(a,void 0,void 0,function(){var r,t=this;return __generator(this,function(e){switch(e.label){case 0:return n&&"MongoError"===n.name&&48===n.code?[2]:(console.error(new Date,"Unhandled Rejection at Promise",[n,s]),r=moment().diff(this._serverStartTime,"seconds"),n&&("MongoNetworkTimeoutError"===n.name||n 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 - "+this._serverConfig.CLIENT_NAME,JSON.stringify({name:n.name,message:n.message,stack:n.stack},null,2))]):[3,2]:[3,3]);case 1:e.sent(),process.exit(1),e.label=2;case 2:return[3,10];case 3:return n&&"MongoError"===n.name&&"not master"===n.message?60<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 - "+this._serverConfig.CLIENT_NAME,JSON.stringify([n.name,n.message,n.stack],null,2))]):[3,5]:[3,6];case 4:e.sent(),e.label=5;case 5:return process.exit(1),[3,10];case 6:return n&&"MongoError"===n.name&&"not master and slaveOk=false"===n.message?60<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 - "+this._serverConfig.CLIENT_NAME,JSON.stringify([n.name,n.message,n.stack],null,2))]):[3,8]:[3,9];case 7:e.sent(),e.label=8;case 8:return process.exit(1),[3,10];case 9:n&&"StatusError"!==n.name&&""!==n.message&&60<r&&!this._lastErrorMsg&&(this._lastErrorMsg=new Date,setTimeout(function(){t._lastErrorMsg=null},6e4),this._methodManager.sendEmail("dev@resolveio.com","SERVER - Unhandled Rejection - "+this._serverConfig.CLIENT_NAME,JSON.stringify([n.name,n.message,n.stack],null,2))),e.label=10;case 10:return[2]}})})}),process.on("uncaughtException",function(t){return __awaiter(a,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 - "+this._serverConfig.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(){a._rebootFlag=!0,a._serverHTTP&&a._serverHTTP.close(),a.safeShutdown()}),process.on("SIGTERM",function(){a._rebootFlag=!0,a._serverHTTP&&a._serverHTTP.close(),a.safeShutdown()}),process.on("SIGQUIT",function(){a._rebootFlag=!0,a._serverHTTP&&a._serverHTTP.close(),a.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,this._serverConfig,this._clientDir,this._monitorManagerFunction,this._isWorkersEnabled,this._isWorkerInstance),this._cronManager=new cron_manager_1.CronManager(this),this.startWorkerInstance()):(console.log("Running as a Server instance"),this._websocketManager=new websocket_manager_1.WebSocketManager(this),this.startServerInstance(r),this._methodManager=new method_manager_1.MethodManager(this,this._serverConfig,this._clientDir,this._monitorManagerFunction,this._isWorkersEnabled,this._isWorkerInstance),this._subscriptionManager=new subscription_manager_1.SubscriptionManager(this,this._serverWSS,this._serverConfig,this._monitorManagerFunction),this.listen()):(console.log("Running with Workers Disabled"),this._websocketManager=new websocket_manager_1.WebSocketManager(this),this.startServerInstance(r),this._methodManager=new method_manager_1.MethodManager(this,this._serverConfig,this._clientDir,this._monitorManagerFunction,this._isWorkersEnabled,this._isWorkerInstance),this._subscriptionManager=new subscription_manager_1.SubscriptionManager(this,this._serverWSS,this._serverConfig,this._monitorManagerFunction),this._cronManager=new cron_manager_1.CronManager(this),this.listen())}return ResolveIOMainServer.prototype.startServerInstance=function(e){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||e.PORT_HTTP||8080,this._portWSS=process.env.PORT_WSS||e.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,e),(0,health_1.setupHealthRoutes)(this._app,e),"ResolveIO"!==e.CLIENT_NAME&&!this.standardProgram||(0,home_1.setupHomeRoutes)(this,this._app,e),"DEBUG"===this.LOGGER&&console.log("Setup express routes")},ResolveIOMainServer.prototype.startWorkerInstance=function(){return __awaiter(this,void 0,void 0,function(){var r,t,n,s,o,i,a,c=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(c,void 0,void 0,function(){var r,t,n=this;return __generator(this,function(e){return"insert"===s.operationType?(r=s.fullDocument)&&setTimeout(function(){n.processTask(r)},25*this._workerTasks.length):"update"===s.operationType&&(t=s.fullDocument)&&"pending"===t.status&&setTimeout(function(){n.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(),setTimeout(function(){return c.startWorkerInstance()},5e3)}),r.on("close",function(){console.log("Change stream worker task requests closed. Restarting..."),setTimeout(function(){return c.startWorkerInstance()},5e3)}),[4,worker_task_request_collection_1.WorkerTaskRequests.find({status:"pending"},{sort:{createdAt:1}})];case 1:t=e.sent();try{for(n=__values(t),s=n.next();!s.done;s=n.next())o=s.value,this.processTask(o)}catch(e){i={error:e}}finally{try{s&&!s.done&&(a=n.return)&&a.call(n)}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(n){return __awaiter(r,void 0,void 0,function(){var r,t;return __generator(this,function(e){switch(e.label){case 0:if(!n)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()})):index_1.ResolveIOServer.getMongoConnection()?index_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(o,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",o,i),r=o.req.headers["sec-websocket-protocol"].split(/,/),(o.origin===this._serverConfig.ROOT_URL||o.origin===this._serverConfig.SEC_ROOT_URL||o.origin===this._serverConfig.RESOLVEIO_URL||o.origin===this._serverConfig.RESOLVEIO_SECONDARY_URL)&&(r=r[0])?jwt.verify(r,this._serverConfig.JWT_SECRET,function(t,n){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:o.req.id_user=n.id_user,e.label=2;case 2:return e.trys.push([2,4,,5]),[4,user_collection_1.Users.findById(n.id_user)];case 3:return(r=e.sent())?(o.req.user=r.fullname,o.req.user_readonly=r.readonly||!1,o.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(u,e){t.publicProgram||(u.id_user=e.id_user,u.user=e.user,u.user_readonly=e.user_readonly,u.doc_user=e.doc_user,"Admin"!==u.user&&"ResolveIO"!==t._serverConfig.CLIENT_NAME&&t.getMethodManager().callMethodInternal.call(t.getMethodManager(),"supportCreateBillingUser",{id_user:u.id_user,user:u.user,date:new Date,client:index_1.ResolveIOServer.getClientName()})),u.id_socket=(0,mongo_manager_1.objectIdHexString)(),u.retryCnt=0,t._websocketManager.addWebSocket(u),t._subscriptionManager.createLoggedInUser(u.id_socket).then(function(){setTimeout(function(){u.pingTime=new Date,u.send("ping",function(e){e&&(t._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","Error WS Ping"),t.unsubscribeWS(u))})},5e3)}),"DEBUG"===t.LOGGER&&console.log("Connection from: "+e.user),u.isAlive=!0,u.on("message",function(c){return __awaiter(t,void 0,void 0,function(){var r,t,n,s,o,i,a=this;return __generator(this,function(e){switch(e.label){case 0:"DEBUG"===this.LOGGER&&console.log("Message from: "+u.user,c),this._debugMsgRecv+=1,s=!1,r=[];try{r=JSON.parse(c,common_1.dateReviver)}catch(e){console.log("Error - JSON.parse",c),this._methodManager.sendEmail("dev@resolveio.com","SERVER - JSON Parse Error - "+this._serverConfig.CLIENT_NAME,JSON.stringify([c,e])),s=!0}if(s)return[3,8];if("string"==typeof r&&"ping"===r)u&&u.readyState===u.OPEN&&u.send("pong",function(e){e&&(a._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","Error WS Pong"),a.unsubscribeWS(u))});else if("string"==typeof r&&"pong"===r)u.isAlive=!0,u.pongTime=new Date,u.latency=moment.duration(moment(u.pongTime).diff(u.pingTime)).asMilliseconds(),this._subscriptionManager.loggedInLatency(u);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),n=t.next(),e.label=2;case 2:return n.done?[3,5]:(s=n.value,[4,this.processSocketMessage(u,s)]);case 3:e.sent(),e.label=4;case 4:return n=t.next(),[3,2];case 5:return[3,8];case 6:return o=e.sent(),o={error:o},[3,8];case 7:try{n&&!n.done&&(i=t.return)&&i.call(t)}finally{if(o)throw o.error}return[7];case 8:return[2]}})})}).on("end",function(){t.unsubscribeWS(u),t._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","WS End")}).on("close",function(){t.unsubscribeWS(u),t._subscriptionManager.getEnableDebug()&&console.log(new Date,"Server App","WS Close")}).on("error",function(e){t.unsubscribeWS(u),t._subscriptionManager.getEnableDebug()&&console.log(new Date,u.user,u.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(m,v){return __awaiter(this,void 0,void 0,function(){var r,t,n,s,o,i,a,c,u,l,_,g,h,d,p,f;return __generator(this,function(e){switch(e.label){case 0:return(r=v[0],this.publicProgram||!this._clientRoutes.some(function(e){return r.includes(e)})||m.doc_user.roles.groups.some(function(e){return e.views.some(function(e){return r.includes(e)||e.includes(r)})})||m.doc_user.roles.super_admin)?(a=v[1],t=v[2],"subscription"!==(n=v[3])?[3,1]:(i=v[4],c=v[5],"sub"===i?this._subscriptionManager.subscribe(r,a,m,t,c,v.slice(6)):this._subscriptionManager.unsubscribe(r,a,m,t,c,v.slice(6)),[3,11])):[2];case 1:if(this.publicProgram||"offline"!==n)return[3,10];d={messageId:t,hasError:!1,data:"ACK"},m&&m.readyState===m.OPEN&&this._websocketManager.send(m,JSON.stringify(d)),this._offlineUpdates.push(m),s=v[4],o=0,e.label=2;case 2:if(!(o<s.length))return[3,9];if(i=s[o],u=i.data,u.shift(),u.shift(),a=u.shift(),u.shift(),g=u.shift(),h=(0,mongo_manager_1.objectIdHexString)(),c={messageId:a,hasError:!1,data:"ACK"},m&&m.readyState===m.OPEN&&this._websocketManager.send(m,JSON.stringify(c)),"insertDocument"===g&&"driver-gps"===u[0])return[3,8];if(log_method_latency_collection_1.LogMethodLatencies.create({_id:h,__v:0,date_start:new Date,date_end:null,latency_ms:0,method:g}),"reportBuilderGetResults"!==g&&"reportBuilderGetDistinctValue"!==g&&"reportBuilderBuildTree"!==g&&"generatePDF"!==g&&"getWOOfflineData"!==g&&"countQuery"!==g&&"countWithQuery"!==g&&"countCollectionWithQuery"!==g&&"find"!==g&&"findOne"!==g&&"findWithOptions"!==g&&"getDrivers"!==g&&"processAirdropDistribution"!==g&&log_collection_1.Logs.insertOne({_id:(0,mongo_manager_1.objectIdHexString)(),type:"client-request",collection:"",id_document:"",payload:(0,common_1.getBinarySize)(JSON.stringify(u))<2e5?JSON.stringify(u,null,2):"Too Big",method:g,id_user:m.id_user||"",user:m.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,(p=this._methodManager.callMethodInternal).call.apply(p,__spreadArray([Object.assign({},this._methodManager,method_manager_1.MethodManager.prototype,{id_user:m.id_user,user:m.user,id_ws:m.id_socket}),g],__read(u),!1))];case 4:return e.sent(),[3,6];case 5:return p=e.sent(),console.log(new Date,"Offline Error",JSON.stringify(p,null,2)),[3,6];case 6:return"updateDocumentOffline"!==g&&"updateDocumentPropsOffline"!==g||index_1.ResolveIOServer.getMongoManager().invalidateQueryCache(u[0]),[3,8];case 7:console.log("Offline - Could not find method: "+g),e.label=8;case 8:return o++,[3,2];case 9:return this._offlineUpdates.splice(this._offlineUpdates.map(function(e){return e.id_socket}).indexOf(m.id_socket),1),[3,11];case 10:if(u=__spreadArray([],__read(v),!1),f=u.shift(),l=u.shift(),_=u.shift(),"method"===u.shift()){if(g=u.shift(),m.user_readonly)return[2];h=(0,mongo_manager_1.objectIdHexString)(),log_method_latency_collection_1.LogMethodLatencies.create({_id:h,__v:0,date_start:new Date,date_end:null,latency_ms:0,method:g}),"reportBuilderGetResults"!==g&&"reportBuilderGetDistinctValue"!==g&&"reportBuilderBuildTree"!==g&&"generatePDF"!==g&&"getWOOfflineData"!==g&&"countQuery"!==g&&"countWithQuery"!==g&&"countCollectionWithQuery"!==g&&"find"!==g&&"findOne"!==g&&"findWithOptions"!==g&&"getDrivers"!==g&&"processAirdropDistribution"!==g&&log_collection_1.Logs.insertOne({_id:(0,mongo_manager_1.objectIdHexString)(),type:"client-request",collection:"",id_document:"",payload:(0,common_1.getBinarySize)(JSON.stringify(u))<2e5?JSON.stringify(u,null,2):"Too Big",method:g,id_user:m.id_user||"",user:m.user||"",messageId:_,route:f}),d={messageId:_,hasError:!1,data:"ACK"},m&&m.readyState===m.OPEN&&this._websocketManager.send(m,JSON.stringify(d)),this._methodManager._methods[g]?(f=this._methodManager).callMethod.apply(f,__spreadArray([h,m,l,_,g],__read(u),!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 this._serverConfig},ResolveIOMainServer}();exports.default=ResolveIOMainServer;
|
|
2
2
|
//# sourceMappingURL=server-app.js.map
|
package/server-app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/server-app.ts"],"names":["http_1","require","express","bodyParser","xmlParser","WebSocket","jwt","moment","common_1","mongo_manager_1","cron_manager_1","method_manager_1","subscription_manager_1","monitor_manager_1","log_collection_1","log_method_latency_collection_1","user_collection_1","home_1","auth_1","health_1","index_1","mongodb_1","worker_task_request_collection_1","worker_task_response_collection_1","websocket_manager_1","ResolveIOMainServer","mainServer","serverConfig","clientRoutes","clientDir","sesMail","standardProgram","publicProgram","_this","this","_offlineUpdates","_rebootFlag","LOGGER","_clientRoutes","_lastErrorMsg","_debugMsgRecv","_debugMsgQueue","_isWorkersEnabled","_isWorkerInstance","_workerTasks","_safeShutdown","_serverConfig","_clientDir","_serverStartTime","Date","_monitorManager","MonitorManager","_monitorManagerFunction","MonitorManagerFunction","process","env","IS_WORKERS_ENABLED","IS_WORKER_INSTANCE","setInterval","_subscriptionManager","getEnableDebug","console","log","on","error","rej","__awaiter","diffTimeSec","diff","MongoNetworkTimeoutError","setTimeout","_methodManager","sendEmail","JSON","stringify","name","message","stack","_a","sent","exit","_serverHTTP","close","safeShutdown","MethodManager","_cronManager","CronManager","startWorkerInstance","_websocketManager","WebSocketManager","startServerInstance","SubscriptionManager","_serverWSS","listen","prototype","_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","ResolveIOServer","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","serverResMethod","shift","methodLatencyId","LogMethodLatencies","__v","date_start","date_end","latency_ms","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","getServerConfig"],"mappings":"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","file":"server-app.js","sourcesContent":["import { createServer, Server } from 'http';\nimport * as express from 'express';\nimport * as bodyParser from 'body-parser';\nimport * as xmlParser from 'express-xml-bodyparser';\nimport * as WebSocket from 'ws';\nimport * as jwt from 'jsonwebtoken';\n// import * as SegfaultHandler from 'segfault-handler';\nimport * as moment from 'moment-timezone';\n\nimport { dateReviver, getBinarySize, deepCopy } from './util/common';\n\nimport { objectIdHexString } from './managers/mongo.manager';\nimport { CronManager } from './managers/cron.manager';\nimport { MethodManager } from './managers/method.manager';\nimport { SubscriptionManager } from './managers/subscription.manager';\nimport { MonitorManager, MonitorManagerFunction } from './managers/monitor.manager';\n\nimport { ServerResponseModel } from './models/server-response.model';\n\nimport { MethodResponses } from './collections/method-response.collection';\nimport { Logs } from './collections/log.collection';\nimport { LogMethodLatencies } from './collections/log-method-latency.collection';\nimport { Users } from './collections/user.collection';\n\nimport { setupHomeRoutes } from './http/home';\nimport { setupAuthRoutes } from './http/auth';\nimport { setupHealthRoutes } from './http/health';\nimport { ResolveIOServer } from './index';\nimport { MongoNetworkTimeoutError } from 'mongodb';\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';\n\nexport default class ResolveIOMainServer {\n\tprivate _app: express.Application;\n\tprivate _serverHTTP: Server;\n\tprivate _portHTTP: string | number;\n\tprivate _serverWSS: WebSocket.Server;\n\tprivate _portWSS: number;\n\tprivate _serverConfig;\n\tprivate _clientDir;\n\tprivate _offlineUpdates = [];\n\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(mainServer, serverConfig, clientRoutes, clientDir, sesMail, standardProgram, publicProgram = false) {\n\t\tthis._serverConfig = serverConfig;\n\t\tthis._clientRoutes = clientRoutes;\n\t\tthis._clientDir = clientDir;\n\t\tthis.sesMail = sesMail;\n\t\tthis.standardProgram = standardProgram;\n\t\tthis.publicProgram = publicProgram;\n\n\t\tthis._serverStartTime = new Date();\n\t\tthis._lastErrorMsg = null;\n\t\tthis._monitorManager = new MonitorManager(mainServer, serverConfig);\n\t\tthis._monitorManagerFunction = new MonitorManagerFunction();\n\n\t\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\tconsole.error(new Date(), 'Unhandled Rejection at Promise', [error, rej]);\n\t\t\t\n\t\t\tlet diffTimeSec = moment().diff(this._serverStartTime, 'seconds');\n\n\t\t\t// If this is a MongoNetworkTimeoutError, handle it specifically\n\t\t\tif (error && (error['name'] === 'MongoNetworkTimeoutError' || error instanceof MongoNetworkTimeoutError)) {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\t// Sending email notification (using your existing method)\n\t\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - MongoNetworkTimeoutError - Quitting NodeJS - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify({\n\t\t\t\t\t\tname: error['name'],\n\t\t\t\t\t\tmessage: error['message'],\n\t\t\t\t\t\tstack: error['stack']\n\t\t\t\t\t}, null, 2));\n\n\t\t\t\t\t// Exiting the process\n\t\t\t\t\tprocess.exit(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (error && error['name'] === 'MongoError' && error['message'] === 'not master') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Rejection - Quitting NodeJS - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t\t}\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\telse if (error && error['name'] === 'MongoError' && error['message'] === 'not master and slaveOk=false') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Rejection - Quitting NodeJS - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t\t}\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\telse if (error) {\n\t\t\t\tif (error['name'] !== 'StatusError' && error['message'] !== '') {\n\t\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t\t}, 60000);\n\n\t\t\t\t\t\tthis._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Rejection - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tprocess.on('uncaughtException', async error => {\n\t\t\tconsole.error(error, 'Uncaught Exception thrown');\n\n\t\t\tlet diffTimeSec = moment().diff(this._serverStartTime, 'seconds');\n\n\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t}, 60000);\n\t\t\t\t\n\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Exception - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t}\n\t\t});\n\n\t\t//PM2 wants to reboot/restart\n\t\tprocess.on('SIGINT', () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\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, this._serverConfig, this._clientDir, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n this._cronManager = new CronManager(this);\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(serverConfig);\n\t\t\t\tthis._methodManager = new MethodManager(this, this._serverConfig, this._clientDir, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n\t\t\t\tthis._subscriptionManager = new SubscriptionManager(this, this._serverWSS, this._serverConfig, 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(serverConfig);\n\t\t\tthis._methodManager = new MethodManager(this, this._serverConfig, this._clientDir, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n\t\t\tthis._subscriptionManager = new SubscriptionManager(this, this._serverWSS, this._serverConfig, this._monitorManagerFunction);\n this._cronManager = new CronManager(this);\n\t\t\tthis.listen();\n }\n\t}\n\n\tprivate startServerInstance(serverConfig) {\n\t\t// Start express app\n\t\tthis._app = express();\n\n\t\t// Use body parser for http call (login)\n\t\tthis._app.use(bodyParser.json({limit: '50mb', reviver: dateReviver}));\n\t\tthis._app.use(bodyParser.urlencoded({limit: '50mb', extended: true, parameterLimit: 1000000 }));\n\t\tthis._app.use(xmlParser());\n\t\t\n\t\t// Set port\n\t\tthis._portHTTP = process.env.PORT_HTTP || serverConfig['PORT_HTTP'] || 8080;\n\t\tthis._portWSS = process.env.PORT_WSS || serverConfig['PORT_WSS'] || 8081;\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup ports');\n\t\t}\n\n\t\t// Create http server and websock server\n\t\tthis.createServer();\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Create server');\n\t\t}\n\n\t\t// Set CORS\n\t\tthis._app.use(function (req, res, next) {\n\n\t\t\t// Website you wish to allow to connect\n\t\t\t// res.setHeader('Access-Control-Allow-Origin', serverConfig['ROOT_URL']);\n\t\t\tres.setHeader('Access-Control-Allow-Origin', '*');\n\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, serverConfig);\n\t\tsetupHealthRoutes(this._app, serverConfig);\n\n\t\tif (serverConfig['CLIENT_NAME'] === 'ResolveIO' || this.standardProgram) {\n\t\t\tsetupHomeRoutes(this, this._app, serverConfig);\n\t\t}\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup express routes');\n\t\t}\n\t}\n\n\tprivate 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\tsetTimeout(() => this.startWorkerInstance(), 5000); // Restart after a delay\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 !== this._serverConfig['ROOT_URL'] && info.origin !== this._serverConfig['SEC_ROOT_URL'] && info.origin !== this._serverConfig['RESOLVEIO_URL'] && info.origin !== this._serverConfig['RESOLVEIO_SECONDARY_URL']) {\n\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet token = infoData[0];\n\t\t\t\t\t\tif (!token) {\n\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tjwt.verify(token, this._serverConfig['JWT_SECRET'], async (err, decoded) => {\n\t\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tinfo.req['id_user'] = decoded['id_user'];\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tlet user = await Users.findById(decoded['id_user']);\n\t\t\t\t\t\t\t\t\t\tif (user) {\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['user'] = user.fullname;\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['user_readonly'] = user.readonly || false;\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['doc_user'] = user;\n\t\t\t\t\t\t\t\t\t\t\tcb(true);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tcb(false);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t\t\t\t\tcb(false);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t// Listen to port for websocket\n\tprivate listen(): void {\n\t\tthis._serverHTTP.listen(this._portHTTP, () => {\n\t\t\tconsole.log('Running server on port %s', this._portHTTP);\n\t\t});\n\n\t\tthis._serverWSS.on('listening', () => {\n\t\t\tconsole.log('Running server on port %s', this._portWSS);\n\t\t});\n\n\t\t// On websocket connection (already verified)\n\t\tthis._serverWSS.on('connection', (ws, req) => {\n\t\t\tif (!this.publicProgram) {\n\t\t\t\t// Get user from token\n\t\t\t\tws['id_user'] = req['id_user'];\n\t\t\t\tws['user'] = req['user'];\n\t\t\t\tws['user_readonly'] = req['user_readonly'];\n\t\t\t\tws['doc_user'] = req['doc_user'];\n\n\t\t\t\tif (ws['user'] !== 'Admin' && this._serverConfig['CLIENT_NAME'] !== 'ResolveIO') {\n\t\t\t\t\tthis.getMethodManager().callMethodInternal.call(this.getMethodManager(), 'supportCreateBillingUser', {\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tuser: ws['user'],\n\t\t\t\t\t\tdate: new Date(),\n\t\t\t\t\t\tclient: ResolveIOServer.getClientName()\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tws['id_socket'] = objectIdHexString();\n\t\t\tws['retryCnt'] = 0;\n\n\t\t\tthis._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 - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([message, e]));\n\n\t\t\t\t\tparseErrorFound = true;\n\t\t\t\t}\n\n\t\t\t\tif (!parseErrorFound) {\n\t\t\t\t\tif (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, JSON.stringify(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 serverResMethod: ServerResponseModel = {\n\t\t\t\t\tmessageId: update.data[2],\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, JSON.stringify(serverResMethod));\n\t\t\t\t}\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\tif (method === 'insertDocument' && data[0] === 'driver-gps') {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tLogMethodLatencies.create({\n\t\t\t\t\t_id: methodLatencyId,\n\t\t\t\t\t__v: 0,\n\t\t\t\t\tdate_start: new Date(),\n\t\t\t\t\tdate_end: null,\n\t\t\t\t\tlatency_ms: 0,\n\t\t\t\t\tmethod: method\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\tLogMethodLatencies.create({\n\t\t\t\t\t_id: methodLatencyId,\n\t\t\t\t\t__v: 0,\n\t\t\t\t\tdate_start: new Date(),\n\t\t\t\t\tdate_end: null,\n\t\t\t\t\tlatency_ms: 0,\n\t\t\t\t\tmethod: method\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, JSON.stringify(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, JSON.stringify(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 this._serverConfig;\n\t}\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../src/server-app.ts"],"names":["http_1","require","express","bodyParser","xmlParser","WebSocket","jwt","moment","common_1","mongo_manager_1","cron_manager_1","method_manager_1","subscription_manager_1","monitor_manager_1","log_collection_1","log_method_latency_collection_1","user_collection_1","home_1","auth_1","health_1","index_1","mongodb_1","worker_task_request_collection_1","worker_task_response_collection_1","websocket_manager_1","ResolveIOMainServer","mainServer","serverConfig","clientRoutes","clientDir","sesMail","standardProgram","publicProgram","_this","this","_offlineUpdates","_rebootFlag","LOGGER","_clientRoutes","_lastErrorMsg","_debugMsgRecv","_debugMsgQueue","_isWorkersEnabled","_isWorkerInstance","_workerTasks","_safeShutdown","_serverConfig","_clientDir","_serverStartTime","Date","_monitorManager","MonitorManager","_monitorManagerFunction","MonitorManagerFunction","process","env","IS_WORKERS_ENABLED","IS_WORKER_INSTANCE","setInterval","_subscriptionManager","getEnableDebug","console","log","on","error","rej","__awaiter","diffTimeSec","diff","MongoNetworkTimeoutError","setTimeout","_methodManager","sendEmail","JSON","stringify","name","message","stack","_a","sent","exit","_serverHTTP","close","safeShutdown","MethodManager","_cronManager","CronManager","startWorkerInstance","_websocketManager","WebSocketManager","startServerInstance","SubscriptionManager","_serverWSS","listen","prototype","_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","ResolveIOServer","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","LogMethodLatencies","__v","date_start","date_end","latency_ms","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","getServerConfig"],"mappings":"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","file":"server-app.js","sourcesContent":["import { createServer, Server } from 'http';\nimport * as express from 'express';\nimport * as bodyParser from 'body-parser';\nimport * as xmlParser from 'express-xml-bodyparser';\nimport * as WebSocket from 'ws';\nimport * as jwt from 'jsonwebtoken';\n// import * as SegfaultHandler from 'segfault-handler';\nimport * as moment from 'moment-timezone';\n\nimport { dateReviver, getBinarySize, deepCopy } from './util/common';\n\nimport { objectIdHexString } from './managers/mongo.manager';\nimport { CronManager } from './managers/cron.manager';\nimport { MethodManager } from './managers/method.manager';\nimport { SubscriptionManager } from './managers/subscription.manager';\nimport { MonitorManager, MonitorManagerFunction } from './managers/monitor.manager';\n\nimport { ServerResponseModel } from './models/server-response.model';\n\nimport { MethodResponses } from './collections/method-response.collection';\nimport { Logs } from './collections/log.collection';\nimport { LogMethodLatencies } from './collections/log-method-latency.collection';\nimport { Users } from './collections/user.collection';\n\nimport { setupHomeRoutes } from './http/home';\nimport { setupAuthRoutes } from './http/auth';\nimport { setupHealthRoutes } from './http/health';\nimport { ResolveIOServer } from './index';\nimport { MongoNetworkTimeoutError } from 'mongodb';\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';\n\nexport default class ResolveIOMainServer {\n\tprivate _app: express.Application;\n\tprivate _serverHTTP: Server;\n\tprivate _portHTTP: string | number;\n\tprivate _serverWSS: WebSocket.Server;\n\tprivate _portWSS: number;\n\tprivate _serverConfig;\n\tprivate _clientDir;\n\tprivate _offlineUpdates = [];\n\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(mainServer, serverConfig, clientRoutes, clientDir, sesMail, standardProgram, publicProgram = false) {\n\t\tthis._serverConfig = serverConfig;\n\t\tthis._clientRoutes = clientRoutes;\n\t\tthis._clientDir = clientDir;\n\t\tthis.sesMail = sesMail;\n\t\tthis.standardProgram = standardProgram;\n\t\tthis.publicProgram = publicProgram;\n\n\t\tthis._serverStartTime = new Date();\n\t\tthis._lastErrorMsg = null;\n\t\tthis._monitorManager = new MonitorManager(mainServer, serverConfig);\n\t\tthis._monitorManagerFunction = new MonitorManagerFunction();\n\n\t\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\tconsole.error(new Date(), 'Unhandled Rejection at Promise', [error, rej]);\n\t\t\t\n\t\t\tlet diffTimeSec = moment().diff(this._serverStartTime, 'seconds');\n\n\t\t\t// If this is a MongoNetworkTimeoutError, handle it specifically\n\t\t\tif (error && (error['name'] === 'MongoNetworkTimeoutError' || error instanceof MongoNetworkTimeoutError)) {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\t// Sending email notification (using your existing method)\n\t\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - MongoNetworkTimeoutError - Quitting NodeJS - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify({\n\t\t\t\t\t\tname: error['name'],\n\t\t\t\t\t\tmessage: error['message'],\n\t\t\t\t\t\tstack: error['stack']\n\t\t\t\t\t}, null, 2));\n\n\t\t\t\t\t// Exiting the process\n\t\t\t\t\tprocess.exit(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (error && error['name'] === 'MongoError' && error['message'] === 'not master') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Rejection - Quitting NodeJS - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t\t}\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\telse if (error && error['name'] === 'MongoError' && error['message'] === 'not master and slaveOk=false') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Rejection - Quitting NodeJS - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t\t}\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\telse if (error) {\n\t\t\t\tif (error['name'] !== 'StatusError' && error['message'] !== '') {\n\t\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t\t}, 60000);\n\n\t\t\t\t\t\tthis._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Rejection - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tprocess.on('uncaughtException', async error => {\n\t\t\tconsole.error(error, 'Uncaught Exception thrown');\n\n\t\t\tlet diffTimeSec = moment().diff(this._serverStartTime, 'seconds');\n\n\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t}, 60000);\n\t\t\t\t\n\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Exception - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t}\n\t\t});\n\n\t\t//PM2 wants to reboot/restart\n\t\tprocess.on('SIGINT', () => {\n\t\t\tthis._rebootFlag = true;\n\t\t\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, this._serverConfig, this._clientDir, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n this._cronManager = new CronManager(this);\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(serverConfig);\n\t\t\t\tthis._methodManager = new MethodManager(this, this._serverConfig, this._clientDir, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n\t\t\t\tthis._subscriptionManager = new SubscriptionManager(this, this._serverWSS, this._serverConfig, 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(serverConfig);\n\t\t\tthis._methodManager = new MethodManager(this, this._serverConfig, this._clientDir, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);\n\t\t\tthis._subscriptionManager = new SubscriptionManager(this, this._serverWSS, this._serverConfig, this._monitorManagerFunction);\n this._cronManager = new CronManager(this);\n\t\t\tthis.listen();\n }\n\t}\n\n\tprivate startServerInstance(serverConfig) {\n\t\t// Start express app\n\t\tthis._app = express();\n\n\t\t// Use body parser for http call (login)\n\t\tthis._app.use(bodyParser.json({limit: '50mb', reviver: dateReviver}));\n\t\tthis._app.use(bodyParser.urlencoded({limit: '50mb', extended: true, parameterLimit: 1000000 }));\n\t\tthis._app.use(xmlParser());\n\t\t\n\t\t// Set port\n\t\tthis._portHTTP = process.env.PORT_HTTP || serverConfig['PORT_HTTP'] || 8080;\n\t\tthis._portWSS = process.env.PORT_WSS || serverConfig['PORT_WSS'] || 8081;\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup ports');\n\t\t}\n\n\t\t// Create http server and websock server\n\t\tthis.createServer();\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Create server');\n\t\t}\n\n\t\t// Set CORS\n\t\tthis._app.use(function (req, res, next) {\n\n\t\t\t// Website you wish to allow to connect\n\t\t\t// res.setHeader('Access-Control-Allow-Origin', serverConfig['ROOT_URL']);\n\t\t\tres.setHeader('Access-Control-Allow-Origin', '*');\n\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, serverConfig);\n\t\tsetupHealthRoutes(this._app, serverConfig);\n\n\t\tif (serverConfig['CLIENT_NAME'] === 'ResolveIO' || this.standardProgram) {\n\t\t\tsetupHomeRoutes(this, this._app, serverConfig);\n\t\t}\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup express routes');\n\t\t}\n\t}\n\n\tprivate 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\tsetTimeout(() => this.startWorkerInstance(), 5000); // Restart after a delay\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 !== this._serverConfig['ROOT_URL'] && info.origin !== this._serverConfig['SEC_ROOT_URL'] && info.origin !== this._serverConfig['RESOLVEIO_URL'] && info.origin !== this._serverConfig['RESOLVEIO_SECONDARY_URL']) {\n\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet token = infoData[0];\n\t\t\t\t\t\tif (!token) {\n\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tjwt.verify(token, this._serverConfig['JWT_SECRET'], async (err, decoded) => {\n\t\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tinfo.req['id_user'] = decoded['id_user'];\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tlet user = await Users.findById(decoded['id_user']);\n\t\t\t\t\t\t\t\t\t\tif (user) {\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['user'] = user.fullname;\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['user_readonly'] = user.readonly || false;\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['doc_user'] = user;\n\t\t\t\t\t\t\t\t\t\t\tcb(true);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tcb(false);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t\t\t\t\tcb(false);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t// Listen to port for websocket\n\tprivate listen(): void {\n\t\tthis._serverHTTP.listen(this._portHTTP, () => {\n\t\t\tconsole.log('Running server on port %s', this._portHTTP);\n\t\t});\n\n\t\tthis._serverWSS.on('listening', () => {\n\t\t\tconsole.log('Running server on port %s', this._portWSS);\n\t\t});\n\n\t\t// On websocket connection (already verified)\n\t\tthis._serverWSS.on('connection', (ws, req) => {\n\t\t\tif (!this.publicProgram) {\n\t\t\t\t// Get user from token\n\t\t\t\tws['id_user'] = req['id_user'];\n\t\t\t\tws['user'] = req['user'];\n\t\t\t\tws['user_readonly'] = req['user_readonly'];\n\t\t\t\tws['doc_user'] = req['doc_user'];\n\n\t\t\t\tif (ws['user'] !== 'Admin' && this._serverConfig['CLIENT_NAME'] !== 'ResolveIO') {\n\t\t\t\t\tthis.getMethodManager().callMethodInternal.call(this.getMethodManager(), 'supportCreateBillingUser', {\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tuser: ws['user'],\n\t\t\t\t\t\tdate: new Date(),\n\t\t\t\t\t\tclient: ResolveIOServer.getClientName()\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tws['id_socket'] = objectIdHexString();\n\t\t\tws['retryCnt'] = 0;\n\n\t\t\tthis._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 - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([message, e]));\n\n\t\t\t\t\tparseErrorFound = true;\n\t\t\t\t}\n\n\t\t\t\tif (!parseErrorFound) {\n\t\t\t\t\tif (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, JSON.stringify(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, JSON.stringify(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\tLogMethodLatencies.create({\n\t\t\t\t\t_id: methodLatencyId,\n\t\t\t\t\t__v: 0,\n\t\t\t\t\tdate_start: new Date(),\n\t\t\t\t\tdate_end: null,\n\t\t\t\t\tlatency_ms: 0,\n\t\t\t\t\tmethod: method\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\tLogMethodLatencies.create({\n\t\t\t\t\t_id: methodLatencyId,\n\t\t\t\t\t__v: 0,\n\t\t\t\t\tdate_start: new Date(),\n\t\t\t\t\tdate_end: null,\n\t\t\t\t\tlatency_ms: 0,\n\t\t\t\t\tmethod: method\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, JSON.stringify(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, JSON.stringify(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 this._serverConfig;\n\t}\n}"]}
|