@voltro/workflow 0.79.1 → 0.81.0
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/CHANGELOG.md +169 -0
- package/dist/{cluster-Doetj9Bb.js → cluster-D7VuRhM0.js} +75 -64
- package/dist/cluster.d.ts +23 -0
- package/dist/cluster.js +2 -2
- package/dist/clusterTestSuite.d.ts +8 -0
- package/dist/clusterTestSuite.js +3 -3
- package/dist/index.d.ts +30 -0
- package/dist/index.js +4 -4
- package/dist/{primitives-bv2JHUfk.js → primitives-BJBn8tiH.js} +83 -77
- package/dist/primitives.js +2 -2
- package/dist/{src-Bq0LY2Gf.js → src-D_GRCNhv.js} +171 -171
- package/package.json +4 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { E as e, F as t,
|
|
1
|
+
import { E as e, F as t, L as n, M as r, N as i, P as a, R as o, T as s, w as c } from "./primitives-BJBn8tiH.js";
|
|
2
2
|
import { _ as l, c as u, d, f, g as p, h as m, i as h, m as g, p as _, s as v, v as ee } from "./clusterDiagnostics-Cwt-WFec.js";
|
|
3
3
|
import { Activity as y, DurableClock as b, DurableDeferred as te, Workflow as ne, WorkflowEngine as re } from "@effect/workflow";
|
|
4
4
|
import { Cause as x, Effect as S, Either as C, Exit as ie, Fiber as ae, FiberRef as oe, Layer as se, Schema as w } from "effect";
|
|
@@ -3123,7 +3123,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3123
3123
|
constructor(e, t, n = !1) {
|
|
3124
3124
|
super(n ? `Submission ${e} rejected; failure report retained` : `Submission ${e} remains unacknowledged`, { cause: t }), this.submissionId = e, this.rejected = n;
|
|
3125
3125
|
}
|
|
3126
|
-
}, Nr = async (e, t = {}) => {
|
|
3126
|
+
}, Nr = (e) => e instanceof Mr && !e.rejected, Pr = async (e, t = {}) => {
|
|
3127
3127
|
let n = e.now ?? (() => Date.now()), r = e.log, i = t.batchSize ?? 200, a, o, s, c, l, u;
|
|
3128
3128
|
try {
|
|
3129
3129
|
c = await Cr(e, n(), i, e.deadLetterAfterAttempts ?? 50), l = await Tr(e, n(), i), u = await Or(e, n(), i), a = await (e.readPauses?.() ?? Ht(e.store));
|
|
@@ -3167,7 +3167,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3167
3167
|
if (m !== !1 && t.attempts + 1 >= m) return `pending ${r} was dead-lettered after ${t.attempts + 1} failed attempts: ${String(n)}`;
|
|
3168
3168
|
};
|
|
3169
3169
|
for (let t of p) try {
|
|
3170
|
-
await
|
|
3170
|
+
await Rr(e, t, a, d, n());
|
|
3171
3171
|
} catch (i) {
|
|
3172
3172
|
if (d.failed++, i instanceof Mr) {
|
|
3173
3173
|
i.rejected && d.deadLettered++, r?.warn?.(i.message, {
|
|
@@ -3179,7 +3179,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3179
3179
|
let a = h(t, i, "intent");
|
|
3180
3180
|
if (a !== void 0) {
|
|
3181
3181
|
let o = n(), s = String(i);
|
|
3182
|
-
if (await
|
|
3182
|
+
if (await Ir(e, [t], a, s, o, !1).catch((e) => (r?.warn?.("workflow flow control: intent could not be dead-lettered with its report", {
|
|
3183
3183
|
workflow: t.workflowName,
|
|
3184
3184
|
intent: t.id,
|
|
3185
3185
|
cause: String(e)
|
|
@@ -3199,7 +3199,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3199
3199
|
}), await an(e.store, t, String(i), n()).catch(() => {});
|
|
3200
3200
|
}
|
|
3201
3201
|
for (let t of f.values()) try {
|
|
3202
|
-
await
|
|
3202
|
+
await Br(e, t, a, d, n());
|
|
3203
3203
|
} catch (i) {
|
|
3204
3204
|
if (d.failed++, i instanceof Mr) {
|
|
3205
3205
|
i.rejected && d.deadLettered++, r?.warn?.(i.message, {
|
|
@@ -3211,7 +3211,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3211
3211
|
let a = t[0], o = a === void 0 ? void 0 : h(a, i, "batch");
|
|
3212
3212
|
if (a !== void 0 && o !== void 0) {
|
|
3213
3213
|
let s = n(), c = String(i);
|
|
3214
|
-
if (await
|
|
3214
|
+
if (await Ir(e, t, o, c, s, !0).catch((e) => (r?.warn?.("workflow flow control: batch could not be dead-lettered with its report", {
|
|
3215
3215
|
workflow: a.workflowName,
|
|
3216
3216
|
intents: t.map((e) => e.id),
|
|
3217
3217
|
size: t.length,
|
|
@@ -3262,13 +3262,13 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3262
3262
|
cause: String(e)
|
|
3263
3263
|
}));
|
|
3264
3264
|
}
|
|
3265
|
-
let g = await
|
|
3265
|
+
let g = await Wr(e, n()).catch(() => ({ cancelled: 0 }));
|
|
3266
3266
|
return d.timedOut = g.cancelled, g.nextDeadlineAt !== void 0 && (s === void 0 || g.nextDeadlineAt < s) && (s = g.nextDeadlineAt), {
|
|
3267
3267
|
...d,
|
|
3268
3268
|
examined: t.skipPending !== !0 || c.examined || l.examined || u.examined,
|
|
3269
3269
|
...s === void 0 ? {} : { nextDueAt: s }
|
|
3270
3270
|
};
|
|
3271
|
-
},
|
|
3271
|
+
}, Fr = async (e, t, n) => {
|
|
3272
3272
|
let r = t.map((e) => ({
|
|
3273
3273
|
intent: e,
|
|
3274
3274
|
failureId: `wff_${R()}`
|
|
@@ -3322,7 +3322,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3322
3322
|
}
|
|
3323
3323
|
return t;
|
|
3324
3324
|
});
|
|
3325
|
-
},
|
|
3325
|
+
}, Ir = async (e, t, n, r, i, a) => {
|
|
3326
3326
|
let o = `wff_${R()}`;
|
|
3327
3327
|
return e.transaction(async (s) => {
|
|
3328
3328
|
let c = [];
|
|
@@ -3378,7 +3378,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3378
3378
|
}), !await on(s, e, r, i)) throw Error("Dead-lettered queue row disappeared before marking");
|
|
3379
3379
|
return await B(s, o, i), c.length;
|
|
3380
3380
|
});
|
|
3381
|
-
},
|
|
3381
|
+
}, Lr = async (e, t, n, r, i) => {
|
|
3382
3382
|
let a = `wff_${R()}`;
|
|
3383
3383
|
return e.transaction(async (e) => {
|
|
3384
3384
|
let o = [];
|
|
@@ -3448,18 +3448,18 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3448
3448
|
}), !await e.delete("_voltro_workflow_pending", t.id)) throw Error("Expired queue row disappeared before deletion");
|
|
3449
3449
|
return await B(e, a, r), o.length;
|
|
3450
3450
|
});
|
|
3451
|
-
},
|
|
3451
|
+
}, Rr = async (e, t, n, r, i) => {
|
|
3452
3452
|
if (t = {
|
|
3453
3453
|
...t,
|
|
3454
3454
|
payload: G(e.store, t.workflowName, t.payload)
|
|
3455
|
-
}, t.mode === "delayed") return
|
|
3455
|
+
}, t.mode === "delayed") return zr(e, t, n, r, i);
|
|
3456
3456
|
let a = e.controls.get(t.workflowName);
|
|
3457
3457
|
if (a === void 0) {
|
|
3458
|
-
r.expired += await
|
|
3458
|
+
r.expired += await Fr(e, [t], i);
|
|
3459
3459
|
return;
|
|
3460
3460
|
}
|
|
3461
3461
|
if (Je(a, t, i)) {
|
|
3462
|
-
r.expired += await
|
|
3462
|
+
r.expired += await Lr(e, [t], a, i, !1);
|
|
3463
3463
|
return;
|
|
3464
3464
|
}
|
|
3465
3465
|
let o = Ue(a, t.payload), s = await cn({
|
|
@@ -3470,7 +3470,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3470
3470
|
now: i,
|
|
3471
3471
|
reconsidering: !0
|
|
3472
3472
|
});
|
|
3473
|
-
await
|
|
3473
|
+
await Vr(e, {
|
|
3474
3474
|
control: a,
|
|
3475
3475
|
intent: t,
|
|
3476
3476
|
decision: s,
|
|
@@ -3480,9 +3480,9 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3480
3480
|
paused: n,
|
|
3481
3481
|
items: void 0
|
|
3482
3482
|
});
|
|
3483
|
-
},
|
|
3483
|
+
}, zr = async (e, t, n, r, i) => {
|
|
3484
3484
|
if (e.registeredWorkflows !== void 0 && !e.registeredWorkflows.has(t.workflowName)) {
|
|
3485
|
-
r.expired += await
|
|
3485
|
+
r.expired += await Fr(e, [t], i);
|
|
3486
3486
|
return;
|
|
3487
3487
|
}
|
|
3488
3488
|
let a = e.controls.get(t.workflowName) ?? { workflowName: t.workflowName }, o = mt(), s = await e.transaction(async (e) => {
|
|
@@ -3557,9 +3557,9 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3557
3557
|
r.skipped++;
|
|
3558
3558
|
return;
|
|
3559
3559
|
}
|
|
3560
|
-
await
|
|
3560
|
+
await Ur(e, s.submission, a, r, i, a.batch !== void 0, s.keys);
|
|
3561
3561
|
}
|
|
3562
|
-
},
|
|
3562
|
+
}, Br = async (e, t, n, r, i) => {
|
|
3563
3563
|
t = t.map((t) => ({
|
|
3564
3564
|
...t,
|
|
3565
3565
|
payload: G(e.store, t.workflowName, t.payload)
|
|
@@ -3568,16 +3568,16 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3568
3568
|
if (a === void 0) return;
|
|
3569
3569
|
let o = e.controls.get(a.workflowName);
|
|
3570
3570
|
if (o === void 0 || o.batch === void 0) {
|
|
3571
|
-
r.expired += await
|
|
3571
|
+
r.expired += await Fr(e, t, i);
|
|
3572
3572
|
return;
|
|
3573
3573
|
}
|
|
3574
3574
|
let s = [...t].sort((e, t) => e.firstSeenAt - t.firstSeenAt), c = s[0];
|
|
3575
3575
|
if (Je(o, c, i)) {
|
|
3576
|
-
r.expired += await
|
|
3576
|
+
r.expired += await Lr(e, s, o, i, !0);
|
|
3577
3577
|
return;
|
|
3578
3578
|
}
|
|
3579
3579
|
let l = Ue(o, c.payload);
|
|
3580
|
-
await
|
|
3580
|
+
await Vr(e, {
|
|
3581
3581
|
control: o,
|
|
3582
3582
|
intent: c,
|
|
3583
3583
|
decision: await cn({
|
|
@@ -3594,7 +3594,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3594
3594
|
paused: n,
|
|
3595
3595
|
items: s
|
|
3596
3596
|
});
|
|
3597
|
-
},
|
|
3597
|
+
}, Vr = async (e, t) => {
|
|
3598
3598
|
let { control: n, intent: r, decision: i, keys: a, counters: o, now: s, items: c, paused: l } = t;
|
|
3599
3599
|
if (i.kind === "defer") {
|
|
3600
3600
|
await qt({
|
|
@@ -3698,16 +3698,16 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3698
3698
|
o.deferred++;
|
|
3699
3699
|
return;
|
|
3700
3700
|
}
|
|
3701
|
-
await
|
|
3701
|
+
await Ur(e, d.submission, n, o, s, c !== void 0, a);
|
|
3702
3702
|
}
|
|
3703
|
-
},
|
|
3703
|
+
}, Hr = async (e, t, n, r, i) => {
|
|
3704
3704
|
let a = await e.transaction((e) => V(e, t.id));
|
|
3705
3705
|
if (a === void 0 || !a.receiptsBound || a.workflowName !== n.workflowName || a.workflowName !== t.workflowName || a.tenantId !== t.tenantId || a.ledgerId !== t.ledgerId) throw Error("Admission acceptance callback no longer has its resident submission owner");
|
|
3706
3706
|
if (a.executionId !== null) {
|
|
3707
3707
|
if (a.failureId !== null || a.executionId.length === 0 || a.executionId !== a.preparedExecutionId) throw Error("Admission acceptance has contradictory resident execution evidence");
|
|
3708
3708
|
return a.executionId;
|
|
3709
3709
|
}
|
|
3710
|
-
await
|
|
3710
|
+
await Ur(e, a, n, {
|
|
3711
3711
|
admitted: 0,
|
|
3712
3712
|
deferred: 0,
|
|
3713
3713
|
dropped: 0,
|
|
@@ -3718,7 +3718,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3718
3718
|
let o = await e.transaction((e) => V(e, t.id));
|
|
3719
3719
|
if (o?.executionId == null || o.executionId !== o.preparedExecutionId) throw Error("Admission submission has no confirmed engine acceptance");
|
|
3720
3720
|
return o.executionId;
|
|
3721
|
-
},
|
|
3721
|
+
}, Ur = async (e, t, n, r, i, a, o) => {
|
|
3722
3722
|
let s = t.dispatchAttempts === 0 ? 0 : void 0;
|
|
3723
3723
|
try {
|
|
3724
3724
|
if (e.acquireSubmissionCapacity !== void 0 && !await e.acquireSubmissionCapacity(t)) {
|
|
@@ -3780,7 +3780,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3780
3780
|
}
|
|
3781
3781
|
throw new Mr(t.id, r, a);
|
|
3782
3782
|
}
|
|
3783
|
-
},
|
|
3783
|
+
}, Wr = async (e, t) => {
|
|
3784
3784
|
if (e.listRunningRuns === void 0) return { cancelled: 0 };
|
|
3785
3785
|
let n = 0, r;
|
|
3786
3786
|
for (let i of e.controls.values()) {
|
|
@@ -3812,52 +3812,52 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3812
3812
|
cancelled: n,
|
|
3813
3813
|
...r === void 0 ? {} : { nextDeadlineAt: r }
|
|
3814
3814
|
};
|
|
3815
|
-
},
|
|
3816
|
-
|
|
3817
|
-
},
|
|
3815
|
+
}, Gr = 3e5, Kr, qr = (e) => {
|
|
3816
|
+
Kr = e !== void 0 && Number.isFinite(e) && e > 0 ? e : void 0;
|
|
3817
|
+
}, Jr = () => {
|
|
3818
3818
|
let e = process.env.VOLTRO_WORKFLOW_SUSPEND_HINT_MS;
|
|
3819
3819
|
if (e !== void 0) {
|
|
3820
3820
|
let t = Number(e);
|
|
3821
3821
|
if (Number.isFinite(t) && t > 0) return t;
|
|
3822
3822
|
}
|
|
3823
|
-
return
|
|
3824
|
-
},
|
|
3825
|
-
|
|
3826
|
-
},
|
|
3827
|
-
let t =
|
|
3823
|
+
return Kr ?? 3e5;
|
|
3824
|
+
}, Yr = /* @__PURE__ */ new Set(), Xr = () => {
|
|
3825
|
+
Yr.clear();
|
|
3826
|
+
}, Zr = (e) => {
|
|
3827
|
+
let t = Jr();
|
|
3828
3828
|
if (!(e.timeoutMs > t)) return !1;
|
|
3829
3829
|
let n = `${e.workflowName ?? ""}\u0000${e.signalName}`;
|
|
3830
|
-
if (
|
|
3831
|
-
|
|
3830
|
+
if (Yr.has(n)) return !1;
|
|
3831
|
+
Yr.add(n);
|
|
3832
3832
|
let r = e.workflowName === void 0 ? "" : ` in workflow '${e.workflowName}'`;
|
|
3833
3833
|
return (e.warn ?? ((e) => console.warn(e)))(`awaitSignal('${e.signalName}')${r} declares a ${Math.round(e.timeoutMs / 1e3)}s timeout — a wait that long holds a worker fiber for its whole duration. For human-approval-length waits, awaitSignalSuspending (same call shape, from @voltro/workflow) SUSPENDS the run and frees the slot until the signal arrives. This is a hint, not a behaviour change; it is logged once per workflow. Threshold: workflows.suspendSignalHintMs in app.config.ts, or VOLTRO_WORKFLOW_SUSPEND_HINT_MS.`), !0;
|
|
3834
|
-
},
|
|
3834
|
+
}, Qr = async (e, t) => {
|
|
3835
3835
|
if (e) try {
|
|
3836
3836
|
await e.recordEvent(t);
|
|
3837
3837
|
} catch {}
|
|
3838
|
-
},
|
|
3839
|
-
let
|
|
3840
|
-
let
|
|
3841
|
-
|
|
3838
|
+
}, $r = (e, n) => {
|
|
3839
|
+
let r = S.gen(function* () {
|
|
3840
|
+
let r = n.pollIntervalMs ?? 200, i = n.maxPollIntervalMs ?? 5e3, a = n.timeoutMs ?? 864e5, s = yield* S.serviceOption(Se), c;
|
|
3841
|
+
Zr({
|
|
3842
3842
|
workflowName: s._tag === "Some" ? s.value.workflow.name : void 0,
|
|
3843
3843
|
signalName: n.name,
|
|
3844
|
-
timeoutMs:
|
|
3844
|
+
timeoutMs: a,
|
|
3845
3845
|
warn: (e) => {
|
|
3846
3846
|
c = e;
|
|
3847
3847
|
}
|
|
3848
3848
|
}), c !== void 0 && (yield* S.logWarning(c));
|
|
3849
|
-
let l = yield* t, u = yield* S.serviceOption(
|
|
3849
|
+
let l = yield* t, u = yield* S.serviceOption(o), d = u._tag === "Some" ? u.value : void 0;
|
|
3850
3850
|
if (l === void 0) return yield* S.die(/* @__PURE__ */ Error("awaitSignal: no active workflow run id in scope"));
|
|
3851
3851
|
let f = l;
|
|
3852
|
-
yield* S.promise(() =>
|
|
3852
|
+
yield* S.promise(() => Qr(d, {
|
|
3853
3853
|
runId: f,
|
|
3854
3854
|
eventType: "signal-awaited",
|
|
3855
3855
|
payload: { signalName: n.name }
|
|
3856
3856
|
}));
|
|
3857
|
-
let p = Date.now(), m =
|
|
3857
|
+
let p = Date.now(), m = r;
|
|
3858
3858
|
for (;;) {
|
|
3859
3859
|
let t = Date.now() - p;
|
|
3860
|
-
if (t >
|
|
3860
|
+
if (t > a) return yield* S.die(/* @__PURE__ */ Error(`awaitSignal('${n.name}') timed out after ${t}ms`));
|
|
3861
3861
|
let r = {
|
|
3862
3862
|
table: "_voltro_workflow_run_events",
|
|
3863
3863
|
order: [{
|
|
@@ -3868,39 +3868,39 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3868
3868
|
projection: void 0,
|
|
3869
3869
|
skip: void 0,
|
|
3870
3870
|
take: 1e3
|
|
3871
|
-
},
|
|
3871
|
+
}, o = (yield* S.tryPromise({
|
|
3872
3872
|
try: () => e.store.query(r),
|
|
3873
3873
|
catch: (e) => e
|
|
3874
3874
|
})).find((e) => e.payload?.signalName === n.name);
|
|
3875
|
-
if (
|
|
3876
|
-
let e = yield* w.decodeUnknown(n.schema)(
|
|
3877
|
-
return yield* S.promise(() =>
|
|
3875
|
+
if (o !== void 0) {
|
|
3876
|
+
let e = yield* w.decodeUnknown(n.schema)(o.payload?.value);
|
|
3877
|
+
return yield* S.promise(() => Qr(d, {
|
|
3878
3878
|
runId: f,
|
|
3879
3879
|
eventType: "signal-received",
|
|
3880
3880
|
payload: {
|
|
3881
3881
|
signalName: n.name,
|
|
3882
|
-
value:
|
|
3882
|
+
value: o.payload?.value
|
|
3883
3883
|
}
|
|
3884
3884
|
})), e;
|
|
3885
3885
|
}
|
|
3886
|
-
yield* S.sleep(`${m} millis`), m = Math.min(m * 2,
|
|
3886
|
+
yield* S.sleep(`${m} millis`), m = Math.min(m * 2, i);
|
|
3887
3887
|
}
|
|
3888
3888
|
});
|
|
3889
3889
|
return y.make({
|
|
3890
3890
|
name: `await-signal:${n.name}`,
|
|
3891
3891
|
success: n.schema,
|
|
3892
|
-
execute:
|
|
3892
|
+
execute: r
|
|
3893
3893
|
});
|
|
3894
|
-
},
|
|
3894
|
+
}, ei = async (e, t) => {
|
|
3895
3895
|
if (e !== void 0) try {
|
|
3896
3896
|
await e.recordEvent(t);
|
|
3897
3897
|
} catch {}
|
|
3898
|
-
},
|
|
3899
|
-
let
|
|
3900
|
-
let
|
|
3898
|
+
}, ti = (e, n) => {
|
|
3899
|
+
let r = S.gen(function* () {
|
|
3900
|
+
let r = n.pollIntervalMs ?? 200, i = n.maxPollIntervalMs ?? 5e3, a = n.timeoutMs ?? 864e5, s = n.take ?? 500, c = yield* t, l = yield* S.serviceOption(o), u = l._tag === "Some" ? l.value : void 0;
|
|
3901
3901
|
if (c === void 0) return yield* S.die(/* @__PURE__ */ Error("awaitEvent: no active workflow run id in scope"));
|
|
3902
|
-
let d = c, f = yield* n.since === "run-start" ?
|
|
3903
|
-
yield* S.promise(() =>
|
|
3902
|
+
let d = c, f = yield* n.since === "run-start" ? ni(e, d) : S.succeed(/* @__PURE__ */ new Date());
|
|
3903
|
+
yield* S.promise(() => ei(u, {
|
|
3904
3904
|
runId: d,
|
|
3905
3905
|
eventType: "event-awaited",
|
|
3906
3906
|
payload: {
|
|
@@ -3909,10 +3909,10 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3909
3909
|
cutoff: f.toISOString()
|
|
3910
3910
|
}
|
|
3911
3911
|
}));
|
|
3912
|
-
let p = Date.now(), m =
|
|
3912
|
+
let p = Date.now(), m = r, h = 0;
|
|
3913
3913
|
for (;;) {
|
|
3914
3914
|
let t = Date.now() - p;
|
|
3915
|
-
if (t >
|
|
3915
|
+
if (t > a) return yield* S.die(/* @__PURE__ */ Error(`awaitEvent('${n.event}') timed out after ${t}ms having examined ${h} candidate event(s). ${h === 0 ? "NONE were published under that name in the window — check the spelling against ctx.events.publish, and consider since: 'run-start' if the event may have arrived before this step began." : "The predicate rejected all of them — log one payload and compare it with what `match` expects."}`));
|
|
3916
3916
|
let r = {
|
|
3917
3917
|
table: "_voltro_workflow_events",
|
|
3918
3918
|
predicate: D(O("name", n.event), de("occurredAt", f)),
|
|
@@ -3923,14 +3923,14 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3923
3923
|
take: s,
|
|
3924
3924
|
skip: void 0,
|
|
3925
3925
|
projection: void 0
|
|
3926
|
-
},
|
|
3926
|
+
}, o = yield* S.tryPromise({
|
|
3927
3927
|
try: () => e.store.query(r),
|
|
3928
3928
|
catch: (e) => e
|
|
3929
3929
|
});
|
|
3930
|
-
h =
|
|
3931
|
-
for (let e of
|
|
3930
|
+
h = o.length;
|
|
3931
|
+
for (let e of o) {
|
|
3932
3932
|
let t = yield* w.decodeUnknown(n.schema)(e.payload);
|
|
3933
|
-
if (n.match(t)) return yield* S.promise(() =>
|
|
3933
|
+
if (n.match(t)) return yield* S.promise(() => ei(u, {
|
|
3934
3934
|
runId: d,
|
|
3935
3935
|
eventType: "event-received",
|
|
3936
3936
|
payload: {
|
|
@@ -3939,15 +3939,15 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3939
3939
|
}
|
|
3940
3940
|
})), t;
|
|
3941
3941
|
}
|
|
3942
|
-
yield* S.sleep(`${m} millis`), m = Math.min(m * 2,
|
|
3942
|
+
yield* S.sleep(`${m} millis`), m = Math.min(m * 2, i);
|
|
3943
3943
|
}
|
|
3944
3944
|
});
|
|
3945
3945
|
return y.make({
|
|
3946
3946
|
name: `awaitEvent:${n.event}`,
|
|
3947
3947
|
success: n.schema,
|
|
3948
|
-
execute:
|
|
3948
|
+
execute: r
|
|
3949
3949
|
});
|
|
3950
|
-
},
|
|
3950
|
+
}, ni = (e, t) => S.gen(function* () {
|
|
3951
3951
|
let n = (yield* S.tryPromise({
|
|
3952
3952
|
try: () => e.store.query({
|
|
3953
3953
|
table: "_voltro_workflow_runs",
|
|
@@ -3965,10 +3965,10 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3965
3965
|
if (!Number.isNaN(e.getTime())) return e;
|
|
3966
3966
|
}
|
|
3967
3967
|
return /* @__PURE__ */ new Date(0);
|
|
3968
|
-
}),
|
|
3968
|
+
}), ri = (e) => new Promise((t) => setTimeout(t, e)), ii = () => {
|
|
3969
3969
|
let e = globalThis.crypto;
|
|
3970
3970
|
return typeof e?.randomUUID == "function" ? e.randomUUID() : `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`;
|
|
3971
|
-
},
|
|
3971
|
+
}, ai = () => `wfu_${ii()}`, oi = async (e, t) => {
|
|
3972
3972
|
let n = t.id ?? t.executionId;
|
|
3973
3973
|
if (!n) throw Error("workflow message target requires target.id or target.executionId");
|
|
3974
3974
|
let r = await e.query({
|
|
@@ -3990,7 +3990,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3990
3990
|
}))[0];
|
|
3991
3991
|
if (!i) throw Error(`workflow message target not found: ${n}`);
|
|
3992
3992
|
return i;
|
|
3993
|
-
},
|
|
3993
|
+
}, si = class extends Error {
|
|
3994
3994
|
runId;
|
|
3995
3995
|
eventType;
|
|
3996
3996
|
eventId;
|
|
@@ -3998,8 +3998,8 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
3998
3998
|
constructor(e, t, n) {
|
|
3999
3999
|
super(`workflow ${t} for run ${e} was NOT recorded (event ${n}): the run will not see it — the store refused the row, see the recorder's warning`), this.runId = e, this.eventType = t, this.eventId = n, this.name = "WorkflowMessageNotRecorded";
|
|
4000
4000
|
}
|
|
4001
|
-
},
|
|
4002
|
-
let t = await
|
|
4001
|
+
}, ci = async (e) => {
|
|
4002
|
+
let t = await oi(e.store, e.target), n = await e.recorder.recordEvent({
|
|
4003
4003
|
runId: t.id,
|
|
4004
4004
|
eventType: "signal-sent",
|
|
4005
4005
|
payload: {
|
|
@@ -4007,10 +4007,10 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4007
4007
|
value: e.payload
|
|
4008
4008
|
}
|
|
4009
4009
|
});
|
|
4010
|
-
if (n.recorded === !1) throw new
|
|
4010
|
+
if (n.recorded === !1) throw new si(t.id, "signal-sent", n.id);
|
|
4011
4011
|
return { eventId: n.id };
|
|
4012
|
-
},
|
|
4013
|
-
let t = await
|
|
4012
|
+
}, li = async (e) => {
|
|
4013
|
+
let t = await oi(e.store, e.target), n = ai(), r = await e.recorder.recordEvent({
|
|
4014
4014
|
runId: t.id,
|
|
4015
4015
|
eventType: "update-requested",
|
|
4016
4016
|
payload: {
|
|
@@ -4019,7 +4019,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4019
4019
|
value: e.payload
|
|
4020
4020
|
}
|
|
4021
4021
|
});
|
|
4022
|
-
if (r.recorded === !1) throw new
|
|
4022
|
+
if (r.recorded === !1) throw new si(t.id, "update-requested", r.id);
|
|
4023
4023
|
let i = Date.now(), a = e.options?.timeoutMs ?? 3e4, o = e.options?.pollIntervalMs ?? 100;
|
|
4024
4024
|
for (;;) {
|
|
4025
4025
|
let s = {
|
|
@@ -4049,44 +4049,44 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4049
4049
|
}), t;
|
|
4050
4050
|
}
|
|
4051
4051
|
if (Date.now() - i >= a) throw Error(`Timed out waiting for workflow update '${e.updateName}' (${n})`);
|
|
4052
|
-
await
|
|
4052
|
+
await ri(o);
|
|
4053
4053
|
}
|
|
4054
|
-
},
|
|
4054
|
+
}, ui = 864e5, di = "voltro/suspending-signal", fi = (e, t) => `${di}/${e}/${t}`, pi = (e) => te.make(e, { success: w.Unknown }), mi = async (e, t) => {
|
|
4055
4055
|
if (e) try {
|
|
4056
4056
|
await e.recordEvent(t);
|
|
4057
4057
|
} catch {}
|
|
4058
|
-
},
|
|
4059
|
-
let e = n.timeoutMs ??
|
|
4060
|
-
|
|
4061
|
-
runId:
|
|
4058
|
+
}, hi = (e, n) => S.gen(function* () {
|
|
4059
|
+
let e = n.timeoutMs ?? ui, r = yield* re.WorkflowInstance, i = pi(fi(r.workflow.name, n.name)), a = yield* t, s = yield* S.serviceOption(o), c = s._tag === "Some" ? s.value : void 0;
|
|
4060
|
+
a !== void 0 && (yield* S.promise(() => mi(c, {
|
|
4061
|
+
runId: a,
|
|
4062
4062
|
eventType: "signal-awaited",
|
|
4063
4063
|
payload: { signalName: n.name }
|
|
4064
4064
|
})));
|
|
4065
|
-
let l = te.await(
|
|
4065
|
+
let l = te.await(i), u = Number.isFinite(e) ? yield* S.race(l, b.sleep({
|
|
4066
4066
|
name: `await-signal-timeout/${n.name}`,
|
|
4067
4067
|
duration: `${e} millis`
|
|
4068
|
-
}).pipe(S.andThen(S.die(/* @__PURE__ */ Error(`awaitSignalSuspending('${n.name}') timed out after ${e}ms`))))).pipe(S.catchAllCause((e) =>
|
|
4069
|
-
return
|
|
4070
|
-
runId:
|
|
4068
|
+
}).pipe(S.andThen(S.die(/* @__PURE__ */ Error(`awaitSignalSuspending('${n.name}') timed out after ${e}ms`))))).pipe(S.catchAllCause((e) => r.suspended ? x.isInterruptedOnly(e) ? ne.suspend(r) : S.failCause(x.filter(e, (e) => !x.isInterruptType(e))) : S.failCause(e))) : yield* l, d = yield* w.decodeUnknown(n.schema)(u);
|
|
4069
|
+
return a !== void 0 && (yield* S.promise(() => mi(c, {
|
|
4070
|
+
runId: a,
|
|
4071
4071
|
eventType: "signal-received",
|
|
4072
4072
|
payload: {
|
|
4073
4073
|
signalName: n.name,
|
|
4074
4074
|
value: d
|
|
4075
4075
|
}
|
|
4076
4076
|
}))), d;
|
|
4077
|
-
}),
|
|
4077
|
+
}), gi = (e) => S.gen(function* () {
|
|
4078
4078
|
let t = e.target.executionId, n = e.target.workflowName;
|
|
4079
4079
|
if (t === void 0 || n === void 0) {
|
|
4080
4080
|
let r = e.store;
|
|
4081
4081
|
if (r === void 0) return yield* S.die(/* @__PURE__ */ Error("completeSuspendingSignal: provide a store, or target.executionId AND target.workflowName"));
|
|
4082
4082
|
let i = yield* S.tryPromise({
|
|
4083
|
-
try: () =>
|
|
4083
|
+
try: () => oi(r, e.target),
|
|
4084
4084
|
catch: (e) => e
|
|
4085
4085
|
});
|
|
4086
4086
|
t ??= i.executionId, n ??= i.tag;
|
|
4087
4087
|
}
|
|
4088
4088
|
if (t === void 0 || n === void 0) return { completed: !1 };
|
|
4089
|
-
let r =
|
|
4089
|
+
let r = fi(n, e.signalName), i = pi(r), a = new te.TokenParsed({
|
|
4090
4090
|
workflowName: n,
|
|
4091
4091
|
executionId: t,
|
|
4092
4092
|
deferredName: r
|
|
@@ -4095,11 +4095,11 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4095
4095
|
token: a,
|
|
4096
4096
|
exit: ie.succeed(e.payload)
|
|
4097
4097
|
}), { completed: !0 };
|
|
4098
|
-
}), Q = "_voltro_budget_holds",
|
|
4098
|
+
}), Q = "_voltro_budget_holds", _i = "budget-hold", vi = (e) => `${_i}:${e}`, yi = (e) => `${e.executionId}/${e.stepName}/${e.budget}#${e.generation}`, bi = async (e, t) => (await e.query({
|
|
4099
4099
|
table: Q,
|
|
4100
4100
|
predicate: D(O("executionId", t.executionId), O("stepName", t.stepName), O("budget", t.budget)),
|
|
4101
4101
|
order: []
|
|
4102
|
-
})).length,
|
|
4102
|
+
})).length, xi = F(Q, {
|
|
4103
4103
|
id: j({ prefix: "bhd" }),
|
|
4104
4104
|
holdKey: I().maxLength(191),
|
|
4105
4105
|
budget: I(),
|
|
@@ -4113,33 +4113,33 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4113
4113
|
heldAt: L().default("now"),
|
|
4114
4114
|
releasedAt: L().nullable(),
|
|
4115
4115
|
outcome: I().nullable()
|
|
4116
|
-
}).index(["budget", "releasedAt"]),
|
|
4116
|
+
}).index(["budget", "releasedAt"]), Si = () => {
|
|
4117
4117
|
ve({
|
|
4118
4118
|
source: "framework",
|
|
4119
4119
|
table: Q,
|
|
4120
4120
|
timeColumn: "releasedAt",
|
|
4121
4121
|
ttlMs: ye(process.env.VOLTRO_BUDGET_HOLDS_TTL_HOURS, 720)
|
|
4122
4122
|
});
|
|
4123
|
-
},
|
|
4123
|
+
}, Ci = class extends Error {
|
|
4124
4124
|
budget;
|
|
4125
4125
|
holdKey;
|
|
4126
4126
|
constructor(e, t, n) {
|
|
4127
4127
|
super(`budget '${e}': the run was suspended waiting for headroom and gave up after ${n}ms (hold ${t}). Nothing was spent. Raise the budget, reset its window, or lift the hold, then re-drive the run.`), this.name = "BudgetHoldExpired", this.budget = e, this.holdKey = t;
|
|
4128
4128
|
}
|
|
4129
|
-
},
|
|
4130
|
-
|
|
4129
|
+
}, wi = 6048e5, Ti = (e) => S.gen(function* () {
|
|
4130
|
+
Si();
|
|
4131
4131
|
let t = e.timeoutMs ?? 6048e5, n = e.recheckEveryMs ?? 9e5, r = {
|
|
4132
4132
|
executionId: e.executionId,
|
|
4133
4133
|
stepName: e.stepName,
|
|
4134
4134
|
budget: e.budget
|
|
4135
4135
|
};
|
|
4136
4136
|
for (let i = 0;; i++) {
|
|
4137
|
-
let a = yield* S.promise(() =>
|
|
4137
|
+
let a = yield* S.promise(() => Di(e.store, r)), o = a.length === 0 ? Date.now() : Ei(a[0]?.heldAt), s = Number.isFinite(t) ? t - (Date.now() - o) : Infinity, c = yi({
|
|
4138
4138
|
...r,
|
|
4139
4139
|
generation: i
|
|
4140
4140
|
});
|
|
4141
|
-
if (s <= 0) return yield* S.promise(() =>
|
|
4142
|
-
let l =
|
|
4141
|
+
if (s <= 0) return yield* S.promise(() => Oi(e.store, r, "expired")), yield* S.fail(new Ci(e.budget, c, t));
|
|
4142
|
+
let l = vi(c);
|
|
4143
4143
|
yield* S.promise(() => e.store.insertIgnore(Q, {
|
|
4144
4144
|
id: k({
|
|
4145
4145
|
kind: "typeid",
|
|
@@ -4159,7 +4159,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4159
4159
|
outcome: null
|
|
4160
4160
|
}, { conflictColumns: ["holdKey"] }));
|
|
4161
4161
|
let u = Math.min(n, s);
|
|
4162
|
-
if (yield*
|
|
4162
|
+
if (yield* hi({ store: e.store }, {
|
|
4163
4163
|
name: l,
|
|
4164
4164
|
schema: w.Unknown,
|
|
4165
4165
|
timeoutMs: u
|
|
@@ -4168,16 +4168,16 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4168
4168
|
outcome: "recheck"
|
|
4169
4169
|
}, { where: D(O("holdKey", c), N("releasedAt")) })), yield* e.hasHeadroom) return;
|
|
4170
4170
|
}
|
|
4171
|
-
}),
|
|
4171
|
+
}), Ei = (e) => e instanceof Date ? e.getTime() : typeof e == "string" ? Date.parse(e) : Date.now(), Di = async (e, t) => [...await e.query({
|
|
4172
4172
|
table: Q,
|
|
4173
4173
|
predicate: D(O("executionId", t.executionId), O("stepName", t.stepName), O("budget", t.budget)),
|
|
4174
4174
|
order: []
|
|
4175
|
-
})].sort((e, t) => String(e.id).localeCompare(String(t.id))),
|
|
4175
|
+
})].sort((e, t) => String(e.id).localeCompare(String(t.id))), Oi = async (e, t, n) => {
|
|
4176
4176
|
await e.updateMany(Q, {
|
|
4177
4177
|
releasedAt: /* @__PURE__ */ new Date(),
|
|
4178
4178
|
outcome: n
|
|
4179
4179
|
}, { where: D(O("executionId", t.executionId), O("stepName", t.stepName), O("budget", t.budget), N("releasedAt")) });
|
|
4180
|
-
},
|
|
4180
|
+
}, ki = (e) => S.gen(function* () {
|
|
4181
4181
|
let t = e.tenantId === void 0 ? D(O("budget", e.budget), N("releasedAt")) : D(O("budget", e.budget), O("tenantId", e.tenantId), N("releasedAt")), n = yield* S.promise(() => e.store.query({
|
|
4182
4182
|
table: Q,
|
|
4183
4183
|
predicate: t,
|
|
@@ -4186,7 +4186,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4186
4186
|
for (let t of n) (yield* S.promise(() => e.store.updateMany("_voltro_budget_holds", {
|
|
4187
4187
|
releasedAt: /* @__PURE__ */ new Date(),
|
|
4188
4188
|
outcome: e.outcome ?? "released"
|
|
4189
|
-
}, { where: D(O("id", String(t.id)), N("releasedAt")) }))) === 1 && (yield*
|
|
4189
|
+
}, { where: D(O("id", String(t.id)), N("releasedAt")) }))) === 1 && (yield* gi({
|
|
4190
4190
|
target: {
|
|
4191
4191
|
executionId: String(t.executionId),
|
|
4192
4192
|
workflowName: String(t.workflowName)
|
|
@@ -4198,7 +4198,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4198
4198
|
}
|
|
4199
4199
|
}).pipe(S.catchAll(() => S.succeed({ completed: !1 }))), r += 1);
|
|
4200
4200
|
return { released: r };
|
|
4201
|
-
}),
|
|
4201
|
+
}), Ai = async (e, t) => {
|
|
4202
4202
|
let n = t?.budget === void 0 ? N("releasedAt") : D(O("budget", t.budget), N("releasedAt"));
|
|
4203
4203
|
return (await e.query({
|
|
4204
4204
|
table: Q,
|
|
@@ -4214,8 +4214,8 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4214
4214
|
stepName: String(e.stepName),
|
|
4215
4215
|
heldAt: e.heldAt instanceof Date ? e.heldAt.toISOString() : String(e.heldAt ?? "")
|
|
4216
4216
|
}));
|
|
4217
|
-
},
|
|
4218
|
-
let t = await
|
|
4217
|
+
}, ji = async (e) => {
|
|
4218
|
+
let t = await Ai(e), n = /* @__PURE__ */ new Map();
|
|
4219
4219
|
for (let e of t) {
|
|
4220
4220
|
let t = `${e.budget}\u0000${e.tenantId ?? ""}`;
|
|
4221
4221
|
n.has(t) || n.set(t, {
|
|
@@ -4224,24 +4224,24 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4224
4224
|
});
|
|
4225
4225
|
}
|
|
4226
4226
|
return [...n.values()];
|
|
4227
|
-
},
|
|
4227
|
+
}, Mi = async (e, t) => {
|
|
4228
4228
|
if (e) try {
|
|
4229
4229
|
await e.recordEvent(t);
|
|
4230
4230
|
} catch {}
|
|
4231
|
-
},
|
|
4231
|
+
}, Ni = (e) => {
|
|
4232
4232
|
let t = x.failureOption(e), n = Array.from(x.defects(e)), r = t._tag === "Some" ? t.value : n[0] ?? x.squash(e);
|
|
4233
4233
|
return {
|
|
4234
4234
|
errorTag: r && typeof r == "object" && "_tag" in r ? String(r._tag) : null,
|
|
4235
4235
|
errorMessage: r?.message ?? String(r)
|
|
4236
4236
|
};
|
|
4237
|
-
},
|
|
4238
|
-
let
|
|
4239
|
-
let
|
|
4237
|
+
}, Pi = (e, n) => {
|
|
4238
|
+
let r = S.gen(function* () {
|
|
4239
|
+
let r = n.pollIntervalMs ?? 200, i = n.maxPollIntervalMs ?? 5e3, a = n.timeoutMs ?? 3e4, s = yield* t, c = yield* S.serviceOption(o), l = c._tag === "Some" ? c.value : void 0;
|
|
4240
4240
|
if (s === void 0) return yield* S.die(/* @__PURE__ */ Error("awaitUpdate: no active workflow run id in scope"));
|
|
4241
|
-
let u = s, d = Date.now(), f =
|
|
4241
|
+
let u = s, d = Date.now(), f = r;
|
|
4242
4242
|
for (;;) {
|
|
4243
4243
|
let t = Date.now() - d;
|
|
4244
|
-
if (t >
|
|
4244
|
+
if (t > a) return yield* S.die(/* @__PURE__ */ Error(`awaitUpdate('${n.name}') timed out after ${t}ms`));
|
|
4245
4245
|
let r = {
|
|
4246
4246
|
table: "_voltro_workflow_run_events",
|
|
4247
4247
|
order: [{
|
|
@@ -4252,13 +4252,13 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4252
4252
|
projection: void 0,
|
|
4253
4253
|
skip: void 0,
|
|
4254
4254
|
take: 1e3
|
|
4255
|
-
},
|
|
4255
|
+
}, o = yield* S.tryPromise({
|
|
4256
4256
|
try: () => e.store.query(r),
|
|
4257
4257
|
catch: (e) => e
|
|
4258
|
-
}), s = new Set(
|
|
4258
|
+
}), s = new Set(o.filter((e) => e.eventType === "update-completed" || e.eventType === "update-failed").map((e) => e.payload?.updateId).filter((e) => typeof e == "string" && e.length > 0)), c = o.find((e) => e.eventType === "update-requested" && e.payload?.updateName === n.name && typeof e.payload.updateId == "string" && !s.has(e.payload.updateId));
|
|
4259
4259
|
if (c !== void 0) {
|
|
4260
4260
|
let e = c.payload.updateId;
|
|
4261
|
-
yield* S.promise(() =>
|
|
4261
|
+
yield* S.promise(() => Mi(l, {
|
|
4262
4262
|
runId: u,
|
|
4263
4263
|
eventType: "update-received",
|
|
4264
4264
|
payload: {
|
|
@@ -4266,24 +4266,24 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4266
4266
|
updateName: n.name
|
|
4267
4267
|
}
|
|
4268
4268
|
}));
|
|
4269
|
-
let t = yield* w.decodeUnknown(n.schema)(c.payload?.value).pipe(S.tapErrorCause((t) => S.promise(() =>
|
|
4269
|
+
let t = yield* w.decodeUnknown(n.schema)(c.payload?.value).pipe(S.tapErrorCause((t) => S.promise(() => Mi(l, {
|
|
4270
4270
|
runId: u,
|
|
4271
4271
|
eventType: "update-failed",
|
|
4272
4272
|
payload: {
|
|
4273
4273
|
updateId: e,
|
|
4274
4274
|
updateName: n.name,
|
|
4275
|
-
...
|
|
4275
|
+
...Ni(t)
|
|
4276
4276
|
}
|
|
4277
|
-
})))), r = yield* (n.handle ? n.handle(t) : S.succeed(t)).pipe(S.flatMap((e) => n.success ? w.decodeUnknown(n.success)(e) : S.succeed(e))).pipe(S.tapErrorCause((t) => S.promise(() =>
|
|
4277
|
+
})))), r = yield* (n.handle ? n.handle(t) : S.succeed(t)).pipe(S.flatMap((e) => n.success ? w.decodeUnknown(n.success)(e) : S.succeed(e))).pipe(S.tapErrorCause((t) => S.promise(() => Mi(l, {
|
|
4278
4278
|
runId: u,
|
|
4279
4279
|
eventType: "update-failed",
|
|
4280
4280
|
payload: {
|
|
4281
4281
|
updateId: e,
|
|
4282
4282
|
updateName: n.name,
|
|
4283
|
-
...
|
|
4283
|
+
...Ni(t)
|
|
4284
4284
|
}
|
|
4285
4285
|
}))));
|
|
4286
|
-
return yield* S.promise(() =>
|
|
4286
|
+
return yield* S.promise(() => Mi(l, {
|
|
4287
4287
|
runId: u,
|
|
4288
4288
|
eventType: "update-completed",
|
|
4289
4289
|
payload: {
|
|
@@ -4293,15 +4293,15 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4293
4293
|
}
|
|
4294
4294
|
})), r;
|
|
4295
4295
|
}
|
|
4296
|
-
yield* S.sleep(`${f} millis`), f = Math.min(f * 2,
|
|
4296
|
+
yield* S.sleep(`${f} millis`), f = Math.min(f * 2, i);
|
|
4297
4297
|
}
|
|
4298
4298
|
});
|
|
4299
4299
|
return y.make({
|
|
4300
4300
|
name: `await-update:${n.name}`,
|
|
4301
4301
|
success: n.success ?? n.schema,
|
|
4302
|
-
execute:
|
|
4302
|
+
execute: r
|
|
4303
4303
|
});
|
|
4304
|
-
},
|
|
4304
|
+
}, Fi = (e) => {
|
|
4305
4305
|
if (e == null) return null;
|
|
4306
4306
|
if (e instanceof Date) return e;
|
|
4307
4307
|
if (typeof e == "string" || typeof e == "number") {
|
|
@@ -4309,7 +4309,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4309
4309
|
return Number.isNaN(t.getTime()) ? null : t;
|
|
4310
4310
|
}
|
|
4311
4311
|
return null;
|
|
4312
|
-
},
|
|
4312
|
+
}, Ii = (e) => typeof e == "number" ? e : e == null ? null : Number(e), Li = (e) => e == null ? null : String(e), Ri = (e) => {
|
|
4313
4313
|
let t = /* @__PURE__ */ new Map();
|
|
4314
4314
|
for (let n of e) {
|
|
4315
4315
|
let e = String(n.stepName), r = t.get(e);
|
|
@@ -4317,27 +4317,27 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4317
4317
|
}
|
|
4318
4318
|
let n = [];
|
|
4319
4319
|
for (let [e, r] of t) {
|
|
4320
|
-
r.sort((e, t) => (
|
|
4321
|
-
let t = r[r.length - 1], i =
|
|
4320
|
+
r.sort((e, t) => (Ii(e.attempt) ?? 0) - (Ii(t.attempt) ?? 0));
|
|
4321
|
+
let t = r[r.length - 1], i = Li(t.errorTag), a = Li(t.errorMessage), o = i !== null || a !== null ? {
|
|
4322
4322
|
tag: i,
|
|
4323
4323
|
message: a ?? ""
|
|
4324
4324
|
} : null;
|
|
4325
4325
|
n.push({
|
|
4326
4326
|
name: e,
|
|
4327
|
-
attempt:
|
|
4327
|
+
attempt: Ii(t.attempt) ?? r.length,
|
|
4328
4328
|
attempts: r.length,
|
|
4329
4329
|
status: t.status ?? "running",
|
|
4330
4330
|
input: t.input ?? null,
|
|
4331
4331
|
output: t.output ?? null,
|
|
4332
4332
|
error: o,
|
|
4333
|
-
durationMs:
|
|
4333
|
+
durationMs: Ii(t.durationMs)
|
|
4334
4334
|
});
|
|
4335
4335
|
}
|
|
4336
4336
|
return n.sort((t, n) => {
|
|
4337
4337
|
let r = e.find((e) => String(e.stepName) === t.name), i = e.find((e) => String(e.stepName) === n.name);
|
|
4338
|
-
return (
|
|
4338
|
+
return (Fi(r?.startedAt)?.getTime() ?? 0) - (Fi(i?.startedAt)?.getTime() ?? 0);
|
|
4339
4339
|
}), n;
|
|
4340
|
-
},
|
|
4340
|
+
}, zi = (e) => {
|
|
4341
4341
|
if (e == null) return null;
|
|
4342
4342
|
if (typeof e == "string") try {
|
|
4343
4343
|
return JSON.parse(e);
|
|
@@ -4345,30 +4345,30 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4345
4345
|
return null;
|
|
4346
4346
|
}
|
|
4347
4347
|
return typeof e == "object" ? e : null;
|
|
4348
|
-
},
|
|
4348
|
+
}, Bi = async (e, t) => {
|
|
4349
4349
|
let n = ge(we), r = (await t.query(n.where(he(O("id", e), O("executionId", e))).limit(1).descriptor))[0];
|
|
4350
4350
|
if (r === void 0) return null;
|
|
4351
4351
|
let i = String(r.id), a = ge(Te), o = await t.query(a.where(O("runId", i)).descriptor);
|
|
4352
4352
|
return {
|
|
4353
4353
|
id: i,
|
|
4354
|
-
executionId:
|
|
4355
|
-
name:
|
|
4354
|
+
executionId: Li(r.executionId) ?? "",
|
|
4355
|
+
name: Li(r.tag) ?? "",
|
|
4356
4356
|
status: r.status ?? "running",
|
|
4357
4357
|
input: r.payload ?? null,
|
|
4358
4358
|
output: r.output ?? null,
|
|
4359
|
-
subject:
|
|
4360
|
-
source:
|
|
4361
|
-
steps:
|
|
4362
|
-
startedAt:
|
|
4363
|
-
finishedAt:
|
|
4364
|
-
traceId:
|
|
4365
|
-
parentExecutionId:
|
|
4366
|
-
parentClosePolicy:
|
|
4359
|
+
subject: zi(r.subject),
|
|
4360
|
+
source: Li(r.source),
|
|
4361
|
+
steps: Ri(o),
|
|
4362
|
+
startedAt: Fi(r.startedAt) ?? /* @__PURE__ */ new Date(0),
|
|
4363
|
+
finishedAt: Fi(r.completedAt),
|
|
4364
|
+
traceId: Li(r.traceId),
|
|
4365
|
+
parentExecutionId: Li(r.parentExecutionId),
|
|
4366
|
+
parentClosePolicy: Li(r.parentClosePolicy)
|
|
4367
4367
|
};
|
|
4368
|
-
},
|
|
4369
|
-
let e = [], t = [], n = 0,
|
|
4368
|
+
}, Vi = () => {
|
|
4369
|
+
let e = [], t = [], n = 0, r = 0;
|
|
4370
4370
|
return {
|
|
4371
|
-
layer: se.succeed(
|
|
4371
|
+
layer: se.succeed(o, {
|
|
4372
4372
|
startStep: async ({ runId: t, stepName: r, attempt: i, stepInput: a, retryPolicy: o }) => {
|
|
4373
4373
|
let s = `wfstep_mem_${++n}`;
|
|
4374
4374
|
return e.push({
|
|
@@ -4396,13 +4396,13 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4396
4396
|
let o = e.find((e) => e.id === t);
|
|
4397
4397
|
o !== void 0 && (o.status = "failed", o.errorTag = n, o.errorMessage = r, o.errorCause = i ?? null, o.completedAt = /* @__PURE__ */ new Date(), o.durationMs = a);
|
|
4398
4398
|
},
|
|
4399
|
-
recordEvent: async ({ runId: e, eventType: n, payload:
|
|
4400
|
-
let s = `wfev_mem_${++
|
|
4399
|
+
recordEvent: async ({ runId: e, eventType: n, payload: i, stepName: a, attempt: o }) => {
|
|
4400
|
+
let s = `wfev_mem_${++r}`;
|
|
4401
4401
|
return t.push({
|
|
4402
4402
|
id: s,
|
|
4403
4403
|
runId: e,
|
|
4404
4404
|
eventType: n,
|
|
4405
|
-
payload:
|
|
4405
|
+
payload: i ?? null,
|
|
4406
4406
|
stepName: a ?? null,
|
|
4407
4407
|
attempt: o ?? null,
|
|
4408
4408
|
occurredAt: /* @__PURE__ */ new Date()
|
|
@@ -4415,13 +4415,13 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4415
4415
|
readSteps: () => e,
|
|
4416
4416
|
readEvents: () => t
|
|
4417
4417
|
};
|
|
4418
|
-
},
|
|
4418
|
+
}, Hi = (e, t, n) => S.gen(function* () {
|
|
4419
4419
|
let r = yield* Se;
|
|
4420
4420
|
for (;;) {
|
|
4421
4421
|
if (yield* S.tryPromise(() => g(t, e)).pipe(S.catchAll(() => S.sync(() => (n(), !1))))) return r.interrupted = !0, yield* S.interrupt;
|
|
4422
4422
|
yield* S.sleep(1e3);
|
|
4423
4423
|
}
|
|
4424
|
-
}),
|
|
4424
|
+
}), Ui = 8192, Wi = 3, Gi = 2e3, Ki = () => {
|
|
4425
4425
|
let e = (e) => {
|
|
4426
4426
|
if (e === void 0) return;
|
|
4427
4427
|
let t = Number(e);
|
|
@@ -4431,7 +4431,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4431
4431
|
...t === void 0 ? {} : { maxRunReclaims: t },
|
|
4432
4432
|
...n === void 0 ? {} : { replayShapeLimit: n }
|
|
4433
4433
|
};
|
|
4434
|
-
},
|
|
4434
|
+
}, qi = (e) => {
|
|
4435
4435
|
let t = typeof e == "string" ? (() => {
|
|
4436
4436
|
try {
|
|
4437
4437
|
return JSON.parse(e);
|
|
@@ -4440,10 +4440,10 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4440
4440
|
}
|
|
4441
4441
|
})() : e;
|
|
4442
4442
|
if (Array.isArray(t)) return t.filter((e) => typeof e == "string");
|
|
4443
|
-
},
|
|
4443
|
+
}, Ji = () => {
|
|
4444
4444
|
let e = globalThis.crypto;
|
|
4445
4445
|
return typeof e?.randomUUID == "function" ? e.randomUUID() : `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`;
|
|
4446
|
-
},
|
|
4446
|
+
}, Yi = (e) => `${e}_${Ji()}`, Xi = (e, t = Ui) => {
|
|
4447
4447
|
if (e == null) return e;
|
|
4448
4448
|
try {
|
|
4449
4449
|
let n = JSON.stringify(e);
|
|
@@ -4459,8 +4459,8 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4459
4459
|
let t = {};
|
|
4460
4460
|
for (let [n, r] of Object.entries(e)) t[n] = r instanceof Date ? r.toISOString() : r;
|
|
4461
4461
|
return t;
|
|
4462
|
-
},
|
|
4463
|
-
let t = e.truncateBytes ??
|
|
4462
|
+
}, Zi = (e) => {
|
|
4463
|
+
let t = e.truncateBytes ?? Ui, n = e.makeId ?? Yi, r = (t, n) => e.log?.warn(t, n), i = e.encryptStepPayload ?? ((e) => e), a = e.emit, o = e.recording === "coarse";
|
|
4464
4464
|
return {
|
|
4465
4465
|
startStep: async ({ runId: s, stepName: c, attempt: l, stepInput: u, retryPolicy: d }) => {
|
|
4466
4466
|
if (!o) try {
|
|
@@ -4470,7 +4470,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4470
4470
|
stepName: c,
|
|
4471
4471
|
attempt: l,
|
|
4472
4472
|
status: "running",
|
|
4473
|
-
input: u === void 0 ? null : i(
|
|
4473
|
+
input: u === void 0 ? null : i(Xi(u, t)),
|
|
4474
4474
|
retryPolicy: d ?? null,
|
|
4475
4475
|
output: null,
|
|
4476
4476
|
errorTag: null,
|
|
@@ -4497,7 +4497,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4497
4497
|
if (!o) try {
|
|
4498
4498
|
let r = await e.store.update("_voltro_workflow_run_steps", n, {
|
|
4499
4499
|
status: "succeeded",
|
|
4500
|
-
output: i(
|
|
4500
|
+
output: i(Xi(s, t)),
|
|
4501
4501
|
completedAt: /* @__PURE__ */ new Date(),
|
|
4502
4502
|
durationMs: c
|
|
4503
4503
|
});
|
|
@@ -4518,7 +4518,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4518
4518
|
status: "failed",
|
|
4519
4519
|
errorTag: s,
|
|
4520
4520
|
errorMessage: c,
|
|
4521
|
-
errorCause: l === void 0 ? null : i(
|
|
4521
|
+
errorCause: l === void 0 ? null : i(Xi(l, t)),
|
|
4522
4522
|
completedAt: /* @__PURE__ */ new Date(),
|
|
4523
4523
|
durationMs: u
|
|
4524
4524
|
});
|
|
@@ -4566,7 +4566,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4566
4566
|
};
|
|
4567
4567
|
}
|
|
4568
4568
|
};
|
|
4569
|
-
},
|
|
4569
|
+
}, Qi = (e, t, n) => S.gen(function* () {
|
|
4570
4570
|
let r = e.store.query;
|
|
4571
4571
|
if (r === void 0) return;
|
|
4572
4572
|
let i = e.replayShapeLimit ?? 2e3, a = yield* S.promise(() => r.call(e.store, {
|
|
@@ -4596,8 +4596,8 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4596
4596
|
return typeof t == "string" ? [{ stepName: t }] : [];
|
|
4597
4597
|
});
|
|
4598
4598
|
return o.length === 0 ? void 0 : s(o);
|
|
4599
|
-
}),
|
|
4600
|
-
let u = s.truncateBytes ??
|
|
4599
|
+
}), $i = (s, l) => {
|
|
4600
|
+
let u = s.truncateBytes ?? Ui, d = s.makeId ?? Yi, f = s.recorder ?? Zi(s), p = (e, t) => s.log?.warn(e, t), m = s.emit, g = (e) => S.gen(function* () {
|
|
4601
4601
|
yield* S.sync(() => m?.("workflowEvents", {
|
|
4602
4602
|
op: "insert",
|
|
4603
4603
|
row: $(e)
|
|
@@ -4644,14 +4644,14 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4644
4644
|
}
|
|
4645
4645
|
});
|
|
4646
4646
|
return (ee, y) => S.gen(function* () {
|
|
4647
|
-
let b = Date.now(), te = yield* oe.get(
|
|
4647
|
+
let b = Date.now(), te = yield* oe.get(r), re = yield* oe.get(i), C = s.parentExecutionId ?? te ?? null, se = s.parentGeneration ?? (s.parentExecutionId == null ? re : void 0) ?? null, w = s.parentClosePolicy ?? null, T, E = (e, t) => t.pipe(S.catchAllCause((t) => x.isInterrupted(t) ? S.failCause(t) : S.sync(() => {
|
|
4648
4648
|
let n = x.squash(t);
|
|
4649
4649
|
p(e, {
|
|
4650
4650
|
tag: s.name,
|
|
4651
4651
|
executionId: y,
|
|
4652
4652
|
reason: n?.message ?? String(n)
|
|
4653
4653
|
});
|
|
4654
|
-
}))), D = `wfrg_${
|
|
4654
|
+
}))), D = `wfrg_${Ji()}`, le = yield* S.serviceOption(h), ue = d("wr"), O = yield* S.sync(() => s.encodePayload === void 0 ? ee : s.encodePayload(ee)), k = yield* S.promise(() => s.transaction((e) => Sn(e, {
|
|
4655
4655
|
workflowName: s.name,
|
|
4656
4656
|
executionId: y,
|
|
4657
4657
|
generation: D,
|
|
@@ -4731,7 +4731,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4731
4731
|
}
|
|
4732
4732
|
let j = s.workflowPatches ?? [], fe;
|
|
4733
4733
|
if (A?.id !== void 0) {
|
|
4734
|
-
T = A.id, j =
|
|
4734
|
+
T = A.id, j = qi(A.workflowPatches) ?? j;
|
|
4735
4735
|
let e = k.row.reclaimCount;
|
|
4736
4736
|
if (typeof e != "number" || !Number.isSafeInteger(e) || e < 0) return yield* S.die(/* @__PURE__ */ Error("Recorded workflow entry has an invalid reclaim counter"));
|
|
4737
4737
|
let t = e > 0, n = s.maxRunReclaims ?? 3;
|
|
@@ -4769,7 +4769,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4769
4769
|
let i = yield* Se;
|
|
4770
4770
|
return yield* ne.suspend(i);
|
|
4771
4771
|
}
|
|
4772
|
-
fe = yield*
|
|
4772
|
+
fe = yield* Qi(s, T, p), yield* E("failed to record workflow re-entry", S.gen(function* () {
|
|
4773
4773
|
m?.("workflowRuns", {
|
|
4774
4774
|
op: "update",
|
|
4775
4775
|
row: $(k.row)
|
|
@@ -4804,7 +4804,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4804
4804
|
}));
|
|
4805
4805
|
}
|
|
4806
4806
|
}));
|
|
4807
|
-
let M = s.subject?.tenantId, pe = S.suspend(() => l(ee, y, D)).pipe(S.locally(t, T), S.locally(
|
|
4807
|
+
let M = s.subject?.tenantId, pe = S.suspend(() => l(ee, y, D)).pipe(S.locally(t, T), S.locally(r, y), S.locally(i, D), S.locally(n, typeof M == "string" ? M : void 0), S.locally(a, j), S.locally(c, fe), S.provideService(o, f)), N = s.pluginWorkflowStepLayer ? pe.pipe(S.provide(s.pluginWorkflowStepLayer)) : pe, P = yield* ne.intoResult(S.raceWith(N, Hi({
|
|
4808
4808
|
runId: T,
|
|
4809
4809
|
workflowName: s.name,
|
|
4810
4810
|
executionId: y,
|
|
@@ -4954,7 +4954,7 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4954
4954
|
durationMs: ge - b,
|
|
4955
4955
|
outcome: {
|
|
4956
4956
|
status: "succeeded",
|
|
4957
|
-
output:
|
|
4957
|
+
output: Xi(he, u)
|
|
4958
4958
|
}
|
|
4959
4959
|
})));
|
|
4960
4960
|
return _e.kind === "committed" ? (T && (yield* E("failed to record workflow success", S.gen(function* () {
|
|
@@ -4971,4 +4971,4 @@ var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
|
4971
4971
|
});
|
|
4972
4972
|
};
|
|
4973
4973
|
//#endregion
|
|
4974
|
-
export {
|
|
4974
|
+
export { Qn as $, B as $t, ti as A, qt as At, Nr as B, Ft as Bt, hi as C, Te as Cn, Zt as Ct, oi as D, Ut as Dt, ai as E, Jt as Et, Jr as F, Xt as Ft, tr as G, mt as Gt, pr as H, pt as Ht, qr as I, Wt as It, er as J, Tt as Jt, nr as K, Et as Kt, jr as L, sn as Lt, Gr as M, Gt as Mt, Zr as N, Ht as Nt, ci as O, Bt as Ot, Xr as P, Y as Pt, sr as Q, xt as Qt, Hr as R, It as Rt, Ti as S, Ee as Sn, nn as St, fi as T, Ce as Tn, an as Tt, fr as U, Ct as Ut, dr as V, Pt as Vt, br as W, Dt as Wt, or as X, Ot as Xt, $n as Y, V as Yt, ur as Z, bt as Zt, yi as _, Ie as _n, U as _t, Ki as a, Ge as an, Wn as at, Ai as b, Me as bn, en as bt, $i as c, We as cn, On as ct, Pi as d, ze as dn, Sn as dt, lt as en, Zn as et, Q as f, Oe as fn, gn as ft, bi as g, ke as gn, Lt as gt, xi as h, je as hn, zt as ht, qi as i, Xe as in, Un as it, $r as j, ln as jt, li as k, Qt as kt, Vi as l, He as ln, wn as lt, wi as m, Ae as mn, W as mt, Gi as n, $e as nn, Kn as nt, $ as o, Ye as on, Vn as ot, Ci as p, Fe as pn, hn as pt, rr as q, vt as qt, Zi as r, Be as rn, Jn as rt, Xi as s, Je as sn, Hn as st, Wi as t, z as tn, Yn as tt, Bi as u, Ue as un, Dn as ut, vi as v, Pe as vn, $t as vt, gi as w, we as wn, cn as wt, ki as x, De as xn, tn as xt, ji as y, Ne as yn, on as yt, Pr as z, Nt as zt };
|