diff --git a/packages/workflow/src/errors/node-api.error.ts b/packages/workflow/src/errors/node-api.error.ts index 0819e67876..56020fc678 100644 --- a/packages/workflow/src/errors/node-api.error.ts +++ b/packages/workflow/src/errors/node-api.error.ts @@ -113,7 +113,7 @@ const STATUS_CODE_MESSAGES: IStatusCodeMessages = { * with an HTTP error code, an error message and a description. */ export class NodeApiError extends NodeError { - httpCode: string | null; + httpCode: string | null = null; // eslint-disable-next-line complexity constructor( @@ -131,6 +131,10 @@ export class NodeApiError extends NodeError { messageMapping, }: NodeApiErrorOptions = {}, ) { + if (errorResponse instanceof NodeApiError) { + return errorResponse; + } + super(node, errorResponse); this.addToMessages(errorResponse.message as string); diff --git a/packages/workflow/src/errors/node-operation.error.ts b/packages/workflow/src/errors/node-operation.error.ts index 2fdfa96884..c4c8c780b1 100644 --- a/packages/workflow/src/errors/node-operation.error.ts +++ b/packages/workflow/src/errors/node-operation.error.ts @@ -13,9 +13,13 @@ export class NodeOperationError extends NodeError { error: Error | string | JsonObject, options: NodeOperationErrorOptions = {}, ) { + if (error instanceof NodeOperationError) { + return error; + } if (typeof error === 'string') { error = new Error(error); } + super(node, error); if (error instanceof NodeError && error?.messages?.length) { diff --git a/packages/workflow/test/errors/node.error.test.ts b/packages/workflow/test/errors/node.error.test.ts index 3bf7dc20a6..7d0783a65c 100644 --- a/packages/workflow/test/errors/node.error.test.ts +++ b/packages/workflow/test/errors/node.error.test.ts @@ -12,11 +12,7 @@ describe('NodeError', () => { const wrapped1 = new NodeOperationError(node, apiError); const wrapped2 = new NodeOperationError(node, opsError); - expect(wrapped1.level).toEqual('error'); - expect(wrapped1.message).toEqual('The service was not able to process your request'); - expect(wrapped1.tags).toEqual(expect.objectContaining({ reWrapped: true })); - expect(wrapped2.level).toEqual('error'); - expect(wrapped2.message).toEqual('Some operation failed'); - expect(wrapped2.tags).toEqual(expect.objectContaining({ reWrapped: true })); + expect(wrapped1).toEqual(apiError); + expect(wrapped2).toEqual(opsError); }); });