Files
n8n-enterprise-unlocked/packages/@n8n/ai-workflow-builder.ee/src/errors/index.ts
oleg 632b38119b feat: AI Workflow Builder agent (no-changelog) (#17423)
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2025-07-21 11:18:26 +02:00

163 lines
3.5 KiB
TypeScript

import { OperationalError, UnexpectedError } from 'n8n-workflow';
import type { OperationalErrorOptions, UnexpectedErrorOptions } from 'n8n-workflow';
/**
* Base error class for AI Workflow Builder specific errors
*/
export abstract class AiWorkflowBuilderError extends Error {
constructor(message: string, options?: ErrorOptions) {
super(message, options);
this.name = this.constructor.name;
}
}
/**
* Error thrown when a node is not found in the workflow
*/
export class NodeNotFoundError extends OperationalError {
constructor(nodeId: string, nodeType?: string, options?: OperationalErrorOptions) {
super(`Node with ID "${nodeId}" not found in workflow`, {
...options,
tags: {
...options?.tags,
nodeId,
nodeType,
},
shouldReport: false,
});
}
}
/**
* Error thrown when a node type is not found in the available node types
*/
export class NodeTypeNotFoundError extends OperationalError {
constructor(nodeType: string, options?: OperationalErrorOptions) {
super(`Node type "${nodeType}" not found`, {
...options,
tags: {
...options?.tags,
nodeType,
},
shouldReport: false,
});
}
}
/**
* Error thrown when there's an issue with node connections
*/
export class ConnectionError extends OperationalError {
constructor(
message: string,
options?: OperationalErrorOptions & {
fromNodeId?: string;
toNodeId?: string;
connectionType?: string;
},
) {
super(message, {
...options,
tags: {
...options?.tags,
fromNodeId: options?.fromNodeId,
toNodeId: options?.toNodeId,
connectionType: options?.connectionType,
},
shouldReport: false,
});
}
}
/**
* Error thrown when the LLM service fails
*/
export class LLMServiceError extends OperationalError {
constructor(
message: string,
options?: OperationalErrorOptions & { llmModel?: string; statusCode?: number },
) {
super(message, {
...options,
tags: {
...options?.tags,
llmModel: options?.llmModel,
statusCode: options?.statusCode,
},
shouldReport: true,
});
}
}
/**
* Error thrown when validation fails
*/
export class ValidationError extends OperationalError {
constructor(
message: string,
options?: OperationalErrorOptions & { field?: string; value?: unknown },
) {
super(message, {
...options,
tags: {
...options?.tags,
field: options?.field,
},
extra: {
...options?.extra,
value: options?.value,
},
shouldReport: false,
});
}
}
/**
* Error thrown when parameter update fails
*/
export class ParameterUpdateError extends OperationalError {
constructor(
message: string,
options?: OperationalErrorOptions & { nodeId?: string; nodeType: string; parameter?: string },
) {
super(message, {
...options,
tags: {
...options?.tags,
nodeId: options?.nodeId,
nodeType: options?.nodeType,
parameter: options?.parameter,
},
shouldReport: false,
});
}
}
/**
* Error thrown when workflow state is invalid
*/
export class WorkflowStateError extends UnexpectedError {
constructor(message: string, options?: UnexpectedErrorOptions) {
super(message, {
...options,
shouldReport: true,
});
}
}
/**
* Error thrown when tool execution fails unexpectedly
*/
export class ToolExecutionError extends UnexpectedError {
constructor(message: string, options?: UnexpectedErrorOptions & { toolName?: string }) {
super(message, {
...options,
shouldReport: true,
tags: {
...options?.tags,
toolName: options?.toolName,
},
});
}
}