@voltro/cli 0.43.2 → 0.44.1
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 +50 -0
- package/dist/{apiBuild-BWuw8ZXS.js → apiBuild-DvWreIQP.js} +1 -1
- package/dist/apiBuild-XaW40W8x.js +2 -0
- package/dist/bin.js +1 -1
- package/dist/{build-CGBs4ZOv.js → build-Ckc-FA7d.js} +6 -6
- package/dist/{checkCommand-lTPSN3EQ.js → checkCommand-AlbawIal.js} +1 -1
- package/dist/{checkCommand-BFtFBsqL.js → checkCommand-BNfEs4KG.js} +2 -2
- package/dist/{codegenCommand-BJeyFlip.js → codegenCommand-iClXoRCW.js} +1 -1
- package/dist/{codemodRunner-Cnnz4-I7.js → codemodRunner-BKTnaGOz.js} +22 -0
- package/dist/{commands-pEDOcOo2.js → commands-CYkHTox2.js} +18 -18
- package/dist/{dashboardCommand-Bt2hHMro.js → dashboardCommand-DHDmlo9A.js} +1 -1
- package/dist/{dataCommand-DD2bRHCu.js → dataCommand-WFn8CM11.js} +258 -236
- package/dist/{dev-DMx-MF2s.js → dev-BZO5aLdr.js} +1 -1
- package/dist/{dev-wumUfDm1.js → dev-D-JZ6CGQ.js} +8 -4
- package/dist/doctorCommand-BeLOwq7S.js +2 -0
- package/dist/{doctorCommand-RFKpnLih.js → doctorCommand-BlUyESpD.js} +9 -9
- package/dist/{dormancyCommand-EFDQWiUw.js → dormancyCommand-lQxdrU8C.js} +1 -1
- package/dist/{embeddingsCommand-OeYp3qSq.js → embeddingsCommand-ByBTju6X.js} +1 -1
- package/dist/{envCommand-CKgBZK7x.js → envCommand-CpCbYAgR.js} +1 -1
- package/dist/{evolveCommand-ClQlAH0j.js → evolveCommand-CBV3-TtK.js} +2 -2
- package/dist/index.js +1 -1
- package/dist/{infoCommand-Bs_8RU22.js → infoCommand-DJoA9cKD.js} +1 -1
- package/dist/{runtimeTrace-CgpAD9wL.js → runtimeTrace-DJ9tPhrc.js} +1 -1
- package/dist/{sdkgen-Ca2zj4cd.js → sdkgen-7dr8-Onw.js} +1 -1
- package/dist/{serveCommand-CgK7Kj6j.js → serveCommand-BlnAlNQg.js} +632 -621
- package/dist/serveCommand-Dg_E1ev4.js +2 -0
- package/dist/serveEntry.js +1 -1
- package/dist/{updateCommand-CrI9B4d7.js → updateCommand-BvRidHp6.js} +1 -1
- package/dist/updateCommand-DcKVmLVN.js +2 -0
- package/dist/{webhooksCommand-BVNtNsI0.js → webhooksCommand-BfO_JF2b.js} +1 -1
- package/package.json +23 -17
- package/templates/AGENTS.md +1 -1
- package/templates/agent-docs/_index.md +1 -1
- package/templates/agent-docs/cli.md +43 -7
- package/templates/agent-docs/plugins/versioning.md +2 -0
- package/templates/agent-docs/whats-new.md +6 -21
- package/templates/apps/api-ai/package.json +7 -7
- package/templates/apps/api-auth/package.json +8 -8
- package/templates/apps/api-backend/package.json +7 -7
- package/templates/apps/api-backend-deactivation/package.json +7 -7
- package/templates/apps/api-backend-mail/package.json +8 -8
- package/templates/apps/api-backend-mariadb/package.json +9 -9
- package/templates/apps/api-backend-sqlite/package.json +8 -8
- package/templates/apps/api-backend-storage/package.json +8 -8
- package/templates/apps/api-cms/package.json +10 -10
- package/templates/apps/api-collab/package.json +8 -8
- package/templates/apps/api-data-advanced/package.json +8 -8
- package/templates/apps/api-durable/package.json +8 -8
- package/templates/apps/api-feature-flags/package.json +9 -9
- package/templates/apps/api-governance/package.json +8 -8
- package/templates/apps/api-kv/package.json +8 -8
- package/templates/apps/api-moderation/package.json +8 -8
- package/templates/apps/api-observability/package.json +8 -8
- package/templates/apps/api-ratelimit/package.json +8 -8
- package/templates/apps/api-rbac/package.json +8 -8
- package/templates/apps/api-rest/package.json +7 -7
- package/templates/apps/api-saas/package.json +11 -11
- package/templates/apps/api-saas-starter/package.json +10 -10
- package/templates/apps/api-search/package.json +8 -8
- package/templates/apps/api-status/package.json +8 -8
- package/templates/apps/api-versioning/package.json +8 -8
- package/templates/apps/api-webhooks/package.json +9 -9
- package/templates/apps/changelog/package.json +6 -6
- package/templates/apps/edge-functions/package.json +2 -2
- package/templates/apps/frontend-admin/package.json +8 -8
- package/templates/apps/frontend-app/package.json +9 -9
- package/templates/apps/frontend-auth/package.json +8 -8
- package/templates/apps/frontend-blank/package.json +7 -7
- package/templates/apps/frontend-cms/package.json +9 -9
- package/templates/apps/frontend-collab/package.json +10 -10
- package/templates/apps/frontend-contact/package.json +7 -7
- package/templates/apps/frontend-dashboard/package.json +7 -7
- package/templates/apps/frontend-docs/package.json +7 -7
- package/templates/apps/frontend-i18n/package.json +6 -6
- package/templates/apps/frontend-landing/package.json +7 -7
- package/templates/apps/frontend-portal/package.json +8 -8
- package/templates/apps/frontend-saas/package.json +8 -8
- package/templates/apps/frontend-spa/package.json +7 -7
- package/templates/apps/frontend-ssr/package.json +7 -7
- package/templates/apps/frontend-ssr-api/package.json +8 -8
- package/templates/apps/frontend-static-blog/package.json +6 -6
- package/templates/apps/frontend-status/package.json +8 -8
- package/templates/apps/mobile-app/package.json +4 -4
- package/dist/apiBuild-Cw2-TEXW.js +0 -2
- package/dist/doctorCommand-FOXTTaGp.js +0 -2
- package/dist/serveCommand-DUm2-ikx.js +0 -2
- package/dist/updateCommand-BvkKlV7D.js +0 -2
|
@@ -3,23 +3,23 @@ import { t } from "./frameworkInspectState-CX2250XB.js";
|
|
|
3
3
|
import { r as n, t as r } from "./appModuleLoader-C9r9mxZt.js";
|
|
4
4
|
import { t as i } from "./bootRefusal-pgvDxlrU.js";
|
|
5
5
|
import { n as a, r as o } from "./startupRunner-CEqQq7ax.js";
|
|
6
|
-
import { $ as s, $t as
|
|
7
|
-
import { n as
|
|
8
|
-
import { r as
|
|
9
|
-
import { ht as
|
|
10
|
-
import { r as
|
|
11
|
-
import { i as
|
|
12
|
-
import { c as
|
|
13
|
-
import { C as
|
|
14
|
-
import { S as
|
|
15
|
-
import { h as
|
|
16
|
-
import { n as
|
|
17
|
-
import { i as
|
|
18
|
-
import { t as
|
|
19
|
-
import { r as
|
|
20
|
-
import { t as
|
|
21
|
-
import { t as
|
|
22
|
-
import
|
|
6
|
+
import { $ as s, $t as c, A as l, At as u, B as d, C as ee, Ct as f, D as p, Dt as te, E as ne, Et as m, F as h, Ft as g, G as _, Gt as re, H as ie, I as ae, It as oe, J as se, Jt as v, K as ce, Kt as y, L as le, Lt as ue, M as de, Mt as b, N as fe, Nt as pe, O as me, Ot as he, P as ge, Pt as _e, Q as ve, Qt as ye, R as be, Rt as x, S as xe, Sn as Se, St as Ce, T as we, Tt as Te, U as Ee, Ut as S, V as De, Vt as Oe, W as ke, Wt as Ae, X as je, Xt as Me, Y as Ne, Yt as Pe, Z as Fe, Zt as C, _ as Ie, _n as Le, _t as w, an as Re, at as ze, b as Be, bn as Ve, bt as He, c as Ue, cn as T, ct as We, dn as Ge, dt as Ke, en as qe, et as Je, f as Ye, fn as Xe, ft as Ze, g as Qe, gn as $e, gt as et, h as tt, ht as nt, i as rt, in as it, it as at, j as ot, jt as st, k as ct, kt as lt, ln as E, lt as ut, m as dt, mn as ft, mt as D, nn as O, nt as pt, o as k, on as mt, ot as ht, p as gt, pn as _t, pt as vt, q as yt, qt as bt, r as xt, rn as St, rt as Ct, sn as wt, st as Tt, t as Et, tn as Dt, tt as Ot, u as kt, un as At, ut as jt, v as Mt, vn as A, vt as j, w as M, wt as Nt, x as Pt, xn as Ft, xt as It, y as Lt, yn as Rt, yt as zt, zt as Bt } from "./dev-D-JZ6CGQ.js";
|
|
7
|
+
import { n as Vt } from "./cliArgs-D4p8n7EE.js";
|
|
8
|
+
import { r as Ht } from "./appPort-B_HpJ_ck.js";
|
|
9
|
+
import { ht as Ut, pt as N } from "./webDev-101csg6Q.js";
|
|
10
|
+
import { r as P } from "./dialectDriver-czCHYpeH.js";
|
|
11
|
+
import { i as Wt, n as Gt } from "./connectionConfig-Bk9IC7D0.js";
|
|
12
|
+
import { c as Kt, n as qt, o as Jt } from "./seedRunner-IdHEprqf.js";
|
|
13
|
+
import { C as F, S as Yt, _ as Xt, d as Zt, g as Qt, l as $t, m as en, r as tn, u as nn, v as rn } from "./frameworkTableAssembly-oMPBKqlE.js";
|
|
14
|
+
import { S as an, c as on, n as sn, p as cn, s as ln, x as un } from "./fileConventions-Cof68_BL.js";
|
|
15
|
+
import { h as dn, o as fn } from "./inspect-B7U7Cl_Z.js";
|
|
16
|
+
import { n as pn } from "./mssqlClusterPatch-_4cE_nun.js";
|
|
17
|
+
import { i as mn, n as hn, r as gn, t as _n } from "./webhookDiscovery-CphsQe59.js";
|
|
18
|
+
import { t as vn } from "./inspectMetrics-CfdKLh6t.js";
|
|
19
|
+
import { r as yn, u as bn } from "./apiBuild-DvWreIQP.js";
|
|
20
|
+
import { t as xn } from "./bootTiming-BdyP9nYw.js";
|
|
21
|
+
import { t as Sn } from "./dataProfile-Cm0YVKSy.js";
|
|
22
|
+
import I, { basename as Cn, join as wn } from "node:path";
|
|
23
23
|
import { createWriteStream as Tn, existsSync as En } from "node:fs";
|
|
24
24
|
import { pathToFileURL as Dn } from "node:url";
|
|
25
25
|
import { createLogger as L } from "@voltro/logger";
|
|
@@ -104,7 +104,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
104
104
|
if (!t || t.length < 16) return Q(503, { error: "data transfer misconfigured (no/weak secret)" });
|
|
105
105
|
let n = Bi(e.headers);
|
|
106
106
|
return !n || !Vi(n, t) ? Q(401, { error: "unauthorized" }) : null;
|
|
107
|
-
}, Ui = /^[A-Za-z0-9_-]{8,64}$/, Wi = (e) => Ui.test(e), Gi = () =>
|
|
107
|
+
}, Ui = /^[A-Za-z0-9_-]{8,64}$/, Wi = (e) => Ui.test(e), Gi = () => I.join(W.tmpdir(), "voltro-import-uploads"), Ki = (e) => I.join(Gi(), e), qi = (e) => I.join(Ki(e), "archive.bin"), Ji = (e) => I.join(Ki(e), "meta.json"), Yi = async (e = Date.now()) => {
|
|
108
108
|
let t = 0;
|
|
109
109
|
try {
|
|
110
110
|
for (let n of await Z.readdir(Gi())) {
|
|
@@ -167,22 +167,22 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
167
167
|
}, ra = (e) => async (t) => {
|
|
168
168
|
let n = Hi(t, e.secret);
|
|
169
169
|
if (n) return n;
|
|
170
|
-
let r = t.headers["x-import-mode"], i = t.headers["x-import-on-conflict"], a = t.headers["x-import-atomic"] === "
|
|
171
|
-
if (
|
|
170
|
+
let r = t.headers["x-import-mode"], i = t.headers["x-import-on-conflict"], a = t.headers["x-import-atomic"], o = a === "0" || a === "false" ? !1 : a === "1" || a === "true" || r === "replace", s = t.headers["x-import-force"] === "1" || t.headers["x-import-force"] === "true", c = t.headers["x-import-dry-run"] === "1" || t.headers["x-import-dry-run"] === "true", l = (t.headers["x-import-tables"] ?? "").split(",").map((e) => e.trim()).filter(Boolean), u = t.headers["x-import-upload-id"], d;
|
|
171
|
+
if (u !== void 0 && u !== "") {
|
|
172
172
|
if (Yi(), t.headers["x-import-probe"] === "1") return Q(200, {
|
|
173
|
-
uploadId:
|
|
174
|
-
bytes: (await Xi(
|
|
173
|
+
uploadId: u,
|
|
174
|
+
bytes: (await Xi(u)).bytes
|
|
175
175
|
});
|
|
176
176
|
let e = t.headers["x-import-upload-key"] ?? "", n = Number(t.headers["x-import-chunk-offset"] ?? "0");
|
|
177
177
|
if (e === "" || !Number.isFinite(n) || n < 0) return Q(400, { error: "a chunked upload needs x-import-upload-key and a numeric x-import-chunk-offset" });
|
|
178
178
|
let r = await Zi({
|
|
179
|
-
id:
|
|
179
|
+
id: u,
|
|
180
180
|
key: e,
|
|
181
181
|
offset: n,
|
|
182
182
|
bytes: t.rawBody
|
|
183
183
|
});
|
|
184
184
|
if ("reason" in r) return ea.warn("admin.import chunk refused", {
|
|
185
|
-
uploadId:
|
|
185
|
+
uploadId: u,
|
|
186
186
|
reason: r.reason
|
|
187
187
|
}), Q(409, {
|
|
188
188
|
error: "chunk refused",
|
|
@@ -191,16 +191,16 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
191
191
|
...r.expectedOffset === void 0 ? {} : { expectedOffset: r.expectedOffset }
|
|
192
192
|
});
|
|
193
193
|
if (t.headers["x-import-chunk-final"] !== "1") return Q(202, {
|
|
194
|
-
uploadId:
|
|
194
|
+
uploadId: u,
|
|
195
195
|
bytes: r.total
|
|
196
196
|
});
|
|
197
|
-
|
|
197
|
+
d = (await Qi(u)).path;
|
|
198
198
|
}
|
|
199
|
-
let
|
|
200
|
-
if (
|
|
199
|
+
let ee = t.rawBody.byteLength >= 8 && Buffer.from(t.rawBody.subarray(0, 8)).toString("latin1") === ta, f, p;
|
|
200
|
+
if (d !== void 0) {
|
|
201
201
|
let { createReadStream: e } = await import("node:fs");
|
|
202
|
-
|
|
203
|
-
} else if (
|
|
202
|
+
f = e(d), p = "chunked";
|
|
203
|
+
} else if (ee) f = na(t.rawBody), p = "upload";
|
|
204
204
|
else {
|
|
205
205
|
let n;
|
|
206
206
|
try {
|
|
@@ -210,24 +210,24 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
210
210
|
}
|
|
211
211
|
if (typeof n.bundleKey != "string" || !n.bundleKey) return Q(400, { error: "body.bundleKey (string) is required for the storage transport" });
|
|
212
212
|
if (!e.openArchive) return Q(501, { error: "storage transport not configured on this instance" });
|
|
213
|
-
|
|
213
|
+
f = e.openArchive(n.bundleKey), p = "storage";
|
|
214
214
|
}
|
|
215
|
-
let te = await import("node:os"), ne = await import("node:fs/promises"),
|
|
215
|
+
let te = await import("node:os"), ne = await import("node:fs/promises"), m = await import("node:path"), h = await ne.mkdtemp(m.join(te.tmpdir(), "voltro-admin-import-"));
|
|
216
216
|
try {
|
|
217
|
-
e.assetSink ? await Ni(
|
|
218
|
-
dir:
|
|
217
|
+
e.assetSink ? await Ni(f, {
|
|
218
|
+
dir: h,
|
|
219
219
|
blobs: e.assetSink
|
|
220
|
-
}) : await Pi(
|
|
220
|
+
}) : await Pi(f, h);
|
|
221
221
|
let t = await H.runPromiseExit(Ai({
|
|
222
222
|
store: e.store,
|
|
223
|
-
bundleDir:
|
|
223
|
+
bundleDir: h,
|
|
224
224
|
...r ? { mode: r } : {},
|
|
225
225
|
...i ? { onConflict: i } : {},
|
|
226
|
-
...
|
|
227
|
-
...
|
|
228
|
-
...
|
|
226
|
+
...o ? { atomic: o } : {},
|
|
227
|
+
...c ? { dryRun: c } : {},
|
|
228
|
+
...l.length > 0 ? { tables: l } : {},
|
|
229
229
|
...e.snapshot ? { targetSnapshot: e.snapshot } : {},
|
|
230
|
-
force:
|
|
230
|
+
force: s,
|
|
231
231
|
onWarn: (e) => ea.warn("admin.import", { message: e }),
|
|
232
232
|
...e.assetSink ? { assetsAlreadyRestored: !0 } : {}
|
|
233
233
|
}));
|
|
@@ -236,7 +236,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
236
236
|
if (e && e._tag === "SchemaDriftError") {
|
|
237
237
|
let t = e;
|
|
238
238
|
return ea.warn("admin.import refused (schema drift)", {
|
|
239
|
-
transport:
|
|
239
|
+
transport: p,
|
|
240
240
|
bundle: t.bundleFingerprint.slice(0, 16),
|
|
241
241
|
target: t.targetFingerprint.slice(0, 16)
|
|
242
242
|
}), Q(409, {
|
|
@@ -249,7 +249,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
249
249
|
}
|
|
250
250
|
let n = typeof e?.reason == "string" ? e.reason : void 0;
|
|
251
251
|
if (n !== void 0 && e._tag === "ImportModeError") return ea.warn("admin.import refused (mode)", {
|
|
252
|
-
transport:
|
|
252
|
+
transport: p,
|
|
253
253
|
mode: e.mode
|
|
254
254
|
}), Q(409, {
|
|
255
255
|
error: "import mode refused",
|
|
@@ -258,35 +258,46 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
258
258
|
});
|
|
259
259
|
throw Error(n ?? String(e?.message ?? e ?? "import failed"));
|
|
260
260
|
}
|
|
261
|
-
let n = t.value,
|
|
262
|
-
return ea.info(
|
|
263
|
-
transport:
|
|
264
|
-
tables: n.
|
|
265
|
-
rows:
|
|
261
|
+
let n = t.value, a = n.manifest.tables.reduce((e, t) => e + t.rowCount, 0), u = n.rowsWritten;
|
|
262
|
+
return ea.info(c ? "admin.import (dry run — nothing written)" : "admin.import", {
|
|
263
|
+
transport: p,
|
|
264
|
+
tables: n.tablesWritten,
|
|
265
|
+
rows: u,
|
|
266
|
+
carried: a,
|
|
266
267
|
mode: r ?? "upsert",
|
|
267
|
-
atomic:
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
268
|
+
atomic: o,
|
|
269
|
+
...n.tablesSkipped > 0 ? {
|
|
270
|
+
skippedTables: n.tablesSkipped,
|
|
271
|
+
skippedRows: n.rowsSkipped
|
|
272
|
+
} : {}
|
|
273
|
+
}), c || e.refreshSubscriptions?.(`data import: ${n.tablesWritten} table(s), mode ${r ?? "upsert"}`), Q(200, {
|
|
274
|
+
tables: n.tablesWritten,
|
|
275
|
+
rows: u,
|
|
276
|
+
carried: a,
|
|
277
|
+
transport: p,
|
|
278
|
+
...n.tablesSkipped > 0 ? {
|
|
279
|
+
skippedTables: n.tablesSkipped,
|
|
280
|
+
skippedRows: n.rowsSkipped,
|
|
281
|
+
fullyResumed: n.fullyResumed
|
|
282
|
+
} : {},
|
|
283
|
+
...c ? {
|
|
273
284
|
dryRun: !0,
|
|
274
285
|
wrote: !1
|
|
275
286
|
} : {}
|
|
276
287
|
});
|
|
277
288
|
} catch (e) {
|
|
278
289
|
return ea.warn("admin.import failed", {
|
|
279
|
-
transport:
|
|
290
|
+
transport: p,
|
|
280
291
|
error: e?.message ?? String(e)
|
|
281
292
|
}), Q(500, {
|
|
282
293
|
error: "import failed",
|
|
283
294
|
message: e?.message ?? String(e)
|
|
284
295
|
});
|
|
285
296
|
} finally {
|
|
286
|
-
await ne.rm(
|
|
297
|
+
await ne.rm(h, {
|
|
287
298
|
recursive: !0,
|
|
288
299
|
force: !0
|
|
289
|
-
}),
|
|
300
|
+
}), u !== void 0 && u !== "" && d !== void 0 && await $i(u);
|
|
290
301
|
}
|
|
291
302
|
}, ia = L({ scope: "voltro:admin-export" }), aa = async (e) => {
|
|
292
303
|
let t = [];
|
|
@@ -319,7 +330,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
319
330
|
});
|
|
320
331
|
}
|
|
321
332
|
}
|
|
322
|
-
let a = r.consistency === "snapshot" ? "snapshot" : i.consistency ?? "live", o = (typeof r.compression == "string" ? r.compression : void 0) ?? i.compression, s = i.scope ?? oa(r),
|
|
333
|
+
let a = r.consistency === "snapshot" ? "snapshot" : i.consistency ?? "live", o = (typeof r.compression == "string" ? r.compression : void 0) ?? i.compression, s = i.scope ?? oa(r), c = typeof r.bundleKey == "string" && r.bundleKey.length > 0, l = r.assets === !0 && e.assetSource ? { blobs: e.assetSource } : {}, u = await import("node:os"), d = await import("node:fs/promises"), ee = await import("node:path"), f = await d.mkdtemp(ee.join(u.tmpdir(), "voltro-admin-export-"));
|
|
323
334
|
try {
|
|
324
335
|
let t = await H.runPromise(ki({
|
|
325
336
|
store: e.store,
|
|
@@ -333,45 +344,45 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
333
344
|
consistency: a,
|
|
334
345
|
...o ? { compression: o } : {},
|
|
335
346
|
...i.masking ? { masking: i.masking } : {}
|
|
336
|
-
})), n = t.tables.reduce((e, t) => e + t.rowCount, 0),
|
|
337
|
-
if (
|
|
347
|
+
})), n = t.tables.reduce((e, t) => e + t.rowCount, 0), u = t.masking?.transformed.length ?? 0;
|
|
348
|
+
if (c) {
|
|
338
349
|
if (!e.putArchive) return Q(501, { error: "storage transport not configured on this instance" });
|
|
339
350
|
let i = r.bundleKey;
|
|
340
351
|
return await e.putArchive(i, () => Oi({
|
|
341
352
|
dir: f,
|
|
342
|
-
...
|
|
353
|
+
...l
|
|
343
354
|
})), ia.info("admin.export", {
|
|
344
355
|
transport: "storage",
|
|
345
356
|
tables: t.tables.length,
|
|
346
357
|
rows: n,
|
|
347
|
-
masked:
|
|
358
|
+
masked: u,
|
|
348
359
|
bundleKey: i
|
|
349
360
|
}), Q(200, {
|
|
350
361
|
bundleKey: i,
|
|
351
362
|
tables: t.tables.length,
|
|
352
363
|
rows: n,
|
|
353
|
-
masked:
|
|
364
|
+
masked: u,
|
|
354
365
|
transport: "storage"
|
|
355
366
|
});
|
|
356
367
|
}
|
|
357
|
-
let
|
|
368
|
+
let d = await aa(Oi({
|
|
358
369
|
dir: f,
|
|
359
|
-
...
|
|
370
|
+
...l
|
|
360
371
|
}));
|
|
361
372
|
return ia.info("admin.export", {
|
|
362
373
|
transport: "download",
|
|
363
374
|
tables: t.tables.length,
|
|
364
375
|
rows: n,
|
|
365
|
-
masked:
|
|
366
|
-
bytes:
|
|
376
|
+
masked: u,
|
|
377
|
+
bytes: d.byteLength
|
|
367
378
|
}), {
|
|
368
379
|
status: 200,
|
|
369
380
|
contentType: "application/octet-stream",
|
|
370
|
-
body:
|
|
381
|
+
body: d,
|
|
371
382
|
headers: {
|
|
372
383
|
"x-export-tables": String(t.tables.length),
|
|
373
384
|
"x-export-rows": String(n),
|
|
374
|
-
"x-export-masked": String(
|
|
385
|
+
"x-export-masked": String(u)
|
|
375
386
|
}
|
|
376
387
|
};
|
|
377
388
|
} catch (e) {
|
|
@@ -380,7 +391,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
380
391
|
message: e?.message ?? String(e)
|
|
381
392
|
});
|
|
382
393
|
} finally {
|
|
383
|
-
await
|
|
394
|
+
await d.rm(f, {
|
|
384
395
|
recursive: !0,
|
|
385
396
|
force: !0
|
|
386
397
|
});
|
|
@@ -405,7 +416,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
405
416
|
invalidateTag: async () => 0,
|
|
406
417
|
wrap: async (e, t, n) => n()
|
|
407
418
|
}, ua = async (e) => {
|
|
408
|
-
|
|
419
|
+
Bt(e.appProcedures ?? e.discovered, {
|
|
409
420
|
defaultDeny: e.security?.defaultDeny ?? !0,
|
|
410
421
|
commandHint: "`voltro serve`"
|
|
411
422
|
}), Qr({
|
|
@@ -423,45 +434,45 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
423
434
|
durationMs: e.durationMs,
|
|
424
435
|
rowCount: e.rowCount
|
|
425
436
|
})
|
|
426
|
-
}), i = e.cache ?? la, a = e.kv ?? Wr, o,
|
|
437
|
+
}), i = e.cache ?? la, a = e.kv ?? Wr, o, c = () => void 0, l, ee, f, p, te, ne, oe, se = re({
|
|
427
438
|
store: e.store,
|
|
428
439
|
warn: (e, t) => {
|
|
429
440
|
process.stderr.write(`[workflow] ${e} ${JSON.stringify(t)}\n`);
|
|
430
441
|
}
|
|
431
|
-
}),
|
|
442
|
+
}), ce = se.remember, le = se.resolve, ue = y({
|
|
432
443
|
authority: e.authority,
|
|
433
444
|
getStore: () => e.store
|
|
434
|
-
}),
|
|
435
|
-
if (
|
|
445
|
+
}), b = (e.discovered.workflows?.length ?? 0) > 0 ? Nr(() => o) : void 0, pe = (e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.eventTriggers?.length ?? 0) > 0, me = pe || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster", he = e.tenantIsolation === "namespace", ge = (e.log ?? L({ scope: "voltro:serve" })).child("webhooks"), ye, be, x = e.discovered.webhooks;
|
|
446
|
+
if (x && x.outgoing.length > 0 && e.workflowEngineLayer !== void 0) {
|
|
436
447
|
e.workflowEngineLayer;
|
|
437
|
-
let t =
|
|
448
|
+
let t = T({
|
|
438
449
|
store: e.store,
|
|
439
450
|
schemaRegistry: e.schemaRegistry,
|
|
440
451
|
cache: i,
|
|
441
452
|
kv: a
|
|
442
|
-
}), n =
|
|
443
|
-
|
|
453
|
+
}), n = x.outgoing.map((e) => e.descriptor);
|
|
454
|
+
be = xi.toLayer(vi(t, { events: n })), ye = yi(t, async (e) => {
|
|
444
455
|
let t = f;
|
|
445
456
|
if (t === void 0) {
|
|
446
|
-
|
|
457
|
+
ge.error("webhook delivery skipped — the workflow runtime was never built. This is a framework defect, not a configuration problem: report it with your engine setting. Deliveries are NOT queued and will not be retried.", {
|
|
447
458
|
deliveryId: e.deliveryId,
|
|
448
459
|
targetId: e.targetId
|
|
449
460
|
});
|
|
450
461
|
return;
|
|
451
462
|
}
|
|
452
463
|
t.runPromise(xi.execute(e)).catch((t) => {
|
|
453
|
-
|
|
464
|
+
ge.error("deliverWebhook workflow crashed", {
|
|
454
465
|
deliveryId: e.deliveryId,
|
|
455
466
|
targetId: e.targetId
|
|
456
467
|
}, t);
|
|
457
468
|
});
|
|
458
469
|
}, { events: n });
|
|
459
470
|
}
|
|
460
|
-
let
|
|
461
|
-
if (
|
|
471
|
+
let xe = /* @__PURE__ */ new Map();
|
|
472
|
+
if (x) for (let e of x.incoming) {
|
|
462
473
|
let t = e.descriptor.path ?? bi(e.descriptor.id), n = `VOLTRO_WEBHOOK_SECRET_${e.descriptor.id.toUpperCase().replace(/[^A-Z0-9]/g, "_")}`, r = Ci(e.descriptor, {
|
|
463
474
|
resolveSecret: async () => process.env[n] ?? null,
|
|
464
|
-
resolveWorkflows: () =>
|
|
475
|
+
resolveWorkflows: () => b === void 0 ? void 0 : Hr(b, {
|
|
465
476
|
traceId: `incoming:${e.descriptor.id}`,
|
|
466
477
|
source: `incoming:${e.descriptor.id}`
|
|
467
478
|
}),
|
|
@@ -473,18 +484,18 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
473
484
|
idempotency: e.idempotency,
|
|
474
485
|
durationMs: e.durationMs
|
|
475
486
|
};
|
|
476
|
-
e.status >= 500 ?
|
|
487
|
+
e.status >= 500 ? ge.error("incoming delivery failed", t) : e.status >= 400 ? ge.warn("incoming delivery rejected", t) : ge.info("incoming delivery handled", t);
|
|
477
488
|
}
|
|
478
489
|
});
|
|
479
|
-
|
|
490
|
+
xe.set(t, { handle: r });
|
|
480
491
|
}
|
|
481
492
|
Sr(), X((t) => Cr(e.store, t.subjectId, t.resourceType, t.resourceId)) || L({ scope: "voltro:serve" }).info("policy guards: using the app-registered tuple source");
|
|
482
|
-
let
|
|
493
|
+
let Se = [], Ce = [...e.discovered.outboxHandlers ?? [], ...hn((x?.outgoing.length ?? 0) + (x?.incoming.length ?? 0) + (x?.providers.length ?? 0), []) ? [{
|
|
483
494
|
file: "<framework>/webhooks",
|
|
484
495
|
id: "voltro-webhook-emit",
|
|
485
|
-
definition: Si(() =>
|
|
486
|
-
}] : []],
|
|
487
|
-
handlers:
|
|
496
|
+
definition: Si(() => ye)
|
|
497
|
+
}] : []], we = Ce.length > 0 ? Me({
|
|
498
|
+
handlers: Ce,
|
|
488
499
|
store: e.store,
|
|
489
500
|
log: (e.log ?? L({ scope: "voltro:serve" })).child("outbox"),
|
|
490
501
|
onChange: (t) => e.store.onChange((e) => t({
|
|
@@ -492,15 +503,15 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
492
503
|
op: e.op
|
|
493
504
|
})),
|
|
494
505
|
onShutdown: (e) => {
|
|
495
|
-
|
|
506
|
+
Se.push(e);
|
|
496
507
|
}
|
|
497
|
-
}) : void 0,
|
|
508
|
+
}) : void 0, S = v({
|
|
498
509
|
definitions: (e.discovered.connections ?? []).map((e) => e.definition),
|
|
499
510
|
store: e.store,
|
|
500
|
-
publicUrl:
|
|
511
|
+
publicUrl: bt(e.port ?? 4e3),
|
|
501
512
|
log: (e.log ?? L({ scope: "voltro:serve" })).child("connections")
|
|
502
513
|
});
|
|
503
|
-
|
|
514
|
+
ot({
|
|
504
515
|
events: e.discovered.events ?? [],
|
|
505
516
|
rpcTags: [
|
|
506
517
|
...e.discovered.queries.map((e) => e.descriptor.name),
|
|
@@ -509,152 +520,152 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
509
520
|
...(e.discovered.streams ?? []).map((e) => e.descriptor.name)
|
|
510
521
|
]
|
|
511
522
|
});
|
|
512
|
-
let
|
|
513
|
-
instanceId:
|
|
514
|
-
namespace:
|
|
523
|
+
let Oe = (e.log ?? L({ scope: "voltro:serve" })).child("events"), Ae = e.broadcastNamespace ?? Qe(e.plugins, void 0), Ne = Ie(e.plugins, Ae, Oe), Pe = e.membership?.instanceId ?? process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, Le = e.membership ?? Mt(e.plugins, {
|
|
524
|
+
instanceId: Pe,
|
|
525
|
+
namespace: Ae,
|
|
515
526
|
meta: { mode: "serve" },
|
|
516
|
-
logger:
|
|
517
|
-
}),
|
|
527
|
+
logger: Oe
|
|
528
|
+
}), w = de({
|
|
518
529
|
events: e.discovered.events ?? [],
|
|
519
|
-
origin:
|
|
520
|
-
...
|
|
521
|
-
}),
|
|
530
|
+
origin: Pe,
|
|
531
|
+
...Ne.publishRemote === void 0 ? {} : { publishRemote: Ne.publishRemote }
|
|
532
|
+
}), Re = (e.discovered.events ?? []).length > 0 ? await Ne.attach(w.bus) : null, ze = wt({
|
|
522
533
|
store: e.store,
|
|
523
534
|
schemaRegistry: e.schemaRegistry,
|
|
524
535
|
cache: i,
|
|
525
536
|
kv: a,
|
|
526
|
-
...
|
|
527
|
-
...
|
|
537
|
+
...ye === void 0 ? {} : { webhooksService: ye },
|
|
538
|
+
...b === void 0 ? {} : { workflowsProxy: b },
|
|
528
539
|
eventTriggers: e.discovered.eventTriggers ?? [],
|
|
529
|
-
namespaceIsolationOn:
|
|
540
|
+
namespaceIsolationOn: he,
|
|
530
541
|
...e.ensureTenantProvisioned === void 0 ? {} : { ensureTenantProvisioned: e.ensureTenantProvisioned },
|
|
531
542
|
...e.resolveResidentStore === void 0 ? {} : { resolveResidentStore: e.resolveResidentStore },
|
|
532
|
-
...
|
|
533
|
-
...
|
|
534
|
-
eventBus:
|
|
535
|
-
}),
|
|
543
|
+
...we === void 0 ? {} : { outbox: { nudge: we.nudge } },
|
|
544
|
+
...S.active ? { connections: { registry: S.registry } } : {},
|
|
545
|
+
eventBus: w.bus
|
|
546
|
+
}), Be = U.succeed(nr, m), Ve = U.succeed(ar, He), Ue = U.succeed(K, zt), Ge = U.succeed(or, It), qe = (t, n) => {
|
|
536
547
|
let r = t.pipe(H.provide(Mr(n)));
|
|
537
|
-
return (e.baseLayer ? r.pipe(H.provide(e.baseLayer)) : r).pipe(H.provide(
|
|
538
|
-
},
|
|
539
|
-
let n =
|
|
548
|
+
return (e.baseLayer ? r.pipe(H.provide(e.baseLayer)) : r).pipe(H.provide(Be)).pipe(H.provide(Ve)).pipe(H.provide(Ue)).pipe(H.provide(Ge));
|
|
549
|
+
}, Je = (e, t) => {
|
|
550
|
+
let n = qe(e, t);
|
|
540
551
|
return Xr(n);
|
|
541
|
-
},
|
|
552
|
+
}, Ye = vn(), Xe = yt(e.plugins ?? [], Ye), Ze = d({
|
|
542
553
|
plugins: e.plugins ?? [],
|
|
543
|
-
metrics:
|
|
554
|
+
metrics: Ye,
|
|
544
555
|
log: e.log ?? L({ scope: "voltro:serve" })
|
|
545
|
-
}),
|
|
556
|
+
}), $e = _(e.plugins ?? [], Ye), et = e.security?.defaultDeny ?? !0, tt = Fr({
|
|
546
557
|
store: e.store,
|
|
547
|
-
defaultDeny:
|
|
558
|
+
defaultDeny: et,
|
|
548
559
|
recordMetric: (e) => {
|
|
549
|
-
|
|
560
|
+
Ye.record(e);
|
|
550
561
|
},
|
|
551
|
-
...
|
|
552
|
-
buildContext: (e, t, n) =>
|
|
553
|
-
runEffect:
|
|
554
|
-
undoCapture:
|
|
555
|
-
}),
|
|
562
|
+
...Xe.mutation === void 0 ? {} : { interceptor: Xe.mutation },
|
|
563
|
+
buildContext: (e, t, n) => ze(e, t, n),
|
|
564
|
+
runEffect: Je,
|
|
565
|
+
undoCapture: ve()
|
|
566
|
+
}), rt = Fe();
|
|
556
567
|
{
|
|
557
568
|
let t = s();
|
|
558
569
|
t !== void 0 && (e.log ?? L({ scope: "voltro:serve" })).info(t);
|
|
559
570
|
}
|
|
560
|
-
let
|
|
571
|
+
let it = je({
|
|
561
572
|
store: e.store,
|
|
562
573
|
...e.approvals === void 0 ? {} : { defaultExpiryMs: e.approvals.defaultExpiryMs }
|
|
563
|
-
}),
|
|
564
|
-
defaultDeny:
|
|
565
|
-
buildContext: (e) =>
|
|
566
|
-
runEffect:
|
|
574
|
+
}), at = wr({
|
|
575
|
+
defaultDeny: et,
|
|
576
|
+
buildContext: (e) => ze(e),
|
|
577
|
+
runEffect: Je,
|
|
567
578
|
recordMetric: (e) => {
|
|
568
|
-
|
|
579
|
+
Ye.record(e);
|
|
569
580
|
},
|
|
570
|
-
...
|
|
571
|
-
}),
|
|
581
|
+
...Xe.action === void 0 ? {} : { interceptor: Xe.action }
|
|
582
|
+
}), ct = Rr({
|
|
572
583
|
tenantScopedTables: e.tenantScopedTables,
|
|
573
584
|
softDeleteScopedTables: e.softDeleteScopedTables
|
|
574
|
-
}),
|
|
575
|
-
defaultDeny:
|
|
576
|
-
buildContext: (e) =>
|
|
577
|
-
finalize: (e, t) =>
|
|
578
|
-
provideEffect:
|
|
579
|
-
...
|
|
580
|
-
},
|
|
581
|
-
...
|
|
585
|
+
}), lt = {
|
|
586
|
+
defaultDeny: et,
|
|
587
|
+
buildContext: (e) => ze(e),
|
|
588
|
+
finalize: (e, t) => ct(e, t.subject),
|
|
589
|
+
provideEffect: qe,
|
|
590
|
+
...Xe.query === void 0 ? {} : { interceptor: Xe.query }
|
|
591
|
+
}, E = Lr(lt), dt = Ir({
|
|
592
|
+
...lt,
|
|
582
593
|
queryRows: (t, n) => e.store.query(t).then((e) => ri(t.table, e, n.subject))
|
|
583
|
-
}),
|
|
584
|
-
...
|
|
594
|
+
}), ft = zr({
|
|
595
|
+
...lt,
|
|
585
596
|
subscribeDescriptor: (e, t, n) => r.subscribe(e, t, n),
|
|
586
597
|
subscribeComputed: (e, t, n) => r.subscribeComputed(e, t, n)
|
|
587
|
-
}),
|
|
598
|
+
}), D = (e) => e.filter((e) => jn(e.descriptor)), O = {};
|
|
588
599
|
for (let t of [
|
|
589
|
-
...
|
|
590
|
-
...nt.queries,
|
|
600
|
+
...D(e.discovered.queries),
|
|
591
601
|
...rt.queries,
|
|
592
|
-
...
|
|
593
|
-
|
|
602
|
+
...it.queries,
|
|
603
|
+
...S.queries
|
|
604
|
+
]) O[t.descriptor.name] = (e) => J(E(t, e), r, `subscription.${t.descriptor.name}`, void 0, void 0, Y(t, e));
|
|
594
605
|
for (let t of [
|
|
595
|
-
...
|
|
596
|
-
...nt.mutations,
|
|
606
|
+
...D(e.discovered.mutations),
|
|
597
607
|
...rt.mutations,
|
|
598
|
-
...
|
|
608
|
+
...it.mutations,
|
|
609
|
+
...S.mutations
|
|
599
610
|
]) {
|
|
600
611
|
let n = Pr(t.descriptor.output);
|
|
601
|
-
|
|
612
|
+
O[t.descriptor.name] = (r) => q(async (e, n) => tt(t, e, n), r, `mutation.${t.descriptor.name}`, n, e.idempotency, Pn(t.descriptor, "mutation"));
|
|
602
613
|
}
|
|
603
|
-
for (let t of [...
|
|
614
|
+
for (let t of [...D(e.discovered.actions), ...S.actions]) {
|
|
604
615
|
let n = Pr(t.descriptor.output);
|
|
605
|
-
|
|
616
|
+
O[t.descriptor.name] = (r) => q(async (e, n) => at(t, e, n), r, `action.${t.descriptor.name}`, n, e.idempotency, Pn(t.descriptor, "action"));
|
|
606
617
|
}
|
|
607
|
-
let
|
|
618
|
+
let pt = () => `public-${Math.random().toString(36).slice(2, 10)}`, k = [
|
|
608
619
|
...e.discovered.queries.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
|
|
609
620
|
descriptor: e.descriptor,
|
|
610
|
-
invoke: (t, n) =>
|
|
621
|
+
invoke: (t, n) => dt(e, t, {
|
|
611
622
|
subject: n.subject,
|
|
612
|
-
traceId:
|
|
623
|
+
traceId: pt()
|
|
613
624
|
}),
|
|
614
|
-
subscribe: (t, n, r) =>
|
|
625
|
+
subscribe: (t, n, r) => ft(e, t, {
|
|
615
626
|
subject: n.subject,
|
|
616
|
-
traceId:
|
|
627
|
+
traceId: pt()
|
|
617
628
|
}, r)
|
|
618
629
|
})),
|
|
619
630
|
...e.discovered.mutations.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
|
|
620
631
|
descriptor: e.descriptor,
|
|
621
|
-
invoke: (t, n) =>
|
|
632
|
+
invoke: (t, n) => tt(e, t, {
|
|
622
633
|
subject: n.subject,
|
|
623
|
-
traceId:
|
|
634
|
+
traceId: pt()
|
|
624
635
|
})
|
|
625
636
|
})),
|
|
626
637
|
...e.discovered.actions.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
|
|
627
638
|
descriptor: e.descriptor,
|
|
628
|
-
invoke: (t, n) =>
|
|
639
|
+
invoke: (t, n) => at(e, t, {
|
|
629
640
|
subject: n.subject,
|
|
630
|
-
traceId:
|
|
641
|
+
traceId: pt()
|
|
631
642
|
})
|
|
632
643
|
}))
|
|
633
|
-
],
|
|
634
|
-
candidates:
|
|
644
|
+
], ht = {
|
|
645
|
+
candidates: g({
|
|
635
646
|
queries: e.discovered.queries,
|
|
636
647
|
mutations: e.discovered.mutations,
|
|
637
648
|
actions: e.discovered.actions,
|
|
638
649
|
descriptorOf: (e) => e.descriptor,
|
|
639
|
-
runQuery: (e, t, n) => Promise.resolve(
|
|
640
|
-
runMutation: (e, t, n) => Promise.resolve(
|
|
641
|
-
runAction: (e, t, n) => Promise.resolve(
|
|
650
|
+
runQuery: (e, t, n) => Promise.resolve(dt(e, t, n)),
|
|
651
|
+
runMutation: (e, t, n) => Promise.resolve(tt(e, t, n)),
|
|
652
|
+
runAction: (e, t, n) => Promise.resolve(at(e, t, n))
|
|
642
653
|
}),
|
|
643
654
|
policy: e.agents?.tools ?? {},
|
|
644
655
|
mcpEnabled: e.agents?.mcp === !0,
|
|
645
656
|
resolveSubject: (t) => e.resolveSubject(t, -1).then((e) => e.subject)
|
|
646
|
-
},
|
|
657
|
+
}, gt = Dt({
|
|
647
658
|
...e.restRoutes === void 0 ? {} : { restRoutes: e.restRoutes },
|
|
648
|
-
publicApiEntries:
|
|
659
|
+
publicApiEntries: k,
|
|
649
660
|
store: e.store,
|
|
650
661
|
resolveSubject: (t) => e.resolveSubject(t, -1).then((e) => e.subject),
|
|
651
662
|
...e.idempotency === void 0 ? {} : { idempotency: e.idempotency },
|
|
652
663
|
log: e.log ?? L({ scope: "voltro:serve" })
|
|
653
|
-
}),
|
|
664
|
+
}), _t = e.dataTransferSecret ?? process.env.VOLTRO_DATA_TRANSFER_SECRET, vt = _t && _t.length >= 16 ? [{
|
|
654
665
|
method: "POST",
|
|
655
666
|
path: Ri,
|
|
656
667
|
handle: ra({
|
|
657
|
-
secret:
|
|
668
|
+
secret: _t,
|
|
658
669
|
store: e.store,
|
|
659
670
|
...e.dataTransferSnapshot ? { snapshot: e.dataTransferSnapshot } : {},
|
|
660
671
|
assetSink: ji(li()),
|
|
@@ -667,42 +678,42 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
667
678
|
method: "POST",
|
|
668
679
|
path: zi,
|
|
669
680
|
handle: sa({
|
|
670
|
-
secret:
|
|
681
|
+
secret: _t,
|
|
671
682
|
store: e.store,
|
|
672
683
|
snapshot: e.dataTransferSnapshot ?? { tables: [] },
|
|
673
684
|
dialect: e.dataTransferDialect ?? "memory",
|
|
674
685
|
tenantTables: [...e.tenantScopedTables],
|
|
675
|
-
loadProfile:
|
|
686
|
+
loadProfile: Sn,
|
|
676
687
|
assetSource: Mi(li(), e.store),
|
|
677
688
|
putArchive: async (e, t) => {
|
|
678
689
|
let { Readable: n } = await import("node:stream"), r = li(), i = ui("storage", () => n.from(t()));
|
|
679
690
|
await H.runPromise(fi(r, e, i, { contentType: "application/octet-stream" }));
|
|
680
691
|
}
|
|
681
692
|
})
|
|
682
|
-
}] : [],
|
|
693
|
+
}] : [], xt = [
|
|
683
694
|
...e.httpRoutes ?? [],
|
|
684
|
-
...
|
|
685
|
-
...
|
|
686
|
-
...
|
|
695
|
+
...gt.httpRoutes,
|
|
696
|
+
...vt,
|
|
697
|
+
...S.httpRoutes
|
|
687
698
|
];
|
|
688
|
-
Object.assign(
|
|
689
|
-
for (let t of
|
|
690
|
-
let i =
|
|
699
|
+
Object.assign(O, w.handlers);
|
|
700
|
+
for (let t of D(e.discovered.streams ?? [])) O[t.descriptor.name] = (n) => pr((r) => oi(r, (r) => {
|
|
701
|
+
let i = ze(r), a = t.executor(n, i);
|
|
691
702
|
if (H.isEffect(a)) {
|
|
692
703
|
let t = a.pipe(H.provide(Mr(i.store)));
|
|
693
|
-
return (e.baseLayer ? t.pipe(H.provide(e.baseLayer)) : t).pipe(H.provide(
|
|
704
|
+
return (e.baseLayer ? t.pipe(H.provide(e.baseLayer)) : t).pipe(H.provide(Be)).pipe(H.provide(Ve)).pipe(H.provide(Ue)).pipe(H.provide(Ge));
|
|
694
705
|
}
|
|
695
706
|
return typeof a == "object" && a && typeof a.then == "function" ? H.promise(() => a) : a;
|
|
696
707
|
}), `stream.${t.descriptor.name}`);
|
|
697
|
-
for (let t of e.discovered.workflows ?? [])
|
|
708
|
+
for (let t of e.discovered.workflows ?? []) O[t.definition.name] = (e) => q(async (e, n) => {
|
|
698
709
|
let r = n;
|
|
699
|
-
return Hr(
|
|
710
|
+
return Hr(b, {
|
|
700
711
|
subject: r.subject,
|
|
701
712
|
traceId: r.traceId,
|
|
702
713
|
source: "workflow-rpc"
|
|
703
714
|
}).start(t.definition.name, e);
|
|
704
715
|
}, e, `workflow.${t.definition.name}`);
|
|
705
|
-
|
|
716
|
+
pe && (O[Rn.name] = (e) => J(E({
|
|
706
717
|
descriptor: Rn,
|
|
707
718
|
executor: (e) => {
|
|
708
719
|
let t = e.id;
|
|
@@ -718,7 +729,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
718
729
|
projection: void 0
|
|
719
730
|
};
|
|
720
731
|
}
|
|
721
|
-
}, e), r, `subscription.${Rn.name}`),
|
|
732
|
+
}, e), r, `subscription.${Rn.name}`), O[Bn.name] = (e) => J(E({
|
|
722
733
|
descriptor: Bn,
|
|
723
734
|
executor: (e) => {
|
|
724
735
|
let t = e, n = [...t.tag === void 0 ? [] : [G("tag", t.tag)], ...t.status === void 0 ? [] : [G("status", t.status)]], r = Number.isFinite(t.limit) && t.limit !== void 0 ? Math.min(Math.max(Math.floor(t.limit), 1), 500) : 100;
|
|
@@ -734,7 +745,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
734
745
|
projection: void 0
|
|
735
746
|
};
|
|
736
747
|
}
|
|
737
|
-
}, e), r, `subscription.${Bn.name}`),
|
|
748
|
+
}, e), r, `subscription.${Bn.name}`), O[zn.name] = (e) => J(E({
|
|
738
749
|
descriptor: zn,
|
|
739
750
|
executor: (e) => {
|
|
740
751
|
let t = e.runId;
|
|
@@ -750,7 +761,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
750
761
|
projection: void 0
|
|
751
762
|
};
|
|
752
763
|
}
|
|
753
|
-
}, e), r, `subscription.${zn.name}`),
|
|
764
|
+
}, e), r, `subscription.${zn.name}`), O[Ln.name] = (e) => J(E({
|
|
754
765
|
descriptor: Ln,
|
|
755
766
|
executor: (e) => {
|
|
756
767
|
let t = e.runId;
|
|
@@ -766,7 +777,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
766
777
|
projection: void 0
|
|
767
778
|
};
|
|
768
779
|
}
|
|
769
|
-
}, e), r, `subscription.${Ln.name}`),
|
|
780
|
+
}, e), r, `subscription.${Ln.name}`), O[B.name] = (e) => J(E({
|
|
770
781
|
descriptor: B,
|
|
771
782
|
executor: (e) => {
|
|
772
783
|
let t = e;
|
|
@@ -782,7 +793,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
782
793
|
projection: void 0
|
|
783
794
|
};
|
|
784
795
|
}
|
|
785
|
-
}, e), r, `subscription.${B.name}`),
|
|
796
|
+
}, e), r, `subscription.${B.name}`), O[V.name] = (e) => J(E({
|
|
786
797
|
descriptor: V,
|
|
787
798
|
executor: (e) => {
|
|
788
799
|
let t = e.eventId;
|
|
@@ -798,34 +809,34 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
798
809
|
projection: void 0
|
|
799
810
|
};
|
|
800
811
|
}
|
|
801
|
-
}, e), r, `subscription.${V.name}`),
|
|
812
|
+
}, e), r, `subscription.${V.name}`), O[Fn.name] = (t) => q(async (t, n) => {
|
|
802
813
|
let r = t;
|
|
803
|
-
return await
|
|
804
|
-
}, t, `action.${Fn.name}`),
|
|
814
|
+
return await mt(e.store, n.subject, { executionId: r.executionId }), await b.cancel(r.workflowName, r.executionId), await Pt(r.workflowName, r.executionId, "workflow.cancel"), { ok: !0 };
|
|
815
|
+
}, t, `action.${Fn.name}`), O[In.name] = (t) => q(async (t, n) => {
|
|
805
816
|
let r = t;
|
|
806
|
-
return await
|
|
807
|
-
}, t, `action.${In.name}`),
|
|
817
|
+
return await mt(e.store, n.subject, { executionId: r.executionId }), await b.resume(r.workflowName, r.executionId), { ok: !0 };
|
|
818
|
+
}, t, `action.${In.name}`), O[Vn.name] = (t) => q(async (t, n) => {
|
|
808
819
|
let r = t;
|
|
809
|
-
return await
|
|
810
|
-
}, t, `action.${Vn.name}`),
|
|
820
|
+
return await mt(e.store, n.subject, { id: r.id }), b.signal({ id: r.id }, r.signalName, r.payload);
|
|
821
|
+
}, t, `action.${Vn.name}`), O[Hn.name] = (t) => q(async (t, n) => {
|
|
811
822
|
let r = t;
|
|
812
|
-
return await
|
|
823
|
+
return await mt(e.store, n.subject, { id: r.id }), b.update({ id: r.id }, r.updateName, r.payload, r.timeoutMs === void 0 ? void 0 : { timeoutMs: r.timeoutMs });
|
|
813
824
|
}, t, `action.${Hn.name}`));
|
|
814
|
-
let
|
|
815
|
-
...
|
|
816
|
-
...
|
|
817
|
-
...
|
|
818
|
-
...nt.queries.map((e) => z(e.descriptor)),
|
|
819
|
-
...nt.mutations.map((e) => Mn(e.descriptor)),
|
|
825
|
+
let Ct = [
|
|
826
|
+
...D(e.discovered.queries).map((e) => z(e.descriptor)),
|
|
827
|
+
...D(e.discovered.mutations).map((e) => Mn(e.descriptor)),
|
|
828
|
+
...D(e.discovered.actions).map((e) => R(e.descriptor)),
|
|
820
829
|
...rt.queries.map((e) => z(e.descriptor)),
|
|
821
830
|
...rt.mutations.map((e) => Mn(e.descriptor)),
|
|
822
|
-
...
|
|
823
|
-
...
|
|
824
|
-
...
|
|
825
|
-
...
|
|
826
|
-
...S.
|
|
831
|
+
...it.queries.map((e) => z(e.descriptor)),
|
|
832
|
+
...it.mutations.map((e) => Mn(e.descriptor)),
|
|
833
|
+
...S.queries.map((e) => z(e.descriptor)),
|
|
834
|
+
...S.mutations.map((e) => Mn(e.descriptor)),
|
|
835
|
+
...S.actions.map((e) => R(e.descriptor)),
|
|
836
|
+
...D(e.discovered.streams ?? []).map((e) => Nn(e.descriptor)),
|
|
837
|
+
...w.rpcs,
|
|
827
838
|
...(e.discovered.workflows ?? []).map((e) => si(e.definition)),
|
|
828
|
-
...
|
|
839
|
+
...pe ? [
|
|
829
840
|
z(Rn),
|
|
830
841
|
z(Bn),
|
|
831
842
|
z(zn),
|
|
@@ -837,28 +848,28 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
837
848
|
R(Vn),
|
|
838
849
|
R(Hn)
|
|
839
850
|
] : []
|
|
840
|
-
],
|
|
851
|
+
], Et = Xn.make(...Ct).middleware(On).middleware(kn), Ot = Ar({ resolveSubject: ({ headers: t, clientId: n }) => e.resolveSubject(t, n) }), kt = e.dormancyTenantId ?? rr, At = e.dormancy === "sleep" ? {
|
|
841
852
|
register: (t, n, r) => Jr(e.store, {
|
|
842
|
-
tenantId: r ??
|
|
853
|
+
tenantId: r ?? kt,
|
|
843
854
|
kind: "workflow",
|
|
844
855
|
refId: t,
|
|
845
856
|
wakeAt: n
|
|
846
857
|
}),
|
|
847
858
|
cancel: (t, n) => hr(e.store, {
|
|
848
|
-
tenantId: n ??
|
|
859
|
+
tenantId: n ?? kt,
|
|
849
860
|
kind: "workflow",
|
|
850
861
|
refId: t
|
|
851
862
|
}).then(() => {})
|
|
852
|
-
} : void 0,
|
|
863
|
+
} : void 0, j = me ? await import("@voltro/workflow") : void 0, M = j?.makeWorkflowRunRecorder({
|
|
853
864
|
store: e.store,
|
|
854
865
|
...e.workflowRecording === void 0 ? {} : { recording: e.workflowRecording },
|
|
855
|
-
...
|
|
856
|
-
}),
|
|
857
|
-
await
|
|
866
|
+
...At === void 0 ? {} : { wakeups: At }
|
|
867
|
+
}), Nt = async (t, n) => {
|
|
868
|
+
await j.closeWorkflowChildrenForParent({
|
|
858
869
|
store: e.store,
|
|
859
870
|
parentExecutionId: t,
|
|
860
871
|
parentStatus: n,
|
|
861
|
-
recorder:
|
|
872
|
+
recorder: M,
|
|
862
873
|
log: { warn: (e, t) => {
|
|
863
874
|
process.stderr.write(`[workflow] ${e} ${t ? JSON.stringify(t) : ""}\n`);
|
|
864
875
|
} },
|
|
@@ -869,7 +880,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
869
880
|
await f.runPromise(r.definition.interrupt(n));
|
|
870
881
|
}
|
|
871
882
|
});
|
|
872
|
-
},
|
|
883
|
+
}, Pt = async (t, n, r) => {
|
|
873
884
|
let i = (await e.store.query({
|
|
874
885
|
table: "_voltro_workflow_runs",
|
|
875
886
|
order: [],
|
|
@@ -884,7 +895,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
884
895
|
cancelled: !0,
|
|
885
896
|
completedAt: /* @__PURE__ */ new Date()
|
|
886
897
|
}), o = i.subject?.tenantId ?? void 0;
|
|
887
|
-
a && await
|
|
898
|
+
a && await M.recordEvent({
|
|
888
899
|
runId: i.id,
|
|
889
900
|
eventType: "run-cancelled",
|
|
890
901
|
payload: {
|
|
@@ -893,18 +904,18 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
893
904
|
executionId: n,
|
|
894
905
|
...o == null ? {} : { tenantId: o }
|
|
895
906
|
}
|
|
896
|
-
}), a && await
|
|
897
|
-
},
|
|
907
|
+
}), a && await Nt(n, "cancelled");
|
|
908
|
+
}, Ft = [
|
|
898
909
|
...Ur(e.discovered.workflows ?? [], {
|
|
899
|
-
buildContext: (t, n) => e.buildContextForWorkflow?.(t, n) ??
|
|
910
|
+
buildContext: (t, n) => e.buildContextForWorkflow?.(t, n) ?? ze({
|
|
900
911
|
subject: t.subject,
|
|
901
912
|
traceId: t.traceId
|
|
902
913
|
}, e.store, void 0, `workflow:${n.workflowName}`, { parentExecutionId: n.executionId }),
|
|
903
|
-
resolveStartContext:
|
|
904
|
-
...
|
|
914
|
+
resolveStartContext: le,
|
|
915
|
+
...ue === void 0 ? {} : { resolveAuthority: ue }
|
|
905
916
|
}, (t, n, r) => {
|
|
906
|
-
let i =
|
|
907
|
-
return
|
|
917
|
+
let i = j.getWorkflowVersionMetadata(t.definition);
|
|
918
|
+
return j.wrapWorkflowExecuteWithRunRecording({
|
|
908
919
|
name: t.definition.name,
|
|
909
920
|
store: e.store,
|
|
910
921
|
subject: r.subject,
|
|
@@ -915,27 +926,27 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
915
926
|
workflowPatches: i.patches,
|
|
916
927
|
parentExecutionId: r?.parentExecutionId ?? null,
|
|
917
928
|
parentClosePolicy: r?.parentClosePolicy ?? null,
|
|
918
|
-
onParentClose: ({ executionId: e, status: t }) =>
|
|
919
|
-
...
|
|
929
|
+
onParentClose: ({ executionId: e, status: t }) => Nt(e, t),
|
|
930
|
+
...We(t.definition),
|
|
920
931
|
onTerminal: async ({ executionId: e }) => {
|
|
921
|
-
await
|
|
932
|
+
await ee?.gate.release(e);
|
|
922
933
|
},
|
|
923
|
-
recorder:
|
|
924
|
-
pluginWorkflowStepLayer:
|
|
934
|
+
recorder: M,
|
|
935
|
+
pluginWorkflowStepLayer: $e,
|
|
925
936
|
recordRun: qr
|
|
926
937
|
}, n);
|
|
927
938
|
}),
|
|
928
939
|
...e.discovered.workflowWorkers ?? [],
|
|
929
|
-
...
|
|
930
|
-
],
|
|
931
|
-
if (((e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster" ||
|
|
932
|
-
let t =
|
|
933
|
-
f = Wn.make(e.baseLayer === void 0 ? t : t.pipe(U.provideMerge(e.baseLayer))), await f.runPromise(H.void), (e.log ?? L({ scope: "voltro:serve" })).child("workflow").info(`workflow runtime ready — ${
|
|
940
|
+
...be === void 0 ? [] : [be]
|
|
941
|
+
], Lt = [...(e.discovered.workflows ?? []).map((e) => e.definition.name).filter(Boolean), ...be === void 0 ? [] : ["voltro.deliverWebhook"]], Rt = Ft.length > 0 ? U.mergeAll(...Ft) : U.empty;
|
|
942
|
+
if (((e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster" || be !== void 0) && e.workflowEngineLayer !== void 0) {
|
|
943
|
+
let t = Rt.pipe(U.provideMerge(e.workflowEngineLayer));
|
|
944
|
+
f = Wn.make(e.baseLayer === void 0 ? t : t.pipe(U.provideMerge(e.baseLayer))), await f.runPromise(H.void), (e.log ?? L({ scope: "voltro:serve" })).child("workflow").info(`workflow runtime ready — ${Lt.length} entity type(s) registered`, { entities: Lt });
|
|
934
945
|
let n = await import("@voltro/workflow/cluster"), r = (e) => f.runPromise(n.redriveFailedRun(e)), i = (e) => f.runPromise(n.resumeRunFromStep(e));
|
|
935
|
-
|
|
946
|
+
ne = await A({
|
|
936
947
|
provider: Di(e.plugins ?? [])?.broadcast?.provider,
|
|
937
948
|
crossReplica: Di(e.plugins ?? [])?.broadcast?.crossReplica ?? !1,
|
|
938
|
-
namespace:
|
|
949
|
+
namespace: Ae,
|
|
939
950
|
replicaId: crypto.randomUUID(),
|
|
940
951
|
pollStorage: () => f.runPromise(n.pollWorkflowStorage),
|
|
941
952
|
onChange: (t) => e.store.onChange((e) => t({
|
|
@@ -944,13 +955,13 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
944
955
|
...e.origin === void 0 ? {} : { origin: e.origin }
|
|
945
956
|
})),
|
|
946
957
|
log: (e.log ?? L({ scope: "voltro:serve" })).child("workflow")
|
|
947
|
-
}),
|
|
948
|
-
let n = await
|
|
958
|
+
}), p = async (t) => {
|
|
959
|
+
let n = await ie({
|
|
949
960
|
store: e.store,
|
|
950
961
|
workflows: e.discovered.workflows ?? [],
|
|
951
962
|
runRedrive: r
|
|
952
963
|
}, t.runId);
|
|
953
|
-
return n.statusReset && await
|
|
964
|
+
return n.statusReset && await M.recordEvent({
|
|
954
965
|
runId: t.runId,
|
|
955
966
|
eventType: "run-redriven",
|
|
956
967
|
payload: {
|
|
@@ -962,13 +973,13 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
962
973
|
activitiesReset: n.outcome.activitiesReset,
|
|
963
974
|
reason: n.outcome.reason
|
|
964
975
|
};
|
|
965
|
-
},
|
|
966
|
-
let n = await
|
|
976
|
+
}, te = async (t) => {
|
|
977
|
+
let n = await Ee({
|
|
967
978
|
store: e.store,
|
|
968
979
|
workflows: e.discovered.workflows ?? [],
|
|
969
980
|
runResume: i
|
|
970
981
|
}, t.runId, t.step);
|
|
971
|
-
return n.statusReset && await
|
|
982
|
+
return n.statusReset && await M.recordEvent({
|
|
972
983
|
runId: t.runId,
|
|
973
984
|
eventType: "run-redriven",
|
|
974
985
|
payload: {
|
|
@@ -986,7 +997,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
986
997
|
let a = (e.scheduleCoordination ?? "single") === "advisoryLock" ? Tr(e.store, e.scheduleReplicaId ?? `pid-${process.pid}`) : ei, s = jr({
|
|
987
998
|
coordinator: a,
|
|
988
999
|
replicaId: e.scheduleReplicaId ?? `pid-${process.pid}`
|
|
989
|
-
}),
|
|
1000
|
+
}), u = {
|
|
990
1001
|
info: (e, t) => {
|
|
991
1002
|
process.stdout.write(`[flow-control] ${e} ${t ? JSON.stringify(t) : ""}\n`);
|
|
992
1003
|
},
|
|
@@ -996,19 +1007,19 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
996
1007
|
error: (e, t) => {
|
|
997
1008
|
process.stderr.write(`[flow-control] ERROR ${e} ${t ? JSON.stringify(t) : ""}\n`);
|
|
998
1009
|
}
|
|
999
|
-
},
|
|
1000
|
-
if (
|
|
1001
|
-
if (o !== void 0 &&
|
|
1010
|
+
}, d, m = () => {
|
|
1011
|
+
if (d !== void 0) return d;
|
|
1012
|
+
if (o !== void 0 && M !== void 0) return d = h({
|
|
1002
1013
|
store: e.store,
|
|
1003
|
-
log:
|
|
1014
|
+
log: F,
|
|
1004
1015
|
workflows: e.discovered.workflows ?? [],
|
|
1005
1016
|
workflowsProxy: o,
|
|
1006
1017
|
workflowRuntime: f,
|
|
1007
|
-
workflowRunRecorder:
|
|
1008
|
-
closeChildrenForParent:
|
|
1009
|
-
}),
|
|
1018
|
+
workflowRunRecorder: M,
|
|
1019
|
+
closeChildrenForParent: Nt
|
|
1020
|
+
}), d;
|
|
1010
1021
|
};
|
|
1011
|
-
|
|
1022
|
+
c = m, ee = nt({
|
|
1012
1023
|
store: e.store,
|
|
1013
1024
|
onChange: (t) => e.store.onChange((e) => t({
|
|
1014
1025
|
table: e.table,
|
|
@@ -1022,23 +1033,23 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1022
1033
|
},
|
|
1023
1034
|
workflows: e.discovered.workflows ?? [],
|
|
1024
1035
|
facade: () => o,
|
|
1025
|
-
cancelRunWithReason:
|
|
1026
|
-
recordRunEvent: () =>
|
|
1036
|
+
cancelRunWithReason: m,
|
|
1037
|
+
recordRunEvent: () => M?.recordEvent,
|
|
1027
1038
|
...e.workflowStaleness === void 0 ? {} : { staleness: e.workflowStaleness },
|
|
1028
1039
|
...e.workflowSuspendSignalHintMs === void 0 ? {} : { suspendSignalHintMs: e.workflowSuspendSignalHintMs },
|
|
1029
1040
|
scheduleCoordinated: s,
|
|
1030
1041
|
onAbandoned: async (t) => {
|
|
1031
|
-
await
|
|
1042
|
+
await Tt({
|
|
1032
1043
|
workflows: e.discovered.workflows ?? [],
|
|
1033
1044
|
facade: () => o,
|
|
1034
|
-
log:
|
|
1045
|
+
log: u,
|
|
1035
1046
|
...t
|
|
1036
1047
|
});
|
|
1037
1048
|
},
|
|
1038
|
-
log:
|
|
1049
|
+
log: u
|
|
1039
1050
|
});
|
|
1040
|
-
let
|
|
1041
|
-
|
|
1051
|
+
let g = ee;
|
|
1052
|
+
g !== void 0 && Gr(() => g.stop()), l = Ke({
|
|
1042
1053
|
store: e.store,
|
|
1043
1054
|
onChange: (t) => e.store.onChange((e) => t({
|
|
1044
1055
|
table: e.table,
|
|
@@ -1049,93 +1060,93 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1049
1060
|
tickIntervalMs: e.scheduling.inferenceTickMs
|
|
1050
1061
|
},
|
|
1051
1062
|
enabled: (e.discovered.workflows?.length ?? 0) > 0,
|
|
1052
|
-
resumeSignal: () => f === void 0 ||
|
|
1053
|
-
await f.runPromise(
|
|
1063
|
+
resumeSignal: () => f === void 0 || j === void 0 ? void 0 : async ({ executionId: t, workflowName: n, signalName: r, payload: i }) => {
|
|
1064
|
+
await f.runPromise(j.completeSuspendingSignal({
|
|
1054
1065
|
store: e.store,
|
|
1055
|
-
target:
|
|
1066
|
+
target: jt(t, n),
|
|
1056
1067
|
signalName: r,
|
|
1057
1068
|
payload: i
|
|
1058
1069
|
}));
|
|
1059
1070
|
},
|
|
1060
1071
|
runEffect: (e) => f.runPromise(e),
|
|
1061
1072
|
scheduleCoordinated: s,
|
|
1062
|
-
log:
|
|
1073
|
+
log: u
|
|
1063
1074
|
});
|
|
1064
|
-
let
|
|
1065
|
-
|
|
1075
|
+
let _ = l;
|
|
1076
|
+
_ !== void 0 && Gr(() => _.stop()), o = (e.discovered.workflows?.length ?? 0) > 0 ? Vr({
|
|
1066
1077
|
workflows: e.discovered.workflows ?? [],
|
|
1067
1078
|
runEffect: (e) => f.runPromise(e),
|
|
1068
|
-
onEnqueue: () =>
|
|
1069
|
-
...
|
|
1070
|
-
admitStart:
|
|
1071
|
-
startPayloadSchema:
|
|
1072
|
-
parkDelayedStart:
|
|
1079
|
+
onEnqueue: () => ne?.publishWake(),
|
|
1080
|
+
...g === void 0 ? {} : {
|
|
1081
|
+
admitStart: g.gate.admitStart,
|
|
1082
|
+
startPayloadSchema: g.gate.startPayloadSchema,
|
|
1083
|
+
parkDelayedStart: g.gate.parkDelayed
|
|
1073
1084
|
},
|
|
1074
|
-
rememberStartContext:
|
|
1085
|
+
rememberStartContext: ce,
|
|
1075
1086
|
signal: async (t, n, r) => {
|
|
1076
|
-
let i = await
|
|
1087
|
+
let i = await j.sendWorkflowSignal({
|
|
1077
1088
|
store: e.store,
|
|
1078
|
-
recorder:
|
|
1089
|
+
recorder: M,
|
|
1079
1090
|
target: t,
|
|
1080
1091
|
signalName: n,
|
|
1081
1092
|
payload: r
|
|
1082
1093
|
});
|
|
1083
|
-
return await f.runPromise(
|
|
1094
|
+
return await f.runPromise(j.completeSuspendingSignal({
|
|
1084
1095
|
store: e.store,
|
|
1085
1096
|
target: t,
|
|
1086
1097
|
signalName: n,
|
|
1087
1098
|
payload: r
|
|
1088
1099
|
})).catch(() => {}), i;
|
|
1089
1100
|
},
|
|
1090
|
-
update: (t, n, r, i) =>
|
|
1101
|
+
update: (t, n, r, i) => j.sendWorkflowUpdate({
|
|
1091
1102
|
store: e.store,
|
|
1092
|
-
recorder:
|
|
1103
|
+
recorder: M,
|
|
1093
1104
|
target: t,
|
|
1094
1105
|
updateName: n,
|
|
1095
1106
|
payload: r,
|
|
1096
1107
|
...i === void 0 ? {} : { options: i }
|
|
1097
1108
|
}),
|
|
1098
|
-
listRuns: (t) =>
|
|
1099
|
-
retry: (t, n) =>
|
|
1109
|
+
listRuns: (t) => De(e.store, t),
|
|
1110
|
+
retry: (t, n) => ke({
|
|
1100
1111
|
store: e.store,
|
|
1101
1112
|
workflows: e.discovered.workflows ?? [],
|
|
1102
1113
|
runPromise: (e) => f.runPromise(e)
|
|
1103
1114
|
}, t, n),
|
|
1104
|
-
redrive: (t) =>
|
|
1115
|
+
redrive: (t) => ie({
|
|
1105
1116
|
store: e.store,
|
|
1106
1117
|
workflows: e.discovered.workflows ?? [],
|
|
1107
1118
|
runRedrive: r
|
|
1108
1119
|
}, t).then((e) => e.outcome)
|
|
1109
1120
|
}) : void 0;
|
|
1110
1121
|
}
|
|
1111
|
-
let
|
|
1122
|
+
let Vt = U.mergeAll(Et.toLayer(O), Ot), Ht = St(O, e.discovered.queries.map((e) => e.descriptor.name), pe), Ut = U.mergeAll(Et.toLayer(Ht), Ot), N = e.observability, P = await mr({
|
|
1112
1123
|
...e.appName === void 0 ? {} : { serviceName: e.appName },
|
|
1113
|
-
...
|
|
1114
|
-
...
|
|
1115
|
-
...
|
|
1116
|
-
...
|
|
1117
|
-
}),
|
|
1118
|
-
group:
|
|
1119
|
-
handlersLayer:
|
|
1120
|
-
httpHandlersLayer:
|
|
1124
|
+
...N && N.spanProcessors.length > 0 ? { extraSpanProcessors: N.spanProcessors } : {},
|
|
1125
|
+
...N && N.metricReaders.length > 0 ? { extraMetricReaders: N.metricReaders } : {},
|
|
1126
|
+
...N && Object.keys(N.resourceAttributes).length > 0 ? { resourceAttributes: N.resourceAttributes } : {},
|
|
1127
|
+
...N && N.sampler !== void 0 ? { sampler: N.sampler } : {}
|
|
1128
|
+
}), Wt = !1, Gt = e.store.ping ? () => e.store.ping().then(() => !0).catch(() => !1) : void 0, { server: Kt, shutdown: qt } = ti({
|
|
1129
|
+
group: Et,
|
|
1130
|
+
handlersLayer: Vt,
|
|
1131
|
+
httpHandlersLayer: Ut,
|
|
1121
1132
|
port: e.port ?? 4e3,
|
|
1122
1133
|
...e.host === void 0 ? {} : { host: e.host },
|
|
1123
1134
|
path: e.path ?? "/ws",
|
|
1124
|
-
tracerLayer:
|
|
1125
|
-
security:
|
|
1126
|
-
...
|
|
1135
|
+
tracerLayer: P.layer,
|
|
1136
|
+
security: _e(e),
|
|
1137
|
+
...Ze,
|
|
1127
1138
|
healthCheck: {
|
|
1128
|
-
isReady: () =>
|
|
1129
|
-
...
|
|
1139
|
+
isReady: () => Wt,
|
|
1140
|
+
...Gt ? { ping: Gt } : {}
|
|
1130
1141
|
},
|
|
1131
|
-
...
|
|
1142
|
+
...xt.length > 0 ? { httpRoutes: xt } : {},
|
|
1132
1143
|
...e.getStore === void 0 ? {} : { getStore: e.getStore },
|
|
1133
|
-
...
|
|
1144
|
+
...xe.size > 0 ? { webhookRoutes: xe } : {},
|
|
1134
1145
|
...e.inspectRoute === void 0 ? {} : { inspectRoute: e.inspectRoute }
|
|
1135
|
-
}),
|
|
1136
|
-
if (await fr(
|
|
1146
|
+
}), Jt = Li(Kt);
|
|
1147
|
+
if (await fr(Kt), (e.discovered.schedules?.length ?? 0) > 0) {
|
|
1137
1148
|
let t = (e.scheduleCoordination ?? "single") === "advisoryLock" ? Tr(e.store, e.scheduleReplicaId ?? `pid-${process.pid}`) : ei;
|
|
1138
|
-
|
|
1149
|
+
oe = await ni(e.discovered.schedules ?? [], {
|
|
1139
1150
|
store: e.store,
|
|
1140
1151
|
coordinator: t,
|
|
1141
1152
|
defaultTrigger: e.scheduleDefaultTrigger ?? "self",
|
|
@@ -1143,7 +1154,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1143
1154
|
armSelf: e.scheduleArmSelf ?? !0,
|
|
1144
1155
|
dormancy: e.dormancy ?? "always-on",
|
|
1145
1156
|
...e.dormancyTenantId === void 0 ? {} : { dormancyTenantId: e.dormancyTenantId },
|
|
1146
|
-
buildContext: ({ traceId: t, scheduleName: n, subject: r }) =>
|
|
1157
|
+
buildContext: ({ traceId: t, scheduleName: n, subject: r }) => ze({
|
|
1147
1158
|
subject: r,
|
|
1148
1159
|
traceId: t
|
|
1149
1160
|
}, e.store, void 0, `schedule:${n}`),
|
|
@@ -1161,26 +1172,26 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1161
1172
|
},
|
|
1162
1173
|
...e.scheduleFireInterceptor === void 0 ? {} : { interceptFire: e.scheduleFireInterceptor },
|
|
1163
1174
|
...e.onScheduleRunEvent === void 0 ? {} : { onRunEvent: e.onScheduleRunEvent }
|
|
1164
|
-
}), e.onSchedulerReady?.(
|
|
1175
|
+
}), e.onSchedulerReady?.(oe);
|
|
1165
1176
|
}
|
|
1166
|
-
let
|
|
1167
|
-
if ((e.discovered.subscribers?.length ?? 0) > 0 && (
|
|
1168
|
-
let t =
|
|
1177
|
+
let F = e.log ?? L({ scope: "voltro:serve" }), Yt, Xt;
|
|
1178
|
+
if ((e.discovered.subscribers?.length ?? 0) > 0 && (Yt = C(e.discovered.subscribers ?? [], e.store, F.child("subscribe"), e.schemaRegistry, w.bus)), (e.discovered.reactions?.length ?? 0) > 0) {
|
|
1179
|
+
let t = F.child("reaction"), n = async (n, r) => {
|
|
1169
1180
|
if (n.kind === "workflow") {
|
|
1170
|
-
if (
|
|
1181
|
+
if (b === void 0) {
|
|
1171
1182
|
t.warn("reaction workflow act skipped — no workflow engine in this app", { workflow: n.workflow });
|
|
1172
1183
|
return;
|
|
1173
1184
|
}
|
|
1174
1185
|
let e = n.payload === void 0 ? r.new ?? r.old ?? {} : n.payload(r);
|
|
1175
|
-
await Hr(
|
|
1186
|
+
await Hr(b, {
|
|
1176
1187
|
traceId: `reaction:${n.workflow}`,
|
|
1177
1188
|
source: `reaction:${n.workflow}`
|
|
1178
1189
|
}).start(n.workflow, e);
|
|
1179
1190
|
return;
|
|
1180
1191
|
}
|
|
1181
|
-
await
|
|
1192
|
+
await st(n.agent, r, {
|
|
1182
1193
|
findAgentSend: (t) => e.discovered.actions.find((e) => e.descriptor.name === `${t}.send`),
|
|
1183
|
-
runAction: (e, t, n) => Promise.resolve(
|
|
1194
|
+
runAction: (e, t, n) => Promise.resolve(at(e, t, n)),
|
|
1184
1195
|
makeSubject: (e) => An(e),
|
|
1185
1196
|
now: () => Date.now(),
|
|
1186
1197
|
log: t
|
|
@@ -1195,74 +1206,74 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1195
1206
|
} catch (e) {
|
|
1196
1207
|
return t.warn("reaction budget check failed — refusing the act", { tenantId: n }, e), !1;
|
|
1197
1208
|
}
|
|
1198
|
-
}, i =
|
|
1199
|
-
|
|
1209
|
+
}, i = ut(e.store, { onError: (e) => t.warn("reaction: rate-slot claim failed; refusing the act", { cause: String(e) }) });
|
|
1210
|
+
Xt = u(e.discovered.reactions ?? [], e.store, {
|
|
1200
1211
|
runAct: n,
|
|
1201
1212
|
checkBudget: r,
|
|
1202
1213
|
claimRateSlot: (e) => i.claim(e)
|
|
1203
1214
|
}, t);
|
|
1204
1215
|
}
|
|
1205
|
-
let
|
|
1206
|
-
(e.discovered.aggregates?.length ?? 0) > 0 && (
|
|
1216
|
+
let Zt;
|
|
1217
|
+
(e.discovered.aggregates?.length ?? 0) > 0 && (Zt = await Te({
|
|
1207
1218
|
discovered: e.discovered.aggregates ?? [],
|
|
1208
1219
|
store: e.store,
|
|
1209
|
-
log:
|
|
1220
|
+
log: F.child("aggregate"),
|
|
1210
1221
|
...e.analytics === void 0 ? {} : { analytics: e.analytics },
|
|
1211
1222
|
...e.aggregateStorage === void 0 ? {} : { storage: e.aggregateStorage },
|
|
1212
1223
|
...e.aggregateCoordinator === void 0 ? {} : { coordinator: e.aggregateCoordinator }
|
|
1213
|
-
}),
|
|
1214
|
-
let
|
|
1215
|
-
(e.discovered.expectations?.length ?? 0) > 0 && (
|
|
1224
|
+
}), Be = U.succeed(nr, Zt.registry));
|
|
1225
|
+
let Qt;
|
|
1226
|
+
(e.discovered.expectations?.length ?? 0) > 0 && (Qt = lr({
|
|
1216
1227
|
discovered: e.discovered.expectations ?? [],
|
|
1217
1228
|
store: e.store,
|
|
1218
|
-
log:
|
|
1219
|
-
}),
|
|
1229
|
+
log: F.child("expectation")
|
|
1230
|
+
}), Ve = U.succeed(ar, Qt.registry)), (e.discovered.budgets?.length ?? 0) > 0 && (n = dr({
|
|
1220
1231
|
discovered: e.discovered.budgets ?? [],
|
|
1221
|
-
log:
|
|
1222
|
-
}),
|
|
1223
|
-
let
|
|
1224
|
-
return (e.discovered.experiments?.length ?? 0) > 0 && (
|
|
1232
|
+
log: F.child("finops")
|
|
1233
|
+
}), Ue = U.succeed(K, n.registry));
|
|
1234
|
+
let $t;
|
|
1235
|
+
return (e.discovered.experiments?.length ?? 0) > 0 && ($t = ur({
|
|
1225
1236
|
discovered: e.discovered.experiments ?? [],
|
|
1226
1237
|
store: e.store,
|
|
1227
|
-
log:
|
|
1228
|
-
}),
|
|
1238
|
+
log: F.child("experiment")
|
|
1239
|
+
}), Ge = U.succeed(or, $t.registry)), Wt = !0, e.bootTiming?.mark("ready"), {
|
|
1229
1240
|
dispatcher: r,
|
|
1230
|
-
server:
|
|
1231
|
-
scheduler:
|
|
1232
|
-
eventsSnapshot:
|
|
1241
|
+
server: Kt,
|
|
1242
|
+
scheduler: oe,
|
|
1243
|
+
eventsSnapshot: fe(w.bus, w.declared),
|
|
1233
1244
|
membersSnapshot: () => ({
|
|
1234
|
-
members:
|
|
1245
|
+
members: Le.membership.list(),
|
|
1235
1246
|
capturedAt: Date.now()
|
|
1236
1247
|
}),
|
|
1237
|
-
agentTools: () =>
|
|
1238
|
-
rpcMetrics: () =>
|
|
1239
|
-
webhooksService: () =>
|
|
1240
|
-
runCanceller: () =>
|
|
1241
|
-
flowControlHealth: () =>
|
|
1242
|
-
inferenceHealth: () =>
|
|
1243
|
-
workflowWriteActions: () =>
|
|
1248
|
+
agentTools: () => ht,
|
|
1249
|
+
rpcMetrics: () => Ye,
|
|
1250
|
+
webhooksService: () => ye,
|
|
1251
|
+
runCanceller: () => c(),
|
|
1252
|
+
flowControlHealth: () => ee?.cancelHealth(),
|
|
1253
|
+
inferenceHealth: () => l?.health(),
|
|
1254
|
+
workflowWriteActions: () => b === void 0 || M === void 0 ? void 0 : ae({
|
|
1244
1255
|
store: e.store,
|
|
1245
|
-
log:
|
|
1256
|
+
log: F,
|
|
1246
1257
|
workflows: e.discovered.workflows ?? [],
|
|
1247
1258
|
workflowsProxy: o,
|
|
1248
1259
|
workflowRuntime: f,
|
|
1249
|
-
workflowRunRecorder:
|
|
1250
|
-
closeChildrenForParent:
|
|
1260
|
+
workflowRunRecorder: M,
|
|
1261
|
+
closeChildrenForParent: Nt
|
|
1251
1262
|
}),
|
|
1252
|
-
redriveWorkflowRun: (e) =>
|
|
1253
|
-
resumeWorkflowRunFromStep: (e) =>
|
|
1263
|
+
redriveWorkflowRun: (e) => p ? p(e) : Promise.reject(/* @__PURE__ */ Error("redrive: this app registers no workflows")),
|
|
1264
|
+
resumeWorkflowRunFromStep: (e) => te ? te(e) : Promise.reject(/* @__PURE__ */ Error("resume-from-step: this app registers no workflows")),
|
|
1254
1265
|
close: async () => {
|
|
1255
|
-
|
|
1256
|
-
for (let e of
|
|
1266
|
+
Wt = !1, await Jt.drainRequests();
|
|
1267
|
+
for (let e of Se) try {
|
|
1257
1268
|
await e();
|
|
1258
1269
|
} catch (e) {
|
|
1259
|
-
|
|
1270
|
+
F.warn("serve: teardown step failed", {}, e);
|
|
1260
1271
|
}
|
|
1261
|
-
await
|
|
1272
|
+
await Re?.detach(), await Le.detach(), Zt?.detach(), Qt?.detach(), n?.detach(), $t?.detach(), Xt?.(), Yt?.(), await oe?.shutdown(), r.close(), await ne?.detach(), await f?.dispose(), await qt(), await Jt.finish();
|
|
1262
1273
|
}
|
|
1263
1274
|
};
|
|
1264
|
-
}, $ = L({ scope: "voltro:serve" }), da = (e, t, n) => (e === "production" || e === "staging") && t !== "memory" && n !== "0", fa =
|
|
1265
|
-
let t =
|
|
1275
|
+
}, $ = L({ scope: "voltro:serve" }), da = (e, t, n) => (e === "production" || e === "staging") && t !== "memory" && n !== "0", fa = Vt, pa = async (e) => {
|
|
1276
|
+
let t = bn(process.cwd());
|
|
1266
1277
|
if (En(t)) {
|
|
1267
1278
|
let n;
|
|
1268
1279
|
try {
|
|
@@ -1275,270 +1286,270 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1275
1286
|
}
|
|
1276
1287
|
return ma(e);
|
|
1277
1288
|
}, ma = async (s) => {
|
|
1278
|
-
let
|
|
1289
|
+
let u = xn();
|
|
1279
1290
|
e("serve");
|
|
1280
1291
|
try {
|
|
1281
1292
|
hi();
|
|
1282
1293
|
} catch (e) {
|
|
1283
1294
|
throw i(e instanceof Error ? e.message : String(e));
|
|
1284
1295
|
}
|
|
1285
|
-
let
|
|
1296
|
+
let d = process.cwd(), m = await Ue(d), h = Ht({
|
|
1286
1297
|
kind: "api",
|
|
1287
|
-
configPort:
|
|
1298
|
+
configPort: m?.port,
|
|
1288
1299
|
env: process.env,
|
|
1289
1300
|
flagPort: fa(s, "--port")
|
|
1290
1301
|
});
|
|
1291
|
-
for (let e of
|
|
1292
|
-
let
|
|
1293
|
-
Zr(Yr(
|
|
1294
|
-
rawEnv:
|
|
1302
|
+
for (let e of h.warnings) $.warn(e);
|
|
1303
|
+
let g = h.port;
|
|
1304
|
+
Zr(Yr(m?.secrets)), await Ut({
|
|
1305
|
+
rawEnv: m?.env,
|
|
1295
1306
|
appType: "api",
|
|
1296
|
-
root:
|
|
1307
|
+
root: d,
|
|
1297
1308
|
log: $,
|
|
1298
1309
|
generateTypes: !1
|
|
1299
|
-
}),
|
|
1300
|
-
let
|
|
1301
|
-
if (!r() && En(
|
|
1302
|
-
let e = await import(Dn(
|
|
1310
|
+
}), u.mark("config");
|
|
1311
|
+
let _ = (process.env.DB_DIALECT ?? m?.store ?? "memory").toLowerCase(), re = (_ === "mariadb" || _ === "postgres" || _ === "mssql") && (process.env.CDC ?? "1") !== "0", ie = _ === "mariadb" ? "mariadb" : _ === "mssql" ? "mssql" : void 0, ae = yn(d);
|
|
1312
|
+
if (!r() && En(ae)) try {
|
|
1313
|
+
let e = await import(Dn(ae).href);
|
|
1303
1314
|
if (e.modules) {
|
|
1304
1315
|
let t = {};
|
|
1305
|
-
for (let [n, r] of Object.entries(e.modules)) t[wn(
|
|
1316
|
+
for (let [n, r] of Object.entries(e.modules)) t[wn(d, n)] = r;
|
|
1306
1317
|
n(t), $.info("precompiled api bundle loaded", { modules: Object.keys(t).length });
|
|
1307
1318
|
}
|
|
1308
1319
|
} catch (e) {
|
|
1309
1320
|
$.warn("precompiled api bundle failed to load — falling back to source", {}, e);
|
|
1310
1321
|
}
|
|
1311
|
-
let
|
|
1322
|
+
let v = await Ye(d), y = await kt(v, { cdc: re && ie !== void 0 }), de = x(y);
|
|
1312
1323
|
{
|
|
1313
1324
|
let e = /* @__PURE__ */ new Set([
|
|
1314
|
-
...
|
|
1315
|
-
...
|
|
1316
|
-
...
|
|
1325
|
+
...y.queries.filter((e) => e.descriptor.overridesPlugin === !0).map((e) => e.descriptor.name),
|
|
1326
|
+
...y.mutations.filter((e) => e.descriptor.overridesPlugin === !0).map((e) => e.descriptor.name),
|
|
1327
|
+
...y.actions.filter((e) => e.descriptor.overridesPlugin === !0).map((e) => e.descriptor.name)
|
|
1317
1328
|
]);
|
|
1318
|
-
|
|
1319
|
-
...
|
|
1320
|
-
...
|
|
1321
|
-
...
|
|
1322
|
-
...
|
|
1329
|
+
Yt(F(m?.plugins ?? []), [
|
|
1330
|
+
...y.queries.map((e) => e.descriptor.name),
|
|
1331
|
+
...y.mutations.map((e) => e.descriptor.name),
|
|
1332
|
+
...y.actions.map((e) => e.descriptor.name),
|
|
1333
|
+
...y.streams.map((e) => e.descriptor.name)
|
|
1323
1334
|
], e);
|
|
1324
|
-
let t =
|
|
1335
|
+
let t = Ae(y.serverOnlyLeaks, S(process.env, "strict"), vr, "`voltro serve`");
|
|
1325
1336
|
if (t.action === "fail") throw i(t.message ?? "");
|
|
1326
1337
|
t.action === "warn" && $.warn(t.message ?? "");
|
|
1327
1338
|
}
|
|
1328
|
-
let
|
|
1339
|
+
let fe = v.filter((e) => _n.test(e)), ve = fe.length > 0 ? await gn(fe, $.child("webhooks")) : {
|
|
1329
1340
|
outgoing: [],
|
|
1330
1341
|
incoming: [],
|
|
1331
1342
|
providers: []
|
|
1332
|
-
},
|
|
1333
|
-
...
|
|
1334
|
-
outgoing: [...
|
|
1335
|
-
},
|
|
1343
|
+
}, Te = mn(y.events), Ee = ve.outgoing.length + ve.incoming.length + ve.providers.length + Te.length === 0 ? void 0 : {
|
|
1344
|
+
...ve,
|
|
1345
|
+
outgoing: [...ve.outgoing, ...Te]
|
|
1346
|
+
}, De = nn({
|
|
1336
1347
|
nodeEnv: process.env.NODE_ENV,
|
|
1337
|
-
cdcDialect:
|
|
1338
|
-
declared:
|
|
1339
|
-
}),
|
|
1340
|
-
gates:
|
|
1348
|
+
cdcDialect: ie,
|
|
1349
|
+
declared: m?.schema
|
|
1350
|
+
}), ke = Zt({
|
|
1351
|
+
gates: De,
|
|
1341
1352
|
runtime: {
|
|
1342
|
-
traces:
|
|
1353
|
+
traces: ge(),
|
|
1343
1354
|
undo: ii()
|
|
1344
1355
|
}
|
|
1345
1356
|
});
|
|
1346
|
-
if (
|
|
1347
|
-
let
|
|
1348
|
-
mix:
|
|
1349
|
-
plugins:
|
|
1350
|
-
gates:
|
|
1351
|
-
...
|
|
1352
|
-
}),
|
|
1353
|
-
spec:
|
|
1354
|
-
sqlLayer:
|
|
1357
|
+
if (ke !== void 0) throw i(`serve: ${ke}`);
|
|
1358
|
+
let je = tn({
|
|
1359
|
+
mix: y.featureMix,
|
|
1360
|
+
plugins: m?.plugins ?? [],
|
|
1361
|
+
gates: De,
|
|
1362
|
+
...ie ? { cdcDialect: ie } : {}
|
|
1363
|
+
}), Me = m?.analytics !== void 0 && m.analytics.kind !== "noop" && _ !== "memory" ? (await P(_)).makeSqlLayer(k()) : void 0, Fe = await c({
|
|
1364
|
+
spec: m?.analytics,
|
|
1365
|
+
sqlLayer: Me,
|
|
1355
1366
|
log: $
|
|
1356
|
-
}),
|
|
1357
|
-
let e = new Set(
|
|
1358
|
-
for (let n of [...
|
|
1367
|
+
}), C = (() => {
|
|
1368
|
+
let e = new Set(y.tables.map((e) => e.tableName)), t = [...y.tables];
|
|
1369
|
+
for (let n of [...je, ...Fe.tables]) e.has(n.tableName) || (e.add(n.tableName), t.push(n));
|
|
1359
1370
|
return t;
|
|
1360
1371
|
})();
|
|
1361
|
-
for (let e of
|
|
1372
|
+
for (let e of C) er(e);
|
|
1362
1373
|
{
|
|
1363
|
-
let e = yr(ai(
|
|
1374
|
+
let e = yr(ai(y.queries.map((e) => ({
|
|
1364
1375
|
name: e.descriptor.name,
|
|
1365
1376
|
source: e.descriptor.source
|
|
1366
|
-
})), new Set(
|
|
1377
|
+
})), new Set(C.flatMap((e) => {
|
|
1367
1378
|
let t = e.tableName;
|
|
1368
1379
|
return t === void 0 ? [] : [t];
|
|
1369
1380
|
}))));
|
|
1370
1381
|
e !== void 0 && $.warn(e);
|
|
1371
1382
|
}
|
|
1372
|
-
let
|
|
1373
|
-
if (da(
|
|
1374
|
-
let e = (await
|
|
1383
|
+
let Ie = (process.env.NODE_ENV ?? "").toLowerCase();
|
|
1384
|
+
if (da(Ie, _, process.env.VOLTRO_AUTO_MIGRATE)) {
|
|
1385
|
+
let e = (await P(_)).makeSqlLayer(k()), t = await H.runPromise(Gn.SqlClient.pipe(H.flatMap((e) => Jn(e, d)), H.provide(e), H.catchAll(() => H.succeed([]))));
|
|
1375
1386
|
t.length > 0 && ($.error(`serve: refusing to boot — ${t.length} pending file-based migration(s) have never run against this database. They perform the changes a schema diff cannot infer (data moves, backfills, table splits), so the declarative fingerprint check below cannot see them and would have let this process serve un-migrated data.`, { pending: t }), $.error("Run them from your pre-deploy job — `voltro db migrate .` (schema + files) or `voltro db files .` (files alone) — or set VOLTRO_AUTO_MIGRATE=0 to bypass every boot schema check. `voltro serve` never applies them itself: a rolling deploy would start N replicas and each would try."), process.exit(1));
|
|
1376
|
-
let n = await H.runPromise(Gn.SqlClient.pipe(H.flatMap((e) => Yn(e,
|
|
1377
|
-
appliedBy: `serve:${
|
|
1387
|
+
let n = await H.runPromise(Gn.SqlClient.pipe(H.flatMap((e) => Yn(e, C, {
|
|
1388
|
+
appliedBy: `serve:${Ie}`,
|
|
1378
1389
|
environment: "prod",
|
|
1379
|
-
dialectId:
|
|
1390
|
+
dialectId: _
|
|
1380
1391
|
})), H.provide(e)));
|
|
1381
|
-
n.kind === "prod-mismatch" && ($.error(qn(n,
|
|
1382
|
-
gates:
|
|
1392
|
+
n.kind === "prod-mismatch" && ($.error(qn(n, _)), $.error($t({
|
|
1393
|
+
gates: De,
|
|
1383
1394
|
nodeEnv: process.env.NODE_ENV,
|
|
1384
|
-
cdcDialect:
|
|
1385
|
-
declared:
|
|
1386
|
-
})), $.error("serve: refusing to boot — apply the schema first (voltro db apply in a pre-deploy step), or set VOLTRO_AUTO_MIGRATE=0 to bypass this check."), process.exit(1)), $.info(qn(n,
|
|
1395
|
+
cdcDialect: ie,
|
|
1396
|
+
declared: m?.schema
|
|
1397
|
+
})), $.error("serve: refusing to boot — apply the schema first (voltro db apply in a pre-deploy step), or set VOLTRO_AUTO_MIGRATE=0 to bypass this check."), process.exit(1)), $.info(qn(n, _));
|
|
1387
1398
|
}
|
|
1388
|
-
await
|
|
1389
|
-
dialectId:
|
|
1390
|
-
tables:
|
|
1391
|
-
mode:
|
|
1392
|
-
lockSchema:
|
|
1393
|
-
makeLayer: async () => (await
|
|
1399
|
+
await Jt({
|
|
1400
|
+
dialectId: _,
|
|
1401
|
+
tables: C,
|
|
1402
|
+
mode: Kt(m?.reactiveTriggers),
|
|
1403
|
+
lockSchema: k().schema,
|
|
1404
|
+
makeLayer: async () => (await P(_)).makeSqlLayer(k()),
|
|
1394
1405
|
log: {
|
|
1395
1406
|
info: (e, t) => $.info(e, t ?? {}),
|
|
1396
1407
|
warn: (e, t) => $.warn(e, t ?? {})
|
|
1397
1408
|
}
|
|
1398
1409
|
});
|
|
1399
|
-
let
|
|
1400
|
-
|
|
1401
|
-
let
|
|
1402
|
-
for (let e of
|
|
1403
|
-
dialect: String(
|
|
1410
|
+
let He = Br(C);
|
|
1411
|
+
u.mark("discover");
|
|
1412
|
+
let T = await rt(m, void 0), We = ci(T, _);
|
|
1413
|
+
for (let e of ft({
|
|
1414
|
+
dialect: String(m?.store ?? process.env.DB_DIALECT ?? "postgres"),
|
|
1404
1415
|
changeStrategy: (process.env.CDC ?? "1") === "0" ? "inline" : "cdc",
|
|
1405
1416
|
dbUrl: process.env.DB_URL,
|
|
1406
|
-
crossReplicaBus: Di(
|
|
1407
|
-
tables:
|
|
1417
|
+
crossReplicaBus: Di(m?.plugins ?? [])?.broadcast.crossReplica === !0,
|
|
1418
|
+
tables: y.tables.map((e) => ({
|
|
1408
1419
|
tableName: e.tableName,
|
|
1409
1420
|
isReactive: e.isReactive === !0
|
|
1410
1421
|
})),
|
|
1411
|
-
querySources:
|
|
1422
|
+
querySources: y.queries.flatMap((e) => {
|
|
1412
1423
|
let t = e.descriptor.source;
|
|
1413
1424
|
return t === void 0 ? [] : typeof t == "string" ? [t] : [...t];
|
|
1414
1425
|
})
|
|
1415
1426
|
})) e.level === "warn" ? $.warn(e.message) : $.info(e.message);
|
|
1416
1427
|
{
|
|
1417
|
-
let e =
|
|
1428
|
+
let e = Xe({
|
|
1418
1429
|
tables: Zn().map((e) => ({ tableName: e.tableName })),
|
|
1419
|
-
queries:
|
|
1430
|
+
queries: y.queries.map((e) => ({
|
|
1420
1431
|
name: e.descriptor.name,
|
|
1421
1432
|
source: e.descriptor.source
|
|
1422
1433
|
}))
|
|
1423
|
-
}), t =
|
|
1434
|
+
}), t = _t(e);
|
|
1424
1435
|
t !== void 0 && $.warn(t);
|
|
1425
1436
|
}
|
|
1426
|
-
|
|
1427
|
-
let { service:
|
|
1437
|
+
m?.cache && !process.env.CACHE_BACKEND && (process.env.CACHE_BACKEND = m.cache), m?.cacheRedisUrl && !process.env.CACHE_REDIS_URL && (process.env.CACHE_REDIS_URL = m.cacheRedisUrl), m?.cacheRedisDriver && !process.env.CACHE_REDIS_DRIVER && (process.env.CACHE_REDIS_DRIVER = m.cacheRedisDriver), m?.cacheKeyPrefix && !process.env.CACHE_KEY_PREFIX && (process.env.CACHE_KEY_PREFIX = m.cacheKeyPrefix);
|
|
1438
|
+
let { service: Ke, invalidationBus: nt, snapshotCache: ot, cache: st, semantic: ut, evictSource: mt, backend: yt, stats: bt, dispose: St } = await Ge({
|
|
1428
1439
|
env: process.env,
|
|
1429
|
-
semantic:
|
|
1440
|
+
semantic: m?.cacheSemantic ?? !1
|
|
1430
1441
|
});
|
|
1431
|
-
|
|
1432
|
-
if (H.runFork(
|
|
1442
|
+
ut !== void 0 && $.info("semantic cache enabled — reactive eviction on live writes"), $.info(`cache backend resolved: ${yt}` + (yt === "redis" ? ` (driver ${process.env.CACHE_REDIS_DRIVER ?? "resp"})` : " — in-process, not cross-instance")), T.onChange((e) => {
|
|
1443
|
+
if (H.runFork(nt.publish(e.table)), mt !== void 0) {
|
|
1433
1444
|
let t = (e.new ?? e.old)?.id;
|
|
1434
|
-
|
|
1445
|
+
mt({
|
|
1435
1446
|
table: e.table,
|
|
1436
1447
|
op: e.op,
|
|
1437
1448
|
...t === void 0 ? {} : { id: t }
|
|
1438
1449
|
});
|
|
1439
1450
|
}
|
|
1440
|
-
}),
|
|
1441
|
-
let { kv:
|
|
1442
|
-
|
|
1451
|
+
}), m?.kv && !process.env.KV_BACKEND && (process.env.KV_BACKEND = m.kv), m?.kvRedisUrl && !process.env.KV_REDIS_URL && (process.env.KV_REDIS_URL = m.kvRedisUrl), m?.kvKeyPrefix && !process.env.KV_KEY_PREFIX && (process.env.KV_KEY_PREFIX = m.kvKeyPrefix);
|
|
1452
|
+
let { kv: wt, service: Tt } = await kr({ store: T });
|
|
1453
|
+
Ve({
|
|
1443
1454
|
log: $,
|
|
1444
|
-
max:
|
|
1445
|
-
outOfPool:
|
|
1455
|
+
max: Gt(),
|
|
1456
|
+
outOfPool: Rt(_, (process.env.CDC ?? "1") !== "0"),
|
|
1446
1457
|
readPools: t.replicationSnapshot()?.replicaCount ?? 0,
|
|
1447
1458
|
always: !0
|
|
1448
|
-
}),
|
|
1449
|
-
let
|
|
1450
|
-
store:
|
|
1451
|
-
sink:
|
|
1459
|
+
}), u.mark("store");
|
|
1460
|
+
let Dt = cr({
|
|
1461
|
+
store: T,
|
|
1462
|
+
sink: Fe.sink,
|
|
1452
1463
|
log: $
|
|
1453
|
-
}),
|
|
1454
|
-
store:
|
|
1455
|
-
dialect:
|
|
1464
|
+
}), jt = At({
|
|
1465
|
+
store: T,
|
|
1466
|
+
dialect: _,
|
|
1456
1467
|
log: { info: (e) => $.info(e) }
|
|
1457
|
-
}),
|
|
1458
|
-
|
|
1459
|
-
let
|
|
1468
|
+
}), A = m?.plugins ?? [], It = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, zt, Bt;
|
|
1469
|
+
_ !== "memory" && (zt = Wn.make((await P(_)).makeSqlLayer(k())), Bt = await zt.runPromise(Gn.SqlClient));
|
|
1470
|
+
let Vt = [
|
|
1460
1471
|
"postgres",
|
|
1461
1472
|
"mariadb",
|
|
1462
1473
|
"mysql",
|
|
1463
1474
|
"mssql"
|
|
1464
|
-
].includes(
|
|
1465
|
-
maxIdleIntervalMs:
|
|
1466
|
-
coordinator:
|
|
1467
|
-
replicaId:
|
|
1475
|
+
].includes(_) ? Tr(T, It, $) : ei, hn = w(m?.scheduling), bn = jr({
|
|
1476
|
+
maxIdleIntervalMs: hn.pollCeilingMs,
|
|
1477
|
+
coordinator: Vt,
|
|
1478
|
+
replicaId: It,
|
|
1468
1479
|
log: $
|
|
1469
|
-
}),
|
|
1480
|
+
}), Sn = [], I = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, Tn = Di(m?.plugins ?? [])?.broadcast?.provider, L = Qe(m?.plugins, m?.name ?? Cn(d));
|
|
1470
1481
|
{
|
|
1471
|
-
let e =
|
|
1482
|
+
let e = tt(m?.plugins, m?.name ?? Cn(d));
|
|
1472
1483
|
e !== void 0 && $.warn(e);
|
|
1473
1484
|
}
|
|
1474
|
-
let On =
|
|
1475
|
-
instanceId:
|
|
1485
|
+
let On = Mt(m?.plugins, {
|
|
1486
|
+
instanceId: I,
|
|
1476
1487
|
namespace: L,
|
|
1477
1488
|
meta: { mode: "serve" },
|
|
1478
1489
|
logger: $
|
|
1479
1490
|
}), kn = {
|
|
1480
|
-
...
|
|
1481
|
-
instanceId:
|
|
1491
|
+
...Bt ? { sql: Bt } : {},
|
|
1492
|
+
instanceId: I,
|
|
1482
1493
|
membership: On.membership,
|
|
1483
1494
|
...Tn === void 0 ? {} : { broadcast: Tn },
|
|
1484
1495
|
broadcastChannels: { presence: Ei(L, "presence") },
|
|
1485
1496
|
scheduleCoordinated: (e, t, n) => {
|
|
1486
|
-
let r =
|
|
1487
|
-
return
|
|
1497
|
+
let r = bn(e, t, n);
|
|
1498
|
+
return Sn.push(r), r;
|
|
1488
1499
|
}
|
|
1489
1500
|
};
|
|
1490
|
-
for (let e of
|
|
1491
|
-
|
|
1492
|
-
store:
|
|
1493
|
-
...
|
|
1501
|
+
for (let e of A) e.bindDataStore?.(We, kn);
|
|
1502
|
+
l({
|
|
1503
|
+
store: T,
|
|
1504
|
+
...ct(),
|
|
1494
1505
|
log: $
|
|
1495
1506
|
});
|
|
1496
|
-
let R =
|
|
1507
|
+
let R = A.filter((e) => typeof e.onChangeEvent == "function");
|
|
1497
1508
|
if (R.length > 0) {
|
|
1498
|
-
let e =
|
|
1499
|
-
|
|
1500
|
-
let n =
|
|
1509
|
+
let e = T.changeScope ?? "local";
|
|
1510
|
+
T.onChange((t) => {
|
|
1511
|
+
let n = pe(t, e);
|
|
1501
1512
|
for (let e of R) H.runFork(e.onChangeEvent(n).pipe(H.catchAllCause((t) => H.sync(() => $.warn(`plugin ${e.name} onChangeEvent failed`, { error: Un.pretty(t) })))));
|
|
1502
1513
|
});
|
|
1503
1514
|
}
|
|
1504
|
-
let An =
|
|
1505
|
-
plugins:
|
|
1506
|
-
appName:
|
|
1515
|
+
let An = se({
|
|
1516
|
+
plugins: A,
|
|
1517
|
+
appName: m?.name ?? "voltro-api",
|
|
1507
1518
|
appType: "api",
|
|
1508
1519
|
voltroVersion: process.env.npm_package_version ?? "0.0.0",
|
|
1509
1520
|
log: $
|
|
1510
1521
|
});
|
|
1511
|
-
|
|
1522
|
+
A.length && await An.activate(), u.mark("plugins");
|
|
1512
1523
|
let jn = await An.gatherObservability(), Mn = {
|
|
1513
1524
|
info: (e, t) => process.stdout.write(`[broadcast] ${e} ${t ? JSON.stringify(t) : ""}\n`),
|
|
1514
1525
|
warn: (e, t) => process.stderr.write(`[broadcast] ${e} ${t ? JSON.stringify(t) : ""}\n`),
|
|
1515
1526
|
debug: () => {}
|
|
1516
|
-
}, z, Nn = await
|
|
1527
|
+
}, z, Nn = await gt(T, m, _, L, Mn, (e, t) => {
|
|
1517
1528
|
z?.refreshAll(`broadcast gap: missed ${t} change(s) from ${e}`);
|
|
1518
|
-
}), Pn =
|
|
1529
|
+
}), Pn = m?.apiKeys, Fn = (typeof Pn == "object" ? Pn.prefix : void 0) ?? "voltro_", B = Pn ? _r(T) : void 0, V = B ? Dr({ flush: Or(B) }) : void 0;
|
|
1519
1530
|
V && Gr(() => V.shutdown());
|
|
1520
1531
|
let In = B ? Er(B, {
|
|
1521
1532
|
prefix: Fn,
|
|
1522
1533
|
...V ? { usage: V } : {}
|
|
1523
|
-
}) : void 0, Ln = In ? [br(In, { prefix: Fn })] : [], Rn =
|
|
1524
|
-
analyticsLayer:
|
|
1525
|
-
cacheService:
|
|
1526
|
-
kvService:
|
|
1527
|
-
...
|
|
1534
|
+
}) : void 0, Ln = In ? [br(In, { prefix: Fn })] : [], Rn = xt([...m?.auth?.strategies ?? [], ...Ln], wi(m?.plugins ?? []), m?.auth?.anonymousTenantRequired ?? !1, m?.auth, () => We), zn = [...m?.restRoutes ?? [], ...In ? sr(In, (typeof Pn == "object" ? Pn.managementPath : void 0) ?? "/v1/api-keys") : []], Bn = O(m?.idempotency, T), Vn = A.map((e) => e.services).filter((e) => e !== void 0), Hn = U.mergeAll(Re({
|
|
1535
|
+
analyticsLayer: Fe.layer,
|
|
1536
|
+
cacheService: Ke,
|
|
1537
|
+
kvService: Tt,
|
|
1538
|
+
...ut === void 0 ? {} : { semanticCache: ut },
|
|
1528
1539
|
pluginServices: Vn,
|
|
1529
|
-
userLayers:
|
|
1530
|
-
}),
|
|
1531
|
-
files:
|
|
1532
|
-
store:
|
|
1540
|
+
userLayers: m?.layers ?? []
|
|
1541
|
+
}), it(m?.http ?? {})), W = await at({
|
|
1542
|
+
files: v,
|
|
1543
|
+
store: T,
|
|
1533
1544
|
log: $,
|
|
1534
1545
|
seedPolicy: "report",
|
|
1535
|
-
seedPattern:
|
|
1536
|
-
loadSeedFiles:
|
|
1537
|
-
startupPattern:
|
|
1546
|
+
seedPattern: un,
|
|
1547
|
+
loadSeedFiles: qt,
|
|
1548
|
+
startupPattern: an,
|
|
1538
1549
|
loadStartupFiles: a,
|
|
1539
1550
|
runStartups: o,
|
|
1540
|
-
emailPattern:
|
|
1541
|
-
loadEmailFiles:
|
|
1551
|
+
emailPattern: ze,
|
|
1552
|
+
loadEmailFiles: ht,
|
|
1542
1553
|
registerEmailTemplates: Ti
|
|
1543
1554
|
});
|
|
1544
1555
|
(W.startupCount > 0 || W.emailCount > 0) && $.info("boot lifecycle", {
|
|
@@ -1546,30 +1557,30 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1546
1557
|
emailTemplates: W.emailCount
|
|
1547
1558
|
}), W.startups !== void 0 && Gr(async () => {
|
|
1548
1559
|
await W.startups.stop();
|
|
1549
|
-
}),
|
|
1550
|
-
demands:
|
|
1560
|
+
}), oe({
|
|
1561
|
+
demands: ue(de),
|
|
1551
1562
|
isRegistered: (e) => xr(e) !== void 0
|
|
1552
1563
|
});
|
|
1553
|
-
let Xn =
|
|
1554
|
-
schedules:
|
|
1555
|
-
schedules:
|
|
1564
|
+
let Xn = pt({
|
|
1565
|
+
schedules: Ct({
|
|
1566
|
+
schedules: y.schedules,
|
|
1556
1567
|
seeds: W.seeds,
|
|
1557
|
-
store:
|
|
1568
|
+
store: T,
|
|
1558
1569
|
log: $.child("seeds")
|
|
1559
1570
|
}),
|
|
1560
|
-
workflows:
|
|
1571
|
+
workflows: y.workflows ?? [],
|
|
1561
1572
|
log: $.child("workflow-schedules")
|
|
1562
|
-
}), Qn =
|
|
1573
|
+
}), Qn = m?.scheduling ?? {}, G = Qn.trigger ?? "self", tr = /* @__PURE__ */ new Set([
|
|
1563
1574
|
"postgres",
|
|
1564
1575
|
"mysql",
|
|
1565
1576
|
"mariadb",
|
|
1566
1577
|
"mssql"
|
|
1567
|
-
]), nr = Qn.coordination ?? (tr.has(
|
|
1568
|
-
nr === "cluster" && !K && $.warn("scheduling.coordination=cluster needs a sql-backed store except sqlite — falling back to single"), nr === "advisoryLock" && !tr.has(
|
|
1569
|
-
let ir, ar =
|
|
1578
|
+
]), nr = Qn.coordination ?? (tr.has(_) ? "advisoryLock" : "single"), K = nr === "cluster" && tr.has(_), rr = K ? "cluster" : nr === "advisoryLock" && tr.has(_) ? "advisoryLock" : "single";
|
|
1579
|
+
nr === "cluster" && !K && $.warn("scheduling.coordination=cluster needs a sql-backed store except sqlite — falling back to single"), nr === "advisoryLock" && !tr.has(_) && $.warn("scheduling.coordination=advisoryLock needs a SQL store (the claim-row gate) — falling back to single");
|
|
1580
|
+
let ir, ar = y.workflows.length > 0 || y.workflowWorkers.length > 0 || y.eventTriggers.length > 0 || (Ee?.outgoing.length ?? 0) > 0 || K, or;
|
|
1570
1581
|
if (ar) {
|
|
1571
|
-
if (
|
|
1572
|
-
let e = await
|
|
1582
|
+
if (_ === "mssql") {
|
|
1583
|
+
let e = await pn(process.cwd());
|
|
1573
1584
|
e && $.warn(e);
|
|
1574
1585
|
}
|
|
1575
1586
|
let [{ WorkflowEngine: e }, { makeClusterCronLayer: t, workflowEngineLayer: n, resolveRunnerStorage: r, resolveFailoverTuning: i }] = await Promise.all([import("@effect/workflow"), import("@voltro/workflow/cluster")]), a = K ? Xn.filter((e) => (e.trigger ?? G) === "self").map((e) => t({
|
|
@@ -1579,10 +1590,10 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1579
1590
|
await ir?.fireFromCluster(e.name);
|
|
1580
1591
|
}
|
|
1581
1592
|
})) : [];
|
|
1582
|
-
or =
|
|
1583
|
-
let e = await
|
|
1593
|
+
or = _ === "memory" ? e.layerMemory : await (async () => {
|
|
1594
|
+
let e = await P(_), t = r({ sqliteFamily: e.id === "sqlite" || e.id === "turso" });
|
|
1584
1595
|
return $.info(`workflow engine: cluster-${t}, dialect=${e.id}` + (t === "memory" ? " — single-process durable replay, no cross-pod shard handoff" + (e.id !== "sqlite" && e.id !== "turso" ? " (VOLTRO_WORKFLOW_RUNNER_STORAGE=memory: SqlRunnerStorage/cluster_runners + GET_LOCK skipped)" : "") : "")), n({
|
|
1585
|
-
sqlClientLayer: e.makeSqlLayer(
|
|
1596
|
+
sqlClientLayer: e.makeSqlLayer(k()),
|
|
1586
1597
|
runnerStorage: t,
|
|
1587
1598
|
dialectId: e.id,
|
|
1588
1599
|
...process.env.VOLTRO_WORKFLOW_RUNNER_PORT ? { runnerListenPort: Number(process.env.VOLTRO_WORKFLOW_RUNNER_PORT) } : {},
|
|
@@ -1591,58 +1602,58 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1591
1602
|
});
|
|
1592
1603
|
})();
|
|
1593
1604
|
}
|
|
1594
|
-
let lr =
|
|
1595
|
-
if (hr.length > 0 &&
|
|
1596
|
-
let e = (await
|
|
1597
|
-
Sr =
|
|
1605
|
+
let lr = ce(A, vn()), ur = v.filter((e) => /\.subscribe\.tsx?$/.test(e)), dr = ur.length > 0 ? await ye(ur, $) : [], fr = v.filter((e) => /\.reaction\.tsx?$/.test(e)), q = fr.length > 0 ? await b(fr, $) : [], pr = v.filter((e) => cn.test(e)), J = pr.length > 0 ? await Pe(pr, $) : [], mr = v.filter((e) => /\.aggregate\.tsx?$/.test(e)), hr = mr.length > 0 ? await te(mr, $) : [], Sr = he();
|
|
1606
|
+
if (hr.length > 0 && _ !== "memory") try {
|
|
1607
|
+
let e = (await P(_)).makeSqlLayer(k());
|
|
1608
|
+
Sr = lt(e);
|
|
1598
1609
|
} catch (e) {
|
|
1599
1610
|
$.warn("aggregate: SQL storage init failed — falling back to in-process", { err: String(e) });
|
|
1600
1611
|
}
|
|
1601
|
-
let Cr =
|
|
1612
|
+
let Cr = _ === "memory" ? ei : Tr(T, `aggregate@${process.pid}`, $), wr = v.filter((e) => ln.test(e)), Ar = wr.length > 0 ? await f(wr, $) : [], Mr = v.filter((e) => sn.test(e)), Nr = Mr.length > 0 ? await Ce(Mr, $) : [], Pr = v.filter((e) => on.test(e)), Fr = Pr.length > 0 ? await Nt(Pr, $) : [], Ir = [], Lr = [], Rr = v.filter((e) => en.test(e));
|
|
1602
1613
|
if (Rr.length > 0) {
|
|
1603
|
-
let e = $.child("agent"), t =
|
|
1604
|
-
t.length > 0 && await
|
|
1605
|
-
let n = await
|
|
1606
|
-
for (let e of n.agents) for (let t of
|
|
1614
|
+
let e = $.child("agent"), t = v.filter((e) => Qt.test(e));
|
|
1615
|
+
t.length > 0 && await rn(t, e);
|
|
1616
|
+
let n = await Xt(Rr, e);
|
|
1617
|
+
for (let e of n.agents) for (let t of Je(e)) (t.kind === "action" ? Ir : Lr).push({
|
|
1607
1618
|
file: t.file,
|
|
1608
1619
|
descriptor: t.descriptor,
|
|
1609
1620
|
executor: t.executor
|
|
1610
1621
|
});
|
|
1611
1622
|
n.agents.length > 0 && e.info("synthesized agent routes", { agents: n.agents.map((e) => e.descriptor.name) });
|
|
1612
1623
|
}
|
|
1613
|
-
|
|
1624
|
+
u.mark("workflow");
|
|
1614
1625
|
let Y = () => {
|
|
1615
1626
|
let e = X.workflowWriteActions();
|
|
1616
1627
|
if (e === void 0) throw Error("workflow actions: this app registers no workflows");
|
|
1617
1628
|
return e;
|
|
1618
1629
|
}, zr = $n({
|
|
1619
|
-
dialect:
|
|
1620
|
-
...
|
|
1621
|
-
}), Vr =
|
|
1630
|
+
dialect: _,
|
|
1631
|
+
...k()
|
|
1632
|
+
}), Vr = _ === "memory" ? void 0 : (await P(_)).makeSqlLayer(k()), Hr = async () => Ot({
|
|
1622
1633
|
sqlLayer: Vr,
|
|
1623
|
-
declared:
|
|
1634
|
+
declared: C,
|
|
1624
1635
|
log: $
|
|
1625
1636
|
}), Ur = {
|
|
1626
1637
|
kind: "api",
|
|
1627
1638
|
meta: {
|
|
1628
|
-
name:
|
|
1629
|
-
voltroVersion:
|
|
1630
|
-
port:
|
|
1639
|
+
name: m?.name ?? "voltro-api",
|
|
1640
|
+
voltroVersion: Et,
|
|
1641
|
+
port: g,
|
|
1631
1642
|
mode: "start",
|
|
1632
|
-
store:
|
|
1633
|
-
cdc:
|
|
1643
|
+
store: _,
|
|
1644
|
+
cdc: re ? "on" : "off",
|
|
1634
1645
|
...zr === void 0 ? {} : { databaseId: zr }
|
|
1635
1646
|
},
|
|
1636
|
-
rpc:
|
|
1637
|
-
workflows:
|
|
1647
|
+
rpc: $e(y, d),
|
|
1648
|
+
workflows: Le(y, d),
|
|
1638
1649
|
migrations: Hr,
|
|
1639
1650
|
events: () => X.eventsSnapshot(),
|
|
1640
1651
|
agentTools: () => X.agentTools(),
|
|
1641
1652
|
invariantChecks: () => ({
|
|
1642
1653
|
mode: "serve",
|
|
1643
|
-
accessGate:
|
|
1644
|
-
config:
|
|
1645
|
-
serverOnlyLeaks:
|
|
1654
|
+
accessGate: de,
|
|
1655
|
+
config: m,
|
|
1656
|
+
serverOnlyLeaks: y.serverOnlyLeaks,
|
|
1646
1657
|
migrations: Hr
|
|
1647
1658
|
}),
|
|
1648
1659
|
members: () => X.membersSnapshot(),
|
|
@@ -1650,52 +1661,52 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1650
1661
|
if (!ir) throw Error("scheduler not started — this app registers no self-triggered schedules (all schedules are trigger:'external', or there are none).");
|
|
1651
1662
|
return { runId: await ir.fireNow(e, t) ?? null };
|
|
1652
1663
|
},
|
|
1653
|
-
inspectBackfillSchedule:
|
|
1664
|
+
inspectBackfillSchedule: ne({
|
|
1654
1665
|
getHandle: () => ir,
|
|
1655
1666
|
getSchedules: () => Xn
|
|
1656
1667
|
}),
|
|
1657
|
-
...
|
|
1658
|
-
store:
|
|
1659
|
-
discoveredWebhooks:
|
|
1668
|
+
...Ee === void 0 ? {} : { webhooks: () => me({
|
|
1669
|
+
store: T,
|
|
1670
|
+
discoveredWebhooks: Ee
|
|
1660
1671
|
}) },
|
|
1661
1672
|
plugins: () => ({
|
|
1662
1673
|
plugins: An.snapshot(),
|
|
1663
1674
|
capturedAt: Date.now()
|
|
1664
1675
|
}),
|
|
1665
|
-
env: () =>
|
|
1666
|
-
...
|
|
1667
|
-
plugins:
|
|
1676
|
+
env: () => N(m?.name ?? Cn(d), {
|
|
1677
|
+
...m?.env !== void 0 && mi(m.env) ? { contract: m.env } : {},
|
|
1678
|
+
plugins: m?.plugins ?? []
|
|
1668
1679
|
}),
|
|
1669
|
-
dataCache: () =>
|
|
1670
|
-
stats:
|
|
1671
|
-
backendKind:
|
|
1680
|
+
dataCache: () => Be({
|
|
1681
|
+
stats: bt,
|
|
1682
|
+
backendKind: yt
|
|
1672
1683
|
}),
|
|
1673
|
-
subscriptions: () =>
|
|
1674
|
-
inspectTables: () =>
|
|
1675
|
-
inspectRows:
|
|
1676
|
-
store:
|
|
1677
|
-
tables:
|
|
1684
|
+
subscriptions: () => Pt(() => z),
|
|
1685
|
+
inspectTables: () => le(y.tables),
|
|
1686
|
+
inspectRows: be({
|
|
1687
|
+
store: T,
|
|
1688
|
+
tables: y.tables,
|
|
1678
1689
|
mask: !0
|
|
1679
1690
|
}),
|
|
1680
1691
|
metrics: (e) => X.rpcMetrics().snapshot(e),
|
|
1681
|
-
cluster: () =>
|
|
1682
|
-
store:
|
|
1683
|
-
dialect:
|
|
1692
|
+
cluster: () => Lt({
|
|
1693
|
+
store: T,
|
|
1694
|
+
dialect: _,
|
|
1684
1695
|
useClusterCron: K,
|
|
1685
1696
|
scheduleCoordChoice: nr
|
|
1686
1697
|
}),
|
|
1687
|
-
inspectSchedules: () =>
|
|
1698
|
+
inspectSchedules: () => we({
|
|
1688
1699
|
schedules: Xn,
|
|
1689
1700
|
defaultTrigger: G,
|
|
1690
1701
|
coordination: rr
|
|
1691
1702
|
}),
|
|
1692
|
-
inspectScheduleRuns: (e) =>
|
|
1693
|
-
...
|
|
1694
|
-
controls:
|
|
1695
|
-
active: (
|
|
1703
|
+
inspectScheduleRuns: (e) => M(T, e),
|
|
1704
|
+
...ee(T, {
|
|
1705
|
+
controls: D(y.workflows ?? []),
|
|
1706
|
+
active: (y.workflows?.length ?? 0) > 0,
|
|
1696
1707
|
cancellation: () => X.flowControlHealth()
|
|
1697
1708
|
}),
|
|
1698
|
-
webhookActions:
|
|
1709
|
+
webhookActions: xe(() => X.webhooksService()),
|
|
1699
1710
|
inspectStartWorkflow: (e) => Y().inspectStartWorkflow(e),
|
|
1700
1711
|
inspectCancelWorkflowRun: (e) => Y().inspectCancelWorkflowRun(e),
|
|
1701
1712
|
inspectSuspendWorkflowRun: (e) => Y().inspectSuspendWorkflowRun(e),
|
|
@@ -1704,13 +1715,13 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1704
1715
|
inspectRetryWorkflowRun: (e) => Y().inspectRetryWorkflowRun(e),
|
|
1705
1716
|
inspectSignalWorkflowRun: (e) => Y().inspectSignalWorkflowRun(e),
|
|
1706
1717
|
inspectUpdateWorkflowRun: (e) => Y().inspectUpdateWorkflowRun(e),
|
|
1707
|
-
inspectInferences: (e) =>
|
|
1708
|
-
store:
|
|
1709
|
-
active: (
|
|
1718
|
+
inspectInferences: (e) => Ze({
|
|
1719
|
+
store: T,
|
|
1720
|
+
active: (y.workflows?.length ?? 0) > 0,
|
|
1710
1721
|
dispatcher: () => X.inferenceHealth()
|
|
1711
1722
|
}, e.limit === void 0 ? {} : { limit: e.limit }),
|
|
1712
|
-
...
|
|
1713
|
-
store:
|
|
1723
|
+
...vt({
|
|
1724
|
+
store: T,
|
|
1714
1725
|
cancelRun: async (e) => await X.runCanceller()?.(e) ?? !1,
|
|
1715
1726
|
retryRun: async (e) => Y().inspectRetryWorkflowRun({ runId: e }),
|
|
1716
1727
|
redriveRun: async (e) => X.redriveWorkflowRun({ runId: e }),
|
|
@@ -1718,22 +1729,22 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1718
1729
|
}),
|
|
1719
1730
|
inspectRedriveWorkflowRun: (e) => X.redriveWorkflowRun(e),
|
|
1720
1731
|
inspectResumeWorkflowRunFromStep: (e) => X.resumeWorkflowRunFromStep(e)
|
|
1721
|
-
}, Wr = (process.env.VOLTRO_TENANT_ISOLATION ??
|
|
1722
|
-
let e = await
|
|
1723
|
-
return
|
|
1724
|
-
tables:
|
|
1725
|
-
sqlLayer: e.makeSqlLayer(
|
|
1726
|
-
dialect:
|
|
1732
|
+
}, Wr = (process.env.VOLTRO_TENANT_ISOLATION ?? m?.tenancy?.isolation) === "namespace", Kr = Wr && _ !== "memory" ? await (async () => {
|
|
1733
|
+
let e = await P(_);
|
|
1734
|
+
return E({
|
|
1735
|
+
tables: C,
|
|
1736
|
+
sqlLayer: e.makeSqlLayer(k()),
|
|
1737
|
+
dialect: _,
|
|
1727
1738
|
options: { retryFilter: e.retryFilter },
|
|
1728
1739
|
log: {
|
|
1729
1740
|
info: (e, t) => $.info(e, t),
|
|
1730
1741
|
error: (e, t, n) => $.error(e, t ?? {}, n)
|
|
1731
1742
|
}
|
|
1732
1743
|
});
|
|
1733
|
-
})() : void 0, qr = await
|
|
1734
|
-
input:
|
|
1744
|
+
})() : void 0, qr = await dt({
|
|
1745
|
+
input: m?.tenancy?.residency,
|
|
1735
1746
|
namespaceIsolationOn: Wr,
|
|
1736
|
-
makeStoreForUrl: (e, t) =>
|
|
1747
|
+
makeStoreForUrl: (e, t) => rt(m, void 0, Wt(k(), t)),
|
|
1737
1748
|
log: {
|
|
1738
1749
|
info: (e, t) => $.info(e, t),
|
|
1739
1750
|
warn: (e, t) => $.warn(e, t)
|
|
@@ -1743,97 +1754,97 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1743
1754
|
await qr.close();
|
|
1744
1755
|
});
|
|
1745
1756
|
let X = await ua({
|
|
1746
|
-
bootTiming:
|
|
1757
|
+
bootTiming: u,
|
|
1747
1758
|
broadcastNamespace: L,
|
|
1748
1759
|
scheduling: (() => {
|
|
1749
|
-
let e =
|
|
1760
|
+
let e = hn;
|
|
1750
1761
|
return {
|
|
1751
1762
|
admissionDrainMs: e.admissionDrainMs,
|
|
1752
1763
|
inferenceTickMs: e.inferenceTickMs,
|
|
1753
1764
|
cancelSweepMs: e.cancelSweepMs,
|
|
1754
1765
|
stalenessSweepMs: e.stalenessSweepMs,
|
|
1755
|
-
disarmWhenIdle:
|
|
1756
|
-
changeScope:
|
|
1766
|
+
disarmWhenIdle: et({
|
|
1767
|
+
changeScope: T.changeScope,
|
|
1757
1768
|
broadcastAttached: Nn !== void 0
|
|
1758
1769
|
})
|
|
1759
1770
|
};
|
|
1760
1771
|
})(),
|
|
1761
|
-
...
|
|
1762
|
-
...
|
|
1763
|
-
workflowRecording:
|
|
1772
|
+
...m?.workflows?.staleness === void 0 ? {} : { workflowStaleness: m.workflows.staleness },
|
|
1773
|
+
...m?.workflows?.suspendSignalHintMs === void 0 ? {} : { workflowSuspendSignalHintMs: m.workflows.suspendSignalHintMs },
|
|
1774
|
+
workflowRecording: j(m?.workflows?.recording),
|
|
1764
1775
|
membership: {
|
|
1765
1776
|
...On,
|
|
1766
|
-
instanceId:
|
|
1777
|
+
instanceId: I
|
|
1767
1778
|
},
|
|
1768
1779
|
security: {
|
|
1769
|
-
defaultDeny:
|
|
1770
|
-
...
|
|
1780
|
+
defaultDeny: Oe(m),
|
|
1781
|
+
..._e(m)
|
|
1771
1782
|
},
|
|
1772
|
-
approvals: { defaultExpiryMs:
|
|
1773
|
-
...
|
|
1783
|
+
approvals: { defaultExpiryMs: Ne(m) },
|
|
1784
|
+
...m?.plugins === void 0 ? {} : { plugins: m.plugins },
|
|
1774
1785
|
...Bn ? { idempotency: Bn } : {},
|
|
1775
1786
|
restRoutes: zn,
|
|
1776
|
-
appProcedures:
|
|
1787
|
+
appProcedures: de,
|
|
1777
1788
|
discovered: {
|
|
1778
|
-
queries: [...
|
|
1779
|
-
mutations:
|
|
1780
|
-
actions: [...
|
|
1781
|
-
streams:
|
|
1782
|
-
events:
|
|
1783
|
-
workflows:
|
|
1784
|
-
workflowWorkers:
|
|
1785
|
-
eventTriggers:
|
|
1789
|
+
queries: [...y.queries, ...Lr],
|
|
1790
|
+
mutations: y.mutations,
|
|
1791
|
+
actions: [...y.actions, ...Ir],
|
|
1792
|
+
streams: y.streams,
|
|
1793
|
+
events: y.events,
|
|
1794
|
+
workflows: y.workflows,
|
|
1795
|
+
workflowWorkers: y.workflowWorkers,
|
|
1796
|
+
eventTriggers: y.eventTriggers,
|
|
1786
1797
|
schedules: Xn,
|
|
1787
1798
|
subscribers: dr,
|
|
1788
1799
|
outboxHandlers: J,
|
|
1789
|
-
connections:
|
|
1800
|
+
connections: y.connections,
|
|
1790
1801
|
reactions: q,
|
|
1791
1802
|
aggregates: hr,
|
|
1792
1803
|
expectations: Ar,
|
|
1793
1804
|
budgets: Nr,
|
|
1794
1805
|
experiments: Fr,
|
|
1795
|
-
...
|
|
1806
|
+
...Ee === void 0 ? {} : { webhooks: Ee }
|
|
1796
1807
|
},
|
|
1797
1808
|
log: $,
|
|
1798
|
-
analytics:
|
|
1809
|
+
analytics: Fe.sink,
|
|
1799
1810
|
aggregateStorage: Sr,
|
|
1800
1811
|
aggregateCoordinator: Cr,
|
|
1801
|
-
store:
|
|
1802
|
-
kv:
|
|
1803
|
-
cache:
|
|
1804
|
-
snapshotCache:
|
|
1805
|
-
...
|
|
1806
|
-
schemaRegistry:
|
|
1807
|
-
tenantScopedTables:
|
|
1808
|
-
softDeleteScopedTables:
|
|
1809
|
-
dataTransferSnapshot: Kn(
|
|
1810
|
-
dataTransferDialect:
|
|
1812
|
+
store: T,
|
|
1813
|
+
kv: wt,
|
|
1814
|
+
cache: st,
|
|
1815
|
+
snapshotCache: ot,
|
|
1816
|
+
...m?.reactive === void 0 ? {} : { reactive: m.reactive },
|
|
1817
|
+
schemaRegistry: He,
|
|
1818
|
+
tenantScopedTables: y.tenantScopedTables,
|
|
1819
|
+
softDeleteScopedTables: y.softDeleteScopedTables,
|
|
1820
|
+
dataTransferSnapshot: Kn(C, _),
|
|
1821
|
+
dataTransferDialect: _,
|
|
1811
1822
|
...Kr === void 0 ? {} : { ensureTenantProvisioned: Kr.ensure },
|
|
1812
1823
|
...qr === void 0 ? {} : { resolveResidentStore: qr.resolveStore },
|
|
1813
|
-
tenantIsolation: (process.env.VOLTRO_TENANT_ISOLATION ??
|
|
1824
|
+
tenantIsolation: (process.env.VOLTRO_TENANT_ISOLATION ?? m?.tenancy?.isolation) === "namespace" ? "namespace" : "shared-schema",
|
|
1814
1825
|
resolveSubject: (e, t) => Rn({
|
|
1815
1826
|
headers: e,
|
|
1816
1827
|
clientId: t
|
|
1817
1828
|
}),
|
|
1818
|
-
...
|
|
1819
|
-
...
|
|
1820
|
-
httpRoutes:
|
|
1821
|
-
getStore: () =>
|
|
1829
|
+
...m?.auth === void 0 ? {} : { authority: m.auth },
|
|
1830
|
+
...m?.agents === void 0 ? {} : { agents: m.agents },
|
|
1831
|
+
httpRoutes: A.flatMap((e) => e.httpRoutes ?? []),
|
|
1832
|
+
getStore: () => We,
|
|
1822
1833
|
...Hn ? { baseLayer: Hn } : {},
|
|
1823
1834
|
...or === void 0 ? {} : { workflowEngineLayer: or },
|
|
1824
1835
|
scheduleDefaultTrigger: G,
|
|
1825
1836
|
scheduleCoordination: rr,
|
|
1826
1837
|
scheduleArmSelf: !K,
|
|
1827
|
-
dormancy: process.env.VOLTRO_DORMANCY === "sleep" || process.env.VOLTRO_DORMANCY === "always-on" ? process.env.VOLTRO_DORMANCY :
|
|
1838
|
+
dormancy: process.env.VOLTRO_DORMANCY === "sleep" || process.env.VOLTRO_DORMANCY === "always-on" ? process.env.VOLTRO_DORMANCY : m?.dormancy ?? "always-on",
|
|
1828
1839
|
scheduleReplicaId: process.env.HOSTNAME ?? `pid-${process.pid}`,
|
|
1829
1840
|
...lr === void 0 ? {} : { scheduleFireInterceptor: lr },
|
|
1830
1841
|
onSchedulerReady: (e) => {
|
|
1831
1842
|
ir = e;
|
|
1832
1843
|
},
|
|
1833
|
-
inspectRoute: { handle: async (e, t, n, r) => await
|
|
1844
|
+
inspectRoute: { handle: async (e, t, n, r) => await p(e, Ur, t, {
|
|
1834
1845
|
method: n,
|
|
1835
1846
|
...r === void 0 ? {} : { body: r }
|
|
1836
|
-
}) || ((n === "GET" ? await
|
|
1847
|
+
}) || ((n === "GET" ? await fn(e, Ur, t, { method: n }) : null) ?? dn(e, Ur, t, {
|
|
1837
1848
|
method: n,
|
|
1838
1849
|
...r === void 0 ? {} : { body: r }
|
|
1839
1850
|
}) ?? {
|
|
@@ -1841,36 +1852,36 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1841
1852
|
contentType: "application/json",
|
|
1842
1853
|
body: JSON.stringify({ error: "not an inspect route" })
|
|
1843
1854
|
}) },
|
|
1844
|
-
...
|
|
1855
|
+
...m?.name === void 0 ? {} : { appName: m.name },
|
|
1845
1856
|
observability: jn,
|
|
1846
|
-
port:
|
|
1847
|
-
...
|
|
1857
|
+
port: g,
|
|
1858
|
+
...m?.transport?.wsPath ? { path: m.transport.wsPath } : {}
|
|
1848
1859
|
});
|
|
1849
|
-
return z = X.dispatcher,
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1860
|
+
return z = X.dispatcher, Se(Ft([
|
|
1861
|
+
y.queries,
|
|
1862
|
+
y.mutations,
|
|
1863
|
+
y.actions,
|
|
1864
|
+
y.streams
|
|
1854
1865
|
]), (e) => {
|
|
1855
1866
|
$.warn(e);
|
|
1856
|
-
}), $.info(`API listening on :${
|
|
1857
|
-
dialect:
|
|
1858
|
-
queries:
|
|
1859
|
-
mutations:
|
|
1860
|
-
actions:
|
|
1861
|
-
streams:
|
|
1862
|
-
workflows:
|
|
1863
|
-
workflowWorkers:
|
|
1867
|
+
}), $.info(`API listening on :${g}`, {
|
|
1868
|
+
dialect: _,
|
|
1869
|
+
queries: y.queries.length,
|
|
1870
|
+
mutations: y.mutations.length,
|
|
1871
|
+
actions: y.actions.length,
|
|
1872
|
+
streams: y.streams.length,
|
|
1873
|
+
workflows: y.workflows.length,
|
|
1874
|
+
workflowWorkers: y.workflowWorkers.length,
|
|
1864
1875
|
schedules: Xn.length,
|
|
1865
1876
|
scheduleCoordination: rr
|
|
1866
|
-
}),
|
|
1867
|
-
for (let e of
|
|
1868
|
-
|
|
1877
|
+
}), u.finish($), Gr(async () => {
|
|
1878
|
+
for (let e of Sn) e.stop();
|
|
1879
|
+
jt.stop();
|
|
1869
1880
|
try {
|
|
1870
|
-
await X.close(),
|
|
1871
|
-
mirror:
|
|
1881
|
+
await X.close(), St(), zt?.dispose(), await An.deactivate(), await Nn?.close(), await qe({
|
|
1882
|
+
mirror: Dt,
|
|
1872
1883
|
log: $
|
|
1873
|
-
}), await
|
|
1884
|
+
}), await Fe.dispose(), await T.close?.();
|
|
1874
1885
|
} catch (e) {
|
|
1875
1886
|
console.error("serve: shutdown step failed, exiting anyway:", e);
|
|
1876
1887
|
}
|