From 4cf9399432627064feddb787343c1ce1c9d9043e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Mon, 28 Jul 2025 17:48:56 +0200 Subject: [PATCH] refactor(core): Move `ApplicationError` to `@n8n/errors` (#17667) --- packages/@n8n/errors/package.json | 6 ++++- .../errors/src}/application.error.ts | 4 +++- packages/@n8n/errors/src/index.ts | 3 ++- .../errors/src/types.ts} | 0 .../nodes/trigger/ChatTrigger/error.ts | 2 +- packages/@n8n/nodes-langchain/package.json | 5 +++-- packages/@n8n/task-runner/package.json | 1 + .../task-runner/src/health-check-server.ts | 2 +- .../__tests__/require-resolver.test.ts | 2 +- .../errors/task-cancelled-error.ts | 2 +- .../js-task-runner/errors/timeout-error.ts | 2 +- .../errors/unsupported-function.error.ts | 2 +- .../src/js-task-runner/require-resolver.ts | 2 +- packages/core/package.json | 1 + .../src/errors/abstract/binary-data.error.ts | 2 +- .../src/errors/abstract/filesystem.error.ts | 2 +- packages/core/src/errors/error-reporter.ts | 2 +- .../invalid-execution-metadata.error.ts | 2 +- .../core/src/errors/invalid-mode.error.ts | 2 +- .../__tests__/triggers-and-pollers.test.ts | 2 +- .../__tests__/hook-context.test.ts | 2 +- .../node-execution-context/hook-context.ts | 2 +- .../utils/__tests__/normalize-items.test.ts | 2 +- .../utils/normalize-items.ts | 2 +- .../execution-engine/triggers-and-pollers.ts | 2 +- .../credentials/CustomerIoApi.credentials.ts | 2 +- .../credentials/ZscalerZiaApi.credentials.ts | 2 +- .../nodes/Airtable/v2/transport/index.ts | 2 +- .../nodes-base/nodes/Code/ExecutionError.ts | 2 +- .../nodes-base/nodes/Code/ValidationError.ts | 2 +- .../Code/errors/WrappedExecutionError.ts | 2 +- .../nodes/Code/test/Code.node.test.ts | 2 +- .../nodes/MQTT/test/GenericFunctions.test.ts | 2 +- .../nodes/Mailcheck/GenericFunctions.ts | 2 +- packages/nodes-base/nodes/Merge/v2/utils.ts | 2 +- .../Postgres/PostgresTrigger.functions.ts | 2 +- .../nodes/Postgres/v1/genericFunctions.ts | 2 +- .../nodes-base/nodes/Transform/utils/utils.ts | 2 +- .../Venafi/Datacenter/GenericFunctions.ts | 2 +- packages/nodes-base/nodes/Webhook/error.ts | 2 +- packages/nodes-base/package.json | 1 + packages/workflow/package.json | 3 ++- .../errors/abstract/execution-base.error.ts | 4 ++-- .../workflow/src/errors/base/base.error.ts | 2 +- .../src/errors/db-connection-timeout-error.ts | 2 +- packages/workflow/src/errors/index.ts | 3 +-- .../workflow/src/errors/node-api.error.ts | 2 +- .../src/errors/node-operation.error.ts | 2 +- .../src/errors/trigger-close.error.ts | 3 +-- .../src/errors/workflow-activation.error.ts | 2 +- packages/workflow/src/expression.ts | 2 +- packages/workflow/src/node-helpers.ts | 2 +- .../src/node-parameters/filter-parameter.ts | 2 +- packages/workflow/src/telemetry-helpers.ts | 2 +- packages/workflow/src/utils.ts | 2 +- packages/workflow/src/workflow-data-proxy.ts | 2 +- packages/workflow/src/workflow.ts | 2 +- packages/workflow/test/utils.test.ts | 2 +- pnpm-lock.yaml | 22 +++++++++++++++++++ 59 files changed, 90 insertions(+), 58 deletions(-) rename packages/{workflow/src/errors => @n8n/errors/src}/application.error.ts (83%) rename packages/{workflow/src/errors/error.types.ts => @n8n/errors/src/types.ts} (100%) diff --git a/packages/@n8n/errors/package.json b/packages/@n8n/errors/package.json index 5d51fb52f4..7ec38fff95 100644 --- a/packages/@n8n/errors/package.json +++ b/packages/@n8n/errors/package.json @@ -21,6 +21,10 @@ "dist/**/*" ], "devDependencies": { - "@n8n/typescript-config": "workspace:*" + "@n8n/typescript-config": "workspace:*", + "@sentry/node": "catalog:" + }, + "dependencies": { + "callsites": "catalog:" } } diff --git a/packages/workflow/src/errors/application.error.ts b/packages/@n8n/errors/src/application.error.ts similarity index 83% rename from packages/workflow/src/errors/application.error.ts rename to packages/@n8n/errors/src/application.error.ts index b7f1907d04..c33cda55a3 100644 --- a/packages/workflow/src/errors/application.error.ts +++ b/packages/@n8n/errors/src/application.error.ts @@ -1,7 +1,7 @@ import type { Event } from '@sentry/node'; import callsites from 'callsites'; -import type { ErrorLevel, ReportingOptions } from './error.types'; +import type { ErrorLevel, ReportingOptions } from './types'; /** * @deprecated Use `UserError`, `OperationalError` or `UnexpectedError` instead. @@ -26,9 +26,11 @@ export class ApplicationError extends Error { try { const filePath = callsites()[2].getFileName() ?? ''; + // eslint-disable-next-line no-useless-escape const match = /packages\/([^\/]+)\//.exec(filePath)?.[1]; if (match) this.tags.packageName = match; + // eslint-disable-next-line no-empty } catch {} } } diff --git a/packages/@n8n/errors/src/index.ts b/packages/@n8n/errors/src/index.ts index cb0ff5c3b5..8de63e4d4b 100644 --- a/packages/@n8n/errors/src/index.ts +++ b/packages/@n8n/errors/src/index.ts @@ -1 +1,2 @@ -export {}; +export { ApplicationError } from './application.error'; +export * from './types'; diff --git a/packages/workflow/src/errors/error.types.ts b/packages/@n8n/errors/src/types.ts similarity index 100% rename from packages/workflow/src/errors/error.types.ts rename to packages/@n8n/errors/src/types.ts diff --git a/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/error.ts b/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/error.ts index 3c17243ca6..30aa62be46 100644 --- a/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/error.ts +++ b/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/error.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; export class ChatTriggerAuthorizationError extends ApplicationError { constructor( diff --git a/packages/@n8n/nodes-langchain/package.json b/packages/@n8n/nodes-langchain/package.json index 64ec82390f..db58433a48 100644 --- a/packages/@n8n/nodes-langchain/package.json +++ b/packages/@n8n/nodes-langchain/package.json @@ -157,9 +157,9 @@ "@types/sanitize-html": "^2.11.0", "@types/temp": "^0.9.1", "fast-glob": "catalog:", + "jest-mock-extended": "^3.0.4", "n8n-core": "workspace:*", - "tsup": "catalog:", - "jest-mock-extended": "^3.0.4" + "tsup": "catalog:" }, "dependencies": { "@aws-sdk/client-sso-oidc": "3.808.0", @@ -190,6 +190,7 @@ "@modelcontextprotocol/sdk": "1.12.0", "@mozilla/readability": "0.6.0", "@n8n/client-oauth2": "workspace:*", + "@n8n/errors": "workspace:^", "@n8n/json-schema-to-zod": "workspace:*", "@n8n/typeorm": "0.3.20-12", "@n8n/typescript-config": "workspace:*", diff --git a/packages/@n8n/task-runner/package.json b/packages/@n8n/task-runner/package.json index 59ad73995c..a4ce47ef88 100644 --- a/packages/@n8n/task-runner/package.json +++ b/packages/@n8n/task-runner/package.json @@ -36,6 +36,7 @@ "dependencies": { "@n8n/config": "workspace:*", "@n8n/di": "workspace:*", + "@n8n/errors": "workspace:^", "@sentry/node": "catalog:", "acorn": "8.14.0", "acorn-walk": "8.3.4", diff --git a/packages/@n8n/task-runner/src/health-check-server.ts b/packages/@n8n/task-runner/src/health-check-server.ts index 9cb4cae6a0..523cefc070 100644 --- a/packages/@n8n/task-runner/src/health-check-server.ts +++ b/packages/@n8n/task-runner/src/health-check-server.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; import { createServer } from 'node:http'; export class HealthCheckServer { diff --git a/packages/@n8n/task-runner/src/js-task-runner/__tests__/require-resolver.test.ts b/packages/@n8n/task-runner/src/js-task-runner/__tests__/require-resolver.test.ts index 16e0f99e7c..27f65f4e4e 100644 --- a/packages/@n8n/task-runner/src/js-task-runner/__tests__/require-resolver.test.ts +++ b/packages/@n8n/task-runner/src/js-task-runner/__tests__/require-resolver.test.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; import { ExecutionError } from '@/js-task-runner/errors/execution-error'; diff --git a/packages/@n8n/task-runner/src/js-task-runner/errors/task-cancelled-error.ts b/packages/@n8n/task-runner/src/js-task-runner/errors/task-cancelled-error.ts index 1970c11fcd..f2fea1dfb6 100644 --- a/packages/@n8n/task-runner/src/js-task-runner/errors/task-cancelled-error.ts +++ b/packages/@n8n/task-runner/src/js-task-runner/errors/task-cancelled-error.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; export class TaskCancelledError extends ApplicationError { constructor(reason: string) { diff --git a/packages/@n8n/task-runner/src/js-task-runner/errors/timeout-error.ts b/packages/@n8n/task-runner/src/js-task-runner/errors/timeout-error.ts index ef3cc89751..63411afcfd 100644 --- a/packages/@n8n/task-runner/src/js-task-runner/errors/timeout-error.ts +++ b/packages/@n8n/task-runner/src/js-task-runner/errors/timeout-error.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; export class TimeoutError extends ApplicationError { description: string; diff --git a/packages/@n8n/task-runner/src/js-task-runner/errors/unsupported-function.error.ts b/packages/@n8n/task-runner/src/js-task-runner/errors/unsupported-function.error.ts index ad55ee0bbf..06275757f9 100644 --- a/packages/@n8n/task-runner/src/js-task-runner/errors/unsupported-function.error.ts +++ b/packages/@n8n/task-runner/src/js-task-runner/errors/unsupported-function.error.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; /** * Error that indicates that a specific function is not available in the diff --git a/packages/@n8n/task-runner/src/js-task-runner/require-resolver.ts b/packages/@n8n/task-runner/src/js-task-runner/require-resolver.ts index fceef00255..9da36e87a1 100644 --- a/packages/@n8n/task-runner/src/js-task-runner/require-resolver.ts +++ b/packages/@n8n/task-runner/src/js-task-runner/require-resolver.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; import { isBuiltin } from 'node:module'; import { ExecutionError } from './errors/execution-error'; diff --git a/packages/core/package.json b/packages/core/package.json index e9f1d2a2e4..4784614613 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -27,6 +27,7 @@ "bin" ], "devDependencies": { + "@n8n/errors": "workspace:^", "@n8n/typescript-config": "workspace:*", "@types/express": "catalog:", "@types/jsonwebtoken": "catalog:", diff --git a/packages/core/src/errors/abstract/binary-data.error.ts b/packages/core/src/errors/abstract/binary-data.error.ts index 061e95baf4..58403d6d10 100644 --- a/packages/core/src/errors/abstract/binary-data.error.ts +++ b/packages/core/src/errors/abstract/binary-data.error.ts @@ -1,3 +1,3 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; export abstract class BinaryDataError extends ApplicationError {} diff --git a/packages/core/src/errors/abstract/filesystem.error.ts b/packages/core/src/errors/abstract/filesystem.error.ts index 5ee937af68..405f3610d5 100644 --- a/packages/core/src/errors/abstract/filesystem.error.ts +++ b/packages/core/src/errors/abstract/filesystem.error.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; export abstract class FileSystemError extends ApplicationError { constructor(message: string, filePath: string) { diff --git a/packages/core/src/errors/error-reporter.ts b/packages/core/src/errors/error-reporter.ts index 5d8e85423e..91f9e77237 100644 --- a/packages/core/src/errors/error-reporter.ts +++ b/packages/core/src/errors/error-reporter.ts @@ -1,10 +1,10 @@ import { inTest, Logger } from '@n8n/backend-common'; import type { InstanceType } from '@n8n/constants'; import { Service } from '@n8n/di'; +import type { ReportingOptions } from '@n8n/errors'; import type { NodeOptions } from '@sentry/node'; import type { ErrorEvent, EventHint } from '@sentry/types'; import { AxiosError } from 'axios'; -import type { ReportingOptions } from 'n8n-workflow'; import { ApplicationError, ExecutionCancelledError, BaseError } from 'n8n-workflow'; import { createHash } from 'node:crypto'; diff --git a/packages/core/src/errors/invalid-execution-metadata.error.ts b/packages/core/src/errors/invalid-execution-metadata.error.ts index 972703e0d1..088f4d1295 100644 --- a/packages/core/src/errors/invalid-execution-metadata.error.ts +++ b/packages/core/src/errors/invalid-execution-metadata.error.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; export class InvalidExecutionMetadataError extends ApplicationError { constructor( diff --git a/packages/core/src/errors/invalid-mode.error.ts b/packages/core/src/errors/invalid-mode.error.ts index 1e3a4f3594..794f1ef461 100644 --- a/packages/core/src/errors/invalid-mode.error.ts +++ b/packages/core/src/errors/invalid-mode.error.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; import { CONFIG_MODES } from '../binary-data/utils'; diff --git a/packages/core/src/execution-engine/__tests__/triggers-and-pollers.test.ts b/packages/core/src/execution-engine/__tests__/triggers-and-pollers.test.ts index 25b1fddb26..bf7b59b69f 100644 --- a/packages/core/src/execution-engine/__tests__/triggers-and-pollers.test.ts +++ b/packages/core/src/execution-engine/__tests__/triggers-and-pollers.test.ts @@ -1,5 +1,5 @@ +import { ApplicationError } from '@n8n/errors'; import { mock } from 'jest-mock-extended'; -import { ApplicationError } from 'n8n-workflow'; import type { Workflow, INode, diff --git a/packages/core/src/execution-engine/node-execution-context/__tests__/hook-context.test.ts b/packages/core/src/execution-engine/node-execution-context/__tests__/hook-context.test.ts index 1092198a23..52defee3f6 100644 --- a/packages/core/src/execution-engine/node-execution-context/__tests__/hook-context.test.ts +++ b/packages/core/src/execution-engine/node-execution-context/__tests__/hook-context.test.ts @@ -1,3 +1,4 @@ +import { ApplicationError } from '@n8n/errors'; import { mock } from 'jest-mock-extended'; import type { Expression, @@ -13,7 +14,6 @@ import type { WorkflowActivateMode, WorkflowExecuteMode, } from 'n8n-workflow'; -import { ApplicationError } from 'n8n-workflow'; import { HookContext } from '../hook-context'; diff --git a/packages/core/src/execution-engine/node-execution-context/hook-context.ts b/packages/core/src/execution-engine/node-execution-context/hook-context.ts index 0fdf1c5954..84bf787cd1 100644 --- a/packages/core/src/execution-engine/node-execution-context/hook-context.ts +++ b/packages/core/src/execution-engine/node-execution-context/hook-context.ts @@ -1,3 +1,4 @@ +import { ApplicationError } from '@n8n/errors'; import type { ICredentialDataDecryptedObject, INode, @@ -9,7 +10,6 @@ import type { IWebhookData, WebhookType, } from 'n8n-workflow'; -import { ApplicationError } from 'n8n-workflow'; import { NodeExecutionContext } from './node-execution-context'; import { getRequestHelperFunctions } from './utils/request-helper-functions'; diff --git a/packages/core/src/execution-engine/node-execution-context/utils/__tests__/normalize-items.test.ts b/packages/core/src/execution-engine/node-execution-context/utils/__tests__/normalize-items.test.ts index 2664e1bf08..88fc089f7c 100644 --- a/packages/core/src/execution-engine/node-execution-context/utils/__tests__/normalize-items.test.ts +++ b/packages/core/src/execution-engine/node-execution-context/utils/__tests__/normalize-items.test.ts @@ -1,5 +1,5 @@ +import { ApplicationError } from '@n8n/errors'; import type { IBinaryData, INodeExecutionData } from 'n8n-workflow'; -import { ApplicationError } from 'n8n-workflow'; import { normalizeItems } from '../normalize-items'; diff --git a/packages/core/src/execution-engine/node-execution-context/utils/normalize-items.ts b/packages/core/src/execution-engine/node-execution-context/utils/normalize-items.ts index cafc9f6c42..cfb793e5df 100644 --- a/packages/core/src/execution-engine/node-execution-context/utils/normalize-items.ts +++ b/packages/core/src/execution-engine/node-execution-context/utils/normalize-items.ts @@ -1,5 +1,5 @@ +import { ApplicationError } from '@n8n/errors'; import type { INodeExecutionData, IDataObject } from 'n8n-workflow'; -import { ApplicationError } from 'n8n-workflow'; /** * Automatically put the objects under a 'json' key and don't error, diff --git a/packages/core/src/execution-engine/triggers-and-pollers.ts b/packages/core/src/execution-engine/triggers-and-pollers.ts index 9c90327149..1c6c8cc99c 100644 --- a/packages/core/src/execution-engine/triggers-and-pollers.ts +++ b/packages/core/src/execution-engine/triggers-and-pollers.ts @@ -1,5 +1,5 @@ import { Service } from '@n8n/di'; -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; import type { Workflow, INode, diff --git a/packages/nodes-base/credentials/CustomerIoApi.credentials.ts b/packages/nodes-base/credentials/CustomerIoApi.credentials.ts index 8f8a0e101f..f2d4fd74c5 100644 --- a/packages/nodes-base/credentials/CustomerIoApi.credentials.ts +++ b/packages/nodes-base/credentials/CustomerIoApi.credentials.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; import type { ICredentialDataDecryptedObject, ICredentialType, diff --git a/packages/nodes-base/credentials/ZscalerZiaApi.credentials.ts b/packages/nodes-base/credentials/ZscalerZiaApi.credentials.ts index 80d41ac657..be9295e5ee 100644 --- a/packages/nodes-base/credentials/ZscalerZiaApi.credentials.ts +++ b/packages/nodes-base/credentials/ZscalerZiaApi.credentials.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; import type { IAuthenticateGeneric, ICredentialDataDecryptedObject, diff --git a/packages/nodes-base/nodes/Airtable/v2/transport/index.ts b/packages/nodes-base/nodes/Airtable/v2/transport/index.ts index 6d26a24118..f49551cdcc 100644 --- a/packages/nodes-base/nodes/Airtable/v2/transport/index.ts +++ b/packages/nodes-base/nodes/Airtable/v2/transport/index.ts @@ -9,7 +9,7 @@ import type { IHttpRequestMethods, IRequestOptions, } from 'n8n-workflow'; -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; import type { IAttachment, IRecord } from '../helpers/interfaces'; import { flattenOutput } from '../helpers/utils'; diff --git a/packages/nodes-base/nodes/Code/ExecutionError.ts b/packages/nodes-base/nodes/Code/ExecutionError.ts index 53e87fc2e7..ebf1cded20 100644 --- a/packages/nodes-base/nodes/Code/ExecutionError.ts +++ b/packages/nodes-base/nodes/Code/ExecutionError.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; export class ExecutionError extends ApplicationError { description: string | null = null; diff --git a/packages/nodes-base/nodes/Code/ValidationError.ts b/packages/nodes-base/nodes/Code/ValidationError.ts index f2ba712c2c..078879c3e6 100644 --- a/packages/nodes-base/nodes/Code/ValidationError.ts +++ b/packages/nodes-base/nodes/Code/ValidationError.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; export class ValidationError extends ApplicationError { description = ''; diff --git a/packages/nodes-base/nodes/Code/errors/WrappedExecutionError.ts b/packages/nodes-base/nodes/Code/errors/WrappedExecutionError.ts index dfd000b6d3..cbb54ffece 100644 --- a/packages/nodes-base/nodes/Code/errors/WrappedExecutionError.ts +++ b/packages/nodes-base/nodes/Code/errors/WrappedExecutionError.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; export type WrappableError = Record; diff --git a/packages/nodes-base/nodes/Code/test/Code.node.test.ts b/packages/nodes-base/nodes/Code/test/Code.node.test.ts index ffd60e3656..8cf932cab0 100644 --- a/packages/nodes-base/nodes/Code/test/Code.node.test.ts +++ b/packages/nodes-base/nodes/Code/test/Code.node.test.ts @@ -3,7 +3,7 @@ import { NodeTestHarness } from '@nodes-testing/node-test-harness'; import { anyNumber, mock } from 'jest-mock-extended'; import { normalizeItems } from 'n8n-core'; import type { IExecuteFunctions, IWorkflowDataProxyData } from 'n8n-workflow'; -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; import { Code } from '../Code.node'; import { ValidationError } from '../ValidationError'; diff --git a/packages/nodes-base/nodes/MQTT/test/GenericFunctions.test.ts b/packages/nodes-base/nodes/MQTT/test/GenericFunctions.test.ts index 7b2a12ae40..9b50e6a674 100644 --- a/packages/nodes-base/nodes/MQTT/test/GenericFunctions.test.ts +++ b/packages/nodes-base/nodes/MQTT/test/GenericFunctions.test.ts @@ -1,6 +1,6 @@ import { mock } from 'jest-mock-extended'; import { MqttClient } from 'mqtt'; -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; import { createClient, type MqttCredential } from '../GenericFunctions'; diff --git a/packages/nodes-base/nodes/Mailcheck/GenericFunctions.ts b/packages/nodes-base/nodes/Mailcheck/GenericFunctions.ts index 23fa53e184..85d6ca6c74 100644 --- a/packages/nodes-base/nodes/Mailcheck/GenericFunctions.ts +++ b/packages/nodes-base/nodes/Mailcheck/GenericFunctions.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; import type { IDataObject, IExecuteFunctions, diff --git a/packages/nodes-base/nodes/Merge/v2/utils.ts b/packages/nodes-base/nodes/Merge/v2/utils.ts index 1f5437f663..758b13f57e 100644 --- a/packages/nodes-base/nodes/Merge/v2/utils.ts +++ b/packages/nodes-base/nodes/Merge/v2/utils.ts @@ -10,7 +10,7 @@ import type { INodeExecutionData, IPairedItemData, } from 'n8n-workflow'; -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; import { fuzzyCompare, preparePairedItemDataArray } from '@utils/utilities'; diff --git a/packages/nodes-base/nodes/Postgres/PostgresTrigger.functions.ts b/packages/nodes-base/nodes/Postgres/PostgresTrigger.functions.ts index 4465cea975..0c1cfd9a78 100644 --- a/packages/nodes-base/nodes/Postgres/PostgresTrigger.functions.ts +++ b/packages/nodes-base/nodes/Postgres/PostgresTrigger.functions.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; import type { ITriggerFunctions, IDataObject, diff --git a/packages/nodes-base/nodes/Postgres/v1/genericFunctions.ts b/packages/nodes-base/nodes/Postgres/v1/genericFunctions.ts index d34514d07c..38217f4a3c 100644 --- a/packages/nodes-base/nodes/Postgres/v1/genericFunctions.ts +++ b/packages/nodes-base/nodes/Postgres/v1/genericFunctions.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; import type { IExecuteFunctions, IDataObject, INodeExecutionData, JsonObject } from 'n8n-workflow'; import type pgPromise from 'pg-promise'; import type pg from 'pg-promise/typescript/pg-subset'; diff --git a/packages/nodes-base/nodes/Transform/utils/utils.ts b/packages/nodes-base/nodes/Transform/utils/utils.ts index 73b9fc7d68..3ce8999636 100644 --- a/packages/nodes-base/nodes/Transform/utils/utils.ts +++ b/packages/nodes-base/nodes/Transform/utils/utils.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; export const prepareFieldsArray = (fields: string | string[], fieldName = 'Fields') => { if (typeof fields === 'string') { diff --git a/packages/nodes-base/nodes/Venafi/Datacenter/GenericFunctions.ts b/packages/nodes-base/nodes/Venafi/Datacenter/GenericFunctions.ts index 4c3438b3a4..1296e67906 100644 --- a/packages/nodes-base/nodes/Venafi/Datacenter/GenericFunctions.ts +++ b/packages/nodes-base/nodes/Venafi/Datacenter/GenericFunctions.ts @@ -1,5 +1,5 @@ import get from 'lodash/get'; -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; import type { IDataObject, IExecuteFunctions, diff --git a/packages/nodes-base/nodes/Webhook/error.ts b/packages/nodes-base/nodes/Webhook/error.ts index 572910be7c..6c2451510c 100644 --- a/packages/nodes-base/nodes/Webhook/error.ts +++ b/packages/nodes-base/nodes/Webhook/error.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from 'n8n-workflow'; +import { ApplicationError } from '@n8n/errors'; export class WebhookAuthorizationError extends ApplicationError { constructor( diff --git a/packages/nodes-base/package.json b/packages/nodes-base/package.json index f166888a60..358c24d21c 100644 --- a/packages/nodes-base/package.json +++ b/packages/nodes-base/package.json @@ -882,6 +882,7 @@ "@mozilla/readability": "0.6.0", "@n8n/config": "workspace:*", "@n8n/di": "workspace:*", + "@n8n/errors": "workspace:^", "@n8n/imap": "workspace:*", "@n8n/vm2": "3.9.25", "alasql": "4.4.0", diff --git a/packages/workflow/package.json b/packages/workflow/package.json index b67665baac..8403de7895 100644 --- a/packages/workflow/package.json +++ b/packages/workflow/package.json @@ -38,8 +38,8 @@ "devDependencies": { "@langchain/core": "catalog:", "@n8n/config": "workspace:*", - "@n8n/vitest-config": "workspace:*", "@n8n/typescript-config": "workspace:*", + "@n8n/vitest-config": "workspace:*", "@types/express": "catalog:", "@types/jmespath": "^0.15.0", "@types/lodash": "catalog:", @@ -50,6 +50,7 @@ "vitest-mock-extended": "catalog:" }, "dependencies": { + "@n8n/errors": "workspace:^", "@n8n/tournament": "1.0.6", "ast-types": "0.15.2", "callsites": "catalog:", diff --git a/packages/workflow/src/errors/abstract/execution-base.error.ts b/packages/workflow/src/errors/abstract/execution-base.error.ts index 83faed8a6d..93f86cbd03 100644 --- a/packages/workflow/src/errors/abstract/execution-base.error.ts +++ b/packages/workflow/src/errors/abstract/execution-base.error.ts @@ -1,6 +1,6 @@ +import { ApplicationError, type ReportingOptions } from '@n8n/errors'; + import type { Functionality, IDataObject, JsonObject } from '../../interfaces'; -import { ApplicationError } from '../application.error'; -import type { ReportingOptions } from '../error.types'; interface ExecutionBaseErrorOptions extends ReportingOptions { cause?: Error; diff --git a/packages/workflow/src/errors/base/base.error.ts b/packages/workflow/src/errors/base/base.error.ts index 97b25a5c25..f460688bf4 100644 --- a/packages/workflow/src/errors/base/base.error.ts +++ b/packages/workflow/src/errors/base/base.error.ts @@ -1,7 +1,7 @@ import type { Event } from '@sentry/node'; import callsites from 'callsites'; -import type { ErrorTags, ErrorLevel, ReportingOptions } from '../error.types'; +import type { ErrorTags, ErrorLevel, ReportingOptions } from '@n8n/errors'; export type BaseErrorOptions = { description?: string | undefined | null } & ErrorOptions & ReportingOptions; diff --git a/packages/workflow/src/errors/db-connection-timeout-error.ts b/packages/workflow/src/errors/db-connection-timeout-error.ts index 901b9d36b7..36f3846ddd 100644 --- a/packages/workflow/src/errors/db-connection-timeout-error.ts +++ b/packages/workflow/src/errors/db-connection-timeout-error.ts @@ -1,4 +1,4 @@ -import { ApplicationError } from './application.error'; +import { ApplicationError } from '@n8n/errors'; export type DbConnectionTimeoutErrorOpts = { configuredTimeoutInMs: number; diff --git a/packages/workflow/src/errors/index.ts b/packages/workflow/src/errors/index.ts index db3245608e..3000d22d32 100644 --- a/packages/workflow/src/errors/index.ts +++ b/packages/workflow/src/errors/index.ts @@ -1,9 +1,8 @@ -export type * from './error.types'; export { BaseError, type BaseErrorOptions } from './base/base.error'; export { OperationalError, type OperationalErrorOptions } from './base/operational.error'; export { UnexpectedError, type UnexpectedErrorOptions } from './base/unexpected.error'; export { UserError, type UserErrorOptions } from './base/user.error'; -export { ApplicationError } from './application.error'; +export { ApplicationError } from '@n8n/errors'; export { ExpressionError } from './expression.error'; export { ExecutionCancelledError } from './execution-cancelled.error'; export { NodeApiError } from './node-api.error'; diff --git a/packages/workflow/src/errors/node-api.error.ts b/packages/workflow/src/errors/node-api.error.ts index 39eabc3b86..5a70b144fc 100644 --- a/packages/workflow/src/errors/node-api.error.ts +++ b/packages/workflow/src/errors/node-api.error.ts @@ -4,7 +4,7 @@ import type { AxiosError } from 'axios'; import { parseString } from 'xml2js'; import { NodeError } from './abstract/node.error'; -import type { ErrorLevel } from './error.types'; +import type { ErrorLevel } from '@n8n/errors'; import { NO_OP_NODE_TYPE, UNKNOWN_ERROR_DESCRIPTION, diff --git a/packages/workflow/src/errors/node-operation.error.ts b/packages/workflow/src/errors/node-operation.error.ts index 3c01908849..3bb564726a 100644 --- a/packages/workflow/src/errors/node-operation.error.ts +++ b/packages/workflow/src/errors/node-operation.error.ts @@ -1,5 +1,5 @@ import { NodeError } from './abstract/node.error'; -import { ApplicationError } from './application.error'; +import { ApplicationError } from '@n8n/errors'; import type { NodeOperationErrorOptions } from './node-api.error'; import type { INode, JsonObject } from '../interfaces'; diff --git a/packages/workflow/src/errors/trigger-close.error.ts b/packages/workflow/src/errors/trigger-close.error.ts index 083c050be6..b8931d62f2 100644 --- a/packages/workflow/src/errors/trigger-close.error.ts +++ b/packages/workflow/src/errors/trigger-close.error.ts @@ -1,5 +1,4 @@ -import { ApplicationError } from './application.error'; -import type { ErrorLevel } from './error.types'; +import { ApplicationError, type ErrorLevel } from '@n8n/errors'; import type { INode } from '../interfaces'; interface TriggerCloseErrorOptions extends ErrorOptions { diff --git a/packages/workflow/src/errors/workflow-activation.error.ts b/packages/workflow/src/errors/workflow-activation.error.ts index 68893dbe3c..b0d9d49697 100644 --- a/packages/workflow/src/errors/workflow-activation.error.ts +++ b/packages/workflow/src/errors/workflow-activation.error.ts @@ -1,5 +1,5 @@ import { ExecutionBaseError } from './abstract/execution-base.error'; -import type { ApplicationError } from './application.error'; +import type { ApplicationError } from '@n8n/errors'; import type { INode } from '../interfaces'; interface WorkflowActivationErrorOptions { diff --git a/packages/workflow/src/expression.ts b/packages/workflow/src/expression.ts index 1f68d88cb4..30271b729d 100644 --- a/packages/workflow/src/expression.ts +++ b/packages/workflow/src/expression.ts @@ -1,6 +1,6 @@ import { DateTime, Duration, Interval } from 'luxon'; -import { ApplicationError } from './errors/application.error'; +import { ApplicationError } from '@n8n/errors'; import { ExpressionExtensionError } from './errors/expression-extension.error'; import { ExpressionError } from './errors/expression.error'; import { evaluateExpression, setErrorHandler } from './expression-evaluator-proxy'; diff --git a/packages/workflow/src/node-helpers.ts b/packages/workflow/src/node-helpers.ts index 5edcc2f0dc..6449bbb305 100644 --- a/packages/workflow/src/node-helpers.ts +++ b/packages/workflow/src/node-helpers.ts @@ -7,7 +7,7 @@ import get from 'lodash/get'; import isEqual from 'lodash/isEqual'; import { EXECUTE_WORKFLOW_NODE_TYPE, WORKFLOW_TOOL_LANGCHAIN_NODE_TYPE } from './constants'; -import { ApplicationError } from './errors/application.error'; +import { ApplicationError } from '@n8n/errors'; import { NodeConnectionTypes } from './interfaces'; import type { FieldType, diff --git a/packages/workflow/src/node-parameters/filter-parameter.ts b/packages/workflow/src/node-parameters/filter-parameter.ts index 75f97ae84c..767eb26c8c 100644 --- a/packages/workflow/src/node-parameters/filter-parameter.ts +++ b/packages/workflow/src/node-parameters/filter-parameter.ts @@ -1,6 +1,6 @@ import type { DateTime } from 'luxon'; -import { ApplicationError } from '../errors/application.error'; +import { ApplicationError } from '@n8n/errors'; import type { FilterConditionValue, FilterOperatorType, diff --git a/packages/workflow/src/telemetry-helpers.ts b/packages/workflow/src/telemetry-helpers.ts index 30cc0567cd..d59b01438a 100644 --- a/packages/workflow/src/telemetry-helpers.ts +++ b/packages/workflow/src/telemetry-helpers.ts @@ -22,7 +22,7 @@ import { WEBHOOK_NODE_TYPE, WORKFLOW_TOOL_LANGCHAIN_NODE_TYPE, } from './constants'; -import { ApplicationError } from './errors/application.error'; +import { ApplicationError } from '@n8n/errors'; import type { NodeApiError } from './errors/node-api.error'; import type { IConnection, diff --git a/packages/workflow/src/utils.ts b/packages/workflow/src/utils.ts index 7809f6b5f4..152bceb737 100644 --- a/packages/workflow/src/utils.ts +++ b/packages/workflow/src/utils.ts @@ -4,7 +4,7 @@ import FormData from 'form-data'; import merge from 'lodash/merge'; import { ALPHABET } from './constants'; -import { ApplicationError } from './errors/application.error'; +import { ApplicationError } from '@n8n/errors'; import { ExecutionCancelledError } from './errors/execution-cancelled.error'; import type { BinaryFileType, IDisplayOptions, INodeProperties, JsonObject } from './interfaces'; diff --git a/packages/workflow/src/workflow-data-proxy.ts b/packages/workflow/src/workflow-data-proxy.ts index 74eb79ae5c..013078c24c 100644 --- a/packages/workflow/src/workflow-data-proxy.ts +++ b/packages/workflow/src/workflow-data-proxy.ts @@ -7,7 +7,7 @@ import { DateTime, Duration, Interval, Settings } from 'luxon'; import { augmentArray, augmentObject } from './augment-object'; import { AGENT_LANGCHAIN_NODE_TYPE, SCRIPTING_NODE_TYPES } from './constants'; -import { ApplicationError } from './errors/application.error'; +import { ApplicationError } from '@n8n/errors'; import { ExpressionError, type ExpressionErrorOptions, diff --git a/packages/workflow/src/workflow.ts b/packages/workflow/src/workflow.ts index a8f6ea893a..ec72681621 100644 --- a/packages/workflow/src/workflow.ts +++ b/packages/workflow/src/workflow.ts @@ -17,7 +17,7 @@ import { STARTING_NODE_TYPES, } from './constants'; import { UserError } from './errors'; -import { ApplicationError } from './errors/application.error'; +import { ApplicationError } from '@n8n/errors'; import { Expression } from './expression'; import { getGlobalState } from './global-state'; import type { diff --git a/packages/workflow/test/utils.test.ts b/packages/workflow/test/utils.test.ts index 116b911cb8..22ff18eb03 100644 --- a/packages/workflow/test/utils.test.ts +++ b/packages/workflow/test/utils.test.ts @@ -1,5 +1,5 @@ import { ALPHABET } from '../src/constants'; -import { ApplicationError } from '../src/errors/application.error'; +import { ApplicationError } from '@n8n/errors'; import { ExecutionCancelledError } from '../src/errors/execution-cancelled.error'; import { jsonParse, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index db64cfaf69..f90a45206b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -731,10 +731,17 @@ importers: version: link:../typescript-config packages/@n8n/errors: + dependencies: + callsites: + specifier: 'catalog:' + version: 3.1.0 devDependencies: '@n8n/typescript-config': specifier: workspace:* version: link:../typescript-config + '@sentry/node': + specifier: 'catalog:' + version: 8.52.1 packages/@n8n/eslint-config: dependencies: @@ -981,6 +988,9 @@ importers: '@n8n/client-oauth2': specifier: workspace:* version: link:../client-oauth2 + '@n8n/errors': + specifier: workspace:^ + version: link:../errors '@n8n/json-schema-to-zod': specifier: workspace:* version: link:../json-schema-to-zod @@ -1205,6 +1215,9 @@ importers: '@n8n/di': specifier: workspace:* version: link:../di + '@n8n/errors': + specifier: workspace:^ + version: link:../errors '@sentry/node': specifier: 'catalog:' version: 8.52.1 @@ -1792,6 +1805,9 @@ importers: specifier: 'catalog:' version: 3.25.67 devDependencies: + '@n8n/errors': + specifier: workspace:^ + version: link:../@n8n/errors '@n8n/typescript-config': specifier: workspace:* version: link:../@n8n/typescript-config @@ -2670,6 +2686,9 @@ importers: '@n8n/di': specifier: workspace:* version: link:../@n8n/di + '@n8n/errors': + specifier: workspace:^ + version: link:../@n8n/errors '@n8n/imap': specifier: workspace:* version: link:../@n8n/imap @@ -2983,6 +3002,9 @@ importers: packages/workflow: dependencies: + '@n8n/errors': + specifier: workspace:^ + version: link:../@n8n/errors '@n8n/tournament': specifier: 1.0.6 version: 1.0.6