From 0513c9827eb0e50fd79274ac225aa7736c98c7cf Mon Sep 17 00:00:00 2001 From: Evert Prants Date: Thu, 25 Aug 2022 21:20:36 +0300 Subject: [PATCH] handle unhandled errors --- package-lock.json | 18 +++++++++--------- package.json | 4 ++-- src/core.ts | 16 ++++++++++++++++ 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8dd927e..1b2ec51 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,15 @@ { "name": "@squeebot/cli", - "version": "3.4.3", + "version": "3.4.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@squeebot/cli", - "version": "3.4.3", + "version": "3.4.4", "license": "MIT", "dependencies": { - "@squeebot/core": "^3.3.6", + "@squeebot/core": "^3.3.8", "fs-extra": "^10.0.0", "node-watch": "^0.7.1", "tar": "^6.1.11", @@ -144,9 +144,9 @@ } }, "node_modules/@squeebot/core": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/@squeebot/core/-/core-3.3.6.tgz", - "integrity": "sha512-a2o6h0fVBpSWpsrX1OBrFTjKMtkX5LQLm9i738sarMFK/q84zFmf/hKvpTNi71gviP1tEOB/gqat/AmohzvLSw==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@squeebot/core/-/core-3.3.8.tgz", + "integrity": "sha512-7ZvpbnEX2mUR76LyB4UFYpJ1pAmuI0sDNop/jHKki7JJqqcnKi3uDb6KC7dedLRKVTMIWCAbvSR9J+C04+v1JA==", "dependencies": { "dateformat": "^4.5.1", "fs-extra": "^10.0.0", @@ -1973,9 +1973,9 @@ } }, "@squeebot/core": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/@squeebot/core/-/core-3.3.6.tgz", - "integrity": "sha512-a2o6h0fVBpSWpsrX1OBrFTjKMtkX5LQLm9i738sarMFK/q84zFmf/hKvpTNi71gviP1tEOB/gqat/AmohzvLSw==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/@squeebot/core/-/core-3.3.8.tgz", + "integrity": "sha512-7ZvpbnEX2mUR76LyB4UFYpJ1pAmuI0sDNop/jHKki7JJqqcnKi3uDb6KC7dedLRKVTMIWCAbvSR9J+C04+v1JA==", "requires": { "dateformat": "^4.5.1", "fs-extra": "^10.0.0", diff --git a/package.json b/package.json index 08f4de9..ddbb134 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@squeebot/cli", - "version": "3.4.3", + "version": "3.4.4", "description": "Squeebot v3 runtime, environments and configuration", "main": "dist/squeebot.js", "bin": { @@ -30,7 +30,7 @@ "typescript": "^4.4.2" }, "dependencies": { - "@squeebot/core": "^3.3.6", + "@squeebot/core": "^3.3.8", "fs-extra": "^10.0.0", "node-watch": "^0.7.1", "tar": "^6.1.11", diff --git a/src/core.ts b/src/core.ts index 2ded49e..9a5e8b1 100644 --- a/src/core.ts +++ b/src/core.ts @@ -78,6 +78,22 @@ export class Squeebot implements ISqueebotCore { this.stream.on('core', 'request-core', (pl: string) => this.stream.emitTo(pl, 'core', this)); + // Handle uncaught exceptions to prevent the whole bot from getting bricked + process.on('uncaughtException', (err) => { + logger.error('Process caught an unhandled exception:', err.stack); + this.stream.emit('error', err); + }); + + // Handle uncaught rejections to prevent the whole bot from getting bricked + process.on('unhandledRejection', (reason, promise) => { + logger.error('Process caught an unhandled promise rejection:', reason); + logger.error('In promise:', promise); + + const error = new Error(reason?.toString()); + error.name = 'unhandledRejection'; + this.stream.emit('error', error); + }); + // Start enabled plugins if (autostart) { await this.startPlugins();