From 456e64d79ea076c4546d95a53b8e96969bb3d84c Mon Sep 17 00:00:00 2001 From: Viren070 Date: Fri, 31 Jan 2025 21:57:54 +0000 Subject: [PATCH] fix(addon): properly handle errors safely --- packages/addon/src/responses.ts | 2 +- packages/addon/src/server.ts | 25 ++++++++++++++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/packages/addon/src/responses.ts b/packages/addon/src/responses.ts index 3562d105..dc604ae0 100644 --- a/packages/addon/src/responses.ts +++ b/packages/addon/src/responses.ts @@ -7,7 +7,7 @@ export const errorResponse = ( externalUrl?: string ) => { return { - streams: [errorStream(errorMessage, origin, path, externalUrl)], + streams: [errorStream(errorMessage, 'Error', origin, path, externalUrl)], }; }; diff --git a/packages/addon/src/server.ts b/packages/addon/src/server.ts index e340fda8..9ddec04a 100644 --- a/packages/addon/src/server.ts +++ b/packages/addon/src/server.ts @@ -63,6 +63,12 @@ app.use(express.json()); // Built-in middleware for parsing URL-encoded data app.use(express.urlencoded({ extended: true })); +// unhandled errors +app.use((err: any, req: Request, res: Response, next: any) => { + console.error(`|ERR| server > ${err.message}`); + res.status(500).send('Internal server error'); +}); + app.use((req, res, next) => { res.append('Access-Control-Allow-Origin', '*'); res.append('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); @@ -219,9 +225,22 @@ app.get('/:config/stream/:type/:id.json', (req, res: Response): void => { req.ip; configJson.instanceCache = cache; const aioStreams = new AIOStreams(configJson); - aioStreams.getStreams(streamRequest).then((streams) => { - res.json({ streams: streams }); - }); + aioStreams + .getStreams(streamRequest) + .then((streams) => { + res.json({ streams: streams }); + }) + .catch((error: any) => { + console.error(`|ERR| server > Internal addon error: ${error.message}`); + res.json( + errorResponse( + 'An unexpected error occurred, please check the logs or create an issue on GitHub', + rootUrl(req), + undefined, + 'https://github.com/Viren070/AIOStreams/issues/new?template=bug_report.yml' + ) + ); + }); } catch (error: any) { console.error(`|ERR| server > Internal addon error: ${error.message}`); res.json(