From c0a9063afd05471d1df1b864d40e1d116a025c25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=A4=95=E0=A4=BE=E0=A4=B0=E0=A4=A4=E0=A5=8B=E0=A4=AB?= =?UTF-8?q?=E0=A5=8D=E0=A4=AB=E0=A5=87=E0=A4=B2=E0=A4=B8=E0=A5=8D=E0=A4=95?= =?UTF-8?q?=E0=A5=8D=E0=A4=B0=E0=A4=BF=E0=A4=AA=E0=A5=8D=E0=A4=9F=E2=84=A2?= Date: Thu, 28 Nov 2024 18:14:55 +0100 Subject: [PATCH] fix(core): Retain original error cause when throwing InternalServerError --- packages/cli/src/controllers/ai.controller.ts | 10 +++------- .../src/controllers/community-packages.controller.ts | 4 ++-- .../cli/src/controllers/password-reset.controller.ts | 2 +- packages/cli/src/controllers/translation.controller.ts | 2 +- .../errors/response-errors/abstract/response.error.ts | 3 ++- .../errors/response-errors/internal-server.error.ts | 4 ++-- packages/cli/src/executions/execution.service.ts | 2 +- packages/cli/src/services/user.service.ts | 5 ++--- .../user-management/email/user-management-mailer.ts | 4 ++-- packages/cli/src/webhooks/webhook-helpers.ts | 2 +- 10 files changed, 17 insertions(+), 21 deletions(-) diff --git a/packages/cli/src/controllers/ai.controller.ts b/packages/cli/src/controllers/ai.controller.ts index 1957db2971..a1e24547d7 100644 --- a/packages/cli/src/controllers/ai.controller.ts +++ b/packages/cli/src/controllers/ai.controller.ts @@ -1,6 +1,5 @@ import type { AiAssistantSDK } from '@n8n_io/ai-assistant-sdk'; import type { Response } from 'express'; -import { ErrorReporterProxy } from 'n8n-workflow'; import { strict as assert } from 'node:assert'; import { WritableStream } from 'node:stream/web'; @@ -33,8 +32,7 @@ export class AiController { } } catch (e) { assert(e instanceof Error); - ErrorReporterProxy.error(e); - throw new InternalServerError(`Something went wrong: ${e.message}`); + throw new InternalServerError(`Something went wrong: ${e.message}`, e); } } @@ -46,8 +44,7 @@ export class AiController { return await this.aiService.applySuggestion(req.body, req.user); } catch (e) { assert(e instanceof Error); - ErrorReporterProxy.error(e); - throw new InternalServerError(`Something went wrong: ${e.message}`); + throw new InternalServerError(`Something went wrong: ${e.message}`, e); } } @@ -57,8 +54,7 @@ export class AiController { return await this.aiService.askAi(req.body, req.user); } catch (e) { assert(e instanceof Error); - ErrorReporterProxy.error(e); - throw new InternalServerError(`Something went wrong: ${e.message}`); + throw new InternalServerError(`Something went wrong: ${e.message}`, e); } } } diff --git a/packages/cli/src/controllers/community-packages.controller.ts b/packages/cli/src/controllers/community-packages.controller.ts index 5caf835f60..918f1cdf74 100644 --- a/packages/cli/src/controllers/community-packages.controller.ts +++ b/packages/cli/src/controllers/community-packages.controller.ts @@ -201,7 +201,7 @@ export class CommunityPackagesController { error instanceof Error ? error.message : UNKNOWN_FAILURE_REASON, ].join(':'); - throw new InternalServerError(message); + throw new InternalServerError(message, error); } // broadcast to connected frontends that node list has been updated @@ -283,7 +283,7 @@ export class CommunityPackagesController { error instanceof Error ? error.message : UNKNOWN_FAILURE_REASON, ].join(':'); - throw new InternalServerError(message); + throw new InternalServerError(message, error); } } } diff --git a/packages/cli/src/controllers/password-reset.controller.ts b/packages/cli/src/controllers/password-reset.controller.ts index 88155e420a..a14b1f06be 100644 --- a/packages/cli/src/controllers/password-reset.controller.ts +++ b/packages/cli/src/controllers/password-reset.controller.ts @@ -120,7 +120,7 @@ export class PasswordResetController { publicApi: false, }); if (error instanceof Error) { - throw new InternalServerError(`Please contact your administrator: ${error.message}`); + throw new InternalServerError(`Please contact your administrator: ${error.message}`, error); } } diff --git a/packages/cli/src/controllers/translation.controller.ts b/packages/cli/src/controllers/translation.controller.ts index 485e290cad..d6ae656afe 100644 --- a/packages/cli/src/controllers/translation.controller.ts +++ b/packages/cli/src/controllers/translation.controller.ts @@ -54,7 +54,7 @@ export class TranslationController { // eslint-disable-next-line @typescript-eslint/no-unsafe-return return require(NODE_HEADERS_PATH); } catch (error) { - throw new InternalServerError('Failed to load headers file'); + throw new InternalServerError('Failed to load headers file', error); } } } diff --git a/packages/cli/src/errors/response-errors/abstract/response.error.ts b/packages/cli/src/errors/response-errors/abstract/response.error.ts index f756afce41..19a15bf4b9 100644 --- a/packages/cli/src/errors/response-errors/abstract/response.error.ts +++ b/packages/cli/src/errors/response-errors/abstract/response.error.ts @@ -16,8 +16,9 @@ export abstract class ResponseError extends ApplicationError { readonly errorCode: number = httpStatusCode, // The error hint the response readonly hint: string | undefined = undefined, + cause: unknown, ) { - super(message); + super(message, { cause }); this.name = 'ResponseError'; } } diff --git a/packages/cli/src/errors/response-errors/internal-server.error.ts b/packages/cli/src/errors/response-errors/internal-server.error.ts index 4c10e93f95..2a6a8d6b77 100644 --- a/packages/cli/src/errors/response-errors/internal-server.error.ts +++ b/packages/cli/src/errors/response-errors/internal-server.error.ts @@ -1,7 +1,7 @@ import { ResponseError } from './abstract/response.error'; export class InternalServerError extends ResponseError { - constructor(message: string, errorCode = 500) { - super(message, 500, errorCode); + constructor(message: string, cause?: unknown) { + super(message, 500, 500, undefined, cause); } } diff --git a/packages/cli/src/executions/execution.service.ts b/packages/cli/src/executions/execution.service.ts index 60dadfdc1b..67eb145b19 100644 --- a/packages/cli/src/executions/execution.service.ts +++ b/packages/cli/src/executions/execution.service.ts @@ -251,7 +251,7 @@ export class ExecutionService { requestFilters = requestFiltersRaw as IGetExecutionsQueryFilter; } } catch (error) { - throw new InternalServerError('Parameter "filter" contained invalid JSON string.'); + throw new InternalServerError('Parameter "filter" contained invalid JSON string.', error); } } diff --git a/packages/cli/src/services/user.service.ts b/packages/cli/src/services/user.service.ts index ba02375aba..e47dd026b0 100644 --- a/packages/cli/src/services/user.service.ts +++ b/packages/cli/src/services/user.service.ts @@ -1,5 +1,5 @@ import type { IUserSettings } from 'n8n-workflow'; -import { ApplicationError, ErrorReporterProxy as ErrorReporter } from 'n8n-workflow'; +import { ApplicationError } from 'n8n-workflow'; import { Service } from 'typedi'; import type { User, AssignableRole } from '@/databases/entities/user'; @@ -213,9 +213,8 @@ export class UserService { ), ); } catch (error) { - ErrorReporter.error(error); this.logger.error('Failed to create user shells', { userShells: createdUsers }); - throw new InternalServerError('An error occurred during user creation'); + throw new InternalServerError('An error occurred during user creation', error); } pendingUsersToInvite.forEach(({ email, id }) => createdUsers.set(email, id)); diff --git a/packages/cli/src/user-management/email/user-management-mailer.ts b/packages/cli/src/user-management/email/user-management-mailer.ts index b5df958d7d..3acddad185 100644 --- a/packages/cli/src/user-management/email/user-management-mailer.ts +++ b/packages/cli/src/user-management/email/user-management-mailer.ts @@ -125,7 +125,7 @@ export class UserManagementMailer { const error = toError(e); - throw new InternalServerError(`Please contact your administrator: ${error.message}`); + throw new InternalServerError(`Please contact your administrator: ${error.message}`, e); } } @@ -180,7 +180,7 @@ export class UserManagementMailer { const error = toError(e); - throw new InternalServerError(`Please contact your administrator: ${error.message}`); + throw new InternalServerError(`Please contact your administrator: ${error.message}`, e); } } diff --git a/packages/cli/src/webhooks/webhook-helpers.ts b/packages/cli/src/webhooks/webhook-helpers.ts index 6110584f7e..0dd8f576a4 100644 --- a/packages/cli/src/webhooks/webhook-helpers.ts +++ b/packages/cli/src/webhooks/webhook-helpers.ts @@ -762,7 +762,7 @@ export async function executeWebhook( ); } - const internalServerError = new InternalServerError(e.message); + const internalServerError = new InternalServerError(e.message, e); if (e instanceof ExecutionCancelledError) internalServerError.level = 'warning'; throw internalServerError; });