import type { Span } from '#compiled/@opentelemetry/api/index.js'; import { type WorkflowRun, type World } from '#compiled/@workflow/world/index.js'; import type { StepInvocationQueueItem, WorkflowSuspension } from '../global.js'; export interface SuspensionHandlerParams { suspension: WorkflowSuspension; world: World; run: WorkflowRun; span?: Span; requestId?: string; } /** * Result of handling a suspension. Returns pending step items so the caller * can decide which to execute inline vs queue to background. */ export interface SuspensionHandlerResult { /** Pending step items with events created but NOT queued */ pendingSteps: StepInvocationQueueItem[]; /** * Correlation IDs for which this suspension call actually wrote the * step_created event (as opposed to catching EntityConflictError because * a concurrent handler wrote it first). Only the handler that wrote the * step_created event should queue / inline-execute the step — this * guarantees a single owner per step, even when multiple handlers race * into the same batch boundary. */ createdStepCorrelationIds: Set; /** * The soonest pending wait, if any: seconds until it elapses and the * correlationId of the wait that produced that timeout. The * correlationId seeds the idempotency key for the wait-continuation * queue message so that repeated suspension passes over the same * pending wait collapse into a single delayed continuation. */ waitTimeout?: { seconds: number; correlationId: string; }; /** Whether a hook conflict was detected (should re-invoke immediately) */ hasHookConflict: boolean; /** Whether a `hook.getConflict()` awaiter needs the workflow to continue immediately */ hasAwaitedHookCreation: boolean; /** Whether native workflow attribute events were written for replay. */ hasAttributeEvents: boolean; } /** * Handles a workflow suspension by processing all pending operations (hooks, steps, waits). * Creates events for all operations but does NOT queue step messages — returns the pending * steps so the caller can decide which to execute inline vs queue to background. * * Processing order: * 1. Hooks are processed first to prevent race conditions with webhook receivers * 2. Step events and wait events are created in parallel */ export declare function handleSuspension({ suspension, world, run, span, requestId, }: SuspensionHandlerParams): Promise; //# sourceMappingURL=suspension-handler.d.ts.map