@voltro/workflow 0.77.1 → 0.78.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 +38 -0
- package/dist/clusterTestSuite.js +1 -1
- package/dist/index.d.ts +18 -0
- package/dist/index.js +3 -3
- package/dist/{src-BvXFdkkW.js → src-Bq0LY2Gf.js} +425 -425
- package/package.json +4 -4
|
@@ -422,7 +422,7 @@ var Ce = re.layerMemory, we = F("_voltro_workflow_runs", {
|
|
|
422
422
|
let r, i = t === "submissionId" ? O(t, n) : D(O(t, n), N("submissionId"), N("terminal"));
|
|
423
423
|
for (;;) {
|
|
424
424
|
let t = await e.query({
|
|
425
|
-
table:
|
|
425
|
+
table: At,
|
|
426
426
|
predicate: r === void 0 ? i : D(i, A("id", r)),
|
|
427
427
|
order: [{
|
|
428
428
|
column: "id",
|
|
@@ -434,7 +434,7 @@ var Ce = re.layerMemory, we = F("_voltro_workflow_runs", {
|
|
|
434
434
|
});
|
|
435
435
|
if (t.length === 0) return !1;
|
|
436
436
|
for (let n of t) {
|
|
437
|
-
let t =
|
|
437
|
+
let t = Mt(n), i = await e.query({
|
|
438
438
|
table: Ze,
|
|
439
439
|
predicate: O("handoffReceiptId", t.id),
|
|
440
440
|
order: [],
|
|
@@ -450,7 +450,7 @@ var Ce = re.layerMemory, we = F("_voltro_workflow_runs", {
|
|
|
450
450
|
}
|
|
451
451
|
}
|
|
452
452
|
}, tt = (e, t) => et(e, "submissionId", t), nt = (e, t) => et(e, "pendingId", t), rt = async (e, t, n, r) => {
|
|
453
|
-
for await (let i of
|
|
453
|
+
for await (let i of _t(e, t, n)) {
|
|
454
454
|
if (i.tenantId !== r) throw Error("Failure delivery belongs to a different resident tenant");
|
|
455
455
|
if (await tt(e, i.id)) return !0;
|
|
456
456
|
}
|
|
@@ -478,7 +478,7 @@ var Ce = re.layerMemory, we = F("_voltro_workflow_runs", {
|
|
|
478
478
|
if (t.handler === null || t.handler.length === 0) throw Error("Cannot queue an unconfigured failure handler");
|
|
479
479
|
if (!Number.isSafeInteger(n) || n < 0) throw Error("Failure handoff attempt exhausted");
|
|
480
480
|
if (!Number.isFinite(r)) throw Error("Failure handoff retry deadline is invalid");
|
|
481
|
-
let a = await
|
|
481
|
+
let a = await Jt({
|
|
482
482
|
store: e,
|
|
483
483
|
workflowName: t.handler,
|
|
484
484
|
payload: t.report,
|
|
@@ -486,7 +486,7 @@ var Ce = re.layerMemory, we = F("_voltro_workflow_runs", {
|
|
|
486
486
|
tenantId: t.tenantId,
|
|
487
487
|
at: r,
|
|
488
488
|
now: i
|
|
489
|
-
}), o = await
|
|
489
|
+
}), o = await Ft(e, {
|
|
490
490
|
id: at(t.id, n),
|
|
491
491
|
workflowName: t.handler,
|
|
492
492
|
tenantId: t.tenantId,
|
|
@@ -514,7 +514,7 @@ var Ce = re.layerMemory, we = F("_voltro_workflow_runs", {
|
|
|
514
514
|
let s = at(t, a);
|
|
515
515
|
if (i !== null) {
|
|
516
516
|
if (i !== s) throw Error("Failure handoff receipt belongs to a different report");
|
|
517
|
-
let t = await
|
|
517
|
+
let t = await Nt(e, i);
|
|
518
518
|
if (t === void 0 || t.workflowName !== r.handler || t.tenantId !== r.tenantId) throw Error("Failure report has no matching durable start receipt");
|
|
519
519
|
return {
|
|
520
520
|
kind: "queued",
|
|
@@ -531,7 +531,7 @@ var Ce = re.layerMemory, we = F("_voltro_workflow_runs", {
|
|
|
531
531
|
}, lt = async (e, t, n) => {
|
|
532
532
|
let r = await B(e, t, n);
|
|
533
533
|
if (r.kind === "unconfigured") return r;
|
|
534
|
-
let i = await ot(e, t), a = await
|
|
534
|
+
let i = await ot(e, t), a = await Nt(e, r.receiptId);
|
|
535
535
|
if (a === void 0) throw Error("Failure handoff receipt disappeared during reconciliation");
|
|
536
536
|
if (i.acceptedExecutionId !== null) {
|
|
537
537
|
if (a.terminal !== null || a.submissionId === null) throw Error("Accepted failure report has no submitted receipt");
|
|
@@ -547,7 +547,7 @@ var Ce = re.layerMemory, we = F("_voltro_workflow_runs", {
|
|
|
547
547
|
};
|
|
548
548
|
let r = await z(e, t);
|
|
549
549
|
if (r === void 0) throw Error("Failure report disappeared during retry");
|
|
550
|
-
let o = i.handoffAttempt + 1, s = Math.max(
|
|
550
|
+
let o = i.handoffAttempt + 1, s = Math.max(rn(o, () => 1), a.terminal.kind === "dropped" ? a.terminal.retryAfterMs : 0);
|
|
551
551
|
return st(e, r, o, Math.max(n, a.terminal.at + s), n);
|
|
552
552
|
}
|
|
553
553
|
if (a.submissionId === null) {
|
|
@@ -572,7 +572,7 @@ var Ce = re.layerMemory, we = F("_voltro_workflow_runs", {
|
|
|
572
572
|
let a = await z(e, t);
|
|
573
573
|
if (a === void 0) throw Error("Failure report disappeared during rejected handler retry");
|
|
574
574
|
let s = i.handoffAttempt + 1;
|
|
575
|
-
return st(e, a, s, Math.max(n, r.report.failedAt +
|
|
575
|
+
return st(e, a, s, Math.max(n, r.report.failedAt + rn(s, () => 1)), n);
|
|
576
576
|
}
|
|
577
577
|
if (o.executionId === null) return r;
|
|
578
578
|
if (o.failureId !== null || o.executionId.length === 0 || o.preparedExecutionId !== o.executionId) throw Error("Failure handler acknowledgement contradicts its prepared submission");
|
|
@@ -635,7 +635,7 @@ var Ce = re.layerMemory, we = F("_voltro_workflow_runs", {
|
|
|
635
635
|
runId: a.runId,
|
|
636
636
|
completedAt: a.closedAt
|
|
637
637
|
};
|
|
638
|
-
}, ft = "_voltro_workflow_submissions", pt = w.Struct({
|
|
638
|
+
}, ft = "_voltro_workflow_submissions", pt = "wfsub", mt = () => `${pt}_${R()}`, ht = w.Struct({
|
|
639
639
|
id: w.String,
|
|
640
640
|
workflowName: w.String,
|
|
641
641
|
tenantId: w.NullOr(w.String),
|
|
@@ -659,8 +659,8 @@ var Ce = re.layerMemory, we = F("_voltro_workflow_runs", {
|
|
|
659
659
|
executionId: w.String,
|
|
660
660
|
runId: w.String
|
|
661
661
|
}))
|
|
662
|
-
}),
|
|
663
|
-
async function*
|
|
662
|
+
}), gt = w.decodeUnknownSync(ht);
|
|
663
|
+
async function* _t(e, t, n) {
|
|
664
664
|
let r;
|
|
665
665
|
for (;;) {
|
|
666
666
|
let i = D(O("preparedExecutionId", t), A("dispatchAttempts", 0)), a = await e.query({
|
|
@@ -676,13 +676,13 @@ async function* ht(e, t, n) {
|
|
|
676
676
|
});
|
|
677
677
|
if (a.length === 0) return;
|
|
678
678
|
for (let e of a) {
|
|
679
|
-
let i =
|
|
679
|
+
let i = gt(e);
|
|
680
680
|
if (i.workflowName !== n || !i.receiptsBound || i.failureId !== null || i.executionId !== null && i.executionId !== t) throw Error("Workflow completion has an inconsistent resident submission owner");
|
|
681
681
|
yield i, r = i.id;
|
|
682
682
|
}
|
|
683
683
|
}
|
|
684
684
|
}
|
|
685
|
-
var
|
|
685
|
+
var vt = async (e, t, n) => (await yt(e, t, n)).map((e) => gt(e)), yt = async (e, t, n) => {
|
|
686
686
|
if (!Number.isSafeInteger(t) || t < 1) throw Error("Submission recovery requires a positive page size");
|
|
687
687
|
return e.query({
|
|
688
688
|
table: ft,
|
|
@@ -704,8 +704,8 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
704
704
|
skip: void 0,
|
|
705
705
|
projection: void 0
|
|
706
706
|
});
|
|
707
|
-
return n[0] === void 0 ? void 0 : w.decodeUnknownSync(
|
|
708
|
-
},
|
|
707
|
+
return n[0] === void 0 ? void 0 : w.decodeUnknownSync(ht)(n[0]);
|
|
708
|
+
}, bt = async (e, t) => ze(e, (e) => xt(e, t)), xt = async (e, t) => {
|
|
709
709
|
if (t.id.length === 0) throw Error("Admission submission requires a stable non-empty identity");
|
|
710
710
|
let n = await e.query({
|
|
711
711
|
table: ft,
|
|
@@ -716,7 +716,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
716
716
|
projection: void 0
|
|
717
717
|
});
|
|
718
718
|
if (n[0] !== void 0) {
|
|
719
|
-
let e = w.decodeUnknownSync(
|
|
719
|
+
let e = w.decodeUnknownSync(ht)(n[0]);
|
|
720
720
|
if (e.workflowName !== t.control.workflowName || e.tenantId !== t.tenantId) throw Error("Admission submission identity belongs to a different workflow or tenant");
|
|
721
721
|
let r = JSON.parse(JSON.stringify(e.payload) ?? "null"), i = JSON.parse(JSON.stringify(t.encodedPayload) ?? "null");
|
|
722
722
|
if (!xe(r, i)) throw Error("Admission submission identity is already bound to a different payload");
|
|
@@ -726,7 +726,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
726
726
|
reused: !0
|
|
727
727
|
};
|
|
728
728
|
}
|
|
729
|
-
let r = Ue(t.control, t.keyPayload), i = await
|
|
729
|
+
let r = Ue(t.control, t.keyPayload), i = await cn({
|
|
730
730
|
store: e,
|
|
731
731
|
control: t.control,
|
|
732
732
|
keys: r,
|
|
@@ -755,7 +755,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
755
755
|
if (a === void 0) throw Error("Admission reservation has no ledger identity");
|
|
756
756
|
return {
|
|
757
757
|
kind: "reserved",
|
|
758
|
-
submission: await
|
|
758
|
+
submission: await St(e, {
|
|
759
759
|
id: t.id,
|
|
760
760
|
workflowName: t.control.workflowName,
|
|
761
761
|
tenantId: t.tenantId,
|
|
@@ -767,7 +767,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
767
767
|
}),
|
|
768
768
|
reused: !1
|
|
769
769
|
};
|
|
770
|
-
},
|
|
770
|
+
}, St = async (e, t) => {
|
|
771
771
|
if (t.id.length === 0 || t.ledgerId.length === 0) throw Error("Submission requires its reserved admission identity");
|
|
772
772
|
let n = {
|
|
773
773
|
...t,
|
|
@@ -787,7 +787,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
787
787
|
}
|
|
788
788
|
};
|
|
789
789
|
return await e.insert(ft, n), n;
|
|
790
|
-
},
|
|
790
|
+
}, Ct = async (e, t, n) => ze(e, (e) => wt(e, t, n)), wt = async (e, t, n) => {
|
|
791
791
|
if (n.executionId.length === 0) throw Error("Engine acknowledgement requires an execution identity");
|
|
792
792
|
let r = await e.query({
|
|
793
793
|
table: ft,
|
|
@@ -798,7 +798,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
798
798
|
projection: void 0
|
|
799
799
|
});
|
|
800
800
|
if (r[0] === void 0) throw Error("Cannot acknowledge an unknown admission submission");
|
|
801
|
-
let i = w.decodeUnknownSync(
|
|
801
|
+
let i = w.decodeUnknownSync(ht)(r[0]);
|
|
802
802
|
if (i.failureId !== null) throw Error("Cannot acknowledge a permanently rejected admission submission");
|
|
803
803
|
if (i.preparedExecutionId !== null && i.preparedExecutionId !== n.executionId) throw Error("Engine acknowledgement contradicts the prepared execution identity");
|
|
804
804
|
if (i.executionId !== null && i.executionId !== n.executionId || i.runId !== null && n.runId !== null && i.runId !== n.runId) throw Error("Admission submission already belongs to a different execution or run");
|
|
@@ -817,7 +817,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
817
817
|
...i,
|
|
818
818
|
...s
|
|
819
819
|
};
|
|
820
|
-
},
|
|
820
|
+
}, Tt = async (e, t, n) => {
|
|
821
821
|
if (n.length === 0) throw Error("Prepared submission requires a non-empty execution identity");
|
|
822
822
|
let r = await V(e, t);
|
|
823
823
|
if (r === void 0) throw Error("Cannot prepare an unknown admission submission");
|
|
@@ -834,7 +834,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
834
834
|
...r,
|
|
835
835
|
preparedExecutionId: n
|
|
836
836
|
};
|
|
837
|
-
},
|
|
837
|
+
}, Et = async (e, t, n, r, i = !1) => {
|
|
838
838
|
if (i !== !1 && (!Number.isSafeInteger(i) || i < 1)) throw Error("Submission retry limit must be a positive integer or false");
|
|
839
839
|
let a = await V(e, t);
|
|
840
840
|
if (a === void 0) throw Error("Cannot record failure for an unknown submission");
|
|
@@ -842,7 +842,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
842
842
|
let o = a.retry.attempts + 1, s = {
|
|
843
843
|
attempts: o,
|
|
844
844
|
lastError: n,
|
|
845
|
-
after: r +
|
|
845
|
+
after: r + rn(o),
|
|
846
846
|
stoppedAt: i !== !1 && o >= i ? r : null
|
|
847
847
|
};
|
|
848
848
|
if (await e.update("_voltro_workflow_submissions", t, { retry: s }) === null) throw Error("Admission submission disappeared while recording failure");
|
|
@@ -850,7 +850,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
850
850
|
...a,
|
|
851
851
|
retry: s
|
|
852
852
|
};
|
|
853
|
-
},
|
|
853
|
+
}, Dt = async (e, t, n) => {
|
|
854
854
|
let r = await V(e, t);
|
|
855
855
|
if (r === void 0) throw Error("Cannot dispatch an unknown admission submission");
|
|
856
856
|
if (!r.receiptsBound || r.executionId !== null || r.failureId !== null || r.retry.stoppedAt !== null || r.retry.after > n) return null;
|
|
@@ -861,7 +861,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
861
861
|
...r,
|
|
862
862
|
dispatchAttempts: i
|
|
863
863
|
};
|
|
864
|
-
},
|
|
864
|
+
}, Ot = async (e, t, n, r) => {
|
|
865
865
|
if (!Number.isSafeInteger(n) || n < 0) throw Error("Invalid submission dispatch attempt");
|
|
866
866
|
let i = await V(e, t);
|
|
867
867
|
if (i === void 0) throw Error("Cannot reject an unknown admission submission");
|
|
@@ -893,30 +893,30 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
893
893
|
if (await e.update("_voltro_workflow_admissions", i.ledgerId, { releasedAt: new Date(r.now) }) === null) throw Error("Rejected admission submission has no lease");
|
|
894
894
|
if (await e.update("_voltro_workflow_submissions", t, { failureId: a }) === null) throw Error("Admission submission disappeared during rejection");
|
|
895
895
|
return await B(e, o.id, r.now), o;
|
|
896
|
-
},
|
|
896
|
+
}, kt = async (e, t) => {
|
|
897
897
|
if (t.failureId === null) throw Error("Workflow submission has no rejection marker");
|
|
898
898
|
let n = await z(e, t.failureId);
|
|
899
899
|
if (t.executionId !== null || t.dispatchAttempts > 1 || n === void 0 || n.sourceKind !== "submission" || n.sourceId !== t.id || n.workflowName !== t.workflowName || n.tenantId !== t.tenantId || n.report.executionId !== null || n.report.runId !== null) throw Error("Workflow start rejection has contradictory ownership or execution evidence");
|
|
900
900
|
return n.id;
|
|
901
|
-
},
|
|
901
|
+
}, At = "_voltro_workflow_start_receipts", jt = w.Struct({
|
|
902
902
|
id: w.String,
|
|
903
903
|
workflowName: w.String,
|
|
904
904
|
tenantId: w.NullOr(w.String),
|
|
905
905
|
pendingId: w.String,
|
|
906
906
|
submissionId: w.NullOr(w.String),
|
|
907
907
|
terminal: w.NullOr(E)
|
|
908
|
-
}).pipe(w.filter((e) => e.submissionId === null || e.terminal === null, { message: () => "A start receipt cannot be both submitted and terminal before admission" })),
|
|
908
|
+
}).pipe(w.filter((e) => e.submissionId === null || e.terminal === null, { message: () => "A start receipt cannot be both submitted and terminal before admission" })), Mt = w.decodeUnknownSync(jt), Nt = async (e, t) => {
|
|
909
909
|
let n = await e.query({
|
|
910
|
-
table:
|
|
910
|
+
table: At,
|
|
911
911
|
predicate: O("id", t),
|
|
912
912
|
order: [],
|
|
913
913
|
take: 1,
|
|
914
914
|
skip: void 0,
|
|
915
915
|
projection: void 0
|
|
916
916
|
});
|
|
917
|
-
return n[0] === void 0 ? void 0 :
|
|
918
|
-
},
|
|
919
|
-
let n = await
|
|
917
|
+
return n[0] === void 0 ? void 0 : Mt(n[0]);
|
|
918
|
+
}, Pt = async (e, t) => {
|
|
919
|
+
let n = await Nt(e, t.receiptId);
|
|
920
920
|
if (n === void 0 || n.workflowName !== t.workflowName || n.tenantId !== t.tenantId) throw Error("Workflow start receipt is missing or belongs to another workflow or tenant");
|
|
921
921
|
if (n.terminal !== null) {
|
|
922
922
|
if (n.terminal.kind === "abandoned") {
|
|
@@ -947,7 +947,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
947
947
|
if (r === void 0 || !r.receiptsBound || r.workflowName !== n.workflowName || r.tenantId !== n.tenantId || !r.intentIds.includes(n.pendingId)) throw Error("Workflow receipt has no matching admission submission");
|
|
948
948
|
if (r.failureId !== null) return {
|
|
949
949
|
kind: "rejected",
|
|
950
|
-
failureId: await
|
|
950
|
+
failureId: await kt(e, r)
|
|
951
951
|
};
|
|
952
952
|
if (r.executionId === null) {
|
|
953
953
|
if (r.retry.stoppedAt !== null) throw Error("Workflow start acceptance is unresolved; reconciliation required");
|
|
@@ -958,23 +958,23 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
958
958
|
kind: "accepted",
|
|
959
959
|
executionId: r.executionId
|
|
960
960
|
};
|
|
961
|
-
},
|
|
961
|
+
}, Ft = async (e, t) => {
|
|
962
962
|
if (t.id.length === 0 || t.id === t.pendingId) throw Error("Workflow start receipt requires an identity distinct from its queue slot");
|
|
963
|
-
let n =
|
|
963
|
+
let n = Mt((await e.insertIgnoreWithOutcome(At, {
|
|
964
964
|
...t,
|
|
965
965
|
submissionId: null,
|
|
966
966
|
terminal: null
|
|
967
967
|
}, { conflictColumns: ["id"] })).row);
|
|
968
968
|
if (n.workflowName !== t.workflowName || n.tenantId !== t.tenantId || n.pendingId !== t.pendingId) throw Error("Workflow start receipt identity belongs to a different start");
|
|
969
969
|
return n;
|
|
970
|
-
},
|
|
970
|
+
}, It = async (e, t) => {
|
|
971
971
|
let n = await V(e, t);
|
|
972
972
|
if (n === void 0) throw Error("Cannot bind receipts to an unknown admission submission");
|
|
973
973
|
if (n.receiptsBound) return 0;
|
|
974
974
|
let r = 0;
|
|
975
975
|
for (let t of new Set(n.intentIds)) for (;;) {
|
|
976
976
|
let i = await e.query({
|
|
977
|
-
table:
|
|
977
|
+
table: At,
|
|
978
978
|
predicate: D(O("pendingId", t), N("submissionId"), N("terminal")),
|
|
979
979
|
order: [{
|
|
980
980
|
column: "id",
|
|
@@ -986,7 +986,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
986
986
|
});
|
|
987
987
|
if (i.length === 0) break;
|
|
988
988
|
for (let t of i) {
|
|
989
|
-
let i =
|
|
989
|
+
let i = Mt(t);
|
|
990
990
|
if (i.workflowName !== n.workflowName || i.tenantId !== n.tenantId) throw Error("Pending receipt belongs to a different workflow or tenant");
|
|
991
991
|
if (await e.update("_voltro_workflow_start_receipts", i.id, { submissionId: n.id }) === null) throw Error("Workflow start receipt disappeared during queue transfer");
|
|
992
992
|
r++;
|
|
@@ -998,7 +998,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
998
998
|
let n = w.decodeUnknownSync(E)(t.terminal);
|
|
999
999
|
for (;;) {
|
|
1000
1000
|
let r = await e.query({
|
|
1001
|
-
table:
|
|
1001
|
+
table: At,
|
|
1002
1002
|
predicate: D(O("pendingId", t.pendingId), N("submissionId"), N("terminal")),
|
|
1003
1003
|
order: [{
|
|
1004
1004
|
column: "id",
|
|
@@ -1010,17 +1010,17 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1010
1010
|
});
|
|
1011
1011
|
if (r.length === 0) return;
|
|
1012
1012
|
for (let i of r) {
|
|
1013
|
-
let r =
|
|
1013
|
+
let r = Mt(i);
|
|
1014
1014
|
if (r.workflowName !== t.workflowName || r.tenantId !== t.tenantId) throw Error("Terminal receipt belongs to a different workflow or tenant");
|
|
1015
1015
|
if (await e.update("_voltro_workflow_start_receipts", r.id, { terminal: n }) === null) throw Error("Start receipt disappeared while recording its terminal outcome");
|
|
1016
1016
|
}
|
|
1017
1017
|
}
|
|
1018
|
-
}, U = "_voltro_workflow_pending", W = "_voltro_workflow_admissions",
|
|
1018
|
+
}, U = "_voltro_workflow_pending", W = "_voltro_workflow_admissions", Lt = "_voltro_workflow_pauses", Rt = (e, t, n) => e.encodeWorkflowPayload === void 0 ? n : e.encodeWorkflowPayload(t, n), G = (e, t, n) => e.decodeWorkflowPayload === void 0 ? n : e.decodeWorkflowPayload(t, n), zt = 864e5, Bt = (e, t, n) => `wfp_${be("sha256").update(`${e}\u0000${t}\u0000${n}`).digest("hex").slice(0, 40)}`, K = (e) => {
|
|
1019
1019
|
if (e instanceof Date) return e.getTime();
|
|
1020
1020
|
if (typeof e == "number") return e;
|
|
1021
1021
|
let t = Date.parse(String(e));
|
|
1022
1022
|
return Number.isNaN(t) ? 0 : t;
|
|
1023
|
-
},
|
|
1023
|
+
}, Vt = (e, t) => {
|
|
1024
1024
|
let n = typeof e == "number" ? e : Number(e);
|
|
1025
1025
|
return Number.isFinite(n) ? Math.trunc(n) : t;
|
|
1026
1026
|
}, q = (e) => ({
|
|
@@ -1033,12 +1033,12 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1033
1033
|
callerContext: e.callerContext ?? null,
|
|
1034
1034
|
queuedAppVersion: e.queuedAppVersion === null || e.queuedAppVersion === void 0 ? null : String(e.queuedAppVersion),
|
|
1035
1035
|
queuedSchemaFingerprint: e.queuedSchemaFingerprint === null || e.queuedSchemaFingerprint === void 0 ? null : String(e.queuedSchemaFingerprint),
|
|
1036
|
-
priority:
|
|
1036
|
+
priority: Vt(e.priority, 0),
|
|
1037
1037
|
dueAt: K(e.dueAt),
|
|
1038
1038
|
deadlineAt: e.deadlineAt === null || e.deadlineAt === void 0 ? void 0 : K(e.deadlineAt),
|
|
1039
|
-
collapsed:
|
|
1039
|
+
collapsed: Vt(e.collapsed, 1),
|
|
1040
1040
|
firstSeenAt: K(e.firstSeenAt),
|
|
1041
|
-
attempts:
|
|
1041
|
+
attempts: Vt(e.attempts, 0),
|
|
1042
1042
|
lastError: e.lastError === null || e.lastError === void 0 ? null : String(e.lastError),
|
|
1043
1043
|
deadLetteredAt: e.deadLetteredAt === null || e.deadLetteredAt === void 0 ? void 0 : K(e.deadLetteredAt)
|
|
1044
1044
|
}), J = (e, t, n, r) => ({
|
|
@@ -1048,11 +1048,11 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1048
1048
|
take: r,
|
|
1049
1049
|
skip: void 0,
|
|
1050
1050
|
projection: void 0
|
|
1051
|
-
}),
|
|
1052
|
-
let t = await e.query(J(
|
|
1051
|
+
}), Ht = async (e) => {
|
|
1052
|
+
let t = await e.query(J(Lt, void 0, [], 1e3));
|
|
1053
1053
|
return new Set(t.map((e) => String(e.id)));
|
|
1054
|
-
},
|
|
1055
|
-
await e.upsert(
|
|
1054
|
+
}, Ut = async (e, t, n, r) => {
|
|
1055
|
+
await e.upsert(Lt, {
|
|
1056
1056
|
id: t,
|
|
1057
1057
|
pausedAt: /* @__PURE__ */ new Date(),
|
|
1058
1058
|
pausedBy: n,
|
|
@@ -1065,7 +1065,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1065
1065
|
"reason"
|
|
1066
1066
|
]
|
|
1067
1067
|
});
|
|
1068
|
-
},
|
|
1068
|
+
}, Wt = async (e, t) => e.delete(Lt, t), Gt = async (e) => {
|
|
1069
1069
|
let { store: t, control: n, keys: r, now: i } = e, a = { paused: e.paused }, o = [];
|
|
1070
1070
|
n.debounce !== void 0 && r.debounceKey !== void 0 && o.push((async () => {
|
|
1071
1071
|
let e = (await t.query(J(U, D(O("workflowName", n.workflowName), O("controlKey", r.debounceKey), O("mode", "debounce")), [], 1)))[0];
|
|
@@ -1073,7 +1073,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1073
1073
|
let i = e.deadlineAt === null || e.deadlineAt === void 0 ? void 0 : K(e.deadlineAt);
|
|
1074
1074
|
a.debouncePending = {
|
|
1075
1075
|
firstSeenAt: K(e.firstSeenAt),
|
|
1076
|
-
collapsed:
|
|
1076
|
+
collapsed: Vt(e.collapsed, 1),
|
|
1077
1077
|
...i === void 0 ? {} : { deadlineAt: i }
|
|
1078
1078
|
};
|
|
1079
1079
|
})()), n.batch !== void 0 && r.batchKey !== void 0 && o.push((async () => {
|
|
@@ -1086,7 +1086,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1086
1086
|
firstSeenAt: K(e[0].firstSeenAt)
|
|
1087
1087
|
});
|
|
1088
1088
|
})()), n.singleton !== void 0 && r.singletonKey !== void 0 && o.push((async () => {
|
|
1089
|
-
let e = await
|
|
1089
|
+
let e = await Kt(t, n.workflowName, r.singletonKey, i);
|
|
1090
1090
|
e === "unacknowledged" ? a.singletonUnacknowledged = !0 : e !== void 0 && (a.singletonHolder = e);
|
|
1091
1091
|
})()), n.concurrency !== void 0 && r.concurrencyKey !== void 0 && o.push((async () => {
|
|
1092
1092
|
let e = n.concurrency.pool === void 0 ? [O("workflowName", n.workflowName)] : [], o = await t.query(J(W, D(...e, O("concurrencyKey", r.concurrencyKey), N("releasedAt"), he(N("executionId"), A("expiresAt", new Date(i)))), [], n.concurrency.limit));
|
|
@@ -1100,7 +1100,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1100
1100
|
}], s.limit));
|
|
1101
1101
|
a.recentAdmissions = e.map((e) => K(e.admittedAt));
|
|
1102
1102
|
})()), await Promise.all(o), a;
|
|
1103
|
-
},
|
|
1103
|
+
}, Kt = async (e, t, n, r) => {
|
|
1104
1104
|
if ((await e.query(J("_voltro_workflow_admissions", D(O("workflowName", t), O("singletonKey", n), N("releasedAt"), N("executionId")), [], 1))).length > 0) return "unacknowledged";
|
|
1105
1105
|
let i = (await e.query(J(W, D(O("workflowName", t), O("singletonKey", n), N("releasedAt"), A("expiresAt", new Date(r))), [{
|
|
1106
1106
|
column: "admittedAt",
|
|
@@ -1113,17 +1113,17 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1113
1113
|
runId: i.runId === null || i.runId === void 0 ? "" : String(i.runId),
|
|
1114
1114
|
admittedAt: K(i.admittedAt)
|
|
1115
1115
|
};
|
|
1116
|
-
},
|
|
1117
|
-
let { store: t, control: n, decision: r, now: i } = e, a =
|
|
1116
|
+
}, qt = async (e) => {
|
|
1117
|
+
let { store: t, control: n, decision: r, now: i } = e, a = Yt(r.mode, r.keys);
|
|
1118
1118
|
if (r.collapse === "hold") {
|
|
1119
|
-
let o = e.existingId ??
|
|
1119
|
+
let o = e.existingId ?? Bt(n.workflowName, r.mode, a);
|
|
1120
1120
|
return await t.update(U, o, {
|
|
1121
1121
|
dueAt: new Date(r.dueAt),
|
|
1122
1122
|
updatedAt: new Date(i)
|
|
1123
1123
|
}), o;
|
|
1124
1124
|
}
|
|
1125
1125
|
if (r.collapse === "replace") {
|
|
1126
|
-
let o =
|
|
1126
|
+
let o = Bt(n.workflowName, r.mode, a);
|
|
1127
1127
|
return await H(t, {
|
|
1128
1128
|
pendingId: o,
|
|
1129
1129
|
workflowName: n.workflowName,
|
|
@@ -1138,7 +1138,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1138
1138
|
workflowName: n.workflowName,
|
|
1139
1139
|
controlKey: a,
|
|
1140
1140
|
mode: r.mode,
|
|
1141
|
-
payload:
|
|
1141
|
+
payload: Rt(t, n.workflowName, e.payload),
|
|
1142
1142
|
callerContext: e.callerContext ?? null,
|
|
1143
1143
|
queuedAppVersion: e.queuedAppVersion ?? null,
|
|
1144
1144
|
queuedSchemaFingerprint: e.queuedSchemaFingerprint ?? null,
|
|
@@ -1154,14 +1154,14 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1154
1154
|
}, {
|
|
1155
1155
|
conflictColumns: ["id"],
|
|
1156
1156
|
update: (a) => ({
|
|
1157
|
-
payload:
|
|
1157
|
+
payload: Rt(t, n.workflowName, e.payload),
|
|
1158
1158
|
callerContext: e.callerContext ?? null,
|
|
1159
1159
|
queuedAppVersion: e.queuedAppVersion ?? null,
|
|
1160
1160
|
queuedSchemaFingerprint: e.queuedSchemaFingerprint ?? null,
|
|
1161
1161
|
priority: r.keys.priority,
|
|
1162
1162
|
dueAt: new Date(r.dueAt),
|
|
1163
1163
|
deadlineAt: r.deadlineAt === void 0 ? a.deadlineAt ?? null : new Date(r.deadlineAt),
|
|
1164
|
-
collapsed:
|
|
1164
|
+
collapsed: Vt(a.collapsed, 1) + 1,
|
|
1165
1165
|
updatedAt: new Date(i),
|
|
1166
1166
|
attempts: 0,
|
|
1167
1167
|
lastError: null,
|
|
@@ -1175,7 +1175,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1175
1175
|
workflowName: n.workflowName,
|
|
1176
1176
|
controlKey: a,
|
|
1177
1177
|
mode: r.mode,
|
|
1178
|
-
payload:
|
|
1178
|
+
payload: Rt(t, n.workflowName, e.payload),
|
|
1179
1179
|
callerContext: e.callerContext ?? null,
|
|
1180
1180
|
queuedAppVersion: e.queuedAppVersion ?? null,
|
|
1181
1181
|
queuedSchemaFingerprint: e.queuedSchemaFingerprint ?? null,
|
|
@@ -1190,14 +1190,14 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1190
1190
|
deadLetteredAt: null
|
|
1191
1191
|
});
|
|
1192
1192
|
return String(o.id);
|
|
1193
|
-
},
|
|
1193
|
+
}, Jt = async (e) => {
|
|
1194
1194
|
let t = await e.store.insert(U, {
|
|
1195
1195
|
id: `wfpi_${R()}`,
|
|
1196
1196
|
tenantId: e.tenantId,
|
|
1197
1197
|
workflowName: e.workflowName,
|
|
1198
1198
|
controlKey: "",
|
|
1199
1199
|
mode: "delayed",
|
|
1200
|
-
payload:
|
|
1200
|
+
payload: Rt(e.store, e.workflowName, e.payload),
|
|
1201
1201
|
callerContext: e.callerContext ?? null,
|
|
1202
1202
|
queuedAppVersion: e.queuedAppVersion ?? null,
|
|
1203
1203
|
queuedSchemaFingerprint: e.queuedSchemaFingerprint ?? null,
|
|
@@ -1215,7 +1215,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1215
1215
|
intentId: String(t.id),
|
|
1216
1216
|
dueAt: e.at
|
|
1217
1217
|
};
|
|
1218
|
-
},
|
|
1218
|
+
}, Yt = (e, t) => {
|
|
1219
1219
|
switch (e) {
|
|
1220
1220
|
case "debounce": return t.debounceKey ?? "";
|
|
1221
1221
|
case "batch": return t.batchKey ?? "";
|
|
@@ -1249,7 +1249,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1249
1249
|
releasedAt: e.outcome === "admitted" ? null : new Date(r)
|
|
1250
1250
|
});
|
|
1251
1251
|
return String(a.id);
|
|
1252
|
-
},
|
|
1252
|
+
}, Xt = async (e, t, n) => {
|
|
1253
1253
|
let r = !1;
|
|
1254
1254
|
for (;;) {
|
|
1255
1255
|
let i = await e.query(J(W, D(O("executionId", t), O("outcome", "admitted"), N("releasedAt")), [], 10));
|
|
@@ -1257,7 +1257,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1257
1257
|
for (let t of i) if (await e.update("_voltro_workflow_admissions", String(t.id), { releasedAt: new Date(n) }) === null) throw Error("Admission lease disappeared during release");
|
|
1258
1258
|
r = !0;
|
|
1259
1259
|
}
|
|
1260
|
-
},
|
|
1260
|
+
}, Zt = async (e, t, n) => (await Qt(e, t, n)).due, Qt = async (e, t, n) => {
|
|
1261
1261
|
let r = (await e.query(J(U, N("deadLetteredAt"), [{
|
|
1262
1262
|
column: "priority",
|
|
1263
1263
|
direction: "desc"
|
|
@@ -1270,10 +1270,10 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1270
1270
|
due: r.filter((e) => e.dueAt <= t).sort(Xe),
|
|
1271
1271
|
nextDueAt: i
|
|
1272
1272
|
};
|
|
1273
|
-
},
|
|
1273
|
+
}, $t = async (e, t) => (await e.query(J(U, void 0, [{
|
|
1274
1274
|
column: "firstSeenAt",
|
|
1275
1275
|
direction: "asc"
|
|
1276
|
-
}], t))).map(q),
|
|
1276
|
+
}], t))).map(q), en = async (e, t) => e.delete(U, t), tn = async (e, t, n, r) => ze(e, (e) => nn(e, t, n, r)), nn = async (e, t, n, r) => {
|
|
1277
1277
|
let i = (await e.query(J(U, O("id", t), [], 1)))[0];
|
|
1278
1278
|
if (i === void 0) return !1;
|
|
1279
1279
|
let a = q(i);
|
|
@@ -1304,23 +1304,23 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1304
1304
|
}
|
|
1305
1305
|
}), !await e.delete("_voltro_workflow_pending", t)) throw Error("Pending intent disappeared during discard");
|
|
1306
1306
|
return !0;
|
|
1307
|
-
},
|
|
1307
|
+
}, rn = (e, t = Math.random) => {
|
|
1308
1308
|
let n = Math.min(1e3 * 2 ** Math.max(0, e - 1), 3e5);
|
|
1309
1309
|
return Math.round(n / 2 + t() * (n / 2));
|
|
1310
|
-
},
|
|
1310
|
+
}, an = async (e, t, n, r) => {
|
|
1311
1311
|
let i = t.attempts + 1;
|
|
1312
1312
|
await e.update(U, t.id, {
|
|
1313
1313
|
attempts: i,
|
|
1314
1314
|
lastError: n.slice(0, 500),
|
|
1315
|
-
dueAt: new Date(r +
|
|
1315
|
+
dueAt: new Date(r + rn(i)),
|
|
1316
1316
|
updatedAt: new Date(r)
|
|
1317
1317
|
});
|
|
1318
|
-
},
|
|
1318
|
+
}, on = async (e, t, n, r) => await e.update(U, t.id, {
|
|
1319
1319
|
attempts: t.attempts + 1,
|
|
1320
1320
|
lastError: n.slice(0, 500),
|
|
1321
1321
|
deadLetteredAt: new Date(r),
|
|
1322
1322
|
updatedAt: new Date(r)
|
|
1323
|
-
}) !== null,
|
|
1323
|
+
}) !== null, sn = async (e, t, n) => {
|
|
1324
1324
|
let r = (await e.query(J(U, O("id", t), [], 1)))[0];
|
|
1325
1325
|
return r === void 0 || r.deadLetteredAt === null || r.deadLetteredAt === void 0 ? !1 : await e.update(U, t, {
|
|
1326
1326
|
attempts: 0,
|
|
@@ -1329,8 +1329,8 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1329
1329
|
dueAt: new Date(n),
|
|
1330
1330
|
updatedAt: new Date(n)
|
|
1331
1331
|
}) !== null;
|
|
1332
|
-
},
|
|
1333
|
-
let t = await
|
|
1332
|
+
}, cn = async (e) => {
|
|
1333
|
+
let t = await Gt({
|
|
1334
1334
|
store: e.store,
|
|
1335
1335
|
control: e.control,
|
|
1336
1336
|
keys: e.keys,
|
|
@@ -1344,15 +1344,15 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1344
1344
|
now: e.now,
|
|
1345
1345
|
reconsidering: e.reconsidering
|
|
1346
1346
|
});
|
|
1347
|
-
},
|
|
1347
|
+
}, ln = async (e, t, n = 1e3) => {
|
|
1348
1348
|
let r = await e.query(J(W, void 0, [{
|
|
1349
1349
|
column: "admittedAt",
|
|
1350
1350
|
direction: "asc"
|
|
1351
1351
|
}], n)), i = t.getTime(), a = r.filter((e) => e.releasedAt != null && K(e.admittedAt) < i);
|
|
1352
1352
|
return await Promise.all(a.map((t) => e.delete(W, String(t.id)))), a.length;
|
|
1353
|
-
},
|
|
1353
|
+
}, un = async (e, t) => {
|
|
1354
1354
|
if (!Number.isFinite(t.now) || !Number.isFinite(new Date(t.now).getTime())) throw Error("Queued cancellation requires a valid timestamp");
|
|
1355
|
-
let n = await
|
|
1355
|
+
let n = await Nt(e, t.receiptId);
|
|
1356
1356
|
if (n === void 0 || n.workflowName !== t.workflowName || n.tenantId !== t.tenantId) throw Error("Queued cancellation receipt is missing or belongs to another workflow or tenant");
|
|
1357
1357
|
if (n.terminal !== null) return {
|
|
1358
1358
|
kind: "terminal",
|
|
@@ -1392,7 +1392,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1392
1392
|
kind: "terminal",
|
|
1393
1393
|
outcome: a
|
|
1394
1394
|
};
|
|
1395
|
-
},
|
|
1395
|
+
}, dn = "_voltro_workflow_parent_closures", X = w.NonEmptyString, fn = w.Struct({
|
|
1396
1396
|
id: X,
|
|
1397
1397
|
runId: X,
|
|
1398
1398
|
workflowName: X,
|
|
@@ -1403,7 +1403,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1403
1403
|
afterChildId: w.NullOr(X),
|
|
1404
1404
|
scanHasOpenChildren: w.Boolean,
|
|
1405
1405
|
completedAt: w.NullOr(w.DateFromSelf)
|
|
1406
|
-
}),
|
|
1406
|
+
}), pn = w.Struct({
|
|
1407
1407
|
id: X,
|
|
1408
1408
|
tag: X,
|
|
1409
1409
|
executionId: X,
|
|
@@ -1411,11 +1411,11 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1411
1411
|
runnerGeneration: w.optional(w.NullOr(X)),
|
|
1412
1412
|
parentGeneration: w.optional(w.NullOr(X)),
|
|
1413
1413
|
parentClosePolicy: w.NullOr(w.Literal("cancel", "terminate", "abandon"))
|
|
1414
|
-
}),
|
|
1414
|
+
}), mn = async (e, t, n) => {
|
|
1415
1415
|
if (t.parentClosePolicy !== "cancel" && t.parentClosePolicy !== "terminate") return !1;
|
|
1416
1416
|
if (typeof t.parentExecutionId != "string" || t.parentExecutionId.length === 0 || typeof t.parentGeneration != "string" || t.parentGeneration.length === 0) throw Error("Child entry requires its original parent execution and generation");
|
|
1417
1417
|
let r = n ?? (await e.query({
|
|
1418
|
-
table:
|
|
1418
|
+
table: dn,
|
|
1419
1419
|
predicate: D(O("executionId", t.parentExecutionId), O("generation", t.parentGeneration)),
|
|
1420
1420
|
lock: "update",
|
|
1421
1421
|
order: [],
|
|
@@ -1424,9 +1424,9 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1424
1424
|
projection: void 0
|
|
1425
1425
|
}))[0];
|
|
1426
1426
|
if (r === void 0) return !1;
|
|
1427
|
-
let i = w.decodeUnknownSync(
|
|
1427
|
+
let i = w.decodeUnknownSync(fn)(r);
|
|
1428
1428
|
if (i.executionId !== t.parentExecutionId || i.generation !== t.parentGeneration) return !1;
|
|
1429
|
-
let a = w.decodeUnknownSync(
|
|
1429
|
+
let a = w.decodeUnknownSync(pn)(t), o = ue("wfctl", JSON.stringify([
|
|
1430
1430
|
"parent-close",
|
|
1431
1431
|
i.id,
|
|
1432
1432
|
a.id
|
|
@@ -1458,9 +1458,9 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1458
1458
|
});
|
|
1459
1459
|
}
|
|
1460
1460
|
return !0;
|
|
1461
|
-
},
|
|
1461
|
+
}, hn = async (e, t, n = Date.now()) => {
|
|
1462
1462
|
let [r] = await e.query({
|
|
1463
|
-
table:
|
|
1463
|
+
table: dn,
|
|
1464
1464
|
predicate: O("id", t),
|
|
1465
1465
|
lock: "update",
|
|
1466
1466
|
order: [],
|
|
@@ -1469,7 +1469,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1469
1469
|
projection: void 0
|
|
1470
1470
|
});
|
|
1471
1471
|
if (r === void 0) throw Error("Parent closure is missing");
|
|
1472
|
-
let i = w.decodeUnknownSync(
|
|
1472
|
+
let i = w.decodeUnknownSync(fn)(r);
|
|
1473
1473
|
if (i.completedAt !== null) return {
|
|
1474
1474
|
scanned: 0,
|
|
1475
1475
|
controls: 0,
|
|
@@ -1489,10 +1489,10 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1489
1489
|
projection: void 0
|
|
1490
1490
|
}), o = 0, s = i.scanHasOpenChildren, c = null;
|
|
1491
1491
|
for (let t of a) {
|
|
1492
|
-
let r = w.decodeUnknownSync(
|
|
1492
|
+
let r = w.decodeUnknownSync(pn)(t);
|
|
1493
1493
|
if (c = r.id, r.parentClosePolicy !== null && r.parentClosePolicy !== "abandon") {
|
|
1494
1494
|
if (r.parentGeneration === void 0 || r.parentGeneration === null) throw Error("Parent closure cannot attribute a child without its parent generation");
|
|
1495
|
-
r.parentGeneration === i.generation && ((r.status === "running" || r.status === "suspended") && (s = !0), await
|
|
1495
|
+
r.parentGeneration === i.generation && ((r.status === "running" || r.status === "suspended") && (s = !0), await mn(e, t, i) && (o++, r.status === "suspended" && typeof r.runnerGeneration == "string" && await wn(e, {
|
|
1496
1496
|
runId: r.id,
|
|
1497
1497
|
workflowName: r.tag,
|
|
1498
1498
|
executionId: r.executionId,
|
|
@@ -1501,7 +1501,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1501
1501
|
}
|
|
1502
1502
|
}
|
|
1503
1503
|
let l = a.length < 100, u = l && !s && !await _(e, i.id);
|
|
1504
|
-
if (await e.update(
|
|
1504
|
+
if (await e.update(dn, i.id, {
|
|
1505
1505
|
afterChildId: l ? null : c,
|
|
1506
1506
|
scanHasOpenChildren: !l && s,
|
|
1507
1507
|
completedAt: u ? new Date(n) : null
|
|
@@ -1511,7 +1511,7 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1511
1511
|
controls: o,
|
|
1512
1512
|
wrapped: l
|
|
1513
1513
|
};
|
|
1514
|
-
},
|
|
1514
|
+
}, gn = F("_voltro_workflow_restart_requests", {
|
|
1515
1515
|
id: j({ prefix: "wfrs" }),
|
|
1516
1516
|
runId: I(),
|
|
1517
1517
|
workflowName: I(),
|
|
@@ -1526,10 +1526,10 @@ var gt = async (e, t, n) => (await _t(e, t, n)).map((e) => mt(e)), _t = async (e
|
|
|
1526
1526
|
requestedAt: L(),
|
|
1527
1527
|
dispatchAttempts: M().default(0),
|
|
1528
1528
|
enteredGeneration: I().nullable()
|
|
1529
|
-
}).unique(["runId", "generation"]).unique(["runId", "token"]).nonReactive(), Z = w.NonEmptyString,
|
|
1529
|
+
}).unique(["runId", "generation"]).unique(["runId", "token"]).nonReactive(), Z = w.NonEmptyString, _n = w.Struct({
|
|
1530
1530
|
requestId: Z,
|
|
1531
1531
|
restartToken: w.NullOr(Z)
|
|
1532
|
-
}),
|
|
1532
|
+
}), vn = w.Struct({
|
|
1533
1533
|
requestId: Z,
|
|
1534
1534
|
replyId: Z
|
|
1535
1535
|
});
|
|
@@ -1542,8 +1542,8 @@ w.Struct({
|
|
|
1542
1542
|
token: Z,
|
|
1543
1543
|
ledgerId: Z,
|
|
1544
1544
|
tenantId: w.NullOr(Z),
|
|
1545
|
-
delivery:
|
|
1546
|
-
replies: w.Array(
|
|
1545
|
+
delivery: _n,
|
|
1546
|
+
replies: w.Array(vn),
|
|
1547
1547
|
eviction: w.NullOr(w.Struct({
|
|
1548
1548
|
executionId: Z,
|
|
1549
1549
|
runId: w.String
|
|
@@ -1554,19 +1554,19 @@ w.Struct({
|
|
|
1554
1554
|
});
|
|
1555
1555
|
//#endregion
|
|
1556
1556
|
//#region src/runGeneration.ts
|
|
1557
|
-
var
|
|
1557
|
+
var yn = "_voltro_workflow_runs", bn = w.NullOr(w.Struct({
|
|
1558
1558
|
requestId: w.NonEmptyString,
|
|
1559
1559
|
restartToken: w.NullOr(w.NonEmptyString)
|
|
1560
|
-
})),
|
|
1560
|
+
})), xn = async (e, t, n, r) => {
|
|
1561
1561
|
if (typeof t.id != "string") throw Error("Child entry has no allocated run identity");
|
|
1562
1562
|
let i = {
|
|
1563
1563
|
runId: t.id,
|
|
1564
1564
|
workflowName: n.workflowName,
|
|
1565
1565
|
executionId: n.executionId,
|
|
1566
1566
|
generation: n.generation
|
|
1567
|
-
}, a = await
|
|
1567
|
+
}, a = await zn(e, i), o = await mn(e, t);
|
|
1568
1568
|
if (!a && !o) return;
|
|
1569
|
-
let s = await
|
|
1569
|
+
let s = await En(e, {
|
|
1570
1570
|
owner: i,
|
|
1571
1571
|
now: n.now,
|
|
1572
1572
|
durationMs: 0,
|
|
@@ -1579,21 +1579,21 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
1579
1579
|
previous: r,
|
|
1580
1580
|
terminalEvent: s.terminalEvent
|
|
1581
1581
|
};
|
|
1582
|
-
},
|
|
1582
|
+
}, Sn = async (e, t) => {
|
|
1583
1583
|
if ([
|
|
1584
1584
|
t.workflowName,
|
|
1585
1585
|
t.executionId,
|
|
1586
1586
|
t.generation
|
|
1587
1587
|
].some((e) => e.length === 0) || typeof t.initialRow.id != "string" || t.initialRow.id.length === 0 || !Number.isFinite(t.now)) throw Error("Workflow entry requires allocated identities and a finite timestamp");
|
|
1588
1588
|
let n = (await e.query({
|
|
1589
|
-
table:
|
|
1589
|
+
table: yn,
|
|
1590
1590
|
predicate: O("executionId", t.executionId),
|
|
1591
1591
|
lock: "update",
|
|
1592
1592
|
order: [],
|
|
1593
1593
|
take: 1,
|
|
1594
1594
|
skip: void 0,
|
|
1595
1595
|
projection: void 0
|
|
1596
|
-
}))[0], r = w.decodeUnknownSync(
|
|
1596
|
+
}))[0], r = w.decodeUnknownSync(bn)(t.delivery ?? null), i = (r) => xn(e, r, t, n);
|
|
1597
1597
|
if (n === void 0) {
|
|
1598
1598
|
if (r !== null && r.restartToken !== null) throw Error("Workflow restart delivery has no resident authorization");
|
|
1599
1599
|
if ((await e.query({
|
|
@@ -1605,7 +1605,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
1605
1605
|
skip: void 0,
|
|
1606
1606
|
projection: ["id"]
|
|
1607
1607
|
})).length !== 0) throw Error("Workflow execution is already terminal; restore its engine journal instead of re-entering the body");
|
|
1608
|
-
let n = await e.insert(
|
|
1608
|
+
let n = await e.insert(yn, {
|
|
1609
1609
|
...t.initialRow,
|
|
1610
1610
|
tag: t.workflowName,
|
|
1611
1611
|
executionId: t.executionId,
|
|
@@ -1622,7 +1622,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
1622
1622
|
};
|
|
1623
1623
|
}
|
|
1624
1624
|
if (n.tag !== t.workflowName || typeof n.id != "string") throw Error("Workflow entry execution belongs to a different resident run");
|
|
1625
|
-
let a = w.decodeUnknownSync(
|
|
1625
|
+
let a = w.decodeUnknownSync(bn)(n.engineDelivery ?? null);
|
|
1626
1626
|
if (a?.requestId !== r?.requestId || a?.restartToken !== r?.restartToken) throw Error("Workflow delivery does not match its resident owner");
|
|
1627
1627
|
if (n.status === "cancelled") return {
|
|
1628
1628
|
kind: "already-cancelled",
|
|
@@ -1638,7 +1638,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
1638
1638
|
generation: n.runnerGeneration
|
|
1639
1639
|
};
|
|
1640
1640
|
if (await f(e, r)) {
|
|
1641
|
-
let i = await
|
|
1641
|
+
let i = await En(e, {
|
|
1642
1642
|
owner: r,
|
|
1643
1643
|
now: t.now,
|
|
1644
1644
|
durationMs: 0,
|
|
@@ -1662,7 +1662,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
1662
1662
|
if (typeof s != "number" || !Number.isSafeInteger(s) || s < 0) throw Error("Workflow entry has an invalid resident reclaim counter");
|
|
1663
1663
|
let c = o ? s + 1 : 0;
|
|
1664
1664
|
if (!Number.isSafeInteger(c)) throw Error("Workflow reclaim counter exhausted");
|
|
1665
|
-
let l = await e.update(
|
|
1665
|
+
let l = await e.update(yn, n.id, {
|
|
1666
1666
|
runnerGeneration: t.generation,
|
|
1667
1667
|
runnerEnteredAt: new Date(t.now),
|
|
1668
1668
|
reclaimCount: c,
|
|
@@ -1684,7 +1684,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
1684
1684
|
row: l,
|
|
1685
1685
|
previous: n
|
|
1686
1686
|
}) : u;
|
|
1687
|
-
},
|
|
1687
|
+
}, Cn = async (e, t) => {
|
|
1688
1688
|
if ([
|
|
1689
1689
|
t.runId,
|
|
1690
1690
|
t.workflowName,
|
|
@@ -1692,7 +1692,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
1692
1692
|
t.generation
|
|
1693
1693
|
].some((e) => e.length === 0)) throw Error("Workflow runner ownership requires non-empty identities");
|
|
1694
1694
|
let n = (await e.query({
|
|
1695
|
-
table:
|
|
1695
|
+
table: yn,
|
|
1696
1696
|
predicate: O("id", t.runId),
|
|
1697
1697
|
lock: "update",
|
|
1698
1698
|
order: [],
|
|
@@ -1702,21 +1702,21 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
1702
1702
|
}))[0];
|
|
1703
1703
|
if (n === void 0 || n.tag !== t.workflowName || n.executionId !== t.executionId) throw Error("Workflow runner ownership does not match its resident run");
|
|
1704
1704
|
return n;
|
|
1705
|
-
},
|
|
1706
|
-
let r = await
|
|
1705
|
+
}, wn = async (e, t, n) => {
|
|
1706
|
+
let r = await Cn(e, t);
|
|
1707
1707
|
if (r.runnerGeneration !== t.generation || r.status !== "suspended" || r.runnerEnteredAt !== null || !await f(e, t)) return !1;
|
|
1708
|
-
if ((await
|
|
1708
|
+
if ((await En(e, {
|
|
1709
1709
|
owner: t,
|
|
1710
1710
|
now: n,
|
|
1711
1711
|
durationMs: 0,
|
|
1712
1712
|
outcome: { status: "cancelled" }
|
|
1713
1713
|
}, "suspended")).kind !== "committed") throw Error("Suspended cancellation lost its resident owner");
|
|
1714
1714
|
return !0;
|
|
1715
|
-
},
|
|
1716
|
-
let r = await
|
|
1715
|
+
}, Tn = async (e, t, n) => {
|
|
1716
|
+
let r = await Cn(e, t);
|
|
1717
1717
|
if (r.runnerGeneration !== t.generation) return { kind: "superseded" };
|
|
1718
1718
|
if (r.status !== "running") return { kind: "not-running" };
|
|
1719
|
-
let i = await e.update(
|
|
1719
|
+
let i = await e.update(yn, t.runId, {
|
|
1720
1720
|
status: "suspended",
|
|
1721
1721
|
runnerEnteredAt: null,
|
|
1722
1722
|
errorTag: n.errorTag,
|
|
@@ -1727,8 +1727,8 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
1727
1727
|
kind: "committed",
|
|
1728
1728
|
row: i
|
|
1729
1729
|
};
|
|
1730
|
-
},
|
|
1731
|
-
let r = await
|
|
1730
|
+
}, En = async (e, t, n) => {
|
|
1731
|
+
let r = await Cn(e, t.owner);
|
|
1732
1732
|
if (r.runnerGeneration !== t.owner.generation) return { kind: "superseded" };
|
|
1733
1733
|
if (r.status !== n) return { kind: "not-running" };
|
|
1734
1734
|
if (!Number.isFinite(t.now) || !Number.isFinite(t.durationMs) || t.durationMs < 0) throw Error("Workflow completion requires finite time and non-negative duration");
|
|
@@ -1799,7 +1799,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
1799
1799
|
}), await B(e, a, t.now);
|
|
1800
1800
|
}
|
|
1801
1801
|
}
|
|
1802
|
-
let o = await e.update(
|
|
1802
|
+
let o = await e.update(yn, t.owner.runId, {
|
|
1803
1803
|
status: i.status,
|
|
1804
1804
|
completedAt: new Date(t.now),
|
|
1805
1805
|
durationMs: t.durationMs,
|
|
@@ -1843,8 +1843,8 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
1843
1843
|
} : {}
|
|
1844
1844
|
}
|
|
1845
1845
|
});
|
|
1846
|
-
await l(e, t), await
|
|
1847
|
-
for await (let n of
|
|
1846
|
+
await l(e, t), await Xt(e, t.owner.executionId, t.now);
|
|
1847
|
+
for await (let n of _t(e, t.owner.executionId, t.owner.workflowName)) {
|
|
1848
1848
|
let [r] = await e.query({
|
|
1849
1849
|
table: W,
|
|
1850
1850
|
predicate: O("id", n.ledgerId),
|
|
@@ -1863,7 +1863,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
1863
1863
|
failureId: a,
|
|
1864
1864
|
terminalEvent: s
|
|
1865
1865
|
};
|
|
1866
|
-
},
|
|
1866
|
+
}, Dn = (e, t) => En(e, t, "running"), On = F("_voltro_workflow_queued_cancellations", {
|
|
1867
1867
|
id: j({ prefix: "wfqc" }),
|
|
1868
1868
|
receiptId: I(),
|
|
1869
1869
|
workflowName: I(),
|
|
@@ -1872,19 +1872,19 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
1872
1872
|
cause: P().nullable(),
|
|
1873
1873
|
target: P(),
|
|
1874
1874
|
controlBinding: P().nullable()
|
|
1875
|
-
}).index(["receiptId"]).index(["workflowName", "id"]).nonReactive(),
|
|
1875
|
+
}).index(["receiptId"]).index(["workflowName", "id"]).nonReactive(), kn = w.NullOr(w.Struct({
|
|
1876
1876
|
reason: w.NonEmptyString,
|
|
1877
1877
|
detail: w.optional(w.Record({
|
|
1878
1878
|
key: w.String,
|
|
1879
1879
|
value: w.Unknown
|
|
1880
1880
|
}))
|
|
1881
|
-
})),
|
|
1881
|
+
})), An = w.Struct({
|
|
1882
1882
|
id: w.NonEmptyString,
|
|
1883
1883
|
receiptId: w.NonEmptyString,
|
|
1884
1884
|
workflowName: w.NonEmptyString,
|
|
1885
1885
|
tenantId: w.NullOr(w.String),
|
|
1886
1886
|
requestedAt: w.DateFromSelf,
|
|
1887
|
-
cause:
|
|
1887
|
+
cause: kn,
|
|
1888
1888
|
controlBinding: w.NullOr(w.Struct({
|
|
1889
1889
|
controlId: w.NonEmptyString,
|
|
1890
1890
|
runId: w.NonEmptyString,
|
|
@@ -1898,14 +1898,14 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
1898
1898
|
kind: w.Literal("terminal"),
|
|
1899
1899
|
receipt: w.Unknown
|
|
1900
1900
|
}))
|
|
1901
|
-
}),
|
|
1902
|
-
let t = w.decodeUnknownSync(
|
|
1901
|
+
}), jn = (e) => {
|
|
1902
|
+
let t = w.decodeUnknownSync(An)(e);
|
|
1903
1903
|
if (!Number.isFinite(t.requestedAt.getTime())) throw Error("Queued cancellation request has an invalid timestamp");
|
|
1904
1904
|
if (t.target.kind === "submission") return {
|
|
1905
1905
|
...t,
|
|
1906
1906
|
target: t.target
|
|
1907
1907
|
};
|
|
1908
|
-
let n =
|
|
1908
|
+
let n = Mt(t.target.receipt);
|
|
1909
1909
|
if (t.controlBinding !== null) throw Error("A non-executed start cannot have a run control binding");
|
|
1910
1910
|
if (n.id !== t.receiptId || n.workflowName !== t.workflowName || n.tenantId !== t.tenantId || n.terminal === null) throw Error("Queued cancellation terminal evidence belongs to another start or is not terminal");
|
|
1911
1911
|
return {
|
|
@@ -1915,9 +1915,9 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
1915
1915
|
receipt: n
|
|
1916
1916
|
}
|
|
1917
1917
|
};
|
|
1918
|
-
},
|
|
1918
|
+
}, Mn = async (e, t) => {
|
|
1919
1919
|
let [n] = await e.query({
|
|
1920
|
-
table:
|
|
1920
|
+
table: On.tableName,
|
|
1921
1921
|
predicate: O("id", t),
|
|
1922
1922
|
lock: "update",
|
|
1923
1923
|
order: [],
|
|
@@ -1925,16 +1925,16 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
1925
1925
|
skip: void 0,
|
|
1926
1926
|
projection: void 0
|
|
1927
1927
|
});
|
|
1928
|
-
return n === void 0 ? void 0 :
|
|
1929
|
-
},
|
|
1928
|
+
return n === void 0 ? void 0 : jn(n);
|
|
1929
|
+
}, Nn = async (e, t) => {
|
|
1930
1930
|
let n = t.controlBinding;
|
|
1931
1931
|
if (n === null) throw Error("Queued cancellation has no control binding");
|
|
1932
1932
|
let r = await p(e, n.controlId);
|
|
1933
1933
|
if (r === void 0 || r.operation !== "cancel" || r.workflowName !== t.workflowName || r.runId !== n.runId || r.executionId !== n.executionId || r.generation !== n.generation || r.owner?.tenantId !== t.tenantId || r.result?.status === "running") throw Error("Queued cancellation lost its original resident control owner");
|
|
1934
1934
|
return r;
|
|
1935
|
-
},
|
|
1935
|
+
}, Pn = async (e, t, n) => {
|
|
1936
1936
|
if (t.controlBinding === null) return;
|
|
1937
|
-
let r = await
|
|
1937
|
+
let r = await Nn(e, t);
|
|
1938
1938
|
if (r.result !== null) return;
|
|
1939
1939
|
let [i] = await e.query({
|
|
1940
1940
|
table: "_voltro_workflow_runs",
|
|
@@ -1945,14 +1945,14 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
1945
1945
|
skip: void 0,
|
|
1946
1946
|
projection: void 0
|
|
1947
1947
|
});
|
|
1948
|
-
i !== void 0 && await
|
|
1948
|
+
i !== void 0 && await wn(e, {
|
|
1949
1949
|
runId: r.runId,
|
|
1950
1950
|
workflowName: r.workflowName,
|
|
1951
1951
|
executionId: r.executionId,
|
|
1952
1952
|
generation: r.generation
|
|
1953
1953
|
}, n);
|
|
1954
|
-
},
|
|
1955
|
-
let n = await
|
|
1954
|
+
}, Fn = async (e, t) => {
|
|
1955
|
+
let n = await Mn(e, t.requestId);
|
|
1956
1956
|
if (n === void 0) return {
|
|
1957
1957
|
kind: "unknown",
|
|
1958
1958
|
reason: "missing-request"
|
|
@@ -1968,7 +1968,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
1968
1968
|
};
|
|
1969
1969
|
}
|
|
1970
1970
|
if (n.controlBinding !== null) {
|
|
1971
|
-
let t = await
|
|
1971
|
+
let t = await Nn(e, n);
|
|
1972
1972
|
if (t.result !== null) return {
|
|
1973
1973
|
kind: t.result.kind,
|
|
1974
1974
|
request: n,
|
|
@@ -2016,10 +2016,10 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2016
2016
|
request: n,
|
|
2017
2017
|
outcome: {
|
|
2018
2018
|
kind: "rejected",
|
|
2019
|
-
failureId: await
|
|
2019
|
+
failureId: await kt(e, r)
|
|
2020
2020
|
}
|
|
2021
2021
|
};
|
|
2022
|
-
},
|
|
2022
|
+
}, In = (e, t) => {
|
|
2023
2023
|
let n = "request" in t ? t.request : void 0;
|
|
2024
2024
|
if (n !== void 0 && (n.id !== e.requestId || n.receiptId !== e.receiptId || n.workflowName !== e.workflowName)) throw Error("Queued control result belongs to another request or receipt");
|
|
2025
2025
|
let r = {
|
|
@@ -2067,14 +2067,14 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2067
2067
|
...r,
|
|
2068
2068
|
observation: { kind: "pending" }
|
|
2069
2069
|
});
|
|
2070
|
-
},
|
|
2070
|
+
}, Ln = async (e, t) => {
|
|
2071
2071
|
let n = w.decodeUnknownSync(w.Struct({
|
|
2072
2072
|
id: w.NonEmptyString,
|
|
2073
2073
|
receiptId: w.NonEmptyString,
|
|
2074
2074
|
workflowName: w.NonEmptyString,
|
|
2075
2075
|
tenantId: w.NullOr(w.String),
|
|
2076
2076
|
requestedAt: w.DateFromSelf,
|
|
2077
|
-
cause:
|
|
2077
|
+
cause: kn
|
|
2078
2078
|
}))({
|
|
2079
2079
|
id: t.requestId,
|
|
2080
2080
|
receiptId: t.receiptId,
|
|
@@ -2084,30 +2084,30 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2084
2084
|
cause: t.cause ?? null
|
|
2085
2085
|
});
|
|
2086
2086
|
if (!Number.isFinite(n.requestedAt.getTime())) throw Error("Queued cancellation request requires a valid timestamp");
|
|
2087
|
-
let r = await
|
|
2087
|
+
let r = await Mn(e, n.id);
|
|
2088
2088
|
if (r !== void 0) {
|
|
2089
2089
|
if (r.receiptId !== n.receiptId || r.workflowName !== n.workflowName || r.tenantId !== n.tenantId) throw Error("Queued cancellation identity belongs to a different start or owner");
|
|
2090
|
-
return await
|
|
2090
|
+
return await Pn(e, r, t.now), r;
|
|
2091
2091
|
}
|
|
2092
|
-
let i = await
|
|
2092
|
+
let i = await un(e, t), a;
|
|
2093
2093
|
if (i.kind === "submitted") a = {
|
|
2094
2094
|
kind: "submission",
|
|
2095
2095
|
submissionId: i.submissionId
|
|
2096
2096
|
};
|
|
2097
2097
|
else {
|
|
2098
|
-
let n = await
|
|
2098
|
+
let n = await Nt(e, t.receiptId);
|
|
2099
2099
|
if (n === void 0) throw Error("Cancelled start receipt disappeared during request acceptance");
|
|
2100
2100
|
a = {
|
|
2101
2101
|
kind: "terminal",
|
|
2102
2102
|
receipt: n
|
|
2103
2103
|
};
|
|
2104
2104
|
}
|
|
2105
|
-
let o =
|
|
2105
|
+
let o = jn({
|
|
2106
2106
|
...n,
|
|
2107
2107
|
target: a,
|
|
2108
2108
|
controlBinding: null
|
|
2109
2109
|
});
|
|
2110
|
-
if (await e.insert(
|
|
2110
|
+
if (await e.insert(On.tableName, o), a.kind === "submission") {
|
|
2111
2111
|
let n = await V(e, a.submissionId);
|
|
2112
2112
|
if (n === void 0) throw Error("Queued cancellation submission disappeared during acceptance");
|
|
2113
2113
|
if (n.preparedExecutionId !== null && n.dispatchAttempts > 0) {
|
|
@@ -2131,14 +2131,14 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2131
2131
|
workflowName: n.tag,
|
|
2132
2132
|
executionId: n.executionId,
|
|
2133
2133
|
generation: n.runnerGeneration
|
|
2134
|
-
}, a = await
|
|
2135
|
-
return await
|
|
2134
|
+
}, a = await Rn(e, o.id, i);
|
|
2135
|
+
return await Pn(e, a.request, t.now), a.request;
|
|
2136
2136
|
}
|
|
2137
2137
|
}
|
|
2138
2138
|
}
|
|
2139
2139
|
return o;
|
|
2140
|
-
},
|
|
2141
|
-
let r = await
|
|
2140
|
+
}, Rn = async (e, t, n) => {
|
|
2141
|
+
let r = await Mn(e, t);
|
|
2142
2142
|
if (r === void 0) throw Error("Queued cancellation request is missing");
|
|
2143
2143
|
if (r.target.kind === "terminal") return {
|
|
2144
2144
|
kind: "terminal",
|
|
@@ -2147,7 +2147,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2147
2147
|
if (r.controlBinding !== null) return {
|
|
2148
2148
|
kind: "bound",
|
|
2149
2149
|
request: r,
|
|
2150
|
-
control: await
|
|
2150
|
+
control: await Nn(e, r)
|
|
2151
2151
|
};
|
|
2152
2152
|
let i = await V(e, r.target.submissionId);
|
|
2153
2153
|
if (i === void 0 || i.workflowName !== r.workflowName || i.tenantId !== r.tenantId || !i.receiptsBound || i.failureId !== null || i.dispatchAttempts === 0 || i.preparedExecutionId !== n.executionId || i.executionId !== null && i.executionId !== n.executionId || i.runId !== null && i.runId !== n.runId || n.workflowName !== r.workflowName) throw Error("Queued cancellation has no dispatched submission for this resident execution");
|
|
@@ -2179,7 +2179,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2179
2179
|
requestedAt: r.requestedAt.getTime(),
|
|
2180
2180
|
cause: r.cause
|
|
2181
2181
|
});
|
|
2182
|
-
if (await e.update(
|
|
2182
|
+
if (await e.update(On.tableName, r.id, { controlBinding: s }) === null) throw Error("Queued cancellation request disappeared during run binding");
|
|
2183
2183
|
return {
|
|
2184
2184
|
kind: "bound",
|
|
2185
2185
|
request: {
|
|
@@ -2188,14 +2188,14 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2188
2188
|
},
|
|
2189
2189
|
control: c
|
|
2190
2190
|
};
|
|
2191
|
-
},
|
|
2191
|
+
}, zn = async (e, t) => {
|
|
2192
2192
|
let n = /* @__PURE__ */ new Set();
|
|
2193
|
-
for await (let r of
|
|
2193
|
+
for await (let r of _t(e, t.executionId, t.workflowName)) n.add(r.id);
|
|
2194
2194
|
if (n.size === 0) return !1;
|
|
2195
2195
|
let r, i = !1;
|
|
2196
2196
|
for (;;) {
|
|
2197
2197
|
let a = await e.query({
|
|
2198
|
-
table:
|
|
2198
|
+
table: On.tableName,
|
|
2199
2199
|
predicate: D(O("workflowName", t.workflowName), ...r === void 0 ? [] : [A("id", r)]),
|
|
2200
2200
|
lock: "update",
|
|
2201
2201
|
order: [{
|
|
@@ -2207,9 +2207,9 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2207
2207
|
projection: void 0
|
|
2208
2208
|
});
|
|
2209
2209
|
for (let o of a) {
|
|
2210
|
-
let a =
|
|
2210
|
+
let a = jn(o);
|
|
2211
2211
|
if (r = a.id, a.target.kind !== "submission" || !n.has(a.target.submissionId)) continue;
|
|
2212
|
-
let s = await
|
|
2212
|
+
let s = await Rn(e, a.id, t);
|
|
2213
2213
|
if (s.kind === "bound") {
|
|
2214
2214
|
if (s.control.runId !== t.runId || s.control.executionId !== t.executionId || s.control.workflowName !== t.workflowName) throw Error("Queued cancellation entry does not match its original resident execution");
|
|
2215
2215
|
s.control.result === null && (i = !0);
|
|
@@ -2217,22 +2217,22 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2217
2217
|
}
|
|
2218
2218
|
if (a.length < 100) return i;
|
|
2219
2219
|
}
|
|
2220
|
-
},
|
|
2220
|
+
}, Bn = w.Struct({
|
|
2221
2221
|
requestId: w.NonEmptyString,
|
|
2222
2222
|
receiptId: w.NonEmptyString,
|
|
2223
2223
|
workflowName: w.NonEmptyString,
|
|
2224
2224
|
tenantId: w.NullOr(w.String)
|
|
2225
|
-
}),
|
|
2226
|
-
let n = w.decodeUnknownSync(
|
|
2227
|
-
return await
|
|
2225
|
+
}), Vn = async (e, t) => {
|
|
2226
|
+
let n = w.decodeUnknownSync(Bn)(t);
|
|
2227
|
+
return await Ln(e, {
|
|
2228
2228
|
...n,
|
|
2229
2229
|
now: t.now,
|
|
2230
2230
|
...t.cause === void 0 ? {} : { cause: t.cause }
|
|
2231
|
-
}),
|
|
2232
|
-
},
|
|
2233
|
-
let n = w.decodeUnknownSync(
|
|
2234
|
-
return
|
|
2235
|
-
},
|
|
2231
|
+
}), Hn(e, n);
|
|
2232
|
+
}, Hn = async (e, t) => {
|
|
2233
|
+
let n = w.decodeUnknownSync(Bn)(t);
|
|
2234
|
+
return In(n, await Fn(e, n));
|
|
2235
|
+
}, Un = async (e, t) => {
|
|
2236
2236
|
if (new Set(t.intentIds).size !== t.intentIds.length) throw Error("Admitted transfer requires distinct pending identities");
|
|
2237
2237
|
let n = await V(e, t.id);
|
|
2238
2238
|
if (n !== void 0) {
|
|
@@ -2253,14 +2253,14 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2253
2253
|
let i = q(r[0]);
|
|
2254
2254
|
if (i.workflowName !== t.workflowName || i.tenantId !== t.tenantId || i.deadLetteredAt !== void 0) throw Error("Admitted transfer selected a foreign or dead-lettered input");
|
|
2255
2255
|
}
|
|
2256
|
-
let r = await
|
|
2257
|
-
await
|
|
2256
|
+
let r = await St(e, t);
|
|
2257
|
+
await It(e, r.id);
|
|
2258
2258
|
for (let t of r.intentIds) if (!await e.delete("_voltro_workflow_pending", t)) throw Error("Admitted input disappeared during submission transfer");
|
|
2259
2259
|
return {
|
|
2260
2260
|
...r,
|
|
2261
2261
|
receiptsBound: !0
|
|
2262
2262
|
};
|
|
2263
|
-
},
|
|
2263
|
+
}, Wn = async (e, t) => ze(e, (e) => Gn(e, t)), Gn = async (e, t) => {
|
|
2264
2264
|
if (t.id.length === 0 || t.intentIds.length === 0 || new Set(t.intentIds).size !== t.intentIds.length) throw Error("Queue transfer requires a submission identity and distinct pending identities");
|
|
2265
2265
|
let n = await V(e, t.id);
|
|
2266
2266
|
if (n !== void 0) {
|
|
@@ -2291,7 +2291,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2291
2291
|
}
|
|
2292
2292
|
let i = t.prepare(r);
|
|
2293
2293
|
if (i.control.workflowName !== t.workflowName) throw Error("Prepared submission belongs to a different workflow");
|
|
2294
|
-
let a = await
|
|
2294
|
+
let a = await xt(e, {
|
|
2295
2295
|
...i,
|
|
2296
2296
|
id: t.id,
|
|
2297
2297
|
tenantId: t.tenantId,
|
|
@@ -2299,7 +2299,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2299
2299
|
now: t.now
|
|
2300
2300
|
});
|
|
2301
2301
|
if (a.kind !== "reserved") return a;
|
|
2302
|
-
await
|
|
2302
|
+
await It(e, t.id);
|
|
2303
2303
|
for (let t of r) if (!await e.delete("_voltro_workflow_pending", t.id)) throw Error("Pending start disappeared during queue transfer");
|
|
2304
2304
|
return {
|
|
2305
2305
|
...a,
|
|
@@ -2308,8 +2308,8 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2308
2308
|
receiptsBound: !0
|
|
2309
2309
|
}
|
|
2310
2310
|
};
|
|
2311
|
-
},
|
|
2312
|
-
let { store: t, control: n, now: r } = e, i = Ue(n, e.payload), a = await
|
|
2311
|
+
}, Kn = async (e) => {
|
|
2312
|
+
let { store: t, control: n, now: r } = e, i = Ue(n, e.payload), a = await cn({
|
|
2313
2313
|
store: t,
|
|
2314
2314
|
control: n,
|
|
2315
2315
|
keys: i,
|
|
@@ -2354,7 +2354,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2354
2354
|
};
|
|
2355
2355
|
if (a.kind === "defer") return {
|
|
2356
2356
|
kind: "queued",
|
|
2357
|
-
intentId: await
|
|
2357
|
+
intentId: await qt({
|
|
2358
2358
|
store: t,
|
|
2359
2359
|
control: n,
|
|
2360
2360
|
decision: a,
|
|
@@ -2370,7 +2370,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2370
2370
|
};
|
|
2371
2371
|
let o = e.payload, s = [], c = 1;
|
|
2372
2372
|
if (n.batch !== void 0 && i.batchKey !== void 0) {
|
|
2373
|
-
let r = await
|
|
2373
|
+
let r = await qn(t, n.workflowName, i.batchKey, n.batch.maxSize);
|
|
2374
2374
|
o = { items: [...r.map((e) => e.payload), e.payload] }, s = r.map((e) => e.id), c = r.length + 1;
|
|
2375
2375
|
}
|
|
2376
2376
|
return {
|
|
@@ -2398,7 +2398,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2398
2398
|
runId: a.evict.runId
|
|
2399
2399
|
} }
|
|
2400
2400
|
};
|
|
2401
|
-
},
|
|
2401
|
+
}, qn = async (e, t, n, r) => (await e.query({
|
|
2402
2402
|
table: "_voltro_workflow_pending",
|
|
2403
2403
|
predicate: D(O("workflowName", t), O("controlKey", n), O("mode", "batch")),
|
|
2404
2404
|
order: [{
|
|
@@ -2411,22 +2411,22 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2411
2411
|
})).map((n) => ({
|
|
2412
2412
|
id: String(n.id),
|
|
2413
2413
|
payload: G(e, t, n.payload)
|
|
2414
|
-
})),
|
|
2414
|
+
})), Jn = async (e, t, n, r) => {
|
|
2415
2415
|
await e.update("_voltro_workflow_admissions", t, {
|
|
2416
2416
|
executionId: n,
|
|
2417
2417
|
runId: r
|
|
2418
2418
|
});
|
|
2419
|
-
},
|
|
2419
|
+
}, Yn = F("_voltro_workflow_watermarks", {
|
|
2420
2420
|
id: j({ prefix: "wfwm" }),
|
|
2421
2421
|
positionAt: L(),
|
|
2422
2422
|
updatedAt: L().default("now")
|
|
2423
|
-
}),
|
|
2423
|
+
}), Xn = (e) => {
|
|
2424
2424
|
let t = e instanceof Error ? e.message : String(e);
|
|
2425
2425
|
return t.length > 400 ? `${t.slice(0, 400)}…` : t;
|
|
2426
|
-
},
|
|
2426
|
+
}, Zn = (e) => {
|
|
2427
2427
|
let t = [], n = [], r = [], i = /* @__PURE__ */ new Set(), a = /* @__PURE__ */ new Set(), o = e.payloadSchema === void 0 ? (e) => C.right(e) : (t) => {
|
|
2428
2428
|
let n = w.decodeUnknownEither(e.payloadSchema)(t);
|
|
2429
|
-
return C.isRight(n) ? C.right(n.right) : C.left(
|
|
2429
|
+
return C.isRight(n) ? C.right(n.right) : C.left(Xn(n.left));
|
|
2430
2430
|
}, s = e.runs.map((e) => ({
|
|
2431
2431
|
run: e,
|
|
2432
2432
|
decoded: o(e.payload)
|
|
@@ -2443,7 +2443,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2443
2443
|
workflowName: e.workflowName,
|
|
2444
2444
|
event: o.event,
|
|
2445
2445
|
subject: l.id,
|
|
2446
|
-
detail:
|
|
2446
|
+
detail: Xn(u.left)
|
|
2447
2447
|
});
|
|
2448
2448
|
continue;
|
|
2449
2449
|
}
|
|
@@ -2463,7 +2463,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2463
2463
|
workflowName: e.workflowName,
|
|
2464
2464
|
event: o.event,
|
|
2465
2465
|
subject: n,
|
|
2466
|
-
detail:
|
|
2466
|
+
detail: Xn(t)
|
|
2467
2467
|
}), !1;
|
|
2468
2468
|
}
|
|
2469
2469
|
};
|
|
@@ -2486,33 +2486,33 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2486
2486
|
discards: n,
|
|
2487
2487
|
problems: r
|
|
2488
2488
|
};
|
|
2489
|
-
},
|
|
2489
|
+
}, Qn = (e) => {
|
|
2490
2490
|
let t;
|
|
2491
2491
|
for (let n of e) (t === void 0 || n.occurredAt.getTime() > t.getTime()) && (t = n.occurredAt);
|
|
2492
2492
|
return t;
|
|
2493
|
-
},
|
|
2493
|
+
}, $n = "_voltro_workflow_watermarks", er = "_voltro_workflow_events", tr = "cancelOn", nr = 36e5, rr = 500, ir = (e) => {
|
|
2494
2494
|
if (e instanceof Date) return e;
|
|
2495
2495
|
if (typeof e == "number") return new Date(e);
|
|
2496
2496
|
if (typeof e == "string") {
|
|
2497
2497
|
let t = new Date(e);
|
|
2498
2498
|
if (!Number.isNaN(t.getTime())) return t;
|
|
2499
2499
|
}
|
|
2500
|
-
},
|
|
2501
|
-
table:
|
|
2500
|
+
}, ar = (e) => e instanceof Error ? e.message : String(e), or = async (e, t) => ir((await e.query({
|
|
2501
|
+
table: $n,
|
|
2502
2502
|
predicate: O("id", t),
|
|
2503
2503
|
order: [],
|
|
2504
2504
|
take: 1,
|
|
2505
2505
|
skip: void 0,
|
|
2506
2506
|
projection: void 0
|
|
2507
|
-
}))[0]?.positionAt),
|
|
2508
|
-
await e.upsert(
|
|
2507
|
+
}))[0]?.positionAt), sr = async (e, t, n) => {
|
|
2508
|
+
await e.upsert($n, {
|
|
2509
2509
|
id: t,
|
|
2510
2510
|
positionAt: n,
|
|
2511
2511
|
updatedAt: /* @__PURE__ */ new Date()
|
|
2512
2512
|
}, {
|
|
2513
2513
|
conflictColumns: ["id"],
|
|
2514
2514
|
update: (e) => {
|
|
2515
|
-
let t =
|
|
2515
|
+
let t = ir(e.positionAt);
|
|
2516
2516
|
return t !== void 0 && t.getTime() >= n.getTime() ? {
|
|
2517
2517
|
positionAt: t,
|
|
2518
2518
|
updatedAt: /* @__PURE__ */ new Date()
|
|
@@ -2522,7 +2522,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2522
2522
|
};
|
|
2523
2523
|
}
|
|
2524
2524
|
});
|
|
2525
|
-
},
|
|
2525
|
+
}, cr = async (e, t, n) => {
|
|
2526
2526
|
let r = async (r) => e.query({
|
|
2527
2527
|
table: "_voltro_workflow_runs",
|
|
2528
2528
|
predicate: D(O("tag", t), O("status", r)),
|
|
@@ -2535,7 +2535,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2535
2535
|
projection: void 0
|
|
2536
2536
|
});
|
|
2537
2537
|
return [...await r("running"), ...await r("suspended")].flatMap((e) => {
|
|
2538
|
-
let t = e, n =
|
|
2538
|
+
let t = e, n = ir(t.startedAt);
|
|
2539
2539
|
return typeof t.id != "string" || typeof t.executionId != "string" || n === void 0 ? [] : [{
|
|
2540
2540
|
runId: t.id,
|
|
2541
2541
|
executionId: t.executionId,
|
|
@@ -2543,7 +2543,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2543
2543
|
startedAt: n
|
|
2544
2544
|
}];
|
|
2545
2545
|
});
|
|
2546
|
-
},
|
|
2546
|
+
}, lr = async (e, t, n) => (await e.query({
|
|
2547
2547
|
table: "_voltro_workflow_pending",
|
|
2548
2548
|
predicate: O("workflowName", t),
|
|
2549
2549
|
order: [{
|
|
@@ -2554,13 +2554,13 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2554
2554
|
skip: void 0,
|
|
2555
2555
|
projection: void 0
|
|
2556
2556
|
})).flatMap((e) => {
|
|
2557
|
-
let t = e, n =
|
|
2557
|
+
let t = e, n = ir(t.firstSeenAt);
|
|
2558
2558
|
return typeof t.id != "string" || n === void 0 ? [] : [{
|
|
2559
2559
|
intentId: t.id,
|
|
2560
2560
|
payload: t.payload,
|
|
2561
2561
|
firstSeenAt: n
|
|
2562
2562
|
}];
|
|
2563
|
-
}),
|
|
2563
|
+
}), ur = async (e, t) => {
|
|
2564
2564
|
let n = t.workflows.filter((e) => e.entries.length > 0);
|
|
2565
2565
|
if (n.length === 0) return {
|
|
2566
2566
|
examined: !1,
|
|
@@ -2575,10 +2575,10 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2575
2575
|
};
|
|
2576
2576
|
let r = e.now?.() ?? Date.now(), i = t.batch ?? 500, a = t.coldLookbackMs ?? 36e5, o = /* @__PURE__ */ new Set();
|
|
2577
2577
|
for (let e of n) for (let t of e.entries) o.add(t.event);
|
|
2578
|
-
let s = await
|
|
2579
|
-
s === void 0 && (await
|
|
2578
|
+
let s = await or(e.store, tr), c = s ?? new Date(r - a);
|
|
2579
|
+
s === void 0 && (await sr(e.store, tr, c), s = c);
|
|
2580
2580
|
let l = await e.store.query({
|
|
2581
|
-
table:
|
|
2581
|
+
table: er,
|
|
2582
2582
|
predicate: de("occurredAt", c),
|
|
2583
2583
|
order: [{
|
|
2584
2584
|
column: "occurredAt",
|
|
@@ -2589,7 +2589,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2589
2589
|
projection: void 0
|
|
2590
2590
|
}), u = [];
|
|
2591
2591
|
for (let e of l) {
|
|
2592
|
-
let t = e, n =
|
|
2592
|
+
let t = e, n = ir(t.occurredAt);
|
|
2593
2593
|
typeof t.id == "string" && typeof t.name == "string" && n !== void 0 && o.has(t.name) && u.push({
|
|
2594
2594
|
id: t.id,
|
|
2595
2595
|
name: t.name,
|
|
@@ -2603,15 +2603,15 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2603
2603
|
if (n.length === 0) continue;
|
|
2604
2604
|
let r = [], i = [];
|
|
2605
2605
|
try {
|
|
2606
|
-
r = await
|
|
2606
|
+
r = await cr(e.store, t.workflowName, _), i = await lr(e.store, t.workflowName, _), (r.length >= _ || i.length >= _) && (h = !0);
|
|
2607
2607
|
} catch (e) {
|
|
2608
2608
|
f.push({
|
|
2609
2609
|
subject: t.workflowName,
|
|
2610
|
-
detail:
|
|
2610
|
+
detail: ar(e)
|
|
2611
2611
|
}), g = !0;
|
|
2612
2612
|
continue;
|
|
2613
2613
|
}
|
|
2614
|
-
let a =
|
|
2614
|
+
let a = Zn({
|
|
2615
2615
|
workflowName: t.workflowName,
|
|
2616
2616
|
entries: t.entries,
|
|
2617
2617
|
payloadSchema: t.payloadSchema,
|
|
@@ -2633,7 +2633,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2633
2633
|
} catch (e) {
|
|
2634
2634
|
f.push({
|
|
2635
2635
|
subject: n.runId,
|
|
2636
|
-
detail:
|
|
2636
|
+
detail: ar(e)
|
|
2637
2637
|
}), g = !0;
|
|
2638
2638
|
}
|
|
2639
2639
|
for (let n of a.discards) try {
|
|
@@ -2644,18 +2644,18 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2644
2644
|
} catch (e) {
|
|
2645
2645
|
f.push({
|
|
2646
2646
|
subject: n.intentId,
|
|
2647
|
-
detail:
|
|
2647
|
+
detail: ar(e)
|
|
2648
2648
|
}), g = !0;
|
|
2649
2649
|
}
|
|
2650
2650
|
}
|
|
2651
|
-
let v =
|
|
2651
|
+
let v = Qn(u), ee = s;
|
|
2652
2652
|
if (g) e.log?.warn("workflow.cancelOn: holding the watermark — evaluation or delivery remains incomplete", { failures: f.length });
|
|
2653
2653
|
else if (v !== void 0) try {
|
|
2654
|
-
await
|
|
2654
|
+
await sr(e.store, tr, v), ee = v;
|
|
2655
2655
|
} catch (e) {
|
|
2656
2656
|
f.push({
|
|
2657
|
-
subject:
|
|
2658
|
-
detail:
|
|
2657
|
+
subject: tr,
|
|
2658
|
+
detail: ar(e)
|
|
2659
2659
|
});
|
|
2660
2660
|
}
|
|
2661
2661
|
return d.length > 0 && e.log?.warn("workflow.cancelOn: some events could not be evaluated", {
|
|
@@ -2672,14 +2672,14 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2672
2672
|
failures: f,
|
|
2673
2673
|
watermark: ee
|
|
2674
2674
|
};
|
|
2675
|
-
},
|
|
2675
|
+
}, dr = 18e5, fr = 200, pr = 20, mr = (e) => {
|
|
2676
2676
|
if (e instanceof Date) return e;
|
|
2677
2677
|
if (typeof e == "number") return new Date(e);
|
|
2678
2678
|
if (typeof e == "string") {
|
|
2679
2679
|
let t = new Date(e);
|
|
2680
2680
|
if (!Number.isNaN(t.getTime())) return t;
|
|
2681
2681
|
}
|
|
2682
|
-
},
|
|
2682
|
+
}, hr = (e) => e instanceof Error ? e.message : String(e), gr = async (e, t, n) => (await e.query({
|
|
2683
2683
|
table: "_voltro_workflow_run_events",
|
|
2684
2684
|
predicate: O("runId", t),
|
|
2685
2685
|
order: [{
|
|
@@ -2690,13 +2690,13 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2690
2690
|
skip: void 0,
|
|
2691
2691
|
projection: void 0
|
|
2692
2692
|
})).flatMap((e) => {
|
|
2693
|
-
let t = e, n =
|
|
2693
|
+
let t = e, n = mr(t.occurredAt);
|
|
2694
2694
|
return typeof t.eventType != "string" || n === void 0 ? [] : [{
|
|
2695
2695
|
eventType: t.eventType,
|
|
2696
2696
|
occurredAt: n,
|
|
2697
2697
|
payload: t.payload
|
|
2698
2698
|
}];
|
|
2699
|
-
}),
|
|
2699
|
+
}), _r = async (e, t) => {
|
|
2700
2700
|
let n = (await e.query({
|
|
2701
2701
|
table: "_voltro_workflow_run_steps",
|
|
2702
2702
|
predicate: O("runId", t),
|
|
@@ -2709,24 +2709,24 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2709
2709
|
projection: void 0
|
|
2710
2710
|
}))[0];
|
|
2711
2711
|
if (n === void 0) return;
|
|
2712
|
-
let r =
|
|
2712
|
+
let r = mr(n.startedAt), i = mr(n.completedAt);
|
|
2713
2713
|
return r === void 0 ? i : i === void 0 ? r : i.getTime() > r.getTime() ? i : r;
|
|
2714
|
-
},
|
|
2714
|
+
}, vr = (e, t) => {
|
|
2715
2715
|
for (let n of e) {
|
|
2716
2716
|
if (n.eventType === "timer-fired") return !1;
|
|
2717
2717
|
if (n.eventType !== "timer-set") continue;
|
|
2718
|
-
let e =
|
|
2718
|
+
let e = mr(n.payload?.scheduledWakeAt);
|
|
2719
2719
|
return e !== void 0 && e.getTime() > t;
|
|
2720
2720
|
}
|
|
2721
2721
|
return !1;
|
|
2722
|
-
},
|
|
2722
|
+
}, yr = (e, t) => {
|
|
2723
2723
|
if (e !== "suspended") return "no-progress";
|
|
2724
2724
|
for (let e of t) {
|
|
2725
2725
|
if (e.eventType === "signal-received" || e.eventType === "signal-sent") return "suspended";
|
|
2726
2726
|
if (e.eventType === "signal-awaited") return "awaiting-signal";
|
|
2727
2727
|
}
|
|
2728
2728
|
return "suspended";
|
|
2729
|
-
},
|
|
2729
|
+
}, br = async (e, t = {}) => {
|
|
2730
2730
|
let n = e.now?.() ?? Date.now(), r = t.stallAfterMs ?? 18e5, i = t.runPage ?? 200, a = t.eventLookback ?? 20, o = new Date(n - r), s = [], c = [], l = 0, u = 0, d, f;
|
|
2731
2731
|
try {
|
|
2732
2732
|
if (!Number.isSafeInteger(i) || i < 1) throw Error("Staleness run page must be a positive integer");
|
|
@@ -2748,7 +2748,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2748
2748
|
});
|
|
2749
2749
|
let r = n;
|
|
2750
2750
|
for (let e of d) {
|
|
2751
|
-
let t =
|
|
2751
|
+
let t = mr(e.startedAt);
|
|
2752
2752
|
if (t === void 0 || !Number.isFinite(t.getTime()) || typeof e.id != "string" || e.id.length === 0) throw Error("Staleness candidate has no valid pagination identity");
|
|
2753
2753
|
if (r !== void 0 && (t.getTime() < r.startedAt.getTime() || t.getTime() === r.startedAt.getTime() && e.id <= r.runId)) throw Error("Staleness candidate page did not advance");
|
|
2754
2754
|
r = {
|
|
@@ -2766,24 +2766,24 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2766
2766
|
sawFullRunPage: !1,
|
|
2767
2767
|
failures: [{
|
|
2768
2768
|
subject: "_voltro_workflow_runs",
|
|
2769
|
-
detail:
|
|
2769
|
+
detail: hr(e)
|
|
2770
2770
|
}]
|
|
2771
2771
|
};
|
|
2772
2772
|
}
|
|
2773
2773
|
for (let t of d) {
|
|
2774
|
-
let i = t, o =
|
|
2774
|
+
let i = t, o = mr(i.startedAt);
|
|
2775
2775
|
if (typeof i.id != "string" || typeof i.tag != "string" || typeof i.executionId != "string" || typeof i.status != "string" || o === void 0) continue;
|
|
2776
2776
|
let d, f;
|
|
2777
2777
|
try {
|
|
2778
|
-
d = await
|
|
2778
|
+
d = await gr(e.store, i.id, a), f = await _r(e.store, i.id);
|
|
2779
2779
|
} catch (e) {
|
|
2780
2780
|
s.push({
|
|
2781
2781
|
subject: i.id,
|
|
2782
|
-
detail:
|
|
2782
|
+
detail: hr(e)
|
|
2783
2783
|
});
|
|
2784
2784
|
continue;
|
|
2785
2785
|
}
|
|
2786
|
-
if (
|
|
2786
|
+
if (vr(d, n)) {
|
|
2787
2787
|
u += 1;
|
|
2788
2788
|
continue;
|
|
2789
2789
|
}
|
|
@@ -2802,7 +2802,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2802
2802
|
status: i.status,
|
|
2803
2803
|
lastProgressAt: m,
|
|
2804
2804
|
idleMs: h,
|
|
2805
|
-
reason:
|
|
2805
|
+
reason: yr(i.status, d)
|
|
2806
2806
|
};
|
|
2807
2807
|
c.push(g);
|
|
2808
2808
|
let _ = {};
|
|
@@ -2811,7 +2811,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2811
2811
|
} catch (e) {
|
|
2812
2812
|
s.push({
|
|
2813
2813
|
subject: `${g.runId}:describeRun`,
|
|
2814
|
-
detail:
|
|
2814
|
+
detail: hr(e)
|
|
2815
2815
|
});
|
|
2816
2816
|
}
|
|
2817
2817
|
if (e.log?.warn("workflow.staleness: run has made no progress", {
|
|
@@ -2837,7 +2837,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2837
2837
|
} catch (e) {
|
|
2838
2838
|
s.push({
|
|
2839
2839
|
subject: g.runId,
|
|
2840
|
-
detail:
|
|
2840
|
+
detail: hr(e)
|
|
2841
2841
|
});
|
|
2842
2842
|
}
|
|
2843
2843
|
if (e.onStalled !== void 0) try {
|
|
@@ -2845,7 +2845,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2845
2845
|
} catch (e) {
|
|
2846
2846
|
s.push({
|
|
2847
2847
|
subject: `${g.runId}:onStalled`,
|
|
2848
|
-
detail:
|
|
2848
|
+
detail: hr(e)
|
|
2849
2849
|
});
|
|
2850
2850
|
}
|
|
2851
2851
|
}
|
|
@@ -2858,7 +2858,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2858
2858
|
failures: s,
|
|
2859
2859
|
...f === void 0 ? {} : { nextRun: f }
|
|
2860
2860
|
};
|
|
2861
|
-
},
|
|
2861
|
+
}, xr = async (e, t, n) => {
|
|
2862
2862
|
let r = await e.transaction((e) => V(e, t.id));
|
|
2863
2863
|
if (r === void 0 || r.workflowName !== t.workflowName || r.tenantId !== t.tenantId || r.ledgerId !== t.ledgerId) throw Error("Submission dispatch lost its resident owner");
|
|
2864
2864
|
if (!r.receiptsBound || r.failureId !== null) throw Error("Cannot dispatch an incomplete or rejected submission");
|
|
@@ -2867,19 +2867,19 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2867
2867
|
return r.preparedExecutionId;
|
|
2868
2868
|
}
|
|
2869
2869
|
if (r.dispatchAttempts !== 0 || r.executionId !== null) throw Error("Submission has an unbound prior dispatch; reconciliation required");
|
|
2870
|
-
let i = await e.resolveExecutionId(t.workflowName, n), a = await e.transaction((e) =>
|
|
2870
|
+
let i = await e.resolveExecutionId(t.workflowName, n), a = await e.transaction((e) => Tt(e, t.id, i));
|
|
2871
2871
|
if (a.preparedExecutionId === null) throw Error("Submission preparation returned no execution identity");
|
|
2872
2872
|
return a.preparedExecutionId;
|
|
2873
|
-
},
|
|
2874
|
-
let i =
|
|
2873
|
+
}, Sr = /* @__PURE__ */ new WeakMap(), Cr = async (e, t, n, r) => {
|
|
2874
|
+
let i = Sr.get(e), a = await yt(e.store, n, i?.afterId), o = 0, s = 0, c = 0, l = 0, u = i?.nextDueAt, d = (e) => {
|
|
2875
2875
|
u = Math.min(u ?? e, e);
|
|
2876
2876
|
};
|
|
2877
2877
|
for (let n of a) {
|
|
2878
2878
|
let i;
|
|
2879
2879
|
try {
|
|
2880
|
-
i =
|
|
2880
|
+
i = gt(n);
|
|
2881
2881
|
} catch {
|
|
2882
|
-
o++, c++, d(t +
|
|
2882
|
+
o++, c++, d(t + rn(1)), e.log?.warn?.("workflow submission metadata is invalid", { submissionId: typeof n.id == "string" ? n.id : null });
|
|
2883
2883
|
continue;
|
|
2884
2884
|
}
|
|
2885
2885
|
o++;
|
|
@@ -2905,7 +2905,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2905
2905
|
continue;
|
|
2906
2906
|
}
|
|
2907
2907
|
let c = r ?? await (async () => {
|
|
2908
|
-
let n = e.controls.get(i.workflowName)?.batch === void 0 ? G(e.store, i.workflowName, i.payload) : { items: w.decodeUnknownSync(w.Struct({ items: w.Array(w.Unknown) }))(i.payload).items.map((t) => G(e.store, i.workflowName, t)) }, r = await
|
|
2908
|
+
let n = e.controls.get(i.workflowName)?.batch === void 0 ? G(e.store, i.workflowName, i.payload) : { items: w.decodeUnknownSync(w.Struct({ items: w.Array(w.Unknown) }))(i.payload).items.map((t) => G(e.store, i.workflowName, t)) }, r = await xr(e, i, n), o = await e.transaction((e) => Dt(e, i.id, t));
|
|
2909
2909
|
if (o === null) return;
|
|
2910
2910
|
a = o.dispatchAttempts === 1 ? 1 : void 0;
|
|
2911
2911
|
let s = await e.startAdmitted(i.workflowName, n, i.callerContext, r);
|
|
@@ -2921,7 +2921,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2921
2921
|
source: "flow-control",
|
|
2922
2922
|
mode: "singleton"
|
|
2923
2923
|
}
|
|
2924
|
-
}), await
|
|
2924
|
+
}), await Xt(e.store, i.eviction.executionId, t)), await e.transaction((e) => wt(e, i.id, {
|
|
2925
2925
|
executionId: c.executionId,
|
|
2926
2926
|
runId: c.runId ?? null
|
|
2927
2927
|
})), s++;
|
|
@@ -2930,7 +2930,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2930
2930
|
let o;
|
|
2931
2931
|
try {
|
|
2932
2932
|
if (a !== void 0 && e.isPermanentStartError?.(n) === !0) {
|
|
2933
|
-
let r = a, o = await e.transaction((a) =>
|
|
2933
|
+
let r = a, o = await e.transaction((a) => Ot(a, i.id, r, {
|
|
2934
2934
|
handler: e.controls.get(i.workflowName)?.onFailure ?? null,
|
|
2935
2935
|
errorMessage: String(n),
|
|
2936
2936
|
now: t
|
|
@@ -2944,7 +2944,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2944
2944
|
continue;
|
|
2945
2945
|
}
|
|
2946
2946
|
}
|
|
2947
|
-
o = await e.transaction((e) =>
|
|
2947
|
+
o = await e.transaction((e) => Et(e, i.id, String(n), t, r));
|
|
2948
2948
|
} catch (r) {
|
|
2949
2949
|
d(t), e.log?.warn?.("workflow submission retry state could not be recorded", {
|
|
2950
2950
|
workflow: i.workflowName,
|
|
@@ -2964,7 +2964,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2964
2964
|
}
|
|
2965
2965
|
}
|
|
2966
2966
|
let f = a.at(-1);
|
|
2967
|
-
return a.length === n && f !== void 0 && typeof f.id == "string" ? (
|
|
2967
|
+
return a.length === n && f !== void 0 && typeof f.id == "string" ? (Sr.set(e, {
|
|
2968
2968
|
afterId: f.id,
|
|
2969
2969
|
nextDueAt: u
|
|
2970
2970
|
}), {
|
|
@@ -2974,7 +2974,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2974
2974
|
rejected: l,
|
|
2975
2975
|
nextDueAt: t,
|
|
2976
2976
|
examined: !0
|
|
2977
|
-
}) : (
|
|
2977
|
+
}) : (Sr.delete(e), {
|
|
2978
2978
|
scanned: o,
|
|
2979
2979
|
admitted: s,
|
|
2980
2980
|
failed: c,
|
|
@@ -2982,8 +2982,8 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2982
2982
|
nextDueAt: u,
|
|
2983
2983
|
examined: a.length > 0
|
|
2984
2984
|
});
|
|
2985
|
-
},
|
|
2986
|
-
let r =
|
|
2985
|
+
}, wr = /* @__PURE__ */ new WeakMap(), Tr = async (e, t, n) => {
|
|
2986
|
+
let r = wr.get(e), i = await e.store.query({
|
|
2987
2987
|
table: Ze,
|
|
2988
2988
|
predicate: D(pe("handler"), N("acceptedExecutionId"), ...r === void 0 ? [] : [A("id", r.afterId)]),
|
|
2989
2989
|
order: [{
|
|
@@ -2994,7 +2994,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
2994
2994
|
skip: void 0,
|
|
2995
2995
|
projection: void 0
|
|
2996
2996
|
}), a = 0, o = !1, s = r?.nextDueAt, c = () => {
|
|
2997
|
-
let e = t +
|
|
2997
|
+
let e = t + rn(1, () => 1);
|
|
2998
2998
|
s = Math.min(s ?? e, e);
|
|
2999
2999
|
};
|
|
3000
3000
|
for (let n of i) try {
|
|
@@ -3008,7 +3008,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3008
3008
|
});
|
|
3009
3009
|
}
|
|
3010
3010
|
let l = i.at(-1);
|
|
3011
|
-
return i.length === n && l !== void 0 && typeof l.id == "string" ? (
|
|
3011
|
+
return i.length === n && l !== void 0 && typeof l.id == "string" ? (wr.set(e, {
|
|
3012
3012
|
afterId: l.id,
|
|
3013
3013
|
nextDueAt: s
|
|
3014
3014
|
}), {
|
|
@@ -3017,16 +3017,16 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3017
3017
|
hasPending: o,
|
|
3018
3018
|
nextDueAt: t,
|
|
3019
3019
|
examined: !0
|
|
3020
|
-
}) : (
|
|
3020
|
+
}) : (wr.delete(e), {
|
|
3021
3021
|
scanned: i.length,
|
|
3022
3022
|
failed: a,
|
|
3023
3023
|
hasPending: o,
|
|
3024
3024
|
nextDueAt: s,
|
|
3025
3025
|
examined: i.length > 0
|
|
3026
3026
|
});
|
|
3027
|
-
},
|
|
3028
|
-
let r =
|
|
3029
|
-
table:
|
|
3027
|
+
}, Er = "_voltro_workflow_parent_closures", Dr = /* @__PURE__ */ new WeakMap(), Or = async (e, t, n) => {
|
|
3028
|
+
let r = Dr.get(e), i = await e.store.query({
|
|
3029
|
+
table: Er,
|
|
3030
3030
|
predicate: D(N("completedAt"), ...r === void 0 ? [] : [A("id", r.afterId)]),
|
|
3031
3031
|
order: [{
|
|
3032
3032
|
column: "id",
|
|
@@ -3042,9 +3042,9 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3042
3042
|
if (typeof n.id != "string" || n.id.length === 0) throw Error("Parent closure has no identity");
|
|
3043
3043
|
let r = n.id;
|
|
3044
3044
|
await e.transaction(async (e) => {
|
|
3045
|
-
await
|
|
3045
|
+
await hn(e, r, t);
|
|
3046
3046
|
let [n] = await e.query({
|
|
3047
|
-
table:
|
|
3047
|
+
table: Er,
|
|
3048
3048
|
predicate: O("id", r),
|
|
3049
3049
|
order: [],
|
|
3050
3050
|
take: 1,
|
|
@@ -3058,7 +3058,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3058
3058
|
a++, s(), e.log?.warn?.("workflow parent closure could not be reconciled", { closureId: typeof n.id == "string" ? n.id : null });
|
|
3059
3059
|
}
|
|
3060
3060
|
let c = i.at(-1);
|
|
3061
|
-
return i.length === n && typeof c?.id == "string" ? (
|
|
3061
|
+
return i.length === n && typeof c?.id == "string" ? (Dr.set(e, {
|
|
3062
3062
|
afterId: c.id,
|
|
3063
3063
|
nextDueAt: o
|
|
3064
3064
|
}), {
|
|
@@ -3066,13 +3066,13 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3066
3066
|
failed: a,
|
|
3067
3067
|
nextDueAt: t,
|
|
3068
3068
|
examined: !0
|
|
3069
|
-
}) : (
|
|
3069
|
+
}) : (Dr.delete(e), {
|
|
3070
3070
|
scanned: i.length,
|
|
3071
3071
|
failed: a,
|
|
3072
3072
|
nextDueAt: o,
|
|
3073
3073
|
examined: i.length > 0
|
|
3074
3074
|
});
|
|
3075
|
-
},
|
|
3075
|
+
}, kr = async (e, t) => {
|
|
3076
3076
|
if (t.from === t.to) throw Error("Queue transfer requires distinct source and target");
|
|
3077
3077
|
let n = await e.query({
|
|
3078
3078
|
table: U,
|
|
@@ -3088,7 +3088,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3088
3088
|
if (r.workflowName !== t.workflowName || r.tenantId !== t.tenantId) throw Error("Receipt target belongs to a different workflow or tenant");
|
|
3089
3089
|
for (;;) {
|
|
3090
3090
|
let n = await e.query({
|
|
3091
|
-
table:
|
|
3091
|
+
table: At,
|
|
3092
3092
|
predicate: D(O("pendingId", t.from), N("submissionId"), N("terminal")),
|
|
3093
3093
|
order: [{
|
|
3094
3094
|
column: "id",
|
|
@@ -3100,12 +3100,12 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3100
3100
|
});
|
|
3101
3101
|
if (n.length === 0) return;
|
|
3102
3102
|
for (let r of n) {
|
|
3103
|
-
let n =
|
|
3103
|
+
let n = Mt(r);
|
|
3104
3104
|
if (n.workflowName !== t.workflowName || n.tenantId !== t.tenantId) throw Error("Forwarded receipt belongs to a different workflow or tenant");
|
|
3105
3105
|
if (await e.update("_voltro_workflow_start_receipts", n.id, { pendingId: t.to }) === null) throw Error("Start receipt disappeared during queue transfer");
|
|
3106
3106
|
}
|
|
3107
3107
|
}
|
|
3108
|
-
},
|
|
3108
|
+
}, Ar = {
|
|
3109
3109
|
scanned: 0,
|
|
3110
3110
|
admitted: 0,
|
|
3111
3111
|
deferred: 0,
|
|
@@ -3117,24 +3117,24 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3117
3117
|
deadLettered: 0,
|
|
3118
3118
|
timedOut: 0,
|
|
3119
3119
|
examined: !1
|
|
3120
|
-
},
|
|
3120
|
+
}, jr = 200, Mr = class extends Error {
|
|
3121
3121
|
submissionId;
|
|
3122
3122
|
rejected;
|
|
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
|
-
},
|
|
3126
|
+
}, Nr = 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
|
-
c = await
|
|
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));
|
|
3130
3130
|
let r = t.skipPending === !0 && !l.hasPending ? {
|
|
3131
3131
|
due: [],
|
|
3132
3132
|
nextDueAt: void 0
|
|
3133
|
-
} : await
|
|
3133
|
+
} : await Qt(e.store, n(), i);
|
|
3134
3134
|
o = r.due, s = c.nextDueAt === void 0 ? r.nextDueAt : Math.min(r.nextDueAt ?? c.nextDueAt, c.nextDueAt), l.nextDueAt !== void 0 && (s = Math.min(s ?? l.nextDueAt, l.nextDueAt)), u.nextDueAt !== void 0 && (s = Math.min(s ?? u.nextDueAt, u.nextDueAt));
|
|
3135
3135
|
} catch (e) {
|
|
3136
3136
|
return r?.warn?.("workflow flow control: could not read the admission queue", { cause: String(e) }), {
|
|
3137
|
-
...
|
|
3137
|
+
...Ar,
|
|
3138
3138
|
scanned: (c?.scanned ?? 0) + (l?.scanned ?? 0) + (u?.scanned ?? 0),
|
|
3139
3139
|
admitted: c?.admitted ?? 0,
|
|
3140
3140
|
deadLettered: c?.rejected ?? 0,
|
|
@@ -3167,9 +3167,9 @@ var _n = "_voltro_workflow_runs", vn = 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 Lr(e, t, a, d, n());
|
|
3171
3171
|
} catch (i) {
|
|
3172
|
-
if (d.failed++, i instanceof
|
|
3172
|
+
if (d.failed++, i instanceof Mr) {
|
|
3173
3173
|
i.rejected && d.deadLettered++, r?.warn?.(i.message, {
|
|
3174
3174
|
submissionId: i.submissionId,
|
|
3175
3175
|
cause: String(i.cause)
|
|
@@ -3179,7 +3179,7 @@ var _n = "_voltro_workflow_runs", vn = 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 Fr(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)
|
|
@@ -3196,12 +3196,12 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3196
3196
|
workflow: t.workflowName,
|
|
3197
3197
|
intent: t.id,
|
|
3198
3198
|
cause: String(i)
|
|
3199
|
-
}), await
|
|
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 zr(e, t, a, d, n());
|
|
3203
3203
|
} catch (i) {
|
|
3204
|
-
if (d.failed++, i instanceof
|
|
3204
|
+
if (d.failed++, i instanceof Mr) {
|
|
3205
3205
|
i.rejected && d.deadLettered++, r?.warn?.(i.message, {
|
|
3206
3206
|
submissionId: i.submissionId,
|
|
3207
3207
|
cause: String(i.cause)
|
|
@@ -3211,7 +3211,7 @@ var _n = "_voltro_workflow_runs", vn = 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 Fr(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,
|
|
@@ -3249,7 +3249,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3249
3249
|
if (i.workflowName !== r.workflowName || i.tenantId !== r.tenantId || i.mode !== r.mode || i.firstSeenAt !== r.firstSeenAt || i.dueAt !== r.dueAt || i.deadLetteredAt !== void 0) return;
|
|
3250
3250
|
n.push(i);
|
|
3251
3251
|
}
|
|
3252
|
-
let r = new Date(s +
|
|
3252
|
+
let r = new Date(s + rn(Math.max(...n.map((e) => e.attempts + 1)), () => c));
|
|
3253
3253
|
for (let t of n) if (await e.update("_voltro_workflow_pending", t.id, {
|
|
3254
3254
|
attempts: t.attempts + 1,
|
|
3255
3255
|
lastError: String(i).slice(0, 500),
|
|
@@ -3262,13 +3262,13 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3262
3262
|
cause: String(e)
|
|
3263
3263
|
}));
|
|
3264
3264
|
}
|
|
3265
|
-
let g = await
|
|
3265
|
+
let g = await Ur(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
|
+
}, Pr = 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 _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3322
3322
|
}
|
|
3323
3323
|
return t;
|
|
3324
3324
|
});
|
|
3325
|
-
},
|
|
3325
|
+
}, Fr = async (e, t, n, r, i, a) => {
|
|
3326
3326
|
let o = `wff_${R()}`;
|
|
3327
3327
|
return e.transaction(async (s) => {
|
|
3328
3328
|
let c = [];
|
|
@@ -3375,10 +3375,10 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3375
3375
|
at: i,
|
|
3376
3376
|
failureId: o
|
|
3377
3377
|
}
|
|
3378
|
-
}), !await
|
|
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
|
+
}, Ir = async (e, t, n, r, i) => {
|
|
3382
3382
|
let a = `wff_${R()}`;
|
|
3383
3383
|
return e.transaction(async (e) => {
|
|
3384
3384
|
let o = [];
|
|
@@ -3448,21 +3448,21 @@ var _n = "_voltro_workflow_runs", vn = 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
|
+
}, Lr = 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 Rr(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 Pr(e, [t], i);
|
|
3459
3459
|
return;
|
|
3460
3460
|
}
|
|
3461
3461
|
if (Je(a, t, i)) {
|
|
3462
|
-
r.expired += await
|
|
3462
|
+
r.expired += await Ir(e, [t], a, i, !1);
|
|
3463
3463
|
return;
|
|
3464
3464
|
}
|
|
3465
|
-
let o = Ue(a, t.payload), s = await
|
|
3465
|
+
let o = Ue(a, t.payload), s = await cn({
|
|
3466
3466
|
store: e.store,
|
|
3467
3467
|
control: a,
|
|
3468
3468
|
keys: o,
|
|
@@ -3470,7 +3470,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3470
3470
|
now: i,
|
|
3471
3471
|
reconsidering: !0
|
|
3472
3472
|
});
|
|
3473
|
-
await
|
|
3473
|
+
await Br(e, {
|
|
3474
3474
|
control: a,
|
|
3475
3475
|
intent: t,
|
|
3476
3476
|
decision: s,
|
|
@@ -3480,12 +3480,12 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3480
3480
|
paused: n,
|
|
3481
3481
|
items: void 0
|
|
3482
3482
|
});
|
|
3483
|
-
},
|
|
3483
|
+
}, Rr = 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 Pr(e, [t], i);
|
|
3486
3486
|
return;
|
|
3487
3487
|
}
|
|
3488
|
-
let a = e.controls.get(t.workflowName) ?? { workflowName: t.workflowName }, o =
|
|
3488
|
+
let a = e.controls.get(t.workflowName) ?? { workflowName: t.workflowName }, o = mt(), s = await e.transaction(async (e) => {
|
|
3489
3489
|
let r = await e.query({
|
|
3490
3490
|
table: U,
|
|
3491
3491
|
predicate: O("id", t.id),
|
|
@@ -3499,7 +3499,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3499
3499
|
let s = q(r[0]);
|
|
3500
3500
|
if (s.workflowName !== t.workflowName || s.tenantId !== t.tenantId) throw Error("Delayed arrival belongs to a different workflow or tenant");
|
|
3501
3501
|
if (s.mode !== "delayed" || s.deadLetteredAt !== void 0 || s.dueAt > i) return;
|
|
3502
|
-
let c = await
|
|
3502
|
+
let c = await Kn({
|
|
3503
3503
|
store: e,
|
|
3504
3504
|
control: a,
|
|
3505
3505
|
payload: G(e, s.workflowName, s.payload),
|
|
@@ -3509,18 +3509,18 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3509
3509
|
now: i,
|
|
3510
3510
|
waiting: !1
|
|
3511
3511
|
});
|
|
3512
|
-
if (c.kind === "queued" && (await
|
|
3512
|
+
if (c.kind === "queued" && (await kr(e, {
|
|
3513
3513
|
from: s.id,
|
|
3514
3514
|
to: c.intentId,
|
|
3515
3515
|
workflowName: s.workflowName,
|
|
3516
3516
|
tenantId: s.tenantId
|
|
3517
|
-
}), !await
|
|
3517
|
+
}), !await en(e, s.id))) throw Error("Delayed arrival disappeared during queue transfer");
|
|
3518
3518
|
if (c.kind === "start") {
|
|
3519
3519
|
if (c.ledgerId === void 0) throw Error("Delayed arrival has no admission reservation");
|
|
3520
|
-
let t = a.batch === void 0 ?
|
|
3520
|
+
let t = a.batch === void 0 ? Rt(e, s.workflowName, c.payload) : { items: w.decodeUnknownSync(w.Struct({ items: w.Array(w.Unknown) }))(c.payload).items.map((t) => Rt(e, s.workflowName, t)) };
|
|
3521
3521
|
return {
|
|
3522
3522
|
kind: "submission",
|
|
3523
|
-
submission: await
|
|
3523
|
+
submission: await Un(e, {
|
|
3524
3524
|
id: o,
|
|
3525
3525
|
workflowName: s.workflowName,
|
|
3526
3526
|
tenantId: s.tenantId,
|
|
@@ -3541,7 +3541,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3541
3541
|
...c,
|
|
3542
3542
|
at: i
|
|
3543
3543
|
}
|
|
3544
|
-
}), !await
|
|
3544
|
+
}), !await en(e, s.id))) throw Error("Delayed arrival disappeared while recording its outcome");
|
|
3545
3545
|
return c;
|
|
3546
3546
|
});
|
|
3547
3547
|
if (s !== void 0) {
|
|
@@ -3557,9 +3557,9 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3557
3557
|
r.skipped++;
|
|
3558
3558
|
return;
|
|
3559
3559
|
}
|
|
3560
|
-
await
|
|
3560
|
+
await Hr(e, s.submission, a, r, i, a.batch !== void 0, s.keys);
|
|
3561
3561
|
}
|
|
3562
|
-
},
|
|
3562
|
+
}, zr = 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,19 +3568,19 @@ var _n = "_voltro_workflow_runs", vn = 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 Pr(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 Ir(e, s, o, i, !0);
|
|
3577
3577
|
return;
|
|
3578
3578
|
}
|
|
3579
3579
|
let l = Ue(o, c.payload);
|
|
3580
|
-
await
|
|
3580
|
+
await Br(e, {
|
|
3581
3581
|
control: o,
|
|
3582
3582
|
intent: c,
|
|
3583
|
-
decision: await
|
|
3583
|
+
decision: await cn({
|
|
3584
3584
|
store: e.store,
|
|
3585
3585
|
control: o,
|
|
3586
3586
|
keys: l,
|
|
@@ -3594,10 +3594,10 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3594
3594
|
paused: n,
|
|
3595
3595
|
items: s
|
|
3596
3596
|
});
|
|
3597
|
-
},
|
|
3597
|
+
}, Br = 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
|
-
await
|
|
3600
|
+
await qt({
|
|
3601
3601
|
store: e.store,
|
|
3602
3602
|
control: n,
|
|
3603
3603
|
decision: i,
|
|
@@ -3629,11 +3629,11 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3629
3629
|
t.push(o);
|
|
3630
3630
|
}
|
|
3631
3631
|
t.sort((e, t) => e.firstSeenAt - t.firstSeenAt);
|
|
3632
|
-
let i = t[0], a = Ue(n, G(e, n.workflowName, i.payload)), o = await
|
|
3632
|
+
let i = t[0], a = Ue(n, G(e, n.workflowName, i.payload)), o = await cn({
|
|
3633
3633
|
store: e,
|
|
3634
3634
|
control: n,
|
|
3635
3635
|
keys: a,
|
|
3636
|
-
paused: l.has(n.workflowName) || (await
|
|
3636
|
+
paused: l.has(n.workflowName) || (await Ht(e)).has(n.workflowName),
|
|
3637
3637
|
now: s,
|
|
3638
3638
|
reconsidering: !0
|
|
3639
3639
|
});
|
|
@@ -3667,13 +3667,13 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3667
3667
|
workflowName: n.workflowName,
|
|
3668
3668
|
tenantId: n.tenantId,
|
|
3669
3669
|
terminal: u
|
|
3670
|
-
}), !await
|
|
3670
|
+
}), !await en(e, n.id)) throw Error("Queued input disappeared while recording its terminal outcome");
|
|
3671
3671
|
return u.kind;
|
|
3672
3672
|
});
|
|
3673
3673
|
t !== void 0 && o[t]++;
|
|
3674
3674
|
return;
|
|
3675
3675
|
}
|
|
3676
|
-
let u =
|
|
3676
|
+
let u = mt(), d = await e.transaction((t) => Gn(t, {
|
|
3677
3677
|
id: u,
|
|
3678
3678
|
workflowName: n.workflowName,
|
|
3679
3679
|
tenantId: r.tenantId,
|
|
@@ -3698,16 +3698,16 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3698
3698
|
o.deferred++;
|
|
3699
3699
|
return;
|
|
3700
3700
|
}
|
|
3701
|
-
await
|
|
3701
|
+
await Hr(e, d.submission, n, o, s, c !== void 0, a);
|
|
3702
3702
|
}
|
|
3703
|
-
},
|
|
3703
|
+
}, Vr = 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 Hr(e, a, n, {
|
|
3711
3711
|
admitted: 0,
|
|
3712
3712
|
deferred: 0,
|
|
3713
3713
|
dropped: 0,
|
|
@@ -3718,14 +3718,14 @@ var _n = "_voltro_workflow_runs", vn = 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
|
+
}, Hr = 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)) {
|
|
3725
3725
|
r.deferred++;
|
|
3726
3726
|
return;
|
|
3727
3727
|
}
|
|
3728
|
-
let c = a ? { items: w.decodeUnknownSync(w.Struct({ items: w.Array(w.Unknown) }))(t.payload).items.map((t) => G(e.store, n.workflowName, t)) } : G(e.store, n.workflowName, t.payload), l = await
|
|
3728
|
+
let c = a ? { items: w.decodeUnknownSync(w.Struct({ items: w.Array(w.Unknown) }))(t.payload).items.map((t) => G(e.store, n.workflowName, t)) } : G(e.store, n.workflowName, t.payload), l = await xr(e, t, c), u = await e.transaction((e) => Dt(e, t.id, i));
|
|
3729
3729
|
if (u === null) return;
|
|
3730
3730
|
s = u.dispatchAttempts === 1 ? 1 : void 0;
|
|
3731
3731
|
let d = await e.startAdmitted(n.workflowName, c, t.callerContext, l);
|
|
@@ -3739,7 +3739,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3739
3739
|
source: "flow-control",
|
|
3740
3740
|
mode: "singleton"
|
|
3741
3741
|
}
|
|
3742
|
-
}), await
|
|
3742
|
+
}), await Xt(e.store, t.eviction.executionId, i), await Y({
|
|
3743
3743
|
store: e.store,
|
|
3744
3744
|
control: n,
|
|
3745
3745
|
keys: o,
|
|
@@ -3752,7 +3752,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3752
3752
|
runId: t.eviction.runId || null,
|
|
3753
3753
|
tenantId: t.tenantId,
|
|
3754
3754
|
now: i
|
|
3755
|
-
}), r.evicted++), await e.transaction((e) =>
|
|
3755
|
+
}), r.evicted++), await e.transaction((e) => wt(e, t.id, {
|
|
3756
3756
|
executionId: d.executionId,
|
|
3757
3757
|
runId: d.runId ?? null
|
|
3758
3758
|
})), r.admitted++;
|
|
@@ -3761,14 +3761,14 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3761
3761
|
try {
|
|
3762
3762
|
if (s !== void 0 && e.isPermanentStartError?.(r) === !0) {
|
|
3763
3763
|
let o = s;
|
|
3764
|
-
a = await e.transaction((e) =>
|
|
3764
|
+
a = await e.transaction((e) => Ot(e, t.id, o, {
|
|
3765
3765
|
handler: n.onFailure ?? null,
|
|
3766
3766
|
errorMessage: String(r),
|
|
3767
3767
|
now: i
|
|
3768
3768
|
})) !== void 0;
|
|
3769
3769
|
}
|
|
3770
3770
|
if (!a) {
|
|
3771
|
-
let n = await e.transaction((n) =>
|
|
3771
|
+
let n = await e.transaction((n) => Et(n, t.id, String(r), i, e.deadLetterAfterAttempts ?? 50));
|
|
3772
3772
|
n.retry.stoppedAt !== null && e.log?.warn?.("workflow submission automatic retry stopped; engine acceptance unknown", {
|
|
3773
3773
|
submissionId: t.id,
|
|
3774
3774
|
workflow: t.workflowName,
|
|
@@ -3776,11 +3776,11 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3776
3776
|
});
|
|
3777
3777
|
}
|
|
3778
3778
|
} catch (e) {
|
|
3779
|
-
throw new
|
|
3779
|
+
throw new Mr(t.id, AggregateError([r, e], "Submission and retry recording failed"));
|
|
3780
3780
|
}
|
|
3781
|
-
throw new
|
|
3781
|
+
throw new Mr(t.id, r, a);
|
|
3782
3782
|
}
|
|
3783
|
-
},
|
|
3783
|
+
}, Ur = 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()) {
|
|
@@ -3805,40 +3805,40 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3805
3805
|
...v,
|
|
3806
3806
|
onFailure: i.onFailure ?? null
|
|
3807
3807
|
}
|
|
3808
|
-
}) && (await
|
|
3808
|
+
}) && (await Xt(e.store, o.executionId, t), n++);
|
|
3809
3809
|
}
|
|
3810
3810
|
}
|
|
3811
3811
|
return {
|
|
3812
3812
|
cancelled: n,
|
|
3813
3813
|
...r === void 0 ? {} : { nextDeadlineAt: r }
|
|
3814
3814
|
};
|
|
3815
|
-
},
|
|
3816
|
-
|
|
3817
|
-
},
|
|
3815
|
+
}, Wr = 3e5, Gr, Kr = (e) => {
|
|
3816
|
+
Gr = e !== void 0 && Number.isFinite(e) && e > 0 ? e : void 0;
|
|
3817
|
+
}, qr = () => {
|
|
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 Gr ?? 3e5;
|
|
3824
|
+
}, Jr = /* @__PURE__ */ new Set(), Yr = () => {
|
|
3825
|
+
Jr.clear();
|
|
3826
|
+
}, Xr = (e) => {
|
|
3827
|
+
let t = qr();
|
|
3828
3828
|
if (!(e.timeoutMs > t)) return !1;
|
|
3829
3829
|
let n = `${e.workflowName ?? ""}\u0000${e.signalName}`;
|
|
3830
|
-
if (
|
|
3831
|
-
|
|
3830
|
+
if (Jr.has(n)) return !1;
|
|
3831
|
+
Jr.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
|
+
}, Zr = async (e, t) => {
|
|
3835
3835
|
if (e) try {
|
|
3836
3836
|
await e.recordEvent(t);
|
|
3837
3837
|
} catch {}
|
|
3838
|
-
},
|
|
3838
|
+
}, Qr = (e, n) => {
|
|
3839
3839
|
let i = S.gen(function* () {
|
|
3840
3840
|
let i = n.pollIntervalMs ?? 200, a = n.maxPollIntervalMs ?? 5e3, o = n.timeoutMs ?? 864e5, s = yield* S.serviceOption(Se), c;
|
|
3841
|
-
|
|
3841
|
+
Xr({
|
|
3842
3842
|
workflowName: s._tag === "Some" ? s.value.workflow.name : void 0,
|
|
3843
3843
|
signalName: n.name,
|
|
3844
3844
|
timeoutMs: o,
|
|
@@ -3849,7 +3849,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3849
3849
|
let l = yield* t, u = yield* S.serviceOption(r), 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(() => Zr(d, {
|
|
3853
3853
|
runId: f,
|
|
3854
3854
|
eventType: "signal-awaited",
|
|
3855
3855
|
payload: { signalName: n.name }
|
|
@@ -3874,7 +3874,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3874
3874
|
})).find((e) => e.payload?.signalName === n.name);
|
|
3875
3875
|
if (i !== void 0) {
|
|
3876
3876
|
let e = yield* w.decodeUnknown(n.schema)(i.payload?.value);
|
|
3877
|
-
return yield* S.promise(() =>
|
|
3877
|
+
return yield* S.promise(() => Zr(d, {
|
|
3878
3878
|
runId: f,
|
|
3879
3879
|
eventType: "signal-received",
|
|
3880
3880
|
payload: {
|
|
@@ -3891,16 +3891,16 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3891
3891
|
success: n.schema,
|
|
3892
3892
|
execute: i
|
|
3893
3893
|
});
|
|
3894
|
-
},
|
|
3894
|
+
}, $r = async (e, t) => {
|
|
3895
3895
|
if (e !== void 0) try {
|
|
3896
3896
|
await e.recordEvent(t);
|
|
3897
3897
|
} catch {}
|
|
3898
|
-
},
|
|
3898
|
+
}, ei = (e, n) => {
|
|
3899
3899
|
let i = S.gen(function* () {
|
|
3900
3900
|
let i = n.pollIntervalMs ?? 200, a = n.maxPollIntervalMs ?? 5e3, o = n.timeoutMs ?? 864e5, s = n.take ?? 500, c = yield* t, l = yield* S.serviceOption(r), 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" ? ti(e, d) : S.succeed(/* @__PURE__ */ new Date());
|
|
3903
|
+
yield* S.promise(() => $r(u, {
|
|
3904
3904
|
runId: d,
|
|
3905
3905
|
eventType: "event-awaited",
|
|
3906
3906
|
payload: {
|
|
@@ -3930,7 +3930,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3930
3930
|
h = i.length;
|
|
3931
3931
|
for (let e of i) {
|
|
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(() => $r(u, {
|
|
3934
3934
|
runId: d,
|
|
3935
3935
|
eventType: "event-received",
|
|
3936
3936
|
payload: {
|
|
@@ -3947,7 +3947,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3947
3947
|
success: n.schema,
|
|
3948
3948
|
execute: i
|
|
3949
3949
|
});
|
|
3950
|
-
},
|
|
3950
|
+
}, ti = (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 _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
3965
3965
|
if (!Number.isNaN(e.getTime())) return e;
|
|
3966
3966
|
}
|
|
3967
3967
|
return /* @__PURE__ */ new Date(0);
|
|
3968
|
-
}),
|
|
3968
|
+
}), ni = (e) => new Promise((t) => setTimeout(t, e)), ri = () => {
|
|
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
|
+
}, ii = () => `wfu_${ri()}`, ai = 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 _n = "_voltro_workflow_runs", vn = 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
|
+
}, oi = class extends Error {
|
|
3994
3994
|
runId;
|
|
3995
3995
|
eventType;
|
|
3996
3996
|
eventId;
|
|
@@ -3998,8 +3998,8 @@ var _n = "_voltro_workflow_runs", vn = 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
|
+
}, si = async (e) => {
|
|
4002
|
+
let t = await ai(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 _n = "_voltro_workflow_runs", vn = 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 oi(t.id, "signal-sent", n.id);
|
|
4011
4011
|
return { eventId: n.id };
|
|
4012
|
-
},
|
|
4013
|
-
let t = await
|
|
4012
|
+
}, ci = async (e) => {
|
|
4013
|
+
let t = await ai(e.store, e.target), n = ii(), r = await e.recorder.recordEvent({
|
|
4014
4014
|
runId: t.id,
|
|
4015
4015
|
eventType: "update-requested",
|
|
4016
4016
|
payload: {
|
|
@@ -4019,7 +4019,7 @@ var _n = "_voltro_workflow_runs", vn = 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 oi(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,15 +4049,15 @@ var _n = "_voltro_workflow_runs", vn = 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 ni(o);
|
|
4053
4053
|
}
|
|
4054
|
-
},
|
|
4054
|
+
}, li = 864e5, ui = "voltro/suspending-signal", di = (e, t) => `${ui}/${e}/${t}`, fi = (e) => te.make(e, { success: w.Unknown }), pi = async (e, t) => {
|
|
4055
4055
|
if (e) try {
|
|
4056
4056
|
await e.recordEvent(t);
|
|
4057
4057
|
} catch {}
|
|
4058
|
-
},
|
|
4059
|
-
let e = n.timeoutMs ??
|
|
4060
|
-
o !== void 0 && (yield* S.promise(() =>
|
|
4058
|
+
}, mi = (e, n) => S.gen(function* () {
|
|
4059
|
+
let e = n.timeoutMs ?? li, i = yield* re.WorkflowInstance, a = fi(di(i.workflow.name, n.name)), o = yield* t, s = yield* S.serviceOption(r), c = s._tag === "Some" ? s.value : void 0;
|
|
4060
|
+
o !== void 0 && (yield* S.promise(() => pi(c, {
|
|
4061
4061
|
runId: o,
|
|
4062
4062
|
eventType: "signal-awaited",
|
|
4063
4063
|
payload: { signalName: n.name }
|
|
@@ -4066,7 +4066,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
4066
4066
|
name: `await-signal-timeout/${n.name}`,
|
|
4067
4067
|
duration: `${e} millis`
|
|
4068
4068
|
}).pipe(S.andThen(S.die(/* @__PURE__ */ Error(`awaitSignalSuspending('${n.name}') timed out after ${e}ms`))))).pipe(S.catchAllCause((e) => i.suspended ? x.isInterruptedOnly(e) ? ne.suspend(i) : S.failCause(x.filter(e, (e) => !x.isInterruptType(e))) : S.failCause(e))) : yield* l, d = yield* w.decodeUnknown(n.schema)(u);
|
|
4069
|
-
return o !== void 0 && (yield* S.promise(() =>
|
|
4069
|
+
return o !== void 0 && (yield* S.promise(() => pi(c, {
|
|
4070
4070
|
runId: o,
|
|
4071
4071
|
eventType: "signal-received",
|
|
4072
4072
|
payload: {
|
|
@@ -4074,19 +4074,19 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
4074
4074
|
value: d
|
|
4075
4075
|
}
|
|
4076
4076
|
}))), d;
|
|
4077
|
-
}),
|
|
4077
|
+
}), hi = (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: () => ai(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 = di(n, e.signalName), i = fi(r), a = new te.TokenParsed({
|
|
4090
4090
|
workflowName: n,
|
|
4091
4091
|
executionId: t,
|
|
4092
4092
|
deferredName: r
|
|
@@ -4095,11 +4095,11 @@ var _n = "_voltro_workflow_runs", vn = 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", gi = "budget-hold", _i = (e) => `${gi}:${e}`, vi = (e) => `${e.executionId}/${e.stepName}/${e.budget}#${e.generation}`, yi = 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, bi = F(Q, {
|
|
4103
4103
|
id: j({ prefix: "bhd" }),
|
|
4104
4104
|
holdKey: I().maxLength(191),
|
|
4105
4105
|
budget: I(),
|
|
@@ -4113,33 +4113,33 @@ var _n = "_voltro_workflow_runs", vn = 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"]), xi = () => {
|
|
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
|
+
}, Si = 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
|
+
}, Ci = 6048e5, wi = (e) => S.gen(function* () {
|
|
4130
|
+
xi();
|
|
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(() => Ei(e.store, r)), o = a.length === 0 ? Date.now() : Ti(a[0]?.heldAt), s = Number.isFinite(t) ? t - (Date.now() - o) : Infinity, c = vi({
|
|
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(() => Di(e.store, r, "expired")), yield* S.fail(new Si(e.budget, c, t));
|
|
4142
|
+
let l = _i(c);
|
|
4143
4143
|
yield* S.promise(() => e.store.insertIgnore(Q, {
|
|
4144
4144
|
id: k({
|
|
4145
4145
|
kind: "typeid",
|
|
@@ -4159,7 +4159,7 @@ var _n = "_voltro_workflow_runs", vn = 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* mi({ store: e.store }, {
|
|
4163
4163
|
name: l,
|
|
4164
4164
|
schema: w.Unknown,
|
|
4165
4165
|
timeoutMs: u
|
|
@@ -4168,16 +4168,16 @@ var _n = "_voltro_workflow_runs", vn = 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
|
+
}), Ti = (e) => e instanceof Date ? e.getTime() : typeof e == "string" ? Date.parse(e) : Date.now(), Ei = 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))), Di = 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
|
+
}, Oi = (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 _n = "_voltro_workflow_runs", vn = 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* hi({
|
|
4190
4190
|
target: {
|
|
4191
4191
|
executionId: String(t.executionId),
|
|
4192
4192
|
workflowName: String(t.workflowName)
|
|
@@ -4198,7 +4198,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
4198
4198
|
}
|
|
4199
4199
|
}).pipe(S.catchAll(() => S.succeed({ completed: !1 }))), r += 1);
|
|
4200
4200
|
return { released: r };
|
|
4201
|
-
}),
|
|
4201
|
+
}), ki = 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 _n = "_voltro_workflow_runs", vn = 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
|
+
}, Ai = async (e) => {
|
|
4218
|
+
let t = await ki(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,17 +4224,17 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
4224
4224
|
});
|
|
4225
4225
|
}
|
|
4226
4226
|
return [...n.values()];
|
|
4227
|
-
},
|
|
4227
|
+
}, ji = async (e, t) => {
|
|
4228
4228
|
if (e) try {
|
|
4229
4229
|
await e.recordEvent(t);
|
|
4230
4230
|
} catch {}
|
|
4231
|
-
},
|
|
4231
|
+
}, Mi = (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
|
-
},
|
|
4237
|
+
}, Ni = (e, n) => {
|
|
4238
4238
|
let i = S.gen(function* () {
|
|
4239
4239
|
let i = n.pollIntervalMs ?? 200, a = n.maxPollIntervalMs ?? 5e3, o = n.timeoutMs ?? 3e4, s = yield* t, c = yield* S.serviceOption(r), 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"));
|
|
@@ -4258,7 +4258,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
4258
4258
|
}), s = new Set(i.filter((e) => e.eventType === "update-completed" || e.eventType === "update-failed").map((e) => e.payload?.updateId).filter((e) => typeof e == "string" && e.length > 0)), c = i.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(() => ji(l, {
|
|
4262
4262
|
runId: u,
|
|
4263
4263
|
eventType: "update-received",
|
|
4264
4264
|
payload: {
|
|
@@ -4266,24 +4266,24 @@ var _n = "_voltro_workflow_runs", vn = 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(() => ji(l, {
|
|
4270
4270
|
runId: u,
|
|
4271
4271
|
eventType: "update-failed",
|
|
4272
4272
|
payload: {
|
|
4273
4273
|
updateId: e,
|
|
4274
4274
|
updateName: n.name,
|
|
4275
|
-
...
|
|
4275
|
+
...Mi(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(() => ji(l, {
|
|
4278
4278
|
runId: u,
|
|
4279
4279
|
eventType: "update-failed",
|
|
4280
4280
|
payload: {
|
|
4281
4281
|
updateId: e,
|
|
4282
4282
|
updateName: n.name,
|
|
4283
|
-
...
|
|
4283
|
+
...Mi(t)
|
|
4284
4284
|
}
|
|
4285
4285
|
}))));
|
|
4286
|
-
return yield* S.promise(() =>
|
|
4286
|
+
return yield* S.promise(() => ji(l, {
|
|
4287
4287
|
runId: u,
|
|
4288
4288
|
eventType: "update-completed",
|
|
4289
4289
|
payload: {
|
|
@@ -4301,7 +4301,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
4301
4301
|
success: n.success ?? n.schema,
|
|
4302
4302
|
execute: i
|
|
4303
4303
|
});
|
|
4304
|
-
},
|
|
4304
|
+
}, Pi = (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 _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
4309
4309
|
return Number.isNaN(t.getTime()) ? null : t;
|
|
4310
4310
|
}
|
|
4311
4311
|
return null;
|
|
4312
|
-
},
|
|
4312
|
+
}, Fi = (e) => typeof e == "number" ? e : e == null ? null : Number(e), Ii = (e) => e == null ? null : String(e), Li = (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 _n = "_voltro_workflow_runs", vn = 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) => (Fi(e.attempt) ?? 0) - (Fi(t.attempt) ?? 0));
|
|
4321
|
+
let t = r[r.length - 1], i = Ii(t.errorTag), a = Ii(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: Fi(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: Fi(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 (Pi(r?.startedAt)?.getTime() ?? 0) - (Pi(i?.startedAt)?.getTime() ?? 0);
|
|
4339
4339
|
}), n;
|
|
4340
|
-
},
|
|
4340
|
+
}, Ri = (e) => {
|
|
4341
4341
|
if (e == null) return null;
|
|
4342
4342
|
if (typeof e == "string") try {
|
|
4343
4343
|
return JSON.parse(e);
|
|
@@ -4345,27 +4345,27 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
4345
4345
|
return null;
|
|
4346
4346
|
}
|
|
4347
4347
|
return typeof e == "object" ? e : null;
|
|
4348
|
-
},
|
|
4348
|
+
}, zi = 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: Ii(r.executionId) ?? "",
|
|
4355
|
+
name: Ii(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: Ri(r.subject),
|
|
4360
|
+
source: Ii(r.source),
|
|
4361
|
+
steps: Li(o),
|
|
4362
|
+
startedAt: Pi(r.startedAt) ?? /* @__PURE__ */ new Date(0),
|
|
4363
|
+
finishedAt: Pi(r.completedAt),
|
|
4364
|
+
traceId: Ii(r.traceId),
|
|
4365
|
+
parentExecutionId: Ii(r.parentExecutionId),
|
|
4366
|
+
parentClosePolicy: Ii(r.parentClosePolicy)
|
|
4367
4367
|
};
|
|
4368
|
-
},
|
|
4368
|
+
}, Bi = () => {
|
|
4369
4369
|
let e = [], t = [], n = 0, i = 0;
|
|
4370
4370
|
return {
|
|
4371
4371
|
layer: se.succeed(r, {
|
|
@@ -4415,13 +4415,13 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
4415
4415
|
readSteps: () => e,
|
|
4416
4416
|
readEvents: () => t
|
|
4417
4417
|
};
|
|
4418
|
-
},
|
|
4418
|
+
}, Vi = (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
|
+
}), Hi = 8192, Ui = 3, Wi = 2e3, Gi = () => {
|
|
4425
4425
|
let e = (e) => {
|
|
4426
4426
|
if (e === void 0) return;
|
|
4427
4427
|
let t = Number(e);
|
|
@@ -4431,7 +4431,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
4431
4431
|
...t === void 0 ? {} : { maxRunReclaims: t },
|
|
4432
4432
|
...n === void 0 ? {} : { replayShapeLimit: n }
|
|
4433
4433
|
};
|
|
4434
|
-
},
|
|
4434
|
+
}, Ki = (e) => {
|
|
4435
4435
|
let t = typeof e == "string" ? (() => {
|
|
4436
4436
|
try {
|
|
4437
4437
|
return JSON.parse(e);
|
|
@@ -4440,10 +4440,10 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
4440
4440
|
}
|
|
4441
4441
|
})() : e;
|
|
4442
4442
|
if (Array.isArray(t)) return t.filter((e) => typeof e == "string");
|
|
4443
|
-
},
|
|
4443
|
+
}, qi = () => {
|
|
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
|
+
}, Ji = (e) => `${e}_${qi()}`, Yi = (e, t = Hi) => {
|
|
4447
4447
|
if (e == null) return e;
|
|
4448
4448
|
try {
|
|
4449
4449
|
let n = JSON.stringify(e);
|
|
@@ -4459,8 +4459,8 @@ var _n = "_voltro_workflow_runs", vn = 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
|
+
}, Xi = (e) => {
|
|
4463
|
+
let t = e.truncateBytes ?? Hi, n = e.makeId ?? Ji, 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 _n = "_voltro_workflow_runs", vn = 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(Yi(u, t)),
|
|
4474
4474
|
retryPolicy: d ?? null,
|
|
4475
4475
|
output: null,
|
|
4476
4476
|
errorTag: null,
|
|
@@ -4497,7 +4497,7 @@ var _n = "_voltro_workflow_runs", vn = 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(Yi(s, t)),
|
|
4501
4501
|
completedAt: /* @__PURE__ */ new Date(),
|
|
4502
4502
|
durationMs: c
|
|
4503
4503
|
});
|
|
@@ -4518,7 +4518,7 @@ var _n = "_voltro_workflow_runs", vn = 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(Yi(l, t)),
|
|
4522
4522
|
completedAt: /* @__PURE__ */ new Date(),
|
|
4523
4523
|
durationMs: u
|
|
4524
4524
|
});
|
|
@@ -4566,7 +4566,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
4566
4566
|
};
|
|
4567
4567
|
}
|
|
4568
4568
|
};
|
|
4569
|
-
},
|
|
4569
|
+
}, Zi = (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 _n = "_voltro_workflow_runs", vn = 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
|
+
}), Qi = (s, l) => {
|
|
4600
|
+
let u = s.truncateBytes ?? Hi, d = s.makeId ?? Ji, f = s.recorder ?? Xi(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)
|
|
@@ -4651,7 +4651,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
4651
4651
|
executionId: y,
|
|
4652
4652
|
reason: n?.message ?? String(n)
|
|
4653
4653
|
});
|
|
4654
|
-
}))), D = `wfrg_${
|
|
4654
|
+
}))), D = `wfrg_${qi()}`, 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,
|
|
@@ -4698,7 +4698,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
4698
4698
|
handler: null,
|
|
4699
4699
|
callerContext: null,
|
|
4700
4700
|
tenantId: null
|
|
4701
|
-
}, n = yield* S.promise(() => s.transaction((n) =>
|
|
4701
|
+
}, n = yield* S.promise(() => s.transaction((n) => Dn(n, {
|
|
4702
4702
|
owner: {
|
|
4703
4703
|
runId: T,
|
|
4704
4704
|
workflowName: s.name,
|
|
@@ -4731,12 +4731,12 @@ var _n = "_voltro_workflow_runs", vn = 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 = Ki(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;
|
|
4738
4738
|
if (t && e >= n) {
|
|
4739
|
-
let t = `Workflow '${s.name}' run '${y}' killed its runner ${e} times in a row; parked instead of reclaimed again (maxRunReclaims=${n}).`, r = yield* S.promise(() => s.transaction((e) =>
|
|
4739
|
+
let t = `Workflow '${s.name}' run '${y}' killed its runner ${e} times in a row; parked instead of reclaimed again (maxRunReclaims=${n}).`, r = yield* S.promise(() => s.transaction((e) => Tn(e, {
|
|
4740
4740
|
runId: T,
|
|
4741
4741
|
workflowName: s.name,
|
|
4742
4742
|
executionId: y,
|
|
@@ -4769,7 +4769,7 @@ var _n = "_voltro_workflow_runs", vn = 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* Zi(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 _n = "_voltro_workflow_runs", vn = 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(i, y), S.locally(a, D), S.locally(n, typeof M == "string" ? M : void 0), S.locally(o, j), S.locally(c, fe), S.provideService(r, f)), N = s.pluginWorkflowStepLayer ? pe.pipe(S.provide(s.pluginWorkflowStepLayer)) : pe, P = yield* ne.intoResult(S.raceWith(N,
|
|
4807
|
+
let M = s.subject?.tenantId, pe = S.suspend(() => l(ee, y, D)).pipe(S.locally(t, T), S.locally(i, y), S.locally(a, D), S.locally(n, typeof M == "string" ? M : void 0), S.locally(o, j), S.locally(c, fe), S.provideService(r, f)), N = s.pluginWorkflowStepLayer ? pe.pipe(S.provide(s.pluginWorkflowStepLayer)) : pe, P = yield* ne.intoResult(S.raceWith(N, Vi({
|
|
4808
4808
|
runId: T,
|
|
4809
4809
|
workflowName: s.name,
|
|
4810
4810
|
executionId: y,
|
|
@@ -4817,7 +4817,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
4817
4817
|
onOtherDone: (e, t) => ae.interrupt(t).pipe(S.zipRight(e))
|
|
4818
4818
|
}));
|
|
4819
4819
|
if (ne.isResult(P) && P._tag === "Suspended") {
|
|
4820
|
-
let e = P.cause, t = e !== void 0 && !x.isEmpty(e), n = t ? x.squash(e) : void 0, r = n && typeof n == "object" && "_tag" in n ? String(n._tag) : null, i = t ? n?.message ?? String(n) : null, a = yield* S.promise(() => s.transaction((e) =>
|
|
4820
|
+
let e = P.cause, t = e !== void 0 && !x.isEmpty(e), n = t ? x.squash(e) : void 0, r = n && typeof n == "object" && "_tag" in n ? String(n._tag) : null, i = t ? n?.message ?? String(n) : null, a = yield* S.promise(() => s.transaction((e) => Tn(e, {
|
|
4821
4821
|
runId: T,
|
|
4822
4822
|
workflowName: s.name,
|
|
4823
4823
|
executionId: y,
|
|
@@ -4876,7 +4876,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
4876
4876
|
if (ie.isFailure(me.exit)) {
|
|
4877
4877
|
let e = me.exit.cause;
|
|
4878
4878
|
if ((yield* Se).interrupted && x.isInterruptedOnly(e)) {
|
|
4879
|
-
let t = Date.now(), n = yield* S.promise(() => s.transaction((e) =>
|
|
4879
|
+
let t = Date.now(), n = yield* S.promise(() => s.transaction((e) => Dn(e, {
|
|
4880
4880
|
owner: {
|
|
4881
4881
|
runId: T,
|
|
4882
4882
|
workflowName: s.name,
|
|
@@ -4902,7 +4902,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
4902
4902
|
handler: null,
|
|
4903
4903
|
callerContext: null,
|
|
4904
4904
|
tenantId: null
|
|
4905
|
-
}, c = yield* S.promise(() => s.transaction((e) =>
|
|
4905
|
+
}, c = yield* S.promise(() => s.transaction((e) => Dn(e, {
|
|
4906
4906
|
owner: {
|
|
4907
4907
|
runId: T,
|
|
4908
4908
|
workflowName: s.name,
|
|
@@ -4943,7 +4943,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
4943
4943
|
durationMs: Date.now() - b
|
|
4944
4944
|
})), yield* S.failCause(e)) : yield* S.failCause(e);
|
|
4945
4945
|
}
|
|
4946
|
-
let he = me.exit.value, ge = Date.now(), _e = yield* S.promise(() => s.transaction((e) =>
|
|
4946
|
+
let he = me.exit.value, ge = Date.now(), _e = yield* S.promise(() => s.transaction((e) => Dn(e, {
|
|
4947
4947
|
owner: {
|
|
4948
4948
|
runId: T,
|
|
4949
4949
|
workflowName: s.name,
|
|
@@ -4954,7 +4954,7 @@ var _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
4954
4954
|
durationMs: ge - b,
|
|
4955
4955
|
outcome: {
|
|
4956
4956
|
status: "succeeded",
|
|
4957
|
-
output:
|
|
4957
|
+
output: Yi(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 _n = "_voltro_workflow_runs", vn = w.NullOr(w.Struct({
|
|
|
4971
4971
|
});
|
|
4972
4972
|
};
|
|
4973
4973
|
//#endregion
|
|
4974
|
-
export {
|
|
4974
|
+
export { Zn as $, lt as $t, ei as A, ln as At, dr as B, Pt as Bt, mi as C, we as Cn, cn as Ct, ai as D, Bt as Dt, ii as E, Ut as Et, qr as F, Wt as Ft, nr as G, Et as Gt, fr as H, Ct as Ht, Kr as I, sn as It, $n as J, V as Jt, rr as K, vt as Kt, jr as L, It as Lt, Wr as M, Ht as Mt, Xr as N, Y as Nt, si as O, Qt as Ot, Yr as P, Xt as Pt, Qn as Q, B as Qt, Vr as R, Nt as Rt, wi as S, Te as Sn, Zt as St, di as T, Jt as Tt, br as U, Dt as Ut, pr as V, pt as Vt, tr as W, mt as Wt, ur as X, bt as Xt, or as Y, Ot as Yt, sr as Z, xt as Zt, vi as _, Pe as _n, $t as _t, Gi as a, Ye as an, Vn as at, ki as b, De as bn, tn as bt, Qi as c, He as cn, wn as ct, Ni as d, Oe as dn, gn as dt, z as en, Yn as et, Q as f, Fe as fn, hn as ft, yi as g, Ie as gn, U as gt, bi as h, ke as hn, Lt as ht, Ki as i, Ge as in, Wn as it, Qr as j, Gt as jt, ci as k, qt as kt, Bi as l, Ue as ln, Dn as lt, Ci as m, je as mn, zt as mt, Wi as n, Be as nn, Jn as nt, $ as o, Je as on, Hn as ot, Si as p, Ae as pn, W as pt, er as q, Tt as qt, Xi as r, Xe as rn, Un as rt, Yi as s, We as sn, On as st, Ui as t, $e as tn, Kn as tt, zi as u, ze as un, Sn as ut, _i as v, Ne as vn, on as vt, hi as w, Ce as wn, an as wt, Oi as x, Ee as xn, nn as xt, Ai as y, Me as yn, en as yt, Nr as z, Ft as zt };
|