/** * ExecutionObserver — interface for engines to report execution state back to the API. * * Two implementations: * - HttpExecutionObserver: HTTP calls to the API (for remote engines) * - DirectExecutionObserver: Direct service calls (for embedded engines, lives in API src/) */ export type { ApiConfig, EngineBaseConfig } from './types.js'; export interface ExecutionObserver { createNodeExecution(executionId: string, data: { nodeKey: string; specName: string; status: string; phase: string; input?: unknown; startedAt?: string; compensationOf?: string; }): Promise<{ id: string; }>; updateNodeExecution(executionId: string, nodeExecutionId: string, data: Record): Promise; updateExecution(executionId: string, data: Record): Promise; /** Register or update a node specification. Optional — only HttpExecutionObserver implements this. */ ensureNodeSpec?(data: { name: string; package: { name: string; version: string; }; description?: string | null; input?: unknown; output?: unknown; connectionConstraints?: unknown; defaultRetryPolicy?: unknown; defaultTimeoutPolicy?: unknown; }): Promise<{ id: string; versionId?: string; }>; /** Fetch pending executions from the API. Optional — only HttpExecutionObserver implements this. */ fetchPendingExecutions?(filters: { workflowId?: string; engineType?: string; limit?: number; }): Promise>; /** Register a workflow if it doesn't exist. Optional — only HttpExecutionObserver implements this. */ ensureWorkflow?(data: { name: string; type?: 'graph' | 'code'; description?: string | null; defaultRetryPolicy?: unknown; defaultTimeoutPolicy?: unknown; }): Promise<{ id: string; versionId?: string; }>; /** Create an execution record without dispatch (SDK-triggered). Optional. */ createExecution?(data: { workflowId: string; workflowVersionId: string; executionId?: string; input?: unknown; engineType?: string; source?: string; }): Promise<{ id: string; }>; } export declare function toSnakeCaseDeep(obj: unknown): unknown; export interface ExecutionObserverOptions { /** Direct JWT token (sent as Bearer in Authorization header). */ token?: string; /** API key — exchanged for a JWT via POST {baseUrl}/token. Takes precedence over token. */ apiKey?: string; /** Request timeout in ms (default: 30000). */ timeout?: number; /** Custom headers merged into every request. */ headers?: Record; } export declare class HttpExecutionObserver implements ExecutionObserver { #private; readonly baseUrl: string; constructor(baseUrl: string, options?: ExecutionObserverOptions); createNodeExecution(executionId: string, data: Record): Promise<{ id: string; }>; updateNodeExecution(executionId: string, nodeExecutionId: string, data: Record): Promise; updateExecution(executionId: string, data: Record): Promise; fetchPendingExecutions(filters: { workflowId?: string; engineType?: string; limit?: number; }): Promise>; ensureNodeSpec(data: { name: string; package: { name: string; version: string; }; description?: string | null; input?: unknown; output?: unknown; connectionConstraints?: unknown; defaultRetryPolicy?: unknown; defaultTimeoutPolicy?: unknown; }): Promise<{ id: string; versionId?: string; }>; findNodeSpecVersionId(name: string): Promise; syncGraph(workflowId: string, nodes: Array<{ key: string; specName: string; input?: unknown; }>, edges: Array<{ from: string; fromOutput: string; to: string; }>, specVersionMap: Map): Promise; createExecution(data: { workflowId: string; workflowVersionId: string; executionId?: string; input?: unknown; engineType?: string; source?: string; }): Promise<{ id: string; }>; ensureWorkflow(data: { name: string; type?: 'graph' | 'code'; description?: string | null; defaultRetryPolicy?: unknown; defaultTimeoutPolicy?: unknown; }): Promise<{ id: string; versionId?: string; }>; } //# sourceMappingURL=execution-observer.d.ts.map