@rivetkit/workflow-engine 2.3.18 → 2.3.20
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/tsup/{chunk-32422MOM.cjs → chunk-AKCJVGJ7.cjs} +90 -28
- package/dist/tsup/chunk-AKCJVGJ7.cjs.map +1 -0
- package/dist/tsup/{chunk-TVRZA5O5.js → chunk-EGOPMLG2.js} +90 -28
- package/dist/tsup/chunk-EGOPMLG2.js.map +1 -0
- package/dist/tsup/index.cjs +2 -2
- package/dist/tsup/index.d.cts +31 -2
- package/dist/tsup/index.d.ts +31 -2
- package/dist/tsup/index.js +1 -1
- package/dist/tsup/testing.cjs +25 -25
- package/dist/tsup/testing.d.cts +1 -1
- package/dist/tsup/testing.d.ts +1 -1
- package/dist/tsup/testing.js +1 -1
- package/package.json +1 -1
- package/src/context.ts +15 -2
- package/src/driver.ts +39 -0
- package/src/index.ts +88 -22
- package/src/keys.ts +1 -0
- package/dist/tsup/chunk-32422MOM.cjs.map +0 -1
- package/dist/tsup/chunk-TVRZA5O5.js.map +0 -1
package/dist/tsup/index.cjs
CHANGED
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
|
|
46
|
-
var
|
|
46
|
+
var _chunkAKCJVGJ7cjs = require('./chunk-AKCJVGJ7.cjs');
|
|
47
47
|
|
|
48
48
|
|
|
49
49
|
|
|
@@ -89,5 +89,5 @@ var _chunk32422MOMcjs = require('./chunk-32422MOM.cjs');
|
|
|
89
89
|
|
|
90
90
|
|
|
91
91
|
|
|
92
|
-
exports.CancelledError =
|
|
92
|
+
exports.CancelledError = _chunkAKCJVGJ7cjs.CancelledError; exports.CriticalError = _chunkAKCJVGJ7cjs.CriticalError; exports.DEFAULT_LOOP_HISTORY_PRUNE_INTERVAL = _chunkAKCJVGJ7cjs.DEFAULT_LOOP_HISTORY_PRUNE_INTERVAL; exports.DEFAULT_MAX_RETRIES = _chunkAKCJVGJ7cjs.DEFAULT_MAX_RETRIES; exports.DEFAULT_RETRY_BACKOFF_BASE = _chunkAKCJVGJ7cjs.DEFAULT_RETRY_BACKOFF_BASE; exports.DEFAULT_RETRY_BACKOFF_MAX = _chunkAKCJVGJ7cjs.DEFAULT_RETRY_BACKOFF_MAX; exports.DEFAULT_STEP_TIMEOUT = _chunkAKCJVGJ7cjs.DEFAULT_STEP_TIMEOUT; exports.EntryInProgressError = _chunkAKCJVGJ7cjs.EntryInProgressError; exports.EvictedError = _chunkAKCJVGJ7cjs.EvictedError; exports.HistoryDivergedError = _chunkAKCJVGJ7cjs.HistoryDivergedError; exports.JoinError = _chunkAKCJVGJ7cjs.JoinError; exports.Loop = _chunkAKCJVGJ7cjs.Loop; exports.MessageWaitError = _chunkAKCJVGJ7cjs.MessageWaitError; exports.RaceError = _chunkAKCJVGJ7cjs.RaceError; exports.RollbackCheckpointError = _chunkAKCJVGJ7cjs.RollbackCheckpointError; exports.RollbackError = _chunkAKCJVGJ7cjs.RollbackError; exports.SleepError = _chunkAKCJVGJ7cjs.SleepError; exports.StepExhaustedError = _chunkAKCJVGJ7cjs.StepExhaustedError; exports.StepFailedError = _chunkAKCJVGJ7cjs.StepFailedError; exports.WorkflowContextImpl = _chunkAKCJVGJ7cjs.WorkflowContextImpl; exports.appendLoopIteration = _chunkAKCJVGJ7cjs.appendLoopIteration; exports.appendName = _chunkAKCJVGJ7cjs.appendName; exports.createEntry = _chunkAKCJVGJ7cjs.createEntry; exports.createHistorySnapshot = _chunkAKCJVGJ7cjs.createHistorySnapshot; exports.createStorage = _chunkAKCJVGJ7cjs.createStorage; exports.deleteEntriesWithPrefix = _chunkAKCJVGJ7cjs.deleteEntriesWithPrefix; exports.emptyLocation = _chunkAKCJVGJ7cjs.emptyLocation; exports.extractErrorInfo = _chunkAKCJVGJ7cjs.extractErrorInfo; exports.flush = _chunkAKCJVGJ7cjs.flush; exports.generateId = _chunkAKCJVGJ7cjs.generateId; exports.getEntry = _chunkAKCJVGJ7cjs.getEntry; exports.getOrCreateMetadata = _chunkAKCJVGJ7cjs.getOrCreateMetadata; exports.isLocationPrefix = _chunkAKCJVGJ7cjs.isLocationPrefix; exports.isLoopIterationMarker = _chunkAKCJVGJ7cjs.isLoopIterationMarker; exports.loadMetadata = _chunkAKCJVGJ7cjs.loadMetadata; exports.loadStorage = _chunkAKCJVGJ7cjs.loadStorage; exports.locationToKey = _chunkAKCJVGJ7cjs.locationToKey; exports.locationsEqual = _chunkAKCJVGJ7cjs.locationsEqual; exports.parentLocation = _chunkAKCJVGJ7cjs.parentLocation; exports.registerName = _chunkAKCJVGJ7cjs.registerName; exports.replayWorkflowFromStep = _chunkAKCJVGJ7cjs.replayWorkflowFromStep; exports.resolveName = _chunkAKCJVGJ7cjs.resolveName; exports.runWorkflow = _chunkAKCJVGJ7cjs.runWorkflow; exports.setEntry = _chunkAKCJVGJ7cjs.setEntry;
|
|
93
93
|
//# sourceMappingURL=index.cjs.map
|
package/dist/tsup/index.d.cts
CHANGED
|
@@ -557,6 +557,32 @@ interface KVWrite {
|
|
|
557
557
|
key: Uint8Array;
|
|
558
558
|
value: Uint8Array;
|
|
559
559
|
}
|
|
560
|
+
/** How one run of the workflow function ended. */
|
|
561
|
+
type WorkflowOutcome = "completed" | "sleeping" | "evicted" | "failed" | "cancelled";
|
|
562
|
+
/** How one step attempt ended. `retry` will be tried again, `failed` will not. */
|
|
563
|
+
type WorkflowStepOutcome = "ok" | "retry" | "failed";
|
|
564
|
+
/** One open run of the workflow function. */
|
|
565
|
+
interface WorkflowSpan {
|
|
566
|
+
/** Runs `body` attributed to this run. */
|
|
567
|
+
run<T>(body: () => Promise<T>): Promise<T>;
|
|
568
|
+
/** Returns nothing when the attempt is not being traced. */
|
|
569
|
+
startStep(name: string, attempt: number): WorkflowStepSpan | undefined;
|
|
570
|
+
finish(outcome: WorkflowOutcome): Promise<void>;
|
|
571
|
+
}
|
|
572
|
+
/** One open attempt at one step. */
|
|
573
|
+
interface WorkflowStepSpan {
|
|
574
|
+
/** Runs `body` attributed to this attempt. */
|
|
575
|
+
run<T>(body: () => Promise<T>): Promise<T>;
|
|
576
|
+
/** `error` is what the step callback threw. */
|
|
577
|
+
finish(outcome: WorkflowStepOutcome, error?: unknown): void;
|
|
578
|
+
}
|
|
579
|
+
/**
|
|
580
|
+
* Receives the start and end of each workflow run and step attempt. A
|
|
581
|
+
* completed step replayed from history is not an attempt and is not reported.
|
|
582
|
+
*/
|
|
583
|
+
interface WorkflowTelemetryDriver {
|
|
584
|
+
startSpan(): Promise<WorkflowSpan>;
|
|
585
|
+
}
|
|
560
586
|
/**
|
|
561
587
|
* The engine driver provides the KV and scheduling interface.
|
|
562
588
|
* Implementations must provide these methods to integrate with different backends.
|
|
@@ -638,6 +664,8 @@ interface EngineDriver {
|
|
|
638
664
|
* Implementations should resolve when any of the specified message names are available.
|
|
639
665
|
*/
|
|
640
666
|
waitForMessages(messageNames: string[], abortSignal: AbortSignal): Promise<void>;
|
|
667
|
+
/** Present when the host traces workflows. */
|
|
668
|
+
readonly telemetry?: WorkflowTelemetryDriver;
|
|
641
669
|
}
|
|
642
670
|
|
|
643
671
|
/**
|
|
@@ -670,6 +698,7 @@ declare class WorkflowContextImpl implements WorkflowContextInterface {
|
|
|
670
698
|
private abortController;
|
|
671
699
|
private currentLocation;
|
|
672
700
|
private visitedKeys;
|
|
701
|
+
private runSpan?;
|
|
673
702
|
private mode;
|
|
674
703
|
private rollbackActions?;
|
|
675
704
|
private rollbackCheckpointSet;
|
|
@@ -679,7 +708,7 @@ declare class WorkflowContextImpl implements WorkflowContextInterface {
|
|
|
679
708
|
private historyNotifier?;
|
|
680
709
|
private onError?;
|
|
681
710
|
private logger?;
|
|
682
|
-
constructor(workflowId: string, storage: Storage, driver: EngineDriver, messageDriver: WorkflowMessageDriver, location?: Location, abortController?: AbortController, mode?: "forward" | "rollback", rollbackActions?: RollbackAction[], rollbackCheckpointSet?: boolean, historyNotifier?: () => void, onError?: WorkflowErrorHandler, logger?: Logger, visitedKeys?: Set<string
|
|
711
|
+
constructor(workflowId: string, storage: Storage, driver: EngineDriver, messageDriver: WorkflowMessageDriver, location?: Location, abortController?: AbortController, mode?: "forward" | "rollback", rollbackActions?: RollbackAction[], rollbackCheckpointSet?: boolean, historyNotifier?: () => void, onError?: WorkflowErrorHandler, logger?: Logger, visitedKeys?: Set<string>, runSpan?: WorkflowSpan);
|
|
683
712
|
get abortSignal(): AbortSignal;
|
|
684
713
|
get queue(): WorkflowQueue;
|
|
685
714
|
isEvicted(): boolean;
|
|
@@ -1049,4 +1078,4 @@ declare function replayWorkflowFromStep(workflowId: string, driver: EngineDriver
|
|
|
1049
1078
|
scheduleAlarm?: boolean;
|
|
1050
1079
|
}): Promise<WorkflowHistorySnapshot>;
|
|
1051
1080
|
|
|
1052
|
-
export { type BranchConfig, type BranchOutput, type BranchStatus, type BranchStatusType, CancelledError, CriticalError, DEFAULT_LOOP_HISTORY_PRUNE_INTERVAL, DEFAULT_MAX_RETRIES, DEFAULT_RETRY_BACKOFF_BASE, DEFAULT_RETRY_BACKOFF_MAX, DEFAULT_STEP_TIMEOUT, type EngineDriver, type Entry, EntryInProgressError, type EntryKind, type EntryKindType, type EntryMetadata, type EntryStatus, EvictedError, type History, HistoryDivergedError, type JoinEntry, JoinError, type KVEntry, type KVWrite, type Location, Loop, type LoopConfig, type LoopEntry, type LoopIterationMarker, type LoopResult, type Message, type MessageEntry, MessageWaitError, type NameIndex, type PathSegment, type RaceEntry, RaceError, type RemovedEntry, type RollbackCheckpointEntry, RollbackCheckpointError, type RollbackContextInterface, RollbackError, type RunWorkflowOptions, type SleepEntry, SleepError, type SleepState, type StepConfig, type StepEntry, StepExhaustedError, StepFailedError, type Storage, type TryBlockCatchKind, type TryBlockConfig, type TryBlockFailure, type TryBlockResult, type TryStepCatchKind, type TryStepConfig, type TryStepFailure, type TryStepResult, WorkflowContextImpl, type WorkflowContextInterface, type WorkflowEntryMetadataSnapshot, type WorkflowError, type WorkflowErrorEvent, type WorkflowErrorHandler, type WorkflowFunction, type WorkflowHandle, type WorkflowHistoryEntry, type WorkflowHistorySnapshot, type WorkflowMessageDriver, type WorkflowQueue, type WorkflowQueueMessage, type WorkflowQueueNextBatchOptions, type WorkflowQueueNextOptions, type WorkflowResult, type WorkflowRollbackErrorEvent, type WorkflowRunErrorEvent, type WorkflowRunMode, type WorkflowState, type WorkflowStepErrorEvent, appendLoopIteration, appendName, createEntry, createHistorySnapshot, createStorage, deleteEntriesWithPrefix, emptyLocation, extractErrorInfo, flush, generateId, getEntry, getOrCreateMetadata, isLocationPrefix, isLoopIterationMarker, loadMetadata, loadStorage, locationToKey, locationsEqual, parentLocation, registerName, replayWorkflowFromStep, resolveName, runWorkflow, setEntry };
|
|
1081
|
+
export { type BranchConfig, type BranchOutput, type BranchStatus, type BranchStatusType, CancelledError, CriticalError, DEFAULT_LOOP_HISTORY_PRUNE_INTERVAL, DEFAULT_MAX_RETRIES, DEFAULT_RETRY_BACKOFF_BASE, DEFAULT_RETRY_BACKOFF_MAX, DEFAULT_STEP_TIMEOUT, type EngineDriver, type Entry, EntryInProgressError, type EntryKind, type EntryKindType, type EntryMetadata, type EntryStatus, EvictedError, type History, HistoryDivergedError, type JoinEntry, JoinError, type KVEntry, type KVWrite, type Location, Loop, type LoopConfig, type LoopEntry, type LoopIterationMarker, type LoopResult, type Message, type MessageEntry, MessageWaitError, type NameIndex, type PathSegment, type RaceEntry, RaceError, type RemovedEntry, type RollbackCheckpointEntry, RollbackCheckpointError, type RollbackContextInterface, RollbackError, type RunWorkflowOptions, type SleepEntry, SleepError, type SleepState, type StepConfig, type StepEntry, StepExhaustedError, StepFailedError, type Storage, type TryBlockCatchKind, type TryBlockConfig, type TryBlockFailure, type TryBlockResult, type TryStepCatchKind, type TryStepConfig, type TryStepFailure, type TryStepResult, WorkflowContextImpl, type WorkflowContextInterface, type WorkflowEntryMetadataSnapshot, type WorkflowError, type WorkflowErrorEvent, type WorkflowErrorHandler, type WorkflowFunction, type WorkflowHandle, type WorkflowHistoryEntry, type WorkflowHistorySnapshot, type WorkflowMessageDriver, type WorkflowOutcome, type WorkflowQueue, type WorkflowQueueMessage, type WorkflowQueueNextBatchOptions, type WorkflowQueueNextOptions, type WorkflowResult, type WorkflowRollbackErrorEvent, type WorkflowRunErrorEvent, type WorkflowRunMode, type WorkflowSpan, type WorkflowState, type WorkflowStepErrorEvent, type WorkflowStepOutcome, type WorkflowStepSpan, type WorkflowTelemetryDriver, appendLoopIteration, appendName, createEntry, createHistorySnapshot, createStorage, deleteEntriesWithPrefix, emptyLocation, extractErrorInfo, flush, generateId, getEntry, getOrCreateMetadata, isLocationPrefix, isLoopIterationMarker, loadMetadata, loadStorage, locationToKey, locationsEqual, parentLocation, registerName, replayWorkflowFromStep, resolveName, runWorkflow, setEntry };
|
package/dist/tsup/index.d.ts
CHANGED
|
@@ -557,6 +557,32 @@ interface KVWrite {
|
|
|
557
557
|
key: Uint8Array;
|
|
558
558
|
value: Uint8Array;
|
|
559
559
|
}
|
|
560
|
+
/** How one run of the workflow function ended. */
|
|
561
|
+
type WorkflowOutcome = "completed" | "sleeping" | "evicted" | "failed" | "cancelled";
|
|
562
|
+
/** How one step attempt ended. `retry` will be tried again, `failed` will not. */
|
|
563
|
+
type WorkflowStepOutcome = "ok" | "retry" | "failed";
|
|
564
|
+
/** One open run of the workflow function. */
|
|
565
|
+
interface WorkflowSpan {
|
|
566
|
+
/** Runs `body` attributed to this run. */
|
|
567
|
+
run<T>(body: () => Promise<T>): Promise<T>;
|
|
568
|
+
/** Returns nothing when the attempt is not being traced. */
|
|
569
|
+
startStep(name: string, attempt: number): WorkflowStepSpan | undefined;
|
|
570
|
+
finish(outcome: WorkflowOutcome): Promise<void>;
|
|
571
|
+
}
|
|
572
|
+
/** One open attempt at one step. */
|
|
573
|
+
interface WorkflowStepSpan {
|
|
574
|
+
/** Runs `body` attributed to this attempt. */
|
|
575
|
+
run<T>(body: () => Promise<T>): Promise<T>;
|
|
576
|
+
/** `error` is what the step callback threw. */
|
|
577
|
+
finish(outcome: WorkflowStepOutcome, error?: unknown): void;
|
|
578
|
+
}
|
|
579
|
+
/**
|
|
580
|
+
* Receives the start and end of each workflow run and step attempt. A
|
|
581
|
+
* completed step replayed from history is not an attempt and is not reported.
|
|
582
|
+
*/
|
|
583
|
+
interface WorkflowTelemetryDriver {
|
|
584
|
+
startSpan(): Promise<WorkflowSpan>;
|
|
585
|
+
}
|
|
560
586
|
/**
|
|
561
587
|
* The engine driver provides the KV and scheduling interface.
|
|
562
588
|
* Implementations must provide these methods to integrate with different backends.
|
|
@@ -638,6 +664,8 @@ interface EngineDriver {
|
|
|
638
664
|
* Implementations should resolve when any of the specified message names are available.
|
|
639
665
|
*/
|
|
640
666
|
waitForMessages(messageNames: string[], abortSignal: AbortSignal): Promise<void>;
|
|
667
|
+
/** Present when the host traces workflows. */
|
|
668
|
+
readonly telemetry?: WorkflowTelemetryDriver;
|
|
641
669
|
}
|
|
642
670
|
|
|
643
671
|
/**
|
|
@@ -670,6 +698,7 @@ declare class WorkflowContextImpl implements WorkflowContextInterface {
|
|
|
670
698
|
private abortController;
|
|
671
699
|
private currentLocation;
|
|
672
700
|
private visitedKeys;
|
|
701
|
+
private runSpan?;
|
|
673
702
|
private mode;
|
|
674
703
|
private rollbackActions?;
|
|
675
704
|
private rollbackCheckpointSet;
|
|
@@ -679,7 +708,7 @@ declare class WorkflowContextImpl implements WorkflowContextInterface {
|
|
|
679
708
|
private historyNotifier?;
|
|
680
709
|
private onError?;
|
|
681
710
|
private logger?;
|
|
682
|
-
constructor(workflowId: string, storage: Storage, driver: EngineDriver, messageDriver: WorkflowMessageDriver, location?: Location, abortController?: AbortController, mode?: "forward" | "rollback", rollbackActions?: RollbackAction[], rollbackCheckpointSet?: boolean, historyNotifier?: () => void, onError?: WorkflowErrorHandler, logger?: Logger, visitedKeys?: Set<string
|
|
711
|
+
constructor(workflowId: string, storage: Storage, driver: EngineDriver, messageDriver: WorkflowMessageDriver, location?: Location, abortController?: AbortController, mode?: "forward" | "rollback", rollbackActions?: RollbackAction[], rollbackCheckpointSet?: boolean, historyNotifier?: () => void, onError?: WorkflowErrorHandler, logger?: Logger, visitedKeys?: Set<string>, runSpan?: WorkflowSpan);
|
|
683
712
|
get abortSignal(): AbortSignal;
|
|
684
713
|
get queue(): WorkflowQueue;
|
|
685
714
|
isEvicted(): boolean;
|
|
@@ -1049,4 +1078,4 @@ declare function replayWorkflowFromStep(workflowId: string, driver: EngineDriver
|
|
|
1049
1078
|
scheduleAlarm?: boolean;
|
|
1050
1079
|
}): Promise<WorkflowHistorySnapshot>;
|
|
1051
1080
|
|
|
1052
|
-
export { type BranchConfig, type BranchOutput, type BranchStatus, type BranchStatusType, CancelledError, CriticalError, DEFAULT_LOOP_HISTORY_PRUNE_INTERVAL, DEFAULT_MAX_RETRIES, DEFAULT_RETRY_BACKOFF_BASE, DEFAULT_RETRY_BACKOFF_MAX, DEFAULT_STEP_TIMEOUT, type EngineDriver, type Entry, EntryInProgressError, type EntryKind, type EntryKindType, type EntryMetadata, type EntryStatus, EvictedError, type History, HistoryDivergedError, type JoinEntry, JoinError, type KVEntry, type KVWrite, type Location, Loop, type LoopConfig, type LoopEntry, type LoopIterationMarker, type LoopResult, type Message, type MessageEntry, MessageWaitError, type NameIndex, type PathSegment, type RaceEntry, RaceError, type RemovedEntry, type RollbackCheckpointEntry, RollbackCheckpointError, type RollbackContextInterface, RollbackError, type RunWorkflowOptions, type SleepEntry, SleepError, type SleepState, type StepConfig, type StepEntry, StepExhaustedError, StepFailedError, type Storage, type TryBlockCatchKind, type TryBlockConfig, type TryBlockFailure, type TryBlockResult, type TryStepCatchKind, type TryStepConfig, type TryStepFailure, type TryStepResult, WorkflowContextImpl, type WorkflowContextInterface, type WorkflowEntryMetadataSnapshot, type WorkflowError, type WorkflowErrorEvent, type WorkflowErrorHandler, type WorkflowFunction, type WorkflowHandle, type WorkflowHistoryEntry, type WorkflowHistorySnapshot, type WorkflowMessageDriver, type WorkflowQueue, type WorkflowQueueMessage, type WorkflowQueueNextBatchOptions, type WorkflowQueueNextOptions, type WorkflowResult, type WorkflowRollbackErrorEvent, type WorkflowRunErrorEvent, type WorkflowRunMode, type WorkflowState, type WorkflowStepErrorEvent, appendLoopIteration, appendName, createEntry, createHistorySnapshot, createStorage, deleteEntriesWithPrefix, emptyLocation, extractErrorInfo, flush, generateId, getEntry, getOrCreateMetadata, isLocationPrefix, isLoopIterationMarker, loadMetadata, loadStorage, locationToKey, locationsEqual, parentLocation, registerName, replayWorkflowFromStep, resolveName, runWorkflow, setEntry };
|
|
1081
|
+
export { type BranchConfig, type BranchOutput, type BranchStatus, type BranchStatusType, CancelledError, CriticalError, DEFAULT_LOOP_HISTORY_PRUNE_INTERVAL, DEFAULT_MAX_RETRIES, DEFAULT_RETRY_BACKOFF_BASE, DEFAULT_RETRY_BACKOFF_MAX, DEFAULT_STEP_TIMEOUT, type EngineDriver, type Entry, EntryInProgressError, type EntryKind, type EntryKindType, type EntryMetadata, type EntryStatus, EvictedError, type History, HistoryDivergedError, type JoinEntry, JoinError, type KVEntry, type KVWrite, type Location, Loop, type LoopConfig, type LoopEntry, type LoopIterationMarker, type LoopResult, type Message, type MessageEntry, MessageWaitError, type NameIndex, type PathSegment, type RaceEntry, RaceError, type RemovedEntry, type RollbackCheckpointEntry, RollbackCheckpointError, type RollbackContextInterface, RollbackError, type RunWorkflowOptions, type SleepEntry, SleepError, type SleepState, type StepConfig, type StepEntry, StepExhaustedError, StepFailedError, type Storage, type TryBlockCatchKind, type TryBlockConfig, type TryBlockFailure, type TryBlockResult, type TryStepCatchKind, type TryStepConfig, type TryStepFailure, type TryStepResult, WorkflowContextImpl, type WorkflowContextInterface, type WorkflowEntryMetadataSnapshot, type WorkflowError, type WorkflowErrorEvent, type WorkflowErrorHandler, type WorkflowFunction, type WorkflowHandle, type WorkflowHistoryEntry, type WorkflowHistorySnapshot, type WorkflowMessageDriver, type WorkflowOutcome, type WorkflowQueue, type WorkflowQueueMessage, type WorkflowQueueNextBatchOptions, type WorkflowQueueNextOptions, type WorkflowResult, type WorkflowRollbackErrorEvent, type WorkflowRunErrorEvent, type WorkflowRunMode, type WorkflowSpan, type WorkflowState, type WorkflowStepErrorEvent, type WorkflowStepOutcome, type WorkflowStepSpan, type WorkflowTelemetryDriver, appendLoopIteration, appendName, createEntry, createHistorySnapshot, createStorage, deleteEntriesWithPrefix, emptyLocation, extractErrorInfo, flush, generateId, getEntry, getOrCreateMetadata, isLocationPrefix, isLoopIterationMarker, loadMetadata, loadStorage, locationToKey, locationsEqual, parentLocation, registerName, replayWorkflowFromStep, resolveName, runWorkflow, setEntry };
|
package/dist/tsup/index.js
CHANGED
package/dist/tsup/testing.cjs
CHANGED
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
|
|
48
48
|
|
|
49
49
|
|
|
50
|
-
var
|
|
50
|
+
var _chunkAKCJVGJ7cjs = require('./chunk-AKCJVGJ7.cjs');
|
|
51
51
|
|
|
52
52
|
// src/testing.ts
|
|
53
53
|
var InMemoryWorkflowMessageDriver = class {
|
|
@@ -97,7 +97,7 @@ var InMemoryWorkflowMessageDriver = class {
|
|
|
97
97
|
}
|
|
98
98
|
async waitForMessages(messageNames, abortSignal) {
|
|
99
99
|
if (abortSignal.aborted) {
|
|
100
|
-
throw new (0,
|
|
100
|
+
throw new (0, _chunkAKCJVGJ7cjs.EvictedError)();
|
|
101
101
|
}
|
|
102
102
|
const nameSet = messageNames.length > 0 ? new Set(messageNames) : void 0;
|
|
103
103
|
if (this.#messages.some(
|
|
@@ -118,7 +118,7 @@ var InMemoryWorkflowMessageDriver = class {
|
|
|
118
118
|
},
|
|
119
119
|
abortSignal,
|
|
120
120
|
onAbort: () => {
|
|
121
|
-
waiter.reject(new (0,
|
|
121
|
+
waiter.reject(new (0, _chunkAKCJVGJ7cjs.EvictedError)());
|
|
122
122
|
}
|
|
123
123
|
};
|
|
124
124
|
abortSignal.addEventListener("abort", waiter.onAbort, {
|
|
@@ -158,62 +158,62 @@ var InMemoryDriver = (_class = class {constructor() { _class.prototype.__init.ca
|
|
|
158
158
|
__init4() {this.workerPollInterval = 100}
|
|
159
159
|
__init5() {this.messageDriver = this.#inMemoryMessageDriver}
|
|
160
160
|
async get(key) {
|
|
161
|
-
await
|
|
162
|
-
const entry = this.kv.get(
|
|
161
|
+
await _chunkAKCJVGJ7cjs.sleep.call(void 0, this.latency);
|
|
162
|
+
const entry = this.kv.get(_chunkAKCJVGJ7cjs.keyToHex.call(void 0, key));
|
|
163
163
|
return _nullishCoalesce((entry == null ? void 0 : entry.value), () => ( null));
|
|
164
164
|
}
|
|
165
165
|
async set(key, value) {
|
|
166
|
-
await
|
|
167
|
-
this.kv.set(
|
|
166
|
+
await _chunkAKCJVGJ7cjs.sleep.call(void 0, this.latency);
|
|
167
|
+
this.kv.set(_chunkAKCJVGJ7cjs.keyToHex.call(void 0, key), { key, value });
|
|
168
168
|
}
|
|
169
169
|
async delete(key) {
|
|
170
|
-
await
|
|
171
|
-
this.kv.delete(
|
|
170
|
+
await _chunkAKCJVGJ7cjs.sleep.call(void 0, this.latency);
|
|
171
|
+
this.kv.delete(_chunkAKCJVGJ7cjs.keyToHex.call(void 0, key));
|
|
172
172
|
}
|
|
173
173
|
async batchDelete(keys) {
|
|
174
|
-
await
|
|
174
|
+
await _chunkAKCJVGJ7cjs.sleep.call(void 0, this.latency);
|
|
175
175
|
for (const key of keys) {
|
|
176
|
-
this.kv.delete(
|
|
176
|
+
this.kv.delete(_chunkAKCJVGJ7cjs.keyToHex.call(void 0, key));
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
179
|
async deletePrefix(prefix) {
|
|
180
|
-
await
|
|
180
|
+
await _chunkAKCJVGJ7cjs.sleep.call(void 0, this.latency);
|
|
181
181
|
for (const [hexKey, entry] of this.kv) {
|
|
182
|
-
if (
|
|
182
|
+
if (_chunkAKCJVGJ7cjs.keyStartsWith.call(void 0, entry.key, prefix)) {
|
|
183
183
|
this.kv.delete(hexKey);
|
|
184
184
|
}
|
|
185
185
|
}
|
|
186
186
|
}
|
|
187
187
|
async deleteRange(start, end) {
|
|
188
|
-
await
|
|
188
|
+
await _chunkAKCJVGJ7cjs.sleep.call(void 0, this.latency);
|
|
189
189
|
for (const [hexKey, entry] of this.kv) {
|
|
190
|
-
if (
|
|
190
|
+
if (_chunkAKCJVGJ7cjs.compareKeys.call(void 0, entry.key, start) >= 0 && _chunkAKCJVGJ7cjs.compareKeys.call(void 0, entry.key, end) < 0) {
|
|
191
191
|
this.kv.delete(hexKey);
|
|
192
192
|
}
|
|
193
193
|
}
|
|
194
194
|
}
|
|
195
195
|
async list(prefix) {
|
|
196
|
-
await
|
|
196
|
+
await _chunkAKCJVGJ7cjs.sleep.call(void 0, this.latency);
|
|
197
197
|
const results = [];
|
|
198
198
|
for (const entry of this.kv.values()) {
|
|
199
|
-
if (
|
|
199
|
+
if (_chunkAKCJVGJ7cjs.keyStartsWith.call(void 0, entry.key, prefix)) {
|
|
200
200
|
results.push({ key: entry.key, value: entry.value });
|
|
201
201
|
}
|
|
202
202
|
}
|
|
203
|
-
return results.sort((a, b) =>
|
|
203
|
+
return results.sort((a, b) => _chunkAKCJVGJ7cjs.compareKeys.call(void 0, a.key, b.key));
|
|
204
204
|
}
|
|
205
205
|
async batch(writes) {
|
|
206
|
-
await
|
|
206
|
+
await _chunkAKCJVGJ7cjs.sleep.call(void 0, this.latency);
|
|
207
207
|
for (const { key, value } of writes) {
|
|
208
|
-
this.kv.set(
|
|
208
|
+
this.kv.set(_chunkAKCJVGJ7cjs.keyToHex.call(void 0, key), { key, value });
|
|
209
209
|
}
|
|
210
210
|
}
|
|
211
211
|
async setAlarm(workflowId, wakeAt) {
|
|
212
|
-
await
|
|
212
|
+
await _chunkAKCJVGJ7cjs.sleep.call(void 0, this.latency);
|
|
213
213
|
this.alarms.set(workflowId, wakeAt);
|
|
214
214
|
}
|
|
215
215
|
async clearAlarm(workflowId) {
|
|
216
|
-
await
|
|
216
|
+
await _chunkAKCJVGJ7cjs.sleep.call(void 0, this.latency);
|
|
217
217
|
this.alarms.delete(workflowId);
|
|
218
218
|
}
|
|
219
219
|
async waitForMessages(messageNames, abortSignal) {
|
|
@@ -224,7 +224,7 @@ var InMemoryDriver = (_class = class {constructor() { _class.prototype.__init.ca
|
|
|
224
224
|
}
|
|
225
225
|
while (true) {
|
|
226
226
|
if (abortSignal.aborted) {
|
|
227
|
-
throw new (0,
|
|
227
|
+
throw new (0, _chunkAKCJVGJ7cjs.EvictedError)();
|
|
228
228
|
}
|
|
229
229
|
const messages = await this.messageDriver.receiveMessages({
|
|
230
230
|
names: messageNames.length > 0 ? messageNames : void 0,
|
|
@@ -234,7 +234,7 @@ var InMemoryDriver = (_class = class {constructor() { _class.prototype.__init.ca
|
|
|
234
234
|
if (messages.length > 0) {
|
|
235
235
|
return;
|
|
236
236
|
}
|
|
237
|
-
await
|
|
237
|
+
await _chunkAKCJVGJ7cjs.sleep.call(void 0, Math.max(1, this.latency));
|
|
238
238
|
}
|
|
239
239
|
}
|
|
240
240
|
/**
|
|
@@ -330,5 +330,5 @@ var InMemoryDriver = (_class = class {constructor() { _class.prototype.__init.ca
|
|
|
330
330
|
|
|
331
331
|
|
|
332
332
|
|
|
333
|
-
exports.CancelledError =
|
|
333
|
+
exports.CancelledError = _chunkAKCJVGJ7cjs.CancelledError; exports.CriticalError = _chunkAKCJVGJ7cjs.CriticalError; exports.DEFAULT_LOOP_HISTORY_PRUNE_INTERVAL = _chunkAKCJVGJ7cjs.DEFAULT_LOOP_HISTORY_PRUNE_INTERVAL; exports.DEFAULT_MAX_RETRIES = _chunkAKCJVGJ7cjs.DEFAULT_MAX_RETRIES; exports.DEFAULT_RETRY_BACKOFF_BASE = _chunkAKCJVGJ7cjs.DEFAULT_RETRY_BACKOFF_BASE; exports.DEFAULT_RETRY_BACKOFF_MAX = _chunkAKCJVGJ7cjs.DEFAULT_RETRY_BACKOFF_MAX; exports.DEFAULT_STEP_TIMEOUT = _chunkAKCJVGJ7cjs.DEFAULT_STEP_TIMEOUT; exports.EntryInProgressError = _chunkAKCJVGJ7cjs.EntryInProgressError; exports.EvictedError = _chunkAKCJVGJ7cjs.EvictedError; exports.HistoryDivergedError = _chunkAKCJVGJ7cjs.HistoryDivergedError; exports.InMemoryDriver = InMemoryDriver; exports.JoinError = _chunkAKCJVGJ7cjs.JoinError; exports.Loop = _chunkAKCJVGJ7cjs.Loop; exports.MessageWaitError = _chunkAKCJVGJ7cjs.MessageWaitError; exports.RaceError = _chunkAKCJVGJ7cjs.RaceError; exports.RollbackCheckpointError = _chunkAKCJVGJ7cjs.RollbackCheckpointError; exports.RollbackError = _chunkAKCJVGJ7cjs.RollbackError; exports.SleepError = _chunkAKCJVGJ7cjs.SleepError; exports.StepExhaustedError = _chunkAKCJVGJ7cjs.StepExhaustedError; exports.StepFailedError = _chunkAKCJVGJ7cjs.StepFailedError; exports.WorkflowContextImpl = _chunkAKCJVGJ7cjs.WorkflowContextImpl; exports.appendLoopIteration = _chunkAKCJVGJ7cjs.appendLoopIteration; exports.appendName = _chunkAKCJVGJ7cjs.appendName; exports.createEntry = _chunkAKCJVGJ7cjs.createEntry; exports.createHistorySnapshot = _chunkAKCJVGJ7cjs.createHistorySnapshot; exports.createStorage = _chunkAKCJVGJ7cjs.createStorage; exports.deleteEntriesWithPrefix = _chunkAKCJVGJ7cjs.deleteEntriesWithPrefix; exports.emptyLocation = _chunkAKCJVGJ7cjs.emptyLocation; exports.extractErrorInfo = _chunkAKCJVGJ7cjs.extractErrorInfo; exports.flush = _chunkAKCJVGJ7cjs.flush; exports.generateId = _chunkAKCJVGJ7cjs.generateId; exports.getEntry = _chunkAKCJVGJ7cjs.getEntry; exports.getOrCreateMetadata = _chunkAKCJVGJ7cjs.getOrCreateMetadata; exports.isLocationPrefix = _chunkAKCJVGJ7cjs.isLocationPrefix; exports.isLoopIterationMarker = _chunkAKCJVGJ7cjs.isLoopIterationMarker; exports.loadMetadata = _chunkAKCJVGJ7cjs.loadMetadata; exports.loadStorage = _chunkAKCJVGJ7cjs.loadStorage; exports.locationToKey = _chunkAKCJVGJ7cjs.locationToKey; exports.locationsEqual = _chunkAKCJVGJ7cjs.locationsEqual; exports.parentLocation = _chunkAKCJVGJ7cjs.parentLocation; exports.registerName = _chunkAKCJVGJ7cjs.registerName; exports.replayWorkflowFromStep = _chunkAKCJVGJ7cjs.replayWorkflowFromStep; exports.resolveName = _chunkAKCJVGJ7cjs.resolveName; exports.runWorkflow = _chunkAKCJVGJ7cjs.runWorkflow; exports.setEntry = _chunkAKCJVGJ7cjs.setEntry;
|
|
334
334
|
//# sourceMappingURL=testing.cjs.map
|
package/dist/tsup/testing.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EngineDriver, WorkflowMessageDriver, KVEntry, KVWrite } from './index.cjs';
|
|
2
|
-
export { BranchConfig, BranchOutput, BranchStatus, BranchStatusType, CancelledError, CriticalError, DEFAULT_LOOP_HISTORY_PRUNE_INTERVAL, DEFAULT_MAX_RETRIES, DEFAULT_RETRY_BACKOFF_BASE, DEFAULT_RETRY_BACKOFF_MAX, DEFAULT_STEP_TIMEOUT, Entry, EntryInProgressError, EntryKind, EntryKindType, EntryMetadata, EntryStatus, EvictedError, History, HistoryDivergedError, JoinEntry, JoinError, Location, Loop, LoopConfig, LoopEntry, LoopIterationMarker, LoopResult, Message, MessageEntry, MessageWaitError, NameIndex, PathSegment, RaceEntry, RaceError, RemovedEntry, RollbackCheckpointEntry, RollbackCheckpointError, RollbackContextInterface, RollbackError, RunWorkflowOptions, SleepEntry, SleepError, SleepState, StepConfig, StepEntry, StepExhaustedError, StepFailedError, Storage, TryBlockCatchKind, TryBlockConfig, TryBlockFailure, TryBlockResult, TryStepCatchKind, TryStepConfig, TryStepFailure, TryStepResult, WorkflowContextImpl, WorkflowContextInterface, WorkflowEntryMetadataSnapshot, WorkflowError, WorkflowErrorEvent, WorkflowErrorHandler, WorkflowFunction, WorkflowHandle, WorkflowHistoryEntry, WorkflowHistorySnapshot, WorkflowQueue, WorkflowQueueMessage, WorkflowQueueNextBatchOptions, WorkflowQueueNextOptions, WorkflowResult, WorkflowRollbackErrorEvent, WorkflowRunErrorEvent, WorkflowRunMode, WorkflowState, WorkflowStepErrorEvent, appendLoopIteration, appendName, createEntry, createHistorySnapshot, createStorage, deleteEntriesWithPrefix, emptyLocation, extractErrorInfo, flush, generateId, getEntry, getOrCreateMetadata, isLocationPrefix, isLoopIterationMarker, loadMetadata, loadStorage, locationToKey, locationsEqual, parentLocation, registerName, replayWorkflowFromStep, resolveName, runWorkflow, setEntry } from './index.cjs';
|
|
2
|
+
export { BranchConfig, BranchOutput, BranchStatus, BranchStatusType, CancelledError, CriticalError, DEFAULT_LOOP_HISTORY_PRUNE_INTERVAL, DEFAULT_MAX_RETRIES, DEFAULT_RETRY_BACKOFF_BASE, DEFAULT_RETRY_BACKOFF_MAX, DEFAULT_STEP_TIMEOUT, Entry, EntryInProgressError, EntryKind, EntryKindType, EntryMetadata, EntryStatus, EvictedError, History, HistoryDivergedError, JoinEntry, JoinError, Location, Loop, LoopConfig, LoopEntry, LoopIterationMarker, LoopResult, Message, MessageEntry, MessageWaitError, NameIndex, PathSegment, RaceEntry, RaceError, RemovedEntry, RollbackCheckpointEntry, RollbackCheckpointError, RollbackContextInterface, RollbackError, RunWorkflowOptions, SleepEntry, SleepError, SleepState, StepConfig, StepEntry, StepExhaustedError, StepFailedError, Storage, TryBlockCatchKind, TryBlockConfig, TryBlockFailure, TryBlockResult, TryStepCatchKind, TryStepConfig, TryStepFailure, TryStepResult, WorkflowContextImpl, WorkflowContextInterface, WorkflowEntryMetadataSnapshot, WorkflowError, WorkflowErrorEvent, WorkflowErrorHandler, WorkflowFunction, WorkflowHandle, WorkflowHistoryEntry, WorkflowHistorySnapshot, WorkflowOutcome, WorkflowQueue, WorkflowQueueMessage, WorkflowQueueNextBatchOptions, WorkflowQueueNextOptions, WorkflowResult, WorkflowRollbackErrorEvent, WorkflowRunErrorEvent, WorkflowRunMode, WorkflowSpan, WorkflowState, WorkflowStepErrorEvent, WorkflowStepOutcome, WorkflowStepSpan, WorkflowTelemetryDriver, appendLoopIteration, appendName, createEntry, createHistorySnapshot, createStorage, deleteEntriesWithPrefix, emptyLocation, extractErrorInfo, flush, generateId, getEntry, getOrCreateMetadata, isLocationPrefix, isLoopIterationMarker, loadMetadata, loadStorage, locationToKey, locationsEqual, parentLocation, registerName, replayWorkflowFromStep, resolveName, runWorkflow, setEntry } from './index.cjs';
|
|
3
3
|
import 'pino';
|
|
4
4
|
|
|
5
5
|
/**
|
package/dist/tsup/testing.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EngineDriver, WorkflowMessageDriver, KVEntry, KVWrite } from './index.js';
|
|
2
|
-
export { BranchConfig, BranchOutput, BranchStatus, BranchStatusType, CancelledError, CriticalError, DEFAULT_LOOP_HISTORY_PRUNE_INTERVAL, DEFAULT_MAX_RETRIES, DEFAULT_RETRY_BACKOFF_BASE, DEFAULT_RETRY_BACKOFF_MAX, DEFAULT_STEP_TIMEOUT, Entry, EntryInProgressError, EntryKind, EntryKindType, EntryMetadata, EntryStatus, EvictedError, History, HistoryDivergedError, JoinEntry, JoinError, Location, Loop, LoopConfig, LoopEntry, LoopIterationMarker, LoopResult, Message, MessageEntry, MessageWaitError, NameIndex, PathSegment, RaceEntry, RaceError, RemovedEntry, RollbackCheckpointEntry, RollbackCheckpointError, RollbackContextInterface, RollbackError, RunWorkflowOptions, SleepEntry, SleepError, SleepState, StepConfig, StepEntry, StepExhaustedError, StepFailedError, Storage, TryBlockCatchKind, TryBlockConfig, TryBlockFailure, TryBlockResult, TryStepCatchKind, TryStepConfig, TryStepFailure, TryStepResult, WorkflowContextImpl, WorkflowContextInterface, WorkflowEntryMetadataSnapshot, WorkflowError, WorkflowErrorEvent, WorkflowErrorHandler, WorkflowFunction, WorkflowHandle, WorkflowHistoryEntry, WorkflowHistorySnapshot, WorkflowQueue, WorkflowQueueMessage, WorkflowQueueNextBatchOptions, WorkflowQueueNextOptions, WorkflowResult, WorkflowRollbackErrorEvent, WorkflowRunErrorEvent, WorkflowRunMode, WorkflowState, WorkflowStepErrorEvent, appendLoopIteration, appendName, createEntry, createHistorySnapshot, createStorage, deleteEntriesWithPrefix, emptyLocation, extractErrorInfo, flush, generateId, getEntry, getOrCreateMetadata, isLocationPrefix, isLoopIterationMarker, loadMetadata, loadStorage, locationToKey, locationsEqual, parentLocation, registerName, replayWorkflowFromStep, resolveName, runWorkflow, setEntry } from './index.js';
|
|
2
|
+
export { BranchConfig, BranchOutput, BranchStatus, BranchStatusType, CancelledError, CriticalError, DEFAULT_LOOP_HISTORY_PRUNE_INTERVAL, DEFAULT_MAX_RETRIES, DEFAULT_RETRY_BACKOFF_BASE, DEFAULT_RETRY_BACKOFF_MAX, DEFAULT_STEP_TIMEOUT, Entry, EntryInProgressError, EntryKind, EntryKindType, EntryMetadata, EntryStatus, EvictedError, History, HistoryDivergedError, JoinEntry, JoinError, Location, Loop, LoopConfig, LoopEntry, LoopIterationMarker, LoopResult, Message, MessageEntry, MessageWaitError, NameIndex, PathSegment, RaceEntry, RaceError, RemovedEntry, RollbackCheckpointEntry, RollbackCheckpointError, RollbackContextInterface, RollbackError, RunWorkflowOptions, SleepEntry, SleepError, SleepState, StepConfig, StepEntry, StepExhaustedError, StepFailedError, Storage, TryBlockCatchKind, TryBlockConfig, TryBlockFailure, TryBlockResult, TryStepCatchKind, TryStepConfig, TryStepFailure, TryStepResult, WorkflowContextImpl, WorkflowContextInterface, WorkflowEntryMetadataSnapshot, WorkflowError, WorkflowErrorEvent, WorkflowErrorHandler, WorkflowFunction, WorkflowHandle, WorkflowHistoryEntry, WorkflowHistorySnapshot, WorkflowOutcome, WorkflowQueue, WorkflowQueueMessage, WorkflowQueueNextBatchOptions, WorkflowQueueNextOptions, WorkflowResult, WorkflowRollbackErrorEvent, WorkflowRunErrorEvent, WorkflowRunMode, WorkflowSpan, WorkflowState, WorkflowStepErrorEvent, WorkflowStepOutcome, WorkflowStepSpan, WorkflowTelemetryDriver, appendLoopIteration, appendName, createEntry, createHistorySnapshot, createStorage, deleteEntriesWithPrefix, emptyLocation, extractErrorInfo, flush, generateId, getEntry, getOrCreateMetadata, isLocationPrefix, isLoopIterationMarker, loadMetadata, loadStorage, locationToKey, locationsEqual, parentLocation, registerName, replayWorkflowFromStep, resolveName, runWorkflow, setEntry } from './index.js';
|
|
3
3
|
import 'pino';
|
|
4
4
|
|
|
5
5
|
/**
|
package/dist/tsup/testing.js
CHANGED
package/package.json
CHANGED
package/src/context.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Logger } from "pino";
|
|
2
|
-
import type { EngineDriver } from "./driver.js";
|
|
2
|
+
import type { EngineDriver, WorkflowSpan } from "./driver.js";
|
|
3
3
|
import {
|
|
4
4
|
extractErrorInfo,
|
|
5
5
|
getErrorEventTag,
|
|
@@ -345,6 +345,7 @@ export class WorkflowContextImpl implements WorkflowContextInterface {
|
|
|
345
345
|
private abortController: AbortController;
|
|
346
346
|
private currentLocation: Location;
|
|
347
347
|
private visitedKeys: Set<string>;
|
|
348
|
+
private runSpan?: WorkflowSpan;
|
|
348
349
|
private mode: "forward" | "rollback";
|
|
349
350
|
private rollbackActions?: RollbackAction[];
|
|
350
351
|
private rollbackCheckpointSet: boolean;
|
|
@@ -369,6 +370,7 @@ export class WorkflowContextImpl implements WorkflowContextInterface {
|
|
|
369
370
|
onError?: WorkflowErrorHandler,
|
|
370
371
|
logger?: Logger,
|
|
371
372
|
visitedKeys?: Set<string>,
|
|
373
|
+
runSpan?: WorkflowSpan,
|
|
372
374
|
) {
|
|
373
375
|
this.currentLocation = location;
|
|
374
376
|
this.abortController = abortController ?? new AbortController();
|
|
@@ -379,6 +381,7 @@ export class WorkflowContextImpl implements WorkflowContextInterface {
|
|
|
379
381
|
this.onError = onError;
|
|
380
382
|
this.logger = logger;
|
|
381
383
|
this.visitedKeys = visitedKeys ?? new Set();
|
|
384
|
+
this.runSpan = runSpan;
|
|
382
385
|
}
|
|
383
386
|
|
|
384
387
|
get abortSignal(): AbortSignal {
|
|
@@ -435,6 +438,7 @@ export class WorkflowContextImpl implements WorkflowContextInterface {
|
|
|
435
438
|
this.onError,
|
|
436
439
|
this.logger,
|
|
437
440
|
this.visitedKeys,
|
|
441
|
+
this.runSpan,
|
|
438
442
|
);
|
|
439
443
|
}
|
|
440
444
|
|
|
@@ -906,10 +910,15 @@ export class WorkflowContextImpl implements WorkflowContextInterface {
|
|
|
906
910
|
// Get timeout configuration
|
|
907
911
|
const timeout = config.timeout ?? DEFAULT_STEP_TIMEOUT;
|
|
908
912
|
|
|
913
|
+
const stepSpan = this.runSpan?.startStep(
|
|
914
|
+
config.name,
|
|
915
|
+
metadata.attempts,
|
|
916
|
+
);
|
|
917
|
+
|
|
909
918
|
try {
|
|
910
919
|
// Execute with timeout
|
|
911
920
|
const output = await this.executeWithTimeout(
|
|
912
|
-
config.run(),
|
|
921
|
+
stepSpan ? stepSpan.run(() => config.run()) : config.run(),
|
|
913
922
|
timeout,
|
|
914
923
|
config.name,
|
|
915
924
|
);
|
|
@@ -936,6 +945,7 @@ export class WorkflowContextImpl implements WorkflowContextInterface {
|
|
|
936
945
|
await this.flushStorage();
|
|
937
946
|
}
|
|
938
947
|
|
|
948
|
+
stepSpan?.finish("ok");
|
|
939
949
|
this.log("debug", {
|
|
940
950
|
msg: "step completed",
|
|
941
951
|
step: config.name,
|
|
@@ -951,6 +961,7 @@ export class WorkflowContextImpl implements WorkflowContextInterface {
|
|
|
951
961
|
// Timeout errors are treated as critical by default. Steps opt
|
|
952
962
|
// into retrying on timeout with retryOnTimeout: true.
|
|
953
963
|
if (error instanceof StepTimeoutError && !config.retryOnTimeout) {
|
|
964
|
+
stepSpan?.finish("failed", error);
|
|
954
965
|
metadata.status = "exhausted";
|
|
955
966
|
metadata.error = String(error);
|
|
956
967
|
await this.notifyStepError(config, metadata.attempts, error, {
|
|
@@ -970,6 +981,7 @@ export class WorkflowContextImpl implements WorkflowContextInterface {
|
|
|
970
981
|
error instanceof CriticalError ||
|
|
971
982
|
error instanceof RollbackError
|
|
972
983
|
) {
|
|
984
|
+
stepSpan?.finish("failed", error);
|
|
973
985
|
metadata.status = "exhausted";
|
|
974
986
|
metadata.error = String(error);
|
|
975
987
|
await this.notifyStepError(config, metadata.attempts, error, {
|
|
@@ -989,6 +1001,7 @@ export class WorkflowContextImpl implements WorkflowContextInterface {
|
|
|
989
1001
|
}
|
|
990
1002
|
|
|
991
1003
|
const willRetry = metadata.attempts <= maxRetries;
|
|
1004
|
+
stepSpan?.finish(willRetry ? "retry" : "failed", error);
|
|
992
1005
|
metadata.status = willRetry ? "failed" : "exhausted";
|
|
993
1006
|
metadata.error = String(error);
|
|
994
1007
|
|
package/src/driver.ts
CHANGED
|
@@ -16,6 +16,42 @@ export interface KVWrite {
|
|
|
16
16
|
value: Uint8Array;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
/** How one run of the workflow function ended. */
|
|
20
|
+
export type WorkflowOutcome =
|
|
21
|
+
| "completed"
|
|
22
|
+
| "sleeping"
|
|
23
|
+
| "evicted"
|
|
24
|
+
| "failed"
|
|
25
|
+
| "cancelled";
|
|
26
|
+
|
|
27
|
+
/** How one step attempt ended. `retry` will be tried again, `failed` will not. */
|
|
28
|
+
export type WorkflowStepOutcome = "ok" | "retry" | "failed";
|
|
29
|
+
|
|
30
|
+
/** One open run of the workflow function. */
|
|
31
|
+
export interface WorkflowSpan {
|
|
32
|
+
/** Runs `body` attributed to this run. */
|
|
33
|
+
run<T>(body: () => Promise<T>): Promise<T>;
|
|
34
|
+
/** Returns nothing when the attempt is not being traced. */
|
|
35
|
+
startStep(name: string, attempt: number): WorkflowStepSpan | undefined;
|
|
36
|
+
finish(outcome: WorkflowOutcome): Promise<void>;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** One open attempt at one step. */
|
|
40
|
+
export interface WorkflowStepSpan {
|
|
41
|
+
/** Runs `body` attributed to this attempt. */
|
|
42
|
+
run<T>(body: () => Promise<T>): Promise<T>;
|
|
43
|
+
/** `error` is what the step callback threw. */
|
|
44
|
+
finish(outcome: WorkflowStepOutcome, error?: unknown): void;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Receives the start and end of each workflow run and step attempt. A
|
|
49
|
+
* completed step replayed from history is not an attempt and is not reported.
|
|
50
|
+
*/
|
|
51
|
+
export interface WorkflowTelemetryDriver {
|
|
52
|
+
startSpan(): Promise<WorkflowSpan>;
|
|
53
|
+
}
|
|
54
|
+
|
|
19
55
|
/**
|
|
20
56
|
* The engine driver provides the KV and scheduling interface.
|
|
21
57
|
* Implementations must provide these methods to integrate with different backends.
|
|
@@ -117,4 +153,7 @@ export interface EngineDriver {
|
|
|
117
153
|
messageNames: string[],
|
|
118
154
|
abortSignal: AbortSignal,
|
|
119
155
|
): Promise<void>;
|
|
156
|
+
|
|
157
|
+
/** Present when the host traces workflows. */
|
|
158
|
+
readonly telemetry?: WorkflowTelemetryDriver;
|
|
120
159
|
}
|