@usehelical/workflows 0.0.1-alpha.13 → 0.0.1-alpha.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-SQ7WUJCB.js → chunk-2CPBPIZ7.js} +75 -3
- package/dist/chunk-2CPBPIZ7.js.map +1 -0
- package/dist/index.d.ts +1 -9
- package/dist/index.js +2 -76
- package/dist/index.js.map +1 -1
- package/dist/{run-oOlOK2Rg.d.ts → run-BCTOgHFp.d.ts} +10 -1
- package/dist/workflows.d.ts +11 -3
- package/dist/workflows.js +109 -13
- package/dist/workflows.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-SQ7WUJCB.js.map +0 -1
package/dist/workflows.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../core/message.ts","../core/queue.ts","../core/state.ts","../core/workflow.ts","../core/steps/run-step.ts","../core/internal/repository/insert-state.ts","../core/steps/set-state.ts","../core/internal/repository/read-and-delete-message.ts","../core/internal/with-durable-deadline.ts","../core/steps/receive-message.ts","../core/steps/helpers/get-step-id.ts","../core/steps/helpers/get-abort-signal.ts","../core/steps/helpers/get-run-id.ts","../core/steps/sleep.ts","../core/steps/random-uuid.ts","../core/steps/run-workflow.ts"],"names":["sleep","newRun","crypto"],"mappings":"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","file":"workflows.js","sourcesContent":["export type MessageDefinition<T> = {\n name: string;\n data?: T;\n};\n\nexport function defineMessage<T>(name: string): MessageDefinition<T> {\n return { name } as MessageDefinition<T>;\n}\n","export type QueueRateLimit = {\n limitPerPeriod: number;\n period: number;\n};\n\nexport type QueueOptions = {\n workerConcurrency?: number;\n concurrency?: number;\n rateLimit?: QueueRateLimit;\n priorityEnabled?: boolean;\n partitioningEnabled?: boolean;\n name?: string;\n};\n\nexport function defineQueue(options: QueueOptions = {}): QueueEntry {\n return () => options;\n}\n\nexport type QueueEntry = () => QueueOptions;\n\nexport type QueueDefinition = QueueOptions & { name: string };\n","export interface StateDefinition<T> {\n name: string;\n data?: T;\n}\n\nexport function defineState<T>(name: string) {\n return {\n name,\n } as StateDefinition<T>;\n}\n","export type RunStatus =\n | 'pending'\n | 'queued'\n | 'success'\n | 'error'\n | 'cancelled'\n | 'max_recovery_attempts_exceeded';\n\nexport type WorkflowFunction<Args extends unknown[], R> = (...args: Args) => Promise<R> | R;\n\nexport type WorkflowDefinition<TArgs extends unknown[] = unknown[], TReturn = unknown> = {\n fn: WorkflowFunction<TArgs, TReturn>;\n maxRecoveryAttempts?: number;\n};\n\nexport function defineWorkflow<TArgs extends unknown[], TReturn>(\n fn: WorkflowFunction<TArgs, TReturn>,\n options: {\n maxRecoveryAttempts?: number;\n } = {},\n): () => WorkflowDefinition<TArgs, TReturn> {\n return () => {\n return {\n fn,\n maxRecoveryAttempts: options.maxRecoveryAttempts,\n };\n };\n}\n\nexport type WorkflowEntry<\n TArgs extends unknown[] = unknown[],\n TReturn = unknown,\n> = () => WorkflowDefinition<TArgs, TReturn>;\n","import {\n ErrorThatShouldNeverHappen,\n FatalError,\n MaxRetriesExceededError,\n} from '../internal/errors';\nimport { getExecutionContext } from '../internal/execution-context';\nimport { sleep } from '../internal/utils/sleep';\nimport {\n executeAndRecordOperation,\n returnOrThrowOperationResult,\n} from '../internal/operation-manager';\n\nexport type RetryConfig = {\n maxRetries?: number;\n retryDelay?: number;\n backOffRate?: number;\n};\n\ntype RunStepOptions = RetryConfig & {\n name?: string;\n};\n\nexport async function runStep<TReturn>(\n stepFn: () => Promise<TReturn>,\n options: RunStepOptions = {},\n) {\n const { maxRetries, retryDelay, backOffRate } = options;\n const { operationManager } = getExecutionContext();\n const stepName = options.name || stepFn.name || '<unknown>';\n\n const op = operationManager.getOperationResult();\n if (op) {\n return returnOrThrowOperationResult<TReturn>(op);\n }\n return await executeAndRecordOperation(operationManager, stepName, async () => {\n return await executeStepWithRetries(stepName, stepFn, { maxRetries, retryDelay, backOffRate });\n });\n}\n\nexport async function executeStepWithRetries<TReturn>(\n stepName: string,\n fn: () => Promise<TReturn>,\n retryConfig: RetryConfig,\n): Promise<TReturn> {\n const maxRetries = retryConfig.maxRetries ?? 0;\n const retryDelay = retryConfig.retryDelay ?? 0;\n const backOffRate = retryConfig.backOffRate ?? 1;\n\n const attemptErrors: Error[] = [];\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await fn();\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n attemptErrors.push(err);\n if (err instanceof FatalError) {\n throw err;\n }\n if (maxRetries === 0) {\n throw err;\n }\n if (attempt >= maxRetries) {\n throw new MaxRetriesExceededError(stepName, maxRetries, attemptErrors);\n }\n const delay = retryDelay * Math.pow(backOffRate, attempt);\n await sleep(delay);\n }\n }\n throw new ErrorThatShouldNeverHappen(`Step \"${stepName}\" should never be reached`);\n}\n","import { Database, Transaction } from '../db/db';\n\ntype InsertStateOptions = {\n runId: string;\n key: string;\n value: string;\n sequenceId: number;\n};\n\nexport async function insertState(tx: Transaction | Database, options: InsertStateOptions) {\n await tx\n .insertInto('state')\n .values({\n run_id: options.runId,\n key: options.key,\n value: options.value,\n })\n .onConflict((oc) =>\n oc.column('run_id').column('key').doUpdateSet({\n value: options.value,\n }),\n )\n .execute();\n\n await tx\n .insertInto('state_history')\n .values({\n run_id: options.runId,\n sequence_id: options.sequenceId,\n key: options.key,\n value: options.value,\n })\n .execute();\n}\n","import { withDbRetry } from '../internal/db/retry';\nimport { getExecutionContext } from '../internal/execution-context';\nimport { returnOrThrowOperationResult } from '../internal/operation-manager';\nimport { insertState } from '../internal/repository/insert-state';\nimport { serialize } from '../internal/serialization';\nimport { StateDefinition } from '../state';\n\nconst SET_STATE_OPERATION_NAME = 'workflow::state::set';\n\nexport async function setState<T = unknown>(state: StateDefinition<T> | string, value: T) {\n const stateKey = typeof state === 'string' ? state : state.name;\n const { operationManager, runId, db } = getExecutionContext();\n\n const op = operationManager.getOperationResult();\n if (op) {\n return returnOrThrowOperationResult<void>(op);\n }\n\n const seqId = operationManager.reserveSequenceId();\n\n await withDbRetry(async () => {\n return await db.transaction().execute(async (tx) => {\n await insertState(tx, { runId, key: stateKey, value: serialize(value), sequenceId: seqId });\n await operationManager.recordResult(SET_STATE_OPERATION_NAME, seqId, null, tx);\n });\n });\n}\n","import { sql } from 'kysely';\nimport { Transaction } from '../db/db';\n\ntype Message = {\n id: string;\n payload?: string;\n type?: string;\n};\n\nexport async function readAndDeleteMessage(\n tx: Transaction,\n runId: string,\n messageType?: string,\n): Promise<Message | undefined> {\n const results = await sql<Message>`\n DELETE FROM messages\n WHERE id IN (\n SELECT id FROM messages\n WHERE destination_run_id = ${runId}\n ${messageType !== undefined ? sql`AND type = ${messageType}` : sql``}\n ORDER BY created_at_epoch_ms ASC\n LIMIT 1\n )\n RETURNING id, payload, type\n `.execute(tx);\n\n const result = results.rows[0];\n\n return result\n ? {\n id: result.id,\n payload: result.payload ?? undefined,\n type: result.type ?? undefined,\n }\n : undefined;\n}\n","import { getExecutionContext } from './execution-context';\nimport { executeAndRecordOperation } from './operation-manager';\n\nexport async function withDurableDeadline<T>(\n timeoutMs: number | undefined,\n operationName: string,\n fn: (deadlineMs: number | undefined) => Promise<T>,\n): Promise<T> {\n if (!timeoutMs) {\n return await fn(undefined);\n }\n\n const { operationManager } = getExecutionContext();\n\n let deadlineMs: number;\n const op = operationManager.getOperationResult();\n if (op) {\n deadlineMs = Number(op.result);\n } else {\n deadlineMs = Date.now() + timeoutMs;\n await executeAndRecordOperation(operationManager, operationName, async () => {\n return deadlineMs;\n });\n }\n\n return await fn(deadlineMs);\n}\n","import { withDbRetry } from '../internal/db/retry';\nimport { TimeoutError } from '../internal/errors';\nimport { MessageEventBus } from '../internal/events/message-event-bus';\nimport { getExecutionContext } from '../internal/execution-context';\nimport { returnOrThrowOperationResult } from '../internal/operation-manager';\nimport { readAndDeleteMessage } from '../internal/repository/read-and-delete-message';\nimport { deserialize, serialize, serializeError } from '../internal/serialization';\nimport { withDurableDeadline } from '../internal/with-durable-deadline';\nimport { MessageDefinition } from '../message';\n\nconst RECEIVE_MESSAGE_OPERATION_NAME = 'workflow::message::receive';\n\nconst RECEIVE_MESSAGE_DURABLE_DEADLINE_OPERATION_NAME =\n 'workflow::message::receive::durable-deadline';\n\nclass MessageNotAvailableError extends Error {}\n\nexport type ReceiveMessageOptions = {\n timeout?: number;\n};\n\nexport async function receiveMessage<T>(\n message: MessageDefinition<T> | string,\n options?: ReceiveMessageOptions,\n): Promise<T> {\n const messageType = typeof message === 'string' ? message : message.name;\n return await withDurableDeadline(\n options?.timeout,\n RECEIVE_MESSAGE_DURABLE_DEADLINE_OPERATION_NAME,\n async (deadlineMs) => {\n return await receiveMessageWithDeadline(messageType, deadlineMs);\n },\n );\n}\n\nasync function receiveMessageWithDeadline<T>(\n messageType: string,\n deadlineMs: number | undefined,\n): Promise<T> {\n const { runId, operationManager, messageEventBus, db } = getExecutionContext();\n\n const op = operationManager.getOperationResult();\n if (op) {\n return returnOrThrowOperationResult<T>(op) as T;\n }\n\n const seqId = operationManager.reserveSequenceId();\n\n while (true) {\n // Check if timeout expired\n if (deadlineMs && Date.now() >= deadlineMs) {\n const error = new TimeoutError(`Timed out waiting for message \"${messageType}\"`);\n await operationManager.recordError(\n RECEIVE_MESSAGE_OPERATION_NAME,\n seqId,\n serializeError(error),\n );\n throw error;\n }\n\n try {\n return await withDbRetry(async () => {\n return await db.transaction().execute(async (tx) => {\n const msg = await readAndDeleteMessage(tx, runId, messageType);\n if (!msg) {\n throw new MessageNotAvailableError();\n }\n await operationManager.recordResult(\n RECEIVE_MESSAGE_OPERATION_NAME,\n seqId,\n serialize(msg.payload),\n tx,\n );\n return deserialize(msg.payload!) as T;\n });\n });\n } catch (error) {\n if (error instanceof MessageNotAvailableError) {\n const remainingMs = deadlineMs ? deadlineMs - Date.now() : undefined;\n await waitForMessageNotification(messageEventBus, runId, messageType, remainingMs);\n continue;\n }\n // Record and re-throw other errors\n await operationManager.recordError(\n RECEIVE_MESSAGE_OPERATION_NAME,\n seqId,\n serializeError(error as Error),\n );\n throw error;\n }\n }\n}\n\nasync function waitForMessageNotification(\n messageEventBus: MessageEventBus,\n runId: string,\n messageType: string,\n timeoutMs?: number,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n let timeoutId: NodeJS.Timeout | undefined;\n\n if (timeoutMs !== undefined) {\n if (timeoutMs <= 0) {\n reject(new TimeoutError('Timeout expired'));\n return;\n }\n\n timeoutId = setTimeout(() => {\n unsubscribe();\n reject(new TimeoutError('Timeout waiting for message notification'));\n }, timeoutMs);\n }\n\n const unsubscribe = messageEventBus.subscribe(runId, messageType, () => {\n if (timeoutId) clearTimeout(timeoutId);\n unsubscribe();\n resolve();\n });\n });\n}\n","import { getExecutionContext } from '../../internal/execution-context';\nimport { createHash } from 'node:crypto';\n\n/**\n * Generates a stable, unique step ID based on the current run ID and sequence ID.\n * This ID is deterministic and will remain the same across retries, making it\n * suitable for use as an idempotency key with third-party systems.\n *\n * The step ID is a SHA-256 hash of the run ID and sequence ID, formatted as a\n * hex string for easy use with external APIs.\n *\n * @returns A unique, stable identifier for the current step execution\n */\nexport function getStepId(): string {\n const ctx = getExecutionContext();\n const sequenceId = ctx.operationManager.getActiveSequenceId();\n\n if (sequenceId === null) {\n throw new Error('getStepId() can only be called from within a step function');\n }\n\n const hash = createHash('sha256');\n hash.update(`${ctx.runId}:${sequenceId}`);\n return hash.digest('hex');\n}\n","import { getExecutionContext } from '../../internal/execution-context';\n\nexport function getAbortSignal() {\n return getExecutionContext().abortSignal;\n}\n","import { getExecutionContext } from '../../internal/execution-context';\n\nexport function getRunId() {\n const { runId } = getExecutionContext();\n return runId;\n}\n","import { RunCancelledError } from '../internal/errors';\nimport { getExecutionContext } from '../internal/execution-context';\nimport { withDurableDeadline } from '../internal/with-durable-deadline';\n\nconst SLEEP_OPERATION_NAME = '_helical::sleep';\n\nexport async function sleep(ms: number) {\n const { abortSignal } = getExecutionContext();\n return await withDurableDeadline(ms, SLEEP_OPERATION_NAME, async (deadlineMs) => {\n const remainingMs = deadlineMs! - Date.now();\n try {\n await cancellableSleep(remainingMs, abortSignal);\n } catch {\n throw new RunCancelledError();\n }\n });\n}\n\nexport function cancellableSleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(new Error('Sleep aborted'));\n return;\n }\n\n const timeoutId = setTimeout(() => {\n cleanup();\n resolve();\n }, ms);\n\n const onAbort = () => {\n cleanup();\n reject(new Error('Sleep aborted'));\n };\n\n const cleanup = () => {\n clearTimeout(timeoutId);\n signal?.removeEventListener('abort', onAbort);\n };\n\n signal?.addEventListener('abort', onAbort);\n });\n}\n","import { getExecutionContext } from '../internal/execution-context';\nimport crypto from 'node:crypto';\nimport { executeAndRecordOperation } from '../internal/operation-manager';\n\nconst RANDOM_UUID_OPERATION_NAME = '_helical::randomUUID';\n\nexport async function randomUUID() {\n const { operationManager } = getExecutionContext();\n const existingResult = operationManager.getOperationResult();\n if (existingResult) {\n return existingResult.result as string;\n } else {\n return await executeAndRecordOperation(\n operationManager,\n RANDOM_UUID_OPERATION_NAME,\n async () => {\n return crypto.randomUUID();\n },\n );\n }\n}\n","import { createRunHandle } from '../../client/run';\nimport { RunWorkflowOptions } from '../../client/run-workflow';\nimport { withDbRetry } from '../internal/db/retry';\nimport { WorkflowNotFoundError } from '../../client/errors';\nimport { executeWorkflow } from '../internal/execute-workflow';\nimport { getExecutionContext } from '../internal/execution-context';\nimport { executeAndRecordOperation } from '../internal/operation-manager';\nimport { insertPendingRun } from '../internal/repository/insert-pending-run';\nimport { deserialize, deserializeError, serialize } from '../internal/serialization';\nimport { WorkflowEntry } from '../workflow';\nimport crypto from 'node:crypto';\n\ntype RunWorkflowOperationResult = {\n runId: string;\n runPath: string[];\n workflowName: string;\n};\n\nexport async function runWorkflow<TArgs extends unknown[], TReturn>(\n wf: WorkflowEntry<TArgs, TReturn> | string,\n args: TArgs = [] as unknown as TArgs,\n options: RunWorkflowOptions = {},\n) {\n const ctx = getExecutionContext();\n const { operationManager, runPath, workflowRegistry, db, executorId } = ctx;\n\n const workflow =\n typeof wf === 'string'\n ? workflowRegistry.getByName(wf)\n : workflowRegistry.getByWorkflowDefinition(wf);\n if (!workflow) {\n throw new WorkflowNotFoundError('Workflow not found');\n }\n\n const op = operationManager.getOperationResult();\n if (op) {\n if (op.error) {\n throw deserializeError(op.error);\n }\n const newRun = deserialize<RunWorkflowOperationResult>(op.result!);\n return createRunHandle<TReturn>(ctx, newRun.runId);\n }\n\n const newRun = await executeAndRecordOperation(operationManager, 'runWorkflow', async () => {\n const newRunId = options.id ?? crypto.randomUUID();\n const newRun: RunWorkflowOperationResult = {\n runId: newRunId,\n runPath: [...runPath, newRunId],\n workflowName: workflow.name,\n };\n withDbRetry(async () => {\n return await insertPendingRun(db, {\n ...newRun,\n path: newRun.runPath,\n inputs: serialize(args),\n executorId: executorId,\n });\n });\n return newRun;\n });\n\n await executeWorkflow(ctx, {\n runId: newRun.runId,\n runPath: newRun.runPath,\n workflowName: newRun.workflowName,\n fn: workflow.fn,\n args,\n options,\n });\n\n return createRunHandle<TReturn>(ctx, newRun.runId);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../core/message.ts","../core/queue.ts","../core/state.ts","../core/workflow.ts","../core/steps/run-step.ts","../core/internal/repository/insert-state.ts","../core/steps/set-state.ts","../core/internal/repository/read-and-delete-message.ts","../core/internal/with-durable-deadline.ts","../core/steps/receive-message.ts","../core/steps/helpers/get-step-id.ts","../core/steps/helpers/get-abort-signal.ts","../core/steps/helpers/get-run-id.ts","../core/steps/sleep.ts","../core/steps/random-uuid.ts","../core/steps/run-workflow.ts","../core/steps/send-message.ts","../core/steps/queue-workflow.ts","../core/steps/now.ts","../core/steps/get-state.ts"],"names":["sleep","crypto","newRun","newRunId","getState"],"mappings":"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","file":"workflows.js","sourcesContent":["export type MessageDefinition<T> = {\n name: string;\n data?: T;\n};\n\nexport function defineMessage<T>(name: string): MessageDefinition<T> {\n return { name } as MessageDefinition<T>;\n}\n","export type QueueRateLimit = {\n limitPerPeriod: number;\n period: number;\n};\n\nexport type QueueOptions = {\n workerConcurrency?: number;\n concurrency?: number;\n rateLimit?: QueueRateLimit;\n priorityEnabled?: boolean;\n partitioningEnabled?: boolean;\n name?: string;\n};\n\nexport function defineQueue(options: QueueOptions = {}): QueueEntry {\n return () => options;\n}\n\nexport type QueueEntry = () => QueueOptions;\n\nexport type QueueDefinition = QueueOptions & { name: string };\n","export interface StateDefinition<T> {\n name: string;\n data?: T;\n}\n\nexport function defineState<T>(name: string) {\n return {\n name,\n } as StateDefinition<T>;\n}\n","export type RunStatus =\n | 'pending'\n | 'queued'\n | 'success'\n | 'error'\n | 'cancelled'\n | 'max_recovery_attempts_exceeded';\n\nexport type WorkflowFunction<Args extends unknown[], R> = (...args: Args) => Promise<R> | R;\n\nexport type WorkflowDefinition<TArgs extends unknown[] = unknown[], TReturn = unknown> = {\n fn: WorkflowFunction<TArgs, TReturn>;\n maxRecoveryAttempts?: number;\n};\n\nexport function defineWorkflow<TArgs extends unknown[], TReturn>(\n fn: WorkflowFunction<TArgs, TReturn>,\n options: {\n maxRecoveryAttempts?: number;\n } = {},\n): () => WorkflowDefinition<TArgs, TReturn> {\n return () => {\n return {\n fn,\n maxRecoveryAttempts: options.maxRecoveryAttempts,\n };\n };\n}\n\nexport type WorkflowEntry<\n TArgs extends unknown[] = unknown[],\n TReturn = unknown,\n> = () => WorkflowDefinition<TArgs, TReturn>;\n","import {\n ErrorThatShouldNeverHappen,\n FatalError,\n MaxRetriesExceededError,\n} from '../internal/errors';\nimport { getExecutionContext } from '../internal/execution-context';\nimport { sleep } from '../internal/utils/sleep';\nimport {\n executeAndRecordOperation,\n returnOrThrowOperationResult,\n} from '../internal/operation-manager';\n\nexport type RetryConfig = {\n maxRetries?: number;\n retryDelay?: number;\n backOffRate?: number;\n};\n\ntype RunStepOptions = RetryConfig & {\n name?: string;\n};\n\nexport async function runStep<TReturn>(\n stepFn: () => Promise<TReturn>,\n options: RunStepOptions = {},\n) {\n const { maxRetries, retryDelay, backOffRate } = options;\n const { operationManager } = getExecutionContext();\n const stepName = options.name || stepFn.name || '<unknown>';\n\n const op = operationManager.getOperationResult();\n if (op) {\n return returnOrThrowOperationResult<TReturn>(op);\n }\n return await executeAndRecordOperation(operationManager, stepName, async () => {\n return await executeStepWithRetries(stepName, stepFn, { maxRetries, retryDelay, backOffRate });\n });\n}\n\nexport async function executeStepWithRetries<TReturn>(\n stepName: string,\n fn: () => Promise<TReturn>,\n retryConfig: RetryConfig,\n): Promise<TReturn> {\n const maxRetries = retryConfig.maxRetries ?? 0;\n const retryDelay = retryConfig.retryDelay ?? 0;\n const backOffRate = retryConfig.backOffRate ?? 1;\n\n const attemptErrors: Error[] = [];\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await fn();\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n attemptErrors.push(err);\n if (err instanceof FatalError) {\n throw err;\n }\n if (maxRetries === 0) {\n throw err;\n }\n if (attempt >= maxRetries) {\n throw new MaxRetriesExceededError(stepName, maxRetries, attemptErrors);\n }\n const delay = retryDelay * Math.pow(backOffRate, attempt);\n await sleep(delay);\n }\n }\n throw new ErrorThatShouldNeverHappen(`Step \"${stepName}\" should never be reached`);\n}\n","import { Database, Transaction } from '../db/db';\n\ntype InsertStateOptions = {\n runId: string;\n key: string;\n value: string;\n sequenceId: number;\n};\n\nexport async function insertState(tx: Transaction | Database, options: InsertStateOptions) {\n await tx\n .insertInto('state')\n .values({\n run_id: options.runId,\n key: options.key,\n value: options.value,\n })\n .onConflict((oc) =>\n oc.column('run_id').column('key').doUpdateSet({\n value: options.value,\n }),\n )\n .execute();\n\n await tx\n .insertInto('state_history')\n .values({\n run_id: options.runId,\n sequence_id: options.sequenceId,\n key: options.key,\n value: options.value,\n })\n .execute();\n}\n","import { withDbRetry } from '../internal/db/retry';\nimport { getExecutionContext } from '../internal/execution-context';\nimport { returnOrThrowOperationResult } from '../internal/operation-manager';\nimport { insertState } from '../internal/repository/insert-state';\nimport { serialize } from '../internal/serialization';\nimport { StateDefinition } from '../state';\n\nconst SET_STATE_OPERATION_NAME = 'workflow::state::set';\n\nexport async function setState<T = unknown>(state: StateDefinition<T> | string, value: T) {\n const stateKey = typeof state === 'string' ? state : state.name;\n const { operationManager, runId, db } = getExecutionContext();\n\n const op = operationManager.getOperationResult();\n if (op) {\n return returnOrThrowOperationResult<void>(op);\n }\n\n const seqId = operationManager.reserveSequenceId();\n\n await withDbRetry(async () => {\n return await db.transaction().execute(async (tx) => {\n await insertState(tx, { runId, key: stateKey, value: serialize(value), sequenceId: seqId });\n await operationManager.recordResult(SET_STATE_OPERATION_NAME, seqId, null, tx);\n });\n });\n}\n","import { sql } from 'kysely';\nimport { Transaction } from '../db/db';\n\ntype Message = {\n id: string;\n payload?: string;\n type?: string;\n};\n\nexport async function readAndDeleteMessage(\n tx: Transaction,\n runId: string,\n messageType?: string,\n): Promise<Message | undefined> {\n const results = await sql<Message>`\n DELETE FROM messages\n WHERE id IN (\n SELECT id FROM messages\n WHERE destination_run_id = ${runId}\n ${messageType !== undefined ? sql`AND type = ${messageType}` : sql``}\n ORDER BY created_at_epoch_ms ASC\n LIMIT 1\n )\n RETURNING id, payload, type\n `.execute(tx);\n\n const result = results.rows[0];\n\n return result\n ? {\n id: result.id,\n payload: result.payload ?? undefined,\n type: result.type ?? undefined,\n }\n : undefined;\n}\n","import { getExecutionContext } from './execution-context';\nimport { executeAndRecordOperation } from './operation-manager';\n\nexport async function withDurableDeadline<T>(\n timeoutMs: number | undefined,\n operationName: string,\n fn: (deadlineMs: number | undefined) => Promise<T>,\n): Promise<T> {\n if (!timeoutMs) {\n return await fn(undefined);\n }\n\n const { operationManager } = getExecutionContext();\n\n let deadlineMs: number;\n const op = operationManager.getOperationResult();\n if (op) {\n deadlineMs = Number(op.result);\n } else {\n deadlineMs = Date.now() + timeoutMs;\n await executeAndRecordOperation(operationManager, operationName, async () => {\n return deadlineMs;\n });\n }\n\n return await fn(deadlineMs);\n}\n","import { withDbRetry } from '../internal/db/retry';\nimport { TimeoutError } from '../internal/errors';\nimport { MessageEventBus } from '../internal/events/message-event-bus';\nimport { getExecutionContext } from '../internal/execution-context';\nimport { returnOrThrowOperationResult } from '../internal/operation-manager';\nimport { readAndDeleteMessage } from '../internal/repository/read-and-delete-message';\nimport { deserialize, serialize, serializeError } from '../internal/serialization';\nimport { withDurableDeadline } from '../internal/with-durable-deadline';\nimport { MessageDefinition } from '../message';\n\nconst RECEIVE_MESSAGE_OPERATION_NAME = 'workflow::message::receive';\n\nconst RECEIVE_MESSAGE_DURABLE_DEADLINE_OPERATION_NAME =\n 'workflow::message::receive::durable-deadline';\n\nclass MessageNotAvailableError extends Error {}\n\nexport type ReceiveMessageOptions = {\n timeout?: number;\n};\n\nexport async function receiveMessage<T>(\n message: MessageDefinition<T> | string,\n options?: ReceiveMessageOptions,\n): Promise<T> {\n const messageType = typeof message === 'string' ? message : message.name;\n return await withDurableDeadline(\n options?.timeout,\n RECEIVE_MESSAGE_DURABLE_DEADLINE_OPERATION_NAME,\n async (deadlineMs) => {\n return await receiveMessageWithDeadline(messageType, deadlineMs);\n },\n );\n}\n\nasync function receiveMessageWithDeadline<T>(\n messageType: string,\n deadlineMs: number | undefined,\n): Promise<T> {\n const { runId, operationManager, messageEventBus, db } = getExecutionContext();\n\n const op = operationManager.getOperationResult();\n if (op) {\n return returnOrThrowOperationResult<T>(op) as T;\n }\n\n const seqId = operationManager.reserveSequenceId();\n\n while (true) {\n // Check if timeout expired\n if (deadlineMs && Date.now() >= deadlineMs) {\n const error = new TimeoutError(`Timed out waiting for message \"${messageType}\"`);\n await operationManager.recordError(\n RECEIVE_MESSAGE_OPERATION_NAME,\n seqId,\n serializeError(error),\n );\n throw error;\n }\n\n try {\n return await withDbRetry(async () => {\n return await db.transaction().execute(async (tx) => {\n const msg = await readAndDeleteMessage(tx, runId, messageType);\n if (!msg) {\n throw new MessageNotAvailableError();\n }\n await operationManager.recordResult(\n RECEIVE_MESSAGE_OPERATION_NAME,\n seqId,\n serialize(msg.payload),\n tx,\n );\n return deserialize(msg.payload!) as T;\n });\n });\n } catch (error) {\n if (error instanceof MessageNotAvailableError) {\n const remainingMs = deadlineMs ? deadlineMs - Date.now() : undefined;\n await waitForMessageNotification(messageEventBus, runId, messageType, remainingMs);\n continue;\n }\n // Record and re-throw other errors\n await operationManager.recordError(\n RECEIVE_MESSAGE_OPERATION_NAME,\n seqId,\n serializeError(error as Error),\n );\n throw error;\n }\n }\n}\n\nasync function waitForMessageNotification(\n messageEventBus: MessageEventBus,\n runId: string,\n messageType: string,\n timeoutMs?: number,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n let timeoutId: NodeJS.Timeout | undefined;\n\n if (timeoutMs !== undefined) {\n if (timeoutMs <= 0) {\n reject(new TimeoutError('Timeout expired'));\n return;\n }\n\n timeoutId = setTimeout(() => {\n unsubscribe();\n reject(new TimeoutError('Timeout waiting for message notification'));\n }, timeoutMs);\n }\n\n const unsubscribe = messageEventBus.subscribe(runId, messageType, () => {\n if (timeoutId) clearTimeout(timeoutId);\n unsubscribe();\n resolve();\n });\n });\n}\n","import { getExecutionContext } from '../../internal/execution-context';\nimport { createHash } from 'node:crypto';\n\n/**\n * Generates a stable, unique step ID based on the current run ID and sequence ID.\n * This ID is deterministic and will remain the same across retries, making it\n * suitable for use as an idempotency key with third-party systems.\n *\n * The step ID is a SHA-256 hash of the run ID and sequence ID, formatted as a\n * hex string for easy use with external APIs.\n *\n * @returns A unique, stable identifier for the current step execution\n */\nexport function getStepId(): string {\n const ctx = getExecutionContext();\n const sequenceId = ctx.operationManager.getActiveSequenceId();\n\n if (sequenceId === null) {\n throw new Error('getStepId() can only be called from within a step function');\n }\n\n const hash = createHash('sha256');\n hash.update(`${ctx.runId}:${sequenceId}`);\n return hash.digest('hex');\n}\n","import { getExecutionContext } from '../../internal/execution-context';\n\nexport function getAbortSignal() {\n return getExecutionContext().abortSignal;\n}\n","import { getExecutionContext } from '../../internal/execution-context';\n\nexport function getRunId() {\n const { runId } = getExecutionContext();\n return runId;\n}\n","import { RunCancelledError } from '../internal/errors';\nimport { getExecutionContext } from '../internal/execution-context';\nimport { withDurableDeadline } from '../internal/with-durable-deadline';\n\nconst SLEEP_OPERATION_NAME = '_helical::sleep';\n\nexport async function sleep(ms: number) {\n const { abortSignal } = getExecutionContext();\n return await withDurableDeadline(ms, SLEEP_OPERATION_NAME, async (deadlineMs) => {\n const remainingMs = deadlineMs! - Date.now();\n try {\n await cancellableSleep(remainingMs, abortSignal);\n } catch {\n throw new RunCancelledError();\n }\n });\n}\n\nexport function cancellableSleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(new Error('Sleep aborted'));\n return;\n }\n\n const timeoutId = setTimeout(() => {\n cleanup();\n resolve();\n }, ms);\n\n const onAbort = () => {\n cleanup();\n reject(new Error('Sleep aborted'));\n };\n\n const cleanup = () => {\n clearTimeout(timeoutId);\n signal?.removeEventListener('abort', onAbort);\n };\n\n signal?.addEventListener('abort', onAbort);\n });\n}\n","import { getExecutionContext } from '../internal/execution-context';\nimport crypto from 'node:crypto';\nimport { executeAndRecordOperation } from '../internal/operation-manager';\n\nexport async function randomUUID() {\n const { operationManager } = getExecutionContext();\n const existingResult = operationManager.getOperationResult();\n if (existingResult) {\n return existingResult.result as string;\n } else {\n return await executeAndRecordOperation(operationManager, 'randomUUID', async () => {\n return crypto.randomUUID();\n });\n }\n}\n","import { createRunHandle } from '../../client/run';\nimport { RunWorkflowOptions } from '../../client/run-workflow';\nimport { withDbRetry } from '../internal/db/retry';\nimport { WorkflowNotFoundError } from '../../client/errors';\nimport { executeWorkflow } from '../internal/execute-workflow';\nimport { getExecutionContext } from '../internal/execution-context';\nimport { executeAndRecordOperation } from '../internal/operation-manager';\nimport { insertPendingRun } from '../internal/repository/insert-pending-run';\nimport { deserialize, deserializeError, serialize } from '../internal/serialization';\nimport { WorkflowEntry } from '../workflow';\nimport crypto from 'node:crypto';\n\ntype RunWorkflowOperationResult = {\n runId: string;\n runPath: string[];\n workflowName: string;\n};\n\nexport async function runWorkflow<TArgs extends unknown[], TReturn>(\n wf: WorkflowEntry<TArgs, TReturn> | string,\n args: TArgs = [] as unknown as TArgs,\n options: RunWorkflowOptions = {},\n) {\n const ctx = getExecutionContext();\n const { operationManager, runPath, workflowRegistry, db, executorId } = ctx;\n\n const workflow =\n typeof wf === 'string'\n ? workflowRegistry.getByName(wf)\n : workflowRegistry.getByWorkflowDefinition(wf);\n if (!workflow) {\n throw new WorkflowNotFoundError('Workflow not found');\n }\n\n const op = operationManager.getOperationResult();\n if (op) {\n if (op.error) {\n throw deserializeError(op.error);\n }\n const newRun = deserialize<RunWorkflowOperationResult>(op.result!);\n return createRunHandle<TReturn>(ctx, newRun.runId);\n }\n\n const newRun = await executeAndRecordOperation(operationManager, 'runWorkflow', async () => {\n const newRunId = options.id ?? crypto.randomUUID();\n const newRun: RunWorkflowOperationResult = {\n runId: newRunId,\n runPath: [...runPath, newRunId],\n workflowName: workflow.name,\n };\n withDbRetry(async () => {\n return await insertPendingRun(db, {\n ...newRun,\n path: newRun.runPath,\n inputs: serialize(args),\n executorId: executorId,\n });\n });\n return newRun;\n });\n\n await executeWorkflow(ctx, {\n runId: newRun.runId,\n runPath: newRun.runPath,\n workflowName: newRun.workflowName,\n fn: workflow.fn,\n args,\n options,\n });\n\n return createRunHandle<TReturn>(ctx, newRun.runId);\n}\n","import { Run } from '../../client/run';\nimport { getExecutionContext } from '../internal/execution-context';\nimport { returnOrThrowOperationResult } from '../internal/operation-manager';\nimport { serialize } from '../internal/serialization';\nimport { MessageDefinition } from '../message';\nimport { withDbRetry } from '../internal/db/retry';\nimport { insertMessage } from '../internal/repository/insert-message';\n\nconst SEND_MESSAGE_OPERATION_NAME = 'workflow::message::send';\n\nexport async function sendMessage<T>(target: Run | string, name: MessageDefinition<T>, data?: T) {\n const { operationManager, db } = getExecutionContext();\n\n const destinationWorkflowId = typeof target === 'string' ? target : target.id;\n const messageType = typeof name === 'string' ? name : name.name;\n\n const prevOp = operationManager.getOperationResult();\n if (prevOp) {\n return returnOrThrowOperationResult(prevOp);\n }\n\n const seqId = operationManager.reserveSequenceId();\n\n const serializedData = serialize(data);\n\n await withDbRetry(async () => {\n return await db.transaction().execute(async (tx) => {\n await insertMessage(tx, { destinationWorkflowId, messageType, data: serializedData });\n await operationManager.recordResult(SEND_MESSAGE_OPERATION_NAME, seqId, null, tx);\n });\n });\n}\n","import { QueueNotFoundError, WorkflowNotFoundError } from '../../client/errors';\nimport { QueueWorkflowOptions } from '../../client/queue-workflow';\nimport { createRunHandle } from '../../client/run';\nimport { getExecutionContext } from '../internal/execution-context';\nimport { executeAndRecordOperation } from '../internal/operation-manager';\nimport { enqueueRun } from '../internal/repository/enqueue-run';\nimport { deserialize, deserializeError, serialize } from '../internal/serialization';\nimport { QueueEntry } from '../queue';\nimport { WorkflowEntry } from '../workflow';\n\nexport async function queueWorkflow<TArgs extends unknown[], TReturn>(\n queue: QueueEntry | string,\n wf: WorkflowEntry<TArgs, TReturn> | string,\n args?: TArgs,\n options?: QueueWorkflowOptions,\n) {\n const ctx = getExecutionContext();\n const { db, operationManager, queueRegistry, workflowRegistry, runPath, executorId } = ctx;\n\n const workflowName =\n typeof wf === 'string' ? wf : workflowRegistry.getByWorkflowDefinition(wf)?.name;\n if (!workflowName) {\n throw new WorkflowNotFoundError('Workflow name not specified');\n }\n\n const queueName = typeof queue === 'string' ? queue : queueRegistry.getByQueueEntry(queue)?.name;\n if (!queueName) {\n throw new QueueNotFoundError('Queue name not specified');\n }\n\n const op = operationManager.getOperationResult();\n if (op) {\n if (op.error) {\n throw deserializeError(op.error);\n }\n const newRunId = deserialize<string>(op.result!);\n return createRunHandle<TReturn>(ctx, newRunId);\n }\n\n const newRunId = await executeAndRecordOperation(operationManager, 'queueWorkflow', async () => {\n const newRunId = options?.id ?? crypto.randomUUID();\n const { runId } = await enqueueRun(db, {\n runId: newRunId,\n path: [...runPath, newRunId],\n inputs: serialize(args),\n executorId: executorId,\n workflowName: workflowName,\n queueName: queueName,\n timeout: options?.timeout,\n deadline: options?.deadline,\n });\n return runId;\n });\n\n return createRunHandle<TReturn>(ctx, newRunId!);\n}\n","import { getExecutionContext } from '../internal/execution-context';\nimport { executeAndRecordOperation } from '../internal/operation-manager';\n\nexport async function now() {\n const { operationManager } = getExecutionContext();\n const op = operationManager.getOperationResult();\n if (op) {\n return Number(op.result);\n } else {\n return await executeAndRecordOperation(operationManager, 'now', async () => {\n return Date.now();\n });\n }\n}\n","import { Run } from '../../client/run';\nimport { StateDefinition } from '../state';\nimport { getState as getStateFromDb } from '../internal/repository/get-state';\nimport { getExecutionContext } from '../internal/execution-context';\nimport { returnOrThrowOperationResult } from '../internal/operation-manager';\nimport { deserialize, serializeError } from '../internal/serialization';\nimport { StateNotAvailableError, waitForStateNotification } from '../../client/get-state';\nimport { withDbRetry } from '../internal/db/retry';\n\nexport async function getState<T = unknown>(\n target: Run | string,\n key: StateDefinition<T> | string,\n): Promise<T> {\n const { operationManager, db, stateEventBus } = getExecutionContext();\n\n const stateKey = typeof key === 'string' ? key : key.name;\n const targetId = typeof target === 'string' ? target : target.id;\n\n const op = operationManager.getOperationResult();\n if (op) {\n return returnOrThrowOperationResult<T>(op) as T;\n }\n\n const seqId = operationManager.reserveSequenceId();\n\n while (true) {\n try {\n return await withDbRetry(async () => {\n const state = await getStateFromDb(db, targetId, stateKey);\n if (!state) {\n throw new StateNotAvailableError();\n }\n await operationManager.recordResult('getState', seqId, state);\n return deserialize(state) as T;\n });\n } catch (error) {\n if (error instanceof StateNotAvailableError) {\n await waitForStateNotification(stateEventBus, targetId, stateKey);\n continue;\n }\n await operationManager.recordError('getState', seqId, serializeError(error as Error));\n throw error;\n }\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../client/errors.ts","../core/internal/errors.ts","../core/internal/serialization.ts","../core/internal/utils/sleep.ts","../core/internal/db/retry.ts","../core/internal/execution-context.ts","../core/internal/repository/get-run.ts","../core/internal/repository/insert-operation.ts","../core/internal/operation-manager.ts","../client/utils.ts","../core/internal/repository/record-run-result.ts","../core/internal/repository/cancel-run.ts","../core/internal/execute-workflow.ts","../core/internal/repository/get-run-status.ts","../client/get-run-status.ts","../client/wait-for-run-result.ts","../client/run.ts","../core/internal/repository/insert-pending-run.ts"],"names":["TimeoutError","_serializeError","error","_deserializeError","sql","getRunStatus"],"mappings":"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","file":"chunk-SQ7WUJCB.js","sourcesContent":["export class TimeoutError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'timeout';\n }\n}\n\nexport class MaxRecoveryAttemptsExceededError extends Error {\n constructor(runId: string, maxAttempts: number) {\n super(`Max recovery attempts exceeded for run \"${runId}\" after ${maxAttempts + 1} attempts`);\n this.name = 'max_recovery_attempts_exceeded';\n }\n}\n\nexport class WorkflowNotFoundError extends Error {\n constructor(workflowName: string) {\n super(`Workflow \"${workflowName}\" not found`);\n this.name = 'workflow_not_found';\n }\n}\n\nexport class QueueNotFoundError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'queue_not_found';\n }\n}\n","export enum ErrorType {\n INVALID_WORKFLOW_TRANSITION = 'INVALID_WORKFLOW_TRANSITION',\n RUN_CANCELLED = 'RUN_CANCELLED',\n RUN_NOT_FOUND = 'RUN_NOT_FOUND',\n RUN_OUTSIDE_OF_WORKFLOW = 'RUN_OUTSIDE_OF_WORKFLOW',\n FATAL_ERROR = 'FATAL_ERROR',\n NO_MESSAGE_AVAILABLE = 'NO_MESSAGE_AVAILABLE',\n MAX_RETRIES_EXCEEDED = 'MAX_RETRIES_EXCEEDED',\n ERROR_THAT_SHOULD_NEVER_HAPPEN = 'ERROR_THAT_SHOULD_NEVER_HAPPEN',\n SERIALIZATION_ERROR = 'SERIALIZATION_ERROR',\n MAX_RECOVERY_ATTEMPTS_EXCEEDED = 'MAX_RECOVERY_ATTEMPTS_EXCEEDED',\n WORKFLOW_NOT_FOUND = 'WORKFLOW_NOT_FOUND',\n TIMEOUT = 'TIMEOUT',\n CANCEL = 'CANCEL',\n DEADLINE = 'DEADLINE',\n RUN_NOT_CANCELLABLE = 'RUN_NOT_CANCELLABLE',\n QUEUE_NOT_FOUND = 'QUEUE_NOT_FOUND',\n}\n\nexport class InvalidWorkflowTransitionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = ErrorType.INVALID_WORKFLOW_TRANSITION;\n }\n}\n\nexport class RunCancelledError extends Error {\n constructor() {\n super('This workflow run has been cancelled');\n this.name = ErrorType.RUN_CANCELLED;\n }\n}\n\nexport class RunNotFoundError extends Error {\n constructor(runId: string) {\n super(`Workflow run \"${runId}\" not found`);\n this.name = ErrorType.RUN_NOT_FOUND;\n }\n}\n\nexport class RunOutsideOfWorkflowError extends Error {\n constructor() {\n super('This function must be called within a workflow');\n this.name = ErrorType.RUN_OUTSIDE_OF_WORKFLOW;\n }\n}\n\nexport class FatalError extends Error {\n constructor(message: string) {\n super(message);\n this.name = ErrorType.FATAL_ERROR;\n }\n}\n\nexport class MaxRetriesExceededError extends Error {\n readonly attemptErrors: Error[];\n readonly stepName: string;\n readonly maxAttempts: number;\n\n constructor(stepName: string, maxAttempts: number, errors: Error[]) {\n const formattedErrors = errors\n .map((error, index) => `Attempt ${index + 1}: ${error.message}`)\n .join('. ');\n\n super(`Step \"${stepName}\" failed after ${maxAttempts + 1} attempts. ${formattedErrors}`);\n\n this.name = ErrorType.MAX_RETRIES_EXCEEDED;\n this.attemptErrors = errors;\n this.stepName = stepName;\n this.maxAttempts = maxAttempts;\n }\n}\n\nexport class ErrorThatShouldNeverHappen extends Error {\n constructor(message: string) {\n super(message);\n this.name = ErrorType.ERROR_THAT_SHOULD_NEVER_HAPPEN;\n }\n}\n\nexport class MessageNotAvailableError extends Error {\n constructor() {\n super('Message not available');\n this.name = ErrorType.NO_MESSAGE_AVAILABLE;\n }\n}\n\nexport class SerializationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = ErrorType.SERIALIZATION_ERROR;\n }\n}\n\nexport class TimeoutError extends Error {\n constructor(message: string) {\n super(message);\n this.name = ErrorType.TIMEOUT;\n }\n}\n\nexport class DeadlineError extends Error {\n constructor(message: string) {\n super(message);\n this.name = ErrorType.DEADLINE;\n }\n}\n\nexport class CancelError extends Error {\n constructor(message: string) {\n super(message);\n this.name = ErrorType.CANCEL;\n }\n}\n\nexport class RunNotCancellableError extends Error {\n constructor(message: string) {\n super(message);\n this.name = ErrorType.RUN_NOT_CANCELLABLE;\n this.message = message;\n }\n}\n","import { SerializationError } from './errors';\nimport {\n serializeError as _serializeError,\n deserializeError as _deserializeError,\n} from 'serialize-error';\n\n/**\n * Serializes a value into a JSON string.\n */\nexport function serialize<T>(value: T): string {\n try {\n return JSON.stringify(value);\n } catch (error) {\n throw new SerializationError((error as Error).message);\n }\n}\n\n/**\n * Deserializes a JSON string into a value.\n */\nexport function deserialize<T>(value: string): T {\n try {\n return JSON.parse(value);\n } catch (error) {\n throw new SerializationError((error as Error).message);\n }\n}\n\n/**\n * Serializes an error object, preserving stack trace, message, name, and custom properties\n */\nexport function serializeError(error: Error): string {\n try {\n return JSON.stringify(_serializeError(error));\n } catch (error) {\n throw new SerializationError((error as Error).message);\n }\n}\n\n/**\n * Deserializes an error object, reconstructing it with stack trace and properties\n */\nexport function deserializeError(serialized: string): Error {\n try {\n return _deserializeError(JSON.parse(serialized));\n } catch (error) {\n throw new SerializationError((error as Error).message);\n }\n}\n","export function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import { sleep } from '../utils/sleep';\n\n// Error detection helpers\ntype AnyErr = {\n code?: string;\n errno?: number;\n message?: string;\n stack?: string;\n cause?: unknown;\n};\n\n// PostgreSQL SQLSTATE error classes that are safe to retry\n// https://www.postgresql.org/docs/current/errcodes-appendix.html\nconst RETRY_SQLSTATE_PREFIXES = new Set([\n '08', // Connection Exception\n '40', // Transaction Rollback (deadlock_detected, serialization_failure)\n '53', // Insufficient Resources\n '55', // Object Not In Prerequisite State (lock_not_available)\n '57', // Operator Intervention (admin_shutdown, cannot_connect_now)\n]);\n\nconst RETRY_SQLSTATE_CODES = new Set([\n '40003', // statement_completion_unknown\n '40001', // serialization_failure\n '40P01', // deadlock_detected\n '55P03', // lock_not_available\n]);\n\n// Node.js transient network error codes\nconst RETRY_NODE_ERRNOS = new Set([\n 'ECONNRESET',\n 'ECONNREFUSED',\n 'EHOSTUNREACH',\n 'ENETUNREACH',\n 'ETIMEDOUT',\n 'ECONNABORTED',\n 'EPIPE',\n]);\n\nfunction isPgDatabaseError(e: AnyErr): boolean {\n return !!e && typeof e === 'object' && typeof e.code === 'string' && e.code.length === 5;\n}\n\nfunction sqlStateLooksRetryable(sqlstate: string | undefined): boolean {\n if (!sqlstate) return false;\n if (RETRY_SQLSTATE_CODES.has(sqlstate)) return true;\n const prefix = sqlstate.toString().slice(0, 2);\n return RETRY_SQLSTATE_PREFIXES.has(prefix);\n}\n\nfunction nodeErrnoLooksRetryable(e: AnyErr): boolean {\n const code = e.code;\n return !!code && RETRY_NODE_ERRNOS.has(code);\n}\n\nfunction messageLooksRetryable(msg: string): boolean {\n const m = msg.toLowerCase();\n return (\n msg.includes('ECONNREFUSED') ||\n msg.includes('ECONNRESET') ||\n m.includes('connection timeout') ||\n m.includes('server closed the connection') ||\n m.includes('connection terminated unexpectedly') ||\n m.includes('client has encountered a connection error') ||\n m.includes('timeout exceeded when trying to connect') ||\n m.includes('could not connect to server') ||\n m.includes('connection pool exhausted') ||\n m.includes('too many clients')\n );\n}\n\nfunction* unwrapErrors(e: unknown): Generator<unknown, void, void> {\n const queue: unknown[] = [e];\n const seen = new Set<unknown>();\n\n while (queue.length) {\n const cur = queue.shift()!;\n if (cur && typeof cur === 'object') {\n if (seen.has(cur)) continue;\n seen.add(cur);\n\n // AggregateError\n const ae = cur as { errors?: unknown[] };\n if (Array.isArray(ae.errors)) queue.push(...ae.errors);\n\n // Error cause chain\n const withCause = cur as { cause?: unknown };\n if (withCause.cause) queue.push(withCause.cause);\n\n // Wrapped errors\n const wrapped = cur as { error?: unknown };\n if (wrapped.error) queue.push(wrapped.error);\n }\n yield cur;\n }\n}\n\nfunction isRetriableDBError(err: unknown): boolean {\n for (const e of unwrapErrors(err)) {\n const anyErr = e as AnyErr;\n\n // Check PostgreSQL SQLSTATE codes\n if (isPgDatabaseError(anyErr) && sqlStateLooksRetryable(anyErr.code)) {\n return true;\n }\n\n // Check Node.js system errors\n if (nodeErrnoLooksRetryable(anyErr)) {\n return true;\n }\n\n // Check error messages\n if (e instanceof Error) {\n if (e.stack && messageLooksRetryable(e.stack)) return true;\n if (e.message && messageLooksRetryable(e.message)) return true;\n }\n if (messageLooksRetryable(String(e))) return true;\n }\n return false;\n}\n\n/**\n * Retry a function if it throws a retriable database error.\n * @param fn - The function to retry.\n * @param options - The options for the retry.\n * @param options.initialBackoffMs - The initial backoff time in milliseconds. Defaults to 1000.\n * @param options.maxBackoffMs - The maximum backoff time in milliseconds. Defaults to 60000.\n * @param options.onRetry - The callback to call when a retry is needed.\n * @returns The result of the function.\n */\nexport async function withDbRetry<T>(\n fn: () => Promise<T>,\n options: {\n initialBackoffMs?: number;\n maxBackoffMs?: number;\n onRetry?: (error: unknown, attempt: number, delayMs: number) => void;\n } = {},\n): Promise<T> {\n const { initialBackoffMs = 1000, maxBackoffMs = 60000, onRetry } = options;\n\n let attempt = 0;\n let backoffMs = initialBackoffMs;\n\n while (true) {\n try {\n return await fn();\n } catch (error) {\n if (!isRetriableDBError(error)) {\n // Not a retriable error - throw immediately\n throw error;\n }\n\n attempt++;\n\n // Calculate backoff with jitter (0.5x to 1.5x)\n const jitter = 0.5 + Math.random();\n const delayMs = Math.min(backoffMs * jitter, maxBackoffMs);\n\n // Log/callback\n if (onRetry) {\n onRetry(error, attempt, delayMs);\n } else {\n console.warn(\n `Database connection failed: ${error instanceof Error ? error.message : String(error)}. ` +\n `Retrying in ${(delayMs / 1000).toFixed(2)}s (attempt ${attempt})`,\n );\n }\n\n // Wait before retrying\n await sleep(delayMs);\n\n // Increase backoff for next attempt (exponential)\n backoffMs = Math.min(backoffMs * 2, maxBackoffMs);\n }\n }\n}\n","import { MessageEventBus } from './events/message-event-bus';\nimport { OperationManager } from './operation-manager';\nimport { StateEventBus } from './events/state-event-bus';\nimport { RunOutsideOfWorkflowError } from './errors';\nimport { Database } from './db/db';\nimport { AsyncLocalStorage } from 'node:async_hooks';\nimport { WorkflowRegistry } from './workflow-registry';\nimport { RunEventBus } from './events/run-event-bus';\nimport { RunRegistry } from './run-registry';\nimport { QueueRegistry } from './queue-registry';\n\nexport interface ExecutionContext {\n runId: string;\n runPath: string[];\n executorId: string;\n abortSignal: AbortSignal;\n parentWorkflow?: ExecutionContext;\n operationManager: OperationManager;\n messageEventBus: MessageEventBus;\n stateEventBus: StateEventBus;\n workflowRegistry: WorkflowRegistry;\n runEventBus: RunEventBus;\n runRegistry: RunRegistry;\n queueRegistry: QueueRegistry;\n db: Database;\n}\n\nexport function getExecutionContext(): ExecutionContext {\n const store = asyncLocalStorage.getStore();\n if (!store) {\n throw new RunOutsideOfWorkflowError();\n }\n return store;\n}\n\nexport const asyncLocalStorage = new AsyncLocalStorage<ExecutionContext>();\n\nexport function runWithExecutionContext<TReturn>(\n store: ExecutionContext,\n callback: () => Promise<TReturn>,\n) {\n return asyncLocalStorage.run(store, callback);\n}\n","import { RunStatus } from '../../workflow';\nimport { Database } from '../db/db';\n\ninterface WorkflowResult {\n id: string;\n input?: string;\n output?: string;\n error?: string;\n status: RunStatus;\n queueName?: string;\n changeId: number;\n}\n\nexport async function getRun(db: Database, runId: string): Promise<WorkflowResult | undefined> {\n const result = await db\n .selectFrom('runs')\n .select(['id', 'inputs', 'output', 'error', 'status', 'change_id'])\n .where('id', '=', runId)\n .executeTakeFirst();\n\n if (!result) {\n return undefined;\n }\n\n return {\n id: result.id,\n input: result.inputs ?? undefined,\n output: result.output ?? undefined,\n error: result.error ?? undefined,\n status: result.status as RunStatus,\n changeId: result.change_id,\n };\n}\n","import { Database, Transaction } from '../db/db';\n\nexport async function insertOperation(\n tx: Transaction | Database,\n runId: string,\n operationName: string,\n sequenceId: number,\n result?: string,\n error?: string,\n) {\n await tx\n .insertInto('operations')\n .values({\n run_id: runId,\n name: operationName,\n sequence_id: sequenceId,\n output: result,\n error: error,\n })\n .execute();\n}\n","import { withDbRetry } from './db/retry';\nimport { deserialize, deserializeError, serialize, serializeError } from './serialization';\nimport { getExecutionContext } from './execution-context';\nimport { RunCancelledError } from './errors';\nimport { getRun } from './repository/get-run';\nimport { insertOperation } from './repository/insert-operation';\nimport { Database, Transaction } from './db/db';\n\nexport interface OperationResult {\n result?: string;\n error?: string;\n}\n\nexport class OperationManager {\n private sequenceId = 0;\n private lastReservedSequenceId: number | null = null;\n constructor(\n private readonly db: Database,\n private readonly runId: string,\n // operations are stored in reverse order so the most recent operation is at the beginning of the array\n private readonly operations: OperationResult[] = [],\n ) {}\n\n getOperationResult(): OperationResult | null {\n const operation = this.operations.pop() as OperationResult;\n if (operation) {\n this.sequenceId++;\n return operation;\n }\n return null;\n }\n\n reserveSequenceId() {\n const reserved = this.sequenceId++;\n this.lastReservedSequenceId = reserved;\n return reserved;\n }\n\n getCurrentSequenceId() {\n return this.sequenceId;\n }\n\n /**\n * Gets the sequence ID that was most recently reserved for the current operation.\n * This is the ID that will be (or was) recorded in the database for this operation.\n * Returns null if no sequence ID has been reserved yet.\n */\n getActiveSequenceId(): number | null {\n return this.lastReservedSequenceId;\n }\n\n async recordResult(\n operationName: string,\n sequenceId: number,\n result: string | null,\n tx?: Transaction,\n ) {\n if (tx) {\n await insertOperation(tx, this.runId, operationName, sequenceId, result ?? undefined);\n } else {\n await withDbRetry(async () => {\n await insertOperation(this.db, this.runId, operationName, sequenceId, result ?? undefined);\n });\n }\n }\n\n async recordError(\n operationName: string,\n sequenceId: number,\n error: string | null,\n tx?: Transaction,\n ) {\n if (tx) {\n await insertOperation(\n tx,\n this.runId,\n operationName,\n sequenceId,\n undefined,\n error ?? undefined,\n );\n } else {\n await withDbRetry(async () => {\n await insertOperation(\n this.db,\n this.runId,\n operationName,\n sequenceId,\n undefined,\n error ?? undefined,\n );\n });\n }\n }\n}\n\nexport function returnOrThrowOperationResult<T = void>(\n op: OperationResult,\n): T extends void ? void : T {\n if (op.error) {\n throw deserializeError(op.error);\n }\n\n if (op.result === null || op.result === undefined) {\n return undefined as T extends void ? void : T;\n }\n\n return deserialize(op.result) as T extends void ? void : T;\n}\n\nexport async function executeAndRecordOperation<T>(\n operationManager: OperationManager,\n operationName: string,\n callback: () => Promise<T>,\n): Promise<T> {\n const seqId = operationManager.reserveSequenceId();\n try {\n const result = await callback();\n const serializedResult = serialize(result);\n await checkCancellation();\n await operationManager.recordResult(operationName, seqId, serializedResult);\n return result;\n } catch (error) {\n if (error instanceof RunCancelledError) {\n throw error;\n }\n const err = error instanceof Error ? error : new Error(String(error));\n await operationManager.recordError(operationName, seqId, serializeError(err));\n throw error;\n }\n}\n\nasync function checkCancellation() {\n const { abortSignal, runId, db } = getExecutionContext();\n if (abortSignal.aborted) {\n throw new RunCancelledError();\n }\n const run = await withDbRetry(async () => getRun(db, runId));\n if (run?.status === 'cancelled') {\n throw new RunCancelledError();\n }\n}\n","import { OperationManager, OperationResult } from '../core/internal/operation-manager';\nimport { ExecutionContext } from '../core/internal/execution-context';\nimport { RuntimeContext } from '../core/internal/runtime-context';\n\ntype CreateExecutionContextParams = {\n ctx: RuntimeContext;\n abortSignal: AbortSignal;\n runId: string;\n runPath: string[];\n operations?: OperationResult[];\n};\n\nexport function createExecutionContext({\n ctx,\n abortSignal,\n runId,\n runPath,\n operations,\n}: CreateExecutionContextParams): ExecutionContext {\n return {\n runId: runId,\n runPath: runPath,\n executorId: ctx.executorId,\n abortSignal: abortSignal,\n operationManager: new OperationManager(ctx.db, runId, operations || []),\n messageEventBus: ctx.messageEventBus,\n stateEventBus: ctx.stateEventBus,\n workflowRegistry: ctx.workflowRegistry,\n runEventBus: ctx.runEventBus,\n runRegistry: ctx.runRegistry,\n queueRegistry: ctx.queueRegistry,\n db: ctx.db,\n };\n}\n","import { sql } from 'kysely';\nimport { Database } from '../db/db';\n\ntype RunResult = {\n result?: string;\n error?: string;\n};\n\nexport async function recordRunResult(db: Database, runId: string, result: RunResult) {\n const [{ change_id }] = await db\n .updateTable('runs')\n .set({\n output: result.result,\n error: result.error,\n status: result.error ? 'error' : 'success',\n updated_at: sql`(extract(epoch from now()) * 1000)::bigint`,\n })\n .where('id', '=', runId)\n .returning(['change_id'])\n .execute();\n return change_id;\n}\n","import { sql } from 'kysely';\nimport { Database } from '../db/db';\nimport { RunNotFoundError } from '../errors';\nimport { withDbRetry } from '../db/retry';\n\nexport async function cancelRun(runId: string, db: Database) {\n return withDbRetry(async () => {\n return db.transaction().execute(async (tx) => {\n const result = await tx\n .updateTable('runs')\n .set({\n status: 'cancelled',\n updated_at: sql`(extract(epoch from now()) * 1000)::bigint`,\n })\n .where((eb) =>\n eb.and([eb('id', '=', runId), eb('status', 'not in', ['cancelled', 'success', 'error'])]),\n )\n .returning(['change_id', 'path'])\n .executeTakeFirst();\n\n if (!result) {\n const exists = await tx\n .selectFrom('runs')\n .select([])\n .where('id', '=', runId)\n .executeTakeFirst();\n if (exists) {\n return undefined;\n }\n throw new RunNotFoundError(runId);\n }\n\n await sql`\n UPDATE runs\n SET \n status = ${'cancelled'},\n updated_at = (extract(epoch from now()) * 1000)::bigint\n WHERE path @> ARRAY[${runId}]::text[]\n AND id != ${runId}\n AND status NOT IN (${'cancelled'}, ${'success'}, ${'error'})\n `.execute(tx);\n\n return {\n path: result.path,\n };\n });\n });\n}\n","import { createExecutionContext } from '../../client/utils';\nimport { WorkflowFunction } from '../workflow';\nimport { OperationResult } from './operation-manager';\nimport { recordRunResult } from './repository/record-run-result';\nimport { serialize, serializeError } from './serialization';\nimport { RunWorkflowOptions } from '../../client/run-workflow';\nimport { cancelRun } from './repository/cancel-run';\nimport { DeadlineError, RunCancelledError } from './errors';\nimport { TimeoutError } from '../../client/errors';\nimport { getExecutionContext, runWithExecutionContext } from './execution-context';\nimport { RuntimeContext } from './runtime-context';\n\nexport type ExecuteWorkflowParams<TArgs extends unknown[] = unknown[], TReturn = unknown> = {\n runId: string;\n runPath: string[];\n workflowName: string;\n fn: WorkflowFunction<TArgs, TReturn>;\n args: TArgs;\n options?: RunWorkflowOptions;\n operations?: OperationResult[];\n};\n\nexport async function executeWorkflow<TArgs extends unknown[], TReturn>(\n ctx: RuntimeContext,\n params: ExecuteWorkflowParams<TArgs, TReturn>,\n): Promise<void> {\n const { db, runRegistry } = ctx;\n const { options, runId, runPath, fn, args, operations } = params;\n\n const abortController = new AbortController();\n const [deadline] = getDeadlineAndReason({\n timeout: options?.timeout,\n deadline: options?.deadline,\n });\n\n const runStore = createExecutionContext({\n ctx,\n abortSignal: AbortSignal.any(\n [abortController.signal].concat(deadline ? [AbortSignal.timeout(deadline - Date.now())] : []),\n ),\n runId,\n runPath,\n operations,\n });\n\n const executionPromise = (async () => {\n try {\n const result = await runWithExecutionContext(runStore, async () => {\n return await runWithTimeout(async () => {\n return await fn(...args);\n });\n });\n await recordRunResult(db, runId, { result: result ? serialize(result) : undefined });\n return result;\n } catch (error) {\n await recordRunResult(db, runId, { error: serializeError(error as Error) });\n throw error;\n } finally {\n runRegistry.unregisterRun(runId);\n }\n })();\n\n runRegistry.registerRun(runId, {\n store: runStore,\n promise: executionPromise,\n abortController: abortController,\n });\n}\n\nfunction getDeadlineAndReason({\n timeout,\n deadline,\n}: {\n timeout?: number;\n deadline?: number;\n}): [number | undefined, 'timeout' | 'deadline' | undefined] {\n const now = Date.now();\n const timeoutDeadline = timeout ? now + timeout : undefined;\n\n if (timeoutDeadline && deadline) {\n return [\n Math.min(timeoutDeadline, deadline),\n timeoutDeadline < deadline ? 'timeout' : 'deadline',\n ];\n } else if (timeoutDeadline) {\n return [timeoutDeadline, 'timeout'];\n } else if (deadline) {\n return [deadline, 'deadline'];\n }\n return [undefined, undefined];\n}\n\nexport async function runWithTimeout<T>(fn: () => Promise<T>): Promise<T> {\n const { runId, db, abortSignal } = getExecutionContext();\n\n const abortPromise = new Promise<T>((_, reject) => {\n abortSignal.throwIfAborted();\n abortSignal.addEventListener(\n 'abort',\n () => {\n if (abortSignal.reason?.name === 'TimeoutError') {\n reject(new TimeoutError(`Workflow timed out`));\n return;\n }\n reject(new RunCancelledError());\n },\n { once: true },\n );\n });\n\n const callPromise = fn();\n\n try {\n return await Promise.race([callPromise, abortPromise]);\n } catch (error) {\n if (error instanceof TimeoutError || error instanceof DeadlineError) {\n await cancelRun(runId, db);\n }\n await callPromise.catch(() => {});\n throw error;\n }\n}\n","import { RunStatus } from '../../workflow';\nimport { Database } from '../db/db';\nimport { RunNotFoundError } from '../errors';\n\nexport async function getRunStatus(db: Database, runId: string): Promise<RunStatus> {\n const run = await db\n .selectFrom('runs')\n .select('status')\n .where('id', '=', runId)\n .executeTakeFirst();\n if (!run) {\n throw new RunNotFoundError(runId);\n }\n return run.status as RunStatus;\n}\n","import { RunStatus } from '../core';\nimport { RunEntry } from '../core/internal/run-registry';\nimport { RuntimeContext } from '../core/internal/runtime-context';\nimport { getRunStatus as getRunStatusFromDb } from '../core/internal/repository/get-run-status';\n\nexport async function getRunStatus(ctx: RuntimeContext, runId: string): Promise<RunStatus> {\n const { db, runRegistry } = ctx;\n const run = runRegistry.getRun(runId);\n if (run) {\n return getRunStatusFromRegistry(run);\n }\n return getRunStatusFromDb(db, runId);\n}\n\nasync function getRunStatusFromRegistry(runEntry: RunEntry): Promise<RunStatus> {\n if (runEntry.store.abortSignal.aborted) {\n return 'cancelled';\n }\n const promiseState = runEntry.getPromiseState();\n if (promiseState === 'pending') {\n return 'pending';\n }\n if (promiseState === 'fulfilled') {\n return 'success';\n }\n return 'error';\n}\n","import { RunCancelledError, RunNotFoundError } from '../core/internal/errors';\nimport { getRun } from '../core/internal/repository/get-run';\nimport { RuntimeContext } from '../core/internal/runtime-context';\nimport { deserialize, deserializeError } from '../core/internal/serialization';\nimport { RunResult } from './run';\n\nexport async function waitForRunResult<TReturn>(\n ctx: RuntimeContext,\n runId: string,\n): Promise<RunResult<TReturn>> {\n const { db, runEventBus } = ctx;\n const run = await getRun(db, runId);\n if (!run) {\n return {\n error: new RunNotFoundError(runId),\n success: false,\n };\n }\n\n if (run.status === 'cancelled') {\n return {\n error: new RunCancelledError(),\n success: false,\n };\n }\n\n if (run.status === 'error') {\n return {\n error: run.error\n ? (deserializeError(run.error) as unknown as Error)\n : new Error('Unexptected error'),\n success: false,\n };\n }\n\n return new Promise<RunResult<TReturn>>((resolve, reject) => {\n const unsubscribe = runEventBus.subscribe(runId, '*', async (e) => {\n if (e.status === 'cancelled') {\n unsubscribe();\n resolve({\n error: new RunCancelledError(),\n success: false,\n });\n return;\n }\n if (e.status === 'success' || e.status === 'error') {\n unsubscribe();\n try {\n const completedRun = await getRun(db, runId);\n if (!completedRun) {\n reject(new RunNotFoundError(runId));\n return;\n }\n if (completedRun.status === 'error') {\n resolve({\n error: completedRun.error\n ? (deserializeError(completedRun.error) as unknown as Error)\n : new Error('error'),\n success: false,\n });\n return;\n }\n resolve({\n data: completedRun.output\n ? (deserialize(completedRun.output) as TReturn)\n : (undefined as TReturn),\n success: true,\n });\n } catch (error) {\n resolve({\n error: error as Error,\n success: false,\n });\n }\n }\n });\n });\n}\n","import { RuntimeContext } from '../core/internal/runtime-context';\nimport { RunStatus } from '../core';\nimport { getRunStatus } from './get-run-status';\nimport { waitForRunResult } from './wait-for-run-result';\n\nexport type RunResult<TReturn> =\n | { error: Error; success: false }\n | { data: TReturn; success: true };\n\nexport interface Run<TReturn = unknown> {\n id: string;\n getStatus: () => Promise<RunStatus>;\n waitForResult: () => Promise<RunResult<TReturn>>;\n}\n\nexport function createRunHandle<TReturn = unknown>(\n runtimeContext: RuntimeContext,\n id: string,\n): Run<TReturn> {\n return {\n id,\n getStatus: () => getRunStatus(runtimeContext, id),\n waitForResult: () => waitForRunResult<TReturn>(runtimeContext, id),\n };\n}\n","import { sql } from 'kysely';\nimport { Database, Transaction } from '../db/db';\n\nexport type InsertRunOptions = {\n runId: string;\n path: string[];\n inputs: string;\n executorId: string;\n workflowName: string;\n};\n\nexport async function insertPendingRun(db: Database | Transaction, options: InsertRunOptions) {\n const result = await db\n .insertInto('runs')\n .values({\n id: options.runId,\n path: options.path,\n inputs: options.inputs,\n executor_id: options.executorId,\n workflow_name: options.workflowName,\n status: 'pending',\n started_at_epoch_ms: sql`(extract(epoch from now()) * 1000)::bigint`,\n created_at: sql`(extract(epoch from now()) * 1000)::bigint`,\n updated_at: sql`(extract(epoch from now()) * 1000)::bigint`,\n })\n .returning(['id', 'path', 'change_id'])\n .executeTakeFirst();\n\n return {\n runId: result!.id,\n path: result!.path,\n changeId: result!.change_id,\n };\n}\n"]}
|