@voltro/cli 0.41.0 → 0.43.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +188 -0
- package/dist/apiBuild-B7NgSMhX.js +2 -0
- package/dist/{apiBuild-B_iH24qf.js → apiBuild-DF0f69Gf.js} +2 -2
- package/dist/bin.js +1 -1
- package/dist/{build-DUdi6F_Q.js → build-LC_IJaHL.js} +7 -7
- package/dist/{checkCommand-B2RWrpWi.js → checkCommand-DBpTSK8d.js} +1 -1
- package/dist/{checkCommand-DWL2_PPR.js → checkCommand-DDxwJCja.js} +2 -2
- package/dist/{codegenCommand-DkjoJ30Q.js → codegenCommand-LjxfK4Am.js} +2 -2
- package/dist/{codemodRunner-sFuWDETH.js → codemodRunner-Cnnz4-I7.js} +19 -4
- package/dist/{commands-D0VR1yBB.js → commands-CbQcuWsE.js} +22 -22
- package/dist/{dashboardCommand-Bro7Jwts.js → dashboardCommand-CAHjCe_9.js} +3 -3
- package/dist/{dataCommand-OKC5FscP.js → dataCommand-CrqvbVOv.js} +298 -170
- package/dist/dataProfile-Cm0YVKSy.js +18 -0
- package/dist/{dbCommand-BHRamDsy.js → dbCommand-B237qI-j.js} +361 -361
- package/dist/dbCommand-BvQeKQOb.js +2 -0
- package/dist/{dev-D4l_YOzI.js → dev-B2rZfqxw.js} +2 -2
- package/dist/{dev-DuqBJC7g.js → dev-D0E5x2Ue.js} +1 -1
- package/dist/doctorCommand-CdsctSwg.js +2 -0
- package/dist/{doctorCommand-TmZTAepc.js → doctorCommand-Ct_3BHgd.js} +226 -216
- package/dist/{dormancyCommand-CUKhRmGG.js → dormancyCommand-D1DKnYce.js} +1 -1
- package/dist/{embeddingsCommand-Db-iQM3l.js → embeddingsCommand-1sZRBKlM.js} +1 -1
- package/dist/{envCommand-DQ_URZq9.js → envCommand-7qjlQgLD.js} +2 -2
- package/dist/{evolveCommand-CghRPrGO.js → evolveCommand-D5opB48I.js} +2 -2
- package/dist/index.js +1 -1
- package/dist/{infoCommand-BCs_ZFnl.js → infoCommand-Bs_8RU22.js} +1 -1
- package/dist/{migrate-DLtPv2_D.js → migrate-DN47p2PG.js} +1 -1
- package/dist/{runtimeTrace-jFKvOPBz.js → runtimeTrace-Wmi7V-wN.js} +1 -1
- package/dist/{sdkgen-COQqHB9V.js → sdkgen-DbTFGCjg.js} +1 -1
- package/dist/{serveCommand-Cba_M2Su.js → serveCommand-C8xzYCwa.js} +417 -411
- package/dist/serveCommand-CGNTXafv.js +2 -0
- package/dist/serveEntry.js +1 -1
- package/dist/{start-fifc0xpW.js → start-BAlGcjF5.js} +1 -1
- package/dist/{start-BjcuFME_.js → start-Ds3xyn8R.js} +1 -1
- package/dist/startEntry.js +1 -1
- package/dist/startup.d.ts +1 -1
- package/dist/updateCommand-BvkKlV7D.js +2 -0
- package/dist/{updateCommand-HZQVBU3T.js → updateCommand-CrI9B4d7.js} +1 -1
- package/dist/{webDev-Dk8lFUzf.js → webDev-101csg6Q.js} +2 -2
- package/dist/webDev-BLKBO34K.js +2 -0
- package/dist/{webhooksCommand-D7ZpH7w0.js → webhooksCommand-BXUP5YjW.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/authentication.md +1 -1
- package/templates/agent-docs/cli.md +75 -8
- package/templates/agent-docs/data.md +46 -11
- package/templates/agent-docs/database/migrations.md +1 -1
- package/templates/agent-docs/internationalization.md +2 -2
- package/templates/agent-docs/observability.md +1 -1
- package/templates/agent-docs/plugins/openapi.md +1 -1
- package/templates/agent-docs/plugins/versioning.md +1 -1
- package/templates/agent-docs/plugins/webhooks.md +1 -1
- package/templates/agent-docs/plugins.md +1 -1
- package/templates/agent-docs/routing.md +1 -1
- package/templates/agent-docs/scheduling.md +1 -1
- package/templates/agent-docs/security.md +2 -2
- package/templates/agent-docs/templates/apibackends.md +1 -1
- package/templates/agent-docs/whats-new.md +54 -37
- 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-RM5W5YXk.js +0 -2
- package/dist/dataProfile-dW-PsfLB.js +0 -15
- package/dist/dbCommand-C9iE1pd9.js +0 -2
- package/dist/doctorCommand-Bw3V4L1j.js +0 -2
- package/dist/serveCommand-DRbYK646.js +0 -2
- package/dist/updateCommand-B2alql9k.js +0 -2
- package/dist/webDev-D6QeXw3P.js +0 -2
|
@@ -3,10 +3,10 @@ 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
|
|
6
|
+
import { $ as s, $t as ee, A as c, At as l, B as u, C as te, Ct as d, D as ne, Dt as f, E as re, Et as p, F as ie, Ft as m, G as h, Gt as ae, H as oe, I as se, It as ce, J as le, Jt as g, K as ue, Kt as _, L as de, Lt as fe, M as pe, Mt as v, N as me, Nt as he, O as ge, Ot as _e, P as ve, Pt as ye, Q as be, Qt as xe, R as Se, Rt as y, S as Ce, Sn as we, St as Te, T as Ee, Tt as De, U as Oe, Ut as b, V as ke, Vt as Ae, W as je, Wt as Me, X as Ne, Xt as Pe, Y as Fe, Yt as Ie, Z as Le, Zt as x, _ as Re, _n as ze, _t as S, an as Be, at as C, b as Ve, bn as He, bt as Ue, c as We, cn as w, ct as Ge, dn as Ke, dt as qe, en as Je, et as Ye, f as T, fn as E, ft as Xe, g as Ze, gn as Qe, gt as $e, h as et, ht as tt, i as nt, in as rt, it, j as at, jt as ot, k as st, kt as ct, ln as D, lt, m as ut, mn as dt, mt as O, nn as k, nt as ft, o as A, on as pt, ot as mt, p as ht, pn as gt, pt as _t, q as vt, qt as yt, r as bt, rn as xt, rt as St, sn as Ct, st as wt, t as Tt, tn as Et, tt as Dt, u as Ot, un as kt, ut as At, v as jt, vn as j, vt as M, w as N, wt as Mt, x as Nt, xn as Pt, xt as Ft, y as It, yn as Lt, yt as Rt, zt } from "./dev-B2rZfqxw.js";
|
|
7
7
|
import { n as Bt } from "./cliArgs-D4p8n7EE.js";
|
|
8
8
|
import { r as Vt } from "./appPort-B_HpJ_ck.js";
|
|
9
|
-
import { ht as Ht, pt as P } from "./webDev-
|
|
9
|
+
import { ht as Ht, pt as P } from "./webDev-101csg6Q.js";
|
|
10
10
|
import { r as F } from "./dialectDriver-czCHYpeH.js";
|
|
11
11
|
import { i as Ut, n as Wt } from "./connectionConfig-Bk9IC7D0.js";
|
|
12
12
|
import { c as Gt, n as Kt, o as qt } from "./seedRunner-IdHEprqf.js";
|
|
@@ -16,9 +16,9 @@ import { h as un, o as dn } from "./inspect-B7U7Cl_Z.js";
|
|
|
16
16
|
import { n as fn } from "./mssqlClusterPatch-_4cE_nun.js";
|
|
17
17
|
import { i as pn, n as mn, r as hn, t as gn } from "./webhookDiscovery-CphsQe59.js";
|
|
18
18
|
import { t as _n } from "./inspectMetrics-CfdKLh6t.js";
|
|
19
|
-
import { r as vn, u as yn } from "./apiBuild-
|
|
19
|
+
import { r as vn, u as yn } from "./apiBuild-DF0f69Gf.js";
|
|
20
20
|
import { t as bn } from "./bootTiming-BdyP9nYw.js";
|
|
21
|
-
import { t as xn } from "./dataProfile-
|
|
21
|
+
import { t as xn } from "./dataProfile-Cm0YVKSy.js";
|
|
22
22
|
import { basename as Sn, join as Cn } from "node:path";
|
|
23
23
|
import { existsSync as wn } from "node:fs";
|
|
24
24
|
import { pathToFileURL as Tn } from "node:url";
|
|
@@ -107,8 +107,8 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
107
107
|
}, Hi = (e) => async (t) => {
|
|
108
108
|
let n = Ri(t, e.secret);
|
|
109
109
|
if (n) return n;
|
|
110
|
-
let r = t.headers["x-import-mode"], i = t.headers["x-import-on-conflict"], a = t.headers["x-import-atomic"] === "1" || t.headers["x-import-atomic"] === "true", o = t.headers["x-import-force"] === "1" || t.headers["x-import-force"] === "true", s = t.rawBody.byteLength >= 8 && Buffer.from(t.rawBody.subarray(0, 8)).toString("latin1") === Bi,
|
|
111
|
-
if (
|
|
110
|
+
let r = t.headers["x-import-mode"], i = t.headers["x-import-on-conflict"], a = t.headers["x-import-atomic"] === "1" || t.headers["x-import-atomic"] === "true", o = t.headers["x-import-force"] === "1" || t.headers["x-import-force"] === "true", s = t.headers["x-import-dry-run"] === "1" || t.headers["x-import-dry-run"] === "true", ee = (t.headers["x-import-tables"] ?? "").split(",").map((e) => e.trim()).filter(Boolean), c = t.rawBody.byteLength >= 8 && Buffer.from(t.rawBody.subarray(0, 8)).toString("latin1") === Bi, l, u;
|
|
111
|
+
if (c) l = Vi(t.rawBody), u = "upload";
|
|
112
112
|
else {
|
|
113
113
|
let n;
|
|
114
114
|
try {
|
|
@@ -118,20 +118,22 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
118
118
|
}
|
|
119
119
|
if (typeof n.bundleKey != "string" || !n.bundleKey) return Q(400, { error: "body.bundleKey (string) is required for the storage transport" });
|
|
120
120
|
if (!e.openArchive) return Q(501, { error: "storage transport not configured on this instance" });
|
|
121
|
-
|
|
121
|
+
l = e.openArchive(n.bundleKey), u = "storage";
|
|
122
122
|
}
|
|
123
|
-
let
|
|
123
|
+
let te = await import("node:os"), d = await import("node:fs/promises"), ne = await import("node:path"), f = await d.mkdtemp(ne.join(te.tmpdir(), "voltro-admin-import-"));
|
|
124
124
|
try {
|
|
125
|
-
e.assetSink ? await ki(
|
|
126
|
-
dir:
|
|
125
|
+
e.assetSink ? await ki(l, {
|
|
126
|
+
dir: f,
|
|
127
127
|
blobs: e.assetSink
|
|
128
|
-
}) : await Ai(
|
|
128
|
+
}) : await Ai(l, f);
|
|
129
129
|
let t = await W.runPromiseExit(Ei({
|
|
130
130
|
store: e.store,
|
|
131
|
-
bundleDir:
|
|
131
|
+
bundleDir: f,
|
|
132
132
|
...r ? { mode: r } : {},
|
|
133
133
|
...i ? { onConflict: i } : {},
|
|
134
134
|
...a ? { atomic: a } : {},
|
|
135
|
+
...s ? { dryRun: s } : {},
|
|
136
|
+
...ee.length > 0 ? { tables: ee } : {},
|
|
135
137
|
...e.snapshot ? { targetSnapshot: e.snapshot } : {},
|
|
136
138
|
force: o,
|
|
137
139
|
onWarn: (e) => zi.warn("admin.import", { message: e }),
|
|
@@ -142,7 +144,7 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
142
144
|
if (e && e._tag === "SchemaDriftError") {
|
|
143
145
|
let t = e;
|
|
144
146
|
return zi.warn("admin.import refused (schema drift)", {
|
|
145
|
-
transport:
|
|
147
|
+
transport: u,
|
|
146
148
|
bundle: t.bundleFingerprint.slice(0, 16),
|
|
147
149
|
target: t.targetFingerprint.slice(0, 16)
|
|
148
150
|
}), Q(409, {
|
|
@@ -150,33 +152,37 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
150
152
|
bundleFingerprint: t.bundleFingerprint,
|
|
151
153
|
targetFingerprint: t.targetFingerprint,
|
|
152
154
|
diff: t.diff,
|
|
153
|
-
hint: "
|
|
155
|
+
hint: "each line above would break the load: a table or column the bundle carries that the target cannot take, or a column the target requires that the bundle has no value for. Fix the target schema, re-export against it, or resend with x-import-force: 1 to write anyway."
|
|
154
156
|
});
|
|
155
157
|
}
|
|
156
158
|
throw Error(String(e?.message ?? e ?? "import failed"));
|
|
157
159
|
}
|
|
158
|
-
let n = t.value,
|
|
159
|
-
return zi.info("admin.import", {
|
|
160
|
-
transport:
|
|
160
|
+
let n = t.value, c = n.tables.reduce((e, t) => e + t.rowCount, 0);
|
|
161
|
+
return zi.info(s ? "admin.import (dry run — nothing written)" : "admin.import", {
|
|
162
|
+
transport: u,
|
|
161
163
|
tables: n.tables.length,
|
|
162
|
-
rows:
|
|
164
|
+
rows: c,
|
|
163
165
|
mode: r ?? "upsert",
|
|
164
166
|
atomic: a
|
|
165
167
|
}), Q(200, {
|
|
166
168
|
tables: n.tables.length,
|
|
167
|
-
rows:
|
|
168
|
-
transport:
|
|
169
|
+
rows: c,
|
|
170
|
+
transport: u,
|
|
171
|
+
...s ? {
|
|
172
|
+
dryRun: !0,
|
|
173
|
+
wrote: !1
|
|
174
|
+
} : {}
|
|
169
175
|
});
|
|
170
176
|
} catch (e) {
|
|
171
177
|
return zi.warn("admin.import failed", {
|
|
172
|
-
transport:
|
|
178
|
+
transport: u,
|
|
173
179
|
error: e?.message ?? String(e)
|
|
174
180
|
}), Q(500, {
|
|
175
181
|
error: "import failed",
|
|
176
182
|
message: e?.message ?? String(e)
|
|
177
183
|
});
|
|
178
184
|
} finally {
|
|
179
|
-
await d.rm(
|
|
185
|
+
await d.rm(f, {
|
|
180
186
|
recursive: !0,
|
|
181
187
|
force: !0
|
|
182
188
|
});
|
|
@@ -212,13 +218,13 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
212
218
|
});
|
|
213
219
|
}
|
|
214
220
|
}
|
|
215
|
-
let a = r.consistency === "snapshot" ? "snapshot" : i.consistency ?? "live", o = (typeof r.compression == "string" ? r.compression : void 0) ?? i.compression, s = i.scope ?? Gi(r),
|
|
221
|
+
let a = r.consistency === "snapshot" ? "snapshot" : i.consistency ?? "live", o = (typeof r.compression == "string" ? r.compression : void 0) ?? i.compression, s = i.scope ?? Gi(r), ee = typeof r.bundleKey == "string" && r.bundleKey.length > 0, c = r.assets === !0 && e.assetSource ? { blobs: e.assetSource } : {}, l = await import("node:os"), u = await import("node:fs/promises"), te = await import("node:path"), d = await u.mkdtemp(te.join(l.tmpdir(), "voltro-admin-export-"));
|
|
216
222
|
try {
|
|
217
223
|
let t = await W.runPromise(Ti({
|
|
218
224
|
store: e.store,
|
|
219
225
|
snapshot: e.snapshot,
|
|
220
226
|
dialect: e.dialect,
|
|
221
|
-
outDir:
|
|
227
|
+
outDir: d,
|
|
222
228
|
...i.subset ? { subset: i.subset } : {
|
|
223
229
|
scope: s,
|
|
224
230
|
...e.tenantTables && e.tenantTables.length > 0 ? { tenantTables: e.tenantTables } : {}
|
|
@@ -226,45 +232,45 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
226
232
|
consistency: a,
|
|
227
233
|
...o ? { compression: o } : {},
|
|
228
234
|
...i.masking ? { masking: i.masking } : {}
|
|
229
|
-
})), n = t.tables.reduce((e, t) => e + t.rowCount, 0),
|
|
230
|
-
if (
|
|
235
|
+
})), n = t.tables.reduce((e, t) => e + t.rowCount, 0), l = t.masking?.transformed.length ?? 0;
|
|
236
|
+
if (ee) {
|
|
231
237
|
if (!e.putArchive) return Q(501, { error: "storage transport not configured on this instance" });
|
|
232
238
|
let i = r.bundleKey;
|
|
233
239
|
return await e.putArchive(i, () => wi({
|
|
234
|
-
dir:
|
|
235
|
-
...
|
|
240
|
+
dir: d,
|
|
241
|
+
...c
|
|
236
242
|
})), Ui.info("admin.export", {
|
|
237
243
|
transport: "storage",
|
|
238
244
|
tables: t.tables.length,
|
|
239
245
|
rows: n,
|
|
240
|
-
masked:
|
|
246
|
+
masked: l,
|
|
241
247
|
bundleKey: i
|
|
242
248
|
}), Q(200, {
|
|
243
249
|
bundleKey: i,
|
|
244
250
|
tables: t.tables.length,
|
|
245
251
|
rows: n,
|
|
246
|
-
masked:
|
|
252
|
+
masked: l,
|
|
247
253
|
transport: "storage"
|
|
248
254
|
});
|
|
249
255
|
}
|
|
250
|
-
let
|
|
251
|
-
dir:
|
|
252
|
-
...
|
|
256
|
+
let u = await Wi(wi({
|
|
257
|
+
dir: d,
|
|
258
|
+
...c
|
|
253
259
|
}));
|
|
254
260
|
return Ui.info("admin.export", {
|
|
255
261
|
transport: "download",
|
|
256
262
|
tables: t.tables.length,
|
|
257
263
|
rows: n,
|
|
258
|
-
masked:
|
|
259
|
-
bytes:
|
|
264
|
+
masked: l,
|
|
265
|
+
bytes: u.byteLength
|
|
260
266
|
}), {
|
|
261
267
|
status: 200,
|
|
262
268
|
contentType: "application/octet-stream",
|
|
263
|
-
body:
|
|
269
|
+
body: u,
|
|
264
270
|
headers: {
|
|
265
271
|
"x-export-tables": String(t.tables.length),
|
|
266
272
|
"x-export-rows": String(n),
|
|
267
|
-
"x-export-masked": String(
|
|
273
|
+
"x-export-masked": String(l)
|
|
268
274
|
}
|
|
269
275
|
};
|
|
270
276
|
} catch (e) {
|
|
@@ -273,7 +279,7 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
273
279
|
message: e?.message ?? String(e)
|
|
274
280
|
});
|
|
275
281
|
} finally {
|
|
276
|
-
await
|
|
282
|
+
await u.rm(d, {
|
|
277
283
|
recursive: !0,
|
|
278
284
|
force: !0
|
|
279
285
|
});
|
|
@@ -316,45 +322,45 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
316
322
|
durationMs: e.durationMs,
|
|
317
323
|
rowCount: e.rowCount
|
|
318
324
|
})
|
|
319
|
-
}), i = e.cache ?? Ji, a = e.kv ?? Br, o,
|
|
325
|
+
}), i = e.cache ?? Ji, a = e.kv ?? Br, o, ee = () => void 0, c, te, d, ne, f, re, ce, le = ae({
|
|
320
326
|
store: e.store,
|
|
321
327
|
warn: (e, t) => {
|
|
322
328
|
process.stderr.write(`[workflow] ${e} ${JSON.stringify(t)}\n`);
|
|
323
329
|
}
|
|
324
|
-
}),
|
|
330
|
+
}), ue = le.remember, de = le.resolve, fe = _({
|
|
325
331
|
authority: e.authority,
|
|
326
332
|
getStore: () => e.store
|
|
327
|
-
}),
|
|
328
|
-
if (
|
|
333
|
+
}), v = (e.discovered.workflows?.length ?? 0) > 0 ? kr(() => o) : void 0, he = (e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.eventTriggers?.length ?? 0) > 0, ge = he || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster", _e = e.tenantIsolation === "namespace", ve = (e.log ?? L({ scope: "voltro:serve" })).child("webhooks"), xe, Se, y = e.discovered.webhooks;
|
|
334
|
+
if (y && y.outgoing.length > 0 && e.workflowEngineLayer !== void 0) {
|
|
329
335
|
e.workflowEngineLayer;
|
|
330
|
-
let t =
|
|
336
|
+
let t = w({
|
|
331
337
|
store: e.store,
|
|
332
338
|
schemaRegistry: e.schemaRegistry,
|
|
333
339
|
cache: i,
|
|
334
340
|
kv: a
|
|
335
|
-
}), n =
|
|
336
|
-
|
|
337
|
-
let t =
|
|
341
|
+
}), n = y.outgoing.map((e) => e.descriptor);
|
|
342
|
+
Se = _i.toLayer(mi(t, { events: n })), xe = hi(t, async (e) => {
|
|
343
|
+
let t = d;
|
|
338
344
|
if (t === void 0) {
|
|
339
|
-
|
|
345
|
+
ve.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.", {
|
|
340
346
|
deliveryId: e.deliveryId,
|
|
341
347
|
targetId: e.targetId
|
|
342
348
|
});
|
|
343
349
|
return;
|
|
344
350
|
}
|
|
345
351
|
t.runPromise(_i.execute(e)).catch((t) => {
|
|
346
|
-
|
|
352
|
+
ve.error("deliverWebhook workflow crashed", {
|
|
347
353
|
deliveryId: e.deliveryId,
|
|
348
354
|
targetId: e.targetId
|
|
349
355
|
}, t);
|
|
350
356
|
});
|
|
351
357
|
}, { events: n });
|
|
352
358
|
}
|
|
353
|
-
let
|
|
354
|
-
if (
|
|
359
|
+
let Ce = /* @__PURE__ */ new Map();
|
|
360
|
+
if (y) for (let e of y.incoming) {
|
|
355
361
|
let t = e.descriptor.path ?? gi(e.descriptor.id), n = `VOLTRO_WEBHOOK_SECRET_${e.descriptor.id.toUpperCase().replace(/[^A-Z0-9]/g, "_")}`, r = yi(e.descriptor, {
|
|
356
362
|
resolveSecret: async () => process.env[n] ?? null,
|
|
357
|
-
resolveWorkflows: () =>
|
|
363
|
+
resolveWorkflows: () => v === void 0 ? void 0 : X(v, {
|
|
358
364
|
traceId: `incoming:${e.descriptor.id}`,
|
|
359
365
|
source: `incoming:${e.descriptor.id}`
|
|
360
366
|
}),
|
|
@@ -366,18 +372,18 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
366
372
|
idempotency: e.idempotency,
|
|
367
373
|
durationMs: e.durationMs
|
|
368
374
|
};
|
|
369
|
-
e.status >= 500 ?
|
|
375
|
+
e.status >= 500 ? ve.error("incoming delivery failed", t) : e.status >= 400 ? ve.warn("incoming delivery rejected", t) : ve.info("incoming delivery handled", t);
|
|
370
376
|
}
|
|
371
377
|
});
|
|
372
|
-
|
|
378
|
+
Ce.set(t, { handle: r });
|
|
373
379
|
}
|
|
374
380
|
vr(), Wr((t) => yr(e.store, t.subjectId, t.resourceType, t.resourceId)) || L({ scope: "voltro:serve" }).info("policy guards: using the app-registered tuple source");
|
|
375
|
-
let
|
|
381
|
+
let we = [], Te = [...e.discovered.outboxHandlers ?? [], ...mn((y?.outgoing.length ?? 0) + (y?.incoming.length ?? 0) + (y?.providers.length ?? 0), []) ? [{
|
|
376
382
|
file: "<framework>/webhooks",
|
|
377
383
|
id: "voltro-webhook-emit",
|
|
378
|
-
definition: vi(() =>
|
|
379
|
-
}] : []],
|
|
380
|
-
handlers:
|
|
384
|
+
definition: vi(() => xe)
|
|
385
|
+
}] : []], Ee = Te.length > 0 ? Pe({
|
|
386
|
+
handlers: Te,
|
|
381
387
|
store: e.store,
|
|
382
388
|
log: (e.log ?? L({ scope: "voltro:serve" })).child("outbox"),
|
|
383
389
|
onChange: (t) => e.store.onChange((e) => t({
|
|
@@ -385,9 +391,9 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
385
391
|
op: e.op
|
|
386
392
|
})),
|
|
387
393
|
onShutdown: (e) => {
|
|
388
|
-
|
|
394
|
+
we.push(e);
|
|
389
395
|
}
|
|
390
|
-
}) : void 0,
|
|
396
|
+
}) : void 0, b = g({
|
|
391
397
|
definitions: (e.discovered.connections ?? []).map((e) => e.definition),
|
|
392
398
|
store: e.store,
|
|
393
399
|
publicUrl: yt(e.port ?? 4e3),
|
|
@@ -402,63 +408,63 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
402
408
|
...(e.discovered.streams ?? []).map((e) => e.descriptor.name)
|
|
403
409
|
]
|
|
404
410
|
});
|
|
405
|
-
let
|
|
406
|
-
instanceId:
|
|
407
|
-
namespace:
|
|
411
|
+
let Ae = (e.log ?? L({ scope: "voltro:serve" })).child("events"), Me = e.broadcastNamespace ?? Ze(e.plugins, void 0), Fe = Re(e.plugins, Me, Ae), Ie = e.membership?.instanceId ?? process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, ze = e.membership ?? jt(e.plugins, {
|
|
412
|
+
instanceId: Ie,
|
|
413
|
+
namespace: Me,
|
|
408
414
|
meta: { mode: "serve" },
|
|
409
|
-
logger:
|
|
410
|
-
}),
|
|
415
|
+
logger: Ae
|
|
416
|
+
}), S = pe({
|
|
411
417
|
events: e.discovered.events ?? [],
|
|
412
|
-
origin:
|
|
413
|
-
...
|
|
414
|
-
}),
|
|
418
|
+
origin: Ie,
|
|
419
|
+
...Fe.publishRemote === void 0 ? {} : { publishRemote: Fe.publishRemote }
|
|
420
|
+
}), Be = (e.discovered.events ?? []).length > 0 ? await Fe.attach(S.bus) : null, C = Ct({
|
|
415
421
|
store: e.store,
|
|
416
422
|
schemaRegistry: e.schemaRegistry,
|
|
417
423
|
cache: i,
|
|
418
424
|
kv: a,
|
|
419
|
-
...
|
|
420
|
-
...
|
|
425
|
+
...xe === void 0 ? {} : { webhooksService: xe },
|
|
426
|
+
...v === void 0 ? {} : { workflowsProxy: v },
|
|
421
427
|
eventTriggers: e.discovered.eventTriggers ?? [],
|
|
422
|
-
namespaceIsolationOn:
|
|
428
|
+
namespaceIsolationOn: _e,
|
|
423
429
|
...e.ensureTenantProvisioned === void 0 ? {} : { ensureTenantProvisioned: e.ensureTenantProvisioned },
|
|
424
430
|
...e.resolveResidentStore === void 0 ? {} : { resolveResidentStore: e.resolveResidentStore },
|
|
425
|
-
...
|
|
426
|
-
...
|
|
427
|
-
eventBus:
|
|
428
|
-
}),
|
|
431
|
+
...Ee === void 0 ? {} : { outbox: { nudge: Ee.nudge } },
|
|
432
|
+
...b.active ? { connections: { registry: b.registry } } : {},
|
|
433
|
+
eventBus: S.bus
|
|
434
|
+
}), Ve = G.succeed(Qn, p), He = G.succeed(q, Ue), We = G.succeed($n, Rt), Ke = G.succeed(nr, Ft), Je = (t, n) => {
|
|
429
435
|
let r = t.pipe(W.provide(Or(n)));
|
|
430
|
-
return (e.baseLayer ? r.pipe(W.provide(e.baseLayer)) : r).pipe(W.provide(
|
|
431
|
-
},
|
|
432
|
-
let n =
|
|
436
|
+
return (e.baseLayer ? r.pipe(W.provide(e.baseLayer)) : r).pipe(W.provide(Ve)).pipe(W.provide(He)).pipe(W.provide(We)).pipe(W.provide(Ke));
|
|
437
|
+
}, Ye = (e, t) => {
|
|
438
|
+
let n = Je(e, t);
|
|
433
439
|
return qr(n);
|
|
434
|
-
},
|
|
440
|
+
}, T = _n(), E = vt(e.plugins ?? [], T), Xe = u({
|
|
435
441
|
plugins: e.plugins ?? [],
|
|
436
|
-
metrics:
|
|
442
|
+
metrics: T,
|
|
437
443
|
log: e.log ?? L({ scope: "voltro:serve" })
|
|
438
|
-
}), Qe =
|
|
444
|
+
}), Qe = h(e.plugins ?? [], T), $e = e.security?.defaultDeny ?? !0, et = jr({
|
|
439
445
|
store: e.store,
|
|
440
446
|
defaultDeny: $e,
|
|
441
447
|
recordMetric: (e) => {
|
|
442
|
-
|
|
448
|
+
T.record(e);
|
|
443
449
|
},
|
|
444
450
|
...E.mutation === void 0 ? {} : { interceptor: E.mutation },
|
|
445
|
-
buildContext: (e, t, n) =>
|
|
446
|
-
runEffect:
|
|
447
|
-
undoCapture:
|
|
448
|
-
}), nt =
|
|
451
|
+
buildContext: (e, t, n) => C(e, t, n),
|
|
452
|
+
runEffect: Ye,
|
|
453
|
+
undoCapture: be()
|
|
454
|
+
}), nt = Le();
|
|
449
455
|
{
|
|
450
456
|
let t = s();
|
|
451
457
|
t !== void 0 && (e.log ?? L({ scope: "voltro:serve" })).info(t);
|
|
452
458
|
}
|
|
453
|
-
let rt =
|
|
459
|
+
let rt = Ne({
|
|
454
460
|
store: e.store,
|
|
455
461
|
...e.approvals === void 0 ? {} : { defaultExpiryMs: e.approvals.defaultExpiryMs }
|
|
456
462
|
}), it = br({
|
|
457
463
|
defaultDeny: $e,
|
|
458
|
-
buildContext: (e) =>
|
|
459
|
-
runEffect:
|
|
464
|
+
buildContext: (e) => C(e),
|
|
465
|
+
runEffect: Ye,
|
|
460
466
|
recordMetric: (e) => {
|
|
461
|
-
|
|
467
|
+
T.record(e);
|
|
462
468
|
},
|
|
463
469
|
...E.action === void 0 ? {} : { interceptor: E.action }
|
|
464
470
|
}), st = Pr({
|
|
@@ -466,9 +472,9 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
466
472
|
softDeleteScopedTables: e.softDeleteScopedTables
|
|
467
473
|
}), ct = {
|
|
468
474
|
defaultDeny: $e,
|
|
469
|
-
buildContext: (e) =>
|
|
475
|
+
buildContext: (e) => C(e),
|
|
470
476
|
finalize: (e, t) => st(e, t.subject),
|
|
471
|
-
provideEffect:
|
|
477
|
+
provideEffect: Je,
|
|
472
478
|
...E.query === void 0 ? {} : { interceptor: E.query }
|
|
473
479
|
}, D = Nr(ct), ut = Mr({
|
|
474
480
|
...ct,
|
|
@@ -482,18 +488,18 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
482
488
|
...O(e.discovered.queries),
|
|
483
489
|
...nt.queries,
|
|
484
490
|
...rt.queries,
|
|
485
|
-
...
|
|
491
|
+
...b.queries
|
|
486
492
|
]) k[t.descriptor.name] = (e) => Y(D(t, e), r, `subscription.${t.descriptor.name}`, void 0, void 0, Fr(t, e));
|
|
487
493
|
for (let t of [
|
|
488
494
|
...O(e.discovered.mutations),
|
|
489
495
|
...nt.mutations,
|
|
490
496
|
...rt.mutations,
|
|
491
|
-
...
|
|
497
|
+
...b.mutations
|
|
492
498
|
]) {
|
|
493
499
|
let n = Ar(t.descriptor.output);
|
|
494
500
|
k[t.descriptor.name] = (r) => J(async (e, n) => et(t, e, n), r, `mutation.${t.descriptor.name}`, n, e.idempotency, jn(t.descriptor, "mutation"));
|
|
495
501
|
}
|
|
496
|
-
for (let t of [...O(e.discovered.actions), ...
|
|
502
|
+
for (let t of [...O(e.discovered.actions), ...b.actions]) {
|
|
497
503
|
let n = Ar(t.descriptor.output);
|
|
498
504
|
k[t.descriptor.name] = (r) => J(async (e, n) => it(t, e, n), r, `action.${t.descriptor.name}`, n, e.idempotency, jn(t.descriptor, "action"));
|
|
499
505
|
}
|
|
@@ -524,7 +530,7 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
524
530
|
})
|
|
525
531
|
}))
|
|
526
532
|
], mt = {
|
|
527
|
-
candidates:
|
|
533
|
+
candidates: m({
|
|
528
534
|
queries: e.discovered.queries,
|
|
529
535
|
mutations: e.discovered.mutations,
|
|
530
536
|
actions: e.discovered.actions,
|
|
@@ -573,26 +579,26 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
573
579
|
...e.httpRoutes ?? [],
|
|
574
580
|
...ht.httpRoutes,
|
|
575
581
|
..._t,
|
|
576
|
-
...
|
|
582
|
+
...b.httpRoutes
|
|
577
583
|
];
|
|
578
|
-
Object.assign(k,
|
|
584
|
+
Object.assign(k, S.handlers);
|
|
579
585
|
for (let t of O(e.discovered.streams ?? [])) k[t.descriptor.name] = (n) => lr((r) => ni(r, (r) => {
|
|
580
|
-
let i =
|
|
586
|
+
let i = C(r), a = t.executor(n, i);
|
|
581
587
|
if (W.isEffect(a)) {
|
|
582
588
|
let t = a.pipe(W.provide(Or(i.store)));
|
|
583
|
-
return (e.baseLayer ? t.pipe(W.provide(e.baseLayer)) : t).pipe(W.provide(
|
|
589
|
+
return (e.baseLayer ? t.pipe(W.provide(e.baseLayer)) : t).pipe(W.provide(Ve)).pipe(W.provide(He)).pipe(W.provide(We)).pipe(W.provide(Ke));
|
|
584
590
|
}
|
|
585
591
|
return typeof a == "object" && a && typeof a.then == "function" ? W.promise(() => a) : a;
|
|
586
592
|
}), `stream.${t.descriptor.name}`);
|
|
587
593
|
for (let t of e.discovered.workflows ?? []) k[t.definition.name] = (e) => J(async (e, n) => {
|
|
588
594
|
let r = n;
|
|
589
|
-
return X(
|
|
595
|
+
return X(v, {
|
|
590
596
|
subject: r.subject,
|
|
591
597
|
traceId: r.traceId,
|
|
592
598
|
source: "workflow-rpc"
|
|
593
599
|
}).start(t.definition.name, e);
|
|
594
600
|
}, e, `workflow.${t.definition.name}`);
|
|
595
|
-
|
|
601
|
+
he && (k[U.name] = (e) => Y(D({
|
|
596
602
|
descriptor: U,
|
|
597
603
|
executor: (e) => {
|
|
598
604
|
let t = e.id;
|
|
@@ -690,16 +696,16 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
690
696
|
}
|
|
691
697
|
}, e), r, `subscription.${Nn.name}`), k[Mn.name] = (t) => J(async (t, n) => {
|
|
692
698
|
let r = t;
|
|
693
|
-
return await pt(e.store, n.subject, { executionId: r.executionId }), await
|
|
699
|
+
return await pt(e.store, n.subject, { executionId: r.executionId }), await v.cancel(r.workflowName, r.executionId), await Nt(r.workflowName, r.executionId, "workflow.cancel"), { ok: !0 };
|
|
694
700
|
}, t, `action.${Mn.name}`), k[Pn.name] = (t) => J(async (t, n) => {
|
|
695
701
|
let r = t;
|
|
696
|
-
return await pt(e.store, n.subject, { executionId: r.executionId }), await
|
|
702
|
+
return await pt(e.store, n.subject, { executionId: r.executionId }), await v.resume(r.workflowName, r.executionId), { ok: !0 };
|
|
697
703
|
}, t, `action.${Pn.name}`), k[Ln.name] = (t) => J(async (t, n) => {
|
|
698
704
|
let r = t;
|
|
699
|
-
return await pt(e.store, n.subject, { id: r.id }),
|
|
705
|
+
return await pt(e.store, n.subject, { id: r.id }), v.signal({ id: r.id }, r.signalName, r.payload);
|
|
700
706
|
}, t, `action.${Ln.name}`), k[Rn.name] = (t) => J(async (t, n) => {
|
|
701
707
|
let r = t;
|
|
702
|
-
return await pt(e.store, n.subject, { id: r.id }),
|
|
708
|
+
return await pt(e.store, n.subject, { id: r.id }), v.update({ id: r.id }, r.updateName, r.payload, r.timeoutMs === void 0 ? void 0 : { timeoutMs: r.timeoutMs });
|
|
703
709
|
}, t, `action.${Rn.name}`));
|
|
704
710
|
let St = [
|
|
705
711
|
...O(e.discovered.queries).map((e) => B(e.descriptor)),
|
|
@@ -709,13 +715,13 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
709
715
|
...nt.mutations.map((e) => z(e.descriptor)),
|
|
710
716
|
...rt.queries.map((e) => B(e.descriptor)),
|
|
711
717
|
...rt.mutations.map((e) => z(e.descriptor)),
|
|
712
|
-
...
|
|
713
|
-
...
|
|
714
|
-
...
|
|
718
|
+
...b.queries.map((e) => B(e.descriptor)),
|
|
719
|
+
...b.mutations.map((e) => z(e.descriptor)),
|
|
720
|
+
...b.actions.map((e) => R(e.descriptor)),
|
|
715
721
|
...O(e.discovered.streams ?? []).map((e) => An(e.descriptor)),
|
|
716
|
-
...
|
|
722
|
+
...S.rpcs,
|
|
717
723
|
...(e.discovered.workflows ?? []).map((e) => ri(e.definition)),
|
|
718
|
-
...
|
|
724
|
+
...he ? [
|
|
719
725
|
B(U),
|
|
720
726
|
B(In),
|
|
721
727
|
B(Fn),
|
|
@@ -739,7 +745,7 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
739
745
|
kind: "workflow",
|
|
740
746
|
refId: t
|
|
741
747
|
}).then(() => {})
|
|
742
|
-
} : void 0, M =
|
|
748
|
+
} : void 0, M = ge ? await import("@voltro/workflow") : void 0, N = M?.makeWorkflowRunRecorder({
|
|
743
749
|
store: e.store,
|
|
744
750
|
...e.workflowRecording === void 0 ? {} : { recording: e.workflowRecording },
|
|
745
751
|
...kt === void 0 ? {} : { wakeups: kt }
|
|
@@ -755,8 +761,8 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
755
761
|
interruptChild: async (t, n) => {
|
|
756
762
|
let r = (e.discovered.workflows ?? []).find((e) => e.definition.name === t);
|
|
757
763
|
if (!r) throw Error(`Unknown child workflow: ${t}`);
|
|
758
|
-
if (!
|
|
759
|
-
await
|
|
764
|
+
if (!d) throw Error("Workflow runtime is not ready");
|
|
765
|
+
await d.runPromise(r.definition.interrupt(n));
|
|
760
766
|
}
|
|
761
767
|
});
|
|
762
768
|
}, Nt = async (t, n, r) => {
|
|
@@ -786,12 +792,12 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
786
792
|
}), a && await Mt(n, "cancelled");
|
|
787
793
|
}, Pt = [
|
|
788
794
|
...zr(e.discovered.workflows ?? [], {
|
|
789
|
-
buildContext: (t, n) => e.buildContextForWorkflow?.(t, n) ??
|
|
795
|
+
buildContext: (t, n) => e.buildContextForWorkflow?.(t, n) ?? C({
|
|
790
796
|
subject: t.subject,
|
|
791
797
|
traceId: t.traceId
|
|
792
798
|
}, e.store, void 0, `workflow:${n.workflowName}`, { parentExecutionId: n.executionId }),
|
|
793
|
-
resolveStartContext:
|
|
794
|
-
...
|
|
799
|
+
resolveStartContext: de,
|
|
800
|
+
...fe === void 0 ? {} : { resolveAuthority: fe }
|
|
795
801
|
}, (t, n, r) => {
|
|
796
802
|
let i = M.getWorkflowVersionMetadata(t.definition);
|
|
797
803
|
return M.wrapWorkflowExecuteWithRunRecording({
|
|
@@ -806,9 +812,9 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
806
812
|
parentExecutionId: r?.parentExecutionId ?? null,
|
|
807
813
|
parentClosePolicy: r?.parentClosePolicy ?? null,
|
|
808
814
|
onParentClose: ({ executionId: e, status: t }) => Mt(e, t),
|
|
809
|
-
...
|
|
815
|
+
...Ge(t.definition),
|
|
810
816
|
onTerminal: async ({ executionId: e }) => {
|
|
811
|
-
await
|
|
817
|
+
await te?.gate.release(e);
|
|
812
818
|
},
|
|
813
819
|
recorder: N,
|
|
814
820
|
pluginWorkflowStepLayer: Qe,
|
|
@@ -816,26 +822,26 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
816
822
|
}, n);
|
|
817
823
|
}),
|
|
818
824
|
...e.discovered.workflowWorkers ?? [],
|
|
819
|
-
...
|
|
820
|
-
], It = [...(e.discovered.workflows ?? []).map((e) => e.definition.name).filter(Boolean), ...
|
|
821
|
-
if (((e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster" ||
|
|
825
|
+
...Se === void 0 ? [] : [Se]
|
|
826
|
+
], It = [...(e.discovered.workflows ?? []).map((e) => e.definition.name).filter(Boolean), ...Se === void 0 ? [] : ["voltro.deliverWebhook"]], Lt = Pt.length > 0 ? G.mergeAll(...Pt) : G.empty;
|
|
827
|
+
if (((e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster" || Se !== void 0) && e.workflowEngineLayer !== void 0) {
|
|
822
828
|
let t = Lt.pipe(G.provideMerge(e.workflowEngineLayer));
|
|
823
|
-
|
|
824
|
-
let n = await import("@voltro/workflow/cluster"), r = (e) =>
|
|
825
|
-
|
|
829
|
+
d = Bn.make(e.baseLayer === void 0 ? t : t.pipe(G.provideMerge(e.baseLayer))), await d.runPromise(W.void), (e.log ?? L({ scope: "voltro:serve" })).child("workflow").info(`workflow runtime ready — ${It.length} entity type(s) registered`, { entities: It });
|
|
830
|
+
let n = await import("@voltro/workflow/cluster"), r = (e) => d.runPromise(n.redriveFailedRun(e)), i = (e) => d.runPromise(n.resumeRunFromStep(e));
|
|
831
|
+
re = await j({
|
|
826
832
|
provider: Ci(e.plugins ?? [])?.broadcast?.provider,
|
|
827
833
|
crossReplica: Ci(e.plugins ?? [])?.broadcast?.crossReplica ?? !1,
|
|
828
|
-
namespace:
|
|
834
|
+
namespace: Me,
|
|
829
835
|
replicaId: crypto.randomUUID(),
|
|
830
|
-
pollStorage: () =>
|
|
836
|
+
pollStorage: () => d.runPromise(n.pollWorkflowStorage),
|
|
831
837
|
onChange: (t) => e.store.onChange((e) => t({
|
|
832
838
|
table: e.table,
|
|
833
839
|
op: e.op,
|
|
834
840
|
...e.origin === void 0 ? {} : { origin: e.origin }
|
|
835
841
|
})),
|
|
836
842
|
log: (e.log ?? L({ scope: "voltro:serve" })).child("workflow")
|
|
837
|
-
}),
|
|
838
|
-
let n = await
|
|
843
|
+
}), ne = async (t) => {
|
|
844
|
+
let n = await oe({
|
|
839
845
|
store: e.store,
|
|
840
846
|
workflows: e.discovered.workflows ?? [],
|
|
841
847
|
runRedrive: r
|
|
@@ -852,8 +858,8 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
852
858
|
activitiesReset: n.outcome.activitiesReset,
|
|
853
859
|
reason: n.outcome.reason
|
|
854
860
|
};
|
|
855
|
-
},
|
|
856
|
-
let n = await
|
|
861
|
+
}, f = async (t) => {
|
|
862
|
+
let n = await Oe({
|
|
857
863
|
store: e.store,
|
|
858
864
|
workflows: e.discovered.workflows ?? [],
|
|
859
865
|
runResume: i
|
|
@@ -876,7 +882,7 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
876
882
|
let a = (e.scheduleCoordination ?? "single") === "advisoryLock" ? xr(e.store, e.scheduleReplicaId ?? `pid-${process.pid}`) : Xr, s = Dr({
|
|
877
883
|
coordinator: a,
|
|
878
884
|
replicaId: e.scheduleReplicaId ?? `pid-${process.pid}`
|
|
879
|
-
}),
|
|
885
|
+
}), l = {
|
|
880
886
|
info: (e, t) => {
|
|
881
887
|
process.stdout.write(`[flow-control] ${e} ${t ? JSON.stringify(t) : ""}\n`);
|
|
882
888
|
},
|
|
@@ -886,19 +892,19 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
886
892
|
error: (e, t) => {
|
|
887
893
|
process.stderr.write(`[flow-control] ERROR ${e} ${t ? JSON.stringify(t) : ""}\n`);
|
|
888
894
|
}
|
|
889
|
-
},
|
|
890
|
-
if (
|
|
891
|
-
if (o !== void 0 && N !== void 0) return
|
|
895
|
+
}, u, p = () => {
|
|
896
|
+
if (u !== void 0) return u;
|
|
897
|
+
if (o !== void 0 && N !== void 0) return u = ie({
|
|
892
898
|
store: e.store,
|
|
893
899
|
log: I,
|
|
894
900
|
workflows: e.discovered.workflows ?? [],
|
|
895
901
|
workflowsProxy: o,
|
|
896
|
-
workflowRuntime:
|
|
902
|
+
workflowRuntime: d,
|
|
897
903
|
workflowRunRecorder: N,
|
|
898
904
|
closeChildrenForParent: Mt
|
|
899
|
-
}),
|
|
905
|
+
}), u;
|
|
900
906
|
};
|
|
901
|
-
|
|
907
|
+
ee = p, te = tt({
|
|
902
908
|
store: e.store,
|
|
903
909
|
onChange: (t) => e.store.onChange((e) => t({
|
|
904
910
|
table: e.table,
|
|
@@ -912,7 +918,7 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
912
918
|
},
|
|
913
919
|
workflows: e.discovered.workflows ?? [],
|
|
914
920
|
facade: () => o,
|
|
915
|
-
cancelRunWithReason:
|
|
921
|
+
cancelRunWithReason: p,
|
|
916
922
|
recordRunEvent: () => N?.recordEvent,
|
|
917
923
|
...e.workflowStaleness === void 0 ? {} : { staleness: e.workflowStaleness },
|
|
918
924
|
...e.workflowSuspendSignalHintMs === void 0 ? {} : { suspendSignalHintMs: e.workflowSuspendSignalHintMs },
|
|
@@ -921,14 +927,14 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
921
927
|
await wt({
|
|
922
928
|
workflows: e.discovered.workflows ?? [],
|
|
923
929
|
facade: () => o,
|
|
924
|
-
log:
|
|
930
|
+
log: l,
|
|
925
931
|
...t
|
|
926
932
|
});
|
|
927
933
|
},
|
|
928
|
-
log:
|
|
934
|
+
log: l
|
|
929
935
|
});
|
|
930
|
-
let
|
|
931
|
-
|
|
936
|
+
let m = te;
|
|
937
|
+
m !== void 0 && Vr(() => m.stop()), c = qe({
|
|
932
938
|
store: e.store,
|
|
933
939
|
onChange: (t) => e.store.onChange((e) => t({
|
|
934
940
|
table: e.table,
|
|
@@ -939,29 +945,29 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
939
945
|
tickIntervalMs: e.scheduling.inferenceTickMs
|
|
940
946
|
},
|
|
941
947
|
enabled: (e.discovered.workflows?.length ?? 0) > 0,
|
|
942
|
-
resumeSignal: () =>
|
|
943
|
-
await
|
|
948
|
+
resumeSignal: () => d === void 0 || M === void 0 ? void 0 : async ({ executionId: t, workflowName: n, signalName: r, payload: i }) => {
|
|
949
|
+
await d.runPromise(M.completeSuspendingSignal({
|
|
944
950
|
store: e.store,
|
|
945
951
|
target: At(t, n),
|
|
946
952
|
signalName: r,
|
|
947
953
|
payload: i
|
|
948
954
|
}));
|
|
949
955
|
},
|
|
950
|
-
runEffect: (e) =>
|
|
956
|
+
runEffect: (e) => d.runPromise(e),
|
|
951
957
|
scheduleCoordinated: s,
|
|
952
|
-
log:
|
|
958
|
+
log: l
|
|
953
959
|
});
|
|
954
|
-
let
|
|
955
|
-
|
|
960
|
+
let h = c;
|
|
961
|
+
h !== void 0 && Vr(() => h.stop()), o = (e.discovered.workflows?.length ?? 0) > 0 ? Rr({
|
|
956
962
|
workflows: e.discovered.workflows ?? [],
|
|
957
|
-
runEffect: (e) =>
|
|
958
|
-
onEnqueue: () =>
|
|
959
|
-
...
|
|
960
|
-
admitStart:
|
|
961
|
-
startPayloadSchema:
|
|
962
|
-
parkDelayedStart:
|
|
963
|
+
runEffect: (e) => d.runPromise(e),
|
|
964
|
+
onEnqueue: () => re?.publishWake(),
|
|
965
|
+
...m === void 0 ? {} : {
|
|
966
|
+
admitStart: m.gate.admitStart,
|
|
967
|
+
startPayloadSchema: m.gate.startPayloadSchema,
|
|
968
|
+
parkDelayedStart: m.gate.parkDelayed
|
|
963
969
|
},
|
|
964
|
-
rememberStartContext:
|
|
970
|
+
rememberStartContext: ue,
|
|
965
971
|
signal: async (t, n, r) => {
|
|
966
972
|
let i = await M.sendWorkflowSignal({
|
|
967
973
|
store: e.store,
|
|
@@ -970,7 +976,7 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
970
976
|
signalName: n,
|
|
971
977
|
payload: r
|
|
972
978
|
});
|
|
973
|
-
return await
|
|
979
|
+
return await d.runPromise(M.completeSuspendingSignal({
|
|
974
980
|
store: e.store,
|
|
975
981
|
target: t,
|
|
976
982
|
signalName: n,
|
|
@@ -985,20 +991,20 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
985
991
|
payload: r,
|
|
986
992
|
...i === void 0 ? {} : { options: i }
|
|
987
993
|
}),
|
|
988
|
-
listRuns: (t) =>
|
|
989
|
-
retry: (t, n) =>
|
|
994
|
+
listRuns: (t) => ke(e.store, t),
|
|
995
|
+
retry: (t, n) => je({
|
|
990
996
|
store: e.store,
|
|
991
997
|
workflows: e.discovered.workflows ?? [],
|
|
992
|
-
runPromise: (e) =>
|
|
998
|
+
runPromise: (e) => d.runPromise(e)
|
|
993
999
|
}, t, n),
|
|
994
|
-
redrive: (t) =>
|
|
1000
|
+
redrive: (t) => oe({
|
|
995
1001
|
store: e.store,
|
|
996
1002
|
workflows: e.discovered.workflows ?? [],
|
|
997
1003
|
runRedrive: r
|
|
998
1004
|
}, t).then((e) => e.outcome)
|
|
999
1005
|
}) : void 0;
|
|
1000
1006
|
}
|
|
1001
|
-
let Bt = G.mergeAll(Tt.toLayer(k), Dt), Vt = xt(k, e.discovered.queries.map((e) => e.descriptor.name),
|
|
1007
|
+
let Bt = G.mergeAll(Tt.toLayer(k), Dt), Vt = xt(k, e.discovered.queries.map((e) => e.descriptor.name), he), Ht = G.mergeAll(Tt.toLayer(Vt), Dt), P = e.observability, F = await ur({
|
|
1002
1008
|
...e.appName === void 0 ? {} : { serviceName: e.appName },
|
|
1003
1009
|
...P && P.spanProcessors.length > 0 ? { extraSpanProcessors: P.spanProcessors } : {},
|
|
1004
1010
|
...P && P.metricReaders.length > 0 ? { extraMetricReaders: P.metricReaders } : {},
|
|
@@ -1012,7 +1018,7 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
1012
1018
|
...e.host === void 0 ? {} : { host: e.host },
|
|
1013
1019
|
path: e.path ?? "/ws",
|
|
1014
1020
|
tracerLayer: F.layer,
|
|
1015
|
-
security:
|
|
1021
|
+
security: ye(e),
|
|
1016
1022
|
...Xe,
|
|
1017
1023
|
healthCheck: {
|
|
1018
1024
|
isReady: () => Ut,
|
|
@@ -1020,12 +1026,12 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
1020
1026
|
},
|
|
1021
1027
|
...bt.length > 0 ? { httpRoutes: bt } : {},
|
|
1022
1028
|
...e.getStore === void 0 ? {} : { getStore: e.getStore },
|
|
1023
|
-
...
|
|
1029
|
+
...Ce.size > 0 ? { webhookRoutes: Ce } : {},
|
|
1024
1030
|
...e.inspectRoute === void 0 ? {} : { inspectRoute: e.inspectRoute }
|
|
1025
1031
|
}), qt = Ni(Gt);
|
|
1026
1032
|
if (await cr(Gt), (e.discovered.schedules?.length ?? 0) > 0) {
|
|
1027
1033
|
let t = (e.scheduleCoordination ?? "single") === "advisoryLock" ? xr(e.store, e.scheduleReplicaId ?? `pid-${process.pid}`) : Xr;
|
|
1028
|
-
|
|
1034
|
+
ce = await Qr(e.discovered.schedules ?? [], {
|
|
1029
1035
|
store: e.store,
|
|
1030
1036
|
coordinator: t,
|
|
1031
1037
|
defaultTrigger: e.scheduleDefaultTrigger ?? "self",
|
|
@@ -1033,7 +1039,7 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
1033
1039
|
armSelf: e.scheduleArmSelf ?? !0,
|
|
1034
1040
|
dormancy: e.dormancy ?? "always-on",
|
|
1035
1041
|
...e.dormancyTenantId === void 0 ? {} : { dormancyTenantId: e.dormancyTenantId },
|
|
1036
|
-
buildContext: ({ traceId: t, scheduleName: n, subject: r }) =>
|
|
1042
|
+
buildContext: ({ traceId: t, scheduleName: n, subject: r }) => C({
|
|
1037
1043
|
subject: r,
|
|
1038
1044
|
traceId: t
|
|
1039
1045
|
}, e.store, void 0, `schedule:${n}`),
|
|
@@ -1051,18 +1057,18 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
1051
1057
|
},
|
|
1052
1058
|
...e.scheduleFireInterceptor === void 0 ? {} : { interceptFire: e.scheduleFireInterceptor },
|
|
1053
1059
|
...e.onScheduleRunEvent === void 0 ? {} : { onRunEvent: e.onScheduleRunEvent }
|
|
1054
|
-
}), e.onSchedulerReady?.(
|
|
1060
|
+
}), e.onSchedulerReady?.(ce);
|
|
1055
1061
|
}
|
|
1056
1062
|
let I = e.log ?? L({ scope: "voltro:serve" }), Jt, Yt;
|
|
1057
|
-
if ((e.discovered.subscribers?.length ?? 0) > 0 && (Jt =
|
|
1063
|
+
if ((e.discovered.subscribers?.length ?? 0) > 0 && (Jt = x(e.discovered.subscribers ?? [], e.store, I.child("subscribe"), e.schemaRegistry, S.bus)), (e.discovered.reactions?.length ?? 0) > 0) {
|
|
1058
1064
|
let t = I.child("reaction"), n = async (n, r) => {
|
|
1059
1065
|
if (n.kind === "workflow") {
|
|
1060
|
-
if (
|
|
1066
|
+
if (v === void 0) {
|
|
1061
1067
|
t.warn("reaction workflow act skipped — no workflow engine in this app", { workflow: n.workflow });
|
|
1062
1068
|
return;
|
|
1063
1069
|
}
|
|
1064
1070
|
let e = n.payload === void 0 ? r.new ?? r.old ?? {} : n.payload(r);
|
|
1065
|
-
await X(
|
|
1071
|
+
await X(v, {
|
|
1066
1072
|
traceId: `reaction:${n.workflow}`,
|
|
1067
1073
|
source: `reaction:${n.workflow}`
|
|
1068
1074
|
}).start(n.workflow, e);
|
|
@@ -1086,69 +1092,69 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
1086
1092
|
return t.warn("reaction budget check failed — refusing the act", { tenantId: n }, e), !1;
|
|
1087
1093
|
}
|
|
1088
1094
|
}, i = lt(e.store, { onError: (e) => t.warn("reaction: rate-slot claim failed; refusing the act", { cause: String(e) }) });
|
|
1089
|
-
Yt =
|
|
1095
|
+
Yt = l(e.discovered.reactions ?? [], e.store, {
|
|
1090
1096
|
runAct: n,
|
|
1091
1097
|
checkBudget: r,
|
|
1092
1098
|
claimRateSlot: (e) => i.claim(e)
|
|
1093
1099
|
}, t);
|
|
1094
1100
|
}
|
|
1095
1101
|
let Xt;
|
|
1096
|
-
(e.discovered.aggregates?.length ?? 0) > 0 && (Xt = await
|
|
1102
|
+
(e.discovered.aggregates?.length ?? 0) > 0 && (Xt = await De({
|
|
1097
1103
|
discovered: e.discovered.aggregates ?? [],
|
|
1098
1104
|
store: e.store,
|
|
1099
1105
|
log: I.child("aggregate"),
|
|
1100
1106
|
...e.analytics === void 0 ? {} : { analytics: e.analytics },
|
|
1101
1107
|
...e.aggregateStorage === void 0 ? {} : { storage: e.aggregateStorage },
|
|
1102
1108
|
...e.aggregateCoordinator === void 0 ? {} : { coordinator: e.aggregateCoordinator }
|
|
1103
|
-
}),
|
|
1109
|
+
}), Ve = G.succeed(Qn, Xt.registry));
|
|
1104
1110
|
let Zt;
|
|
1105
1111
|
(e.discovered.expectations?.length ?? 0) > 0 && (Zt = ar({
|
|
1106
1112
|
discovered: e.discovered.expectations ?? [],
|
|
1107
1113
|
store: e.store,
|
|
1108
1114
|
log: I.child("expectation")
|
|
1109
|
-
}),
|
|
1115
|
+
}), He = G.succeed(q, Zt.registry)), (e.discovered.budgets?.length ?? 0) > 0 && (n = sr({
|
|
1110
1116
|
discovered: e.discovered.budgets ?? [],
|
|
1111
1117
|
log: I.child("finops")
|
|
1112
|
-
}),
|
|
1118
|
+
}), We = G.succeed($n, n.registry));
|
|
1113
1119
|
let Qt;
|
|
1114
1120
|
return (e.discovered.experiments?.length ?? 0) > 0 && (Qt = or({
|
|
1115
1121
|
discovered: e.discovered.experiments ?? [],
|
|
1116
1122
|
store: e.store,
|
|
1117
1123
|
log: I.child("experiment")
|
|
1118
|
-
}),
|
|
1124
|
+
}), Ke = G.succeed(nr, Qt.registry)), Ut = !0, e.bootTiming?.mark("ready"), {
|
|
1119
1125
|
dispatcher: r,
|
|
1120
1126
|
server: Gt,
|
|
1121
|
-
scheduler:
|
|
1122
|
-
eventsSnapshot:
|
|
1127
|
+
scheduler: ce,
|
|
1128
|
+
eventsSnapshot: me(S.bus, S.declared),
|
|
1123
1129
|
membersSnapshot: () => ({
|
|
1124
|
-
members:
|
|
1130
|
+
members: ze.membership.list(),
|
|
1125
1131
|
capturedAt: Date.now()
|
|
1126
1132
|
}),
|
|
1127
1133
|
agentTools: () => mt,
|
|
1128
|
-
rpcMetrics: () =>
|
|
1129
|
-
webhooksService: () =>
|
|
1130
|
-
runCanceller: () =>
|
|
1131
|
-
flowControlHealth: () =>
|
|
1132
|
-
inferenceHealth: () =>
|
|
1133
|
-
workflowWriteActions: () =>
|
|
1134
|
+
rpcMetrics: () => T,
|
|
1135
|
+
webhooksService: () => xe,
|
|
1136
|
+
runCanceller: () => ee(),
|
|
1137
|
+
flowControlHealth: () => te?.cancelHealth(),
|
|
1138
|
+
inferenceHealth: () => c?.health(),
|
|
1139
|
+
workflowWriteActions: () => v === void 0 || N === void 0 ? void 0 : se({
|
|
1134
1140
|
store: e.store,
|
|
1135
1141
|
log: I,
|
|
1136
1142
|
workflows: e.discovered.workflows ?? [],
|
|
1137
1143
|
workflowsProxy: o,
|
|
1138
|
-
workflowRuntime:
|
|
1144
|
+
workflowRuntime: d,
|
|
1139
1145
|
workflowRunRecorder: N,
|
|
1140
1146
|
closeChildrenForParent: Mt
|
|
1141
1147
|
}),
|
|
1142
|
-
redriveWorkflowRun: (e) =>
|
|
1143
|
-
resumeWorkflowRunFromStep: (e) =>
|
|
1148
|
+
redriveWorkflowRun: (e) => ne ? ne(e) : Promise.reject(/* @__PURE__ */ Error("redrive: this app registers no workflows")),
|
|
1149
|
+
resumeWorkflowRunFromStep: (e) => f ? f(e) : Promise.reject(/* @__PURE__ */ Error("resume-from-step: this app registers no workflows")),
|
|
1144
1150
|
close: async () => {
|
|
1145
1151
|
Ut = !1, await qt.drainRequests();
|
|
1146
|
-
for (let e of
|
|
1152
|
+
for (let e of we) try {
|
|
1147
1153
|
await e();
|
|
1148
1154
|
} catch (e) {
|
|
1149
1155
|
I.warn("serve: teardown step failed", {}, e);
|
|
1150
1156
|
}
|
|
1151
|
-
await
|
|
1157
|
+
await Be?.detach(), await ze.detach(), Xt?.detach(), Zt?.detach(), n?.detach(), Qt?.detach(), Yt?.(), Jt?.(), await ce?.shutdown(), r.close(), await re?.detach(), await d?.dispose(), await Kt(), await qt.finish();
|
|
1152
1158
|
}
|
|
1153
1159
|
};
|
|
1154
1160
|
}, $ = L({ scope: "voltro:serve" }), Xi = (e, t, n) => (e === "production" || e === "staging") && t !== "memory" && n !== "0", Zi = Bt, Qi = async (e) => {
|
|
@@ -1165,140 +1171,140 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
1165
1171
|
}
|
|
1166
1172
|
return $i(e);
|
|
1167
1173
|
}, $i = async (s) => {
|
|
1168
|
-
let
|
|
1174
|
+
let l = bn();
|
|
1169
1175
|
e("serve");
|
|
1170
1176
|
try {
|
|
1171
1177
|
di();
|
|
1172
1178
|
} catch (e) {
|
|
1173
1179
|
throw i(e instanceof Error ? e.message : String(e));
|
|
1174
1180
|
}
|
|
1175
|
-
let
|
|
1181
|
+
let u = process.cwd(), p = await We(u), ie = Vt({
|
|
1176
1182
|
kind: "api",
|
|
1177
|
-
configPort:
|
|
1183
|
+
configPort: p?.port,
|
|
1178
1184
|
env: process.env,
|
|
1179
1185
|
flagPort: Zi(s, "--port")
|
|
1180
1186
|
});
|
|
1181
|
-
for (let e of
|
|
1182
|
-
let
|
|
1183
|
-
Jr(Kr(
|
|
1184
|
-
rawEnv:
|
|
1187
|
+
for (let e of ie.warnings) $.warn(e);
|
|
1188
|
+
let m = ie.port;
|
|
1189
|
+
Jr(Kr(p?.secrets)), await Ht({
|
|
1190
|
+
rawEnv: p?.env,
|
|
1185
1191
|
appType: "api",
|
|
1186
|
-
root:
|
|
1192
|
+
root: u,
|
|
1187
1193
|
log: $,
|
|
1188
1194
|
generateTypes: !1
|
|
1189
|
-
}),
|
|
1190
|
-
let
|
|
1191
|
-
if (!r() && wn(
|
|
1192
|
-
let e = await import(Tn(
|
|
1195
|
+
}), l.mark("config");
|
|
1196
|
+
let h = (process.env.DB_DIALECT ?? p?.store ?? "memory").toLowerCase(), ae = (h === "mariadb" || h === "postgres" || h === "mssql") && (process.env.CDC ?? "1") !== "0", oe = h === "mariadb" ? "mariadb" : h === "mssql" ? "mssql" : void 0, se = vn(u);
|
|
1197
|
+
if (!r() && wn(se)) try {
|
|
1198
|
+
let e = await import(Tn(se).href);
|
|
1193
1199
|
if (e.modules) {
|
|
1194
1200
|
let t = {};
|
|
1195
|
-
for (let [n, r] of Object.entries(e.modules)) t[Cn(
|
|
1201
|
+
for (let [n, r] of Object.entries(e.modules)) t[Cn(u, n)] = r;
|
|
1196
1202
|
n(t), $.info("precompiled api bundle loaded", { modules: Object.keys(t).length });
|
|
1197
1203
|
}
|
|
1198
1204
|
} catch (e) {
|
|
1199
1205
|
$.warn("precompiled api bundle failed to load — falling back to source", {}, e);
|
|
1200
1206
|
}
|
|
1201
|
-
let
|
|
1207
|
+
let g = await T(u), _ = await Ot(g, { cdc: ae && oe !== void 0 }), pe = y(_);
|
|
1202
1208
|
{
|
|
1203
1209
|
let e = /* @__PURE__ */ new Set([
|
|
1204
|
-
...
|
|
1205
|
-
...
|
|
1206
|
-
...
|
|
1210
|
+
..._.queries.filter((e) => e.descriptor.overridesPlugin === !0).map((e) => e.descriptor.name),
|
|
1211
|
+
..._.mutations.filter((e) => e.descriptor.overridesPlugin === !0).map((e) => e.descriptor.name),
|
|
1212
|
+
..._.actions.filter((e) => e.descriptor.overridesPlugin === !0).map((e) => e.descriptor.name)
|
|
1207
1213
|
]);
|
|
1208
|
-
Jt(I(
|
|
1209
|
-
...
|
|
1210
|
-
...
|
|
1211
|
-
...
|
|
1212
|
-
...
|
|
1214
|
+
Jt(I(p?.plugins ?? []), [
|
|
1215
|
+
..._.queries.map((e) => e.descriptor.name),
|
|
1216
|
+
..._.mutations.map((e) => e.descriptor.name),
|
|
1217
|
+
..._.actions.map((e) => e.descriptor.name),
|
|
1218
|
+
..._.streams.map((e) => e.descriptor.name)
|
|
1213
1219
|
], e);
|
|
1214
|
-
let t =
|
|
1220
|
+
let t = Me(_.serverOnlyLeaks, b(process.env, "strict"), mr, "`voltro serve`");
|
|
1215
1221
|
if (t.action === "fail") throw i(t.message ?? "");
|
|
1216
1222
|
t.action === "warn" && $.warn(t.message ?? "");
|
|
1217
1223
|
}
|
|
1218
|
-
let
|
|
1224
|
+
let me = g.filter((e) => gn.test(e)), be = me.length > 0 ? await hn(me, $.child("webhooks")) : {
|
|
1219
1225
|
outgoing: [],
|
|
1220
1226
|
incoming: [],
|
|
1221
1227
|
providers: []
|
|
1222
|
-
},
|
|
1223
|
-
...
|
|
1224
|
-
outgoing: [...
|
|
1225
|
-
},
|
|
1228
|
+
}, De = pn(_.events), Oe = be.outgoing.length + be.incoming.length + be.providers.length + De.length === 0 ? void 0 : {
|
|
1229
|
+
...be,
|
|
1230
|
+
outgoing: [...be.outgoing, ...De]
|
|
1231
|
+
}, ke = tn({
|
|
1226
1232
|
nodeEnv: process.env.NODE_ENV,
|
|
1227
|
-
cdcDialect:
|
|
1228
|
-
declared:
|
|
1229
|
-
}),
|
|
1230
|
-
gates:
|
|
1233
|
+
cdcDialect: oe,
|
|
1234
|
+
declared: p?.schema
|
|
1235
|
+
}), je = Xt({
|
|
1236
|
+
gates: ke,
|
|
1231
1237
|
runtime: {
|
|
1232
|
-
traces:
|
|
1238
|
+
traces: ve(),
|
|
1233
1239
|
undo: ei()
|
|
1234
1240
|
}
|
|
1235
1241
|
});
|
|
1236
|
-
if (
|
|
1237
|
-
let
|
|
1238
|
-
mix:
|
|
1239
|
-
plugins:
|
|
1240
|
-
gates:
|
|
1241
|
-
...
|
|
1242
|
-
}),
|
|
1243
|
-
spec:
|
|
1244
|
-
sqlLayer:
|
|
1242
|
+
if (je !== void 0) throw i(`serve: ${je}`);
|
|
1243
|
+
let Ne = en({
|
|
1244
|
+
mix: _.featureMix,
|
|
1245
|
+
plugins: p?.plugins ?? [],
|
|
1246
|
+
gates: ke,
|
|
1247
|
+
...oe ? { cdcDialect: oe } : {}
|
|
1248
|
+
}), Pe = p?.analytics !== void 0 && p.analytics.kind !== "noop" && h !== "memory" ? (await F(h)).makeSqlLayer(A()) : void 0, Le = await ee({
|
|
1249
|
+
spec: p?.analytics,
|
|
1250
|
+
sqlLayer: Pe,
|
|
1245
1251
|
log: $
|
|
1246
|
-
}),
|
|
1247
|
-
let e = new Set(
|
|
1248
|
-
for (let n of [...
|
|
1252
|
+
}), x = (() => {
|
|
1253
|
+
let e = new Set(_.tables.map((e) => e.tableName)), t = [..._.tables];
|
|
1254
|
+
for (let n of [...Ne, ...Le.tables]) e.has(n.tableName) || (e.add(n.tableName), t.push(n));
|
|
1249
1255
|
return t;
|
|
1250
1256
|
})();
|
|
1251
|
-
for (let e of
|
|
1257
|
+
for (let e of x) Xn(e);
|
|
1252
1258
|
{
|
|
1253
|
-
let e = hr(ti(
|
|
1259
|
+
let e = hr(ti(_.queries.map((e) => ({
|
|
1254
1260
|
name: e.descriptor.name,
|
|
1255
1261
|
source: e.descriptor.source
|
|
1256
|
-
})), new Set(
|
|
1262
|
+
})), new Set(x.flatMap((e) => {
|
|
1257
1263
|
let t = e.tableName;
|
|
1258
1264
|
return t === void 0 ? [] : [t];
|
|
1259
1265
|
}))));
|
|
1260
1266
|
e !== void 0 && $.warn(e);
|
|
1261
1267
|
}
|
|
1262
|
-
let
|
|
1263
|
-
if (Xi(
|
|
1264
|
-
let e = (await F(
|
|
1268
|
+
let Re = (process.env.NODE_ENV ?? "").toLowerCase();
|
|
1269
|
+
if (Xi(Re, h, process.env.VOLTRO_AUTO_MIGRATE)) {
|
|
1270
|
+
let e = (await F(h)).makeSqlLayer(A()), t = await W.runPromise(Vn.SqlClient.pipe(W.flatMap((e) => Wn(e, u)), W.provide(e), W.catchAll(() => W.succeed([]))));
|
|
1265
1271
|
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));
|
|
1266
|
-
let n = await W.runPromise(Vn.SqlClient.pipe(W.flatMap((e) => Gn(e,
|
|
1267
|
-
appliedBy: `serve:${
|
|
1272
|
+
let n = await W.runPromise(Vn.SqlClient.pipe(W.flatMap((e) => Gn(e, x, {
|
|
1273
|
+
appliedBy: `serve:${Re}`,
|
|
1268
1274
|
environment: "prod",
|
|
1269
|
-
dialectId:
|
|
1275
|
+
dialectId: h
|
|
1270
1276
|
})), W.provide(e)));
|
|
1271
|
-
n.kind === "prod-mismatch" && ($.error(Un(n,
|
|
1272
|
-
gates:
|
|
1277
|
+
n.kind === "prod-mismatch" && ($.error(Un(n, h)), $.error(Qt({
|
|
1278
|
+
gates: ke,
|
|
1273
1279
|
nodeEnv: process.env.NODE_ENV,
|
|
1274
|
-
cdcDialect:
|
|
1275
|
-
declared:
|
|
1276
|
-
})), $.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(Un(n,
|
|
1280
|
+
cdcDialect: oe,
|
|
1281
|
+
declared: p?.schema
|
|
1282
|
+
})), $.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(Un(n, h));
|
|
1277
1283
|
}
|
|
1278
1284
|
await qt({
|
|
1279
|
-
dialectId:
|
|
1280
|
-
tables:
|
|
1281
|
-
mode: Gt(
|
|
1285
|
+
dialectId: h,
|
|
1286
|
+
tables: x,
|
|
1287
|
+
mode: Gt(p?.reactiveTriggers),
|
|
1282
1288
|
lockSchema: A().schema,
|
|
1283
|
-
makeLayer: async () => (await F(
|
|
1289
|
+
makeLayer: async () => (await F(h)).makeSqlLayer(A()),
|
|
1284
1290
|
log: {
|
|
1285
1291
|
info: (e, t) => $.info(e, t ?? {}),
|
|
1286
1292
|
warn: (e, t) => $.warn(e, t ?? {})
|
|
1287
1293
|
}
|
|
1288
1294
|
});
|
|
1289
|
-
let
|
|
1290
|
-
|
|
1291
|
-
let
|
|
1295
|
+
let Ue = Lr(x);
|
|
1296
|
+
l.mark("discover");
|
|
1297
|
+
let w = await nt(p, void 0), Ge = ii(w, h);
|
|
1292
1298
|
for (let e of dt({
|
|
1293
|
-
dialect: String(
|
|
1299
|
+
dialect: String(p?.store ?? process.env.DB_DIALECT ?? "postgres"),
|
|
1294
1300
|
changeStrategy: (process.env.CDC ?? "1") === "0" ? "inline" : "cdc",
|
|
1295
1301
|
dbUrl: process.env.DB_URL,
|
|
1296
|
-
crossReplicaBus: Ci(
|
|
1297
|
-
tables:
|
|
1302
|
+
crossReplicaBus: Ci(p?.plugins ?? [])?.broadcast.crossReplica === !0,
|
|
1303
|
+
tables: _.tables.map((e) => ({
|
|
1298
1304
|
tableName: e.tableName,
|
|
1299
1305
|
isReactive: e.isReactive === !0
|
|
1300
1306
|
})),
|
|
1301
|
-
querySources:
|
|
1307
|
+
querySources: _.queries.flatMap((e) => {
|
|
1302
1308
|
let t = e.descriptor.source;
|
|
1303
1309
|
return t === void 0 ? [] : typeof t == "string" ? [t] : [...t];
|
|
1304
1310
|
})
|
|
@@ -1306,19 +1312,19 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
1306
1312
|
{
|
|
1307
1313
|
let e = E({
|
|
1308
1314
|
tables: qn().map((e) => ({ tableName: e.tableName })),
|
|
1309
|
-
queries:
|
|
1315
|
+
queries: _.queries.map((e) => ({
|
|
1310
1316
|
name: e.descriptor.name,
|
|
1311
1317
|
source: e.descriptor.source
|
|
1312
1318
|
}))
|
|
1313
1319
|
}), t = gt(e);
|
|
1314
1320
|
t !== void 0 && $.warn(t);
|
|
1315
1321
|
}
|
|
1316
|
-
|
|
1317
|
-
let { service:
|
|
1322
|
+
p?.cache && !process.env.CACHE_BACKEND && (process.env.CACHE_BACKEND = p.cache), p?.cacheRedisUrl && !process.env.CACHE_REDIS_URL && (process.env.CACHE_REDIS_URL = p.cacheRedisUrl), p?.cacheRedisDriver && !process.env.CACHE_REDIS_DRIVER && (process.env.CACHE_REDIS_DRIVER = p.cacheRedisDriver), p?.cacheKeyPrefix && !process.env.CACHE_KEY_PREFIX && (process.env.CACHE_KEY_PREFIX = p.cacheKeyPrefix);
|
|
1323
|
+
let { service: qe, invalidationBus: tt, snapshotCache: at, cache: ot, semantic: lt, evictSource: pt, backend: vt, stats: yt, dispose: xt } = await Ke({
|
|
1318
1324
|
env: process.env,
|
|
1319
|
-
semantic:
|
|
1325
|
+
semantic: p?.cacheSemantic ?? !1
|
|
1320
1326
|
});
|
|
1321
|
-
lt !== void 0 && $.info("semantic cache enabled — reactive eviction on live writes"), $.info(`cache backend resolved: ${vt}` + (vt === "redis" ? ` (driver ${process.env.CACHE_REDIS_DRIVER ?? "resp"})` : " — in-process, not cross-instance")),
|
|
1327
|
+
lt !== void 0 && $.info("semantic cache enabled — reactive eviction on live writes"), $.info(`cache backend resolved: ${vt}` + (vt === "redis" ? ` (driver ${process.env.CACHE_REDIS_DRIVER ?? "resp"})` : " — in-process, not cross-instance")), w.onChange((e) => {
|
|
1322
1328
|
if (W.runFork(tt.publish(e.table)), pt !== void 0) {
|
|
1323
1329
|
let t = (e.new ?? e.old)?.id;
|
|
1324
1330
|
pt({
|
|
@@ -1327,41 +1333,41 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
1327
1333
|
...t === void 0 ? {} : { id: t }
|
|
1328
1334
|
});
|
|
1329
1335
|
}
|
|
1330
|
-
}),
|
|
1331
|
-
let { kv: Ct, service: wt } = await Tr({ store:
|
|
1332
|
-
|
|
1336
|
+
}), p?.kv && !process.env.KV_BACKEND && (process.env.KV_BACKEND = p.kv), p?.kvRedisUrl && !process.env.KV_REDIS_URL && (process.env.KV_REDIS_URL = p.kvRedisUrl), p?.kvKeyPrefix && !process.env.KV_KEY_PREFIX && (process.env.KV_KEY_PREFIX = p.kvKeyPrefix);
|
|
1337
|
+
let { kv: Ct, service: wt } = await Tr({ store: w });
|
|
1338
|
+
He({
|
|
1333
1339
|
log: $,
|
|
1334
1340
|
max: Wt(),
|
|
1335
|
-
outOfPool: Lt(
|
|
1341
|
+
outOfPool: Lt(h, (process.env.CDC ?? "1") !== "0"),
|
|
1336
1342
|
readPools: t.replicationSnapshot()?.replicaCount ?? 0,
|
|
1337
1343
|
always: !0
|
|
1338
|
-
}),
|
|
1344
|
+
}), l.mark("store");
|
|
1339
1345
|
let Et = ir({
|
|
1340
|
-
store:
|
|
1341
|
-
sink:
|
|
1346
|
+
store: w,
|
|
1347
|
+
sink: Le.sink,
|
|
1342
1348
|
log: $
|
|
1343
1349
|
}), At = kt({
|
|
1344
|
-
store:
|
|
1345
|
-
dialect:
|
|
1350
|
+
store: w,
|
|
1351
|
+
dialect: h,
|
|
1346
1352
|
log: { info: (e) => $.info(e) }
|
|
1347
|
-
}), j =
|
|
1348
|
-
|
|
1353
|
+
}), j = p?.plugins ?? [], Ft = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, Rt, zt;
|
|
1354
|
+
h !== "memory" && (Rt = Bn.make((await F(h)).makeSqlLayer(A())), zt = await Rt.runPromise(Vn.SqlClient));
|
|
1349
1355
|
let Bt = [
|
|
1350
1356
|
"postgres",
|
|
1351
1357
|
"mariadb",
|
|
1352
1358
|
"mysql",
|
|
1353
1359
|
"mssql"
|
|
1354
|
-
].includes(
|
|
1360
|
+
].includes(h) ? xr(w, Ft, $) : Xr, mn = S(p?.scheduling), yn = Dr({
|
|
1355
1361
|
maxIdleIntervalMs: mn.pollCeilingMs,
|
|
1356
1362
|
coordinator: Bt,
|
|
1357
1363
|
replicaId: Ft,
|
|
1358
1364
|
log: $
|
|
1359
|
-
}), xn = [], L = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, En = Ci(
|
|
1365
|
+
}), xn = [], L = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, En = Ci(p?.plugins ?? [])?.broadcast?.provider, Dn = Ze(p?.plugins, p?.name ?? Sn(u));
|
|
1360
1366
|
{
|
|
1361
|
-
let e = et(
|
|
1367
|
+
let e = et(p?.plugins, p?.name ?? Sn(u));
|
|
1362
1368
|
e !== void 0 && $.warn(e);
|
|
1363
1369
|
}
|
|
1364
|
-
let R = jt(
|
|
1370
|
+
let R = jt(p?.plugins, {
|
|
1365
1371
|
instanceId: L,
|
|
1366
1372
|
namespace: Dn,
|
|
1367
1373
|
meta: { mode: "serve" },
|
|
@@ -1377,49 +1383,49 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
1377
1383
|
return xn.push(r), r;
|
|
1378
1384
|
}
|
|
1379
1385
|
};
|
|
1380
|
-
for (let e of j) e.bindDataStore?.(
|
|
1381
|
-
|
|
1382
|
-
store:
|
|
1386
|
+
for (let e of j) e.bindDataStore?.(Ge, On);
|
|
1387
|
+
c({
|
|
1388
|
+
store: w,
|
|
1383
1389
|
...st(),
|
|
1384
1390
|
log: $
|
|
1385
1391
|
});
|
|
1386
1392
|
let kn = j.filter((e) => typeof e.onChangeEvent == "function");
|
|
1387
1393
|
if (kn.length > 0) {
|
|
1388
|
-
let e =
|
|
1389
|
-
|
|
1390
|
-
let n =
|
|
1394
|
+
let e = w.changeScope ?? "local";
|
|
1395
|
+
w.onChange((t) => {
|
|
1396
|
+
let n = he(t, e);
|
|
1391
1397
|
for (let e of kn) W.runFork(e.onChangeEvent(n).pipe(W.catchAllCause((t) => W.sync(() => $.warn(`plugin ${e.name} onChangeEvent failed`, { error: zn.pretty(t) })))));
|
|
1392
1398
|
});
|
|
1393
1399
|
}
|
|
1394
|
-
let z =
|
|
1400
|
+
let z = le({
|
|
1395
1401
|
plugins: j,
|
|
1396
|
-
appName:
|
|
1402
|
+
appName: p?.name ?? "voltro-api",
|
|
1397
1403
|
appType: "api",
|
|
1398
1404
|
voltroVersion: process.env.npm_package_version ?? "0.0.0",
|
|
1399
1405
|
log: $
|
|
1400
1406
|
});
|
|
1401
|
-
j.length && await z.activate(),
|
|
1407
|
+
j.length && await z.activate(), l.mark("plugins");
|
|
1402
1408
|
let B = await z.gatherObservability(), An = {
|
|
1403
1409
|
info: (e, t) => process.stdout.write(`[broadcast] ${e} ${t ? JSON.stringify(t) : ""}\n`),
|
|
1404
1410
|
warn: (e, t) => process.stderr.write(`[broadcast] ${e} ${t ? JSON.stringify(t) : ""}\n`),
|
|
1405
1411
|
debug: () => {}
|
|
1406
|
-
}, jn, Mn = await ht(
|
|
1412
|
+
}, jn, Mn = await ht(w, p, h, Dn, An, (e, t) => {
|
|
1407
1413
|
jn?.refreshAll(`broadcast gap: missed ${t} change(s) from ${e}`);
|
|
1408
|
-
}), V =
|
|
1414
|
+
}), V = p?.apiKeys, Nn = (typeof V == "object" ? V.prefix : void 0) ?? "voltro_", Pn = V ? pr(w) : void 0, H = Pn ? Cr({ flush: wr(Pn) }) : void 0;
|
|
1409
1415
|
H && Vr(() => H.shutdown());
|
|
1410
1416
|
let U = Pn ? Sr(Pn, {
|
|
1411
1417
|
prefix: Nn,
|
|
1412
1418
|
...H ? { usage: H } : {}
|
|
1413
|
-
}) : void 0, Fn = U ? [gr(U, { prefix: Nn })] : [], In = bt([...
|
|
1414
|
-
analyticsLayer:
|
|
1415
|
-
cacheService:
|
|
1419
|
+
}) : void 0, Fn = U ? [gr(U, { prefix: Nn })] : [], In = bt([...p?.auth?.strategies ?? [], ...Fn], bi(p?.plugins ?? []), p?.auth?.anonymousTenantRequired ?? !1, p?.auth, () => Ge), Ln = [...p?.restRoutes ?? [], ...U ? rr(U, (typeof V == "object" ? V.managementPath : void 0) ?? "/v1/api-keys") : []], Rn = k(p?.idempotency, w), Kn = j.map((e) => e.services).filter((e) => e !== void 0), Jn = G.mergeAll(Be({
|
|
1420
|
+
analyticsLayer: Le.layer,
|
|
1421
|
+
cacheService: qe,
|
|
1416
1422
|
kvService: wt,
|
|
1417
1423
|
...lt === void 0 ? {} : { semanticCache: lt },
|
|
1418
1424
|
pluginServices: Kn,
|
|
1419
|
-
userLayers:
|
|
1420
|
-
}), rt(
|
|
1421
|
-
files:
|
|
1422
|
-
store:
|
|
1425
|
+
userLayers: p?.layers ?? []
|
|
1426
|
+
}), rt(p?.http ?? {})), K = await it({
|
|
1427
|
+
files: g,
|
|
1428
|
+
store: w,
|
|
1423
1429
|
log: $,
|
|
1424
1430
|
seedPolicy: "report",
|
|
1425
1431
|
seedPattern: ln,
|
|
@@ -1427,7 +1433,7 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
1427
1433
|
startupPattern: rn,
|
|
1428
1434
|
loadStartupFiles: a,
|
|
1429
1435
|
runStartups: o,
|
|
1430
|
-
emailPattern:
|
|
1436
|
+
emailPattern: C,
|
|
1431
1437
|
loadEmailFiles: mt,
|
|
1432
1438
|
registerEmailTemplates: xi
|
|
1433
1439
|
});
|
|
@@ -1436,29 +1442,29 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
1436
1442
|
emailTemplates: K.emailCount
|
|
1437
1443
|
}), K.startups !== void 0 && Vr(async () => {
|
|
1438
1444
|
await K.startups.stop();
|
|
1439
|
-
}),
|
|
1440
|
-
demands:
|
|
1445
|
+
}), ce({
|
|
1446
|
+
demands: fe(pe),
|
|
1441
1447
|
isRegistered: (e) => _r(e) !== void 0
|
|
1442
1448
|
});
|
|
1443
1449
|
let Zn = ft({
|
|
1444
1450
|
schedules: St({
|
|
1445
|
-
schedules:
|
|
1451
|
+
schedules: _.schedules,
|
|
1446
1452
|
seeds: K.seeds,
|
|
1447
|
-
store:
|
|
1453
|
+
store: w,
|
|
1448
1454
|
log: $.child("seeds")
|
|
1449
1455
|
}),
|
|
1450
|
-
workflows:
|
|
1456
|
+
workflows: _.workflows ?? [],
|
|
1451
1457
|
log: $.child("workflow-schedules")
|
|
1452
|
-
}), Qn =
|
|
1458
|
+
}), Qn = p?.scheduling ?? {}, $n = Qn.trigger ?? "self", er = /* @__PURE__ */ new Set([
|
|
1453
1459
|
"postgres",
|
|
1454
1460
|
"mysql",
|
|
1455
1461
|
"mariadb",
|
|
1456
1462
|
"mssql"
|
|
1457
|
-
]), tr = Qn.coordination ?? (er.has(
|
|
1458
|
-
tr === "cluster" && !q && $.warn("scheduling.coordination=cluster needs a sql-backed store except sqlite — falling back to single"), tr === "advisoryLock" && !er.has(
|
|
1459
|
-
let ar, or =
|
|
1463
|
+
]), tr = Qn.coordination ?? (er.has(h) ? "advisoryLock" : "single"), q = tr === "cluster" && er.has(h), nr = q ? "cluster" : tr === "advisoryLock" && er.has(h) ? "advisoryLock" : "single";
|
|
1464
|
+
tr === "cluster" && !q && $.warn("scheduling.coordination=cluster needs a sql-backed store except sqlite — falling back to single"), tr === "advisoryLock" && !er.has(h) && $.warn("scheduling.coordination=advisoryLock needs a SQL store (the claim-row gate) — falling back to single");
|
|
1465
|
+
let ar, or = _.workflows.length > 0 || _.workflowWorkers.length > 0 || _.eventTriggers.length > 0 || (Oe?.outgoing.length ?? 0) > 0 || q, sr;
|
|
1460
1466
|
if (or) {
|
|
1461
|
-
if (
|
|
1467
|
+
if (h === "mssql") {
|
|
1462
1468
|
let e = await fn(process.cwd());
|
|
1463
1469
|
e && $.warn(e);
|
|
1464
1470
|
}
|
|
@@ -1469,8 +1475,8 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
1469
1475
|
await ar?.fireFromCluster(e.name);
|
|
1470
1476
|
}
|
|
1471
1477
|
})) : [];
|
|
1472
|
-
sr =
|
|
1473
|
-
let e = await F(
|
|
1478
|
+
sr = h === "memory" ? e.layerMemory : await (async () => {
|
|
1479
|
+
let e = await F(h), t = r({ sqliteFamily: e.id === "sqlite" || e.id === "turso" });
|
|
1474
1480
|
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({
|
|
1475
1481
|
sqlClientLayer: e.makeSqlLayer(A()),
|
|
1476
1482
|
runnerStorage: t,
|
|
@@ -1481,58 +1487,58 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
1481
1487
|
});
|
|
1482
1488
|
})();
|
|
1483
1489
|
}
|
|
1484
|
-
let cr =
|
|
1485
|
-
if (br.length > 0 &&
|
|
1486
|
-
let e = (await F(
|
|
1490
|
+
let cr = ue(j, _n()), J = g.filter((e) => /\.subscribe\.tsx?$/.test(e)), lr = J.length > 0 ? await xe(J, $) : [], Y = g.filter((e) => /\.reaction\.tsx?$/.test(e)), ur = Y.length > 0 ? await v(Y, $) : [], dr = g.filter((e) => sn.test(e)), vr = dr.length > 0 ? await Ie(dr, $) : [], yr = g.filter((e) => /\.aggregate\.tsx?$/.test(e)), br = yr.length > 0 ? await f(yr, $) : [], Er = _e();
|
|
1491
|
+
if (br.length > 0 && h !== "memory") try {
|
|
1492
|
+
let e = (await F(h)).makeSqlLayer(A());
|
|
1487
1493
|
Er = ct(e);
|
|
1488
1494
|
} catch (e) {
|
|
1489
1495
|
$.warn("aggregate: SQL storage init failed — falling back to in-process", { err: String(e) });
|
|
1490
1496
|
}
|
|
1491
|
-
let Or =
|
|
1497
|
+
let Or = h === "memory" ? Xr : xr(w, `aggregate@${process.pid}`, $), kr = g.filter((e) => cn.test(e)), Ar = kr.length > 0 ? await d(kr, $) : [], jr = g.filter((e) => on.test(e)), Mr = jr.length > 0 ? await Te(jr, $) : [], Nr = g.filter((e) => an.test(e)), Pr = Nr.length > 0 ? await Mt(Nr, $) : [], Fr = [], Ir = [], Rr = g.filter((e) => $t.test(e));
|
|
1492
1498
|
if (Rr.length > 0) {
|
|
1493
|
-
let e = $.child("agent"), t =
|
|
1499
|
+
let e = $.child("agent"), t = g.filter((e) => Zt.test(e));
|
|
1494
1500
|
t.length > 0 && await nn(t, e);
|
|
1495
1501
|
let n = await Yt(Rr, e);
|
|
1496
|
-
for (let e of n.agents) for (let t of
|
|
1502
|
+
for (let e of n.agents) for (let t of Ye(e)) (t.kind === "action" ? Fr : Ir).push({
|
|
1497
1503
|
file: t.file,
|
|
1498
1504
|
descriptor: t.descriptor,
|
|
1499
1505
|
executor: t.executor
|
|
1500
1506
|
});
|
|
1501
1507
|
n.agents.length > 0 && e.info("synthesized agent routes", { agents: n.agents.map((e) => e.descriptor.name) });
|
|
1502
1508
|
}
|
|
1503
|
-
|
|
1509
|
+
l.mark("workflow");
|
|
1504
1510
|
let X = () => {
|
|
1505
1511
|
let e = Z.workflowWriteActions();
|
|
1506
1512
|
if (e === void 0) throw Error("workflow actions: this app registers no workflows");
|
|
1507
1513
|
return e;
|
|
1508
1514
|
}, zr = Yn({
|
|
1509
|
-
dialect:
|
|
1515
|
+
dialect: h,
|
|
1510
1516
|
...A()
|
|
1511
|
-
}), Br =
|
|
1517
|
+
}), Br = h === "memory" ? void 0 : (await F(h)).makeSqlLayer(A()), Hr = async () => Dt({
|
|
1512
1518
|
sqlLayer: Br,
|
|
1513
|
-
declared:
|
|
1519
|
+
declared: x,
|
|
1514
1520
|
log: $
|
|
1515
1521
|
}), Ur = {
|
|
1516
1522
|
kind: "api",
|
|
1517
1523
|
meta: {
|
|
1518
|
-
name:
|
|
1524
|
+
name: p?.name ?? "voltro-api",
|
|
1519
1525
|
voltroVersion: Tt,
|
|
1520
|
-
port:
|
|
1526
|
+
port: m,
|
|
1521
1527
|
mode: "start",
|
|
1522
|
-
store:
|
|
1523
|
-
cdc:
|
|
1528
|
+
store: h,
|
|
1529
|
+
cdc: ae ? "on" : "off",
|
|
1524
1530
|
...zr === void 0 ? {} : { databaseId: zr }
|
|
1525
1531
|
},
|
|
1526
|
-
rpc: Qe(
|
|
1527
|
-
workflows:
|
|
1532
|
+
rpc: Qe(_, u),
|
|
1533
|
+
workflows: ze(_, u),
|
|
1528
1534
|
migrations: Hr,
|
|
1529
1535
|
events: () => Z.eventsSnapshot(),
|
|
1530
1536
|
agentTools: () => Z.agentTools(),
|
|
1531
1537
|
invariantChecks: () => ({
|
|
1532
1538
|
mode: "serve",
|
|
1533
|
-
accessGate:
|
|
1534
|
-
config:
|
|
1535
|
-
serverOnlyLeaks:
|
|
1539
|
+
accessGate: pe,
|
|
1540
|
+
config: p,
|
|
1541
|
+
serverOnlyLeaks: _.serverOnlyLeaks,
|
|
1536
1542
|
migrations: Hr
|
|
1537
1543
|
}),
|
|
1538
1544
|
members: () => Z.membersSnapshot(),
|
|
@@ -1540,52 +1546,52 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
1540
1546
|
if (!ar) throw Error("scheduler not started — this app registers no self-triggered schedules (all schedules are trigger:'external', or there are none).");
|
|
1541
1547
|
return { runId: await ar.fireNow(e, t) ?? null };
|
|
1542
1548
|
},
|
|
1543
|
-
inspectBackfillSchedule:
|
|
1549
|
+
inspectBackfillSchedule: re({
|
|
1544
1550
|
getHandle: () => ar,
|
|
1545
1551
|
getSchedules: () => Zn
|
|
1546
1552
|
}),
|
|
1547
|
-
...
|
|
1548
|
-
store:
|
|
1549
|
-
discoveredWebhooks:
|
|
1553
|
+
...Oe === void 0 ? {} : { webhooks: () => ge({
|
|
1554
|
+
store: w,
|
|
1555
|
+
discoveredWebhooks: Oe
|
|
1550
1556
|
}) },
|
|
1551
1557
|
plugins: () => ({
|
|
1552
1558
|
plugins: z.snapshot(),
|
|
1553
1559
|
capturedAt: Date.now()
|
|
1554
1560
|
}),
|
|
1555
|
-
env: () => P(
|
|
1556
|
-
...
|
|
1557
|
-
plugins:
|
|
1561
|
+
env: () => P(p?.name ?? Sn(u), {
|
|
1562
|
+
...p?.env !== void 0 && ui(p.env) ? { contract: p.env } : {},
|
|
1563
|
+
plugins: p?.plugins ?? []
|
|
1558
1564
|
}),
|
|
1559
|
-
dataCache: () =>
|
|
1565
|
+
dataCache: () => Ve({
|
|
1560
1566
|
stats: yt,
|
|
1561
1567
|
backendKind: vt
|
|
1562
1568
|
}),
|
|
1563
1569
|
subscriptions: () => Nt(() => jn),
|
|
1564
|
-
inspectTables: () =>
|
|
1565
|
-
inspectRows:
|
|
1566
|
-
store:
|
|
1567
|
-
tables:
|
|
1570
|
+
inspectTables: () => de(_.tables),
|
|
1571
|
+
inspectRows: Se({
|
|
1572
|
+
store: w,
|
|
1573
|
+
tables: _.tables,
|
|
1568
1574
|
mask: !0
|
|
1569
1575
|
}),
|
|
1570
1576
|
metrics: (e) => Z.rpcMetrics().snapshot(e),
|
|
1571
1577
|
cluster: () => It({
|
|
1572
|
-
store:
|
|
1573
|
-
dialect:
|
|
1578
|
+
store: w,
|
|
1579
|
+
dialect: h,
|
|
1574
1580
|
useClusterCron: q,
|
|
1575
1581
|
scheduleCoordChoice: tr
|
|
1576
1582
|
}),
|
|
1577
|
-
inspectSchedules: () =>
|
|
1583
|
+
inspectSchedules: () => Ee({
|
|
1578
1584
|
schedules: Zn,
|
|
1579
1585
|
defaultTrigger: $n,
|
|
1580
1586
|
coordination: nr
|
|
1581
1587
|
}),
|
|
1582
|
-
inspectScheduleRuns: (e) => N(
|
|
1583
|
-
...
|
|
1584
|
-
controls: O(
|
|
1585
|
-
active: (
|
|
1588
|
+
inspectScheduleRuns: (e) => N(w, e),
|
|
1589
|
+
...te(w, {
|
|
1590
|
+
controls: O(_.workflows ?? []),
|
|
1591
|
+
active: (_.workflows?.length ?? 0) > 0,
|
|
1586
1592
|
cancellation: () => Z.flowControlHealth()
|
|
1587
1593
|
}),
|
|
1588
|
-
webhookActions:
|
|
1594
|
+
webhookActions: Ce(() => Z.webhooksService()),
|
|
1589
1595
|
inspectStartWorkflow: (e) => X().inspectStartWorkflow(e),
|
|
1590
1596
|
inspectCancelWorkflowRun: (e) => X().inspectCancelWorkflowRun(e),
|
|
1591
1597
|
inspectSuspendWorkflowRun: (e) => X().inspectSuspendWorkflowRun(e),
|
|
@@ -1595,12 +1601,12 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
1595
1601
|
inspectSignalWorkflowRun: (e) => X().inspectSignalWorkflowRun(e),
|
|
1596
1602
|
inspectUpdateWorkflowRun: (e) => X().inspectUpdateWorkflowRun(e),
|
|
1597
1603
|
inspectInferences: (e) => Xe({
|
|
1598
|
-
store:
|
|
1599
|
-
active: (
|
|
1604
|
+
store: w,
|
|
1605
|
+
active: (_.workflows?.length ?? 0) > 0,
|
|
1600
1606
|
dispatcher: () => Z.inferenceHealth()
|
|
1601
1607
|
}, e.limit === void 0 ? {} : { limit: e.limit }),
|
|
1602
1608
|
..._t({
|
|
1603
|
-
store:
|
|
1609
|
+
store: w,
|
|
1604
1610
|
cancelRun: async (e) => await Z.runCanceller()?.(e) ?? !1,
|
|
1605
1611
|
retryRun: async (e) => X().inspectRetryWorkflowRun({ runId: e }),
|
|
1606
1612
|
redriveRun: async (e) => Z.redriveWorkflowRun({ runId: e }),
|
|
@@ -1608,12 +1614,12 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
1608
1614
|
}),
|
|
1609
1615
|
inspectRedriveWorkflowRun: (e) => Z.redriveWorkflowRun(e),
|
|
1610
1616
|
inspectResumeWorkflowRunFromStep: (e) => Z.resumeWorkflowRunFromStep(e)
|
|
1611
|
-
}, Wr = (process.env.VOLTRO_TENANT_ISOLATION ??
|
|
1612
|
-
let e = await F(
|
|
1617
|
+
}, Wr = (process.env.VOLTRO_TENANT_ISOLATION ?? p?.tenancy?.isolation) === "namespace", Gr = Wr && h !== "memory" ? await (async () => {
|
|
1618
|
+
let e = await F(h);
|
|
1613
1619
|
return D({
|
|
1614
|
-
tables:
|
|
1620
|
+
tables: x,
|
|
1615
1621
|
sqlLayer: e.makeSqlLayer(A()),
|
|
1616
|
-
dialect:
|
|
1622
|
+
dialect: h,
|
|
1617
1623
|
options: { retryFilter: e.retryFilter },
|
|
1618
1624
|
log: {
|
|
1619
1625
|
info: (e, t) => $.info(e, t),
|
|
@@ -1621,9 +1627,9 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
1621
1627
|
}
|
|
1622
1628
|
});
|
|
1623
1629
|
})() : void 0, qr = await ut({
|
|
1624
|
-
input:
|
|
1630
|
+
input: p?.tenancy?.residency,
|
|
1625
1631
|
namespaceIsolationOn: Wr,
|
|
1626
|
-
makeStoreForUrl: (e, t) => nt(
|
|
1632
|
+
makeStoreForUrl: (e, t) => nt(p, void 0, Ut(A(), t)),
|
|
1627
1633
|
log: {
|
|
1628
1634
|
info: (e, t) => $.info(e, t),
|
|
1629
1635
|
warn: (e, t) => $.warn(e, t)
|
|
@@ -1633,7 +1639,7 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
1633
1639
|
await qr.close();
|
|
1634
1640
|
});
|
|
1635
1641
|
let Z = await Yi({
|
|
1636
|
-
bootTiming:
|
|
1642
|
+
bootTiming: l,
|
|
1637
1643
|
broadcastNamespace: Dn,
|
|
1638
1644
|
scheduling: (() => {
|
|
1639
1645
|
let e = mn;
|
|
@@ -1643,84 +1649,84 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
1643
1649
|
cancelSweepMs: e.cancelSweepMs,
|
|
1644
1650
|
stalenessSweepMs: e.stalenessSweepMs,
|
|
1645
1651
|
disarmWhenIdle: $e({
|
|
1646
|
-
changeScope:
|
|
1652
|
+
changeScope: w.changeScope,
|
|
1647
1653
|
broadcastAttached: Mn !== void 0
|
|
1648
1654
|
})
|
|
1649
1655
|
};
|
|
1650
1656
|
})(),
|
|
1651
|
-
...
|
|
1652
|
-
...
|
|
1653
|
-
workflowRecording: M(
|
|
1657
|
+
...p?.workflows?.staleness === void 0 ? {} : { workflowStaleness: p.workflows.staleness },
|
|
1658
|
+
...p?.workflows?.suspendSignalHintMs === void 0 ? {} : { workflowSuspendSignalHintMs: p.workflows.suspendSignalHintMs },
|
|
1659
|
+
workflowRecording: M(p?.workflows?.recording),
|
|
1654
1660
|
membership: {
|
|
1655
1661
|
...R,
|
|
1656
1662
|
instanceId: L
|
|
1657
1663
|
},
|
|
1658
1664
|
security: {
|
|
1659
|
-
defaultDeny:
|
|
1660
|
-
...
|
|
1665
|
+
defaultDeny: Ae(p),
|
|
1666
|
+
...ye(p)
|
|
1661
1667
|
},
|
|
1662
|
-
approvals: { defaultExpiryMs:
|
|
1663
|
-
...
|
|
1668
|
+
approvals: { defaultExpiryMs: Fe(p) },
|
|
1669
|
+
...p?.plugins === void 0 ? {} : { plugins: p.plugins },
|
|
1664
1670
|
...Rn ? { idempotency: Rn } : {},
|
|
1665
1671
|
restRoutes: Ln,
|
|
1666
|
-
appProcedures:
|
|
1672
|
+
appProcedures: pe,
|
|
1667
1673
|
discovered: {
|
|
1668
|
-
queries: [...
|
|
1669
|
-
mutations:
|
|
1670
|
-
actions: [...
|
|
1671
|
-
streams:
|
|
1672
|
-
events:
|
|
1673
|
-
workflows:
|
|
1674
|
-
workflowWorkers:
|
|
1675
|
-
eventTriggers:
|
|
1674
|
+
queries: [..._.queries, ...Ir],
|
|
1675
|
+
mutations: _.mutations,
|
|
1676
|
+
actions: [..._.actions, ...Fr],
|
|
1677
|
+
streams: _.streams,
|
|
1678
|
+
events: _.events,
|
|
1679
|
+
workflows: _.workflows,
|
|
1680
|
+
workflowWorkers: _.workflowWorkers,
|
|
1681
|
+
eventTriggers: _.eventTriggers,
|
|
1676
1682
|
schedules: Zn,
|
|
1677
1683
|
subscribers: lr,
|
|
1678
1684
|
outboxHandlers: vr,
|
|
1679
|
-
connections:
|
|
1685
|
+
connections: _.connections,
|
|
1680
1686
|
reactions: ur,
|
|
1681
1687
|
aggregates: br,
|
|
1682
1688
|
expectations: Ar,
|
|
1683
1689
|
budgets: Mr,
|
|
1684
1690
|
experiments: Pr,
|
|
1685
|
-
...
|
|
1691
|
+
...Oe === void 0 ? {} : { webhooks: Oe }
|
|
1686
1692
|
},
|
|
1687
1693
|
log: $,
|
|
1688
|
-
analytics:
|
|
1694
|
+
analytics: Le.sink,
|
|
1689
1695
|
aggregateStorage: Er,
|
|
1690
1696
|
aggregateCoordinator: Or,
|
|
1691
|
-
store:
|
|
1697
|
+
store: w,
|
|
1692
1698
|
kv: Ct,
|
|
1693
1699
|
cache: ot,
|
|
1694
1700
|
snapshotCache: at,
|
|
1695
|
-
...
|
|
1696
|
-
schemaRegistry:
|
|
1697
|
-
tenantScopedTables:
|
|
1698
|
-
softDeleteScopedTables:
|
|
1699
|
-
dataTransferSnapshot: Hn(
|
|
1700
|
-
dataTransferDialect:
|
|
1701
|
+
...p?.reactive === void 0 ? {} : { reactive: p.reactive },
|
|
1702
|
+
schemaRegistry: Ue,
|
|
1703
|
+
tenantScopedTables: _.tenantScopedTables,
|
|
1704
|
+
softDeleteScopedTables: _.softDeleteScopedTables,
|
|
1705
|
+
dataTransferSnapshot: Hn(x, h),
|
|
1706
|
+
dataTransferDialect: h,
|
|
1701
1707
|
...Gr === void 0 ? {} : { ensureTenantProvisioned: Gr.ensure },
|
|
1702
1708
|
...qr === void 0 ? {} : { resolveResidentStore: qr.resolveStore },
|
|
1703
|
-
tenantIsolation: (process.env.VOLTRO_TENANT_ISOLATION ??
|
|
1709
|
+
tenantIsolation: (process.env.VOLTRO_TENANT_ISOLATION ?? p?.tenancy?.isolation) === "namespace" ? "namespace" : "shared-schema",
|
|
1704
1710
|
resolveSubject: (e, t) => In({
|
|
1705
1711
|
headers: e,
|
|
1706
1712
|
clientId: t
|
|
1707
1713
|
}),
|
|
1708
|
-
...
|
|
1709
|
-
...
|
|
1714
|
+
...p?.auth === void 0 ? {} : { authority: p.auth },
|
|
1715
|
+
...p?.agents === void 0 ? {} : { agents: p.agents },
|
|
1710
1716
|
httpRoutes: j.flatMap((e) => e.httpRoutes ?? []),
|
|
1711
|
-
getStore: () =>
|
|
1717
|
+
getStore: () => Ge,
|
|
1712
1718
|
...Jn ? { baseLayer: Jn } : {},
|
|
1713
1719
|
...sr === void 0 ? {} : { workflowEngineLayer: sr },
|
|
1714
1720
|
scheduleDefaultTrigger: $n,
|
|
1715
1721
|
scheduleCoordination: nr,
|
|
1716
1722
|
scheduleArmSelf: !q,
|
|
1717
|
-
dormancy: process.env.VOLTRO_DORMANCY === "sleep" || process.env.VOLTRO_DORMANCY === "always-on" ? process.env.VOLTRO_DORMANCY :
|
|
1723
|
+
dormancy: process.env.VOLTRO_DORMANCY === "sleep" || process.env.VOLTRO_DORMANCY === "always-on" ? process.env.VOLTRO_DORMANCY : p?.dormancy ?? "always-on",
|
|
1718
1724
|
scheduleReplicaId: process.env.HOSTNAME ?? `pid-${process.pid}`,
|
|
1719
1725
|
...cr === void 0 ? {} : { scheduleFireInterceptor: cr },
|
|
1720
1726
|
onSchedulerReady: (e) => {
|
|
1721
1727
|
ar = e;
|
|
1722
1728
|
},
|
|
1723
|
-
inspectRoute: { handle: async (e, t, n, r) => await
|
|
1729
|
+
inspectRoute: { handle: async (e, t, n, r) => await ne(e, Ur, t, {
|
|
1724
1730
|
method: n,
|
|
1725
1731
|
...r === void 0 ? {} : { body: r }
|
|
1726
1732
|
}) || ((n === "GET" ? await dn(e, Ur, t, { method: n }) : null) ?? un(e, Ur, t, {
|
|
@@ -1731,36 +1737,36 @@ var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t)
|
|
|
1731
1737
|
contentType: "application/json",
|
|
1732
1738
|
body: JSON.stringify({ error: "not an inspect route" })
|
|
1733
1739
|
}) },
|
|
1734
|
-
...
|
|
1740
|
+
...p?.name === void 0 ? {} : { appName: p.name },
|
|
1735
1741
|
observability: B,
|
|
1736
|
-
port:
|
|
1737
|
-
...
|
|
1742
|
+
port: m,
|
|
1743
|
+
...p?.transport?.wsPath ? { path: p.transport.wsPath } : {}
|
|
1738
1744
|
});
|
|
1739
|
-
return jn = Z.dispatcher,
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1745
|
+
return jn = Z.dispatcher, we(Pt([
|
|
1746
|
+
_.queries,
|
|
1747
|
+
_.mutations,
|
|
1748
|
+
_.actions,
|
|
1749
|
+
_.streams
|
|
1744
1750
|
]), (e) => {
|
|
1745
1751
|
$.warn(e);
|
|
1746
|
-
}), $.info(`API listening on :${
|
|
1747
|
-
dialect:
|
|
1748
|
-
queries:
|
|
1749
|
-
mutations:
|
|
1750
|
-
actions:
|
|
1751
|
-
streams:
|
|
1752
|
-
workflows:
|
|
1753
|
-
workflowWorkers:
|
|
1752
|
+
}), $.info(`API listening on :${m}`, {
|
|
1753
|
+
dialect: h,
|
|
1754
|
+
queries: _.queries.length,
|
|
1755
|
+
mutations: _.mutations.length,
|
|
1756
|
+
actions: _.actions.length,
|
|
1757
|
+
streams: _.streams.length,
|
|
1758
|
+
workflows: _.workflows.length,
|
|
1759
|
+
workflowWorkers: _.workflowWorkers.length,
|
|
1754
1760
|
schedules: Zn.length,
|
|
1755
1761
|
scheduleCoordination: nr
|
|
1756
|
-
}),
|
|
1762
|
+
}), l.finish($), Vr(async () => {
|
|
1757
1763
|
for (let e of xn) e.stop();
|
|
1758
1764
|
At.stop();
|
|
1759
1765
|
try {
|
|
1760
|
-
await Z.close(), xt(), Rt?.dispose(), await z.deactivate(), await Mn?.close(), await
|
|
1766
|
+
await Z.close(), xt(), Rt?.dispose(), await z.deactivate(), await Mn?.close(), await Je({
|
|
1761
1767
|
mirror: Et,
|
|
1762
1768
|
log: $
|
|
1763
|
-
}), await
|
|
1769
|
+
}), await Le.dispose(), await w.close?.();
|
|
1764
1770
|
} catch (e) {
|
|
1765
1771
|
console.error("serve: shutdown step failed, exiting anyway:", e);
|
|
1766
1772
|
}
|