@voltro/cli 0.44.1 → 0.45.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 +104 -1
- package/dist/{apiBuild-DvWreIQP.js → apiBuild-CDQBNRDx.js} +1 -1
- package/dist/apiBuild-yJCqJYQ8.js +2 -0
- package/dist/bin.d.ts +16 -0
- package/dist/bin.js +46 -11
- package/dist/{build-Ckc-FA7d.js → build-yvsLG77U.js} +7 -7
- package/dist/{checkCommand-BNfEs4KG.js → checkCommand-Boxov8lr.js} +11 -11
- package/dist/{checkCommand-AlbawIal.js → checkCommand-lrzwOzV1.js} +1 -1
- package/dist/codegen-DcE2li1i.js +2 -0
- package/dist/{codegen-CbpGCWLG.js → codegen-sbN1Y8PB.js} +37 -37
- package/dist/codegenCommand-CQOLytL-.js +144 -0
- package/dist/{codemodRunner-BKTnaGOz.js → codemodRunner-5ZhDH3rB.js} +41 -0
- package/dist/{commands-CYkHTox2.js → commands-CEkVoFM5.js} +19 -19
- package/dist/{dashboardCommand-DHDmlo9A.js → dashboardCommand-0ahyp-zA.js} +1 -1
- package/dist/{dataCommand-WFn8CM11.js → dataCommand-D4IlZcih.js} +275 -211
- package/dist/{dev-D-JZ6CGQ.js → dev-DAM5CnAa.js} +1856 -1801
- package/dist/{dev-BZO5aLdr.js → dev-P4HyeY9W.js} +1 -1
- package/dist/devActivity.d.ts +16 -0
- package/dist/doctorCommand-2K1dIzYk.js +2 -0
- package/dist/{doctorCommand-BlUyESpD.js → doctorCommand-DW2cwAvC.js} +244 -223
- package/dist/doctorSourceRelations-CPjSwYuZ.js +83 -0
- package/dist/{dormancyCommand-lQxdrU8C.js → dormancyCommand-BqQz7lbM.js} +1 -1
- package/dist/{embeddingsCommand-ByBTju6X.js → embeddingsCommand-DJyArpU4.js} +1 -1
- package/dist/{envCommand-CpCbYAgR.js → envCommand-CviRZx1L.js} +1 -1
- package/dist/{evolveCommand-CBV3-TtK.js → evolveCommand-qdlP-R9G.js} +2 -2
- package/dist/index.d.ts +16 -0
- package/dist/index.js +1 -1
- package/dist/{infoCommand-DJoA9cKD.js → infoCommand-CNWPSUcW.js} +1 -1
- package/dist/inspectState.d.ts +16 -0
- package/dist/{runtimeTrace-DJ9tPhrc.js → runtimeTrace-BDZSt9W_.js} +1 -1
- package/dist/{sdkgen-7dr8-Onw.js → sdkgen-sNaD3oZB.js} +1 -1
- package/dist/{serveCommand-BlnAlNQg.js → serveCommand-BBhT2U94.js} +731 -737
- package/dist/serveCommand-DY2jLy0o.js +2 -0
- package/dist/serveEntry.d.ts +16 -0
- package/dist/serveEntry.js +1 -1
- package/dist/startEntry.d.ts +16 -0
- package/dist/startup.d.ts +16 -0
- package/dist/{test-CLYXrZ2F.js → test-CHb7UwvE.js} +1 -1
- package/dist/updateCommand-BH6EGuCc.js +2 -0
- package/dist/{updateCommand-BvRidHp6.js → updateCommand-rCnhaj84.js} +1 -1
- package/dist/{webhooksCommand-BfO_JF2b.js → webhooksCommand-C0iZZfaI.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 +41 -1
- package/templates/agent-docs/data.md +33 -3
- package/templates/agent-docs/plugins/versioning.md +2 -0
- package/templates/agent-docs/whats-new.md +93 -6
- 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-XaW40W8x.js +0 -2
- package/dist/codegen-i8QGcHsi.js +0 -2
- package/dist/codegenCommand-iClXoRCW.js +0 -129
- package/dist/doctorCommand-BeLOwq7S.js +0 -2
- package/dist/serveCommand-Dg_E1ev4.js +0 -2
- package/dist/updateCommand-DcKVmLVN.js +0 -2
|
@@ -3,46 +3,46 @@ 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 c, A as l, At as u, B as d, C as ee,
|
|
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
|
|
23
|
-
import { createWriteStream as
|
|
24
|
-
import { pathToFileURL as
|
|
25
|
-
import { createLogger as
|
|
26
|
-
import { AuthMiddleware as
|
|
27
|
-
import { Cause as
|
|
28
|
-
import { SqlClient as
|
|
29
|
-
import { declaredSnapshot as
|
|
6
|
+
import { $ as s, $t as c, A as l, At as u, B as d, C as ee, Cn as f, Ct as p, D as te, Dt as ne, E as m, Et as h, F as re, Ft as ie, G as g, Gt as ae, H as oe, I as se, It as ce, J as le, Jt as _, K as ue, Kt as v, L as de, Lt as y, M as fe, Mt as pe, 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 b, Rt as Se, S as Ce, Sn as we, St as Te, T as x, Tn as Ee, Tt as De, U as Oe, Ut as ke, V as Ae, Vt as je, W as Me, Wt as Ne, X as Pe, Xt as Fe, Y as Ie, Yt as S, Z as Le, Zt as C, _ as Re, _n as ze, _t as Be, an as Ve, at as He, b as Ue, bn as We, bt as Ge, c as Ke, cn as w, ct as qe, dn as Je, dt as Ye, en as Xe, et as Ze, f as Qe, fn as $e, ft as et, g as tt, gn as nt, gt as rt, h as it, ht as at, i as ot, in as st, it as ct, j as lt, jt as ut, k as T, kt as dt, ln as ft, lt as pt, m as E, mn as D, mt, nn as ht, nt as gt, o as O, on as _t, ot as vt, p as yt, pn as bt, pt as xt, q as St, qt as Ct, r as wt, rn as Tt, rt as Et, sn as Dt, st as Ot, t as kt, tn as At, tt as jt, u as k, un as A, ut as Mt, v as Nt, vn as j, vt as Pt, w as Ft, wn as It, wt as Lt, x as Rt, xt as zt, y as Bt, yn as Vt, yt as Ht, zt as Ut } from "./dev-DAM5CnAa.js";
|
|
7
|
+
import { n as Wt } from "./cliArgs-D4p8n7EE.js";
|
|
8
|
+
import { r as M } from "./appPort-B_HpJ_ck.js";
|
|
9
|
+
import { ht as Gt, pt as Kt } from "./webDev-101csg6Q.js";
|
|
10
|
+
import { r as N } from "./dialectDriver-czCHYpeH.js";
|
|
11
|
+
import { i as qt, n as Jt } from "./connectionConfig-Bk9IC7D0.js";
|
|
12
|
+
import { c as Yt, n as P, o as Xt } from "./seedRunner-IdHEprqf.js";
|
|
13
|
+
import { C as Zt, S as Qt, _ as $t, d as en, g as tn, l as nn, m as rn, r as an, u as on, v as sn } from "./frameworkTableAssembly-oMPBKqlE.js";
|
|
14
|
+
import { S as cn, c as ln, n as un, p as dn, s as fn, x as pn } from "./fileConventions-Cof68_BL.js";
|
|
15
|
+
import { h as mn, o as hn } from "./inspect-B7U7Cl_Z.js";
|
|
16
|
+
import { n as gn } from "./mssqlClusterPatch-_4cE_nun.js";
|
|
17
|
+
import { i as _n, n as vn, r as yn, t as bn } from "./webhookDiscovery-CphsQe59.js";
|
|
18
|
+
import { t as xn } from "./inspectMetrics-CfdKLh6t.js";
|
|
19
|
+
import { r as Sn, u as Cn } from "./apiBuild-CDQBNRDx.js";
|
|
20
|
+
import { t as wn } from "./bootTiming-BdyP9nYw.js";
|
|
21
|
+
import { t as Tn } from "./dataProfile-Cm0YVKSy.js";
|
|
22
|
+
import F, { basename as En, join as Dn } from "node:path";
|
|
23
|
+
import { createWriteStream as On, existsSync as kn } from "node:fs";
|
|
24
|
+
import { pathToFileURL as An } from "node:url";
|
|
25
|
+
import { createLogger as I } from "@voltro/logger";
|
|
26
|
+
import { AuthMiddleware as jn, ConnectionInfoMiddleware as Mn, actionToRpc as L, anonymousSubject as Nn, isWireReachable as Pn, mutationToRpc as Fn, queryToRpc as R, streamToRpc as In, wireErrorUnion as z, workflowCancelDescriptor as Ln, workflowDomainEventsQueryDescriptor as B, workflowEventDeliveriesQueryDescriptor as V, workflowResumeDescriptor as Rn, workflowRunEventsQueryDescriptor as zn, workflowRunQueryDescriptor as Bn, workflowRunStepsQueryDescriptor as Vn, workflowRunsQueryDescriptor as Hn, workflowSignalDescriptor as Un, workflowUpdateDescriptor as Wn } from "@voltro/protocol";
|
|
27
|
+
import { Cause as Gn, Effect as H, Layer as U, ManagedRuntime as Kn } from "effect";
|
|
28
|
+
import { SqlClient as qn } from "@effect/sql";
|
|
29
|
+
import { declaredSnapshot as Jn, describeOutcome as Yn, pendingFileMigrationIds as Xn, runPlannedMigrations as Zn } from "@voltro/database/sql";
|
|
30
30
|
import W from "node:os";
|
|
31
|
-
import { RpcGroup as
|
|
32
|
-
import { allRegisteredTables as
|
|
33
|
-
import { AggregateRegistry as
|
|
34
|
-
import { appStorageProvider as
|
|
35
|
-
import { isEnvContract as
|
|
36
|
-
import { assertProductionSessionSecret as
|
|
31
|
+
import { RpcGroup as Qn } from "@effect/rpc";
|
|
32
|
+
import { allRegisteredTables as $n, and as er, connectionIdentity as tr, ensureTableRegistered as nr, eq as G, or as rr } from "@voltro/database";
|
|
33
|
+
import { AggregateRegistry as ir, CostRegistry as K, DORMANCY_WAKEUP_TENANT as ar, Dispatcher as or, ExpectationRegistry as sr, ExperimentRegistry as cr, apiKeyManagementRoutes as lr, attachAnalyticsMirror as ur, attachExpectations as dr, attachExperiments as fr, attachFinops as pr, awaitServerListening as mr, bindMutation as q, bindStream as hr, bindSubscription as J, buildTracingLayer as gr, cancelWakeup as _r, compileCron as vr, dataStoreApiKeyStore as yr, formatServerOnlyLeaks as br, formatUnresolvedSources as xr, frameworkApiKeyStrategy as Sr, getResourcePolicy as Cr, installPolicyGuardResolver as wr, loadResourceTuples as Tr, makeActionRunner as Er, makeAdvisoryLockCoordinator as Dr, makeApiKeyService as Or, makeApiKeyUsageBuffer as kr, makeApiKeyUsageFlusher as Ar, makeAsyncKv as jr, makeAuthMiddlewareLayers as Mr, makeCoordinatedScheduler as Nr, makeEffectStoreLayer as Pr, makeLazyWorkflowFacade as Fr, makeMutationOutputCodec as Ir, makeMutationRunner as Lr, makeOneShotQueryRunner as Rr, makeQueryDescriptorProducer as zr, makeQueryFinalizer as Br, makeQueryReauthorizer as Y, makeQuerySubscriber as Vr, makeSchemaRegistry as Hr, makeWorkflowFacade as Ur, makeWorkflowFacadeWithCallerContext as Wr, makeWorkflowLayers as Gr, noopKv as Kr, onProcessShutdown as qr, recordSubscriptionDelivery as Jr, recordWorkflowRun as Yr, registerDefaultTupleSource as X, registerWakeup as Xr, resolveSecretsBackend as Zr, runProvidedEffect as Qr, setSecretsBackend as $r, setSystemStoreHandle as ei, shutdownGraceMsFromEnv as ti, singleCoordinator as ni, startRpcServer as ri, startScheduler as ii, stripForbiddenForWire as ai, undoCaptureEnabled as oi, unresolvedSources as si, withScopedRequest as ci, workflowToRpc as li, wrapStoreWithBootCodec as ui } from "@voltro/runtime";
|
|
34
|
+
import { appStorageProvider as di, fromNodeReadable as fi, getObjectStream as pi, putObjectStream as mi, toNodeReadable as hi } from "@voltro/plugin-storage";
|
|
35
|
+
import { isEnvContract as gi } from "@voltro/env";
|
|
36
|
+
import { assertProductionSessionSecret as _i } from "@voltro/protocol/session";
|
|
37
37
|
import Z from "node:fs/promises";
|
|
38
|
-
import { createHash as
|
|
39
|
-
import { buildDeliverWebhookExecute as
|
|
40
|
-
import { getAuthSessionStrategy as
|
|
41
|
-
import { registerEmailTemplates as
|
|
42
|
-
import { channelFor as
|
|
43
|
-
import { packBundle as
|
|
38
|
+
import { createHash as vi, timingSafeEqual as yi } from "node:crypto";
|
|
39
|
+
import { buildDeliverWebhookExecute as bi, buildWebhooksService as xi, defaultIncomingPath as Si, deliverWebhookWorkflow as Ci, makeDeferredEmitHandler as wi, mountIncomingWebhook as Ti } from "@voltro/plugin-webhooks";
|
|
40
|
+
import { getAuthSessionStrategy as Ei } from "@voltro/plugin-auth";
|
|
41
|
+
import { registerEmailTemplates as Di } from "@voltro/plugin-mail";
|
|
42
|
+
import { channelFor as Oi, getBroadcastPlugin as ki } from "@voltro/plugin-broadcast";
|
|
43
|
+
import { packBundle as Ai, runExport as ji, runImport as Mi, storageBlobSink as Ni, storageRefsBlobSource as Pi, unpackBundle as Fi, unpackBundleToDir as Ii } from "@voltro/data-transfer";
|
|
44
44
|
//#region src/serveDrain.ts
|
|
45
|
-
var
|
|
45
|
+
var Li = () => Math.max(500, Math.floor(ti() * .6)), Ri = (e) => new Promise((t) => setTimeout(t, e)), zi = (e) => {
|
|
46
46
|
let t = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Set(), r = 0;
|
|
47
47
|
e.on("connection", (e) => {
|
|
48
48
|
t.add(e), e.once("close", () => {
|
|
@@ -56,14 +56,14 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
56
56
|
});
|
|
57
57
|
});
|
|
58
58
|
let i, a = async (t = {}) => {
|
|
59
|
-
let n = t.budgetMs ??
|
|
59
|
+
let n = t.budgetMs ?? Li();
|
|
60
60
|
i ??= new Promise((t) => {
|
|
61
61
|
e.close(() => {
|
|
62
62
|
t();
|
|
63
63
|
});
|
|
64
64
|
}), e.closeIdleConnections();
|
|
65
65
|
let a = Date.now() + n;
|
|
66
|
-
for (; r > 0 && Date.now() < a;) await
|
|
66
|
+
for (; r > 0 && Date.now() < a;) await Ri(25), e.closeIdleConnections();
|
|
67
67
|
e.closeIdleConnections();
|
|
68
68
|
}, o = async () => {
|
|
69
69
|
i ??= new Promise((t) => {
|
|
@@ -80,7 +80,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
80
80
|
]));
|
|
81
81
|
} catch {}
|
|
82
82
|
else e.destroy();
|
|
83
|
-
for (let e = 0; t.size > 0 && e < 250; e += 25) await
|
|
83
|
+
for (let e = 0; t.size > 0 && e < 250; e += 25) await Ri(25);
|
|
84
84
|
for (let e of t) e.destroy();
|
|
85
85
|
await i;
|
|
86
86
|
};
|
|
@@ -92,96 +92,96 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
92
92
|
await a(e), await o();
|
|
93
93
|
}
|
|
94
94
|
};
|
|
95
|
-
},
|
|
95
|
+
}, Bi = "/_voltro/admin/import", Vi = "/_voltro/admin/export", Q = (e, t) => ({
|
|
96
96
|
status: e,
|
|
97
97
|
contentType: "application/json; charset=utf-8",
|
|
98
98
|
body: JSON.stringify(t)
|
|
99
|
-
}),
|
|
99
|
+
}), Hi = (e) => {
|
|
100
100
|
let t = e.authorization ?? e.Authorization, n = t ? /^Bearer\s+(.+)$/i.exec(t) : null;
|
|
101
101
|
return n ? n[1] : null;
|
|
102
|
-
},
|
|
102
|
+
}, Ui = (e, t) => yi(vi("sha256").update(e).digest(), vi("sha256").update(t).digest()), Wi = (e, t) => {
|
|
103
103
|
if (e.method.toUpperCase() !== "POST") return Q(405, { error: "method not allowed" });
|
|
104
104
|
if (!t || t.length < 16) return Q(503, { error: "data transfer misconfigured (no/weak secret)" });
|
|
105
|
-
let n =
|
|
106
|
-
return !n || !
|
|
107
|
-
},
|
|
105
|
+
let n = Hi(e.headers);
|
|
106
|
+
return !n || !Ui(n, t) ? Q(401, { error: "unauthorized" }) : null;
|
|
107
|
+
}, Gi = /^[A-Za-z0-9_-]{8,64}$/, Ki = (e) => Gi.test(e), qi = () => F.join(W.tmpdir(), "voltro-import-uploads"), Ji = (e) => F.join(qi(), e), Yi = (e) => F.join(Ji(e), "archive.bin"), Xi = (e) => F.join(Ji(e), "meta.json"), Zi = async (e = Date.now()) => {
|
|
108
108
|
let t = 0;
|
|
109
109
|
try {
|
|
110
|
-
for (let n of await Z.readdir(
|
|
111
|
-
let r = await Z.stat(
|
|
112
|
-
r !== null && (e - r.mtimeMs <= 864e5 || (await Z.rm(
|
|
110
|
+
for (let n of await Z.readdir(qi())) {
|
|
111
|
+
let r = await Z.stat(Ji(n)).catch(() => null);
|
|
112
|
+
r !== null && (e - r.mtimeMs <= 864e5 || (await Z.rm(Ji(n), {
|
|
113
113
|
recursive: !0,
|
|
114
114
|
force: !0
|
|
115
115
|
}).catch(() => void 0), t++));
|
|
116
116
|
}
|
|
117
117
|
} catch {}
|
|
118
118
|
return t;
|
|
119
|
-
},
|
|
120
|
-
if (!
|
|
119
|
+
}, Qi = async (e) => {
|
|
120
|
+
if (!Ki(e)) return {
|
|
121
121
|
bytes: 0,
|
|
122
122
|
key: null
|
|
123
123
|
};
|
|
124
|
-
let t = await Z.stat(
|
|
124
|
+
let t = await Z.stat(Yi(e)).catch(() => null);
|
|
125
125
|
if (t === null) return {
|
|
126
126
|
bytes: 0,
|
|
127
127
|
key: null
|
|
128
128
|
};
|
|
129
|
-
let n = await Z.readFile(
|
|
129
|
+
let n = await Z.readFile(Xi(e), "utf8").then((e) => JSON.parse(e), () => ({}));
|
|
130
130
|
return {
|
|
131
131
|
bytes: t.size,
|
|
132
132
|
key: n.key ?? null
|
|
133
133
|
};
|
|
134
|
-
},
|
|
135
|
-
if (!
|
|
134
|
+
}, $i = async (e) => {
|
|
135
|
+
if (!Ki(e.id)) return {
|
|
136
136
|
reason: "bad-id",
|
|
137
|
-
message: `upload id must match ${String(
|
|
137
|
+
message: `upload id must match ${String(Gi)}`
|
|
138
138
|
};
|
|
139
|
-
let t = await
|
|
139
|
+
let t = await Qi(e.id);
|
|
140
140
|
return t.key !== null && t.key !== e.key ? {
|
|
141
141
|
reason: "key-mismatch",
|
|
142
142
|
message: "this upload id already holds a different bundle. Use a new upload id, or delete the partial upload."
|
|
143
|
-
} : e.offset === t.bytes ? (await Z.mkdir(
|
|
143
|
+
} : e.offset === t.bytes ? (await Z.mkdir(Ji(e.id), { recursive: !0 }), t.key === null && await Z.writeFile(Xi(e.id), JSON.stringify({
|
|
144
144
|
key: e.key,
|
|
145
145
|
startedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
146
146
|
})), await new Promise((t, n) => {
|
|
147
|
-
let r =
|
|
147
|
+
let r = On(Yi(e.id), { flags: "a" });
|
|
148
148
|
r.on("error", n), r.on("finish", () => t()), r.end(Buffer.from(e.bytes));
|
|
149
149
|
}), { total: t.bytes + e.bytes.byteLength }) : {
|
|
150
150
|
reason: "offset-mismatch",
|
|
151
151
|
message: `chunk starts at ${e.offset} but the server holds ${t.bytes} byte(s)`,
|
|
152
152
|
expectedOffset: t.bytes
|
|
153
153
|
};
|
|
154
|
-
},
|
|
155
|
-
let t = await Z.stat(
|
|
154
|
+
}, ea = async (e) => {
|
|
155
|
+
let t = await Z.stat(Yi(e));
|
|
156
156
|
return {
|
|
157
|
-
path:
|
|
157
|
+
path: Yi(e),
|
|
158
158
|
bytes: t.size
|
|
159
159
|
};
|
|
160
|
-
},
|
|
161
|
-
|
|
160
|
+
}, ta = async (e) => {
|
|
161
|
+
Ki(e) && await Z.rm(Ji(e), {
|
|
162
162
|
recursive: !0,
|
|
163
163
|
force: !0
|
|
164
164
|
}).catch(() => void 0);
|
|
165
|
-
},
|
|
165
|
+
}, na = I({ scope: "voltro:admin-import" }), ra = "VBUNDLE2", ia = async function* (e) {
|
|
166
166
|
yield e;
|
|
167
|
-
},
|
|
168
|
-
let n =
|
|
167
|
+
}, aa = (e) => async (t) => {
|
|
168
|
+
let n = Wi(t, e.secret);
|
|
169
169
|
if (n) return n;
|
|
170
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
171
|
if (u !== void 0 && u !== "") {
|
|
172
|
-
if (
|
|
172
|
+
if (Zi(), t.headers["x-import-probe"] === "1") return Q(200, {
|
|
173
173
|
uploadId: u,
|
|
174
|
-
bytes: (await
|
|
174
|
+
bytes: (await Qi(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
|
-
let r = await
|
|
178
|
+
let r = await $i({
|
|
179
179
|
id: u,
|
|
180
180
|
key: e,
|
|
181
181
|
offset: n,
|
|
182
182
|
bytes: t.rawBody
|
|
183
183
|
});
|
|
184
|
-
if ("reason" in r) return
|
|
184
|
+
if ("reason" in r) return na.warn("admin.import chunk refused", {
|
|
185
185
|
uploadId: u,
|
|
186
186
|
reason: r.reason
|
|
187
187
|
}), Q(409, {
|
|
@@ -194,13 +194,13 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
194
194
|
uploadId: u,
|
|
195
195
|
bytes: r.total
|
|
196
196
|
});
|
|
197
|
-
d = (await
|
|
197
|
+
d = (await ea(u)).path;
|
|
198
198
|
}
|
|
199
|
-
let ee = t.rawBody.byteLength >= 8 && Buffer.from(t.rawBody.subarray(0, 8)).toString("latin1") ===
|
|
199
|
+
let ee = t.rawBody.byteLength >= 8 && Buffer.from(t.rawBody.subarray(0, 8)).toString("latin1") === ra, f, p;
|
|
200
200
|
if (d !== void 0) {
|
|
201
201
|
let { createReadStream: e } = await import("node:fs");
|
|
202
202
|
f = e(d), p = "chunked";
|
|
203
|
-
} else if (ee) f =
|
|
203
|
+
} else if (ee) f = ia(t.rawBody), p = "upload";
|
|
204
204
|
else {
|
|
205
205
|
let n;
|
|
206
206
|
try {
|
|
@@ -214,11 +214,11 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
214
214
|
}
|
|
215
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
|
|
217
|
+
e.assetSink ? await Fi(f, {
|
|
218
218
|
dir: h,
|
|
219
219
|
blobs: e.assetSink
|
|
220
|
-
}) : await
|
|
221
|
-
let t = await H.runPromiseExit(
|
|
220
|
+
}) : await Ii(f, h);
|
|
221
|
+
let t = await H.runPromiseExit(Mi({
|
|
222
222
|
store: e.store,
|
|
223
223
|
bundleDir: h,
|
|
224
224
|
...r ? { mode: r } : {},
|
|
@@ -228,14 +228,14 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
228
228
|
...l.length > 0 ? { tables: l } : {},
|
|
229
229
|
...e.snapshot ? { targetSnapshot: e.snapshot } : {},
|
|
230
230
|
force: s,
|
|
231
|
-
onWarn: (e) =>
|
|
231
|
+
onWarn: (e) => na.warn("admin.import", { message: e }),
|
|
232
232
|
...e.assetSink ? { assetsAlreadyRestored: !0 } : {}
|
|
233
233
|
}));
|
|
234
234
|
if (t._tag === "Failure") {
|
|
235
235
|
let e = t.cause._tag === "Fail" ? t.cause.error : void 0;
|
|
236
236
|
if (e && e._tag === "SchemaDriftError") {
|
|
237
237
|
let t = e;
|
|
238
|
-
return
|
|
238
|
+
return na.warn("admin.import refused (schema drift)", {
|
|
239
239
|
transport: p,
|
|
240
240
|
bundle: t.bundleFingerprint.slice(0, 16),
|
|
241
241
|
target: t.targetFingerprint.slice(0, 16)
|
|
@@ -248,7 +248,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
248
248
|
});
|
|
249
249
|
}
|
|
250
250
|
let n = typeof e?.reason == "string" ? e.reason : void 0;
|
|
251
|
-
if (n !== void 0 && e._tag === "ImportModeError") return
|
|
251
|
+
if (n !== void 0 && e._tag === "ImportModeError") return na.warn("admin.import refused (mode)", {
|
|
252
252
|
transport: p,
|
|
253
253
|
mode: e.mode
|
|
254
254
|
}), Q(409, {
|
|
@@ -259,7 +259,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
259
259
|
throw Error(n ?? String(e?.message ?? e ?? "import failed"));
|
|
260
260
|
}
|
|
261
261
|
let n = t.value, a = n.manifest.tables.reduce((e, t) => e + t.rowCount, 0), u = n.rowsWritten;
|
|
262
|
-
return
|
|
262
|
+
return na.info(c ? "admin.import (dry run — nothing written)" : "admin.import", {
|
|
263
263
|
transport: p,
|
|
264
264
|
tables: n.tablesWritten,
|
|
265
265
|
rows: u,
|
|
@@ -286,7 +286,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
286
286
|
} : {}
|
|
287
287
|
});
|
|
288
288
|
} catch (e) {
|
|
289
|
-
return
|
|
289
|
+
return na.warn("admin.import failed", {
|
|
290
290
|
transport: p,
|
|
291
291
|
error: e?.message ?? String(e)
|
|
292
292
|
}), Q(500, {
|
|
@@ -297,20 +297,20 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
297
297
|
await ne.rm(h, {
|
|
298
298
|
recursive: !0,
|
|
299
299
|
force: !0
|
|
300
|
-
}), u !== void 0 && u !== "" && d !== void 0 && await
|
|
300
|
+
}), u !== void 0 && u !== "" && d !== void 0 && await ta(u);
|
|
301
301
|
}
|
|
302
|
-
},
|
|
302
|
+
}, oa = I({ scope: "voltro:admin-export" }), sa = async (e) => {
|
|
303
303
|
let t = [];
|
|
304
304
|
for await (let n of e) t.push(Buffer.from(n));
|
|
305
305
|
return new Uint8Array(Buffer.concat(t));
|
|
306
|
-
},
|
|
306
|
+
}, ca = (e) => typeof e.tenant == "string" && e.tenant ? {
|
|
307
307
|
kind: "tenant",
|
|
308
308
|
tenantId: e.tenant
|
|
309
309
|
} : Array.isArray(e.tables) && e.tables.length ? {
|
|
310
310
|
kind: "tables",
|
|
311
311
|
tables: e.tables.filter((e) => typeof e == "string")
|
|
312
|
-
} : { kind: "all" },
|
|
313
|
-
let n =
|
|
312
|
+
} : { kind: "all" }, la = (e) => async (t) => {
|
|
313
|
+
let n = Wi(t, e.secret);
|
|
314
314
|
if (n) return n;
|
|
315
315
|
let r;
|
|
316
316
|
try {
|
|
@@ -330,9 +330,9 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
330
330
|
});
|
|
331
331
|
}
|
|
332
332
|
}
|
|
333
|
-
let a = r.consistency === "snapshot" ? "snapshot" : i.consistency ?? "live", o = (typeof r.compression == "string" ? r.compression : void 0) ?? i.compression, s = i.scope ??
|
|
333
|
+
let a = r.consistency === "snapshot" ? "snapshot" : i.consistency ?? "live", o = (typeof r.compression == "string" ? r.compression : void 0) ?? i.compression, s = i.scope ?? ca(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-"));
|
|
334
334
|
try {
|
|
335
|
-
let t = await H.runPromise(
|
|
335
|
+
let t = await H.runPromise(ji({
|
|
336
336
|
store: e.store,
|
|
337
337
|
snapshot: e.snapshot,
|
|
338
338
|
dialect: e.dialect,
|
|
@@ -348,10 +348,10 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
348
348
|
if (c) {
|
|
349
349
|
if (!e.putArchive) return Q(501, { error: "storage transport not configured on this instance" });
|
|
350
350
|
let i = r.bundleKey;
|
|
351
|
-
return await e.putArchive(i, () =>
|
|
351
|
+
return await e.putArchive(i, () => Ai({
|
|
352
352
|
dir: f,
|
|
353
353
|
...l
|
|
354
|
-
})),
|
|
354
|
+
})), oa.info("admin.export", {
|
|
355
355
|
transport: "storage",
|
|
356
356
|
tables: t.tables.length,
|
|
357
357
|
rows: n,
|
|
@@ -365,11 +365,11 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
365
365
|
transport: "storage"
|
|
366
366
|
});
|
|
367
367
|
}
|
|
368
|
-
let d = await
|
|
368
|
+
let d = await sa(Ai({
|
|
369
369
|
dir: f,
|
|
370
370
|
...l
|
|
371
371
|
}));
|
|
372
|
-
return
|
|
372
|
+
return oa.info("admin.export", {
|
|
373
373
|
transport: "download",
|
|
374
374
|
tables: t.tables.length,
|
|
375
375
|
rows: n,
|
|
@@ -386,7 +386,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
386
386
|
}
|
|
387
387
|
};
|
|
388
388
|
} catch (e) {
|
|
389
|
-
return
|
|
389
|
+
return oa.warn("admin.export failed", { error: e?.message ?? String(e) }), Q(500, {
|
|
390
390
|
error: "export failed",
|
|
391
391
|
message: e?.message ?? String(e)
|
|
392
392
|
});
|
|
@@ -396,8 +396,8 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
396
396
|
force: !0
|
|
397
397
|
});
|
|
398
398
|
}
|
|
399
|
-
},
|
|
400
|
-
let r = await H.runPromise(
|
|
399
|
+
}, ua = (e, t, n = {}) => (async function* () {
|
|
400
|
+
let r = await H.runPromise(pi(e, t).pipe(H.timeout(n.openTimeout ?? "30 seconds"))), i = await hi(r.stream), a = n.stallMs ?? 12e4, o, s = () => {
|
|
401
401
|
o && clearTimeout(o), o = setTimeout(() => i.destroy(/* @__PURE__ */ Error(`storage read stalled for ${a}ms reading '${t}'`)), a);
|
|
402
402
|
};
|
|
403
403
|
try {
|
|
@@ -406,7 +406,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
406
406
|
} finally {
|
|
407
407
|
o && clearTimeout(o), i.destroy();
|
|
408
408
|
}
|
|
409
|
-
})(),
|
|
409
|
+
})(), da = {
|
|
410
410
|
get: async () => void 0,
|
|
411
411
|
set: async () => {},
|
|
412
412
|
setWithTags: async () => {},
|
|
@@ -415,64 +415,64 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
415
415
|
clear: async () => {},
|
|
416
416
|
invalidateTag: async () => 0,
|
|
417
417
|
wrap: async (e, t, n) => n()
|
|
418
|
-
},
|
|
419
|
-
|
|
418
|
+
}, fa = async (e) => {
|
|
419
|
+
Ut(e.appProcedures ?? e.discovered, {
|
|
420
420
|
defaultDeny: e.security?.defaultDeny ?? !0,
|
|
421
421
|
commandHint: "`voltro serve`"
|
|
422
|
-
}),
|
|
422
|
+
}), ei({
|
|
423
423
|
dataStore: e.store,
|
|
424
424
|
schemaRegistry: e.schemaRegistry
|
|
425
425
|
});
|
|
426
|
-
let t = (e.discovered.budgets?.length ?? 0) > 0, n, r = new
|
|
426
|
+
let t = (e.discovered.budgets?.length ?? 0) > 0, n, r = new or({
|
|
427
427
|
store: e.store,
|
|
428
428
|
...e.snapshotCache ? { cache: e.snapshotCache } : {},
|
|
429
429
|
...e.reactive === void 0 ? {} : { reactive: e.reactive },
|
|
430
430
|
...t ? { recordCost: (e) => n?.record(e) } : {},
|
|
431
|
-
recordDelivery: (e) =>
|
|
431
|
+
recordDelivery: (e) => Jr({
|
|
432
432
|
label: e.label,
|
|
433
433
|
kind: e.kind,
|
|
434
434
|
durationMs: e.durationMs,
|
|
435
435
|
rowCount: e.rowCount
|
|
436
436
|
})
|
|
437
|
-
}), i = e.cache ??
|
|
437
|
+
}), i = e.cache ?? da, a = e.kv ?? Kr, o, c = () => void 0, l, ee, f, p, te, ne, m, ce = ae({
|
|
438
438
|
store: e.store,
|
|
439
439
|
warn: (e, t) => {
|
|
440
440
|
process.stderr.write(`[workflow] ${e} ${JSON.stringify(t)}\n`);
|
|
441
441
|
}
|
|
442
|
-
}),
|
|
442
|
+
}), le = ce.remember, ue = ce.resolve, de = v({
|
|
443
443
|
authority: e.authority,
|
|
444
444
|
getStore: () => e.store
|
|
445
|
-
}),
|
|
446
|
-
if (
|
|
445
|
+
}), y = (e.discovered.workflows?.length ?? 0) > 0 ? Fr(() => o) : void 0, pe = (e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.eventTriggers?.length ?? 0) > 0, he = pe || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster", ge = e.tenantIsolation === "namespace", _e = (e.log ?? I({ scope: "voltro:serve" })).child("webhooks"), ve, xe, b = e.discovered.webhooks;
|
|
446
|
+
if (b && b.outgoing.length > 0 && e.workflowEngineLayer !== void 0) {
|
|
447
447
|
e.workflowEngineLayer;
|
|
448
|
-
let t =
|
|
448
|
+
let t = w({
|
|
449
449
|
store: e.store,
|
|
450
450
|
schemaRegistry: e.schemaRegistry,
|
|
451
451
|
cache: i,
|
|
452
452
|
kv: a
|
|
453
|
-
}), n =
|
|
454
|
-
|
|
453
|
+
}), n = b.outgoing.map((e) => e.descriptor);
|
|
454
|
+
xe = Ci.toLayer(bi(t, { events: n })), ve = xi(t, async (e) => {
|
|
455
455
|
let t = f;
|
|
456
456
|
if (t === void 0) {
|
|
457
|
-
|
|
457
|
+
_e.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.", {
|
|
458
458
|
deliveryId: e.deliveryId,
|
|
459
459
|
targetId: e.targetId
|
|
460
460
|
});
|
|
461
461
|
return;
|
|
462
462
|
}
|
|
463
|
-
t.runPromise(
|
|
464
|
-
|
|
463
|
+
t.runPromise(Ci.execute(e)).catch((t) => {
|
|
464
|
+
_e.error("deliverWebhook workflow crashed", {
|
|
465
465
|
deliveryId: e.deliveryId,
|
|
466
466
|
targetId: e.targetId
|
|
467
467
|
}, t);
|
|
468
468
|
});
|
|
469
469
|
}, { events: n });
|
|
470
470
|
}
|
|
471
|
-
let
|
|
472
|
-
if (
|
|
473
|
-
let t = e.descriptor.path ??
|
|
471
|
+
let Se = /* @__PURE__ */ new Map();
|
|
472
|
+
if (b) for (let e of b.incoming) {
|
|
473
|
+
let t = e.descriptor.path ?? Si(e.descriptor.id), n = `VOLTRO_WEBHOOK_SECRET_${e.descriptor.id.toUpperCase().replace(/[^A-Z0-9]/g, "_")}`, r = Ti(e.descriptor, {
|
|
474
474
|
resolveSecret: async () => process.env[n] ?? null,
|
|
475
|
-
resolveWorkflows: () =>
|
|
475
|
+
resolveWorkflows: () => y === void 0 ? void 0 : Wr(y, {
|
|
476
476
|
traceId: `incoming:${e.descriptor.id}`,
|
|
477
477
|
source: `incoming:${e.descriptor.id}`
|
|
478
478
|
}),
|
|
@@ -484,34 +484,34 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
484
484
|
idempotency: e.idempotency,
|
|
485
485
|
durationMs: e.durationMs
|
|
486
486
|
};
|
|
487
|
-
e.status >= 500 ?
|
|
487
|
+
e.status >= 500 ? _e.error("incoming delivery failed", t) : e.status >= 400 ? _e.warn("incoming delivery rejected", t) : _e.info("incoming delivery handled", t);
|
|
488
488
|
}
|
|
489
489
|
});
|
|
490
|
-
|
|
490
|
+
Se.set(t, { handle: r });
|
|
491
491
|
}
|
|
492
|
-
|
|
493
|
-
let
|
|
492
|
+
wr(), X((t) => Tr(e.store, t.subjectId, t.resourceType, t.resourceId)) || I({ scope: "voltro:serve" }).info("policy guards: using the app-registered tuple source");
|
|
493
|
+
let Ce = [], we = [...e.discovered.outboxHandlers ?? [], ...vn((b?.outgoing.length ?? 0) + (b?.incoming.length ?? 0) + (b?.providers.length ?? 0), []) ? [{
|
|
494
494
|
file: "<framework>/webhooks",
|
|
495
495
|
id: "voltro-webhook-emit",
|
|
496
|
-
definition:
|
|
497
|
-
}] : []],
|
|
498
|
-
handlers:
|
|
496
|
+
definition: wi(() => ve)
|
|
497
|
+
}] : []], Te = we.length > 0 ? Fe({
|
|
498
|
+
handlers: we,
|
|
499
499
|
store: e.store,
|
|
500
|
-
log: (e.log ??
|
|
500
|
+
log: (e.log ?? I({ scope: "voltro:serve" })).child("outbox"),
|
|
501
501
|
onChange: (t) => e.store.onChange((e) => t({
|
|
502
502
|
table: e.table,
|
|
503
503
|
op: e.op
|
|
504
504
|
})),
|
|
505
505
|
onShutdown: (e) => {
|
|
506
|
-
|
|
506
|
+
Ce.push(e);
|
|
507
507
|
}
|
|
508
|
-
}) : void 0,
|
|
508
|
+
}) : void 0, x = _({
|
|
509
509
|
definitions: (e.discovered.connections ?? []).map((e) => e.definition),
|
|
510
510
|
store: e.store,
|
|
511
|
-
publicUrl:
|
|
512
|
-
log: (e.log ??
|
|
511
|
+
publicUrl: Ct(e.port ?? 4e3),
|
|
512
|
+
log: (e.log ?? I({ scope: "voltro:serve" })).child("connections")
|
|
513
513
|
});
|
|
514
|
-
|
|
514
|
+
lt({
|
|
515
515
|
events: e.discovered.events ?? [],
|
|
516
516
|
rpcTags: [
|
|
517
517
|
...e.discovered.queries.map((e) => e.descriptor.name),
|
|
@@ -520,201 +520,201 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
520
520
|
...(e.discovered.streams ?? []).map((e) => e.descriptor.name)
|
|
521
521
|
]
|
|
522
522
|
});
|
|
523
|
-
let
|
|
524
|
-
instanceId:
|
|
525
|
-
namespace:
|
|
523
|
+
let Ee = (e.log ?? I({ scope: "voltro:serve" })).child("events"), ke = e.broadcastNamespace ?? tt(e.plugins, void 0), je = Re(e.plugins, ke, Ee), Ne = e.membership?.instanceId ?? process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, Ie = e.membership ?? Nt(e.plugins, {
|
|
524
|
+
instanceId: Ne,
|
|
525
|
+
namespace: ke,
|
|
526
526
|
meta: { mode: "serve" },
|
|
527
|
-
logger:
|
|
528
|
-
}),
|
|
527
|
+
logger: Ee
|
|
528
|
+
}), S = fe({
|
|
529
529
|
events: e.discovered.events ?? [],
|
|
530
|
-
origin:
|
|
531
|
-
...
|
|
532
|
-
}),
|
|
530
|
+
origin: Ne,
|
|
531
|
+
...je.publishRemote === void 0 ? {} : { publishRemote: je.publishRemote }
|
|
532
|
+
}), ze = (e.discovered.events ?? []).length > 0 ? await je.attach(S.bus) : null, Be = Dt({
|
|
533
533
|
store: e.store,
|
|
534
534
|
schemaRegistry: e.schemaRegistry,
|
|
535
535
|
cache: i,
|
|
536
536
|
kv: a,
|
|
537
|
-
...
|
|
538
|
-
...
|
|
537
|
+
...ve === void 0 ? {} : { webhooksService: ve },
|
|
538
|
+
...y === void 0 ? {} : { workflowsProxy: y },
|
|
539
539
|
eventTriggers: e.discovered.eventTriggers ?? [],
|
|
540
|
-
namespaceIsolationOn:
|
|
540
|
+
namespaceIsolationOn: ge,
|
|
541
541
|
...e.ensureTenantProvisioned === void 0 ? {} : { ensureTenantProvisioned: e.ensureTenantProvisioned },
|
|
542
542
|
...e.resolveResidentStore === void 0 ? {} : { resolveResidentStore: e.resolveResidentStore },
|
|
543
|
-
...
|
|
544
|
-
...
|
|
545
|
-
eventBus:
|
|
546
|
-
}),
|
|
547
|
-
let r = t.pipe(H.provide(
|
|
548
|
-
return (e.baseLayer ? r.pipe(H.provide(e.baseLayer)) : r).pipe(H.provide(
|
|
543
|
+
...Te === void 0 ? {} : { outbox: { nudge: Te.nudge } },
|
|
544
|
+
...x.active ? { connections: { registry: x.registry } } : {},
|
|
545
|
+
eventBus: S.bus
|
|
546
|
+
}), Ve = U.succeed(ir, h), He = U.succeed(sr, Ge), Ue = U.succeed(K, Ht), We = U.succeed(cr, zt), Ke = (t, n) => {
|
|
547
|
+
let r = t.pipe(H.provide(Pr(n)));
|
|
548
|
+
return (e.baseLayer ? r.pipe(H.provide(e.baseLayer)) : r).pipe(H.provide(Ve)).pipe(H.provide(He)).pipe(H.provide(Ue)).pipe(H.provide(We));
|
|
549
549
|
}, Je = (e, t) => {
|
|
550
|
-
let n =
|
|
551
|
-
return
|
|
552
|
-
},
|
|
550
|
+
let n = Ke(e, t);
|
|
551
|
+
return Qr(n);
|
|
552
|
+
}, Xe = xn(), Ze = St(e.plugins ?? [], Xe), Qe = d({
|
|
553
553
|
plugins: e.plugins ?? [],
|
|
554
|
-
metrics:
|
|
555
|
-
log: e.log ??
|
|
556
|
-
}), $e =
|
|
554
|
+
metrics: Xe,
|
|
555
|
+
log: e.log ?? I({ scope: "voltro:serve" })
|
|
556
|
+
}), $e = g(e.plugins ?? [], Xe), et = e.security?.defaultDeny ?? !0, nt = Lr({
|
|
557
557
|
store: e.store,
|
|
558
558
|
defaultDeny: et,
|
|
559
559
|
recordMetric: (e) => {
|
|
560
|
-
|
|
560
|
+
Xe.record(e);
|
|
561
561
|
},
|
|
562
|
-
...
|
|
563
|
-
buildContext: (e, t, n) =>
|
|
562
|
+
...Ze.mutation === void 0 ? {} : { interceptor: Ze.mutation },
|
|
563
|
+
buildContext: (e, t, n) => Be(e, t, n),
|
|
564
564
|
runEffect: Je,
|
|
565
|
-
undoCapture:
|
|
566
|
-
}), rt =
|
|
565
|
+
undoCapture: be()
|
|
566
|
+
}), rt = Le();
|
|
567
567
|
{
|
|
568
568
|
let t = s();
|
|
569
|
-
t !== void 0 && (e.log ??
|
|
569
|
+
t !== void 0 && (e.log ?? I({ scope: "voltro:serve" })).info(t);
|
|
570
570
|
}
|
|
571
|
-
let it =
|
|
571
|
+
let it = Pe({
|
|
572
572
|
store: e.store,
|
|
573
573
|
...e.approvals === void 0 ? {} : { defaultExpiryMs: e.approvals.defaultExpiryMs }
|
|
574
|
-
}),
|
|
574
|
+
}), ot = Er({
|
|
575
575
|
defaultDeny: et,
|
|
576
|
-
buildContext: (e) =>
|
|
576
|
+
buildContext: (e) => Be(e),
|
|
577
577
|
runEffect: Je,
|
|
578
578
|
recordMetric: (e) => {
|
|
579
|
-
|
|
579
|
+
Xe.record(e);
|
|
580
580
|
},
|
|
581
|
-
...
|
|
582
|
-
}),
|
|
581
|
+
...Ze.action === void 0 ? {} : { interceptor: Ze.action }
|
|
582
|
+
}), st = Br({
|
|
583
583
|
tenantScopedTables: e.tenantScopedTables,
|
|
584
584
|
softDeleteScopedTables: e.softDeleteScopedTables
|
|
585
|
-
}),
|
|
585
|
+
}), ct = {
|
|
586
586
|
defaultDeny: et,
|
|
587
|
-
buildContext: (e) =>
|
|
588
|
-
finalize: (e, t) =>
|
|
589
|
-
provideEffect:
|
|
590
|
-
...
|
|
591
|
-
},
|
|
592
|
-
...
|
|
593
|
-
queryRows: (t, n) => e.store.query(t).then((e) =>
|
|
594
|
-
}), ft =
|
|
595
|
-
...
|
|
587
|
+
buildContext: (e) => Be(e),
|
|
588
|
+
finalize: (e, t) => st(e, t.subject),
|
|
589
|
+
provideEffect: Ke,
|
|
590
|
+
...Ze.query === void 0 ? {} : { interceptor: Ze.query }
|
|
591
|
+
}, T = zr(ct), dt = Rr({
|
|
592
|
+
...ct,
|
|
593
|
+
queryRows: (t, n) => e.store.query(t).then((e) => ai(t.table, e, n.subject))
|
|
594
|
+
}), ft = Vr({
|
|
595
|
+
...ct,
|
|
596
596
|
subscribeDescriptor: (e, t, n) => r.subscribe(e, t, n),
|
|
597
597
|
subscribeComputed: (e, t, n) => r.subscribeComputed(e, t, n)
|
|
598
|
-
}),
|
|
598
|
+
}), E = (e) => e.filter((e) => Pn(e.descriptor)), D = {};
|
|
599
599
|
for (let t of [
|
|
600
|
-
...
|
|
600
|
+
...E(e.discovered.queries),
|
|
601
601
|
...rt.queries,
|
|
602
602
|
...it.queries,
|
|
603
|
-
...
|
|
604
|
-
])
|
|
603
|
+
...x.queries
|
|
604
|
+
]) D[t.descriptor.name] = (e) => J(T(t, e), r, `subscription.${t.descriptor.name}`, void 0, void 0, Y(t, e));
|
|
605
605
|
for (let t of [
|
|
606
|
-
...
|
|
606
|
+
...E(e.discovered.mutations),
|
|
607
607
|
...rt.mutations,
|
|
608
608
|
...it.mutations,
|
|
609
|
-
...
|
|
609
|
+
...x.mutations
|
|
610
610
|
]) {
|
|
611
|
-
let n =
|
|
612
|
-
|
|
611
|
+
let n = Ir(t.descriptor.output);
|
|
612
|
+
D[t.descriptor.name] = (r) => q(async (e, n) => nt(t, e, n), r, `mutation.${t.descriptor.name}`, n, e.idempotency, z(t.descriptor, "mutation"));
|
|
613
613
|
}
|
|
614
|
-
for (let t of [...
|
|
615
|
-
let n =
|
|
616
|
-
|
|
614
|
+
for (let t of [...E(e.discovered.actions), ...x.actions]) {
|
|
615
|
+
let n = Ir(t.descriptor.output);
|
|
616
|
+
D[t.descriptor.name] = (r) => q(async (e, n) => ot(t, e, n), r, `action.${t.descriptor.name}`, n, e.idempotency, z(t.descriptor, "action"));
|
|
617
617
|
}
|
|
618
|
-
let
|
|
618
|
+
let mt = () => `public-${Math.random().toString(36).slice(2, 10)}`, ht = [
|
|
619
619
|
...e.discovered.queries.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
|
|
620
620
|
descriptor: e.descriptor,
|
|
621
621
|
invoke: (t, n) => dt(e, t, {
|
|
622
622
|
subject: n.subject,
|
|
623
|
-
traceId:
|
|
623
|
+
traceId: mt()
|
|
624
624
|
}),
|
|
625
625
|
subscribe: (t, n, r) => ft(e, t, {
|
|
626
626
|
subject: n.subject,
|
|
627
|
-
traceId:
|
|
627
|
+
traceId: mt()
|
|
628
628
|
}, r)
|
|
629
629
|
})),
|
|
630
630
|
...e.discovered.mutations.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
|
|
631
631
|
descriptor: e.descriptor,
|
|
632
|
-
invoke: (t, n) =>
|
|
632
|
+
invoke: (t, n) => nt(e, t, {
|
|
633
633
|
subject: n.subject,
|
|
634
|
-
traceId:
|
|
634
|
+
traceId: mt()
|
|
635
635
|
})
|
|
636
636
|
})),
|
|
637
637
|
...e.discovered.actions.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
|
|
638
638
|
descriptor: e.descriptor,
|
|
639
|
-
invoke: (t, n) =>
|
|
639
|
+
invoke: (t, n) => ot(e, t, {
|
|
640
640
|
subject: n.subject,
|
|
641
|
-
traceId:
|
|
641
|
+
traceId: mt()
|
|
642
642
|
})
|
|
643
643
|
}))
|
|
644
|
-
],
|
|
645
|
-
candidates:
|
|
644
|
+
], gt = {
|
|
645
|
+
candidates: ie({
|
|
646
646
|
queries: e.discovered.queries,
|
|
647
647
|
mutations: e.discovered.mutations,
|
|
648
648
|
actions: e.discovered.actions,
|
|
649
649
|
descriptorOf: (e) => e.descriptor,
|
|
650
650
|
runQuery: (e, t, n) => Promise.resolve(dt(e, t, n)),
|
|
651
|
-
runMutation: (e, t, n) => Promise.resolve(
|
|
652
|
-
runAction: (e, t, n) => Promise.resolve(
|
|
651
|
+
runMutation: (e, t, n) => Promise.resolve(nt(e, t, n)),
|
|
652
|
+
runAction: (e, t, n) => Promise.resolve(ot(e, t, n))
|
|
653
653
|
}),
|
|
654
654
|
policy: e.agents?.tools ?? {},
|
|
655
655
|
mcpEnabled: e.agents?.mcp === !0,
|
|
656
656
|
resolveSubject: (t) => e.resolveSubject(t, -1).then((e) => e.subject)
|
|
657
|
-
},
|
|
657
|
+
}, O = At({
|
|
658
658
|
...e.restRoutes === void 0 ? {} : { restRoutes: e.restRoutes },
|
|
659
|
-
publicApiEntries:
|
|
659
|
+
publicApiEntries: ht,
|
|
660
660
|
store: e.store,
|
|
661
661
|
resolveSubject: (t) => e.resolveSubject(t, -1).then((e) => e.subject),
|
|
662
662
|
...e.idempotency === void 0 ? {} : { idempotency: e.idempotency },
|
|
663
|
-
log: e.log ??
|
|
664
|
-
}),
|
|
663
|
+
log: e.log ?? I({ scope: "voltro:serve" })
|
|
664
|
+
}), vt = e.dataTransferSecret ?? process.env.VOLTRO_DATA_TRANSFER_SECRET, yt = vt && vt.length >= 16 ? [{
|
|
665
665
|
method: "POST",
|
|
666
|
-
path:
|
|
667
|
-
handle:
|
|
668
|
-
secret:
|
|
666
|
+
path: Bi,
|
|
667
|
+
handle: aa({
|
|
668
|
+
secret: vt,
|
|
669
669
|
store: e.store,
|
|
670
670
|
...e.dataTransferSnapshot ? { snapshot: e.dataTransferSnapshot } : {},
|
|
671
|
-
assetSink:
|
|
672
|
-
openArchive: (e) =>
|
|
671
|
+
assetSink: Ni(di()),
|
|
672
|
+
openArchive: (e) => ua(di(), e),
|
|
673
673
|
refreshSubscriptions: (e) => {
|
|
674
674
|
r.refreshAll(e);
|
|
675
675
|
}
|
|
676
676
|
})
|
|
677
677
|
}, {
|
|
678
678
|
method: "POST",
|
|
679
|
-
path:
|
|
680
|
-
handle:
|
|
681
|
-
secret:
|
|
679
|
+
path: Vi,
|
|
680
|
+
handle: la({
|
|
681
|
+
secret: vt,
|
|
682
682
|
store: e.store,
|
|
683
683
|
snapshot: e.dataTransferSnapshot ?? { tables: [] },
|
|
684
684
|
dialect: e.dataTransferDialect ?? "memory",
|
|
685
685
|
tenantTables: [...e.tenantScopedTables],
|
|
686
|
-
loadProfile:
|
|
687
|
-
assetSource:
|
|
686
|
+
loadProfile: Tn,
|
|
687
|
+
assetSource: Pi(di(), e.store),
|
|
688
688
|
putArchive: async (e, t) => {
|
|
689
|
-
let { Readable: n } = await import("node:stream"), r =
|
|
690
|
-
await H.runPromise(
|
|
689
|
+
let { Readable: n } = await import("node:stream"), r = di(), i = fi("storage", () => n.from(t()));
|
|
690
|
+
await H.runPromise(mi(r, e, i, { contentType: "application/octet-stream" }));
|
|
691
691
|
}
|
|
692
692
|
})
|
|
693
|
-
}] : [],
|
|
693
|
+
}] : [], bt = [
|
|
694
694
|
...e.httpRoutes ?? [],
|
|
695
|
-
...
|
|
696
|
-
...
|
|
697
|
-
...
|
|
695
|
+
...O.httpRoutes,
|
|
696
|
+
...yt,
|
|
697
|
+
...x.httpRoutes
|
|
698
698
|
];
|
|
699
|
-
Object.assign(
|
|
700
|
-
for (let t of
|
|
701
|
-
let i =
|
|
699
|
+
Object.assign(D, S.handlers);
|
|
700
|
+
for (let t of E(e.discovered.streams ?? [])) D[t.descriptor.name] = (n) => hr((r) => ci(r, (r) => {
|
|
701
|
+
let i = Be(r), a = t.executor(n, i);
|
|
702
702
|
if (H.isEffect(a)) {
|
|
703
|
-
let t = a.pipe(H.provide(
|
|
704
|
-
return (e.baseLayer ? t.pipe(H.provide(e.baseLayer)) : t).pipe(H.provide(
|
|
703
|
+
let t = a.pipe(H.provide(Pr(i.store)));
|
|
704
|
+
return (e.baseLayer ? t.pipe(H.provide(e.baseLayer)) : t).pipe(H.provide(Ve)).pipe(H.provide(He)).pipe(H.provide(Ue)).pipe(H.provide(We));
|
|
705
705
|
}
|
|
706
706
|
return typeof a == "object" && a && typeof a.then == "function" ? H.promise(() => a) : a;
|
|
707
707
|
}), `stream.${t.descriptor.name}`);
|
|
708
|
-
for (let t of e.discovered.workflows ?? [])
|
|
708
|
+
for (let t of e.discovered.workflows ?? []) D[t.definition.name] = (e) => q(async (e, n) => {
|
|
709
709
|
let r = n;
|
|
710
|
-
return
|
|
710
|
+
return Wr(y, {
|
|
711
711
|
subject: r.subject,
|
|
712
712
|
traceId: r.traceId,
|
|
713
713
|
source: "workflow-rpc"
|
|
714
714
|
}).start(t.definition.name, e);
|
|
715
715
|
}, e, `workflow.${t.definition.name}`);
|
|
716
|
-
pe && (
|
|
717
|
-
descriptor:
|
|
716
|
+
pe && (D[Bn.name] = (e) => J(T({
|
|
717
|
+
descriptor: Bn,
|
|
718
718
|
executor: (e) => {
|
|
719
719
|
let t = e.id;
|
|
720
720
|
return {
|
|
@@ -723,14 +723,14 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
723
723
|
column: "startedAt",
|
|
724
724
|
direction: "desc"
|
|
725
725
|
}],
|
|
726
|
-
predicate:
|
|
726
|
+
predicate: rr(G("id", t), G("executionId", t)),
|
|
727
727
|
take: 1,
|
|
728
728
|
skip: void 0,
|
|
729
729
|
projection: void 0
|
|
730
730
|
};
|
|
731
731
|
}
|
|
732
|
-
}, e), r, `subscription.${
|
|
733
|
-
descriptor:
|
|
732
|
+
}, e), r, `subscription.${Bn.name}`), D[Hn.name] = (e) => J(T({
|
|
733
|
+
descriptor: Hn,
|
|
734
734
|
executor: (e) => {
|
|
735
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;
|
|
736
736
|
return {
|
|
@@ -739,14 +739,14 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
739
739
|
column: "startedAt",
|
|
740
740
|
direction: "desc"
|
|
741
741
|
}],
|
|
742
|
-
predicate: n.length === 0 ? void 0 : n.length === 1 ? n[0] :
|
|
742
|
+
predicate: n.length === 0 ? void 0 : n.length === 1 ? n[0] : er(...n),
|
|
743
743
|
take: r,
|
|
744
744
|
skip: void 0,
|
|
745
745
|
projection: void 0
|
|
746
746
|
};
|
|
747
747
|
}
|
|
748
|
-
}, e), r, `subscription.${
|
|
749
|
-
descriptor:
|
|
748
|
+
}, e), r, `subscription.${Hn.name}`), D[Vn.name] = (e) => J(T({
|
|
749
|
+
descriptor: Vn,
|
|
750
750
|
executor: (e) => {
|
|
751
751
|
let t = e.runId;
|
|
752
752
|
return {
|
|
@@ -761,8 +761,8 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
761
761
|
projection: void 0
|
|
762
762
|
};
|
|
763
763
|
}
|
|
764
|
-
}, e), r, `subscription.${
|
|
765
|
-
descriptor:
|
|
764
|
+
}, e), r, `subscription.${Vn.name}`), D[zn.name] = (e) => J(T({
|
|
765
|
+
descriptor: zn,
|
|
766
766
|
executor: (e) => {
|
|
767
767
|
let t = e.runId;
|
|
768
768
|
return {
|
|
@@ -777,7 +777,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
777
777
|
projection: void 0
|
|
778
778
|
};
|
|
779
779
|
}
|
|
780
|
-
}, e), r, `subscription.${
|
|
780
|
+
}, e), r, `subscription.${zn.name}`), D[B.name] = (e) => J(T({
|
|
781
781
|
descriptor: B,
|
|
782
782
|
executor: (e) => {
|
|
783
783
|
let t = e;
|
|
@@ -793,7 +793,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
793
793
|
projection: void 0
|
|
794
794
|
};
|
|
795
795
|
}
|
|
796
|
-
}, e), r, `subscription.${B.name}`),
|
|
796
|
+
}, e), r, `subscription.${B.name}`), D[V.name] = (e) => J(T({
|
|
797
797
|
descriptor: V,
|
|
798
798
|
executor: (e) => {
|
|
799
799
|
let t = e.eventId;
|
|
@@ -809,67 +809,67 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
809
809
|
projection: void 0
|
|
810
810
|
};
|
|
811
811
|
}
|
|
812
|
-
}, e), r, `subscription.${V.name}`),
|
|
812
|
+
}, e), r, `subscription.${V.name}`), D[Ln.name] = (t) => q(async (t, n) => {
|
|
813
813
|
let r = t;
|
|
814
|
-
return await
|
|
815
|
-
}, t, `action.${
|
|
814
|
+
return await _t(e.store, n.subject, { executionId: r.executionId }), await y.cancel(r.workflowName, r.executionId), await Ft(r.workflowName, r.executionId, "workflow.cancel"), { ok: !0 };
|
|
815
|
+
}, t, `action.${Ln.name}`), D[Rn.name] = (t) => q(async (t, n) => {
|
|
816
816
|
let r = t;
|
|
817
|
-
return await
|
|
818
|
-
}, t, `action.${
|
|
817
|
+
return await _t(e.store, n.subject, { executionId: r.executionId }), await y.resume(r.workflowName, r.executionId), { ok: !0 };
|
|
818
|
+
}, t, `action.${Rn.name}`), D[Un.name] = (t) => q(async (t, n) => {
|
|
819
819
|
let r = t;
|
|
820
|
-
return await
|
|
821
|
-
}, t, `action.${
|
|
820
|
+
return await _t(e.store, n.subject, { id: r.id }), y.signal({ id: r.id }, r.signalName, r.payload);
|
|
821
|
+
}, t, `action.${Un.name}`), D[Wn.name] = (t) => q(async (t, n) => {
|
|
822
822
|
let r = t;
|
|
823
|
-
return await
|
|
824
|
-
}, t, `action.${
|
|
825
|
-
let
|
|
826
|
-
...
|
|
827
|
-
...
|
|
828
|
-
...
|
|
829
|
-
...rt.queries.map((e) =>
|
|
830
|
-
...rt.mutations.map((e) =>
|
|
831
|
-
...it.queries.map((e) =>
|
|
832
|
-
...it.mutations.map((e) =>
|
|
833
|
-
...
|
|
834
|
-
...
|
|
835
|
-
...
|
|
836
|
-
...
|
|
837
|
-
...
|
|
838
|
-
...(e.discovered.workflows ?? []).map((e) =>
|
|
823
|
+
return await _t(e.store, n.subject, { id: r.id }), y.update({ id: r.id }, r.updateName, r.payload, r.timeoutMs === void 0 ? void 0 : { timeoutMs: r.timeoutMs });
|
|
824
|
+
}, t, `action.${Wn.name}`));
|
|
825
|
+
let xt = [
|
|
826
|
+
...E(e.discovered.queries).map((e) => R(e.descriptor)),
|
|
827
|
+
...E(e.discovered.mutations).map((e) => Fn(e.descriptor)),
|
|
828
|
+
...E(e.discovered.actions).map((e) => L(e.descriptor)),
|
|
829
|
+
...rt.queries.map((e) => R(e.descriptor)),
|
|
830
|
+
...rt.mutations.map((e) => Fn(e.descriptor)),
|
|
831
|
+
...it.queries.map((e) => R(e.descriptor)),
|
|
832
|
+
...it.mutations.map((e) => Fn(e.descriptor)),
|
|
833
|
+
...x.queries.map((e) => R(e.descriptor)),
|
|
834
|
+
...x.mutations.map((e) => Fn(e.descriptor)),
|
|
835
|
+
...x.actions.map((e) => L(e.descriptor)),
|
|
836
|
+
...E(e.discovered.streams ?? []).map((e) => In(e.descriptor)),
|
|
837
|
+
...S.rpcs,
|
|
838
|
+
...(e.discovered.workflows ?? []).map((e) => li(e.definition)),
|
|
839
839
|
...pe ? [
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
z(zn),
|
|
843
|
-
z(Ln),
|
|
844
|
-
z(B),
|
|
845
|
-
z(V),
|
|
846
|
-
R(Fn),
|
|
847
|
-
R(In),
|
|
840
|
+
R(Bn),
|
|
841
|
+
R(Hn),
|
|
848
842
|
R(Vn),
|
|
849
|
-
R(
|
|
843
|
+
R(zn),
|
|
844
|
+
R(B),
|
|
845
|
+
R(V),
|
|
846
|
+
L(Ln),
|
|
847
|
+
L(Rn),
|
|
848
|
+
L(Un),
|
|
849
|
+
L(Wn)
|
|
850
850
|
] : []
|
|
851
|
-
],
|
|
852
|
-
register: (t, n, r) =>
|
|
851
|
+
], wt = Qn.make(...xt).middleware(jn).middleware(Mn), Et = Mr({ resolveSubject: ({ headers: t, clientId: n }) => e.resolveSubject(t, n) }), kt = e.dormancyTenantId ?? ar, jt = e.dormancy === "sleep" ? {
|
|
852
|
+
register: (t, n, r) => Xr(e.store, {
|
|
853
853
|
tenantId: r ?? kt,
|
|
854
854
|
kind: "workflow",
|
|
855
855
|
refId: t,
|
|
856
856
|
wakeAt: n
|
|
857
857
|
}),
|
|
858
|
-
cancel: (t, n) =>
|
|
858
|
+
cancel: (t, n) => _r(e.store, {
|
|
859
859
|
tenantId: n ?? kt,
|
|
860
860
|
kind: "workflow",
|
|
861
861
|
refId: t
|
|
862
862
|
}).then(() => {})
|
|
863
|
-
} : void 0,
|
|
863
|
+
} : void 0, k = he ? await import("@voltro/workflow") : void 0, A = k?.makeWorkflowRunRecorder({
|
|
864
864
|
store: e.store,
|
|
865
865
|
...e.workflowRecording === void 0 ? {} : { recording: e.workflowRecording },
|
|
866
|
-
...
|
|
867
|
-
}),
|
|
868
|
-
await
|
|
866
|
+
...jt === void 0 ? {} : { wakeups: jt }
|
|
867
|
+
}), Pt = async (t, n) => {
|
|
868
|
+
await k.closeWorkflowChildrenForParent({
|
|
869
869
|
store: e.store,
|
|
870
870
|
parentExecutionId: t,
|
|
871
871
|
parentStatus: n,
|
|
872
|
-
recorder:
|
|
872
|
+
recorder: A,
|
|
873
873
|
log: { warn: (e, t) => {
|
|
874
874
|
process.stderr.write(`[workflow] ${e} ${t ? JSON.stringify(t) : ""}\n`);
|
|
875
875
|
} },
|
|
@@ -880,7 +880,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
880
880
|
await f.runPromise(r.definition.interrupt(n));
|
|
881
881
|
}
|
|
882
882
|
});
|
|
883
|
-
},
|
|
883
|
+
}, Ft = async (t, n, r) => {
|
|
884
884
|
let i = (await e.store.query({
|
|
885
885
|
table: "_voltro_workflow_runs",
|
|
886
886
|
order: [],
|
|
@@ -895,7 +895,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
895
895
|
cancelled: !0,
|
|
896
896
|
completedAt: /* @__PURE__ */ new Date()
|
|
897
897
|
}), o = i.subject?.tenantId ?? void 0;
|
|
898
|
-
a && await
|
|
898
|
+
a && await A.recordEvent({
|
|
899
899
|
runId: i.id,
|
|
900
900
|
eventType: "run-cancelled",
|
|
901
901
|
payload: {
|
|
@@ -904,18 +904,18 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
904
904
|
executionId: n,
|
|
905
905
|
...o == null ? {} : { tenantId: o }
|
|
906
906
|
}
|
|
907
|
-
}), a && await
|
|
908
|
-
},
|
|
909
|
-
...
|
|
910
|
-
buildContext: (t, n) => e.buildContextForWorkflow?.(t, n) ??
|
|
907
|
+
}), a && await Pt(n, "cancelled");
|
|
908
|
+
}, It = [
|
|
909
|
+
...Gr(e.discovered.workflows ?? [], {
|
|
910
|
+
buildContext: (t, n) => e.buildContextForWorkflow?.(t, n) ?? Be({
|
|
911
911
|
subject: t.subject,
|
|
912
912
|
traceId: t.traceId
|
|
913
913
|
}, e.store, void 0, `workflow:${n.workflowName}`, { parentExecutionId: n.executionId }),
|
|
914
|
-
resolveStartContext:
|
|
915
|
-
...
|
|
914
|
+
resolveStartContext: ue,
|
|
915
|
+
...de === void 0 ? {} : { resolveAuthority: de }
|
|
916
916
|
}, (t, n, r) => {
|
|
917
|
-
let i =
|
|
918
|
-
return
|
|
917
|
+
let i = k.getWorkflowVersionMetadata(t.definition);
|
|
918
|
+
return k.wrapWorkflowExecuteWithRunRecording({
|
|
919
919
|
name: t.definition.name,
|
|
920
920
|
store: e.store,
|
|
921
921
|
subject: r.subject,
|
|
@@ -926,27 +926,27 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
926
926
|
workflowPatches: i.patches,
|
|
927
927
|
parentExecutionId: r?.parentExecutionId ?? null,
|
|
928
928
|
parentClosePolicy: r?.parentClosePolicy ?? null,
|
|
929
|
-
onParentClose: ({ executionId: e, status: t }) =>
|
|
930
|
-
...
|
|
929
|
+
onParentClose: ({ executionId: e, status: t }) => Pt(e, t),
|
|
930
|
+
...qe(t.definition),
|
|
931
931
|
onTerminal: async ({ executionId: e }) => {
|
|
932
932
|
await ee?.gate.release(e);
|
|
933
933
|
},
|
|
934
|
-
recorder:
|
|
934
|
+
recorder: A,
|
|
935
935
|
pluginWorkflowStepLayer: $e,
|
|
936
|
-
recordRun:
|
|
936
|
+
recordRun: Yr
|
|
937
937
|
}, n);
|
|
938
938
|
}),
|
|
939
939
|
...e.discovered.workflowWorkers ?? [],
|
|
940
|
-
...
|
|
941
|
-
], Lt = [...(e.discovered.workflows ?? []).map((e) => e.definition.name).filter(Boolean), ...
|
|
942
|
-
if (((e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster" ||
|
|
940
|
+
...xe === void 0 ? [] : [xe]
|
|
941
|
+
], Lt = [...(e.discovered.workflows ?? []).map((e) => e.definition.name).filter(Boolean), ...xe === void 0 ? [] : ["voltro.deliverWebhook"]], Rt = It.length > 0 ? U.mergeAll(...It) : U.empty;
|
|
942
|
+
if (((e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster" || xe !== void 0) && e.workflowEngineLayer !== void 0) {
|
|
943
943
|
let t = Rt.pipe(U.provideMerge(e.workflowEngineLayer));
|
|
944
|
-
f =
|
|
944
|
+
f = Kn.make(e.baseLayer === void 0 ? t : t.pipe(U.provideMerge(e.baseLayer))), await f.runPromise(H.void), (e.log ?? I({ scope: "voltro:serve" })).child("workflow").info(`workflow runtime ready — ${Lt.length} entity type(s) registered`, { entities: Lt });
|
|
945
945
|
let n = await import("@voltro/workflow/cluster"), r = (e) => f.runPromise(n.redriveFailedRun(e)), i = (e) => f.runPromise(n.resumeRunFromStep(e));
|
|
946
|
-
ne = await
|
|
947
|
-
provider:
|
|
948
|
-
crossReplica:
|
|
949
|
-
namespace:
|
|
946
|
+
ne = await j({
|
|
947
|
+
provider: ki(e.plugins ?? [])?.broadcast?.provider,
|
|
948
|
+
crossReplica: ki(e.plugins ?? [])?.broadcast?.crossReplica ?? !1,
|
|
949
|
+
namespace: ke,
|
|
950
950
|
replicaId: crypto.randomUUID(),
|
|
951
951
|
pollStorage: () => f.runPromise(n.pollWorkflowStorage),
|
|
952
952
|
onChange: (t) => e.store.onChange((e) => t({
|
|
@@ -954,14 +954,14 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
954
954
|
op: e.op,
|
|
955
955
|
...e.origin === void 0 ? {} : { origin: e.origin }
|
|
956
956
|
})),
|
|
957
|
-
log: (e.log ??
|
|
957
|
+
log: (e.log ?? I({ scope: "voltro:serve" })).child("workflow")
|
|
958
958
|
}), p = async (t) => {
|
|
959
|
-
let n = await
|
|
959
|
+
let n = await oe({
|
|
960
960
|
store: e.store,
|
|
961
961
|
workflows: e.discovered.workflows ?? [],
|
|
962
962
|
runRedrive: r
|
|
963
963
|
}, t.runId);
|
|
964
|
-
return n.statusReset && await
|
|
964
|
+
return n.statusReset && await A.recordEvent({
|
|
965
965
|
runId: t.runId,
|
|
966
966
|
eventType: "run-redriven",
|
|
967
967
|
payload: {
|
|
@@ -974,12 +974,12 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
974
974
|
reason: n.outcome.reason
|
|
975
975
|
};
|
|
976
976
|
}, te = async (t) => {
|
|
977
|
-
let n = await
|
|
977
|
+
let n = await Oe({
|
|
978
978
|
store: e.store,
|
|
979
979
|
workflows: e.discovered.workflows ?? [],
|
|
980
980
|
runResume: i
|
|
981
981
|
}, t.runId, t.step);
|
|
982
|
-
return n.statusReset && await
|
|
982
|
+
return n.statusReset && await A.recordEvent({
|
|
983
983
|
runId: t.runId,
|
|
984
984
|
eventType: "run-redriven",
|
|
985
985
|
payload: {
|
|
@@ -994,7 +994,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
994
994
|
reason: n.outcome.reason
|
|
995
995
|
};
|
|
996
996
|
};
|
|
997
|
-
let a = (e.scheduleCoordination ?? "single") === "advisoryLock" ?
|
|
997
|
+
let a = (e.scheduleCoordination ?? "single") === "advisoryLock" ? Dr(e.store, e.scheduleReplicaId ?? `pid-${process.pid}`) : ni, s = Nr({
|
|
998
998
|
coordinator: a,
|
|
999
999
|
replicaId: e.scheduleReplicaId ?? `pid-${process.pid}`
|
|
1000
1000
|
}), u = {
|
|
@@ -1009,17 +1009,17 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1009
1009
|
}
|
|
1010
1010
|
}, d, m = () => {
|
|
1011
1011
|
if (d !== void 0) return d;
|
|
1012
|
-
if (o !== void 0 &&
|
|
1012
|
+
if (o !== void 0 && A !== void 0) return d = re({
|
|
1013
1013
|
store: e.store,
|
|
1014
|
-
log:
|
|
1014
|
+
log: P,
|
|
1015
1015
|
workflows: e.discovered.workflows ?? [],
|
|
1016
1016
|
workflowsProxy: o,
|
|
1017
1017
|
workflowRuntime: f,
|
|
1018
|
-
workflowRunRecorder:
|
|
1019
|
-
closeChildrenForParent:
|
|
1018
|
+
workflowRunRecorder: A,
|
|
1019
|
+
closeChildrenForParent: Pt
|
|
1020
1020
|
}), d;
|
|
1021
1021
|
};
|
|
1022
|
-
c = m, ee =
|
|
1022
|
+
c = m, ee = at({
|
|
1023
1023
|
store: e.store,
|
|
1024
1024
|
onChange: (t) => e.store.onChange((e) => t({
|
|
1025
1025
|
table: e.table,
|
|
@@ -1034,12 +1034,12 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1034
1034
|
workflows: e.discovered.workflows ?? [],
|
|
1035
1035
|
facade: () => o,
|
|
1036
1036
|
cancelRunWithReason: m,
|
|
1037
|
-
recordRunEvent: () =>
|
|
1037
|
+
recordRunEvent: () => A?.recordEvent,
|
|
1038
1038
|
...e.workflowStaleness === void 0 ? {} : { staleness: e.workflowStaleness },
|
|
1039
1039
|
...e.workflowSuspendSignalHintMs === void 0 ? {} : { suspendSignalHintMs: e.workflowSuspendSignalHintMs },
|
|
1040
1040
|
scheduleCoordinated: s,
|
|
1041
1041
|
onAbandoned: async (t) => {
|
|
1042
|
-
await
|
|
1042
|
+
await Ot({
|
|
1043
1043
|
workflows: e.discovered.workflows ?? [],
|
|
1044
1044
|
facade: () => o,
|
|
1045
1045
|
log: u,
|
|
@@ -1048,8 +1048,8 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1048
1048
|
},
|
|
1049
1049
|
log: u
|
|
1050
1050
|
});
|
|
1051
|
-
let
|
|
1052
|
-
|
|
1051
|
+
let h = ee;
|
|
1052
|
+
h !== void 0 && qr(() => h.stop()), l = Ye({
|
|
1053
1053
|
store: e.store,
|
|
1054
1054
|
onChange: (t) => e.store.onChange((e) => t({
|
|
1055
1055
|
table: e.table,
|
|
@@ -1060,10 +1060,10 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1060
1060
|
tickIntervalMs: e.scheduling.inferenceTickMs
|
|
1061
1061
|
},
|
|
1062
1062
|
enabled: (e.discovered.workflows?.length ?? 0) > 0,
|
|
1063
|
-
resumeSignal: () => f === void 0 ||
|
|
1064
|
-
await f.runPromise(
|
|
1063
|
+
resumeSignal: () => f === void 0 || k === void 0 ? void 0 : async ({ executionId: t, workflowName: n, signalName: r, payload: i }) => {
|
|
1064
|
+
await f.runPromise(k.completeSuspendingSignal({
|
|
1065
1065
|
store: e.store,
|
|
1066
|
-
target:
|
|
1066
|
+
target: Mt(t, n),
|
|
1067
1067
|
signalName: r,
|
|
1068
1068
|
payload: i
|
|
1069
1069
|
}));
|
|
@@ -1072,81 +1072,81 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1072
1072
|
scheduleCoordinated: s,
|
|
1073
1073
|
log: u
|
|
1074
1074
|
});
|
|
1075
|
-
let
|
|
1076
|
-
|
|
1075
|
+
let ie = l;
|
|
1076
|
+
ie !== void 0 && qr(() => ie.stop()), o = (e.discovered.workflows?.length ?? 0) > 0 ? Ur({
|
|
1077
1077
|
workflows: e.discovered.workflows ?? [],
|
|
1078
1078
|
runEffect: (e) => f.runPromise(e),
|
|
1079
1079
|
onEnqueue: () => ne?.publishWake(),
|
|
1080
|
-
...
|
|
1081
|
-
admitStart:
|
|
1082
|
-
startPayloadSchema:
|
|
1083
|
-
parkDelayedStart:
|
|
1080
|
+
...h === void 0 ? {} : {
|
|
1081
|
+
admitStart: h.gate.admitStart,
|
|
1082
|
+
startPayloadSchema: h.gate.startPayloadSchema,
|
|
1083
|
+
parkDelayedStart: h.gate.parkDelayed
|
|
1084
1084
|
},
|
|
1085
|
-
rememberStartContext:
|
|
1085
|
+
rememberStartContext: le,
|
|
1086
1086
|
signal: async (t, n, r) => {
|
|
1087
|
-
let i = await
|
|
1087
|
+
let i = await k.sendWorkflowSignal({
|
|
1088
1088
|
store: e.store,
|
|
1089
|
-
recorder:
|
|
1089
|
+
recorder: A,
|
|
1090
1090
|
target: t,
|
|
1091
1091
|
signalName: n,
|
|
1092
1092
|
payload: r
|
|
1093
1093
|
});
|
|
1094
|
-
return await f.runPromise(
|
|
1094
|
+
return await f.runPromise(k.completeSuspendingSignal({
|
|
1095
1095
|
store: e.store,
|
|
1096
1096
|
target: t,
|
|
1097
1097
|
signalName: n,
|
|
1098
1098
|
payload: r
|
|
1099
1099
|
})).catch(() => {}), i;
|
|
1100
1100
|
},
|
|
1101
|
-
update: (t, n, r, i) =>
|
|
1101
|
+
update: (t, n, r, i) => k.sendWorkflowUpdate({
|
|
1102
1102
|
store: e.store,
|
|
1103
|
-
recorder:
|
|
1103
|
+
recorder: A,
|
|
1104
1104
|
target: t,
|
|
1105
1105
|
updateName: n,
|
|
1106
1106
|
payload: r,
|
|
1107
1107
|
...i === void 0 ? {} : { options: i }
|
|
1108
1108
|
}),
|
|
1109
|
-
listRuns: (t) =>
|
|
1110
|
-
retry: (t, n) =>
|
|
1109
|
+
listRuns: (t) => Ae(e.store, t),
|
|
1110
|
+
retry: (t, n) => Me({
|
|
1111
1111
|
store: e.store,
|
|
1112
1112
|
workflows: e.discovered.workflows ?? [],
|
|
1113
1113
|
runPromise: (e) => f.runPromise(e)
|
|
1114
1114
|
}, t, n),
|
|
1115
|
-
redrive: (t) =>
|
|
1115
|
+
redrive: (t) => oe({
|
|
1116
1116
|
store: e.store,
|
|
1117
1117
|
workflows: e.discovered.workflows ?? [],
|
|
1118
1118
|
runRedrive: r
|
|
1119
1119
|
}, t).then((e) => e.outcome)
|
|
1120
1120
|
}) : void 0;
|
|
1121
1121
|
}
|
|
1122
|
-
let
|
|
1122
|
+
let Bt = U.mergeAll(wt.toLayer(D), Et), Vt = Tt(D, e.discovered.queries.map((e) => e.descriptor.name), pe), Wt = U.mergeAll(wt.toLayer(Vt), Et), M = e.observability, Gt = await gr({
|
|
1123
1123
|
...e.appName === void 0 ? {} : { serviceName: e.appName },
|
|
1124
|
-
...
|
|
1125
|
-
...
|
|
1126
|
-
...
|
|
1127
|
-
...
|
|
1128
|
-
}),
|
|
1129
|
-
group:
|
|
1130
|
-
handlersLayer:
|
|
1131
|
-
httpHandlersLayer:
|
|
1124
|
+
...M && M.spanProcessors.length > 0 ? { extraSpanProcessors: M.spanProcessors } : {},
|
|
1125
|
+
...M && M.metricReaders.length > 0 ? { extraMetricReaders: M.metricReaders } : {},
|
|
1126
|
+
...M && Object.keys(M.resourceAttributes).length > 0 ? { resourceAttributes: M.resourceAttributes } : {},
|
|
1127
|
+
...M && M.sampler !== void 0 ? { sampler: M.sampler } : {}
|
|
1128
|
+
}), Kt = !1, N = e.store.ping ? () => e.store.ping().then(() => !0).catch(() => !1) : void 0, { server: qt, shutdown: Jt } = ri({
|
|
1129
|
+
group: wt,
|
|
1130
|
+
handlersLayer: Bt,
|
|
1131
|
+
httpHandlersLayer: Wt,
|
|
1132
1132
|
port: e.port ?? 4e3,
|
|
1133
1133
|
...e.host === void 0 ? {} : { host: e.host },
|
|
1134
1134
|
path: e.path ?? "/ws",
|
|
1135
|
-
tracerLayer:
|
|
1136
|
-
security:
|
|
1137
|
-
...
|
|
1135
|
+
tracerLayer: Gt.layer,
|
|
1136
|
+
security: ye(e),
|
|
1137
|
+
...Qe,
|
|
1138
1138
|
healthCheck: {
|
|
1139
|
-
isReady: () =>
|
|
1140
|
-
...
|
|
1139
|
+
isReady: () => Kt,
|
|
1140
|
+
...N ? { ping: N } : {}
|
|
1141
1141
|
},
|
|
1142
|
-
...
|
|
1142
|
+
...bt.length > 0 ? { httpRoutes: bt } : {},
|
|
1143
1143
|
...e.getStore === void 0 ? {} : { getStore: e.getStore },
|
|
1144
|
-
...
|
|
1144
|
+
...Se.size > 0 ? { webhookRoutes: Se } : {},
|
|
1145
1145
|
...e.inspectRoute === void 0 ? {} : { inspectRoute: e.inspectRoute }
|
|
1146
|
-
}),
|
|
1147
|
-
if (await
|
|
1148
|
-
let t = (e.scheduleCoordination ?? "single") === "advisoryLock" ?
|
|
1149
|
-
|
|
1146
|
+
}), Yt = zi(qt);
|
|
1147
|
+
if (await mr(qt), (e.discovered.schedules?.length ?? 0) > 0) {
|
|
1148
|
+
let t = (e.scheduleCoordination ?? "single") === "advisoryLock" ? Dr(e.store, e.scheduleReplicaId ?? `pid-${process.pid}`) : ni;
|
|
1149
|
+
m = await ii(e.discovered.schedules ?? [], {
|
|
1150
1150
|
store: e.store,
|
|
1151
1151
|
coordinator: t,
|
|
1152
1152
|
defaultTrigger: e.scheduleDefaultTrigger ?? "self",
|
|
@@ -1154,7 +1154,7 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1154
1154
|
armSelf: e.scheduleArmSelf ?? !0,
|
|
1155
1155
|
dormancy: e.dormancy ?? "always-on",
|
|
1156
1156
|
...e.dormancyTenantId === void 0 ? {} : { dormancyTenantId: e.dormancyTenantId },
|
|
1157
|
-
buildContext: ({ traceId: t, scheduleName: n, subject: r }) =>
|
|
1157
|
+
buildContext: ({ traceId: t, scheduleName: n, subject: r }) => Be({
|
|
1158
1158
|
subject: r,
|
|
1159
1159
|
traceId: t
|
|
1160
1160
|
}, e.store, void 0, `schedule:${n}`),
|
|
@@ -1172,27 +1172,27 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1172
1172
|
},
|
|
1173
1173
|
...e.scheduleFireInterceptor === void 0 ? {} : { interceptFire: e.scheduleFireInterceptor },
|
|
1174
1174
|
...e.onScheduleRunEvent === void 0 ? {} : { onRunEvent: e.onScheduleRunEvent }
|
|
1175
|
-
}), e.onSchedulerReady?.(
|
|
1175
|
+
}), e.onSchedulerReady?.(m);
|
|
1176
1176
|
}
|
|
1177
|
-
let
|
|
1178
|
-
if ((e.discovered.subscribers?.length ?? 0) > 0 && (
|
|
1179
|
-
let t =
|
|
1177
|
+
let P = e.log ?? I({ scope: "voltro:serve" }), Xt, Zt;
|
|
1178
|
+
if ((e.discovered.subscribers?.length ?? 0) > 0 && (Xt = C(e.discovered.subscribers ?? [], e.store, P.child("subscribe"), e.schemaRegistry, S.bus)), (e.discovered.reactions?.length ?? 0) > 0) {
|
|
1179
|
+
let t = P.child("reaction"), n = async (n, r) => {
|
|
1180
1180
|
if (n.kind === "workflow") {
|
|
1181
|
-
if (
|
|
1181
|
+
if (y === void 0) {
|
|
1182
1182
|
t.warn("reaction workflow act skipped — no workflow engine in this app", { workflow: n.workflow });
|
|
1183
1183
|
return;
|
|
1184
1184
|
}
|
|
1185
1185
|
let e = n.payload === void 0 ? r.new ?? r.old ?? {} : n.payload(r);
|
|
1186
|
-
await
|
|
1186
|
+
await Wr(y, {
|
|
1187
1187
|
traceId: `reaction:${n.workflow}`,
|
|
1188
1188
|
source: `reaction:${n.workflow}`
|
|
1189
1189
|
}).start(n.workflow, e);
|
|
1190
1190
|
return;
|
|
1191
1191
|
}
|
|
1192
|
-
await
|
|
1192
|
+
await ut(n.agent, r, {
|
|
1193
1193
|
findAgentSend: (t) => e.discovered.actions.find((e) => e.descriptor.name === `${t}.send`),
|
|
1194
|
-
runAction: (e, t, n) => Promise.resolve(
|
|
1195
|
-
makeSubject: (e) =>
|
|
1194
|
+
runAction: (e, t, n) => Promise.resolve(ot(e, t, n)),
|
|
1195
|
+
makeSubject: (e) => Nn(e),
|
|
1196
1196
|
now: () => Date.now(),
|
|
1197
1197
|
log: t
|
|
1198
1198
|
});
|
|
@@ -1206,394 +1206,388 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1206
1206
|
} catch (e) {
|
|
1207
1207
|
return t.warn("reaction budget check failed — refusing the act", { tenantId: n }, e), !1;
|
|
1208
1208
|
}
|
|
1209
|
-
}, i =
|
|
1210
|
-
|
|
1209
|
+
}, i = pt(e.store, { onError: (e) => t.warn("reaction: rate-slot claim failed; refusing the act", { cause: String(e) }) });
|
|
1210
|
+
Zt = u(e.discovered.reactions ?? [], e.store, {
|
|
1211
1211
|
runAct: n,
|
|
1212
1212
|
checkBudget: r,
|
|
1213
1213
|
claimRateSlot: (e) => i.claim(e)
|
|
1214
1214
|
}, t);
|
|
1215
1215
|
}
|
|
1216
|
-
let
|
|
1217
|
-
(e.discovered.aggregates?.length ?? 0) > 0 && (
|
|
1216
|
+
let Qt;
|
|
1217
|
+
(e.discovered.aggregates?.length ?? 0) > 0 && (Qt = await De({
|
|
1218
1218
|
discovered: e.discovered.aggregates ?? [],
|
|
1219
1219
|
store: e.store,
|
|
1220
|
-
log:
|
|
1220
|
+
log: P.child("aggregate"),
|
|
1221
1221
|
...e.analytics === void 0 ? {} : { analytics: e.analytics },
|
|
1222
1222
|
...e.aggregateStorage === void 0 ? {} : { storage: e.aggregateStorage },
|
|
1223
1223
|
...e.aggregateCoordinator === void 0 ? {} : { coordinator: e.aggregateCoordinator }
|
|
1224
|
-
}),
|
|
1225
|
-
let
|
|
1226
|
-
(e.discovered.expectations?.length ?? 0) > 0 && (
|
|
1224
|
+
}), Ve = U.succeed(ir, Qt.registry));
|
|
1225
|
+
let $t;
|
|
1226
|
+
(e.discovered.expectations?.length ?? 0) > 0 && ($t = dr({
|
|
1227
1227
|
discovered: e.discovered.expectations ?? [],
|
|
1228
1228
|
store: e.store,
|
|
1229
|
-
log:
|
|
1230
|
-
}),
|
|
1229
|
+
log: P.child("expectation")
|
|
1230
|
+
}), He = U.succeed(sr, $t.registry)), (e.discovered.budgets?.length ?? 0) > 0 && (n = pr({
|
|
1231
1231
|
discovered: e.discovered.budgets ?? [],
|
|
1232
|
-
log:
|
|
1232
|
+
log: P.child("finops")
|
|
1233
1233
|
}), Ue = U.succeed(K, n.registry));
|
|
1234
|
-
let
|
|
1235
|
-
return (e.discovered.experiments?.length ?? 0) > 0 && (
|
|
1234
|
+
let en;
|
|
1235
|
+
return (e.discovered.experiments?.length ?? 0) > 0 && (en = fr({
|
|
1236
1236
|
discovered: e.discovered.experiments ?? [],
|
|
1237
1237
|
store: e.store,
|
|
1238
|
-
log:
|
|
1239
|
-
}),
|
|
1238
|
+
log: P.child("experiment")
|
|
1239
|
+
}), We = U.succeed(cr, en.registry)), Kt = !0, e.bootTiming?.mark("ready"), {
|
|
1240
1240
|
dispatcher: r,
|
|
1241
|
-
server:
|
|
1242
|
-
scheduler:
|
|
1243
|
-
eventsSnapshot:
|
|
1241
|
+
server: qt,
|
|
1242
|
+
scheduler: m,
|
|
1243
|
+
eventsSnapshot: me(S.bus, S.declared),
|
|
1244
1244
|
membersSnapshot: () => ({
|
|
1245
|
-
members:
|
|
1245
|
+
members: Ie.membership.list(),
|
|
1246
1246
|
capturedAt: Date.now()
|
|
1247
1247
|
}),
|
|
1248
|
-
agentTools: () =>
|
|
1249
|
-
rpcMetrics: () =>
|
|
1250
|
-
webhooksService: () =>
|
|
1248
|
+
agentTools: () => gt,
|
|
1249
|
+
rpcMetrics: () => Xe,
|
|
1250
|
+
webhooksService: () => ve,
|
|
1251
1251
|
runCanceller: () => c(),
|
|
1252
1252
|
flowControlHealth: () => ee?.cancelHealth(),
|
|
1253
1253
|
inferenceHealth: () => l?.health(),
|
|
1254
|
-
workflowWriteActions: () =>
|
|
1254
|
+
workflowWriteActions: () => y === void 0 || A === void 0 ? void 0 : se({
|
|
1255
1255
|
store: e.store,
|
|
1256
|
-
log:
|
|
1256
|
+
log: P,
|
|
1257
1257
|
workflows: e.discovered.workflows ?? [],
|
|
1258
1258
|
workflowsProxy: o,
|
|
1259
1259
|
workflowRuntime: f,
|
|
1260
|
-
workflowRunRecorder:
|
|
1261
|
-
closeChildrenForParent:
|
|
1260
|
+
workflowRunRecorder: A,
|
|
1261
|
+
closeChildrenForParent: Pt
|
|
1262
1262
|
}),
|
|
1263
1263
|
redriveWorkflowRun: (e) => p ? p(e) : Promise.reject(/* @__PURE__ */ Error("redrive: this app registers no workflows")),
|
|
1264
1264
|
resumeWorkflowRunFromStep: (e) => te ? te(e) : Promise.reject(/* @__PURE__ */ Error("resume-from-step: this app registers no workflows")),
|
|
1265
1265
|
close: async () => {
|
|
1266
|
-
|
|
1267
|
-
for (let e of
|
|
1266
|
+
Kt = !1, await Yt.drainRequests();
|
|
1267
|
+
for (let e of Ce) try {
|
|
1268
1268
|
await e();
|
|
1269
1269
|
} catch (e) {
|
|
1270
|
-
|
|
1270
|
+
P.warn("serve: teardown step failed", {}, e);
|
|
1271
1271
|
}
|
|
1272
|
-
await
|
|
1272
|
+
await ze?.detach(), await Ie.detach(), Qt?.detach(), $t?.detach(), n?.detach(), en?.detach(), Zt?.(), Xt?.(), await m?.shutdown(), r.close(), await ne?.detach(), await f?.dispose(), await Jt(), await Yt.finish();
|
|
1273
1273
|
}
|
|
1274
1274
|
};
|
|
1275
|
-
}, $ =
|
|
1276
|
-
let t =
|
|
1277
|
-
if (
|
|
1275
|
+
}, $ = I({ scope: "voltro:serve" }), pa = (e, t, n) => (e === "production" || e === "staging") && t !== "memory" && n !== "0", ma = Wt, ha = async (e) => {
|
|
1276
|
+
let t = Cn(process.cwd());
|
|
1277
|
+
if (kn(t)) {
|
|
1278
1278
|
let n;
|
|
1279
1279
|
try {
|
|
1280
|
-
let e = await import(
|
|
1280
|
+
let e = await import(An(t).href);
|
|
1281
1281
|
typeof e.runServe == "function" ? n = e.runServe : $.warn("serve bundle has no runServe export — using the standard serve path");
|
|
1282
1282
|
} catch (e) {
|
|
1283
1283
|
$.warn("serve bundle failed to load — using the standard serve path", {}, e);
|
|
1284
1284
|
}
|
|
1285
1285
|
if (n) return $.info("serve: booting from the precompiled serve bundle"), n(e);
|
|
1286
1286
|
}
|
|
1287
|
-
return
|
|
1288
|
-
},
|
|
1289
|
-
let u =
|
|
1287
|
+
return ga(e);
|
|
1288
|
+
}, ga = async (s) => {
|
|
1289
|
+
let u = wn();
|
|
1290
1290
|
e("serve");
|
|
1291
1291
|
try {
|
|
1292
|
-
|
|
1292
|
+
_i();
|
|
1293
1293
|
} catch (e) {
|
|
1294
1294
|
throw i(e instanceof Error ? e.message : String(e));
|
|
1295
1295
|
}
|
|
1296
|
-
let d = process.cwd(),
|
|
1296
|
+
let d = process.cwd(), h = await Ke(d), re = M({
|
|
1297
1297
|
kind: "api",
|
|
1298
|
-
configPort:
|
|
1298
|
+
configPort: h?.port,
|
|
1299
1299
|
env: process.env,
|
|
1300
|
-
flagPort:
|
|
1300
|
+
flagPort: ma(s, "--port")
|
|
1301
1301
|
});
|
|
1302
|
-
for (let e of
|
|
1303
|
-
let
|
|
1304
|
-
Zr(
|
|
1305
|
-
rawEnv:
|
|
1302
|
+
for (let e of re.warnings) $.warn(e);
|
|
1303
|
+
let ie = re.port;
|
|
1304
|
+
$r(Zr(h?.secrets)), await Gt({
|
|
1305
|
+
rawEnv: h?.env,
|
|
1306
1306
|
appType: "api",
|
|
1307
1307
|
root: d,
|
|
1308
1308
|
log: $,
|
|
1309
1309
|
generateTypes: !1
|
|
1310
1310
|
}), u.mark("config");
|
|
1311
|
-
let
|
|
1312
|
-
if (!r() &&
|
|
1313
|
-
let e = await import(
|
|
1311
|
+
let g = (process.env.DB_DIALECT ?? h?.store ?? "memory").toLowerCase(), ae = (g === "mariadb" || g === "postgres" || g === "mssql") && (process.env.CDC ?? "1") !== "0", oe = g === "mariadb" ? "mariadb" : g === "mssql" ? "mssql" : void 0, se = Sn(d);
|
|
1312
|
+
if (!r() && kn(se)) try {
|
|
1313
|
+
let e = await import(An(se).href);
|
|
1314
1314
|
if (e.modules) {
|
|
1315
1315
|
let t = {};
|
|
1316
|
-
for (let [n, r] of Object.entries(e.modules)) t[
|
|
1316
|
+
for (let [n, r] of Object.entries(e.modules)) t[Dn(d, n)] = r;
|
|
1317
1317
|
n(t), $.info("precompiled api bundle loaded", { modules: Object.keys(t).length });
|
|
1318
1318
|
}
|
|
1319
1319
|
} catch (e) {
|
|
1320
1320
|
$.warn("precompiled api bundle failed to load — falling back to source", {}, e);
|
|
1321
1321
|
}
|
|
1322
|
-
let
|
|
1322
|
+
let _ = await Qe(d), v = await k(_, { cdc: ae && oe !== void 0 }), fe = Se(v);
|
|
1323
1323
|
{
|
|
1324
1324
|
let e = /* @__PURE__ */ new Set([
|
|
1325
|
-
...
|
|
1326
|
-
...
|
|
1327
|
-
...
|
|
1325
|
+
...v.queries.filter((e) => e.descriptor.overridesPlugin === !0).map((e) => e.descriptor.name),
|
|
1326
|
+
...v.mutations.filter((e) => e.descriptor.overridesPlugin === !0).map((e) => e.descriptor.name),
|
|
1327
|
+
...v.actions.filter((e) => e.descriptor.overridesPlugin === !0).map((e) => e.descriptor.name)
|
|
1328
1328
|
]);
|
|
1329
|
-
|
|
1330
|
-
...
|
|
1331
|
-
...
|
|
1332
|
-
...
|
|
1333
|
-
...
|
|
1329
|
+
Qt(Zt(h?.plugins ?? []), [
|
|
1330
|
+
...v.queries.map((e) => e.descriptor.name),
|
|
1331
|
+
...v.mutations.map((e) => e.descriptor.name),
|
|
1332
|
+
...v.actions.map((e) => e.descriptor.name),
|
|
1333
|
+
...v.streams.map((e) => e.descriptor.name)
|
|
1334
1334
|
], e);
|
|
1335
|
-
let t =
|
|
1335
|
+
let t = Ne(v.serverOnlyLeaks, ke(process.env, "strict"), br, "`voltro serve`");
|
|
1336
1336
|
if (t.action === "fail") throw i(t.message ?? "");
|
|
1337
1337
|
t.action === "warn" && $.warn(t.message ?? "");
|
|
1338
1338
|
}
|
|
1339
|
-
let
|
|
1339
|
+
let me = _.filter((e) => bn.test(e)), be = me.length > 0 ? await yn(me, $.child("webhooks")) : {
|
|
1340
1340
|
outgoing: [],
|
|
1341
1341
|
incoming: [],
|
|
1342
1342
|
providers: []
|
|
1343
|
-
},
|
|
1344
|
-
...
|
|
1345
|
-
outgoing: [...
|
|
1346
|
-
},
|
|
1343
|
+
}, De = _n(v.events), Oe = be.outgoing.length + be.incoming.length + be.providers.length + De.length === 0 ? void 0 : {
|
|
1344
|
+
...be,
|
|
1345
|
+
outgoing: [...be.outgoing, ...De]
|
|
1346
|
+
}, Ae = on({
|
|
1347
1347
|
nodeEnv: process.env.NODE_ENV,
|
|
1348
|
-
cdcDialect:
|
|
1349
|
-
declared:
|
|
1350
|
-
}),
|
|
1351
|
-
gates:
|
|
1348
|
+
cdcDialect: oe,
|
|
1349
|
+
declared: h?.schema
|
|
1350
|
+
}), Me = en({
|
|
1351
|
+
gates: Ae,
|
|
1352
1352
|
runtime: {
|
|
1353
|
-
traces:
|
|
1354
|
-
undo:
|
|
1353
|
+
traces: ve(),
|
|
1354
|
+
undo: oi()
|
|
1355
1355
|
}
|
|
1356
1356
|
});
|
|
1357
|
-
if (
|
|
1358
|
-
let
|
|
1359
|
-
mix:
|
|
1360
|
-
plugins:
|
|
1361
|
-
gates:
|
|
1362
|
-
...
|
|
1363
|
-
}),
|
|
1364
|
-
spec:
|
|
1365
|
-
sqlLayer:
|
|
1357
|
+
if (Me !== void 0) throw i(`serve: ${Me}`);
|
|
1358
|
+
let Pe = an({
|
|
1359
|
+
mix: v.featureMix,
|
|
1360
|
+
plugins: h?.plugins ?? [],
|
|
1361
|
+
gates: Ae,
|
|
1362
|
+
...oe ? { cdcDialect: oe } : {}
|
|
1363
|
+
}), Fe = h?.analytics !== void 0 && h.analytics.kind !== "noop" && g !== "memory" ? (await N(g)).makeSqlLayer(O()) : void 0, Le = await c({
|
|
1364
|
+
spec: h?.analytics,
|
|
1365
|
+
sqlLayer: Fe,
|
|
1366
1366
|
log: $
|
|
1367
1367
|
}), C = (() => {
|
|
1368
|
-
let e = new Set(
|
|
1369
|
-
for (let n of [...
|
|
1368
|
+
let e = new Set(v.tables.map((e) => e.tableName)), t = [...v.tables];
|
|
1369
|
+
for (let n of [...Pe, ...Le.tables]) e.has(n.tableName) || (e.add(n.tableName), t.push(n));
|
|
1370
1370
|
return t;
|
|
1371
1371
|
})();
|
|
1372
|
-
for (let e of C)
|
|
1372
|
+
for (let e of C) nr(e);
|
|
1373
1373
|
{
|
|
1374
|
-
let e =
|
|
1375
|
-
name: e.descriptor.name,
|
|
1376
|
-
source: e.descriptor.source
|
|
1377
|
-
})), new Set(C.flatMap((e) => {
|
|
1378
|
-
let t = e.tableName;
|
|
1379
|
-
return t === void 0 ? [] : [t];
|
|
1380
|
-
}))));
|
|
1374
|
+
let e = xr(si(Vt(v), We(C)));
|
|
1381
1375
|
e !== void 0 && $.warn(e);
|
|
1382
1376
|
}
|
|
1383
|
-
let
|
|
1384
|
-
if (
|
|
1385
|
-
let e = (await
|
|
1377
|
+
let Re = (process.env.NODE_ENV ?? "").toLowerCase();
|
|
1378
|
+
if (pa(Re, g, process.env.VOLTRO_AUTO_MIGRATE)) {
|
|
1379
|
+
let e = (await N(g)).makeSqlLayer(O()), t = await H.runPromise(qn.SqlClient.pipe(H.flatMap((e) => Xn(e, d)), H.provide(e), H.catchAll(() => H.succeed([]))));
|
|
1386
1380
|
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));
|
|
1387
|
-
let n = await H.runPromise(
|
|
1388
|
-
appliedBy: `serve:${
|
|
1381
|
+
let n = await H.runPromise(qn.SqlClient.pipe(H.flatMap((e) => Zn(e, C, {
|
|
1382
|
+
appliedBy: `serve:${Re}`,
|
|
1389
1383
|
environment: "prod",
|
|
1390
|
-
dialectId:
|
|
1384
|
+
dialectId: g
|
|
1391
1385
|
})), H.provide(e)));
|
|
1392
|
-
n.kind === "prod-mismatch" && ($.error(
|
|
1393
|
-
gates:
|
|
1386
|
+
n.kind === "prod-mismatch" && ($.error(Yn(n, g)), $.error(nn({
|
|
1387
|
+
gates: Ae,
|
|
1394
1388
|
nodeEnv: process.env.NODE_ENV,
|
|
1395
|
-
cdcDialect:
|
|
1396
|
-
declared:
|
|
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(
|
|
1389
|
+
cdcDialect: oe,
|
|
1390
|
+
declared: h?.schema
|
|
1391
|
+
})), $.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(Yn(n, g));
|
|
1398
1392
|
}
|
|
1399
|
-
await
|
|
1400
|
-
dialectId:
|
|
1393
|
+
await Xt({
|
|
1394
|
+
dialectId: g,
|
|
1401
1395
|
tables: C,
|
|
1402
|
-
mode:
|
|
1403
|
-
lockSchema:
|
|
1404
|
-
makeLayer: async () => (await
|
|
1396
|
+
mode: Yt(h?.reactiveTriggers),
|
|
1397
|
+
lockSchema: O().schema,
|
|
1398
|
+
makeLayer: async () => (await N(g)).makeSqlLayer(O()),
|
|
1405
1399
|
log: {
|
|
1406
1400
|
info: (e, t) => $.info(e, t ?? {}),
|
|
1407
1401
|
warn: (e, t) => $.warn(e, t ?? {})
|
|
1408
1402
|
}
|
|
1409
1403
|
});
|
|
1410
|
-
let
|
|
1404
|
+
let Ge = Hr(C);
|
|
1411
1405
|
u.mark("discover");
|
|
1412
|
-
let
|
|
1413
|
-
for (let e of
|
|
1414
|
-
dialect: String(
|
|
1406
|
+
let w = await ot(h, void 0), qe = ui(w, g);
|
|
1407
|
+
for (let e of D({
|
|
1408
|
+
dialect: String(h?.store ?? process.env.DB_DIALECT ?? "postgres"),
|
|
1415
1409
|
changeStrategy: (process.env.CDC ?? "1") === "0" ? "inline" : "cdc",
|
|
1416
1410
|
dbUrl: process.env.DB_URL,
|
|
1417
|
-
crossReplicaBus:
|
|
1418
|
-
tables:
|
|
1411
|
+
crossReplicaBus: ki(h?.plugins ?? [])?.broadcast.crossReplica === !0,
|
|
1412
|
+
tables: v.tables.map((e) => ({
|
|
1419
1413
|
tableName: e.tableName,
|
|
1420
1414
|
isReactive: e.isReactive === !0
|
|
1421
1415
|
})),
|
|
1422
|
-
querySources:
|
|
1416
|
+
querySources: v.queries.flatMap((e) => {
|
|
1423
1417
|
let t = e.descriptor.source;
|
|
1424
1418
|
return t === void 0 ? [] : typeof t == "string" ? [t] : [...t];
|
|
1425
1419
|
})
|
|
1426
1420
|
})) e.level === "warn" ? $.warn(e.message) : $.info(e.message);
|
|
1427
1421
|
{
|
|
1428
|
-
let e =
|
|
1429
|
-
tables:
|
|
1430
|
-
queries:
|
|
1422
|
+
let e = $e({
|
|
1423
|
+
tables: $n().map((e) => ({ tableName: e.tableName })),
|
|
1424
|
+
queries: v.queries.map((e) => ({
|
|
1431
1425
|
name: e.descriptor.name,
|
|
1432
1426
|
source: e.descriptor.source
|
|
1433
1427
|
}))
|
|
1434
|
-
}), t =
|
|
1428
|
+
}), t = bt(e);
|
|
1435
1429
|
t !== void 0 && $.warn(t);
|
|
1436
1430
|
}
|
|
1437
|
-
|
|
1438
|
-
let { service:
|
|
1431
|
+
h?.cache && !process.env.CACHE_BACKEND && (process.env.CACHE_BACKEND = h.cache), h?.cacheRedisUrl && !process.env.CACHE_REDIS_URL && (process.env.CACHE_REDIS_URL = h.cacheRedisUrl), h?.cacheRedisDriver && !process.env.CACHE_REDIS_DRIVER && (process.env.CACHE_REDIS_DRIVER = h.cacheRedisDriver), h?.cacheKeyPrefix && !process.env.CACHE_KEY_PREFIX && (process.env.CACHE_KEY_PREFIX = h.cacheKeyPrefix);
|
|
1432
|
+
let { service: Ye, invalidationBus: at, snapshotCache: lt, cache: ut, semantic: pt, evictSource: _t, backend: St, stats: Ct, dispose: Tt } = await Je({
|
|
1439
1433
|
env: process.env,
|
|
1440
|
-
semantic:
|
|
1434
|
+
semantic: h?.cacheSemantic ?? !1
|
|
1441
1435
|
});
|
|
1442
|
-
|
|
1443
|
-
if (H.runFork(
|
|
1436
|
+
pt !== void 0 && $.info("semantic cache enabled — reactive eviction on live writes"), $.info(`cache backend resolved: ${St}` + (St === "redis" ? ` (driver ${process.env.CACHE_REDIS_DRIVER ?? "resp"})` : " — in-process, not cross-instance")), w.onChange((e) => {
|
|
1437
|
+
if (H.runFork(at.publish(e.table)), _t !== void 0) {
|
|
1444
1438
|
let t = (e.new ?? e.old)?.id;
|
|
1445
|
-
|
|
1439
|
+
_t({
|
|
1446
1440
|
table: e.table,
|
|
1447
1441
|
op: e.op,
|
|
1448
1442
|
...t === void 0 ? {} : { id: t }
|
|
1449
1443
|
});
|
|
1450
1444
|
}
|
|
1451
|
-
}),
|
|
1452
|
-
let { kv:
|
|
1453
|
-
|
|
1445
|
+
}), h?.kv && !process.env.KV_BACKEND && (process.env.KV_BACKEND = h.kv), h?.kvRedisUrl && !process.env.KV_REDIS_URL && (process.env.KV_REDIS_URL = h.kvRedisUrl), h?.kvKeyPrefix && !process.env.KV_KEY_PREFIX && (process.env.KV_KEY_PREFIX = h.kvKeyPrefix);
|
|
1446
|
+
let { kv: Dt, service: Ot } = await jr({ store: w });
|
|
1447
|
+
f({
|
|
1454
1448
|
log: $,
|
|
1455
|
-
max:
|
|
1456
|
-
outOfPool:
|
|
1449
|
+
max: Jt(),
|
|
1450
|
+
outOfPool: we(g, (process.env.CDC ?? "1") !== "0"),
|
|
1457
1451
|
readPools: t.replicationSnapshot()?.replicaCount ?? 0,
|
|
1458
1452
|
always: !0
|
|
1459
1453
|
}), u.mark("store");
|
|
1460
|
-
let
|
|
1461
|
-
store:
|
|
1462
|
-
sink:
|
|
1454
|
+
let At = ur({
|
|
1455
|
+
store: w,
|
|
1456
|
+
sink: Le.sink,
|
|
1463
1457
|
log: $
|
|
1464
|
-
}),
|
|
1465
|
-
store:
|
|
1466
|
-
dialect:
|
|
1458
|
+
}), Mt = A({
|
|
1459
|
+
store: w,
|
|
1460
|
+
dialect: g,
|
|
1467
1461
|
log: { info: (e) => $.info(e) }
|
|
1468
|
-
}),
|
|
1469
|
-
|
|
1470
|
-
let
|
|
1462
|
+
}), j = h?.plugins ?? [], zt = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, Ht, Ut;
|
|
1463
|
+
g !== "memory" && (Ht = Kn.make((await N(g)).makeSqlLayer(O())), Ut = await Ht.runPromise(qn.SqlClient));
|
|
1464
|
+
let Wt = [
|
|
1471
1465
|
"postgres",
|
|
1472
1466
|
"mariadb",
|
|
1473
1467
|
"mysql",
|
|
1474
1468
|
"mssql"
|
|
1475
|
-
].includes(
|
|
1476
|
-
maxIdleIntervalMs:
|
|
1477
|
-
coordinator:
|
|
1478
|
-
replicaId:
|
|
1469
|
+
].includes(g) ? Dr(w, zt, $) : ni, vn = Be(h?.scheduling), Cn = Nr({
|
|
1470
|
+
maxIdleIntervalMs: vn.pollCeilingMs,
|
|
1471
|
+
coordinator: Wt,
|
|
1472
|
+
replicaId: zt,
|
|
1479
1473
|
log: $
|
|
1480
|
-
}),
|
|
1474
|
+
}), Tn = [], F = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, On = ki(h?.plugins ?? [])?.broadcast?.provider, I = tt(h?.plugins, h?.name ?? En(d));
|
|
1481
1475
|
{
|
|
1482
|
-
let e =
|
|
1476
|
+
let e = it(h?.plugins, h?.name ?? En(d));
|
|
1483
1477
|
e !== void 0 && $.warn(e);
|
|
1484
1478
|
}
|
|
1485
|
-
let
|
|
1486
|
-
instanceId:
|
|
1487
|
-
namespace:
|
|
1479
|
+
let jn = Nt(h?.plugins, {
|
|
1480
|
+
instanceId: F,
|
|
1481
|
+
namespace: I,
|
|
1488
1482
|
meta: { mode: "serve" },
|
|
1489
1483
|
logger: $
|
|
1490
|
-
}),
|
|
1491
|
-
...
|
|
1492
|
-
instanceId:
|
|
1493
|
-
membership:
|
|
1494
|
-
...
|
|
1495
|
-
broadcastChannels: { presence:
|
|
1484
|
+
}), Mn = {
|
|
1485
|
+
...Ut ? { sql: Ut } : {},
|
|
1486
|
+
instanceId: F,
|
|
1487
|
+
membership: jn.membership,
|
|
1488
|
+
...On === void 0 ? {} : { broadcast: On },
|
|
1489
|
+
broadcastChannels: { presence: Oi(I, "presence") },
|
|
1496
1490
|
scheduleCoordinated: (e, t, n) => {
|
|
1497
|
-
let r =
|
|
1498
|
-
return
|
|
1491
|
+
let r = Cn(e, t, n);
|
|
1492
|
+
return Tn.push(r), r;
|
|
1499
1493
|
}
|
|
1500
1494
|
};
|
|
1501
|
-
for (let e of
|
|
1495
|
+
for (let e of j) e.bindDataStore?.(qe, Mn);
|
|
1502
1496
|
l({
|
|
1503
|
-
store:
|
|
1504
|
-
...
|
|
1497
|
+
store: w,
|
|
1498
|
+
...T(),
|
|
1505
1499
|
log: $
|
|
1506
1500
|
});
|
|
1507
|
-
let
|
|
1508
|
-
if (
|
|
1509
|
-
let e =
|
|
1510
|
-
|
|
1511
|
-
let n =
|
|
1512
|
-
for (let e of
|
|
1501
|
+
let L = j.filter((e) => typeof e.onChangeEvent == "function");
|
|
1502
|
+
if (L.length > 0) {
|
|
1503
|
+
let e = w.changeScope ?? "local";
|
|
1504
|
+
w.onChange((t) => {
|
|
1505
|
+
let n = he(t, e);
|
|
1506
|
+
for (let e of L) H.runFork(e.onChangeEvent(n).pipe(H.catchAllCause((t) => H.sync(() => $.warn(`plugin ${e.name} onChangeEvent failed`, { error: Gn.pretty(t) })))));
|
|
1513
1507
|
});
|
|
1514
1508
|
}
|
|
1515
|
-
let
|
|
1516
|
-
plugins:
|
|
1517
|
-
appName:
|
|
1509
|
+
let Nn = le({
|
|
1510
|
+
plugins: j,
|
|
1511
|
+
appName: h?.name ?? "voltro-api",
|
|
1518
1512
|
appType: "api",
|
|
1519
1513
|
voltroVersion: process.env.npm_package_version ?? "0.0.0",
|
|
1520
1514
|
log: $
|
|
1521
1515
|
});
|
|
1522
|
-
|
|
1523
|
-
let
|
|
1516
|
+
j.length && await Nn.activate(), u.mark("plugins");
|
|
1517
|
+
let Pn = await Nn.gatherObservability(), Fn = {
|
|
1524
1518
|
info: (e, t) => process.stdout.write(`[broadcast] ${e} ${t ? JSON.stringify(t) : ""}\n`),
|
|
1525
1519
|
warn: (e, t) => process.stderr.write(`[broadcast] ${e} ${t ? JSON.stringify(t) : ""}\n`),
|
|
1526
1520
|
debug: () => {}
|
|
1527
|
-
},
|
|
1528
|
-
|
|
1529
|
-
}),
|
|
1530
|
-
V &&
|
|
1531
|
-
let
|
|
1532
|
-
prefix:
|
|
1521
|
+
}, R, In = await yt(w, h, g, I, Fn, (e, t) => {
|
|
1522
|
+
R?.refreshAll(`broadcast gap: missed ${t} change(s) from ${e}`);
|
|
1523
|
+
}), z = h?.apiKeys, Ln = (typeof z == "object" ? z.prefix : void 0) ?? "voltro_", B = z ? yr(w) : void 0, V = B ? kr({ flush: Ar(B) }) : void 0;
|
|
1524
|
+
V && qr(() => V.shutdown());
|
|
1525
|
+
let Rn = B ? Or(B, {
|
|
1526
|
+
prefix: Ln,
|
|
1533
1527
|
...V ? { usage: V } : {}
|
|
1534
|
-
}) : void 0,
|
|
1535
|
-
analyticsLayer:
|
|
1536
|
-
cacheService:
|
|
1537
|
-
kvService:
|
|
1538
|
-
...
|
|
1539
|
-
pluginServices:
|
|
1540
|
-
userLayers:
|
|
1541
|
-
}),
|
|
1542
|
-
files:
|
|
1543
|
-
store:
|
|
1528
|
+
}) : void 0, zn = Rn ? [Sr(Rn, { prefix: Ln })] : [], Bn = wt([...h?.auth?.strategies ?? [], ...zn], Ei(h?.plugins ?? []), h?.auth?.anonymousTenantRequired ?? !1, h?.auth, () => qe), Vn = [...h?.restRoutes ?? [], ...Rn ? lr(Rn, (typeof z == "object" ? z.managementPath : void 0) ?? "/v1/api-keys") : []], Hn = ht(h?.idempotency, w), Un = j.map((e) => e.services).filter((e) => e !== void 0), Wn = U.mergeAll(Ve({
|
|
1529
|
+
analyticsLayer: Le.layer,
|
|
1530
|
+
cacheService: Ye,
|
|
1531
|
+
kvService: Ot,
|
|
1532
|
+
...pt === void 0 ? {} : { semanticCache: pt },
|
|
1533
|
+
pluginServices: Un,
|
|
1534
|
+
userLayers: h?.layers ?? []
|
|
1535
|
+
}), st(h?.http ?? {})), W = await ct({
|
|
1536
|
+
files: _,
|
|
1537
|
+
store: w,
|
|
1544
1538
|
log: $,
|
|
1545
1539
|
seedPolicy: "report",
|
|
1546
|
-
seedPattern:
|
|
1547
|
-
loadSeedFiles:
|
|
1548
|
-
startupPattern:
|
|
1540
|
+
seedPattern: pn,
|
|
1541
|
+
loadSeedFiles: P,
|
|
1542
|
+
startupPattern: cn,
|
|
1549
1543
|
loadStartupFiles: a,
|
|
1550
1544
|
runStartups: o,
|
|
1551
|
-
emailPattern:
|
|
1552
|
-
loadEmailFiles:
|
|
1553
|
-
registerEmailTemplates:
|
|
1545
|
+
emailPattern: He,
|
|
1546
|
+
loadEmailFiles: vt,
|
|
1547
|
+
registerEmailTemplates: Di
|
|
1554
1548
|
});
|
|
1555
1549
|
(W.startupCount > 0 || W.emailCount > 0) && $.info("boot lifecycle", {
|
|
1556
1550
|
startups: W.startupCount,
|
|
1557
1551
|
emailTemplates: W.emailCount
|
|
1558
|
-
}), W.startups !== void 0 &&
|
|
1552
|
+
}), W.startups !== void 0 && qr(async () => {
|
|
1559
1553
|
await W.startups.stop();
|
|
1560
|
-
}),
|
|
1561
|
-
demands:
|
|
1562
|
-
isRegistered: (e) =>
|
|
1554
|
+
}), ce({
|
|
1555
|
+
demands: y(fe),
|
|
1556
|
+
isRegistered: (e) => Cr(e) !== void 0
|
|
1563
1557
|
});
|
|
1564
|
-
let
|
|
1565
|
-
schedules:
|
|
1566
|
-
schedules:
|
|
1558
|
+
let Qn = gt({
|
|
1559
|
+
schedules: Et({
|
|
1560
|
+
schedules: v.schedules,
|
|
1567
1561
|
seeds: W.seeds,
|
|
1568
|
-
store:
|
|
1562
|
+
store: w,
|
|
1569
1563
|
log: $.child("seeds")
|
|
1570
1564
|
}),
|
|
1571
|
-
workflows:
|
|
1565
|
+
workflows: v.workflows ?? [],
|
|
1572
1566
|
log: $.child("workflow-schedules")
|
|
1573
|
-
}),
|
|
1567
|
+
}), er = h?.scheduling ?? {}, G = er.trigger ?? "self", rr = /* @__PURE__ */ new Set([
|
|
1574
1568
|
"postgres",
|
|
1575
1569
|
"mysql",
|
|
1576
1570
|
"mariadb",
|
|
1577
1571
|
"mssql"
|
|
1578
|
-
]),
|
|
1579
|
-
|
|
1580
|
-
let
|
|
1581
|
-
if (
|
|
1582
|
-
if (
|
|
1583
|
-
let e = await
|
|
1572
|
+
]), ir = er.coordination ?? (rr.has(g) ? "advisoryLock" : "single"), K = ir === "cluster" && rr.has(g), ar = K ? "cluster" : ir === "advisoryLock" && rr.has(g) ? "advisoryLock" : "single";
|
|
1573
|
+
ir === "cluster" && !K && $.warn("scheduling.coordination=cluster needs a sql-backed store except sqlite — falling back to single"), ir === "advisoryLock" && !rr.has(g) && $.warn("scheduling.coordination=advisoryLock needs a SQL store (the claim-row gate) — falling back to single");
|
|
1574
|
+
let or, sr = v.workflows.length > 0 || v.workflowWorkers.length > 0 || v.eventTriggers.length > 0 || (Oe?.outgoing.length ?? 0) > 0 || K, cr;
|
|
1575
|
+
if (sr) {
|
|
1576
|
+
if (g === "mssql") {
|
|
1577
|
+
let e = await gn(process.cwd());
|
|
1584
1578
|
e && $.warn(e);
|
|
1585
1579
|
}
|
|
1586
|
-
let [{ WorkflowEngine: e }, { makeClusterCronLayer: t, workflowEngineLayer: n, resolveRunnerStorage: r, resolveFailoverTuning: i }] = await Promise.all([import("@effect/workflow"), import("@voltro/workflow/cluster")]), a = K ?
|
|
1580
|
+
let [{ WorkflowEngine: e }, { makeClusterCronLayer: t, workflowEngineLayer: n, resolveRunnerStorage: r, resolveFailoverTuning: i }] = await Promise.all([import("@effect/workflow"), import("@voltro/workflow/cluster")]), a = K ? Qn.filter((e) => (e.trigger ?? G) === "self").map((e) => t({
|
|
1587
1581
|
name: e.name,
|
|
1588
|
-
cron:
|
|
1582
|
+
cron: vr(e),
|
|
1589
1583
|
execute: async () => {
|
|
1590
|
-
await
|
|
1584
|
+
await or?.fireFromCluster(e.name);
|
|
1591
1585
|
}
|
|
1592
1586
|
})) : [];
|
|
1593
|
-
|
|
1594
|
-
let e = await
|
|
1587
|
+
cr = g === "memory" ? e.layerMemory : await (async () => {
|
|
1588
|
+
let e = await N(g), t = r({ sqliteFamily: e.id === "sqlite" || e.id === "turso" });
|
|
1595
1589
|
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({
|
|
1596
|
-
sqlClientLayer: e.makeSqlLayer(
|
|
1590
|
+
sqlClientLayer: e.makeSqlLayer(O()),
|
|
1597
1591
|
runnerStorage: t,
|
|
1598
1592
|
dialectId: e.id,
|
|
1599
1593
|
...process.env.VOLTRO_WORKFLOW_RUNNER_PORT ? { runnerListenPort: Number(process.env.VOLTRO_WORKFLOW_RUNNER_PORT) } : {},
|
|
@@ -1602,19 +1596,19 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1602
1596
|
});
|
|
1603
1597
|
})();
|
|
1604
1598
|
}
|
|
1605
|
-
let
|
|
1606
|
-
if (
|
|
1607
|
-
let e = (await
|
|
1608
|
-
|
|
1599
|
+
let dr = ue(j, xn()), fr = _.filter((e) => /\.subscribe\.tsx?$/.test(e)), pr = fr.length > 0 ? await xe(fr, $) : [], mr = _.filter((e) => /\.reaction\.tsx?$/.test(e)), q = mr.length > 0 ? await pe(mr, $) : [], hr = _.filter((e) => dn.test(e)), J = hr.length > 0 ? await S(hr, $) : [], gr = _.filter((e) => /\.aggregate\.tsx?$/.test(e)), _r = gr.length > 0 ? await ne(gr, $) : [], wr = _e();
|
|
1600
|
+
if (_r.length > 0 && g !== "memory") try {
|
|
1601
|
+
let e = (await N(g)).makeSqlLayer(O());
|
|
1602
|
+
wr = dt(e);
|
|
1609
1603
|
} catch (e) {
|
|
1610
1604
|
$.warn("aggregate: SQL storage init failed — falling back to in-process", { err: String(e) });
|
|
1611
1605
|
}
|
|
1612
|
-
let
|
|
1613
|
-
if (
|
|
1614
|
-
let e = $.child("agent"), t =
|
|
1615
|
-
t.length > 0 && await
|
|
1616
|
-
let n = await
|
|
1617
|
-
for (let e of n.agents) for (let t of
|
|
1606
|
+
let Tr = g === "memory" ? ni : Dr(w, `aggregate@${process.pid}`, $), Er = _.filter((e) => fn.test(e)), Mr = Er.length > 0 ? await p(Er, $) : [], Pr = _.filter((e) => un.test(e)), Fr = Pr.length > 0 ? await Te(Pr, $) : [], Ir = _.filter((e) => ln.test(e)), Lr = Ir.length > 0 ? await Lt(Ir, $) : [], Rr = [], zr = [], Br = _.filter((e) => rn.test(e));
|
|
1607
|
+
if (Br.length > 0) {
|
|
1608
|
+
let e = $.child("agent"), t = _.filter((e) => tn.test(e));
|
|
1609
|
+
t.length > 0 && await sn(t, e);
|
|
1610
|
+
let n = await $t(Br, e);
|
|
1611
|
+
for (let e of n.agents) for (let t of Ze(e)) (t.kind === "action" ? Rr : zr).push({
|
|
1618
1612
|
file: t.file,
|
|
1619
1613
|
descriptor: t.descriptor,
|
|
1620
1614
|
executor: t.executor
|
|
@@ -1626,87 +1620,87 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1626
1620
|
let e = X.workflowWriteActions();
|
|
1627
1621
|
if (e === void 0) throw Error("workflow actions: this app registers no workflows");
|
|
1628
1622
|
return e;
|
|
1629
|
-
},
|
|
1630
|
-
dialect:
|
|
1631
|
-
...
|
|
1632
|
-
}),
|
|
1633
|
-
sqlLayer:
|
|
1623
|
+
}, Vr = tr({
|
|
1624
|
+
dialect: g,
|
|
1625
|
+
...O()
|
|
1626
|
+
}), Ur = g === "memory" ? void 0 : (await N(g)).makeSqlLayer(O()), Wr = async () => jt({
|
|
1627
|
+
sqlLayer: Ur,
|
|
1634
1628
|
declared: C,
|
|
1635
1629
|
log: $
|
|
1636
|
-
}),
|
|
1630
|
+
}), Gr = {
|
|
1637
1631
|
kind: "api",
|
|
1638
1632
|
meta: {
|
|
1639
|
-
name:
|
|
1640
|
-
voltroVersion:
|
|
1641
|
-
port:
|
|
1633
|
+
name: h?.name ?? "voltro-api",
|
|
1634
|
+
voltroVersion: kt,
|
|
1635
|
+
port: ie,
|
|
1642
1636
|
mode: "start",
|
|
1643
|
-
store:
|
|
1644
|
-
cdc:
|
|
1645
|
-
...
|
|
1637
|
+
store: g,
|
|
1638
|
+
cdc: ae ? "on" : "off",
|
|
1639
|
+
...Vr === void 0 ? {} : { databaseId: Vr }
|
|
1646
1640
|
},
|
|
1647
|
-
rpc:
|
|
1648
|
-
workflows:
|
|
1649
|
-
migrations:
|
|
1641
|
+
rpc: nt(v, d),
|
|
1642
|
+
workflows: ze(v, d),
|
|
1643
|
+
migrations: Wr,
|
|
1650
1644
|
events: () => X.eventsSnapshot(),
|
|
1651
1645
|
agentTools: () => X.agentTools(),
|
|
1652
1646
|
invariantChecks: () => ({
|
|
1653
1647
|
mode: "serve",
|
|
1654
|
-
accessGate:
|
|
1655
|
-
config:
|
|
1656
|
-
serverOnlyLeaks:
|
|
1657
|
-
migrations:
|
|
1648
|
+
accessGate: fe,
|
|
1649
|
+
config: h,
|
|
1650
|
+
serverOnlyLeaks: v.serverOnlyLeaks,
|
|
1651
|
+
migrations: Wr
|
|
1658
1652
|
}),
|
|
1659
1653
|
members: () => X.membersSnapshot(),
|
|
1660
1654
|
inspectFireSchedule: async ({ name: e, trigger: t }) => {
|
|
1661
|
-
if (!
|
|
1662
|
-
return { runId: await
|
|
1655
|
+
if (!or) throw Error("scheduler not started — this app registers no self-triggered schedules (all schedules are trigger:'external', or there are none).");
|
|
1656
|
+
return { runId: await or.fireNow(e, t) ?? null };
|
|
1663
1657
|
},
|
|
1664
|
-
inspectBackfillSchedule:
|
|
1665
|
-
getHandle: () =>
|
|
1666
|
-
getSchedules: () =>
|
|
1658
|
+
inspectBackfillSchedule: m({
|
|
1659
|
+
getHandle: () => or,
|
|
1660
|
+
getSchedules: () => Qn
|
|
1667
1661
|
}),
|
|
1668
|
-
...
|
|
1669
|
-
store:
|
|
1670
|
-
discoveredWebhooks:
|
|
1662
|
+
...Oe === void 0 ? {} : { webhooks: () => ge({
|
|
1663
|
+
store: w,
|
|
1664
|
+
discoveredWebhooks: Oe
|
|
1671
1665
|
}) },
|
|
1672
1666
|
plugins: () => ({
|
|
1673
|
-
plugins:
|
|
1667
|
+
plugins: Nn.snapshot(),
|
|
1674
1668
|
capturedAt: Date.now()
|
|
1675
1669
|
}),
|
|
1676
|
-
env: () =>
|
|
1677
|
-
...
|
|
1678
|
-
plugins:
|
|
1670
|
+
env: () => Kt(h?.name ?? En(d), {
|
|
1671
|
+
...h?.env !== void 0 && gi(h.env) ? { contract: h.env } : {},
|
|
1672
|
+
plugins: h?.plugins ?? []
|
|
1679
1673
|
}),
|
|
1680
|
-
dataCache: () =>
|
|
1681
|
-
stats:
|
|
1682
|
-
backendKind:
|
|
1674
|
+
dataCache: () => Ue({
|
|
1675
|
+
stats: Ct,
|
|
1676
|
+
backendKind: St
|
|
1683
1677
|
}),
|
|
1684
|
-
subscriptions: () =>
|
|
1685
|
-
inspectTables: () =>
|
|
1686
|
-
inspectRows:
|
|
1687
|
-
store:
|
|
1688
|
-
tables:
|
|
1678
|
+
subscriptions: () => Rt(() => R),
|
|
1679
|
+
inspectTables: () => de(v.tables),
|
|
1680
|
+
inspectRows: b({
|
|
1681
|
+
store: w,
|
|
1682
|
+
tables: v.tables,
|
|
1689
1683
|
mask: !0
|
|
1690
1684
|
}),
|
|
1691
1685
|
metrics: (e) => X.rpcMetrics().snapshot(e),
|
|
1692
|
-
cluster: () =>
|
|
1693
|
-
store:
|
|
1694
|
-
dialect:
|
|
1686
|
+
cluster: () => Bt({
|
|
1687
|
+
store: w,
|
|
1688
|
+
dialect: g,
|
|
1695
1689
|
useClusterCron: K,
|
|
1696
|
-
scheduleCoordChoice:
|
|
1690
|
+
scheduleCoordChoice: ir
|
|
1697
1691
|
}),
|
|
1698
|
-
inspectSchedules: () =>
|
|
1699
|
-
schedules:
|
|
1692
|
+
inspectSchedules: () => x({
|
|
1693
|
+
schedules: Qn,
|
|
1700
1694
|
defaultTrigger: G,
|
|
1701
|
-
coordination:
|
|
1695
|
+
coordination: ar
|
|
1702
1696
|
}),
|
|
1703
|
-
inspectScheduleRuns: (e) =>
|
|
1704
|
-
...ee(
|
|
1705
|
-
controls:
|
|
1706
|
-
active: (
|
|
1697
|
+
inspectScheduleRuns: (e) => Ft(w, e),
|
|
1698
|
+
...ee(w, {
|
|
1699
|
+
controls: mt(v.workflows ?? []),
|
|
1700
|
+
active: (v.workflows?.length ?? 0) > 0,
|
|
1707
1701
|
cancellation: () => X.flowControlHealth()
|
|
1708
1702
|
}),
|
|
1709
|
-
webhookActions:
|
|
1703
|
+
webhookActions: Ce(() => X.webhooksService()),
|
|
1710
1704
|
inspectStartWorkflow: (e) => Y().inspectStartWorkflow(e),
|
|
1711
1705
|
inspectCancelWorkflowRun: (e) => Y().inspectCancelWorkflowRun(e),
|
|
1712
1706
|
inspectSuspendWorkflowRun: (e) => Y().inspectSuspendWorkflowRun(e),
|
|
@@ -1715,13 +1709,13 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1715
1709
|
inspectRetryWorkflowRun: (e) => Y().inspectRetryWorkflowRun(e),
|
|
1716
1710
|
inspectSignalWorkflowRun: (e) => Y().inspectSignalWorkflowRun(e),
|
|
1717
1711
|
inspectUpdateWorkflowRun: (e) => Y().inspectUpdateWorkflowRun(e),
|
|
1718
|
-
inspectInferences: (e) =>
|
|
1719
|
-
store:
|
|
1720
|
-
active: (
|
|
1712
|
+
inspectInferences: (e) => et({
|
|
1713
|
+
store: w,
|
|
1714
|
+
active: (v.workflows?.length ?? 0) > 0,
|
|
1721
1715
|
dispatcher: () => X.inferenceHealth()
|
|
1722
1716
|
}, e.limit === void 0 ? {} : { limit: e.limit }),
|
|
1723
|
-
...
|
|
1724
|
-
store:
|
|
1717
|
+
...xt({
|
|
1718
|
+
store: w,
|
|
1725
1719
|
cancelRun: async (e) => await X.runCanceller()?.(e) ?? !1,
|
|
1726
1720
|
retryRun: async (e) => Y().inspectRetryWorkflowRun({ runId: e }),
|
|
1727
1721
|
redriveRun: async (e) => X.redriveWorkflowRun({ runId: e }),
|
|
@@ -1729,122 +1723,122 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1729
1723
|
}),
|
|
1730
1724
|
inspectRedriveWorkflowRun: (e) => X.redriveWorkflowRun(e),
|
|
1731
1725
|
inspectResumeWorkflowRunFromStep: (e) => X.resumeWorkflowRunFromStep(e)
|
|
1732
|
-
},
|
|
1733
|
-
let e = await
|
|
1734
|
-
return
|
|
1726
|
+
}, Kr = (process.env.VOLTRO_TENANT_ISOLATION ?? h?.tenancy?.isolation) === "namespace", Jr = Kr && g !== "memory" ? await (async () => {
|
|
1727
|
+
let e = await N(g);
|
|
1728
|
+
return ft({
|
|
1735
1729
|
tables: C,
|
|
1736
|
-
sqlLayer: e.makeSqlLayer(
|
|
1737
|
-
dialect:
|
|
1730
|
+
sqlLayer: e.makeSqlLayer(O()),
|
|
1731
|
+
dialect: g,
|
|
1738
1732
|
options: { retryFilter: e.retryFilter },
|
|
1739
1733
|
log: {
|
|
1740
1734
|
info: (e, t) => $.info(e, t),
|
|
1741
1735
|
error: (e, t, n) => $.error(e, t ?? {}, n)
|
|
1742
1736
|
}
|
|
1743
1737
|
});
|
|
1744
|
-
})() : void 0,
|
|
1745
|
-
input:
|
|
1746
|
-
namespaceIsolationOn:
|
|
1747
|
-
makeStoreForUrl: (e, t) =>
|
|
1738
|
+
})() : void 0, Yr = await E({
|
|
1739
|
+
input: h?.tenancy?.residency,
|
|
1740
|
+
namespaceIsolationOn: Kr,
|
|
1741
|
+
makeStoreForUrl: (e, t) => ot(h, void 0, qt(O(), t)),
|
|
1748
1742
|
log: {
|
|
1749
1743
|
info: (e, t) => $.info(e, t),
|
|
1750
1744
|
warn: (e, t) => $.warn(e, t)
|
|
1751
1745
|
}
|
|
1752
1746
|
});
|
|
1753
|
-
|
|
1754
|
-
await
|
|
1747
|
+
Yr !== void 0 && qr(async () => {
|
|
1748
|
+
await Yr.close();
|
|
1755
1749
|
});
|
|
1756
|
-
let X = await
|
|
1750
|
+
let X = await fa({
|
|
1757
1751
|
bootTiming: u,
|
|
1758
|
-
broadcastNamespace:
|
|
1752
|
+
broadcastNamespace: I,
|
|
1759
1753
|
scheduling: (() => {
|
|
1760
|
-
let e =
|
|
1754
|
+
let e = vn;
|
|
1761
1755
|
return {
|
|
1762
1756
|
admissionDrainMs: e.admissionDrainMs,
|
|
1763
1757
|
inferenceTickMs: e.inferenceTickMs,
|
|
1764
1758
|
cancelSweepMs: e.cancelSweepMs,
|
|
1765
1759
|
stalenessSweepMs: e.stalenessSweepMs,
|
|
1766
|
-
disarmWhenIdle:
|
|
1767
|
-
changeScope:
|
|
1768
|
-
broadcastAttached:
|
|
1760
|
+
disarmWhenIdle: rt({
|
|
1761
|
+
changeScope: w.changeScope,
|
|
1762
|
+
broadcastAttached: In !== void 0
|
|
1769
1763
|
})
|
|
1770
1764
|
};
|
|
1771
1765
|
})(),
|
|
1772
|
-
...
|
|
1773
|
-
...
|
|
1774
|
-
workflowRecording:
|
|
1766
|
+
...h?.workflows?.staleness === void 0 ? {} : { workflowStaleness: h.workflows.staleness },
|
|
1767
|
+
...h?.workflows?.suspendSignalHintMs === void 0 ? {} : { workflowSuspendSignalHintMs: h.workflows.suspendSignalHintMs },
|
|
1768
|
+
workflowRecording: Pt(h?.workflows?.recording),
|
|
1775
1769
|
membership: {
|
|
1776
|
-
...
|
|
1777
|
-
instanceId:
|
|
1770
|
+
...jn,
|
|
1771
|
+
instanceId: F
|
|
1778
1772
|
},
|
|
1779
1773
|
security: {
|
|
1780
|
-
defaultDeny:
|
|
1781
|
-
...
|
|
1774
|
+
defaultDeny: je(h),
|
|
1775
|
+
...ye(h)
|
|
1782
1776
|
},
|
|
1783
|
-
approvals: { defaultExpiryMs:
|
|
1784
|
-
...
|
|
1785
|
-
...
|
|
1786
|
-
restRoutes:
|
|
1787
|
-
appProcedures:
|
|
1777
|
+
approvals: { defaultExpiryMs: Ie(h) },
|
|
1778
|
+
...h?.plugins === void 0 ? {} : { plugins: h.plugins },
|
|
1779
|
+
...Hn ? { idempotency: Hn } : {},
|
|
1780
|
+
restRoutes: Vn,
|
|
1781
|
+
appProcedures: fe,
|
|
1788
1782
|
discovered: {
|
|
1789
|
-
queries: [...
|
|
1790
|
-
mutations:
|
|
1791
|
-
actions: [...
|
|
1792
|
-
streams:
|
|
1793
|
-
events:
|
|
1794
|
-
workflows:
|
|
1795
|
-
workflowWorkers:
|
|
1796
|
-
eventTriggers:
|
|
1797
|
-
schedules:
|
|
1798
|
-
subscribers:
|
|
1783
|
+
queries: [...v.queries, ...zr],
|
|
1784
|
+
mutations: v.mutations,
|
|
1785
|
+
actions: [...v.actions, ...Rr],
|
|
1786
|
+
streams: v.streams,
|
|
1787
|
+
events: v.events,
|
|
1788
|
+
workflows: v.workflows,
|
|
1789
|
+
workflowWorkers: v.workflowWorkers,
|
|
1790
|
+
eventTriggers: v.eventTriggers,
|
|
1791
|
+
schedules: Qn,
|
|
1792
|
+
subscribers: pr,
|
|
1799
1793
|
outboxHandlers: J,
|
|
1800
|
-
connections:
|
|
1794
|
+
connections: v.connections,
|
|
1801
1795
|
reactions: q,
|
|
1802
|
-
aggregates:
|
|
1803
|
-
expectations:
|
|
1804
|
-
budgets:
|
|
1805
|
-
experiments:
|
|
1806
|
-
...
|
|
1796
|
+
aggregates: _r,
|
|
1797
|
+
expectations: Mr,
|
|
1798
|
+
budgets: Fr,
|
|
1799
|
+
experiments: Lr,
|
|
1800
|
+
...Oe === void 0 ? {} : { webhooks: Oe }
|
|
1807
1801
|
},
|
|
1808
1802
|
log: $,
|
|
1809
|
-
analytics:
|
|
1810
|
-
aggregateStorage:
|
|
1811
|
-
aggregateCoordinator:
|
|
1812
|
-
store:
|
|
1813
|
-
kv:
|
|
1814
|
-
cache:
|
|
1815
|
-
snapshotCache:
|
|
1816
|
-
...
|
|
1817
|
-
schemaRegistry:
|
|
1818
|
-
tenantScopedTables:
|
|
1819
|
-
softDeleteScopedTables:
|
|
1820
|
-
dataTransferSnapshot:
|
|
1821
|
-
dataTransferDialect:
|
|
1822
|
-
...
|
|
1823
|
-
...
|
|
1824
|
-
tenantIsolation: (process.env.VOLTRO_TENANT_ISOLATION ??
|
|
1825
|
-
resolveSubject: (e, t) =>
|
|
1803
|
+
analytics: Le.sink,
|
|
1804
|
+
aggregateStorage: wr,
|
|
1805
|
+
aggregateCoordinator: Tr,
|
|
1806
|
+
store: w,
|
|
1807
|
+
kv: Dt,
|
|
1808
|
+
cache: ut,
|
|
1809
|
+
snapshotCache: lt,
|
|
1810
|
+
...h?.reactive === void 0 ? {} : { reactive: h.reactive },
|
|
1811
|
+
schemaRegistry: Ge,
|
|
1812
|
+
tenantScopedTables: v.tenantScopedTables,
|
|
1813
|
+
softDeleteScopedTables: v.softDeleteScopedTables,
|
|
1814
|
+
dataTransferSnapshot: Jn(C, g),
|
|
1815
|
+
dataTransferDialect: g,
|
|
1816
|
+
...Jr === void 0 ? {} : { ensureTenantProvisioned: Jr.ensure },
|
|
1817
|
+
...Yr === void 0 ? {} : { resolveResidentStore: Yr.resolveStore },
|
|
1818
|
+
tenantIsolation: (process.env.VOLTRO_TENANT_ISOLATION ?? h?.tenancy?.isolation) === "namespace" ? "namespace" : "shared-schema",
|
|
1819
|
+
resolveSubject: (e, t) => Bn({
|
|
1826
1820
|
headers: e,
|
|
1827
1821
|
clientId: t
|
|
1828
1822
|
}),
|
|
1829
|
-
...
|
|
1830
|
-
...
|
|
1831
|
-
httpRoutes:
|
|
1832
|
-
getStore: () =>
|
|
1833
|
-
...
|
|
1834
|
-
...
|
|
1823
|
+
...h?.auth === void 0 ? {} : { authority: h.auth },
|
|
1824
|
+
...h?.agents === void 0 ? {} : { agents: h.agents },
|
|
1825
|
+
httpRoutes: j.flatMap((e) => e.httpRoutes ?? []),
|
|
1826
|
+
getStore: () => qe,
|
|
1827
|
+
...Wn ? { baseLayer: Wn } : {},
|
|
1828
|
+
...cr === void 0 ? {} : { workflowEngineLayer: cr },
|
|
1835
1829
|
scheduleDefaultTrigger: G,
|
|
1836
|
-
scheduleCoordination:
|
|
1830
|
+
scheduleCoordination: ar,
|
|
1837
1831
|
scheduleArmSelf: !K,
|
|
1838
|
-
dormancy: process.env.VOLTRO_DORMANCY === "sleep" || process.env.VOLTRO_DORMANCY === "always-on" ? process.env.VOLTRO_DORMANCY :
|
|
1832
|
+
dormancy: process.env.VOLTRO_DORMANCY === "sleep" || process.env.VOLTRO_DORMANCY === "always-on" ? process.env.VOLTRO_DORMANCY : h?.dormancy ?? "always-on",
|
|
1839
1833
|
scheduleReplicaId: process.env.HOSTNAME ?? `pid-${process.pid}`,
|
|
1840
|
-
...
|
|
1834
|
+
...dr === void 0 ? {} : { scheduleFireInterceptor: dr },
|
|
1841
1835
|
onSchedulerReady: (e) => {
|
|
1842
|
-
|
|
1836
|
+
or = e;
|
|
1843
1837
|
},
|
|
1844
|
-
inspectRoute: { handle: async (e, t, n, r) => await
|
|
1838
|
+
inspectRoute: { handle: async (e, t, n, r) => await te(e, Gr, t, {
|
|
1845
1839
|
method: n,
|
|
1846
1840
|
...r === void 0 ? {} : { body: r }
|
|
1847
|
-
}) || ((n === "GET" ? await
|
|
1841
|
+
}) || ((n === "GET" ? await hn(e, Gr, t, { method: n }) : null) ?? mn(e, Gr, t, {
|
|
1848
1842
|
method: n,
|
|
1849
1843
|
...r === void 0 ? {} : { body: r }
|
|
1850
1844
|
}) ?? {
|
|
@@ -1852,40 +1846,40 @@ var Fi = () => Math.max(500, Math.floor($r() * .6)), Ii = (e) => new Promise((t)
|
|
|
1852
1846
|
contentType: "application/json",
|
|
1853
1847
|
body: JSON.stringify({ error: "not an inspect route" })
|
|
1854
1848
|
}) },
|
|
1855
|
-
...
|
|
1856
|
-
observability:
|
|
1857
|
-
port:
|
|
1858
|
-
...
|
|
1849
|
+
...h?.name === void 0 ? {} : { appName: h.name },
|
|
1850
|
+
observability: Pn,
|
|
1851
|
+
port: ie,
|
|
1852
|
+
...h?.transport?.wsPath ? { path: h.transport.wsPath } : {}
|
|
1859
1853
|
});
|
|
1860
|
-
return
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
|
|
1854
|
+
return R = X.dispatcher, Ee(It([
|
|
1855
|
+
v.queries,
|
|
1856
|
+
v.mutations,
|
|
1857
|
+
v.actions,
|
|
1858
|
+
v.streams
|
|
1865
1859
|
]), (e) => {
|
|
1866
1860
|
$.warn(e);
|
|
1867
|
-
}), $.info(`API listening on :${
|
|
1868
|
-
dialect:
|
|
1869
|
-
queries:
|
|
1870
|
-
mutations:
|
|
1871
|
-
actions:
|
|
1872
|
-
streams:
|
|
1873
|
-
workflows:
|
|
1874
|
-
workflowWorkers:
|
|
1875
|
-
schedules:
|
|
1876
|
-
scheduleCoordination:
|
|
1877
|
-
}), u.finish($),
|
|
1878
|
-
for (let e of
|
|
1879
|
-
|
|
1861
|
+
}), $.info(`API listening on :${ie}`, {
|
|
1862
|
+
dialect: g,
|
|
1863
|
+
queries: v.queries.length,
|
|
1864
|
+
mutations: v.mutations.length,
|
|
1865
|
+
actions: v.actions.length,
|
|
1866
|
+
streams: v.streams.length,
|
|
1867
|
+
workflows: v.workflows.length,
|
|
1868
|
+
workflowWorkers: v.workflowWorkers.length,
|
|
1869
|
+
schedules: Qn.length,
|
|
1870
|
+
scheduleCoordination: ar
|
|
1871
|
+
}), u.finish($), qr(async () => {
|
|
1872
|
+
for (let e of Tn) e.stop();
|
|
1873
|
+
Mt.stop();
|
|
1880
1874
|
try {
|
|
1881
|
-
await X.close(),
|
|
1882
|
-
mirror:
|
|
1875
|
+
await X.close(), Tt(), Ht?.dispose(), await Nn.deactivate(), await In?.close(), await Xe({
|
|
1876
|
+
mirror: At,
|
|
1883
1877
|
log: $
|
|
1884
|
-
}), await
|
|
1878
|
+
}), await Le.dispose(), await w.close?.();
|
|
1885
1879
|
} catch (e) {
|
|
1886
1880
|
console.error("serve: shutdown step failed, exiting anyway:", e);
|
|
1887
1881
|
}
|
|
1888
1882
|
}), await new Promise(() => {}), 0;
|
|
1889
1883
|
};
|
|
1890
1884
|
//#endregion
|
|
1891
|
-
export {
|
|
1885
|
+
export { ha as n, pa as r, ga as t };
|