From 512eb112109f8458e9b383aa027a2345c6e99d3e Mon Sep 17 00:00:00 2001 From: Michael Kret <88898367+michael-radency@users.noreply.github.com> Date: Fri, 26 Jul 2024 14:12:42 +0300 Subject: [PATCH] fix: Add original error message to messages, do not obfuscate if description provided in options (no-changelog) (#10202) --- .../src/errors/node-operation.error.ts | 6 ++- .../workflow/test/errors/node.error.test.ts | 43 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/packages/workflow/src/errors/node-operation.error.ts b/packages/workflow/src/errors/node-operation.error.ts index b5fb2c518e..b0167250dc 100644 --- a/packages/workflow/src/errors/node-operation.error.ts +++ b/packages/workflow/src/errors/node-operation.error.ts @@ -34,7 +34,11 @@ export class NodeOperationError extends NodeError { error.messages.forEach((message) => this.addToMessages(message)); } - if (obfuscateErrorMessage) this.message = OBFUSCATED_ERROR_MESSAGE; + if (obfuscateErrorMessage && !options.description) { + const originalMessage = typeof error === 'string' ? error : (error.message as string); + this.addToMessages(originalMessage); + this.message = OBFUSCATED_ERROR_MESSAGE; + } if (options.message) this.message = options.message; if (options.level) this.level = options.level; if (options.functionality) this.functionality = options.functionality; diff --git a/packages/workflow/test/errors/node.error.test.ts b/packages/workflow/test/errors/node.error.test.ts index 7d0783a65c..357314c347 100644 --- a/packages/workflow/test/errors/node.error.test.ts +++ b/packages/workflow/test/errors/node.error.test.ts @@ -2,6 +2,8 @@ import { mock } from 'jest-mock-extended'; import type { INode } from '@/Interfaces'; import { NodeApiError } from '@/errors/node-api.error'; import { NodeOperationError } from '@/errors/node-operation.error'; +import { ApplicationError } from '@/errors/application.error'; +import { OBFUSCATED_ERROR_MESSAGE } from '@/Constants'; describe('NodeError', () => { const node = mock(); @@ -15,4 +17,45 @@ describe('NodeError', () => { expect(wrapped1).toEqual(apiError); expect(wrapped2).toEqual(opsError); }); + + it('should obfuscate errors not processed by n8n', () => { + const error = new Error('Original error message'); + const nodeOpError = new NodeOperationError(node, error); + + expect(nodeOpError.message).toBe(OBFUSCATED_ERROR_MESSAGE); + expect(nodeOpError.messages).toContain('Original error message'); + }); + + it('should not obfuscate errors processed by n8n', () => { + const appError = new ApplicationError('Processed error message'); + const nodeOpError = new NodeOperationError(node, appError); + + expect(nodeOpError.message).toBe('Processed error message'); + expect(nodeOpError.messages).not.toContain('Processed error message'); + }); + + it('should not obfuscate string errors', () => { + const errorMessage = 'String error message'; + const nodeOpError = new NodeOperationError(node, errorMessage); + + expect(nodeOpError.message).toBe(errorMessage); + expect(nodeOpError.messages).toHaveLength(0); + }); + + it('should not obfuscate error if description provided', () => { + const error = new Error('Initial error message'); + const options = { description: 'Error description' }; + const nodeOpError = new NodeOperationError(node, error, options); + + expect(nodeOpError.message).toBe('Initial error message'); + }); + + it('should respect provided options for message and description', () => { + const error = new Error('Initial error message'); + const options = { message: 'Overridden message', description: 'Error description' }; + const nodeOpError = new NodeOperationError(node, error, options); + + expect(nodeOpError.message).toBe('Overridden message'); + expect(nodeOpError.description).toBe('Error description'); + }); });