@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
|
@@ -163,6 +163,7 @@ var KEY_PREFIX = {
|
|
|
163
163
|
// Workflow metadata: [3, field]
|
|
164
164
|
ENTRY_METADATA: 4
|
|
165
165
|
// Entry metadata: [4, entryId]
|
|
166
|
+
// 5 is reserved for RivetKit's workflow trace context.
|
|
166
167
|
};
|
|
167
168
|
var WORKFLOW_FIELD = {
|
|
168
169
|
STATE: 1,
|
|
@@ -1871,7 +1872,7 @@ function selectControlFlowError(current, candidate) {
|
|
|
1871
1872
|
return controlFlowErrorPriority(candidate) < controlFlowErrorPriority(current) ? candidate : current;
|
|
1872
1873
|
}
|
|
1873
1874
|
var WorkflowContextImpl = class _WorkflowContextImpl {
|
|
1874
|
-
constructor(workflowId, storage, driver, messageDriver, location = emptyLocation(), abortController, mode = "forward", rollbackActions, rollbackCheckpointSet = false, historyNotifier, onError, logger, visitedKeys) {
|
|
1875
|
+
constructor(workflowId, storage, driver, messageDriver, location = emptyLocation(), abortController, mode = "forward", rollbackActions, rollbackCheckpointSet = false, historyNotifier, onError, logger, visitedKeys, runSpan) {
|
|
1875
1876
|
this.workflowId = workflowId;
|
|
1876
1877
|
this.storage = storage;
|
|
1877
1878
|
this.driver = driver;
|
|
@@ -1885,11 +1886,13 @@ var WorkflowContextImpl = class _WorkflowContextImpl {
|
|
|
1885
1886
|
this.onError = onError;
|
|
1886
1887
|
this.logger = logger;
|
|
1887
1888
|
this.visitedKeys = visitedKeys ?? /* @__PURE__ */ new Set();
|
|
1889
|
+
this.runSpan = runSpan;
|
|
1888
1890
|
}
|
|
1889
1891
|
entryInProgress = false;
|
|
1890
1892
|
abortController;
|
|
1891
1893
|
currentLocation;
|
|
1892
1894
|
visitedKeys;
|
|
1895
|
+
runSpan;
|
|
1893
1896
|
mode;
|
|
1894
1897
|
rollbackActions;
|
|
1895
1898
|
rollbackCheckpointSet;
|
|
@@ -1942,7 +1945,8 @@ var WorkflowContextImpl = class _WorkflowContextImpl {
|
|
|
1942
1945
|
this.historyNotifier,
|
|
1943
1946
|
this.onError,
|
|
1944
1947
|
this.logger,
|
|
1945
|
-
this.visitedKeys
|
|
1948
|
+
this.visitedKeys,
|
|
1949
|
+
this.runSpan
|
|
1946
1950
|
);
|
|
1947
1951
|
}
|
|
1948
1952
|
/**
|
|
@@ -2209,6 +2213,7 @@ var WorkflowContextImpl = class _WorkflowContextImpl {
|
|
|
2209
2213
|
}
|
|
2210
2214
|
}
|
|
2211
2215
|
async executeStep(config2) {
|
|
2216
|
+
var _a;
|
|
2212
2217
|
this.ensureRollbackCheckpoint(config2);
|
|
2213
2218
|
if (this.mode === "rollback") {
|
|
2214
2219
|
return await this.executeStepRollback(config2);
|
|
@@ -2300,9 +2305,13 @@ var WorkflowContextImpl = class _WorkflowContextImpl {
|
|
|
2300
2305
|
metadata.lastAttemptAt = Date.now();
|
|
2301
2306
|
metadata.dirty = true;
|
|
2302
2307
|
const timeout = config2.timeout ?? DEFAULT_STEP_TIMEOUT;
|
|
2308
|
+
const stepSpan = (_a = this.runSpan) == null ? void 0 : _a.startStep(
|
|
2309
|
+
config2.name,
|
|
2310
|
+
metadata.attempts
|
|
2311
|
+
);
|
|
2303
2312
|
try {
|
|
2304
2313
|
const output = await this.executeWithTimeout(
|
|
2305
|
-
config2.run(),
|
|
2314
|
+
stepSpan ? stepSpan.run(() => config2.run()) : config2.run(),
|
|
2306
2315
|
timeout,
|
|
2307
2316
|
config2.name
|
|
2308
2317
|
);
|
|
@@ -2321,6 +2330,7 @@ var WorkflowContextImpl = class _WorkflowContextImpl {
|
|
|
2321
2330
|
});
|
|
2322
2331
|
await this.flushStorage();
|
|
2323
2332
|
}
|
|
2333
|
+
stepSpan == null ? void 0 : stepSpan.finish("ok");
|
|
2324
2334
|
this.log("debug", {
|
|
2325
2335
|
msg: "step completed",
|
|
2326
2336
|
step: config2.name,
|
|
@@ -2333,6 +2343,7 @@ var WorkflowContextImpl = class _WorkflowContextImpl {
|
|
|
2333
2343
|
}
|
|
2334
2344
|
entry.dirty = true;
|
|
2335
2345
|
if (error instanceof StepTimeoutError && !config2.retryOnTimeout) {
|
|
2346
|
+
stepSpan == null ? void 0 : stepSpan.finish("failed", error);
|
|
2336
2347
|
metadata.status = "exhausted";
|
|
2337
2348
|
metadata.error = String(error);
|
|
2338
2349
|
await this.notifyStepError(config2, metadata.attempts, error, {
|
|
@@ -2348,6 +2359,7 @@ var WorkflowContextImpl = class _WorkflowContextImpl {
|
|
|
2348
2359
|
);
|
|
2349
2360
|
}
|
|
2350
2361
|
if (error instanceof CriticalError || error instanceof RollbackError) {
|
|
2362
|
+
stepSpan == null ? void 0 : stepSpan.finish("failed", error);
|
|
2351
2363
|
metadata.status = "exhausted";
|
|
2352
2364
|
metadata.error = String(error);
|
|
2353
2365
|
await this.notifyStepError(config2, metadata.attempts, error, {
|
|
@@ -2363,6 +2375,7 @@ var WorkflowContextImpl = class _WorkflowContextImpl {
|
|
|
2363
2375
|
);
|
|
2364
2376
|
}
|
|
2365
2377
|
const willRetry = metadata.attempts <= maxRetries;
|
|
2378
|
+
stepSpan == null ? void 0 : stepSpan.finish(willRetry ? "retry" : "failed", error);
|
|
2366
2379
|
metadata.status = willRetry ? "failed" : "exhausted";
|
|
2367
2380
|
metadata.error = String(error);
|
|
2368
2381
|
if (willRetry) {
|
|
@@ -3682,7 +3695,7 @@ async function awaitWithEviction(promise, abortSignal) {
|
|
|
3682
3695
|
cleanup();
|
|
3683
3696
|
}
|
|
3684
3697
|
}
|
|
3685
|
-
async function executeRollback(workflowId, workflowFn, input, driver, messageDriver, abortController, storage, historyNotifier, onError, logger) {
|
|
3698
|
+
async function executeRollback(workflowId, workflowFn, input, driver, messageDriver, abortController, storage, historyNotifier, onError, logger, runSpan) {
|
|
3686
3699
|
const rollbackActions = [];
|
|
3687
3700
|
const ctx = new WorkflowContextImpl(
|
|
3688
3701
|
workflowId,
|
|
@@ -3696,7 +3709,9 @@ async function executeRollback(workflowId, workflowFn, input, driver, messageDri
|
|
|
3696
3709
|
false,
|
|
3697
3710
|
historyNotifier,
|
|
3698
3711
|
onError,
|
|
3699
|
-
logger
|
|
3712
|
+
logger,
|
|
3713
|
+
void 0,
|
|
3714
|
+
runSpan
|
|
3700
3715
|
);
|
|
3701
3716
|
try {
|
|
3702
3717
|
await workflowFn(ctx, input);
|
|
@@ -3832,16 +3847,20 @@ async function waitForSleep(runtime, deadline, abortSignal) {
|
|
|
3832
3847
|
async function executeLiveWorkflow(workflowId, workflowFn, input, driver, messageDriver, abortController, runtime, onHistoryUpdated, onError, logger) {
|
|
3833
3848
|
let lastResult;
|
|
3834
3849
|
while (true) {
|
|
3835
|
-
const result = await
|
|
3836
|
-
workflowId,
|
|
3837
|
-
workflowFn,
|
|
3838
|
-
input,
|
|
3850
|
+
const result = await traceRun(
|
|
3839
3851
|
driver,
|
|
3840
|
-
|
|
3841
|
-
|
|
3842
|
-
|
|
3843
|
-
|
|
3844
|
-
|
|
3852
|
+
(runSpan) => executeWorkflow(
|
|
3853
|
+
workflowId,
|
|
3854
|
+
workflowFn,
|
|
3855
|
+
input,
|
|
3856
|
+
driver,
|
|
3857
|
+
messageDriver,
|
|
3858
|
+
abortController,
|
|
3859
|
+
onHistoryUpdated,
|
|
3860
|
+
onError,
|
|
3861
|
+
logger,
|
|
3862
|
+
runSpan
|
|
3863
|
+
)
|
|
3845
3864
|
);
|
|
3846
3865
|
lastResult = result;
|
|
3847
3866
|
if (result.state !== "sleeping") {
|
|
@@ -3940,16 +3959,20 @@ function runWorkflow(workflowId, workflowFn, input, driver, options = {}) {
|
|
|
3940
3959
|
options.onHistoryUpdated,
|
|
3941
3960
|
options.onError,
|
|
3942
3961
|
logger
|
|
3943
|
-
) :
|
|
3944
|
-
workflowId,
|
|
3945
|
-
workflowFn,
|
|
3946
|
-
input,
|
|
3962
|
+
) : traceRun(
|
|
3947
3963
|
driver,
|
|
3948
|
-
|
|
3949
|
-
|
|
3950
|
-
|
|
3951
|
-
|
|
3952
|
-
|
|
3964
|
+
(runSpan) => executeWorkflow(
|
|
3965
|
+
workflowId,
|
|
3966
|
+
workflowFn,
|
|
3967
|
+
input,
|
|
3968
|
+
driver,
|
|
3969
|
+
messageDriver,
|
|
3970
|
+
abortController,
|
|
3971
|
+
options.onHistoryUpdated,
|
|
3972
|
+
options.onError,
|
|
3973
|
+
logger,
|
|
3974
|
+
runSpan
|
|
3975
|
+
)
|
|
3953
3976
|
);
|
|
3954
3977
|
return {
|
|
3955
3978
|
workflowId,
|
|
@@ -4125,7 +4148,42 @@ function findReplayBoundaryEntry(entries, target) {
|
|
|
4125
4148
|
}
|
|
4126
4149
|
return boundary;
|
|
4127
4150
|
}
|
|
4128
|
-
|
|
4151
|
+
function runOutcomeFromState(state) {
|
|
4152
|
+
switch (state) {
|
|
4153
|
+
case "completed":
|
|
4154
|
+
return "completed";
|
|
4155
|
+
case "sleeping":
|
|
4156
|
+
return "sleeping";
|
|
4157
|
+
case "failed":
|
|
4158
|
+
return "failed";
|
|
4159
|
+
case "cancelled":
|
|
4160
|
+
return "cancelled";
|
|
4161
|
+
case "pending":
|
|
4162
|
+
case "running":
|
|
4163
|
+
case "rolling_back":
|
|
4164
|
+
return "evicted";
|
|
4165
|
+
}
|
|
4166
|
+
}
|
|
4167
|
+
async function traceRun(driver, run) {
|
|
4168
|
+
if (!driver.telemetry) {
|
|
4169
|
+
return await run();
|
|
4170
|
+
}
|
|
4171
|
+
const span = await driver.telemetry.startSpan();
|
|
4172
|
+
let outcome = "failed";
|
|
4173
|
+
try {
|
|
4174
|
+
const result = await span.run(() => run(span));
|
|
4175
|
+
outcome = runOutcomeFromState(result.state);
|
|
4176
|
+
return result;
|
|
4177
|
+
} catch (error) {
|
|
4178
|
+
if (error instanceof EvictedError) {
|
|
4179
|
+
outcome = "cancelled";
|
|
4180
|
+
}
|
|
4181
|
+
throw error;
|
|
4182
|
+
} finally {
|
|
4183
|
+
await span.finish(outcome);
|
|
4184
|
+
}
|
|
4185
|
+
}
|
|
4186
|
+
async function executeWorkflow(workflowId, workflowFn, input, driver, messageDriver, abortController, onHistoryUpdated, onError, logger, runSpan) {
|
|
4129
4187
|
var _a;
|
|
4130
4188
|
const storage = await loadStorage(driver);
|
|
4131
4189
|
const historyNotifier = onHistoryUpdated ? () => onHistoryUpdated(createHistorySnapshot(storage)) : void 0;
|
|
@@ -4168,7 +4226,8 @@ async function executeWorkflow(workflowId, workflowFn, input, driver, messageDri
|
|
|
4168
4226
|
storage,
|
|
4169
4227
|
historyNotifier,
|
|
4170
4228
|
onError,
|
|
4171
|
-
logger
|
|
4229
|
+
logger,
|
|
4230
|
+
runSpan
|
|
4172
4231
|
);
|
|
4173
4232
|
} catch (error) {
|
|
4174
4233
|
if (error instanceof EvictedError) {
|
|
@@ -4196,7 +4255,9 @@ async function executeWorkflow(workflowId, workflowFn, input, driver, messageDri
|
|
|
4196
4255
|
false,
|
|
4197
4256
|
historyNotifier,
|
|
4198
4257
|
onError,
|
|
4199
|
-
logger
|
|
4258
|
+
logger,
|
|
4259
|
+
void 0,
|
|
4260
|
+
runSpan
|
|
4200
4261
|
);
|
|
4201
4262
|
storage.state = "running";
|
|
4202
4263
|
try {
|
|
@@ -4263,7 +4324,8 @@ async function executeWorkflow(workflowId, workflowFn, input, driver, messageDri
|
|
|
4263
4324
|
storage,
|
|
4264
4325
|
historyNotifier,
|
|
4265
4326
|
onError,
|
|
4266
|
-
logger
|
|
4327
|
+
logger,
|
|
4328
|
+
runSpan
|
|
4267
4329
|
);
|
|
4268
4330
|
} catch (rollbackError) {
|
|
4269
4331
|
if (rollbackError instanceof EvictedError) {
|
|
@@ -4338,4 +4400,4 @@ export {
|
|
|
4338
4400
|
runWorkflow,
|
|
4339
4401
|
replayWorkflowFromStep
|
|
4340
4402
|
};
|
|
4341
|
-
//# sourceMappingURL=chunk-
|
|
4403
|
+
//# sourceMappingURL=chunk-EGOPMLG2.js.map
|