@rivetkit/workflow-engine 2.3.0 → 2.3.2
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-U2W3KHJC.cjs → chunk-GQWOLYBA.cjs} +80 -56
- package/dist/tsup/chunk-GQWOLYBA.cjs.map +1 -0
- package/dist/tsup/{chunk-DFNXCZ47.js → chunk-KA2T56AJ.js} +80 -56
- package/dist/tsup/chunk-KA2T56AJ.js.map +1 -0
- package/dist/tsup/index.cjs +2 -2
- package/dist/tsup/index.d.cts +5 -5
- package/dist/tsup/index.d.ts +5 -5
- package/dist/tsup/index.js +1 -1
- package/dist/tsup/testing.cjs +23 -23
- package/dist/tsup/testing.js +1 -1
- package/package.json +1 -1
- package/src/context.ts +26 -19
- package/src/index.ts +33 -13
- package/dist/tsup/chunk-DFNXCZ47.js.map +0 -1
- package/dist/tsup/chunk-U2W3KHJC.cjs.map +0 -1
|
@@ -1664,30 +1664,6 @@ function setEntry(storage, location, entry) {
|
|
|
1664
1664
|
storage.history.entries.set(key, entry);
|
|
1665
1665
|
}
|
|
1666
1666
|
|
|
1667
|
-
// src/utils.ts
|
|
1668
|
-
function sleep(ms) {
|
|
1669
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
1670
|
-
}
|
|
1671
|
-
var TIMEOUT_MAX = 2147483647;
|
|
1672
|
-
function setLongTimeout(listener, after) {
|
|
1673
|
-
let timeout;
|
|
1674
|
-
function start(remaining) {
|
|
1675
|
-
if (remaining <= TIMEOUT_MAX) {
|
|
1676
|
-
timeout = setTimeout(listener, remaining);
|
|
1677
|
-
} else {
|
|
1678
|
-
timeout = setTimeout(() => {
|
|
1679
|
-
start(remaining - TIMEOUT_MAX);
|
|
1680
|
-
}, TIMEOUT_MAX);
|
|
1681
|
-
}
|
|
1682
|
-
}
|
|
1683
|
-
start(after);
|
|
1684
|
-
return {
|
|
1685
|
-
abort: () => {
|
|
1686
|
-
if (timeout !== void 0) clearTimeout(timeout);
|
|
1687
|
-
}
|
|
1688
|
-
};
|
|
1689
|
-
}
|
|
1690
|
-
|
|
1691
1667
|
// src/context.ts
|
|
1692
1668
|
var DEFAULT_MAX_RETRIES = 3;
|
|
1693
1669
|
var DEFAULT_RETRY_BACKOFF_BASE = 100;
|
|
@@ -2034,25 +2010,33 @@ var WorkflowContextImpl = (_class = class _WorkflowContextImpl {
|
|
|
2034
2010
|
this.abortController.abort(new EvictedError());
|
|
2035
2011
|
}
|
|
2036
2012
|
/**
|
|
2037
|
-
* Wait for
|
|
2038
|
-
*
|
|
2039
|
-
*
|
|
2040
|
-
*
|
|
2013
|
+
* Wait for `ms`, rejecting early with EvictedError if the workflow is
|
|
2014
|
+
* evicted. Both the timer and the abort listener are torn down on either
|
|
2015
|
+
* outcome, so a completed sleep never leaves a dangling listener on the
|
|
2016
|
+
* long-lived run abort signal.
|
|
2041
2017
|
*/
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2018
|
+
async sleepOrEvict(ms) {
|
|
2019
|
+
if (this.abortSignal.aborted) {
|
|
2020
|
+
throw new EvictedError();
|
|
2021
|
+
}
|
|
2022
|
+
let timer;
|
|
2023
|
+
let onAbort;
|
|
2024
|
+
try {
|
|
2025
|
+
await new Promise((resolve, reject) => {
|
|
2026
|
+
timer = setTimeout(resolve, ms);
|
|
2027
|
+
onAbort = () => reject(new EvictedError());
|
|
2028
|
+
this.abortSignal.addEventListener("abort", onAbort, {
|
|
2029
|
+
once: true
|
|
2030
|
+
});
|
|
2031
|
+
});
|
|
2032
|
+
} finally {
|
|
2033
|
+
if (timer !== void 0) {
|
|
2034
|
+
clearTimeout(timer);
|
|
2047
2035
|
}
|
|
2048
|
-
|
|
2049
|
-
"abort",
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
},
|
|
2053
|
-
{ once: true }
|
|
2054
|
-
);
|
|
2055
|
-
});
|
|
2036
|
+
if (onAbort) {
|
|
2037
|
+
this.abortSignal.removeEventListener("abort", onAbort);
|
|
2038
|
+
}
|
|
2039
|
+
}
|
|
2056
2040
|
}
|
|
2057
2041
|
// === Step ===
|
|
2058
2042
|
async step(nameOrConfig, run) {
|
|
@@ -2695,7 +2679,7 @@ var WorkflowContextImpl = (_class = class _WorkflowContextImpl {
|
|
|
2695
2679
|
return;
|
|
2696
2680
|
}
|
|
2697
2681
|
if (remaining < this.driver.workerPollInterval) {
|
|
2698
|
-
await
|
|
2682
|
+
await this.sleepOrEvict(remaining);
|
|
2699
2683
|
this.checkEvicted();
|
|
2700
2684
|
if (entry.kind.type === "sleep") {
|
|
2701
2685
|
entry.kind.data.state = "completed";
|
|
@@ -3506,6 +3490,30 @@ var WorkflowContextImpl = (_class = class _WorkflowContextImpl {
|
|
|
3506
3490
|
}
|
|
3507
3491
|
}, _class);
|
|
3508
3492
|
|
|
3493
|
+
// src/utils.ts
|
|
3494
|
+
function sleep(ms) {
|
|
3495
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
3496
|
+
}
|
|
3497
|
+
var TIMEOUT_MAX = 2147483647;
|
|
3498
|
+
function setLongTimeout(listener, after) {
|
|
3499
|
+
let timeout;
|
|
3500
|
+
function start(remaining) {
|
|
3501
|
+
if (remaining <= TIMEOUT_MAX) {
|
|
3502
|
+
timeout = setTimeout(listener, remaining);
|
|
3503
|
+
} else {
|
|
3504
|
+
timeout = setTimeout(() => {
|
|
3505
|
+
start(remaining - TIMEOUT_MAX);
|
|
3506
|
+
}, TIMEOUT_MAX);
|
|
3507
|
+
}
|
|
3508
|
+
}
|
|
3509
|
+
start(after);
|
|
3510
|
+
return {
|
|
3511
|
+
abort: () => {
|
|
3512
|
+
if (timeout !== void 0) clearTimeout(timeout);
|
|
3513
|
+
}
|
|
3514
|
+
};
|
|
3515
|
+
}
|
|
3516
|
+
|
|
3509
3517
|
// src/index.ts
|
|
3510
3518
|
var Loop = {
|
|
3511
3519
|
continue: (state) => ({
|
|
@@ -3729,25 +3737,41 @@ async function executeLiveWorkflow(workflowId, workflowFn, input, driver, messag
|
|
|
3729
3737
|
const hasMessages = result.waitingForMessages !== void 0;
|
|
3730
3738
|
const hasDeadline = result.sleepUntil !== void 0;
|
|
3731
3739
|
if (hasMessages && hasDeadline) {
|
|
3740
|
+
const iterationAbort = new AbortController();
|
|
3741
|
+
const onRunAbort = () => iterationAbort.abort();
|
|
3742
|
+
if (abortController.signal.aborted) {
|
|
3743
|
+
iterationAbort.abort();
|
|
3744
|
+
} else {
|
|
3745
|
+
abortController.signal.addEventListener("abort", onRunAbort, {
|
|
3746
|
+
once: true
|
|
3747
|
+
});
|
|
3748
|
+
}
|
|
3749
|
+
const messagePromise = awaitWithEviction(
|
|
3750
|
+
driver.waitForMessages(
|
|
3751
|
+
result.waitingForMessages,
|
|
3752
|
+
iterationAbort.signal
|
|
3753
|
+
),
|
|
3754
|
+
iterationAbort.signal
|
|
3755
|
+
);
|
|
3756
|
+
const sleepPromise = waitForSleep(
|
|
3757
|
+
runtime,
|
|
3758
|
+
result.sleepUntil,
|
|
3759
|
+
iterationAbort.signal
|
|
3760
|
+
);
|
|
3761
|
+
messagePromise.catch(() => {
|
|
3762
|
+
});
|
|
3763
|
+
sleepPromise.catch(() => {
|
|
3764
|
+
});
|
|
3732
3765
|
try {
|
|
3733
|
-
const messagePromise = awaitWithEviction(
|
|
3734
|
-
driver.waitForMessages(
|
|
3735
|
-
result.waitingForMessages,
|
|
3736
|
-
abortController.signal
|
|
3737
|
-
),
|
|
3738
|
-
abortController.signal
|
|
3739
|
-
);
|
|
3740
|
-
const sleepPromise = waitForSleep(
|
|
3741
|
-
runtime,
|
|
3742
|
-
result.sleepUntil,
|
|
3743
|
-
abortController.signal
|
|
3744
|
-
);
|
|
3745
3766
|
await Promise.race([messagePromise, sleepPromise]);
|
|
3746
3767
|
} catch (error) {
|
|
3747
3768
|
if (error instanceof EvictedError) {
|
|
3748
3769
|
return lastResult;
|
|
3749
3770
|
}
|
|
3750
3771
|
throw error;
|
|
3772
|
+
} finally {
|
|
3773
|
+
iterationAbort.abort();
|
|
3774
|
+
abortController.signal.removeEventListener("abort", onRunAbort);
|
|
3751
3775
|
}
|
|
3752
3776
|
continue;
|
|
3753
3777
|
}
|
|
@@ -4200,5 +4224,5 @@ async function executeWorkflow(workflowId, workflowFn, input, driver, messageDri
|
|
|
4200
4224
|
|
|
4201
4225
|
|
|
4202
4226
|
|
|
4203
|
-
exports.extractErrorInfo = extractErrorInfo; exports.CriticalError = CriticalError; exports.RollbackError = RollbackError; exports.RollbackCheckpointError = RollbackCheckpointError; exports.SleepError = SleepError; exports.MessageWaitError = MessageWaitError; exports.EvictedError = EvictedError; exports.HistoryDivergedError = HistoryDivergedError; exports.StepExhaustedError = StepExhaustedError; exports.StepFailedError = StepFailedError; exports.JoinError = JoinError; exports.RaceError = RaceError; exports.CancelledError = CancelledError; exports.EntryInProgressError = EntryInProgressError; exports.keyStartsWith = keyStartsWith; exports.compareKeys = compareKeys; exports.keyToHex = keyToHex; exports.isLoopIterationMarker = isLoopIterationMarker; exports.registerName = registerName; exports.resolveName = resolveName; exports.locationToKey = locationToKey; exports.appendName = appendName; exports.appendLoopIteration = appendLoopIteration; exports.emptyLocation = emptyLocation; exports.parentLocation = parentLocation; exports.isLocationPrefix = isLocationPrefix; exports.locationsEqual = locationsEqual; exports.createStorage = createStorage; exports.createHistorySnapshot = createHistorySnapshot; exports.generateId = generateId; exports.createEntry = createEntry; exports.getOrCreateMetadata = getOrCreateMetadata; exports.loadStorage = loadStorage; exports.loadMetadata = loadMetadata; exports.flush = flush; exports.deleteEntriesWithPrefix = deleteEntriesWithPrefix; exports.getEntry = getEntry; exports.setEntry = setEntry; exports.
|
|
4204
|
-
//# sourceMappingURL=chunk-
|
|
4227
|
+
exports.extractErrorInfo = extractErrorInfo; exports.CriticalError = CriticalError; exports.RollbackError = RollbackError; exports.RollbackCheckpointError = RollbackCheckpointError; exports.SleepError = SleepError; exports.MessageWaitError = MessageWaitError; exports.EvictedError = EvictedError; exports.HistoryDivergedError = HistoryDivergedError; exports.StepExhaustedError = StepExhaustedError; exports.StepFailedError = StepFailedError; exports.JoinError = JoinError; exports.RaceError = RaceError; exports.CancelledError = CancelledError; exports.EntryInProgressError = EntryInProgressError; exports.keyStartsWith = keyStartsWith; exports.compareKeys = compareKeys; exports.keyToHex = keyToHex; exports.isLoopIterationMarker = isLoopIterationMarker; exports.registerName = registerName; exports.resolveName = resolveName; exports.locationToKey = locationToKey; exports.appendName = appendName; exports.appendLoopIteration = appendLoopIteration; exports.emptyLocation = emptyLocation; exports.parentLocation = parentLocation; exports.isLocationPrefix = isLocationPrefix; exports.locationsEqual = locationsEqual; exports.createStorage = createStorage; exports.createHistorySnapshot = createHistorySnapshot; exports.generateId = generateId; exports.createEntry = createEntry; exports.getOrCreateMetadata = getOrCreateMetadata; exports.loadStorage = loadStorage; exports.loadMetadata = loadMetadata; exports.flush = flush; exports.deleteEntriesWithPrefix = deleteEntriesWithPrefix; exports.getEntry = getEntry; exports.setEntry = setEntry; exports.DEFAULT_MAX_RETRIES = DEFAULT_MAX_RETRIES; exports.DEFAULT_RETRY_BACKOFF_BASE = DEFAULT_RETRY_BACKOFF_BASE; exports.DEFAULT_RETRY_BACKOFF_MAX = DEFAULT_RETRY_BACKOFF_MAX; exports.DEFAULT_LOOP_HISTORY_PRUNE_INTERVAL = DEFAULT_LOOP_HISTORY_PRUNE_INTERVAL; exports.DEFAULT_STEP_TIMEOUT = DEFAULT_STEP_TIMEOUT; exports.WorkflowContextImpl = WorkflowContextImpl; exports.sleep = sleep; exports.Loop = Loop; exports.runWorkflow = runWorkflow; exports.replayWorkflowFromStep = replayWorkflowFromStep;
|
|
4228
|
+
//# sourceMappingURL=chunk-GQWOLYBA.cjs.map
|