chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
/**
|
||||
* Base error class for all workflow-related errors.
|
||||
* Provides structured error information for better debugging and user feedback.
|
||||
*/
|
||||
export class WorkflowError extends Error {
|
||||
constructor(
|
||||
message: string,
|
||||
public code: string,
|
||||
public nodeId?: string,
|
||||
public cause?: Error
|
||||
) {
|
||||
super(message);
|
||||
this.name = 'WorkflowError';
|
||||
|
||||
// Maintains proper stack trace for where our error was thrown
|
||||
if (Error.captureStackTrace) {
|
||||
Error.captureStackTrace(this, WorkflowError);
|
||||
}
|
||||
}
|
||||
|
||||
toJSON() {
|
||||
return {
|
||||
name: this.name,
|
||||
message: this.message,
|
||||
code: this.code,
|
||||
nodeId: this.nodeId,
|
||||
cause: this.cause?.message,
|
||||
stack: this.stack,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Error thrown when a node fails to execute.
|
||||
*/
|
||||
export class NodeExecutionError extends WorkflowError {
|
||||
constructor(nodeId: string, message: string, cause?: Error) {
|
||||
super(`Node ${nodeId} failed: ${message}`, 'NODE_EXECUTION_ERROR', nodeId, cause);
|
||||
this.name = 'NodeExecutionError';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Error thrown when workflow validation fails.
|
||||
*/
|
||||
export class ValidationError extends WorkflowError {
|
||||
constructor(message: string, nodeId?: string) {
|
||||
super(message, 'VALIDATION_ERROR', nodeId);
|
||||
this.name = 'ValidationError';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Error thrown when an API call fails.
|
||||
*/
|
||||
export class APIError extends WorkflowError {
|
||||
constructor(
|
||||
message: string,
|
||||
public statusCode?: number,
|
||||
public endpoint?: string,
|
||||
cause?: Error
|
||||
) {
|
||||
super(message, 'API_ERROR', undefined, cause);
|
||||
this.name = 'APIError';
|
||||
}
|
||||
|
||||
toJSON() {
|
||||
return {
|
||||
...super.toJSON(),
|
||||
statusCode: this.statusCode,
|
||||
endpoint: this.endpoint,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Error thrown when authorization is required or fails.
|
||||
*/
|
||||
export class AuthorizationError extends WorkflowError {
|
||||
constructor(message: string, public toolName?: string) {
|
||||
super(message, 'AUTHORIZATION_ERROR');
|
||||
this.name = 'AuthorizationError';
|
||||
}
|
||||
|
||||
toJSON() {
|
||||
return {
|
||||
...super.toJSON(),
|
||||
toolName: this.toolName,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Error codes used throughout the workflow system.
|
||||
*/
|
||||
export const ErrorCodes = {
|
||||
NODE_EXECUTION_ERROR: 'NODE_EXECUTION_ERROR',
|
||||
VALIDATION_ERROR: 'VALIDATION_ERROR',
|
||||
API_ERROR: 'API_ERROR',
|
||||
AUTHORIZATION_ERROR: 'AUTHORIZATION_ERROR',
|
||||
WORKFLOW_NOT_FOUND: 'WORKFLOW_NOT_FOUND',
|
||||
INVALID_CONFIGURATION: 'INVALID_CONFIGURATION',
|
||||
TIMEOUT_ERROR: 'TIMEOUT_ERROR',
|
||||
NETWORK_ERROR: 'NETWORK_ERROR',
|
||||
} as const;
|
||||
|
||||
export type ErrorCode = typeof ErrorCodes[keyof typeof ErrorCodes];
|
||||
Reference in New Issue
Block a user