@resolveio/server-lib 20.7.113 → 20.7.114
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var __awaiter=this&&this.__awaiter||function(e,t,o,a){return new(o=o||Promise)(function(n,r){function fulfilled(e){try{step(a.next(e))}catch(e){r(e)}}function rejected(e){try{step(a.throw(e))}catch(e){r(e)}}function step(e){var r;e.done?n(e.value):((r=e.value)instanceof o?r:new o(function(e){e(r)})).then(fulfilled,rejected)}step((a=a.apply(e,t||[])).next())})},__generator=this&&this.__generator||function(t,o){var a,s,i,l={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]},c={next:verb(0),throw:verb(1),return:verb(2)};return"function"==typeof Symbol&&(c[Symbol.iterator]=function(){return this}),c;function verb(n){return function(e){var r=[n,e];if(a)throw new TypeError("Generator is already executing.");for(;l=c&&r[c=0]?0:l;)try{if(a=1,s&&(i=2&r[0]?s.return:r[0]?s.throw||((i=s.return)&&i.call(s),0):s.next)&&!(i=i.call(s,r[1])).done)return i;switch(s=0,(r=i?[2&r[0],i.value]:r)[0]){case 0:case 1:i=r;break;case 4:return l.label++,{value:r[1],done:!1};case 5:l.label++,s=r[1],r=[0];continue;case 7:r=l.ops.pop(),l.trys.pop();continue;default:if(!(i=0<(i=l.trys).length&&i[i.length-1])&&(6===r[0]||2===r[0])){l=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3]))l.label=r[1];else if(6===r[0]&&l.label<i[1])l.label=i[1],i=r;else{if(!(i&&l.label<i[2])){i[2]&&l.ops.pop(),l.trys.pop();continue}l.label=i[2],l.ops.push(r)}}r=o.call(t,l)}catch(e){r=[6,e],s=0}finally{a=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}}},__read=this&&this.__read||function(e,r){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var t,o,a=n.call(e),s=[];try{for(;(void 0===r||0<r--)&&!(t=a.next()).done;)s.push(t.value)}catch(e){o={error:e}}finally{try{t&&!t.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return s},__spreadArray=this&&this.__spreadArray||function(e,r,n){if(n||2===arguments.length)for(var t,o=0,a=r.length;o<a;o++)!t&&o in r||((t=t||Array.prototype.slice.call(r,0,o))[o]=r[o]);return e.concat(t||Array.prototype.slice.call(r))},WebSocket=(Object.defineProperty(exports,"__esModule",{value:!0}),exports.WorkerServerManager=void 0,require("ws")),common_1=require("../util/common"),method_manager_1=require("./method.manager"),WorkerServerManager=function(){function WorkerServerManager(){this._runningTasks=[]}return WorkerServerManager.create=function(e,r){var n=new WorkerServerManager;return n.initialize(e,r),n},WorkerServerManager.prototype.initialize=function(e,r){this._methodManager=e,this._serverConfig=r,this.startWorkerInstance()},WorkerServerManager.prototype.startWorkerInstance=function(){var e=this,r=(console.log(new Date,"Worker instance started, connecting to main server via WebSocket..."),this._serverConfig.SERVER_URL+"/websocket?workerToken="+this._serverConfig.WORKER_TOKEN),t=new WebSocket(r),o=null,n=null;t.on("open",function(){console.log(new Date,"Connected to main server as worker",process.env.WORKER_INDEX,process.env.NODE_APP_INSTANCE),e.sendWorkerResponse(t,"ping"),n=setInterval(function(){o?(o=null,e.sendWorkerResponse(t,"ping")):t.close()},15e3)}),t.on("message",function(n){return __awaiter(e,void 0,void 0,function(){var r;return __generator(this,function(e){switch(e.label){case 0:return(this._methodManager.getEnableDebug()&&console.log(new Date,"Message Recv",n),"string"!=typeof n
|
|
1
|
+
"use strict";var __awaiter=this&&this.__awaiter||function(e,t,o,a){return new(o=o||Promise)(function(n,r){function fulfilled(e){try{step(a.next(e))}catch(e){r(e)}}function rejected(e){try{step(a.throw(e))}catch(e){r(e)}}function step(e){var r;e.done?n(e.value):((r=e.value)instanceof o?r:new o(function(e){e(r)})).then(fulfilled,rejected)}step((a=a.apply(e,t||[])).next())})},__generator=this&&this.__generator||function(t,o){var a,s,i,l={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]},c={next:verb(0),throw:verb(1),return:verb(2)};return"function"==typeof Symbol&&(c[Symbol.iterator]=function(){return this}),c;function verb(n){return function(e){var r=[n,e];if(a)throw new TypeError("Generator is already executing.");for(;l=c&&r[c=0]?0:l;)try{if(a=1,s&&(i=2&r[0]?s.return:r[0]?s.throw||((i=s.return)&&i.call(s),0):s.next)&&!(i=i.call(s,r[1])).done)return i;switch(s=0,(r=i?[2&r[0],i.value]:r)[0]){case 0:case 1:i=r;break;case 4:return l.label++,{value:r[1],done:!1};case 5:l.label++,s=r[1],r=[0];continue;case 7:r=l.ops.pop(),l.trys.pop();continue;default:if(!(i=0<(i=l.trys).length&&i[i.length-1])&&(6===r[0]||2===r[0])){l=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3]))l.label=r[1];else if(6===r[0]&&l.label<i[1])l.label=i[1],i=r;else{if(!(i&&l.label<i[2])){i[2]&&l.ops.pop(),l.trys.pop();continue}l.label=i[2],l.ops.push(r)}}r=o.call(t,l)}catch(e){r=[6,e],s=0}finally{a=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}}},__read=this&&this.__read||function(e,r){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var t,o,a=n.call(e),s=[];try{for(;(void 0===r||0<r--)&&!(t=a.next()).done;)s.push(t.value)}catch(e){o={error:e}}finally{try{t&&!t.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return s},__spreadArray=this&&this.__spreadArray||function(e,r,n){if(n||2===arguments.length)for(var t,o=0,a=r.length;o<a;o++)!t&&o in r||((t=t||Array.prototype.slice.call(r,0,o))[o]=r[o]);return e.concat(t||Array.prototype.slice.call(r))},WebSocket=(Object.defineProperty(exports,"__esModule",{value:!0}),exports.WorkerServerManager=void 0,require("ws")),common_1=require("../util/common"),method_manager_1=require("./method.manager"),WorkerServerManager=function(){function WorkerServerManager(){this._runningTasks=[]}return WorkerServerManager.create=function(e,r){var n=new WorkerServerManager;return n.initialize(e,r),n},WorkerServerManager.prototype.initialize=function(e,r){this._methodManager=e,this._serverConfig=r,this.startWorkerInstance()},WorkerServerManager.prototype.startWorkerInstance=function(){var e=this,r=(console.log(new Date,"Worker instance started, connecting to main server via WebSocket..."),this._serverConfig.SERVER_URL+"/websocket?workerToken="+this._serverConfig.WORKER_TOKEN),t=new WebSocket(r),o=null,n=null,a=!1,s=setTimeout(function(){a||(console.error(new Date,"WebSocket connection timeout. Retrying..."),t.terminate())},1e4);t.on("open",function(){a=!0,clearTimeout(s),console.log(new Date,"Connected to main server as worker",process.env.WORKER_INDEX,process.env.NODE_APP_INSTANCE),e.sendWorkerResponse(t,"ping"),n=setInterval(function(){o?(o=null,e.sendWorkerResponse(t,"ping")):t.close()},15e3)}),t.on("message",function(n){return __awaiter(e,void 0,void 0,function(){var r;return __generator(this,function(e){switch(e.label){case 0:return(this._methodManager.getEnableDebug()&&console.log(new Date,"Message Recv",n),"ping"!==(n="string"!=typeof n?n.toString():n))?[3,1]:(this._methodManager.getEnableDebug()&&console.log(new Date,"Recv Ping, Sending Pong"),this.sendWorkerResponse(t,"pong"),[3,4]);case 1:return"pong"!==n?[3,2]:(this._methodManager.getEnableDebug()&&console.log(new Date,"Recv Pong"),o=new Date,[3,4]);case 2:r=void 0;try{r=JSON.parse(n,common_1.dateReviver)}catch(e){return console.error("Worker parse error",e),[2]}return"task"!==r.type?[3,4]:[4,this.handleIncomingTask(t,r)];case 3:e.sent(),e.label=4;case 4:return[2]}})})}),t.on("close",function(){console.log(new Date,"Disconnected from main server. Reconnecting in 1s..."),setTimeout(function(){e.startWorkerInstance()},1e3),n&&clearInterval(n),clearTimeout(s)}),t.on("error",function(e){console.error(new Date,"Worker WS error:",e),t.close()})},WorkerServerManager.prototype.handleIncomingTask=function(g,h){return __awaiter(this,void 0,void 0,function(){var r,n,t,o,a,s,i,l,c,u=this;return __generator(this,function(e){switch(e.label){case 0:if(r=h.taskId,n=h.messageId,t=h.method,o=h.params,a=h.userContext,this._runningTasks.push(r),!r||!t)return this.sendWorkerResponse(g,{type:"taskComplete",taskId:r,messageId:n,error:!0,result:"Invalid task"}),[2];s=!1,i=setTimeout(function(){return __awaiter(u,void 0,void 0,function(){return __generator(this,function(e){switch(e.label){case 0:return s=!0,console.error(new Date,"Worker timed out on task:",r,"Method:",t),this.sendWorkerResponse(g,{type:"taskComplete",taskId:r,messageId:n,error:!0,result:"Task timed out"}),[4,this._methodManager.callMethod("insertErrorLog","Timeout in Method: ".concat(t," - ").concat(JSON.stringify(h,null,2)))];case 1:return e.sent(),[2]}})})},12e4),e.label=1;case 1:return e.trys.push([1,3,,5]),l=Object.assign({},this._methodManager,method_manager_1.MethodManager.prototype,{id_user:(null==a?void 0:a.id_user)||"",user:(null==a?void 0:a.user)||"",id_ws:(null==a?void 0:a.id_ws)||""}),this._methodManager.getEnableDebug()&&console.log(new Date,"Running method",t),[4,(c=this._methodManager.callMethod).call.apply(c,__spreadArray([l,t],__read(o),!1))];case 2:return c=e.sent(),this._methodManager.getEnableDebug()&&console.log(new Date,"Finished method",t),s||(clearTimeout(i),this.sendWorkerResponse(g,{type:"taskComplete",taskId:r,messageId:n,error:!1,result:c})),this._runningTasks=this._runningTasks.filter(function(e){return e!==r}),this._methodManager.getEnableDebug()&&console.log(new Date,"Done with Task",JSON.stringify(this._runningTasks,null,2)),[3,5];case 3:if(l=e.sent(),s)return console.error(new Date,"Error in Method: ".concat(t," - ").concat(JSON.stringify(h,null,2))),[4,this._methodManager.callMethod("insertErrorLog","Error in Method: ".concat(t," - ").concat(JSON.stringify(h,null,2)))];throw clearTimeout(i),console.error("Worker failed task:",r,"Method:",t,l),l.message="Worker failed task:"+r+" Method:"+t+" - "+l.message,this.sendWorkerResponse(g,{type:"taskComplete",taskId:r,messageId:n,error:!0,result:l||"Unknown error"}),l;case 4:return e.sent(),this._runningTasks=this._runningTasks.filter(function(e){return e!==r}),[3,5];case 5:return[2]}})})},WorkerServerManager.prototype.sendWorkerResponse=function(e,r){if("string"!=typeof r&&(r=JSON.stringify(r)),this._methodManager.getEnableDebug()&&console.log(new Date,"Sending",r),e&&e.readyState===e.OPEN)try{e.send(r)}catch(e){console.error("Failed to send worker response:",e)}else e&&e.close()},WorkerServerManager}();exports.WorkerServerManager=WorkerServerManager;
|
|
2
2
|
//# sourceMappingURL=worker-server.manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/managers/worker-server.manager.ts"],"names":["WebSocket","require","common_1","method_manager_1","WorkerServerManager","this","_runningTasks","create","methodManager","serverConfig","workerServerManager","initialize","prototype","_methodManager","_serverConfig","startWorkerInstance","_this","wsUrl","console","log","Date","ws","lastComm","interval","on","process","env","WORKER_INDEX","NODE_APP_INSTANCE","sendWorkerResponse","setInterval","close","rawData","__awaiter","getEnableDebug","toString","msg","JSON","parse","dateReviver","e","error","type","handleIncomingTask","_a","sent","setTimeout","clearInterval","err","data","taskId","messageId","method","params","userContext","push","result","timedOut","timeoutHandle","callMethod","concat","stringify","managerThis","Object","assign","MethodManager","id_user","user","id_ws","call","apply","__spreadArray","__read","_b","clearTimeout","filter","a","err_1","message","payload","readyState","OPEN","send","exports"],"mappings":"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","file":"worker-server.manager.js","sourcesContent":["import * as WebSocket from 'ws';\nimport { TaskPayload, TaskResponse } from '../models/server-message.model';\nimport { dateReviver } from '../util/common';\nimport { MethodManager } from './method.manager';\n\nexport class WorkerServerManager {\n private _methodManager;\n private _serverConfig;\n private _runningTasks = [];\n\n constructor() {}\n \n static create(methodManager: MethodManager, serverConfig) {\n const workerServerManager = new WorkerServerManager();\n workerServerManager.initialize(methodManager, serverConfig);\n return workerServerManager;\n }\n\n public initialize(methodManager: MethodManager, serverConfig) {\n this._methodManager = methodManager;\n this._serverConfig = serverConfig;\n this.startWorkerInstance();\n }\n\n private startWorkerInstance() {\n console.log(new Date(), 'Worker instance started, connecting to main server via WebSocket...');\n\n let wsUrl = this._serverConfig['SERVER_URL'] + '/websocket?workerToken=' + this._serverConfig['WORKER_TOKEN'];\n\n const ws = new WebSocket(wsUrl);\n\n let lastComm = null;\n let interval = null;\n\n ws.on('open', () => {\n console.log(new Date(), 'Connected to main server as worker', process.env.WORKER_INDEX, process.env.NODE_APP_INSTANCE);\n this.sendWorkerResponse(ws, 'ping');\n\n interval = setInterval(() => {\n if (!lastComm) {\n ws.close();\n }\n else {\n lastComm = null;\n this.sendWorkerResponse(ws, 'ping');\n }\n }, 15000);\n });\n\n ws.on('message', async (rawData: any) => {\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Message Recv', rawData);\n }\n\n if (typeof rawData !== 'string') {\n rawData = rawData.toString();\n }\n\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Message Recv From Main Server', rawData);\n }\n\n if (rawData === 'ping') {\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Recv Ping, Sending Pong');\n }\n \n this.sendWorkerResponse(ws, 'pong');\n }\n else if (rawData === 'pong') {\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Recv Ping, Sending Pong');\n }\n lastComm = new Date();\n }\n else {\n let msg: any;\n try {\n msg = JSON.parse(rawData, dateReviver);\n }\n catch (e) {\n console.error('Worker parse error', e);\n return;\n }\n\n // We expect: { type: 'task', taskId, method, params, userContext? }\n if (msg.type === 'task') {\n await this.handleIncomingTask(ws, msg);\n }\n }\n });\n\n ws.on('close', () => {\n console.log(new Date(), 'Disconnected from main server. Reconnecting in 1s...');\n setTimeout(() => {\n this.startWorkerInstance();\n }, 1000);\n\n if (interval) {\n clearInterval(interval);\n }\n });\n\n ws.on('error', (err) => {\n console.error(new Date(), 'Worker WS error:', err);\n ws.close();\n });\n }\n\n private async handleIncomingTask(ws: WebSocket.WebSocket, data: TaskPayload) {\n let { taskId, messageId, method, params, userContext } = data;\n this._runningTasks.push(taskId);\n if (!taskId || !method) {\n // console.log('Invalid task message received', data);\n this.sendWorkerResponse(ws, {\n type: 'taskComplete',\n taskId,\n messageId,\n error: true,\n result: 'Invalid task'\n });\n\n return;\n }\n\n let timedOut = false;\n let timeoutHandle = setTimeout(async () => {\n timedOut = true;\n console.error(new Date(), 'Worker timed out on task:', taskId, 'Method:', method);\n\n this.sendWorkerResponse(ws, {\n type: 'taskComplete',\n taskId,\n messageId,\n error: true,\n result: 'Task timed out'\n });\n\n await this._methodManager.callMethod('insertErrorLog', `Timeout in Method: ${method} - ${JSON.stringify(data, null, 2)}`);\n }, (1000 * 60 * 2));\n\n try {\n let managerThis = Object.assign({}, this._methodManager, MethodManager.prototype, {\n id_user: userContext?.id_user || '',\n user: userContext?.user || '',\n id_ws: userContext?.id_ws || ''\n });\n\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Running method', method);\n }\n\n let result = await this._methodManager.callMethod.call(managerThis, method, ...params);\n\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Finished method', method);\n }\n\n if (!timedOut) {\n clearTimeout(timeoutHandle);\n this.sendWorkerResponse(ws, {\n type: 'taskComplete',\n taskId,\n messageId,\n error: false,\n result\n });\n }\n\n this._runningTasks = this._runningTasks.filter(a => a !== taskId);\n \n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Done with Task', JSON.stringify(this._runningTasks, null, 2));\n }\n }\n catch (err) {\n if (!timedOut) {\n clearTimeout(timeoutHandle);\n console.error('Worker failed task:', taskId, 'Method:', method, err);\n err.message = 'Worker failed task:' + taskId + ' Method:' + method + ' - ' + err.message;\n this.sendWorkerResponse(ws, {\n type: 'taskComplete',\n taskId,\n messageId,\n error: true,\n result: err || 'Unknown error'\n });\n throw err;\n }\n\n console.error(new Date(), `Error in Method: ${method} - ${JSON.stringify(data, null, 2)}`);\n \n await this._methodManager.callMethod('insertErrorLog', `Error in Method: ${method} - ${JSON.stringify(data, null, 2)}`);\n \n this._runningTasks = this._runningTasks.filter(a => a !== taskId);\n }\n }\n\n public sendWorkerResponse(ws, payload: TaskResponse | string) {\n if (typeof payload !== 'string') {\n payload = JSON.stringify(payload);\n }\n\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Sending', payload);\n }\n\n if (ws && ws.readyState === ws.OPEN) {\n try {\n ws.send(payload);\n }\n catch (err) {\n console.error('Failed to send worker response:', err);\n }\n }\n else if (ws) {\n ws.close();\n }\n }\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../src/managers/worker-server.manager.ts"],"names":["WebSocket","require","common_1","method_manager_1","WorkerServerManager","this","_runningTasks","create","methodManager","serverConfig","workerServerManager","initialize","prototype","_methodManager","_serverConfig","startWorkerInstance","_this","wsUrl","console","log","Date","ws","lastComm","interval","opened","openTimeout","setTimeout","error","terminate","on","clearTimeout","process","env","WORKER_INDEX","NODE_APP_INSTANCE","sendWorkerResponse","setInterval","close","rawData","__awaiter","getEnableDebug","toString","msg","JSON","parse","dateReviver","e","type","handleIncomingTask","_a","sent","clearInterval","err","data","taskId","messageId","method","params","userContext","push","result","timedOut","timeoutHandle","callMethod","concat","stringify","managerThis","Object","assign","MethodManager","id_user","user","id_ws","call","apply","__spreadArray","__read","_b","filter","a","err_1","message","payload","readyState","OPEN","send","exports"],"mappings":"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","file":"worker-server.manager.js","sourcesContent":["import * as WebSocket from 'ws';\nimport { TaskPayload, TaskResponse } from '../models/server-message.model';\nimport { dateReviver } from '../util/common';\nimport { MethodManager } from './method.manager';\n\nexport class WorkerServerManager {\n private _methodManager;\n private _serverConfig;\n private _runningTasks = [];\n\n constructor() {}\n \n static create(methodManager: MethodManager, serverConfig) {\n const workerServerManager = new WorkerServerManager();\n workerServerManager.initialize(methodManager, serverConfig);\n return workerServerManager;\n }\n\n public initialize(methodManager: MethodManager, serverConfig) {\n this._methodManager = methodManager;\n this._serverConfig = serverConfig;\n this.startWorkerInstance();\n }\n\n private startWorkerInstance() {\n console.log(new Date(), 'Worker instance started, connecting to main server via WebSocket...');\n \n let wsUrl = this._serverConfig['SERVER_URL'] + '/websocket?workerToken=' + this._serverConfig['WORKER_TOKEN'];\n const ws = new WebSocket(wsUrl);\n \n let lastComm = null;\n let interval = null;\n let openTimeout = null;\n let opened = false;\n \n // Set timeout if the socket never opens\n openTimeout = setTimeout(() => {\n if (!opened) {\n console.error(new Date(), 'WebSocket connection timeout. Retrying...');\n ws.terminate(); // force close if still connecting\n }\n }, 10000); // 10 seconds timeout\n \n ws.on('open', () => {\n opened = true;\n clearTimeout(openTimeout);\n \n console.log(new Date(), 'Connected to main server as worker', process.env.WORKER_INDEX, process.env.NODE_APP_INSTANCE);\n this.sendWorkerResponse(ws, 'ping');\n \n interval = setInterval(() => {\n if (!lastComm) {\n ws.close();\n }\n else {\n lastComm = null;\n this.sendWorkerResponse(ws, 'ping');\n }\n }, 15000);\n });\n \n ws.on('message', async (rawData: any) => {\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Message Recv', rawData);\n }\n \n if (typeof rawData !== 'string') {\n rawData = rawData.toString();\n }\n \n if (rawData === 'ping') {\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Recv Ping, Sending Pong');\n }\n \n this.sendWorkerResponse(ws, 'pong');\n }\n else if (rawData === 'pong') {\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Recv Pong');\n }\n lastComm = new Date();\n }\n else {\n let msg: any;\n try {\n msg = JSON.parse(rawData, dateReviver);\n }\n catch (e) {\n console.error('Worker parse error', e);\n return;\n }\n \n if (msg.type === 'task') {\n await this.handleIncomingTask(ws, msg);\n }\n }\n });\n \n ws.on('close', () => {\n console.log(new Date(), 'Disconnected from main server. Reconnecting in 1s...');\n setTimeout(() => {\n this.startWorkerInstance();\n }, 1000);\n \n if (interval) {\n clearInterval(interval);\n }\n clearTimeout(openTimeout);\n });\n \n ws.on('error', (err) => {\n console.error(new Date(), 'Worker WS error:', err);\n ws.close();\n });\n }\n\n private async handleIncomingTask(ws: WebSocket.WebSocket, data: TaskPayload) {\n let { taskId, messageId, method, params, userContext } = data;\n this._runningTasks.push(taskId);\n if (!taskId || !method) {\n // console.log('Invalid task message received', data);\n this.sendWorkerResponse(ws, {\n type: 'taskComplete',\n taskId,\n messageId,\n error: true,\n result: 'Invalid task'\n });\n\n return;\n }\n\n let timedOut = false;\n let timeoutHandle = setTimeout(async () => {\n timedOut = true;\n console.error(new Date(), 'Worker timed out on task:', taskId, 'Method:', method);\n\n this.sendWorkerResponse(ws, {\n type: 'taskComplete',\n taskId,\n messageId,\n error: true,\n result: 'Task timed out'\n });\n\n await this._methodManager.callMethod('insertErrorLog', `Timeout in Method: ${method} - ${JSON.stringify(data, null, 2)}`);\n }, (1000 * 60 * 2));\n\n try {\n let managerThis = Object.assign({}, this._methodManager, MethodManager.prototype, {\n id_user: userContext?.id_user || '',\n user: userContext?.user || '',\n id_ws: userContext?.id_ws || ''\n });\n\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Running method', method);\n }\n\n let result = await this._methodManager.callMethod.call(managerThis, method, ...params);\n\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Finished method', method);\n }\n\n if (!timedOut) {\n clearTimeout(timeoutHandle);\n this.sendWorkerResponse(ws, {\n type: 'taskComplete',\n taskId,\n messageId,\n error: false,\n result\n });\n }\n\n this._runningTasks = this._runningTasks.filter(a => a !== taskId);\n \n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Done with Task', JSON.stringify(this._runningTasks, null, 2));\n }\n }\n catch (err) {\n if (!timedOut) {\n clearTimeout(timeoutHandle);\n console.error('Worker failed task:', taskId, 'Method:', method, err);\n err.message = 'Worker failed task:' + taskId + ' Method:' + method + ' - ' + err.message;\n this.sendWorkerResponse(ws, {\n type: 'taskComplete',\n taskId,\n messageId,\n error: true,\n result: err || 'Unknown error'\n });\n throw err;\n }\n\n console.error(new Date(), `Error in Method: ${method} - ${JSON.stringify(data, null, 2)}`);\n \n await this._methodManager.callMethod('insertErrorLog', `Error in Method: ${method} - ${JSON.stringify(data, null, 2)}`);\n \n this._runningTasks = this._runningTasks.filter(a => a !== taskId);\n }\n }\n\n public sendWorkerResponse(ws, payload: TaskResponse | string) {\n if (typeof payload !== 'string') {\n payload = JSON.stringify(payload);\n }\n\n if (this._methodManager.getEnableDebug()) {\n console.log(new Date(), 'Sending', payload);\n }\n\n if (ws && ws.readyState === ws.OPEN) {\n try {\n ws.send(payload);\n }\n catch (err) {\n console.error('Failed to send worker response:', err);\n }\n }\n else if (ws) {\n ws.close();\n }\n }\n}"]}
|