Skip to content

API Reference

📚 Core API Documentation

This comprehensive API reference covers all classes, interfaces, and methods available in Chainly SDK.

🔧 Core Classes

Workflow<TContext, TResult>

The main orchestration class for managing task execution and dependencies.

typescript
class Workflow<TContext = any, TResult = any> {
  constructor(config: WorkflowConfig);
  
  // Task Management
  addTask<T>(task: Task<T>, options?: TaskOptions): void;
  addParallelGroup(group: ParallelGroup, options?: GroupOptions): void;
  addConditionalBranch(branch: ConditionalBranch): void;
  
  // Execution
  execute(context: TContext): Promise<WorkflowResult<TResult>>;
  executeAsync(context: TContext): Promise<WorkflowExecution>;
  
  // State Management
  getState(): WorkflowState;
  pause(): Promise<void>;
  resume(): Promise<void>;
  cancel(): Promise<void>;
  
  // Event Handling
  on(event: WorkflowEvent, handler: EventHandler): void;
  off(event: WorkflowEvent, handler: EventHandler): void;
  emit(event: WorkflowEvent, data: any): void;
  
  // Utility
  getExecutionPlan(): ExecutionPlan;
  getMetrics(): WorkflowMetrics;
  serialize(): SerializedWorkflow;
}

WorkflowConfig Interface

typescript
interface WorkflowConfig {
  name: string;
  description?: string;
  version?: string;
  
  // Execution settings
  maxConcurrentTasks?: number;
  defaultTimeout?: number;
  defaultRetryPolicy?: RetryPolicy;
  
  // Error handling
  errorHandlingStrategy?: 'fail-fast' | 'continue-on-error' | 'custom';
  customErrorHandler?: ErrorHandler;
  
  // Middleware
  middleware?: Middleware[];
  
  // Monitoring
  enableMetrics?: boolean;
  enableTracing?: boolean;
  metricsCollector?: MetricsCollector;
  
  // Persistence
  enablePersistence?: boolean;
  persistenceAdapter?: PersistenceAdapter;
}

Usage Examples

typescript
// Basic workflow creation
const workflow = new Workflow({
  name: 'data-processing',
  maxConcurrentTasks: 5,
  defaultTimeout: 30000
});

// With middleware
const workflow = new Workflow({
  name: 'secure-workflow',
  middleware: [
    new SecurityMiddleware(),
    new LoggingMiddleware(),
    new MetricsMiddleware()
  ]
});

// Execute workflow
const result = await workflow.execute({
  input: 'data',
  userId: 'user-123'
});

Task<TInput, TOutput>

Represents an individual unit of work within a workflow.

typescript
class Task<TInput = any, TOutput = any> {
  constructor(
    name: string,
    handler: TaskHandler<TInput, TOutput>,
    options?: TaskOptions
  );
  
  // Execution
  execute(context: WorkflowContext): Promise<TOutput>;
  
  // Dependencies
  dependsOn(...tasks: string[] | Task[]): Task<TInput, TOutput>;
  getDependencies(): string[];
  
  // Configuration
  setTimeout(timeout: number): Task<TInput, TOutput>;
  setRetryPolicy(policy: RetryPolicy): Task<TInput, TOutput>;
  setValidator(validator: Validator<TInput>): Task<TInput, TOutput>;
  
  // State
  getState(): TaskState;
  getMetrics(): TaskMetrics;
  
  // Events
  on(event: TaskEvent, handler: TaskEventHandler): void;
  off(event: TaskEvent, handler: TaskEventHandler): void;
}

TaskHandler Type

typescript
type TaskHandler<TInput, TOutput> = (
  context: TaskExecutionContext<TInput>
) => Promise<TOutput> | TOutput;

interface TaskExecutionContext<TInput> {
  input: TInput;
  workflowContext: WorkflowContext;
  taskMetadata: TaskMetadata;
  
  // Utility methods
  getResult<T>(taskName: string): T | undefined;
  setResult(key: string, value: any): void;
  log(level: LogLevel, message: string, meta?: any): void;
  metric(name: string, value: number, tags?: Record<string, string>): void;
}

TaskOptions Interface

typescript
interface TaskOptions {
  timeout?: number;
  retryPolicy?: RetryPolicy;
  validator?: Validator;
  middleware?: Middleware[];
  requiredPermissions?: string[];
  tags?: Record<string, string>;
  description?: string;
}

Usage Examples

typescript
// Simple task
const validateTask = new Task('validate', async (context) => {
  return await validateInput(context.input);
});

// Task with options
const apiTask = new Task('api-call', async (context) => {
  return await fetchData(context.input.url);
}, {
  timeout: 10000,
  retryPolicy: {
    maxRetries: 3,
    backoffStrategy: 'exponential'
  },
  validator: urlValidator
});

// Task with dependencies
const processTask = new Task('process', handler)
  .dependsOn('validate', 'fetch-data')
  .setTimeout(15000);

EventDrivenWorkflow

Extension of Workflow for event-based execution patterns.

typescript
class EventDrivenWorkflow extends Workflow {
  constructor(config: EventDrivenWorkflowConfig);
  
  // Event Management
  on<T>(trigger: EventTrigger<T>, tasks: Task[] | TaskHandler): void;
  off<T>(trigger: EventTrigger<T>): void;
  emit<T>(eventType: string, payload: T): void;
  
  // Lifecycle
  start(): Promise<void>;
  stop(): Promise<void>;
  
  // Event Sources
  addEventSource(source: EventSource): void;
  removeEventSource(source: EventSource): void;
  
  // Filtering
  addGlobalFilter(filter: EventFilter): void;
  removeGlobalFilter(filter: EventFilter): void;
}

EventTrigger Class

typescript
class EventTrigger<T = any> {
  constructor(config: EventTriggerConfig<T>);
  
  readonly type: string;
  readonly filter?: EventFilter<T>;
  readonly transform?: EventTransform<T>;
  readonly debounce?: number;
  readonly throttle?: number;
}

interface EventTriggerConfig<T> {
  type: string;
  filter?: (event: T) => boolean | Promise<boolean>;
  transform?: (event: T) => any;
  debounce?: number; // milliseconds
  throttle?: number; // milliseconds
}

Usage Examples

typescript
// Event-driven workflow
const eventWorkflow = new EventDrivenWorkflow({
  name: 'payment-processor'
});

// Payment completion trigger
const paymentTrigger = new EventTrigger({
  type: 'payment.completed',
  filter: (event) => event.amount > 0 && event.status === 'success',
  transform: (event) => ({ orderId: event.orderId, amount: event.amount })
});

// Register event handler
eventWorkflow.on(paymentTrigger, [
  updateOrderTask,
  sendReceiptTask,
  updateInventoryTask
]);

// Start listening
await eventWorkflow.start();

// Emit events
eventWorkflow.emit('payment.completed', {
  orderId: 'order-123',
  amount: 99.99,
  status: 'success'
});

🔧 Utility Classes

ParallelGroup

Groups tasks for concurrent execution.

typescript
class ParallelGroup {
  constructor(tasks: Task[], options?: ParallelGroupOptions);
  
  addTask(task: Task): void;
  removeTask(taskName: string): void;
  getTasks(): Task[];
  
  execute(context: WorkflowContext): Promise<ParallelGroupResult>;
}

interface ParallelGroupOptions {
  maxConcurrency?: number;
  failFast?: boolean;
  aggregateResults?: boolean;
  timeout?: number;
}

interface ParallelGroupResult {
  success: boolean;
  results: Map<string, any>;
  errors: Map<string, Error>;
  executionTime: number;
}

ConditionalBranch

Implements conditional workflow execution.

typescript
class ConditionalBranch {
  constructor(config: ConditionalBranchConfig);
  
  addCondition(condition: BranchCondition): void;
  setFallback(tasks: Task[]): void;
  
  evaluate(context: WorkflowContext): Promise<Task[]>;
}

interface ConditionalBranchConfig {
  name: string;
  conditions: BranchCondition[];
  fallback?: Task[];
  evaluationStrategy?: 'first-match' | 'all-match' | 'priority';
}

interface BranchCondition {
  condition: (context: WorkflowContext) => boolean | Promise<boolean>;
  tasks: Task[];
  priority?: number;
  description?: string;
}

RetryPolicy

Configures retry behavior for tasks and workflows.

typescript
class RetryPolicy {
  constructor(config: RetryPolicyConfig);
  
  shouldRetry(error: Error, attempt: number): boolean;
  getDelay(attempt: number): number;
  getMaxRetries(): number;
}

interface RetryPolicyConfig {
  maxRetries: number;
  backoffStrategy: 'linear' | 'exponential' | 'fixed' | 'custom';
  initialDelay?: number;
  maxDelay?: number;
  retryCondition?: (error: Error) => boolean;
  customBackoff?: (attempt: number) => number;
}

// Usage examples
const exponentialRetry = new RetryPolicy({
  maxRetries: 5,
  backoffStrategy: 'exponential',
  initialDelay: 1000,
  maxDelay: 30000,
  retryCondition: (error) => error.code === 'NETWORK_ERROR'
});

const customRetry = new RetryPolicy({
  maxRetries: 3,
  backoffStrategy: 'custom',
  customBackoff: (attempt) => Math.min(1000 * Math.pow(2, attempt), 10000)
});

🛠️ Middleware System

Middleware Base Class

typescript
abstract class Middleware {
  abstract before(context: MiddlewareContext): Promise<void>;
  abstract after(context: MiddlewareContext, result: any): Promise<void>;
  abstract onError(error: Error, context: MiddlewareContext): Promise<void>;
  
  // Optional lifecycle methods
  onWorkflowStart?(workflow: Workflow): Promise<void>;
  onWorkflowComplete?(workflow: Workflow, result: any): Promise<void>;
  onWorkflowError?(workflow: Workflow, error: Error): Promise<void>;
}

interface MiddlewareContext {
  task: Task;
  workflow: Workflow;
  context: WorkflowContext;
  metadata: MiddlewareMetadata;
}

interface MiddlewareMetadata {
  executionId: string;
  startTime: Date;
  attempt: number;
  previousResults: Map<string, any>;
  tags: Record<string, string>;
}

Built-in Middleware

LoggingMiddleware

typescript
class LoggingMiddleware extends Middleware {
  constructor(config?: LoggingConfig);
  
  setLogLevel(level: LogLevel): void;
  setFormatter(formatter: LogFormatter): void;
  addTransport(transport: LogTransport): void;
}

interface LoggingConfig {
  level?: LogLevel;
  format?: 'json' | 'text' | 'structured';
  includeContext?: boolean;
  includeMetrics?: boolean;
  transports?: LogTransport[];
}

MetricsMiddleware

typescript
class MetricsMiddleware extends Middleware {
  constructor(collector: MetricsCollector);
  
  recordCustomMetric(name: string, value: number, tags?: Record<string, string>): void;
  getMetrics(): MetricsSnapshot;
}

interface MetricsCollector {
  increment(metric: string, tags?: Record<string, string>): void;
  histogram(metric: string, value: number, tags?: Record<string, string>): void;
  gauge(metric: string, value: number, tags?: Record<string, string>): void;
  timer(metric: string): Timer;
}

SecurityMiddleware

typescript
class SecurityMiddleware extends Middleware {
  constructor(config: SecurityConfig);
  
  validatePermissions(userId: string, permissions: string[]): Promise<boolean>;
  sanitizeInput(input: any): any;
  sanitizeOutput(output: any): any;
}

interface SecurityConfig {
  authenticationRequired?: boolean;
  permissionValidator?: PermissionValidator;
  inputSanitizer?: InputSanitizer;
  outputSanitizer?: OutputSanitizer;
  rateLimiter?: RateLimiter;
}

📊 Monitoring & Observability

MetricsCollector Interface

typescript
interface MetricsCollector {
  // Counter metrics
  increment(name: string, value?: number, tags?: Tags): void;
  decrement(name: string, value?: number, tags?: Tags): void;
  
  // Histogram metrics
  histogram(name: string, value: number, tags?: Tags): void;
  
  // Gauge metrics
  gauge(name: string, value: number, tags?: Tags): void;
  
  // Timing metrics
  timer(name: string, tags?: Tags): Timer;
  timing(name: string, duration: number, tags?: Tags): void;
  
  // Snapshot
  getSnapshot(): MetricsSnapshot;
  reset(): void;
}

interface Timer {
  stop(): number;
}

interface MetricsSnapshot {
  counters: Map<string, CounterMetric>;
  histograms: Map<string, HistogramMetric>;
  gauges: Map<string, GaugeMetric>;
  timers: Map<string, TimerMetric>;
  timestamp: Date;
}

type Tags = Record<string, string>;

TraceCollector Interface

typescript
interface TraceCollector {
  startSpan(name: string, parentSpan?: Span): Span;
  finishSpan(span: Span): void;
  
  addEvent(span: Span, name: string, attributes?: Record<string, any>): void;
  setTag(span: Span, key: string, value: any): void;
  
  getActiveSpan(): Span | null;
  setActiveSpan(span: Span): void;
}

interface Span {
  readonly id: string;
  readonly traceId: string;
  readonly parentId?: string;
  readonly name: string;
  readonly startTime: Date;
  
  setTag(key: string, value: any): void;
  addEvent(name: string, attributes?: Record<string, any>): void;
  finish(): void;
}

🔧 Configuration & Setup

ChainlyConfig Interface

typescript
interface ChainlyConfig {
  // Global settings
  maxConcurrentWorkflows?: number;
  maxConcurrentTasks?: number;
  defaultTimeout?: number;
  
  // Memory management
  memoryLimit?: number; // MB
  gcThreshold?: number; // Percentage
  contextCleanupThreshold?: number;
  
  // Error handling
  defaultRetryPolicy?: RetryPolicy;
  globalErrorHandler?: ErrorHandler;
  enableCircuitBreaker?: boolean;
  
  // Monitoring
  enableMetrics?: boolean;
  enableTracing?: boolean;
  metricsCollector?: MetricsCollector;
  traceCollector?: TraceCollector;
  
  // Persistence
  enablePersistence?: boolean;
  persistenceAdapter?: PersistenceAdapter;
  
  // Security
  enableSecurity?: boolean;
  securityConfig?: SecurityConfig;
  
  // Development
  enableDebugMode?: boolean;
  logLevel?: LogLevel;
}

Initialization

typescript
import { Chainly, ChainlyConfig } from 'chainly-sdk';

// Initialize with configuration
const config: ChainlyConfig = {
  maxConcurrentWorkflows: 10,
  maxConcurrentTasks: 50,
  enableMetrics: true,
  enableTracing: true,
  defaultRetryPolicy: {
    maxRetries: 3,
    backoffStrategy: 'exponential'
  }
};

Chainly.initialize(config);

// Create workflow factory
const workflowFactory = Chainly.createWorkflowFactory();

// Create workflow
const workflow = workflowFactory.create({
  name: 'my-workflow'
});

🔍 Error Handling

Error Types

typescript
// Base error class
class ChainlyError extends Error {
  readonly code: string;
  readonly context?: any;
  readonly timestamp: Date;
  
  constructor(message: string, code: string, context?: any);
}

// Specific error types
class TaskExecutionError extends ChainlyError {}
class DependencyResolutionError extends ChainlyError {}
class ValidationError extends ChainlyError {}
class TimeoutError extends ChainlyError {}
class SecurityError extends ChainlyError {}
class ConfigurationError extends ChainlyError {}

Error Handler Interface

typescript
interface ErrorHandler {
  handle(error: Error, context: ErrorContext): Promise<ErrorHandlingResult>;
}

interface ErrorContext {
  task?: Task;
  workflow: Workflow;
  workflowContext: WorkflowContext;
  attempt: number;
  previousErrors: Error[];
}

interface ErrorHandlingResult {
  action: 'retry' | 'skip' | 'fail' | 'fallback';
  delay?: number;
  fallbackResult?: any;
  metadata?: Record<string, any>;
}

📝 Type Definitions

Core Types

typescript
// Workflow states
enum WorkflowState {
  PENDING = 'pending',
  RUNNING = 'running',
  PAUSED = 'paused',
  COMPLETED = 'completed',
  FAILED = 'failed',
  CANCELLED = 'cancelled'
}

// Task states
enum TaskState {
  PENDING = 'pending',
  RUNNING = 'running',
  COMPLETED = 'completed',
  FAILED = 'failed',
  SKIPPED = 'skipped',
  RETRYING = 'retrying'
}

// Log levels
enum LogLevel {
  DEBUG = 'debug',
  INFO = 'info',
  WARN = 'warn',
  ERROR = 'error',
  FATAL = 'fatal'
}

// Event types
type WorkflowEvent = 'started' | 'completed' | 'failed' | 'paused' | 'resumed' | 'cancelled';
type TaskEvent = 'started' | 'completed' | 'failed' | 'retrying' | 'skipped';

This API reference provides comprehensive documentation for all Chainly SDK components, enabling developers to build sophisticated workflow orchestration systems with confidence.

Built with precision engineering and innovative solutions.