@voltro/cli 0.39.0 → 0.40.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 +210 -0
- package/dist/agentsMd-Bu_XQgVf.js +2 -0
- package/dist/{agentsMd-7zI2h5l9.js → agentsMd-D6yD7IQv.js} +31 -14
- package/dist/apiBuild-BIyGkym8.js +2 -0
- package/dist/{apiBuild-DGalUk9v.js → apiBuild-C8xBEYbL.js} +2 -2
- package/dist/bin.js +1 -1
- package/dist/{build-CfF6t0UM.js → build-CkhFGnKA.js} +168 -165
- package/dist/{checkCommand-CBtynBKW.js → checkCommand-BcXJa2IS.js} +3 -3
- package/dist/{checkCommand-BV56Pcc1.js → checkCommand-QbHshOac.js} +1 -1
- package/dist/{cloudCmd-C42gaO8s.js → cloudCmd-F4YJeqM3.js} +1 -1
- package/dist/{codegenCommand-W7SDdiAQ.js → codegenCommand-DF2OJh3O.js} +2 -2
- package/dist/{codemodRunner-D-jTyvWo.js → codemodRunner-BcOvi4A2.js} +103 -0
- package/dist/{commands-BD9eBRY3.js → commands-7Z7-HOE3.js} +30 -30
- package/dist/{dashboardCommand-7qGylm0F.js → dashboardCommand-CUycH6dR.js} +5 -5
- package/dist/{dataCommand-C_F2DYxe.js → dataCommand-By78lscK.js} +1 -1
- package/dist/{dev-alhkKoEX.js → dev-D8JSKlBM.js} +1 -1
- package/dist/{dev-gqpnzVhI.js → dev-Dh1NuYx1.js} +1569 -1569
- package/dist/{doctorCommand-Bvs-BQrM.js → doctorCommand-C-8-Z9D6.js} +55 -42
- package/dist/doctorCommand-FhQ7EVYL.js +2 -0
- package/dist/{dormancyCommand-B-PPHc9Q.js → dormancyCommand-A79Odglm.js} +1 -1
- package/dist/{embeddingsCommand-OKY6XjUf.js → embeddingsCommand-CoiyHfkY.js} +1 -1
- package/dist/{envCommand-B1-Zm85H.js → envCommand-B6d0s-jZ.js} +8 -8
- package/dist/{evolveCommand-C4-NlFbd.js → evolveCommand-BC5a9lxX.js} +2 -2
- package/dist/frameworkTableAssembly-DgylYh9_.js +2 -0
- package/dist/index.js +1 -1
- package/dist/{infoCommand-CTo8Jnhq.js → infoCommand-ZqSVzJZ4.js} +1 -1
- package/dist/{metaCommands-DUYR--Ts.js → metaCommands-CfRLra0s.js} +1 -1
- package/dist/{projectScaffold-BEhhHjPr.js → projectScaffold-BIl97_E6.js} +1 -1
- package/dist/{projectScaffold-BvhLOrLq.js → projectScaffold-mIX_DpSe.js} +1 -1
- package/dist/{runtimeTrace-DzZOCd94.js → runtimeTrace-BslKJjDY.js} +1 -1
- package/dist/{sdkgen-C4roLErM.js → sdkgen-DQ8uEmmn.js} +1 -1
- package/dist/serveCommand-BmvEQCMS.js +2 -0
- package/dist/{serveCommand-B6TATyCj.js → serveCommand-Dqb9Ku1-.js} +657 -657
- package/dist/serveEntry.js +1 -1
- package/dist/{start-BNuTWdRd.js → start-BA7txHhY.js} +1 -1
- package/dist/{start-ft_KzFTd.js → start-dkNYKtgQ.js} +342 -318
- package/dist/startEntry.js +1 -1
- package/dist/updateCommand-BauSVxPp.js +2 -0
- package/dist/{updateCommand-CHBmCB17.js → updateCommand-eoGpZr3E.js} +1 -1
- package/dist/webDev-CBbKs4dZ.js +2 -0
- package/dist/{webDev-CTpSY-e_.js → webDev-bybjZA0o.js} +240 -186
- package/dist/{webhooksCommand-BVvOtZ1B.js → webhooksCommand-DubZWNOx.js} +1 -1
- package/package.json +29 -17
- package/templates/AGENTS.md +1 -1
- package/templates/agent-docs/_index.md +1 -1
- package/templates/agent-docs/authentication.md +13 -4
- package/templates/agent-docs/data.md +43 -0
- package/templates/agent-docs/routing.md +40 -0
- package/templates/agent-docs/whats-new.md +91 -157
- 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-durable/startup/warm.startup.tsx +16 -2
- package/templates/apps/api-durable/tests/orders.place.test.ts +17 -4
- 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/changelog/src/pages/[slug]/page.test.tsx +8 -1
- 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/agentsMd-BFCXh2gl.js +0 -2
- package/dist/apiBuild-2GvK8CUB.js +0 -2
- package/dist/doctorCommand-CVXfRrng.js +0 -2
- package/dist/frameworkTableAssembly-YyVe32Cb.js +0 -2
- package/dist/serveCommand-CNR0gI9V.js +0 -2
- package/dist/updateCommand-6FMU2klq.js +0 -2
- package/dist/webDev-id3I5PvG.js +0 -2
|
@@ -3,44 +3,44 @@ 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 f, Ct as p, D as ee, Dt as te, E as ne, Et as m, F as re, Ft as h, G as g, Gt as ie, H as
|
|
7
|
-
import { n as
|
|
8
|
-
import { r as
|
|
9
|
-
import {
|
|
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 { basename as
|
|
23
|
-
import { existsSync as
|
|
24
|
-
import { pathToFileURL as
|
|
25
|
-
import { createLogger as
|
|
26
|
-
import { AuthMiddleware as
|
|
27
|
-
import { Cause as zn, Effect as
|
|
6
|
+
import { $ as s, $t as c, A as l, At as u, B as d, C as f, Ct as p, D as ee, Dt as te, E as ne, Et as m, F as re, Ft as h, G as g, Gt as ie, H as _, I as ae, It as oe, J as se, Jt as v, K as ce, Kt as y, L as le, Lt as ue, M as de, Mt as b, N as fe, Nt as pe, O as me, Ot as he, P as ge, Pt as _e, Q as ve, Qt as ye, R as be, Rt as x, S as xe, Sn as Se, St as Ce, T as we, Tt as Te, U as Ee, Ut as S, V as De, Vt as Oe, W as ke, Wt as Ae, X as je, Xt as Me, Y as Ne, Yt as Pe, Z as Fe, Zt as C, _ as Ie, _n as Le, _t as w, an as Re, at as ze, b as Be, bn as Ve, bt as He, c as Ue, cn as T, ct as We, dn as Ge, dt as Ke, en as qe, et as Je, f as Ye, fn as E, ft as Xe, g as Ze, gn as Qe, gt as $e, h as et, ht as tt, i as nt, in as rt, it, j as at, jt as ot, k as st, kt as ct, ln as D, lt, m as ut, mn as dt, mt as O, nn as k, nt as ft, o as A, on as pt, ot as mt, p as ht, pn as gt, pt as _t, q as vt, qt as yt, r as bt, rn as xt, rt as St, sn as Ct, st as wt, t as Tt, tn as Et, tt as Dt, u as Ot, un as kt, ut as At, v as jt, vn as j, vt as M, w as N, wt as Mt, x as Nt, xn as Pt, xt as Ft, y as It, yn as Lt, yt as Rt, zt } from "./dev-Dh1NuYx1.js";
|
|
7
|
+
import { n as Bt } from "./cliArgs-D4p8n7EE.js";
|
|
8
|
+
import { r as Vt } from "./appPort-B_HpJ_ck.js";
|
|
9
|
+
import { dt as Ht, lt as P } from "./webDev-bybjZA0o.js";
|
|
10
|
+
import { r as F } from "./dialectDriver-czCHYpeH.js";
|
|
11
|
+
import { i as Ut, n as Wt } from "./connectionConfig-Bk9IC7D0.js";
|
|
12
|
+
import { c as Gt, n as Kt, o as qt } from "./seedRunner-IdHEprqf.js";
|
|
13
|
+
import { C as I, S as Jt, _ as Yt, d as Xt, g as Zt, l as Qt, m as $t, r as en, u as tn, v as nn } from "./frameworkTableAssembly-oMPBKqlE.js";
|
|
14
|
+
import { S as rn, c as an, n as on, p as sn, s as cn, x as ln } from "./fileConventions-Cof68_BL.js";
|
|
15
|
+
import { h as un, o as dn } from "./inspect-B7U7Cl_Z.js";
|
|
16
|
+
import { n as fn } from "./mssqlClusterPatch-_4cE_nun.js";
|
|
17
|
+
import { i as pn, n as mn, r as hn, t as gn } from "./webhookDiscovery-CphsQe59.js";
|
|
18
|
+
import { t as _n } from "./inspectMetrics-CfdKLh6t.js";
|
|
19
|
+
import { r as vn, u as yn } from "./apiBuild-C8xBEYbL.js";
|
|
20
|
+
import { t as bn } from "./bootTiming-BdyP9nYw.js";
|
|
21
|
+
import { t as xn } from "./dataProfile-dW-PsfLB.js";
|
|
22
|
+
import { basename as Sn, join as Cn } from "node:path";
|
|
23
|
+
import { existsSync as wn } from "node:fs";
|
|
24
|
+
import { pathToFileURL as Tn } from "node:url";
|
|
25
|
+
import { createLogger as L } from "@voltro/logger";
|
|
26
|
+
import { AuthMiddleware as En, ConnectionInfoMiddleware as Dn, actionToRpc as R, anonymousSubject as On, isWireReachable as kn, mutationToRpc as z, queryToRpc as B, streamToRpc as An, wireErrorUnion as jn, workflowCancelDescriptor as Mn, workflowDomainEventsQueryDescriptor as V, workflowEventDeliveriesQueryDescriptor as Nn, workflowResumeDescriptor as Pn, workflowRunEventsQueryDescriptor as H, workflowRunQueryDescriptor as U, workflowRunStepsQueryDescriptor as Fn, workflowRunsQueryDescriptor as In, workflowSignalDescriptor as Ln, workflowUpdateDescriptor as Rn } from "@voltro/protocol";
|
|
27
|
+
import { Cause as zn, Effect as W, Layer as G, ManagedRuntime as Bn } from "effect";
|
|
28
28
|
import { SqlClient as Vn } from "@effect/sql";
|
|
29
29
|
import { declaredSnapshot as Hn, describeOutcome as Un, pendingFileMigrationIds as Wn, runPlannedMigrations as Gn } from "@voltro/database/sql";
|
|
30
30
|
import { RpcGroup as Kn } from "@effect/rpc";
|
|
31
|
-
import { allRegisteredTables as qn, and as Jn, connectionIdentity as Yn, ensureTableRegistered as Xn, eq as
|
|
32
|
-
import { AggregateRegistry as
|
|
33
|
-
import { appStorageProvider as
|
|
34
|
-
import { isEnvContract as
|
|
35
|
-
import { assertProductionSessionSecret as
|
|
36
|
-
import { createHash as
|
|
37
|
-
import { buildDeliverWebhookExecute as
|
|
38
|
-
import { getAuthSessionStrategy as
|
|
39
|
-
import { registerEmailTemplates as
|
|
40
|
-
import { channelFor as
|
|
41
|
-
import { packBundle as
|
|
31
|
+
import { allRegisteredTables as qn, and as Jn, connectionIdentity as Yn, ensureTableRegistered as Xn, eq as K, or as Zn } from "@voltro/database";
|
|
32
|
+
import { AggregateRegistry as Qn, CostRegistry as $n, DORMANCY_WAKEUP_TENANT as er, Dispatcher as tr, ExpectationRegistry as q, ExperimentRegistry as nr, apiKeyManagementRoutes as rr, attachAnalyticsMirror as ir, attachExpectations as ar, attachExperiments as or, attachFinops as sr, awaitServerListening as cr, bindMutation as J, bindStream as lr, bindSubscription as Y, buildTracingLayer as ur, cancelWakeup as dr, compileCron as fr, dataStoreApiKeyStore as pr, formatServerOnlyLeaks as mr, formatUnresolvedSources as hr, frameworkApiKeyStrategy as gr, getResourcePolicy as _r, installPolicyGuardResolver as vr, loadResourceTuples as yr, makeActionRunner as br, makeAdvisoryLockCoordinator as xr, makeApiKeyService as Sr, makeApiKeyUsageBuffer as Cr, makeApiKeyUsageFlusher as wr, makeAsyncKv as Tr, makeAuthMiddlewareLayers as Er, makeCoordinatedScheduler as Dr, makeEffectStoreLayer as Or, makeLazyWorkflowFacade as kr, makeMutationOutputCodec as Ar, makeMutationRunner as jr, makeOneShotQueryRunner as Mr, makeQueryDescriptorProducer as Nr, makeQueryFinalizer as Pr, makeQueryReauthorizer as Fr, makeQuerySubscriber as Ir, makeSchemaRegistry as Lr, makeWorkflowFacade as Rr, makeWorkflowFacadeWithCallerContext as X, makeWorkflowLayers as zr, noopKv as Br, onProcessShutdown as Vr, recordSubscriptionDelivery as Hr, recordWorkflowRun as Ur, registerDefaultTupleSource as Wr, registerWakeup as Gr, resolveSecretsBackend as Kr, runProvidedEffect as qr, setSecretsBackend as Jr, setSystemStoreHandle as Z, shutdownGraceMsFromEnv as Yr, singleCoordinator as Xr, startRpcServer as Zr, startScheduler as Qr, stripForbiddenForWire as $r, undoCaptureEnabled as ei, unresolvedSources as ti, withScopedRequest as ni, workflowToRpc as ri, wrapStoreWithBootCodec as ii } from "@voltro/runtime";
|
|
33
|
+
import { appStorageProvider as ai, fromNodeReadable as oi, getObjectStream as si, putObjectStream as ci, toNodeReadable as li } from "@voltro/plugin-storage";
|
|
34
|
+
import { isEnvContract as ui } from "@voltro/env";
|
|
35
|
+
import { assertProductionSessionSecret as di } from "@voltro/protocol/session";
|
|
36
|
+
import { createHash as fi, timingSafeEqual as pi } from "node:crypto";
|
|
37
|
+
import { buildDeliverWebhookExecute as mi, buildWebhooksService as hi, defaultIncomingPath as gi, deliverWebhookWorkflow as _i, makeDeferredEmitHandler as vi, mountIncomingWebhook as yi } from "@voltro/plugin-webhooks";
|
|
38
|
+
import { getAuthSessionStrategy as bi } from "@voltro/plugin-auth";
|
|
39
|
+
import { registerEmailTemplates as xi } from "@voltro/plugin-mail";
|
|
40
|
+
import { channelFor as Si, getBroadcastPlugin as Ci } from "@voltro/plugin-broadcast";
|
|
41
|
+
import { packBundle as wi, runExport as Ti, runImport as Ei, storageBlobSink as Di, storageRefsBlobSource as Oi, unpackBundle as ki, unpackBundleToDir as Ai } from "@voltro/data-transfer";
|
|
42
42
|
//#region src/serveDrain.ts
|
|
43
|
-
var
|
|
43
|
+
var ji = () => Math.max(500, Math.floor(Yr() * .6)), Mi = (e) => new Promise((t) => setTimeout(t, e)), Ni = (e) => {
|
|
44
44
|
let t = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Set(), r = 0;
|
|
45
45
|
e.on("connection", (e) => {
|
|
46
46
|
t.add(e), e.once("close", () => {
|
|
@@ -54,14 +54,14 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
54
54
|
});
|
|
55
55
|
});
|
|
56
56
|
let i, a = async (t = {}) => {
|
|
57
|
-
let n = t.budgetMs ??
|
|
57
|
+
let n = t.budgetMs ?? ji();
|
|
58
58
|
i ??= new Promise((t) => {
|
|
59
59
|
e.close(() => {
|
|
60
60
|
t();
|
|
61
61
|
});
|
|
62
62
|
}), e.closeIdleConnections();
|
|
63
63
|
let a = Date.now() + n;
|
|
64
|
-
for (; r > 0 && Date.now() < a;) await
|
|
64
|
+
for (; r > 0 && Date.now() < a;) await Mi(25), e.closeIdleConnections();
|
|
65
65
|
e.closeIdleConnections();
|
|
66
66
|
}, o = async () => {
|
|
67
67
|
i ??= new Promise((t) => {
|
|
@@ -78,7 +78,7 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
78
78
|
]));
|
|
79
79
|
} catch {}
|
|
80
80
|
else e.destroy();
|
|
81
|
-
for (let e = 0; t.size > 0 && e < 250; e += 25) await
|
|
81
|
+
for (let e = 0; t.size > 0 && e < 250; e += 25) await Mi(25);
|
|
82
82
|
for (let e of t) e.destroy();
|
|
83
83
|
await i;
|
|
84
84
|
};
|
|
@@ -90,25 +90,25 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
90
90
|
await a(e), await o();
|
|
91
91
|
}
|
|
92
92
|
};
|
|
93
|
-
},
|
|
93
|
+
}, Pi = "/_voltro/admin/import", Fi = "/_voltro/admin/export", Q = (e, t) => ({
|
|
94
94
|
status: e,
|
|
95
95
|
contentType: "application/json; charset=utf-8",
|
|
96
96
|
body: JSON.stringify(t)
|
|
97
|
-
}),
|
|
97
|
+
}), Ii = (e) => {
|
|
98
98
|
let t = e.authorization ?? e.Authorization, n = t ? /^Bearer\s+(.+)$/i.exec(t) : null;
|
|
99
99
|
return n ? n[1] : null;
|
|
100
|
-
},
|
|
100
|
+
}, Li = (e, t) => pi(fi("sha256").update(e).digest(), fi("sha256").update(t).digest()), Ri = (e, t) => {
|
|
101
101
|
if (e.method.toUpperCase() !== "POST") return Q(405, { error: "method not allowed" });
|
|
102
102
|
if (!t || t.length < 16) return Q(503, { error: "data transfer misconfigured (no/weak secret)" });
|
|
103
|
-
let n =
|
|
104
|
-
return !n || !
|
|
105
|
-
},
|
|
103
|
+
let n = Ii(e.headers);
|
|
104
|
+
return !n || !Li(n, t) ? Q(401, { error: "unauthorized" }) : null;
|
|
105
|
+
}, zi = L({ scope: "voltro:admin-import" }), Bi = "VBUNDLE2", Vi = async function* (e) {
|
|
106
106
|
yield e;
|
|
107
|
-
},
|
|
108
|
-
let n =
|
|
107
|
+
}, Hi = (e) => async (t) => {
|
|
108
|
+
let n = Ri(t, e.secret);
|
|
109
109
|
if (n) return n;
|
|
110
|
-
let r = t.headers["x-import-mode"], i = t.headers["x-import-on-conflict"], a = t.headers["x-import-atomic"] === "1" || t.headers["x-import-atomic"] === "true", o = t.headers["x-import-force"] === "1" || t.headers["x-import-force"] === "true", s = t.rawBody.byteLength >= 8 && Buffer.from(t.rawBody.subarray(0, 8)).toString("latin1") ===
|
|
111
|
-
if (s) c =
|
|
110
|
+
let r = t.headers["x-import-mode"], i = t.headers["x-import-on-conflict"], a = t.headers["x-import-atomic"] === "1" || t.headers["x-import-atomic"] === "true", o = t.headers["x-import-force"] === "1" || t.headers["x-import-force"] === "true", s = t.rawBody.byteLength >= 8 && Buffer.from(t.rawBody.subarray(0, 8)).toString("latin1") === Bi, c, l;
|
|
111
|
+
if (s) c = Vi(t.rawBody), l = "upload";
|
|
112
112
|
else {
|
|
113
113
|
let n;
|
|
114
114
|
try {
|
|
@@ -122,11 +122,11 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
122
122
|
}
|
|
123
123
|
let u = await import("node:os"), d = await import("node:fs/promises"), f = await import("node:path"), p = await d.mkdtemp(f.join(u.tmpdir(), "voltro-admin-import-"));
|
|
124
124
|
try {
|
|
125
|
-
e.assetSink ? await
|
|
125
|
+
e.assetSink ? await ki(c, {
|
|
126
126
|
dir: p,
|
|
127
127
|
blobs: e.assetSink
|
|
128
|
-
}) : await
|
|
129
|
-
let t = await
|
|
128
|
+
}) : await Ai(c, p);
|
|
129
|
+
let t = await W.runPromiseExit(Ei({
|
|
130
130
|
store: e.store,
|
|
131
131
|
bundleDir: p,
|
|
132
132
|
...r ? { mode: r } : {},
|
|
@@ -134,14 +134,14 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
134
134
|
...a ? { atomic: a } : {},
|
|
135
135
|
...e.snapshot ? { targetSnapshot: e.snapshot } : {},
|
|
136
136
|
force: o,
|
|
137
|
-
onWarn: (e) =>
|
|
137
|
+
onWarn: (e) => zi.warn("admin.import", { message: e }),
|
|
138
138
|
...e.assetSink ? { assetsAlreadyRestored: !0 } : {}
|
|
139
139
|
}));
|
|
140
140
|
if (t._tag === "Failure") {
|
|
141
141
|
let e = t.cause._tag === "Fail" ? t.cause.error : void 0;
|
|
142
142
|
if (e && e._tag === "SchemaDriftError") {
|
|
143
143
|
let t = e;
|
|
144
|
-
return
|
|
144
|
+
return zi.warn("admin.import refused (schema drift)", {
|
|
145
145
|
transport: l,
|
|
146
146
|
bundle: t.bundleFingerprint.slice(0, 16),
|
|
147
147
|
target: t.targetFingerprint.slice(0, 16)
|
|
@@ -156,7 +156,7 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
156
156
|
throw Error(String(e?.message ?? e ?? "import failed"));
|
|
157
157
|
}
|
|
158
158
|
let n = t.value, s = n.tables.reduce((e, t) => e + t.rowCount, 0);
|
|
159
|
-
return
|
|
159
|
+
return zi.info("admin.import", {
|
|
160
160
|
transport: l,
|
|
161
161
|
tables: n.tables.length,
|
|
162
162
|
rows: s,
|
|
@@ -168,7 +168,7 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
168
168
|
transport: l
|
|
169
169
|
});
|
|
170
170
|
} catch (e) {
|
|
171
|
-
return
|
|
171
|
+
return zi.warn("admin.import failed", {
|
|
172
172
|
transport: l,
|
|
173
173
|
error: e?.message ?? String(e)
|
|
174
174
|
}), Q(500, {
|
|
@@ -181,18 +181,18 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
181
181
|
force: !0
|
|
182
182
|
});
|
|
183
183
|
}
|
|
184
|
-
},
|
|
184
|
+
}, Ui = L({ scope: "voltro:admin-export" }), Wi = async (e) => {
|
|
185
185
|
let t = [];
|
|
186
186
|
for await (let n of e) t.push(Buffer.from(n));
|
|
187
187
|
return new Uint8Array(Buffer.concat(t));
|
|
188
|
-
},
|
|
188
|
+
}, Gi = (e) => typeof e.tenant == "string" && e.tenant ? {
|
|
189
189
|
kind: "tenant",
|
|
190
190
|
tenantId: e.tenant
|
|
191
191
|
} : Array.isArray(e.tables) && e.tables.length ? {
|
|
192
192
|
kind: "tables",
|
|
193
193
|
tables: e.tables.filter((e) => typeof e == "string")
|
|
194
|
-
} : { kind: "all" },
|
|
195
|
-
let n =
|
|
194
|
+
} : { kind: "all" }, Ki = (e) => async (t) => {
|
|
195
|
+
let n = Ri(t, e.secret);
|
|
196
196
|
if (n) return n;
|
|
197
197
|
let r;
|
|
198
198
|
try {
|
|
@@ -212,9 +212,9 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
212
212
|
});
|
|
213
213
|
}
|
|
214
214
|
}
|
|
215
|
-
let a = r.consistency === "snapshot" ? "snapshot" : i.consistency ?? "live", o = (typeof r.compression == "string" ? r.compression : void 0) ?? i.compression, s = i.scope ??
|
|
215
|
+
let a = r.consistency === "snapshot" ? "snapshot" : i.consistency ?? "live", o = (typeof r.compression == "string" ? r.compression : void 0) ?? i.compression, s = i.scope ?? Gi(r), 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"), f = await import("node:path"), p = await d.mkdtemp(f.join(u.tmpdir(), "voltro-admin-export-"));
|
|
216
216
|
try {
|
|
217
|
-
let t = await
|
|
217
|
+
let t = await W.runPromise(Ti({
|
|
218
218
|
store: e.store,
|
|
219
219
|
snapshot: e.snapshot,
|
|
220
220
|
dialect: e.dialect,
|
|
@@ -230,10 +230,10 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
230
230
|
if (c) {
|
|
231
231
|
if (!e.putArchive) return Q(501, { error: "storage transport not configured on this instance" });
|
|
232
232
|
let i = r.bundleKey;
|
|
233
|
-
return await e.putArchive(i, () =>
|
|
233
|
+
return await e.putArchive(i, () => wi({
|
|
234
234
|
dir: p,
|
|
235
235
|
...l
|
|
236
|
-
})),
|
|
236
|
+
})), Ui.info("admin.export", {
|
|
237
237
|
transport: "storage",
|
|
238
238
|
tables: t.tables.length,
|
|
239
239
|
rows: n,
|
|
@@ -247,11 +247,11 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
247
247
|
transport: "storage"
|
|
248
248
|
});
|
|
249
249
|
}
|
|
250
|
-
let d = await
|
|
250
|
+
let d = await Wi(wi({
|
|
251
251
|
dir: p,
|
|
252
252
|
...l
|
|
253
253
|
}));
|
|
254
|
-
return
|
|
254
|
+
return Ui.info("admin.export", {
|
|
255
255
|
transport: "download",
|
|
256
256
|
tables: t.tables.length,
|
|
257
257
|
rows: n,
|
|
@@ -268,7 +268,7 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
268
268
|
}
|
|
269
269
|
};
|
|
270
270
|
} catch (e) {
|
|
271
|
-
return
|
|
271
|
+
return Ui.warn("admin.export failed", { error: e?.message ?? String(e) }), Q(500, {
|
|
272
272
|
error: "export failed",
|
|
273
273
|
message: e?.message ?? String(e)
|
|
274
274
|
});
|
|
@@ -278,8 +278,8 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
278
278
|
force: !0
|
|
279
279
|
});
|
|
280
280
|
}
|
|
281
|
-
},
|
|
282
|
-
let r = await
|
|
281
|
+
}, qi = (e, t, n = {}) => (async function* () {
|
|
282
|
+
let r = await W.runPromise(si(e, t).pipe(W.timeout(n.openTimeout ?? "30 seconds"))), i = await li(r.stream), a = n.stallMs ?? 12e4, o, s = () => {
|
|
283
283
|
o && clearTimeout(o), o = setTimeout(() => i.destroy(/* @__PURE__ */ Error(`storage read stalled for ${a}ms reading '${t}'`)), a);
|
|
284
284
|
};
|
|
285
285
|
try {
|
|
@@ -288,7 +288,7 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
288
288
|
} finally {
|
|
289
289
|
o && clearTimeout(o), i.destroy();
|
|
290
290
|
}
|
|
291
|
-
})(),
|
|
291
|
+
})(), Ji = {
|
|
292
292
|
get: async () => void 0,
|
|
293
293
|
set: async () => {},
|
|
294
294
|
setWithTags: async () => {},
|
|
@@ -297,64 +297,64 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
297
297
|
clear: async () => {},
|
|
298
298
|
invalidateTag: async () => 0,
|
|
299
299
|
wrap: async (e, t, n) => n()
|
|
300
|
-
},
|
|
301
|
-
|
|
300
|
+
}, Yi = async (e) => {
|
|
301
|
+
zt(e.appProcedures ?? e.discovered, {
|
|
302
302
|
defaultDeny: e.security?.defaultDeny ?? !0,
|
|
303
303
|
commandHint: "`voltro serve`"
|
|
304
|
-
}),
|
|
304
|
+
}), Z({
|
|
305
305
|
dataStore: e.store,
|
|
306
306
|
schemaRegistry: e.schemaRegistry
|
|
307
307
|
});
|
|
308
|
-
let t = (e.discovered.budgets?.length ?? 0) > 0, n, r = new
|
|
308
|
+
let t = (e.discovered.budgets?.length ?? 0) > 0, n, r = new tr({
|
|
309
309
|
store: e.store,
|
|
310
310
|
...e.snapshotCache ? { cache: e.snapshotCache } : {},
|
|
311
311
|
...e.reactive === void 0 ? {} : { reactive: e.reactive },
|
|
312
312
|
...t ? { recordCost: (e) => n?.record(e) } : {},
|
|
313
|
-
recordDelivery: (e) =>
|
|
313
|
+
recordDelivery: (e) => Hr({
|
|
314
314
|
label: e.label,
|
|
315
315
|
kind: e.kind,
|
|
316
316
|
durationMs: e.durationMs,
|
|
317
317
|
rowCount: e.rowCount
|
|
318
318
|
})
|
|
319
|
-
}), i = e.cache ??
|
|
319
|
+
}), i = e.cache ?? Ji, a = e.kv ?? Br, o, c = () => void 0, l, f, p, ee, te, ne, oe, se = ie({
|
|
320
320
|
store: e.store,
|
|
321
321
|
warn: (e, t) => {
|
|
322
322
|
process.stderr.write(`[workflow] ${e} ${JSON.stringify(t)}\n`);
|
|
323
323
|
}
|
|
324
|
-
}),
|
|
324
|
+
}), ce = se.remember, le = se.resolve, ue = y({
|
|
325
325
|
authority: e.authority,
|
|
326
326
|
getStore: () => e.store
|
|
327
|
-
}),
|
|
328
|
-
if (
|
|
327
|
+
}), b = (e.discovered.workflows?.length ?? 0) > 0 ? kr(() => o) : void 0, pe = (e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.eventTriggers?.length ?? 0) > 0, me = pe || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster", he = e.tenantIsolation === "namespace", ge = (e.log ?? L({ scope: "voltro:serve" })).child("webhooks"), ye, be, x = e.discovered.webhooks;
|
|
328
|
+
if (x && x.outgoing.length > 0 && e.workflowEngineLayer !== void 0) {
|
|
329
329
|
e.workflowEngineLayer;
|
|
330
|
-
let t =
|
|
330
|
+
let t = T({
|
|
331
331
|
store: e.store,
|
|
332
332
|
schemaRegistry: e.schemaRegistry,
|
|
333
333
|
cache: i,
|
|
334
334
|
kv: a
|
|
335
|
-
}), n =
|
|
336
|
-
|
|
335
|
+
}), n = x.outgoing.map((e) => e.descriptor);
|
|
336
|
+
be = _i.toLayer(mi(t, { events: n })), ye = hi(t, async (e) => {
|
|
337
337
|
let t = p;
|
|
338
338
|
if (t === void 0) {
|
|
339
|
-
|
|
339
|
+
ge.error("webhook delivery skipped — the workflow runtime was never built. This is a framework defect, not a configuration problem: report it with your engine setting. Deliveries are NOT queued and will not be retried.", {
|
|
340
340
|
deliveryId: e.deliveryId,
|
|
341
341
|
targetId: e.targetId
|
|
342
342
|
});
|
|
343
343
|
return;
|
|
344
344
|
}
|
|
345
|
-
t.runPromise(
|
|
346
|
-
|
|
345
|
+
t.runPromise(_i.execute(e)).catch((t) => {
|
|
346
|
+
ge.error("deliverWebhook workflow crashed", {
|
|
347
347
|
deliveryId: e.deliveryId,
|
|
348
348
|
targetId: e.targetId
|
|
349
349
|
}, t);
|
|
350
350
|
});
|
|
351
351
|
}, { events: n });
|
|
352
352
|
}
|
|
353
|
-
let
|
|
354
|
-
if (
|
|
355
|
-
let t = e.descriptor.path ??
|
|
353
|
+
let xe = /* @__PURE__ */ new Map();
|
|
354
|
+
if (x) for (let e of x.incoming) {
|
|
355
|
+
let t = e.descriptor.path ?? gi(e.descriptor.id), n = `VOLTRO_WEBHOOK_SECRET_${e.descriptor.id.toUpperCase().replace(/[^A-Z0-9]/g, "_")}`, r = yi(e.descriptor, {
|
|
356
356
|
resolveSecret: async () => process.env[n] ?? null,
|
|
357
|
-
resolveWorkflows: () =>
|
|
357
|
+
resolveWorkflows: () => b === void 0 ? void 0 : X(b, {
|
|
358
358
|
traceId: `incoming:${e.descriptor.id}`,
|
|
359
359
|
source: `incoming:${e.descriptor.id}`
|
|
360
360
|
}),
|
|
@@ -366,34 +366,34 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
366
366
|
idempotency: e.idempotency,
|
|
367
367
|
durationMs: e.durationMs
|
|
368
368
|
};
|
|
369
|
-
e.status >= 500 ?
|
|
369
|
+
e.status >= 500 ? ge.error("incoming delivery failed", t) : e.status >= 400 ? ge.warn("incoming delivery rejected", t) : ge.info("incoming delivery handled", t);
|
|
370
370
|
}
|
|
371
371
|
});
|
|
372
|
-
|
|
372
|
+
xe.set(t, { handle: r });
|
|
373
373
|
}
|
|
374
|
-
|
|
375
|
-
let
|
|
374
|
+
vr(), Wr((t) => yr(e.store, t.subjectId, t.resourceType, t.resourceId)) || L({ scope: "voltro:serve" }).info("policy guards: using the app-registered tuple source");
|
|
375
|
+
let Se = [], Ce = [...e.discovered.outboxHandlers ?? [], ...mn((x?.outgoing.length ?? 0) + (x?.incoming.length ?? 0) + (x?.providers.length ?? 0), []) ? [{
|
|
376
376
|
file: "<framework>/webhooks",
|
|
377
377
|
id: "voltro-webhook-emit",
|
|
378
|
-
definition:
|
|
379
|
-
}] : []],
|
|
380
|
-
handlers:
|
|
378
|
+
definition: vi(() => ye)
|
|
379
|
+
}] : []], we = Ce.length > 0 ? Me({
|
|
380
|
+
handlers: Ce,
|
|
381
381
|
store: e.store,
|
|
382
|
-
log: (e.log ??
|
|
382
|
+
log: (e.log ?? L({ scope: "voltro:serve" })).child("outbox"),
|
|
383
383
|
onChange: (t) => e.store.onChange((e) => t({
|
|
384
384
|
table: e.table,
|
|
385
385
|
op: e.op
|
|
386
386
|
})),
|
|
387
387
|
onShutdown: (e) => {
|
|
388
|
-
|
|
388
|
+
Se.push(e);
|
|
389
389
|
}
|
|
390
|
-
}) : void 0,
|
|
390
|
+
}) : void 0, S = v({
|
|
391
391
|
definitions: (e.discovered.connections ?? []).map((e) => e.definition),
|
|
392
392
|
store: e.store,
|
|
393
|
-
publicUrl:
|
|
394
|
-
log: (e.log ??
|
|
393
|
+
publicUrl: yt(e.port ?? 4e3),
|
|
394
|
+
log: (e.log ?? L({ scope: "voltro:serve" })).child("connections")
|
|
395
395
|
});
|
|
396
|
-
|
|
396
|
+
at({
|
|
397
397
|
events: e.discovered.events ?? [],
|
|
398
398
|
rpcTags: [
|
|
399
399
|
...e.discovered.queries.map((e) => e.descriptor.name),
|
|
@@ -402,198 +402,198 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
402
402
|
...(e.discovered.streams ?? []).map((e) => e.descriptor.name)
|
|
403
403
|
]
|
|
404
404
|
});
|
|
405
|
-
let
|
|
406
|
-
instanceId:
|
|
407
|
-
namespace:
|
|
405
|
+
let Oe = (e.log ?? L({ scope: "voltro:serve" })).child("events"), Ae = e.broadcastNamespace ?? Ze(e.plugins, void 0), Ne = Ie(e.plugins, Ae, Oe), Pe = e.membership?.instanceId ?? process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, Le = e.membership ?? jt(e.plugins, {
|
|
406
|
+
instanceId: Pe,
|
|
407
|
+
namespace: Ae,
|
|
408
408
|
meta: { mode: "serve" },
|
|
409
|
-
logger:
|
|
410
|
-
}),
|
|
409
|
+
logger: Oe
|
|
410
|
+
}), w = de({
|
|
411
411
|
events: e.discovered.events ?? [],
|
|
412
|
-
origin:
|
|
413
|
-
...
|
|
414
|
-
}),
|
|
412
|
+
origin: Pe,
|
|
413
|
+
...Ne.publishRemote === void 0 ? {} : { publishRemote: Ne.publishRemote }
|
|
414
|
+
}), Re = (e.discovered.events ?? []).length > 0 ? await Ne.attach(w.bus) : null, ze = Ct({
|
|
415
415
|
store: e.store,
|
|
416
416
|
schemaRegistry: e.schemaRegistry,
|
|
417
417
|
cache: i,
|
|
418
418
|
kv: a,
|
|
419
|
-
...
|
|
420
|
-
...
|
|
419
|
+
...ye === void 0 ? {} : { webhooksService: ye },
|
|
420
|
+
...b === void 0 ? {} : { workflowsProxy: b },
|
|
421
421
|
eventTriggers: e.discovered.eventTriggers ?? [],
|
|
422
|
-
namespaceIsolationOn:
|
|
422
|
+
namespaceIsolationOn: he,
|
|
423
423
|
...e.ensureTenantProvisioned === void 0 ? {} : { ensureTenantProvisioned: e.ensureTenantProvisioned },
|
|
424
424
|
...e.resolveResidentStore === void 0 ? {} : { resolveResidentStore: e.resolveResidentStore },
|
|
425
|
-
...
|
|
426
|
-
...
|
|
427
|
-
eventBus:
|
|
428
|
-
}),
|
|
429
|
-
let r = t.pipe(
|
|
430
|
-
return (e.baseLayer ? r.pipe(
|
|
431
|
-
},
|
|
432
|
-
let n =
|
|
433
|
-
return
|
|
434
|
-
},
|
|
425
|
+
...we === void 0 ? {} : { outbox: { nudge: we.nudge } },
|
|
426
|
+
...S.active ? { connections: { registry: S.registry } } : {},
|
|
427
|
+
eventBus: w.bus
|
|
428
|
+
}), Be = G.succeed(Qn, m), Ve = G.succeed(q, He), Ue = G.succeed($n, Rt), Ge = G.succeed(nr, Ft), qe = (t, n) => {
|
|
429
|
+
let r = t.pipe(W.provide(Or(n)));
|
|
430
|
+
return (e.baseLayer ? r.pipe(W.provide(e.baseLayer)) : r).pipe(W.provide(Be)).pipe(W.provide(Ve)).pipe(W.provide(Ue)).pipe(W.provide(Ge));
|
|
431
|
+
}, Je = (e, t) => {
|
|
432
|
+
let n = qe(e, t);
|
|
433
|
+
return qr(n);
|
|
434
|
+
}, Ye = _n(), E = vt(e.plugins ?? [], Ye), Xe = d({
|
|
435
435
|
plugins: e.plugins ?? [],
|
|
436
|
-
metrics:
|
|
437
|
-
log: e.log ??
|
|
438
|
-
}),
|
|
436
|
+
metrics: Ye,
|
|
437
|
+
log: e.log ?? L({ scope: "voltro:serve" })
|
|
438
|
+
}), Qe = g(e.plugins ?? [], Ye), $e = e.security?.defaultDeny ?? !0, et = jr({
|
|
439
439
|
store: e.store,
|
|
440
|
-
defaultDeny:
|
|
440
|
+
defaultDeny: $e,
|
|
441
441
|
recordMetric: (e) => {
|
|
442
|
-
|
|
442
|
+
Ye.record(e);
|
|
443
443
|
},
|
|
444
|
-
...
|
|
445
|
-
buildContext: (e, t, n) =>
|
|
446
|
-
runEffect:
|
|
447
|
-
undoCapture:
|
|
448
|
-
}),
|
|
444
|
+
...E.mutation === void 0 ? {} : { interceptor: E.mutation },
|
|
445
|
+
buildContext: (e, t, n) => ze(e, t, n),
|
|
446
|
+
runEffect: Je,
|
|
447
|
+
undoCapture: ve()
|
|
448
|
+
}), nt = Fe();
|
|
449
449
|
{
|
|
450
450
|
let t = s();
|
|
451
|
-
t !== void 0 && (e.log ??
|
|
451
|
+
t !== void 0 && (e.log ?? L({ scope: "voltro:serve" })).info(t);
|
|
452
452
|
}
|
|
453
|
-
let
|
|
453
|
+
let rt = je({
|
|
454
454
|
store: e.store,
|
|
455
455
|
...e.approvals === void 0 ? {} : { defaultExpiryMs: e.approvals.defaultExpiryMs }
|
|
456
|
-
}),
|
|
457
|
-
defaultDeny:
|
|
458
|
-
buildContext: (e) =>
|
|
459
|
-
runEffect:
|
|
456
|
+
}), it = br({
|
|
457
|
+
defaultDeny: $e,
|
|
458
|
+
buildContext: (e) => ze(e),
|
|
459
|
+
runEffect: Je,
|
|
460
460
|
recordMetric: (e) => {
|
|
461
|
-
|
|
461
|
+
Ye.record(e);
|
|
462
462
|
},
|
|
463
|
-
...
|
|
464
|
-
}),
|
|
463
|
+
...E.action === void 0 ? {} : { interceptor: E.action }
|
|
464
|
+
}), st = Pr({
|
|
465
465
|
tenantScopedTables: e.tenantScopedTables,
|
|
466
466
|
softDeleteScopedTables: e.softDeleteScopedTables
|
|
467
|
-
}),
|
|
468
|
-
defaultDeny:
|
|
469
|
-
buildContext: (e) =>
|
|
470
|
-
finalize: (e, t) =>
|
|
471
|
-
provideEffect:
|
|
472
|
-
...
|
|
473
|
-
},
|
|
474
|
-
...
|
|
475
|
-
queryRows: (t, n) => e.store.query(t).then((e) =>
|
|
476
|
-
}),
|
|
477
|
-
...
|
|
467
|
+
}), ct = {
|
|
468
|
+
defaultDeny: $e,
|
|
469
|
+
buildContext: (e) => ze(e),
|
|
470
|
+
finalize: (e, t) => st(e, t.subject),
|
|
471
|
+
provideEffect: qe,
|
|
472
|
+
...E.query === void 0 ? {} : { interceptor: E.query }
|
|
473
|
+
}, D = Nr(ct), ut = Mr({
|
|
474
|
+
...ct,
|
|
475
|
+
queryRows: (t, n) => e.store.query(t).then((e) => $r(t.table, e, n.subject))
|
|
476
|
+
}), dt = Ir({
|
|
477
|
+
...ct,
|
|
478
478
|
subscribeDescriptor: (e, t, n) => r.subscribe(e, t, n),
|
|
479
479
|
subscribeComputed: (e, t, n) => r.subscribeComputed(e, t, n)
|
|
480
|
-
}),
|
|
480
|
+
}), O = (e) => e.filter((e) => kn(e.descriptor)), k = {};
|
|
481
481
|
for (let t of [
|
|
482
|
-
...
|
|
483
|
-
...
|
|
484
|
-
...
|
|
485
|
-
...
|
|
486
|
-
])
|
|
482
|
+
...O(e.discovered.queries),
|
|
483
|
+
...nt.queries,
|
|
484
|
+
...rt.queries,
|
|
485
|
+
...S.queries
|
|
486
|
+
]) k[t.descriptor.name] = (e) => Y(D(t, e), r, `subscription.${t.descriptor.name}`, void 0, void 0, Fr(t, e));
|
|
487
487
|
for (let t of [
|
|
488
|
-
...
|
|
489
|
-
...
|
|
490
|
-
...
|
|
491
|
-
...
|
|
488
|
+
...O(e.discovered.mutations),
|
|
489
|
+
...nt.mutations,
|
|
490
|
+
...rt.mutations,
|
|
491
|
+
...S.mutations
|
|
492
492
|
]) {
|
|
493
|
-
let n =
|
|
494
|
-
|
|
493
|
+
let n = Ar(t.descriptor.output);
|
|
494
|
+
k[t.descriptor.name] = (r) => J(async (e, n) => et(t, e, n), r, `mutation.${t.descriptor.name}`, n, e.idempotency, jn(t.descriptor, "mutation"));
|
|
495
495
|
}
|
|
496
|
-
for (let t of [...
|
|
497
|
-
let n =
|
|
498
|
-
|
|
496
|
+
for (let t of [...O(e.discovered.actions), ...S.actions]) {
|
|
497
|
+
let n = Ar(t.descriptor.output);
|
|
498
|
+
k[t.descriptor.name] = (r) => J(async (e, n) => it(t, e, n), r, `action.${t.descriptor.name}`, n, e.idempotency, jn(t.descriptor, "action"));
|
|
499
499
|
}
|
|
500
|
-
let
|
|
500
|
+
let ft = () => `public-${Math.random().toString(36).slice(2, 10)}`, A = [
|
|
501
501
|
...e.discovered.queries.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
|
|
502
502
|
descriptor: e.descriptor,
|
|
503
|
-
invoke: (t, n) =>
|
|
503
|
+
invoke: (t, n) => ut(e, t, {
|
|
504
504
|
subject: n.subject,
|
|
505
|
-
traceId:
|
|
505
|
+
traceId: ft()
|
|
506
506
|
}),
|
|
507
|
-
subscribe: (t, n, r) =>
|
|
507
|
+
subscribe: (t, n, r) => dt(e, t, {
|
|
508
508
|
subject: n.subject,
|
|
509
|
-
traceId:
|
|
509
|
+
traceId: ft()
|
|
510
510
|
}, r)
|
|
511
511
|
})),
|
|
512
512
|
...e.discovered.mutations.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
|
|
513
513
|
descriptor: e.descriptor,
|
|
514
|
-
invoke: (t, n) =>
|
|
514
|
+
invoke: (t, n) => et(e, t, {
|
|
515
515
|
subject: n.subject,
|
|
516
|
-
traceId:
|
|
516
|
+
traceId: ft()
|
|
517
517
|
})
|
|
518
518
|
})),
|
|
519
519
|
...e.discovered.actions.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
|
|
520
520
|
descriptor: e.descriptor,
|
|
521
|
-
invoke: (t, n) =>
|
|
521
|
+
invoke: (t, n) => it(e, t, {
|
|
522
522
|
subject: n.subject,
|
|
523
|
-
traceId:
|
|
523
|
+
traceId: ft()
|
|
524
524
|
})
|
|
525
525
|
}))
|
|
526
|
-
],
|
|
526
|
+
], mt = {
|
|
527
527
|
candidates: h({
|
|
528
528
|
queries: e.discovered.queries,
|
|
529
529
|
mutations: e.discovered.mutations,
|
|
530
530
|
actions: e.discovered.actions,
|
|
531
531
|
descriptorOf: (e) => e.descriptor,
|
|
532
|
-
runQuery: (e, t, n) => Promise.resolve(
|
|
533
|
-
runMutation: (e, t, n) => Promise.resolve(
|
|
534
|
-
runAction: (e, t, n) => Promise.resolve(
|
|
532
|
+
runQuery: (e, t, n) => Promise.resolve(ut(e, t, n)),
|
|
533
|
+
runMutation: (e, t, n) => Promise.resolve(et(e, t, n)),
|
|
534
|
+
runAction: (e, t, n) => Promise.resolve(it(e, t, n))
|
|
535
535
|
}),
|
|
536
536
|
policy: e.agents?.tools ?? {},
|
|
537
537
|
mcpEnabled: e.agents?.mcp === !0,
|
|
538
538
|
resolveSubject: (t) => e.resolveSubject(t, -1).then((e) => e.subject)
|
|
539
|
-
},
|
|
539
|
+
}, ht = Et({
|
|
540
540
|
...e.restRoutes === void 0 ? {} : { restRoutes: e.restRoutes },
|
|
541
|
-
publicApiEntries:
|
|
541
|
+
publicApiEntries: A,
|
|
542
542
|
store: e.store,
|
|
543
543
|
resolveSubject: (t) => e.resolveSubject(t, -1).then((e) => e.subject),
|
|
544
544
|
...e.idempotency === void 0 ? {} : { idempotency: e.idempotency },
|
|
545
|
-
log: e.log ??
|
|
546
|
-
}),
|
|
545
|
+
log: e.log ?? L({ scope: "voltro:serve" })
|
|
546
|
+
}), gt = e.dataTransferSecret ?? process.env.VOLTRO_DATA_TRANSFER_SECRET, _t = gt && gt.length >= 16 ? [{
|
|
547
547
|
method: "POST",
|
|
548
|
-
path:
|
|
549
|
-
handle:
|
|
550
|
-
secret:
|
|
548
|
+
path: Pi,
|
|
549
|
+
handle: Hi({
|
|
550
|
+
secret: gt,
|
|
551
551
|
store: e.store,
|
|
552
552
|
...e.dataTransferSnapshot ? { snapshot: e.dataTransferSnapshot } : {},
|
|
553
|
-
assetSink:
|
|
554
|
-
openArchive: (e) =>
|
|
553
|
+
assetSink: Di(ai()),
|
|
554
|
+
openArchive: (e) => qi(ai(), e)
|
|
555
555
|
})
|
|
556
556
|
}, {
|
|
557
557
|
method: "POST",
|
|
558
|
-
path:
|
|
559
|
-
handle:
|
|
560
|
-
secret:
|
|
558
|
+
path: Fi,
|
|
559
|
+
handle: Ki({
|
|
560
|
+
secret: gt,
|
|
561
561
|
store: e.store,
|
|
562
562
|
snapshot: e.dataTransferSnapshot ?? { tables: [] },
|
|
563
563
|
dialect: e.dataTransferDialect ?? "memory",
|
|
564
564
|
tenantTables: [...e.tenantScopedTables],
|
|
565
|
-
loadProfile:
|
|
566
|
-
assetSource:
|
|
565
|
+
loadProfile: xn,
|
|
566
|
+
assetSource: Oi(ai(), e.store),
|
|
567
567
|
putArchive: async (e, t) => {
|
|
568
|
-
let { Readable: n } = await import("node:stream"), r =
|
|
569
|
-
await
|
|
568
|
+
let { Readable: n } = await import("node:stream"), r = ai(), i = oi("storage", () => n.from(t()));
|
|
569
|
+
await W.runPromise(ci(r, e, i, { contentType: "application/octet-stream" }));
|
|
570
570
|
}
|
|
571
571
|
})
|
|
572
|
-
}] : [],
|
|
572
|
+
}] : [], bt = [
|
|
573
573
|
...e.httpRoutes ?? [],
|
|
574
|
-
...
|
|
575
|
-
...
|
|
576
|
-
...
|
|
574
|
+
...ht.httpRoutes,
|
|
575
|
+
..._t,
|
|
576
|
+
...S.httpRoutes
|
|
577
577
|
];
|
|
578
|
-
Object.assign(
|
|
579
|
-
for (let t of
|
|
580
|
-
let i =
|
|
581
|
-
if (
|
|
582
|
-
let t = a.pipe(
|
|
583
|
-
return (e.baseLayer ? t.pipe(
|
|
578
|
+
Object.assign(k, w.handlers);
|
|
579
|
+
for (let t of O(e.discovered.streams ?? [])) k[t.descriptor.name] = (n) => lr((r) => ni(r, (r) => {
|
|
580
|
+
let i = ze(r), a = t.executor(n, i);
|
|
581
|
+
if (W.isEffect(a)) {
|
|
582
|
+
let t = a.pipe(W.provide(Or(i.store)));
|
|
583
|
+
return (e.baseLayer ? t.pipe(W.provide(e.baseLayer)) : t).pipe(W.provide(Be)).pipe(W.provide(Ve)).pipe(W.provide(Ue)).pipe(W.provide(Ge));
|
|
584
584
|
}
|
|
585
|
-
return typeof a == "object" && a && typeof a.then == "function" ?
|
|
585
|
+
return typeof a == "object" && a && typeof a.then == "function" ? W.promise(() => a) : a;
|
|
586
586
|
}), `stream.${t.descriptor.name}`);
|
|
587
|
-
for (let t of e.discovered.workflows ?? [])
|
|
587
|
+
for (let t of e.discovered.workflows ?? []) k[t.definition.name] = (e) => J(async (e, n) => {
|
|
588
588
|
let r = n;
|
|
589
|
-
return
|
|
589
|
+
return X(b, {
|
|
590
590
|
subject: r.subject,
|
|
591
591
|
traceId: r.traceId,
|
|
592
592
|
source: "workflow-rpc"
|
|
593
593
|
}).start(t.definition.name, e);
|
|
594
594
|
}, e, `workflow.${t.definition.name}`);
|
|
595
|
-
|
|
596
|
-
descriptor:
|
|
595
|
+
pe && (k[U.name] = (e) => Y(D({
|
|
596
|
+
descriptor: U,
|
|
597
597
|
executor: (e) => {
|
|
598
598
|
let t = e.id;
|
|
599
599
|
return {
|
|
@@ -602,16 +602,16 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
602
602
|
column: "startedAt",
|
|
603
603
|
direction: "desc"
|
|
604
604
|
}],
|
|
605
|
-
predicate: K(
|
|
605
|
+
predicate: Zn(K("id", t), K("executionId", t)),
|
|
606
606
|
take: 1,
|
|
607
607
|
skip: void 0,
|
|
608
608
|
projection: void 0
|
|
609
609
|
};
|
|
610
610
|
}
|
|
611
|
-
}, e), r, `subscription.${
|
|
611
|
+
}, e), r, `subscription.${U.name}`), k[In.name] = (e) => Y(D({
|
|
612
612
|
descriptor: In,
|
|
613
613
|
executor: (e) => {
|
|
614
|
-
let t = e, n = [...t.tag === void 0 ? [] : [
|
|
614
|
+
let t = e, n = [...t.tag === void 0 ? [] : [K("tag", t.tag)], ...t.status === void 0 ? [] : [K("status", t.status)]], r = Number.isFinite(t.limit) && t.limit !== void 0 ? Math.min(Math.max(Math.floor(t.limit), 1), 500) : 100;
|
|
615
615
|
return {
|
|
616
616
|
table: "_voltro_workflow_runs",
|
|
617
617
|
order: [{
|
|
@@ -624,8 +624,8 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
624
624
|
projection: void 0
|
|
625
625
|
};
|
|
626
626
|
}
|
|
627
|
-
}, e), r, `subscription.${In.name}`),
|
|
628
|
-
descriptor:
|
|
627
|
+
}, e), r, `subscription.${In.name}`), k[Fn.name] = (e) => Y(D({
|
|
628
|
+
descriptor: Fn,
|
|
629
629
|
executor: (e) => {
|
|
630
630
|
let t = e.runId;
|
|
631
631
|
return {
|
|
@@ -634,14 +634,14 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
634
634
|
column: "startedAt",
|
|
635
635
|
direction: "asc"
|
|
636
636
|
}],
|
|
637
|
-
predicate:
|
|
637
|
+
predicate: K("runId", t),
|
|
638
638
|
take: 1e3,
|
|
639
639
|
skip: void 0,
|
|
640
640
|
projection: void 0
|
|
641
641
|
};
|
|
642
642
|
}
|
|
643
|
-
}, e), r, `subscription.${
|
|
644
|
-
descriptor:
|
|
643
|
+
}, e), r, `subscription.${Fn.name}`), k[H.name] = (e) => Y(D({
|
|
644
|
+
descriptor: H,
|
|
645
645
|
executor: (e) => {
|
|
646
646
|
let t = e.runId;
|
|
647
647
|
return {
|
|
@@ -650,14 +650,14 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
650
650
|
column: "occurredAt",
|
|
651
651
|
direction: "asc"
|
|
652
652
|
}],
|
|
653
|
-
predicate:
|
|
653
|
+
predicate: K("runId", t),
|
|
654
654
|
take: 1e3,
|
|
655
655
|
skip: void 0,
|
|
656
656
|
projection: void 0
|
|
657
657
|
};
|
|
658
658
|
}
|
|
659
|
-
}, e), r, `subscription.${
|
|
660
|
-
descriptor:
|
|
659
|
+
}, e), r, `subscription.${H.name}`), k[V.name] = (e) => Y(D({
|
|
660
|
+
descriptor: V,
|
|
661
661
|
executor: (e) => {
|
|
662
662
|
let t = e;
|
|
663
663
|
return {
|
|
@@ -666,14 +666,14 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
666
666
|
column: "occurredAt",
|
|
667
667
|
direction: "desc"
|
|
668
668
|
}],
|
|
669
|
-
predicate: t.name === void 0 ? void 0 :
|
|
669
|
+
predicate: t.name === void 0 ? void 0 : K("name", t.name),
|
|
670
670
|
take: Math.max(1, Math.min(500, t.limit ?? 100)),
|
|
671
671
|
skip: void 0,
|
|
672
672
|
projection: void 0
|
|
673
673
|
};
|
|
674
674
|
}
|
|
675
|
-
}, e), r, `subscription.${
|
|
676
|
-
descriptor:
|
|
675
|
+
}, e), r, `subscription.${V.name}`), k[Nn.name] = (e) => Y(D({
|
|
676
|
+
descriptor: Nn,
|
|
677
677
|
executor: (e) => {
|
|
678
678
|
let t = e.eventId;
|
|
679
679
|
return {
|
|
@@ -682,73 +682,73 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
682
682
|
column: "createdAt",
|
|
683
683
|
direction: "asc"
|
|
684
684
|
}],
|
|
685
|
-
predicate:
|
|
685
|
+
predicate: K("eventId", t),
|
|
686
686
|
take: 500,
|
|
687
687
|
skip: void 0,
|
|
688
688
|
projection: void 0
|
|
689
689
|
};
|
|
690
690
|
}
|
|
691
|
-
}, e), r, `subscription.${
|
|
691
|
+
}, e), r, `subscription.${Nn.name}`), k[Mn.name] = (t) => J(async (t, n) => {
|
|
692
692
|
let r = t;
|
|
693
|
-
return await
|
|
694
|
-
}, t, `action.${
|
|
693
|
+
return await pt(e.store, n.subject, { executionId: r.executionId }), await b.cancel(r.workflowName, r.executionId), await Nt(r.workflowName, r.executionId, "workflow.cancel"), { ok: !0 };
|
|
694
|
+
}, t, `action.${Mn.name}`), k[Pn.name] = (t) => J(async (t, n) => {
|
|
695
695
|
let r = t;
|
|
696
|
-
return await
|
|
697
|
-
}, t, `action.${
|
|
696
|
+
return await pt(e.store, n.subject, { executionId: r.executionId }), await b.resume(r.workflowName, r.executionId), { ok: !0 };
|
|
697
|
+
}, t, `action.${Pn.name}`), k[Ln.name] = (t) => J(async (t, n) => {
|
|
698
698
|
let r = t;
|
|
699
|
-
return await
|
|
700
|
-
}, t, `action.${Ln.name}`),
|
|
699
|
+
return await pt(e.store, n.subject, { id: r.id }), b.signal({ id: r.id }, r.signalName, r.payload);
|
|
700
|
+
}, t, `action.${Ln.name}`), k[Rn.name] = (t) => J(async (t, n) => {
|
|
701
701
|
let r = t;
|
|
702
|
-
return await
|
|
702
|
+
return await pt(e.store, n.subject, { id: r.id }), b.update({ id: r.id }, r.updateName, r.payload, r.timeoutMs === void 0 ? void 0 : { timeoutMs: r.timeoutMs });
|
|
703
703
|
}, t, `action.${Rn.name}`));
|
|
704
|
-
let
|
|
705
|
-
...
|
|
706
|
-
...
|
|
707
|
-
...
|
|
708
|
-
...
|
|
709
|
-
...
|
|
710
|
-
...
|
|
711
|
-
...
|
|
712
|
-
...
|
|
713
|
-
...
|
|
714
|
-
...
|
|
715
|
-
...
|
|
716
|
-
...
|
|
717
|
-
...(e.discovered.workflows ?? []).map((e) =>
|
|
718
|
-
...
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
704
|
+
let St = [
|
|
705
|
+
...O(e.discovered.queries).map((e) => B(e.descriptor)),
|
|
706
|
+
...O(e.discovered.mutations).map((e) => z(e.descriptor)),
|
|
707
|
+
...O(e.discovered.actions).map((e) => R(e.descriptor)),
|
|
708
|
+
...nt.queries.map((e) => B(e.descriptor)),
|
|
709
|
+
...nt.mutations.map((e) => z(e.descriptor)),
|
|
710
|
+
...rt.queries.map((e) => B(e.descriptor)),
|
|
711
|
+
...rt.mutations.map((e) => z(e.descriptor)),
|
|
712
|
+
...S.queries.map((e) => B(e.descriptor)),
|
|
713
|
+
...S.mutations.map((e) => z(e.descriptor)),
|
|
714
|
+
...S.actions.map((e) => R(e.descriptor)),
|
|
715
|
+
...O(e.discovered.streams ?? []).map((e) => An(e.descriptor)),
|
|
716
|
+
...w.rpcs,
|
|
717
|
+
...(e.discovered.workflows ?? []).map((e) => ri(e.definition)),
|
|
718
|
+
...pe ? [
|
|
719
|
+
B(U),
|
|
720
|
+
B(In),
|
|
721
|
+
B(Fn),
|
|
722
|
+
B(H),
|
|
723
|
+
B(V),
|
|
724
|
+
B(Nn),
|
|
725
|
+
R(Mn),
|
|
723
726
|
R(Pn),
|
|
724
|
-
R(
|
|
725
|
-
|
|
726
|
-
I(Fn),
|
|
727
|
-
I(Ln),
|
|
728
|
-
I(Rn)
|
|
727
|
+
R(Ln),
|
|
728
|
+
R(Rn)
|
|
729
729
|
] : []
|
|
730
|
-
],
|
|
731
|
-
register: (t, n, r) =>
|
|
732
|
-
tenantId: r ??
|
|
730
|
+
], Tt = Kn.make(...St).middleware(En).middleware(Dn), Dt = Er({ resolveSubject: ({ headers: t, clientId: n }) => e.resolveSubject(t, n) }), Ot = e.dormancyTenantId ?? er, kt = e.dormancy === "sleep" ? {
|
|
731
|
+
register: (t, n, r) => Gr(e.store, {
|
|
732
|
+
tenantId: r ?? Ot,
|
|
733
733
|
kind: "workflow",
|
|
734
734
|
refId: t,
|
|
735
735
|
wakeAt: n
|
|
736
736
|
}),
|
|
737
|
-
cancel: (t, n) =>
|
|
738
|
-
tenantId: n ??
|
|
737
|
+
cancel: (t, n) => dr(e.store, {
|
|
738
|
+
tenantId: n ?? Ot,
|
|
739
739
|
kind: "workflow",
|
|
740
740
|
refId: t
|
|
741
741
|
}).then(() => {})
|
|
742
|
-
} : void 0,
|
|
742
|
+
} : void 0, M = me ? await import("@voltro/workflow") : void 0, N = M?.makeWorkflowRunRecorder({
|
|
743
743
|
store: e.store,
|
|
744
744
|
...e.workflowRecording === void 0 ? {} : { recording: e.workflowRecording },
|
|
745
|
-
...
|
|
746
|
-
}),
|
|
747
|
-
await
|
|
745
|
+
...kt === void 0 ? {} : { wakeups: kt }
|
|
746
|
+
}), Mt = async (t, n) => {
|
|
747
|
+
await M.closeWorkflowChildrenForParent({
|
|
748
748
|
store: e.store,
|
|
749
749
|
parentExecutionId: t,
|
|
750
750
|
parentStatus: n,
|
|
751
|
-
recorder:
|
|
751
|
+
recorder: N,
|
|
752
752
|
log: { warn: (e, t) => {
|
|
753
753
|
process.stderr.write(`[workflow] ${e} ${t ? JSON.stringify(t) : ""}\n`);
|
|
754
754
|
} },
|
|
@@ -759,11 +759,11 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
759
759
|
await p.runPromise(r.definition.interrupt(n));
|
|
760
760
|
}
|
|
761
761
|
});
|
|
762
|
-
},
|
|
762
|
+
}, Nt = async (t, n, r) => {
|
|
763
763
|
let i = (await e.store.query({
|
|
764
764
|
table: "_voltro_workflow_runs",
|
|
765
765
|
order: [],
|
|
766
|
-
predicate:
|
|
766
|
+
predicate: K("executionId", n),
|
|
767
767
|
projection: void 0,
|
|
768
768
|
skip: void 0,
|
|
769
769
|
take: 1
|
|
@@ -774,7 +774,7 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
774
774
|
cancelled: !0,
|
|
775
775
|
completedAt: /* @__PURE__ */ new Date()
|
|
776
776
|
}), o = i.subject?.tenantId ?? void 0;
|
|
777
|
-
a && await
|
|
777
|
+
a && await N.recordEvent({
|
|
778
778
|
runId: i.id,
|
|
779
779
|
eventType: "run-cancelled",
|
|
780
780
|
payload: {
|
|
@@ -783,18 +783,18 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
783
783
|
executionId: n,
|
|
784
784
|
...o == null ? {} : { tenantId: o }
|
|
785
785
|
}
|
|
786
|
-
}), a && await
|
|
787
|
-
},
|
|
788
|
-
...
|
|
789
|
-
buildContext: (t, n) => e.buildContextForWorkflow?.(t, n) ??
|
|
786
|
+
}), a && await Mt(n, "cancelled");
|
|
787
|
+
}, Pt = [
|
|
788
|
+
...zr(e.discovered.workflows ?? [], {
|
|
789
|
+
buildContext: (t, n) => e.buildContextForWorkflow?.(t, n) ?? ze({
|
|
790
790
|
subject: t.subject,
|
|
791
791
|
traceId: t.traceId
|
|
792
792
|
}, e.store, void 0, `workflow:${n.workflowName}`, { parentExecutionId: n.executionId }),
|
|
793
|
-
resolveStartContext:
|
|
794
|
-
...
|
|
793
|
+
resolveStartContext: le,
|
|
794
|
+
...ue === void 0 ? {} : { resolveAuthority: ue }
|
|
795
795
|
}, (t, n, r) => {
|
|
796
|
-
let i =
|
|
797
|
-
return
|
|
796
|
+
let i = M.getWorkflowVersionMetadata(t.definition);
|
|
797
|
+
return M.wrapWorkflowExecuteWithRunRecording({
|
|
798
798
|
name: t.definition.name,
|
|
799
799
|
store: e.store,
|
|
800
800
|
subject: r.subject,
|
|
@@ -805,27 +805,27 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
805
805
|
workflowPatches: i.patches,
|
|
806
806
|
parentExecutionId: r?.parentExecutionId ?? null,
|
|
807
807
|
parentClosePolicy: r?.parentClosePolicy ?? null,
|
|
808
|
-
onParentClose: ({ executionId: e, status: t }) =>
|
|
809
|
-
...
|
|
808
|
+
onParentClose: ({ executionId: e, status: t }) => Mt(e, t),
|
|
809
|
+
...We(t.definition),
|
|
810
810
|
onTerminal: async ({ executionId: e }) => {
|
|
811
811
|
await f?.gate.release(e);
|
|
812
812
|
},
|
|
813
|
-
recorder:
|
|
814
|
-
pluginWorkflowStepLayer:
|
|
815
|
-
recordRun:
|
|
813
|
+
recorder: N,
|
|
814
|
+
pluginWorkflowStepLayer: Qe,
|
|
815
|
+
recordRun: Ur
|
|
816
816
|
}, n);
|
|
817
817
|
}),
|
|
818
818
|
...e.discovered.workflowWorkers ?? [],
|
|
819
|
-
...
|
|
820
|
-
],
|
|
821
|
-
if (((e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster" ||
|
|
822
|
-
let t =
|
|
823
|
-
p = Bn.make(e.baseLayer === void 0 ? t : t.pipe(
|
|
819
|
+
...be === void 0 ? [] : [be]
|
|
820
|
+
], It = [...(e.discovered.workflows ?? []).map((e) => e.definition.name).filter(Boolean), ...be === void 0 ? [] : ["voltro.deliverWebhook"]], Lt = Pt.length > 0 ? G.mergeAll(...Pt) : G.empty;
|
|
821
|
+
if (((e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster" || be !== void 0) && e.workflowEngineLayer !== void 0) {
|
|
822
|
+
let t = Lt.pipe(G.provideMerge(e.workflowEngineLayer));
|
|
823
|
+
p = Bn.make(e.baseLayer === void 0 ? t : t.pipe(G.provideMerge(e.baseLayer))), await p.runPromise(W.void), (e.log ?? L({ scope: "voltro:serve" })).child("workflow").info(`workflow runtime ready — ${It.length} entity type(s) registered`, { entities: It });
|
|
824
824
|
let n = await import("@voltro/workflow/cluster"), r = (e) => p.runPromise(n.redriveFailedRun(e)), i = (e) => p.runPromise(n.resumeRunFromStep(e));
|
|
825
|
-
ne = await
|
|
826
|
-
provider:
|
|
827
|
-
crossReplica:
|
|
828
|
-
namespace:
|
|
825
|
+
ne = await j({
|
|
826
|
+
provider: Ci(e.plugins ?? [])?.broadcast?.provider,
|
|
827
|
+
crossReplica: Ci(e.plugins ?? [])?.broadcast?.crossReplica ?? !1,
|
|
828
|
+
namespace: Ae,
|
|
829
829
|
replicaId: crypto.randomUUID(),
|
|
830
830
|
pollStorage: () => p.runPromise(n.pollWorkflowStorage),
|
|
831
831
|
onChange: (t) => e.store.onChange((e) => t({
|
|
@@ -833,14 +833,14 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
833
833
|
op: e.op,
|
|
834
834
|
...e.origin === void 0 ? {} : { origin: e.origin }
|
|
835
835
|
})),
|
|
836
|
-
log: (e.log ??
|
|
836
|
+
log: (e.log ?? L({ scope: "voltro:serve" })).child("workflow")
|
|
837
837
|
}), ee = async (t) => {
|
|
838
|
-
let n = await
|
|
838
|
+
let n = await _({
|
|
839
839
|
store: e.store,
|
|
840
840
|
workflows: e.discovered.workflows ?? [],
|
|
841
841
|
runRedrive: r
|
|
842
842
|
}, t.runId);
|
|
843
|
-
return n.statusReset && await
|
|
843
|
+
return n.statusReset && await N.recordEvent({
|
|
844
844
|
runId: t.runId,
|
|
845
845
|
eventType: "run-redriven",
|
|
846
846
|
payload: {
|
|
@@ -853,12 +853,12 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
853
853
|
reason: n.outcome.reason
|
|
854
854
|
};
|
|
855
855
|
}, te = async (t) => {
|
|
856
|
-
let n = await
|
|
856
|
+
let n = await Ee({
|
|
857
857
|
store: e.store,
|
|
858
858
|
workflows: e.discovered.workflows ?? [],
|
|
859
859
|
runResume: i
|
|
860
860
|
}, t.runId, t.step);
|
|
861
|
-
return n.statusReset && await
|
|
861
|
+
return n.statusReset && await N.recordEvent({
|
|
862
862
|
runId: t.runId,
|
|
863
863
|
eventType: "run-redriven",
|
|
864
864
|
payload: {
|
|
@@ -873,7 +873,7 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
873
873
|
reason: n.outcome.reason
|
|
874
874
|
};
|
|
875
875
|
};
|
|
876
|
-
let a = (e.scheduleCoordination ?? "single") === "advisoryLock" ?
|
|
876
|
+
let a = (e.scheduleCoordination ?? "single") === "advisoryLock" ? xr(e.store, e.scheduleReplicaId ?? `pid-${process.pid}`) : Xr, s = Dr({
|
|
877
877
|
coordinator: a,
|
|
878
878
|
replicaId: e.scheduleReplicaId ?? `pid-${process.pid}`
|
|
879
879
|
}), u = {
|
|
@@ -888,17 +888,17 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
888
888
|
}
|
|
889
889
|
}, d, m = () => {
|
|
890
890
|
if (d !== void 0) return d;
|
|
891
|
-
if (o !== void 0 &&
|
|
891
|
+
if (o !== void 0 && N !== void 0) return d = re({
|
|
892
892
|
store: e.store,
|
|
893
|
-
log:
|
|
893
|
+
log: I,
|
|
894
894
|
workflows: e.discovered.workflows ?? [],
|
|
895
895
|
workflowsProxy: o,
|
|
896
896
|
workflowRuntime: p,
|
|
897
|
-
workflowRunRecorder:
|
|
898
|
-
closeChildrenForParent:
|
|
897
|
+
workflowRunRecorder: N,
|
|
898
|
+
closeChildrenForParent: Mt
|
|
899
899
|
}), d;
|
|
900
900
|
};
|
|
901
|
-
c = m, f =
|
|
901
|
+
c = m, f = tt({
|
|
902
902
|
store: e.store,
|
|
903
903
|
onChange: (t) => e.store.onChange((e) => t({
|
|
904
904
|
table: e.table,
|
|
@@ -913,12 +913,12 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
913
913
|
workflows: e.discovered.workflows ?? [],
|
|
914
914
|
facade: () => o,
|
|
915
915
|
cancelRunWithReason: m,
|
|
916
|
-
recordRunEvent: () =>
|
|
916
|
+
recordRunEvent: () => N?.recordEvent,
|
|
917
917
|
...e.workflowStaleness === void 0 ? {} : { staleness: e.workflowStaleness },
|
|
918
918
|
...e.workflowSuspendSignalHintMs === void 0 ? {} : { suspendSignalHintMs: e.workflowSuspendSignalHintMs },
|
|
919
919
|
scheduleCoordinated: s,
|
|
920
920
|
onAbandoned: async (t) => {
|
|
921
|
-
await
|
|
921
|
+
await wt({
|
|
922
922
|
workflows: e.discovered.workflows ?? [],
|
|
923
923
|
facade: () => o,
|
|
924
924
|
log: u,
|
|
@@ -928,7 +928,7 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
928
928
|
log: u
|
|
929
929
|
});
|
|
930
930
|
let h = f;
|
|
931
|
-
h !== void 0 &&
|
|
931
|
+
h !== void 0 && Vr(() => h.stop()), l = Ke({
|
|
932
932
|
store: e.store,
|
|
933
933
|
onChange: (t) => e.store.onChange((e) => t({
|
|
934
934
|
table: e.table,
|
|
@@ -939,10 +939,10 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
939
939
|
tickIntervalMs: e.scheduling.inferenceTickMs
|
|
940
940
|
},
|
|
941
941
|
enabled: (e.discovered.workflows?.length ?? 0) > 0,
|
|
942
|
-
resumeSignal: () => p === void 0 ||
|
|
943
|
-
await p.runPromise(
|
|
942
|
+
resumeSignal: () => p === void 0 || M === void 0 ? void 0 : async ({ executionId: t, workflowName: n, signalName: r, payload: i }) => {
|
|
943
|
+
await p.runPromise(M.completeSuspendingSignal({
|
|
944
944
|
store: e.store,
|
|
945
|
-
target:
|
|
945
|
+
target: At(t, n),
|
|
946
946
|
signalName: r,
|
|
947
947
|
payload: i
|
|
948
948
|
}));
|
|
@@ -952,7 +952,7 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
952
952
|
log: u
|
|
953
953
|
});
|
|
954
954
|
let g = l;
|
|
955
|
-
g !== void 0 &&
|
|
955
|
+
g !== void 0 && Vr(() => g.stop()), o = (e.discovered.workflows?.length ?? 0) > 0 ? Rr({
|
|
956
956
|
workflows: e.discovered.workflows ?? [],
|
|
957
957
|
runEffect: (e) => p.runPromise(e),
|
|
958
958
|
onEnqueue: () => ne?.publishWake(),
|
|
@@ -961,71 +961,71 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
961
961
|
startPayloadSchema: h.gate.startPayloadSchema,
|
|
962
962
|
parkDelayedStart: h.gate.parkDelayed
|
|
963
963
|
},
|
|
964
|
-
rememberStartContext:
|
|
964
|
+
rememberStartContext: ce,
|
|
965
965
|
signal: async (t, n, r) => {
|
|
966
|
-
let i = await
|
|
966
|
+
let i = await M.sendWorkflowSignal({
|
|
967
967
|
store: e.store,
|
|
968
|
-
recorder:
|
|
968
|
+
recorder: N,
|
|
969
969
|
target: t,
|
|
970
970
|
signalName: n,
|
|
971
971
|
payload: r
|
|
972
972
|
});
|
|
973
|
-
return await p.runPromise(
|
|
973
|
+
return await p.runPromise(M.completeSuspendingSignal({
|
|
974
974
|
store: e.store,
|
|
975
975
|
target: t,
|
|
976
976
|
signalName: n,
|
|
977
977
|
payload: r
|
|
978
978
|
})).catch(() => {}), i;
|
|
979
979
|
},
|
|
980
|
-
update: (t, n, r, i) =>
|
|
980
|
+
update: (t, n, r, i) => M.sendWorkflowUpdate({
|
|
981
981
|
store: e.store,
|
|
982
|
-
recorder:
|
|
982
|
+
recorder: N,
|
|
983
983
|
target: t,
|
|
984
984
|
updateName: n,
|
|
985
985
|
payload: r,
|
|
986
986
|
...i === void 0 ? {} : { options: i }
|
|
987
987
|
}),
|
|
988
|
-
listRuns: (t) =>
|
|
989
|
-
retry: (t, n) =>
|
|
988
|
+
listRuns: (t) => De(e.store, t),
|
|
989
|
+
retry: (t, n) => ke({
|
|
990
990
|
store: e.store,
|
|
991
991
|
workflows: e.discovered.workflows ?? [],
|
|
992
992
|
runPromise: (e) => p.runPromise(e)
|
|
993
993
|
}, t, n),
|
|
994
|
-
redrive: (t) =>
|
|
994
|
+
redrive: (t) => _({
|
|
995
995
|
store: e.store,
|
|
996
996
|
workflows: e.discovered.workflows ?? [],
|
|
997
997
|
runRedrive: r
|
|
998
998
|
}, t).then((e) => e.outcome)
|
|
999
999
|
}) : void 0;
|
|
1000
1000
|
}
|
|
1001
|
-
let
|
|
1001
|
+
let Bt = G.mergeAll(Tt.toLayer(k), Dt), Vt = xt(k, e.discovered.queries.map((e) => e.descriptor.name), pe), Ht = G.mergeAll(Tt.toLayer(Vt), Dt), P = e.observability, F = await ur({
|
|
1002
1002
|
...e.appName === void 0 ? {} : { serviceName: e.appName },
|
|
1003
|
-
...
|
|
1004
|
-
...
|
|
1005
|
-
...
|
|
1006
|
-
...
|
|
1007
|
-
}),
|
|
1008
|
-
group:
|
|
1009
|
-
handlersLayer:
|
|
1010
|
-
httpHandlersLayer:
|
|
1003
|
+
...P && P.spanProcessors.length > 0 ? { extraSpanProcessors: P.spanProcessors } : {},
|
|
1004
|
+
...P && P.metricReaders.length > 0 ? { extraMetricReaders: P.metricReaders } : {},
|
|
1005
|
+
...P && Object.keys(P.resourceAttributes).length > 0 ? { resourceAttributes: P.resourceAttributes } : {},
|
|
1006
|
+
...P && P.sampler !== void 0 ? { sampler: P.sampler } : {}
|
|
1007
|
+
}), Ut = !1, Wt = e.store.ping ? () => e.store.ping().then(() => !0).catch(() => !1) : void 0, { server: Gt, shutdown: Kt } = Zr({
|
|
1008
|
+
group: Tt,
|
|
1009
|
+
handlersLayer: Bt,
|
|
1010
|
+
httpHandlersLayer: Ht,
|
|
1011
1011
|
port: e.port ?? 4e3,
|
|
1012
1012
|
...e.host === void 0 ? {} : { host: e.host },
|
|
1013
1013
|
path: e.path ?? "/ws",
|
|
1014
|
-
tracerLayer:
|
|
1015
|
-
security:
|
|
1016
|
-
...
|
|
1014
|
+
tracerLayer: F.layer,
|
|
1015
|
+
security: _e(e),
|
|
1016
|
+
...Xe,
|
|
1017
1017
|
healthCheck: {
|
|
1018
|
-
isReady: () =>
|
|
1019
|
-
...
|
|
1018
|
+
isReady: () => Ut,
|
|
1019
|
+
...Wt ? { ping: Wt } : {}
|
|
1020
1020
|
},
|
|
1021
|
-
...
|
|
1021
|
+
...bt.length > 0 ? { httpRoutes: bt } : {},
|
|
1022
1022
|
...e.getStore === void 0 ? {} : { getStore: e.getStore },
|
|
1023
|
-
...
|
|
1023
|
+
...xe.size > 0 ? { webhookRoutes: xe } : {},
|
|
1024
1024
|
...e.inspectRoute === void 0 ? {} : { inspectRoute: e.inspectRoute }
|
|
1025
|
-
}),
|
|
1026
|
-
if (await
|
|
1027
|
-
let t = (e.scheduleCoordination ?? "single") === "advisoryLock" ?
|
|
1028
|
-
|
|
1025
|
+
}), qt = Ni(Gt);
|
|
1026
|
+
if (await cr(Gt), (e.discovered.schedules?.length ?? 0) > 0) {
|
|
1027
|
+
let t = (e.scheduleCoordination ?? "single") === "advisoryLock" ? xr(e.store, e.scheduleReplicaId ?? `pid-${process.pid}`) : Xr;
|
|
1028
|
+
oe = await Qr(e.discovered.schedules ?? [], {
|
|
1029
1029
|
store: e.store,
|
|
1030
1030
|
coordinator: t,
|
|
1031
1031
|
defaultTrigger: e.scheduleDefaultTrigger ?? "self",
|
|
@@ -1033,7 +1033,7 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
1033
1033
|
armSelf: e.scheduleArmSelf ?? !0,
|
|
1034
1034
|
dormancy: e.dormancy ?? "always-on",
|
|
1035
1035
|
...e.dormancyTenantId === void 0 ? {} : { dormancyTenantId: e.dormancyTenantId },
|
|
1036
|
-
buildContext: ({ traceId: t, scheduleName: n, subject: r }) =>
|
|
1036
|
+
buildContext: ({ traceId: t, scheduleName: n, subject: r }) => ze({
|
|
1037
1037
|
subject: r,
|
|
1038
1038
|
traceId: t
|
|
1039
1039
|
}, e.store, void 0, `schedule:${n}`),
|
|
@@ -1051,428 +1051,428 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
1051
1051
|
},
|
|
1052
1052
|
...e.scheduleFireInterceptor === void 0 ? {} : { interceptFire: e.scheduleFireInterceptor },
|
|
1053
1053
|
...e.onScheduleRunEvent === void 0 ? {} : { onRunEvent: e.onScheduleRunEvent }
|
|
1054
|
-
}), e.onSchedulerReady?.(
|
|
1054
|
+
}), e.onSchedulerReady?.(oe);
|
|
1055
1055
|
}
|
|
1056
|
-
let
|
|
1057
|
-
if ((e.discovered.subscribers?.length ?? 0) > 0 && (
|
|
1058
|
-
let t =
|
|
1056
|
+
let I = e.log ?? L({ scope: "voltro:serve" }), Jt, Yt;
|
|
1057
|
+
if ((e.discovered.subscribers?.length ?? 0) > 0 && (Jt = C(e.discovered.subscribers ?? [], e.store, I.child("subscribe"), e.schemaRegistry, w.bus)), (e.discovered.reactions?.length ?? 0) > 0) {
|
|
1058
|
+
let t = I.child("reaction"), n = async (n, r) => {
|
|
1059
1059
|
if (n.kind === "workflow") {
|
|
1060
|
-
if (
|
|
1060
|
+
if (b === void 0) {
|
|
1061
1061
|
t.warn("reaction workflow act skipped — no workflow engine in this app", { workflow: n.workflow });
|
|
1062
1062
|
return;
|
|
1063
1063
|
}
|
|
1064
1064
|
let e = n.payload === void 0 ? r.new ?? r.old ?? {} : n.payload(r);
|
|
1065
|
-
await
|
|
1065
|
+
await X(b, {
|
|
1066
1066
|
traceId: `reaction:${n.workflow}`,
|
|
1067
1067
|
source: `reaction:${n.workflow}`
|
|
1068
1068
|
}).start(n.workflow, e);
|
|
1069
1069
|
return;
|
|
1070
1070
|
}
|
|
1071
|
-
await
|
|
1071
|
+
await ot(n.agent, r, {
|
|
1072
1072
|
findAgentSend: (t) => e.discovered.actions.find((e) => e.descriptor.name === `${t}.send`),
|
|
1073
|
-
runAction: (e, t, n) => Promise.resolve(
|
|
1074
|
-
makeSubject: (e) =>
|
|
1073
|
+
runAction: (e, t, n) => Promise.resolve(it(e, t, n)),
|
|
1074
|
+
makeSubject: (e) => On(e),
|
|
1075
1075
|
now: () => Date.now(),
|
|
1076
1076
|
log: t
|
|
1077
1077
|
});
|
|
1078
1078
|
}, r = async (n, r) => {
|
|
1079
1079
|
try {
|
|
1080
1080
|
let { requireAiBudget: t } = await import("@voltro/ai");
|
|
1081
|
-
return (await
|
|
1081
|
+
return (await W.runPromise(W.either(t(e.store, {
|
|
1082
1082
|
tenantId: n,
|
|
1083
1083
|
limitUsd: r
|
|
1084
1084
|
}))))._tag === "Right";
|
|
1085
1085
|
} catch (e) {
|
|
1086
1086
|
return t.warn("reaction budget check failed — refusing the act", { tenantId: n }, e), !1;
|
|
1087
1087
|
}
|
|
1088
|
-
}, i =
|
|
1089
|
-
|
|
1088
|
+
}, i = lt(e.store, { onError: (e) => t.warn("reaction: rate-slot claim failed; refusing the act", { cause: String(e) }) });
|
|
1089
|
+
Yt = u(e.discovered.reactions ?? [], e.store, {
|
|
1090
1090
|
runAct: n,
|
|
1091
1091
|
checkBudget: r,
|
|
1092
1092
|
claimRateSlot: (e) => i.claim(e)
|
|
1093
1093
|
}, t);
|
|
1094
1094
|
}
|
|
1095
|
-
let
|
|
1096
|
-
(e.discovered.aggregates?.length ?? 0) > 0 && (
|
|
1095
|
+
let Xt;
|
|
1096
|
+
(e.discovered.aggregates?.length ?? 0) > 0 && (Xt = await Te({
|
|
1097
1097
|
discovered: e.discovered.aggregates ?? [],
|
|
1098
1098
|
store: e.store,
|
|
1099
|
-
log:
|
|
1099
|
+
log: I.child("aggregate"),
|
|
1100
1100
|
...e.analytics === void 0 ? {} : { analytics: e.analytics },
|
|
1101
1101
|
...e.aggregateStorage === void 0 ? {} : { storage: e.aggregateStorage },
|
|
1102
1102
|
...e.aggregateCoordinator === void 0 ? {} : { coordinator: e.aggregateCoordinator }
|
|
1103
|
-
}),
|
|
1104
|
-
let
|
|
1105
|
-
(e.discovered.expectations?.length ?? 0) > 0 && (
|
|
1103
|
+
}), Be = G.succeed(Qn, Xt.registry));
|
|
1104
|
+
let Zt;
|
|
1105
|
+
(e.discovered.expectations?.length ?? 0) > 0 && (Zt = ar({
|
|
1106
1106
|
discovered: e.discovered.expectations ?? [],
|
|
1107
1107
|
store: e.store,
|
|
1108
|
-
log:
|
|
1109
|
-
}),
|
|
1108
|
+
log: I.child("expectation")
|
|
1109
|
+
}), Ve = G.succeed(q, Zt.registry)), (e.discovered.budgets?.length ?? 0) > 0 && (n = sr({
|
|
1110
1110
|
discovered: e.discovered.budgets ?? [],
|
|
1111
|
-
log:
|
|
1112
|
-
}),
|
|
1113
|
-
let
|
|
1114
|
-
return (e.discovered.experiments?.length ?? 0) > 0 && (
|
|
1111
|
+
log: I.child("finops")
|
|
1112
|
+
}), Ue = G.succeed($n, n.registry));
|
|
1113
|
+
let Qt;
|
|
1114
|
+
return (e.discovered.experiments?.length ?? 0) > 0 && (Qt = or({
|
|
1115
1115
|
discovered: e.discovered.experiments ?? [],
|
|
1116
1116
|
store: e.store,
|
|
1117
|
-
log:
|
|
1118
|
-
}),
|
|
1117
|
+
log: I.child("experiment")
|
|
1118
|
+
}), Ge = G.succeed(nr, Qt.registry)), Ut = !0, e.bootTiming?.mark("ready"), {
|
|
1119
1119
|
dispatcher: r,
|
|
1120
|
-
server:
|
|
1121
|
-
scheduler:
|
|
1122
|
-
eventsSnapshot:
|
|
1120
|
+
server: Gt,
|
|
1121
|
+
scheduler: oe,
|
|
1122
|
+
eventsSnapshot: fe(w.bus, w.declared),
|
|
1123
1123
|
membersSnapshot: () => ({
|
|
1124
|
-
members:
|
|
1124
|
+
members: Le.membership.list(),
|
|
1125
1125
|
capturedAt: Date.now()
|
|
1126
1126
|
}),
|
|
1127
|
-
agentTools: () =>
|
|
1128
|
-
rpcMetrics: () =>
|
|
1129
|
-
webhooksService: () =>
|
|
1127
|
+
agentTools: () => mt,
|
|
1128
|
+
rpcMetrics: () => Ye,
|
|
1129
|
+
webhooksService: () => ye,
|
|
1130
1130
|
runCanceller: () => c(),
|
|
1131
1131
|
flowControlHealth: () => f?.cancelHealth(),
|
|
1132
1132
|
inferenceHealth: () => l?.health(),
|
|
1133
|
-
workflowWriteActions: () =>
|
|
1133
|
+
workflowWriteActions: () => b === void 0 || N === void 0 ? void 0 : ae({
|
|
1134
1134
|
store: e.store,
|
|
1135
|
-
log:
|
|
1135
|
+
log: I,
|
|
1136
1136
|
workflows: e.discovered.workflows ?? [],
|
|
1137
1137
|
workflowsProxy: o,
|
|
1138
1138
|
workflowRuntime: p,
|
|
1139
|
-
workflowRunRecorder:
|
|
1140
|
-
closeChildrenForParent:
|
|
1139
|
+
workflowRunRecorder: N,
|
|
1140
|
+
closeChildrenForParent: Mt
|
|
1141
1141
|
}),
|
|
1142
1142
|
redriveWorkflowRun: (e) => ee ? ee(e) : Promise.reject(/* @__PURE__ */ Error("redrive: this app registers no workflows")),
|
|
1143
1143
|
resumeWorkflowRunFromStep: (e) => te ? te(e) : Promise.reject(/* @__PURE__ */ Error("resume-from-step: this app registers no workflows")),
|
|
1144
1144
|
close: async () => {
|
|
1145
|
-
|
|
1146
|
-
for (let e of
|
|
1145
|
+
Ut = !1, await qt.drainRequests();
|
|
1146
|
+
for (let e of Se) try {
|
|
1147
1147
|
await e();
|
|
1148
1148
|
} catch (e) {
|
|
1149
|
-
|
|
1149
|
+
I.warn("serve: teardown step failed", {}, e);
|
|
1150
1150
|
}
|
|
1151
|
-
await
|
|
1151
|
+
await Re?.detach(), await Le.detach(), Xt?.detach(), Zt?.detach(), n?.detach(), Qt?.detach(), Yt?.(), Jt?.(), await oe?.shutdown(), r.close(), await ne?.detach(), await p?.dispose(), await Kt(), await qt.finish();
|
|
1152
1152
|
}
|
|
1153
1153
|
};
|
|
1154
|
-
}, $ =
|
|
1155
|
-
let t =
|
|
1156
|
-
if (
|
|
1154
|
+
}, $ = L({ scope: "voltro:serve" }), Xi = (e, t, n) => (e === "production" || e === "staging") && t !== "memory" && n !== "0", Zi = Bt, Qi = async (e) => {
|
|
1155
|
+
let t = yn(process.cwd());
|
|
1156
|
+
if (wn(t)) {
|
|
1157
1157
|
let n;
|
|
1158
1158
|
try {
|
|
1159
|
-
let e = await import(
|
|
1159
|
+
let e = await import(Tn(t).href);
|
|
1160
1160
|
typeof e.runServe == "function" ? n = e.runServe : $.warn("serve bundle has no runServe export — using the standard serve path");
|
|
1161
1161
|
} catch (e) {
|
|
1162
1162
|
$.warn("serve bundle failed to load — using the standard serve path", {}, e);
|
|
1163
1163
|
}
|
|
1164
1164
|
if (n) return $.info("serve: booting from the precompiled serve bundle"), n(e);
|
|
1165
1165
|
}
|
|
1166
|
-
return
|
|
1167
|
-
},
|
|
1168
|
-
let u =
|
|
1166
|
+
return $i(e);
|
|
1167
|
+
}, $i = async (s) => {
|
|
1168
|
+
let u = bn();
|
|
1169
1169
|
e("serve");
|
|
1170
1170
|
try {
|
|
1171
|
-
|
|
1171
|
+
di();
|
|
1172
1172
|
} catch (e) {
|
|
1173
1173
|
throw i(e instanceof Error ? e.message : String(e));
|
|
1174
1174
|
}
|
|
1175
|
-
let d = process.cwd(), m = await
|
|
1175
|
+
let d = process.cwd(), m = await Ue(d), re = Vt({
|
|
1176
1176
|
kind: "api",
|
|
1177
1177
|
configPort: m?.port,
|
|
1178
1178
|
env: process.env,
|
|
1179
|
-
flagPort:
|
|
1179
|
+
flagPort: Zi(s, "--port")
|
|
1180
1180
|
});
|
|
1181
1181
|
for (let e of re.warnings) $.warn(e);
|
|
1182
1182
|
let h = re.port;
|
|
1183
|
-
Kr(
|
|
1183
|
+
Jr(Kr(m?.secrets)), await Ht({
|
|
1184
1184
|
rawEnv: m?.env,
|
|
1185
1185
|
appType: "api",
|
|
1186
1186
|
root: d,
|
|
1187
1187
|
log: $,
|
|
1188
1188
|
generateTypes: !1
|
|
1189
1189
|
}), u.mark("config");
|
|
1190
|
-
let g = (process.env.DB_DIALECT ?? m?.store ?? "memory").toLowerCase(), ie = (g === "mariadb" || g === "postgres" || g === "mssql") && (process.env.CDC ?? "1") !== "0",
|
|
1191
|
-
if (!r() &&
|
|
1192
|
-
let e = await import(
|
|
1190
|
+
let g = (process.env.DB_DIALECT ?? m?.store ?? "memory").toLowerCase(), ie = (g === "mariadb" || g === "postgres" || g === "mssql") && (process.env.CDC ?? "1") !== "0", _ = g === "mariadb" ? "mariadb" : g === "mssql" ? "mssql" : void 0, ae = vn(d);
|
|
1191
|
+
if (!r() && wn(ae)) try {
|
|
1192
|
+
let e = await import(Tn(ae).href);
|
|
1193
1193
|
if (e.modules) {
|
|
1194
1194
|
let t = {};
|
|
1195
|
-
for (let [n, r] of Object.entries(e.modules)) t[
|
|
1195
|
+
for (let [n, r] of Object.entries(e.modules)) t[Cn(d, n)] = r;
|
|
1196
1196
|
n(t), $.info("precompiled api bundle loaded", { modules: Object.keys(t).length });
|
|
1197
1197
|
}
|
|
1198
1198
|
} catch (e) {
|
|
1199
1199
|
$.warn("precompiled api bundle failed to load — falling back to source", {}, e);
|
|
1200
1200
|
}
|
|
1201
|
-
let
|
|
1201
|
+
let v = await Ye(d), y = await Ot(v, { cdc: ie && _ !== void 0 }), de = x(y);
|
|
1202
1202
|
{
|
|
1203
1203
|
let e = /* @__PURE__ */ new Set([
|
|
1204
|
-
...
|
|
1205
|
-
...
|
|
1206
|
-
...
|
|
1204
|
+
...y.queries.filter((e) => e.descriptor.overridesPlugin === !0).map((e) => e.descriptor.name),
|
|
1205
|
+
...y.mutations.filter((e) => e.descriptor.overridesPlugin === !0).map((e) => e.descriptor.name),
|
|
1206
|
+
...y.actions.filter((e) => e.descriptor.overridesPlugin === !0).map((e) => e.descriptor.name)
|
|
1207
1207
|
]);
|
|
1208
|
-
|
|
1209
|
-
...
|
|
1210
|
-
...
|
|
1211
|
-
...
|
|
1212
|
-
...
|
|
1208
|
+
Jt(I(m?.plugins ?? []), [
|
|
1209
|
+
...y.queries.map((e) => e.descriptor.name),
|
|
1210
|
+
...y.mutations.map((e) => e.descriptor.name),
|
|
1211
|
+
...y.actions.map((e) => e.descriptor.name),
|
|
1212
|
+
...y.streams.map((e) => e.descriptor.name)
|
|
1213
1213
|
], e);
|
|
1214
|
-
let t =
|
|
1214
|
+
let t = Ae(y.serverOnlyLeaks, S(process.env, "strict"), mr, "`voltro serve`");
|
|
1215
1215
|
if (t.action === "fail") throw i(t.message ?? "");
|
|
1216
1216
|
t.action === "warn" && $.warn(t.message ?? "");
|
|
1217
1217
|
}
|
|
1218
|
-
let
|
|
1218
|
+
let fe = v.filter((e) => gn.test(e)), ve = fe.length > 0 ? await hn(fe, $.child("webhooks")) : {
|
|
1219
1219
|
outgoing: [],
|
|
1220
1220
|
incoming: [],
|
|
1221
1221
|
providers: []
|
|
1222
|
-
},
|
|
1223
|
-
...
|
|
1224
|
-
outgoing: [...
|
|
1225
|
-
},
|
|
1222
|
+
}, Te = pn(y.events), Ee = ve.outgoing.length + ve.incoming.length + ve.providers.length + Te.length === 0 ? void 0 : {
|
|
1223
|
+
...ve,
|
|
1224
|
+
outgoing: [...ve.outgoing, ...Te]
|
|
1225
|
+
}, De = tn({
|
|
1226
1226
|
nodeEnv: process.env.NODE_ENV,
|
|
1227
|
-
cdcDialect:
|
|
1227
|
+
cdcDialect: _,
|
|
1228
1228
|
declared: m?.schema
|
|
1229
|
-
}),
|
|
1230
|
-
gates:
|
|
1229
|
+
}), ke = Xt({
|
|
1230
|
+
gates: De,
|
|
1231
1231
|
runtime: {
|
|
1232
|
-
traces:
|
|
1233
|
-
undo:
|
|
1232
|
+
traces: ge(),
|
|
1233
|
+
undo: ei()
|
|
1234
1234
|
}
|
|
1235
1235
|
});
|
|
1236
|
-
if (
|
|
1237
|
-
let
|
|
1238
|
-
mix:
|
|
1236
|
+
if (ke !== void 0) throw i(`serve: ${ke}`);
|
|
1237
|
+
let je = en({
|
|
1238
|
+
mix: y.featureMix,
|
|
1239
1239
|
plugins: m?.plugins ?? [],
|
|
1240
|
-
gates:
|
|
1241
|
-
...
|
|
1242
|
-
}),
|
|
1240
|
+
gates: De,
|
|
1241
|
+
..._ ? { cdcDialect: _ } : {}
|
|
1242
|
+
}), Me = m?.analytics !== void 0 && m.analytics.kind !== "noop" && g !== "memory" ? (await F(g)).makeSqlLayer(A()) : void 0, Fe = await c({
|
|
1243
1243
|
spec: m?.analytics,
|
|
1244
|
-
sqlLayer:
|
|
1244
|
+
sqlLayer: Me,
|
|
1245
1245
|
log: $
|
|
1246
|
-
}),
|
|
1247
|
-
let e = new Set(
|
|
1248
|
-
for (let n of [...
|
|
1246
|
+
}), C = (() => {
|
|
1247
|
+
let e = new Set(y.tables.map((e) => e.tableName)), t = [...y.tables];
|
|
1248
|
+
for (let n of [...je, ...Fe.tables]) e.has(n.tableName) || (e.add(n.tableName), t.push(n));
|
|
1249
1249
|
return t;
|
|
1250
1250
|
})();
|
|
1251
|
-
for (let e of
|
|
1251
|
+
for (let e of C) Xn(e);
|
|
1252
1252
|
{
|
|
1253
|
-
let e =
|
|
1253
|
+
let e = hr(ti(y.queries.map((e) => ({
|
|
1254
1254
|
name: e.descriptor.name,
|
|
1255
1255
|
source: e.descriptor.source
|
|
1256
|
-
})), new Set(
|
|
1256
|
+
})), new Set(C.flatMap((e) => {
|
|
1257
1257
|
let t = e.tableName;
|
|
1258
1258
|
return t === void 0 ? [] : [t];
|
|
1259
1259
|
}))));
|
|
1260
1260
|
e !== void 0 && $.warn(e);
|
|
1261
1261
|
}
|
|
1262
|
-
let
|
|
1263
|
-
if (
|
|
1264
|
-
let e = (await
|
|
1262
|
+
let Ie = (process.env.NODE_ENV ?? "").toLowerCase();
|
|
1263
|
+
if (Xi(Ie, g, process.env.VOLTRO_AUTO_MIGRATE)) {
|
|
1264
|
+
let e = (await F(g)).makeSqlLayer(A()), t = await W.runPromise(Vn.SqlClient.pipe(W.flatMap((e) => Wn(e, d)), W.provide(e), W.catchAll(() => W.succeed([]))));
|
|
1265
1265
|
t.length > 0 && ($.error(`serve: refusing to boot — ${t.length} pending file-based migration(s) have never run against this database. They perform the changes a schema diff cannot infer (data moves, backfills, table splits), so the declarative fingerprint check below cannot see them and would have let this process serve un-migrated data.`, { pending: t }), $.error("Run them from your pre-deploy job — `voltro db migrate .` (schema + files) or `voltro db files .` (files alone) — or set VOLTRO_AUTO_MIGRATE=0 to bypass every boot schema check. `voltro serve` never applies them itself: a rolling deploy would start N replicas and each would try."), process.exit(1));
|
|
1266
|
-
let n = await
|
|
1267
|
-
appliedBy: `serve:${
|
|
1266
|
+
let n = await W.runPromise(Vn.SqlClient.pipe(W.flatMap((e) => Gn(e, C, {
|
|
1267
|
+
appliedBy: `serve:${Ie}`,
|
|
1268
1268
|
environment: "prod",
|
|
1269
1269
|
dialectId: g
|
|
1270
|
-
})),
|
|
1271
|
-
n.kind === "prod-mismatch" && ($.error(Un(n, g)), $.error(
|
|
1272
|
-
gates:
|
|
1270
|
+
})), W.provide(e)));
|
|
1271
|
+
n.kind === "prod-mismatch" && ($.error(Un(n, g)), $.error(Qt({
|
|
1272
|
+
gates: De,
|
|
1273
1273
|
nodeEnv: process.env.NODE_ENV,
|
|
1274
|
-
cdcDialect:
|
|
1274
|
+
cdcDialect: _,
|
|
1275
1275
|
declared: m?.schema
|
|
1276
1276
|
})), $.error("serve: refusing to boot — apply the schema first (voltro db apply in a pre-deploy step), or set VOLTRO_AUTO_MIGRATE=0 to bypass this check."), process.exit(1)), $.info(Un(n, g));
|
|
1277
1277
|
}
|
|
1278
|
-
await
|
|
1278
|
+
await qt({
|
|
1279
1279
|
dialectId: g,
|
|
1280
|
-
tables:
|
|
1281
|
-
mode:
|
|
1282
|
-
lockSchema:
|
|
1283
|
-
makeLayer: async () => (await
|
|
1280
|
+
tables: C,
|
|
1281
|
+
mode: Gt(m?.reactiveTriggers),
|
|
1282
|
+
lockSchema: A().schema,
|
|
1283
|
+
makeLayer: async () => (await F(g)).makeSqlLayer(A()),
|
|
1284
1284
|
log: {
|
|
1285
1285
|
info: (e, t) => $.info(e, t ?? {}),
|
|
1286
1286
|
warn: (e, t) => $.warn(e, t ?? {})
|
|
1287
1287
|
}
|
|
1288
1288
|
});
|
|
1289
|
-
let
|
|
1289
|
+
let He = Lr(C);
|
|
1290
1290
|
u.mark("discover");
|
|
1291
|
-
let
|
|
1292
|
-
for (let e of
|
|
1291
|
+
let T = await nt(m, void 0), We = ii(T, g);
|
|
1292
|
+
for (let e of dt({
|
|
1293
1293
|
dialect: String(m?.store ?? process.env.DB_DIALECT ?? "postgres"),
|
|
1294
1294
|
changeStrategy: (process.env.CDC ?? "1") === "0" ? "inline" : "cdc",
|
|
1295
1295
|
dbUrl: process.env.DB_URL,
|
|
1296
|
-
crossReplicaBus:
|
|
1297
|
-
tables:
|
|
1296
|
+
crossReplicaBus: Ci(m?.plugins ?? [])?.broadcast.crossReplica === !0,
|
|
1297
|
+
tables: y.tables.map((e) => ({
|
|
1298
1298
|
tableName: e.tableName,
|
|
1299
1299
|
isReactive: e.isReactive === !0
|
|
1300
1300
|
})),
|
|
1301
|
-
querySources:
|
|
1301
|
+
querySources: y.queries.flatMap((e) => {
|
|
1302
1302
|
let t = e.descriptor.source;
|
|
1303
1303
|
return t === void 0 ? [] : typeof t == "string" ? [t] : [...t];
|
|
1304
1304
|
})
|
|
1305
1305
|
})) e.level === "warn" ? $.warn(e.message) : $.info(e.message);
|
|
1306
1306
|
{
|
|
1307
|
-
let e =
|
|
1307
|
+
let e = E({
|
|
1308
1308
|
tables: qn().map((e) => ({ tableName: e.tableName })),
|
|
1309
|
-
queries:
|
|
1309
|
+
queries: y.queries.map((e) => ({
|
|
1310
1310
|
name: e.descriptor.name,
|
|
1311
1311
|
source: e.descriptor.source
|
|
1312
1312
|
}))
|
|
1313
|
-
}), t =
|
|
1313
|
+
}), t = gt(e);
|
|
1314
1314
|
t !== void 0 && $.warn(t);
|
|
1315
1315
|
}
|
|
1316
1316
|
m?.cache && !process.env.CACHE_BACKEND && (process.env.CACHE_BACKEND = m.cache), m?.cacheRedisUrl && !process.env.CACHE_REDIS_URL && (process.env.CACHE_REDIS_URL = m.cacheRedisUrl), m?.cacheRedisDriver && !process.env.CACHE_REDIS_DRIVER && (process.env.CACHE_REDIS_DRIVER = m.cacheRedisDriver), m?.cacheKeyPrefix && !process.env.CACHE_KEY_PREFIX && (process.env.CACHE_KEY_PREFIX = m.cacheKeyPrefix);
|
|
1317
|
-
let { service:
|
|
1317
|
+
let { service: Ke, invalidationBus: tt, snapshotCache: at, cache: ot, semantic: lt, evictSource: pt, backend: vt, stats: yt, dispose: xt } = await Ge({
|
|
1318
1318
|
env: process.env,
|
|
1319
1319
|
semantic: m?.cacheSemantic ?? !1
|
|
1320
1320
|
});
|
|
1321
|
-
|
|
1322
|
-
if (
|
|
1321
|
+
lt !== void 0 && $.info("semantic cache enabled — reactive eviction on live writes"), $.info(`cache backend resolved: ${vt}` + (vt === "redis" ? ` (driver ${process.env.CACHE_REDIS_DRIVER ?? "resp"})` : " — in-process, not cross-instance")), T.onChange((e) => {
|
|
1322
|
+
if (W.runFork(tt.publish(e.table)), pt !== void 0) {
|
|
1323
1323
|
let t = (e.new ?? e.old)?.id;
|
|
1324
|
-
|
|
1324
|
+
pt({
|
|
1325
1325
|
table: e.table,
|
|
1326
1326
|
op: e.op,
|
|
1327
1327
|
...t === void 0 ? {} : { id: t }
|
|
1328
1328
|
});
|
|
1329
1329
|
}
|
|
1330
1330
|
}), m?.kv && !process.env.KV_BACKEND && (process.env.KV_BACKEND = m.kv), m?.kvRedisUrl && !process.env.KV_REDIS_URL && (process.env.KV_REDIS_URL = m.kvRedisUrl), m?.kvKeyPrefix && !process.env.KV_KEY_PREFIX && (process.env.KV_KEY_PREFIX = m.kvKeyPrefix);
|
|
1331
|
-
let { kv:
|
|
1332
|
-
|
|
1331
|
+
let { kv: Ct, service: wt } = await Tr({ store: T });
|
|
1332
|
+
Ve({
|
|
1333
1333
|
log: $,
|
|
1334
|
-
max:
|
|
1335
|
-
outOfPool:
|
|
1334
|
+
max: Wt(),
|
|
1335
|
+
outOfPool: Lt(g, (process.env.CDC ?? "1") !== "0"),
|
|
1336
1336
|
readPools: t.replicationSnapshot()?.replicaCount ?? 0,
|
|
1337
1337
|
always: !0
|
|
1338
1338
|
}), u.mark("store");
|
|
1339
|
-
let
|
|
1340
|
-
store:
|
|
1341
|
-
sink:
|
|
1339
|
+
let Et = ir({
|
|
1340
|
+
store: T,
|
|
1341
|
+
sink: Fe.sink,
|
|
1342
1342
|
log: $
|
|
1343
|
-
}),
|
|
1344
|
-
store:
|
|
1343
|
+
}), At = kt({
|
|
1344
|
+
store: T,
|
|
1345
1345
|
dialect: g,
|
|
1346
1346
|
log: { info: (e) => $.info(e) }
|
|
1347
|
-
}),
|
|
1348
|
-
g !== "memory" && (
|
|
1349
|
-
let
|
|
1347
|
+
}), j = m?.plugins ?? [], Ft = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, Rt, zt;
|
|
1348
|
+
g !== "memory" && (Rt = Bn.make((await F(g)).makeSqlLayer(A())), zt = await Rt.runPromise(Vn.SqlClient));
|
|
1349
|
+
let Bt = [
|
|
1350
1350
|
"postgres",
|
|
1351
1351
|
"mariadb",
|
|
1352
1352
|
"mysql",
|
|
1353
1353
|
"mssql"
|
|
1354
|
-
].includes(g) ?
|
|
1355
|
-
maxIdleIntervalMs:
|
|
1356
|
-
coordinator:
|
|
1357
|
-
replicaId:
|
|
1354
|
+
].includes(g) ? xr(T, Ft, $) : Xr, mn = w(m?.scheduling), yn = Dr({
|
|
1355
|
+
maxIdleIntervalMs: mn.pollCeilingMs,
|
|
1356
|
+
coordinator: Bt,
|
|
1357
|
+
replicaId: Ft,
|
|
1358
1358
|
log: $
|
|
1359
|
-
}),
|
|
1359
|
+
}), xn = [], L = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, En = Ci(m?.plugins ?? [])?.broadcast?.provider, Dn = Ze(m?.plugins, m?.name ?? Sn(d));
|
|
1360
1360
|
{
|
|
1361
|
-
let e =
|
|
1361
|
+
let e = et(m?.plugins, m?.name ?? Sn(d));
|
|
1362
1362
|
e !== void 0 && $.warn(e);
|
|
1363
1363
|
}
|
|
1364
|
-
let
|
|
1365
|
-
instanceId:
|
|
1366
|
-
namespace:
|
|
1364
|
+
let R = jt(m?.plugins, {
|
|
1365
|
+
instanceId: L,
|
|
1366
|
+
namespace: Dn,
|
|
1367
1367
|
meta: { mode: "serve" },
|
|
1368
1368
|
logger: $
|
|
1369
|
-
}),
|
|
1370
|
-
...
|
|
1371
|
-
instanceId:
|
|
1372
|
-
membership:
|
|
1373
|
-
...
|
|
1374
|
-
broadcastChannels: { presence:
|
|
1369
|
+
}), On = {
|
|
1370
|
+
...zt ? { sql: zt } : {},
|
|
1371
|
+
instanceId: L,
|
|
1372
|
+
membership: R.membership,
|
|
1373
|
+
...En === void 0 ? {} : { broadcast: En },
|
|
1374
|
+
broadcastChannels: { presence: Si(Dn, "presence") },
|
|
1375
1375
|
scheduleCoordinated: (e, t, n) => {
|
|
1376
|
-
let r =
|
|
1377
|
-
return
|
|
1376
|
+
let r = yn(e, t, n);
|
|
1377
|
+
return xn.push(r), r;
|
|
1378
1378
|
}
|
|
1379
1379
|
};
|
|
1380
|
-
for (let e of
|
|
1380
|
+
for (let e of j) e.bindDataStore?.(We, On);
|
|
1381
1381
|
l({
|
|
1382
|
-
store:
|
|
1383
|
-
...
|
|
1382
|
+
store: T,
|
|
1383
|
+
...st(),
|
|
1384
1384
|
log: $
|
|
1385
1385
|
});
|
|
1386
|
-
let
|
|
1387
|
-
if (
|
|
1388
|
-
let e =
|
|
1389
|
-
|
|
1390
|
-
let n =
|
|
1391
|
-
for (let e of
|
|
1386
|
+
let kn = j.filter((e) => typeof e.onChangeEvent == "function");
|
|
1387
|
+
if (kn.length > 0) {
|
|
1388
|
+
let e = T.changeScope ?? "local";
|
|
1389
|
+
T.onChange((t) => {
|
|
1390
|
+
let n = pe(t, e);
|
|
1391
|
+
for (let e of kn) W.runFork(e.onChangeEvent(n).pipe(W.catchAllCause((t) => W.sync(() => $.warn(`plugin ${e.name} onChangeEvent failed`, { error: zn.pretty(t) })))));
|
|
1392
1392
|
});
|
|
1393
1393
|
}
|
|
1394
|
-
let
|
|
1395
|
-
plugins:
|
|
1394
|
+
let z = se({
|
|
1395
|
+
plugins: j,
|
|
1396
1396
|
appName: m?.name ?? "voltro-api",
|
|
1397
1397
|
appType: "api",
|
|
1398
1398
|
voltroVersion: process.env.npm_package_version ?? "0.0.0",
|
|
1399
1399
|
log: $
|
|
1400
1400
|
});
|
|
1401
|
-
|
|
1402
|
-
let
|
|
1401
|
+
j.length && await z.activate(), u.mark("plugins");
|
|
1402
|
+
let B = await z.gatherObservability(), An = {
|
|
1403
1403
|
info: (e, t) => process.stdout.write(`[broadcast] ${e} ${t ? JSON.stringify(t) : ""}\n`),
|
|
1404
1404
|
warn: (e, t) => process.stderr.write(`[broadcast] ${e} ${t ? JSON.stringify(t) : ""}\n`),
|
|
1405
1405
|
debug: () => {}
|
|
1406
|
-
},
|
|
1407
|
-
|
|
1408
|
-
}),
|
|
1409
|
-
|
|
1410
|
-
let
|
|
1411
|
-
prefix:
|
|
1412
|
-
...
|
|
1413
|
-
}) : void 0,
|
|
1414
|
-
analyticsLayer:
|
|
1415
|
-
cacheService:
|
|
1416
|
-
kvService:
|
|
1417
|
-
...
|
|
1418
|
-
pluginServices:
|
|
1406
|
+
}, jn, Mn = await ht(T, m, g, Dn, An, (e, t) => {
|
|
1407
|
+
jn?.refreshAll(`broadcast gap: missed ${t} change(s) from ${e}`);
|
|
1408
|
+
}), V = m?.apiKeys, Nn = (typeof V == "object" ? V.prefix : void 0) ?? "voltro_", Pn = V ? pr(T) : void 0, H = Pn ? Cr({ flush: wr(Pn) }) : void 0;
|
|
1409
|
+
H && Vr(() => H.shutdown());
|
|
1410
|
+
let U = Pn ? Sr(Pn, {
|
|
1411
|
+
prefix: Nn,
|
|
1412
|
+
...H ? { usage: H } : {}
|
|
1413
|
+
}) : void 0, Fn = U ? [gr(U, { prefix: Nn })] : [], In = bt([...m?.auth?.strategies ?? [], ...Fn], bi(m?.plugins ?? []), m?.auth?.anonymousTenantRequired ?? !1, m?.auth, () => We), Ln = [...m?.restRoutes ?? [], ...U ? rr(U, (typeof V == "object" ? V.managementPath : void 0) ?? "/v1/api-keys") : []], Rn = k(m?.idempotency, T), Kn = j.map((e) => e.services).filter((e) => e !== void 0), Jn = G.mergeAll(Re({
|
|
1414
|
+
analyticsLayer: Fe.layer,
|
|
1415
|
+
cacheService: Ke,
|
|
1416
|
+
kvService: wt,
|
|
1417
|
+
...lt === void 0 ? {} : { semanticCache: lt },
|
|
1418
|
+
pluginServices: Kn,
|
|
1419
1419
|
userLayers: m?.layers ?? []
|
|
1420
|
-
}),
|
|
1421
|
-
files:
|
|
1422
|
-
store:
|
|
1420
|
+
}), rt(m?.http ?? {})), K = await it({
|
|
1421
|
+
files: v,
|
|
1422
|
+
store: T,
|
|
1423
1423
|
log: $,
|
|
1424
1424
|
seedPolicy: "report",
|
|
1425
|
-
seedPattern:
|
|
1426
|
-
loadSeedFiles:
|
|
1427
|
-
startupPattern:
|
|
1425
|
+
seedPattern: ln,
|
|
1426
|
+
loadSeedFiles: Kt,
|
|
1427
|
+
startupPattern: rn,
|
|
1428
1428
|
loadStartupFiles: a,
|
|
1429
1429
|
runStartups: o,
|
|
1430
|
-
emailPattern:
|
|
1431
|
-
loadEmailFiles:
|
|
1432
|
-
registerEmailTemplates:
|
|
1430
|
+
emailPattern: ze,
|
|
1431
|
+
loadEmailFiles: mt,
|
|
1432
|
+
registerEmailTemplates: xi
|
|
1433
1433
|
});
|
|
1434
1434
|
(K.startupCount > 0 || K.emailCount > 0) && $.info("boot lifecycle", {
|
|
1435
1435
|
startups: K.startupCount,
|
|
1436
1436
|
emailTemplates: K.emailCount
|
|
1437
|
-
}), K.startups !== void 0 &&
|
|
1437
|
+
}), K.startups !== void 0 && Vr(async () => {
|
|
1438
1438
|
await K.startups.stop();
|
|
1439
|
-
}),
|
|
1440
|
-
demands: de
|
|
1441
|
-
isRegistered: (e) =>
|
|
1439
|
+
}), oe({
|
|
1440
|
+
demands: ue(de),
|
|
1441
|
+
isRegistered: (e) => _r(e) !== void 0
|
|
1442
1442
|
});
|
|
1443
|
-
let Zn =
|
|
1444
|
-
schedules:
|
|
1445
|
-
schedules:
|
|
1443
|
+
let Zn = ft({
|
|
1444
|
+
schedules: St({
|
|
1445
|
+
schedules: y.schedules,
|
|
1446
1446
|
seeds: K.seeds,
|
|
1447
|
-
store:
|
|
1447
|
+
store: T,
|
|
1448
1448
|
log: $.child("seeds")
|
|
1449
1449
|
}),
|
|
1450
|
-
workflows:
|
|
1450
|
+
workflows: y.workflows ?? [],
|
|
1451
1451
|
log: $.child("workflow-schedules")
|
|
1452
1452
|
}), Qn = m?.scheduling ?? {}, $n = Qn.trigger ?? "self", er = /* @__PURE__ */ new Set([
|
|
1453
1453
|
"postgres",
|
|
1454
1454
|
"mysql",
|
|
1455
1455
|
"mariadb",
|
|
1456
1456
|
"mssql"
|
|
1457
|
-
]), tr = Qn.coordination ?? (er.has(g) ? "advisoryLock" : "single"), q = tr === "cluster" && er.has(g),
|
|
1457
|
+
]), tr = Qn.coordination ?? (er.has(g) ? "advisoryLock" : "single"), q = tr === "cluster" && er.has(g), nr = q ? "cluster" : tr === "advisoryLock" && er.has(g) ? "advisoryLock" : "single";
|
|
1458
1458
|
tr === "cluster" && !q && $.warn("scheduling.coordination=cluster needs a sql-backed store except sqlite — falling back to single"), tr === "advisoryLock" && !er.has(g) && $.warn("scheduling.coordination=advisoryLock needs a SQL store (the claim-row gate) — falling back to single");
|
|
1459
|
-
let ar, or =
|
|
1459
|
+
let ar, or = y.workflows.length > 0 || y.workflowWorkers.length > 0 || y.eventTriggers.length > 0 || (Ee?.outgoing.length ?? 0) > 0 || q, sr;
|
|
1460
1460
|
if (or) {
|
|
1461
1461
|
if (g === "mssql") {
|
|
1462
|
-
let e = await
|
|
1462
|
+
let e = await fn(process.cwd());
|
|
1463
1463
|
e && $.warn(e);
|
|
1464
1464
|
}
|
|
1465
1465
|
let [{ WorkflowEngine: e }, { makeClusterCronLayer: t, workflowEngineLayer: n, resolveRunnerStorage: r, resolveFailoverTuning: i }] = await Promise.all([import("@effect/workflow"), import("@voltro/workflow/cluster")]), a = q ? Zn.filter((e) => (e.trigger ?? $n) === "self").map((e) => t({
|
|
1466
1466
|
name: e.name,
|
|
1467
|
-
cron:
|
|
1467
|
+
cron: fr(e),
|
|
1468
1468
|
execute: async () => {
|
|
1469
1469
|
await ar?.fireFromCluster(e.name);
|
|
1470
1470
|
}
|
|
1471
1471
|
})) : [];
|
|
1472
1472
|
sr = g === "memory" ? e.layerMemory : await (async () => {
|
|
1473
|
-
let e = await
|
|
1473
|
+
let e = await F(g), t = r({ sqliteFamily: e.id === "sqlite" || e.id === "turso" });
|
|
1474
1474
|
return $.info(`workflow engine: cluster-${t}, dialect=${e.id}` + (t === "memory" ? " — single-process durable replay, no cross-pod shard handoff" + (e.id !== "sqlite" && e.id !== "turso" ? " (VOLTRO_WORKFLOW_RUNNER_STORAGE=memory: SqlRunnerStorage/cluster_runners + GET_LOCK skipped)" : "") : "")), n({
|
|
1475
|
-
sqlClientLayer: e.makeSqlLayer(
|
|
1475
|
+
sqlClientLayer: e.makeSqlLayer(A()),
|
|
1476
1476
|
runnerStorage: t,
|
|
1477
1477
|
dialectId: e.id,
|
|
1478
1478
|
...process.env.VOLTRO_WORKFLOW_RUNNER_PORT ? { runnerListenPort: Number(process.env.VOLTRO_WORKFLOW_RUNNER_PORT) } : {},
|
|
@@ -1481,19 +1481,19 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
1481
1481
|
});
|
|
1482
1482
|
})();
|
|
1483
1483
|
}
|
|
1484
|
-
let
|
|
1485
|
-
if (
|
|
1486
|
-
let e = (await
|
|
1487
|
-
|
|
1484
|
+
let cr = ce(j, _n()), J = v.filter((e) => /\.subscribe\.tsx?$/.test(e)), lr = J.length > 0 ? await ye(J, $) : [], Y = v.filter((e) => /\.reaction\.tsx?$/.test(e)), ur = Y.length > 0 ? await b(Y, $) : [], dr = v.filter((e) => sn.test(e)), vr = dr.length > 0 ? await Pe(dr, $) : [], yr = v.filter((e) => /\.aggregate\.tsx?$/.test(e)), br = yr.length > 0 ? await te(yr, $) : [], Er = he();
|
|
1485
|
+
if (br.length > 0 && g !== "memory") try {
|
|
1486
|
+
let e = (await F(g)).makeSqlLayer(A());
|
|
1487
|
+
Er = ct(e);
|
|
1488
1488
|
} catch (e) {
|
|
1489
1489
|
$.warn("aggregate: SQL storage init failed — falling back to in-process", { err: String(e) });
|
|
1490
1490
|
}
|
|
1491
|
-
let Or = g === "memory" ?
|
|
1491
|
+
let Or = g === "memory" ? Xr : xr(T, `aggregate@${process.pid}`, $), kr = v.filter((e) => cn.test(e)), Ar = kr.length > 0 ? await p(kr, $) : [], jr = v.filter((e) => on.test(e)), Mr = jr.length > 0 ? await Ce(jr, $) : [], Nr = v.filter((e) => an.test(e)), Pr = Nr.length > 0 ? await Mt(Nr, $) : [], Fr = [], Ir = [], Rr = v.filter((e) => $t.test(e));
|
|
1492
1492
|
if (Rr.length > 0) {
|
|
1493
|
-
let e = $.child("agent"), t =
|
|
1494
|
-
t.length > 0 && await
|
|
1495
|
-
let n = await
|
|
1496
|
-
for (let e of n.agents) for (let t of
|
|
1493
|
+
let e = $.child("agent"), t = v.filter((e) => Zt.test(e));
|
|
1494
|
+
t.length > 0 && await nn(t, e);
|
|
1495
|
+
let n = await Yt(Rr, e);
|
|
1496
|
+
for (let e of n.agents) for (let t of Je(e)) (t.kind === "action" ? Fr : Ir).push({
|
|
1497
1497
|
file: t.file,
|
|
1498
1498
|
descriptor: t.descriptor,
|
|
1499
1499
|
executor: t.executor
|
|
@@ -1507,32 +1507,32 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
1507
1507
|
return e;
|
|
1508
1508
|
}, zr = Yn({
|
|
1509
1509
|
dialect: g,
|
|
1510
|
-
...
|
|
1511
|
-
}),
|
|
1512
|
-
sqlLayer:
|
|
1513
|
-
declared:
|
|
1510
|
+
...A()
|
|
1511
|
+
}), Br = g === "memory" ? void 0 : (await F(g)).makeSqlLayer(A()), Hr = async () => Dt({
|
|
1512
|
+
sqlLayer: Br,
|
|
1513
|
+
declared: C,
|
|
1514
1514
|
log: $
|
|
1515
1515
|
}), Ur = {
|
|
1516
1516
|
kind: "api",
|
|
1517
1517
|
meta: {
|
|
1518
1518
|
name: m?.name ?? "voltro-api",
|
|
1519
|
-
voltroVersion:
|
|
1519
|
+
voltroVersion: Tt,
|
|
1520
1520
|
port: h,
|
|
1521
1521
|
mode: "start",
|
|
1522
1522
|
store: g,
|
|
1523
1523
|
cdc: ie ? "on" : "off",
|
|
1524
1524
|
...zr === void 0 ? {} : { databaseId: zr }
|
|
1525
1525
|
},
|
|
1526
|
-
rpc:
|
|
1527
|
-
workflows:
|
|
1526
|
+
rpc: Qe(y, d),
|
|
1527
|
+
workflows: Le(y, d),
|
|
1528
1528
|
migrations: Hr,
|
|
1529
1529
|
events: () => Z.eventsSnapshot(),
|
|
1530
1530
|
agentTools: () => Z.agentTools(),
|
|
1531
1531
|
invariantChecks: () => ({
|
|
1532
1532
|
mode: "serve",
|
|
1533
|
-
accessGate:
|
|
1533
|
+
accessGate: de,
|
|
1534
1534
|
config: m,
|
|
1535
|
-
serverOnlyLeaks:
|
|
1535
|
+
serverOnlyLeaks: y.serverOnlyLeaks,
|
|
1536
1536
|
migrations: Hr
|
|
1537
1537
|
}),
|
|
1538
1538
|
members: () => Z.membersSnapshot(),
|
|
@@ -1544,48 +1544,48 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
1544
1544
|
getHandle: () => ar,
|
|
1545
1545
|
getSchedules: () => Zn
|
|
1546
1546
|
}),
|
|
1547
|
-
...
|
|
1548
|
-
store:
|
|
1549
|
-
discoveredWebhooks:
|
|
1547
|
+
...Ee === void 0 ? {} : { webhooks: () => me({
|
|
1548
|
+
store: T,
|
|
1549
|
+
discoveredWebhooks: Ee
|
|
1550
1550
|
}) },
|
|
1551
1551
|
plugins: () => ({
|
|
1552
|
-
plugins:
|
|
1552
|
+
plugins: z.snapshot(),
|
|
1553
1553
|
capturedAt: Date.now()
|
|
1554
1554
|
}),
|
|
1555
|
-
env: () =>
|
|
1556
|
-
...m?.env !== void 0 &&
|
|
1555
|
+
env: () => P(m?.name ?? Sn(d), {
|
|
1556
|
+
...m?.env !== void 0 && ui(m.env) ? { contract: m.env } : {},
|
|
1557
1557
|
plugins: m?.plugins ?? []
|
|
1558
1558
|
}),
|
|
1559
|
-
dataCache: () =>
|
|
1560
|
-
stats:
|
|
1561
|
-
backendKind:
|
|
1559
|
+
dataCache: () => Be({
|
|
1560
|
+
stats: yt,
|
|
1561
|
+
backendKind: vt
|
|
1562
1562
|
}),
|
|
1563
|
-
subscriptions: () =>
|
|
1564
|
-
inspectTables: () =>
|
|
1565
|
-
inspectRows:
|
|
1566
|
-
store:
|
|
1567
|
-
tables:
|
|
1563
|
+
subscriptions: () => Nt(() => jn),
|
|
1564
|
+
inspectTables: () => le(y.tables),
|
|
1565
|
+
inspectRows: be({
|
|
1566
|
+
store: T,
|
|
1567
|
+
tables: y.tables,
|
|
1568
1568
|
mask: !0
|
|
1569
1569
|
}),
|
|
1570
1570
|
metrics: (e) => Z.rpcMetrics().snapshot(e),
|
|
1571
|
-
cluster: () =>
|
|
1572
|
-
store:
|
|
1571
|
+
cluster: () => It({
|
|
1572
|
+
store: T,
|
|
1573
1573
|
dialect: g,
|
|
1574
1574
|
useClusterCron: q,
|
|
1575
1575
|
scheduleCoordChoice: tr
|
|
1576
1576
|
}),
|
|
1577
|
-
inspectSchedules: () =>
|
|
1577
|
+
inspectSchedules: () => we({
|
|
1578
1578
|
schedules: Zn,
|
|
1579
1579
|
defaultTrigger: $n,
|
|
1580
|
-
coordination:
|
|
1580
|
+
coordination: nr
|
|
1581
1581
|
}),
|
|
1582
|
-
inspectScheduleRuns: (e) =>
|
|
1583
|
-
...f(
|
|
1584
|
-
controls:
|
|
1585
|
-
active: (
|
|
1582
|
+
inspectScheduleRuns: (e) => N(T, e),
|
|
1583
|
+
...f(T, {
|
|
1584
|
+
controls: O(y.workflows ?? []),
|
|
1585
|
+
active: (y.workflows?.length ?? 0) > 0,
|
|
1586
1586
|
cancellation: () => Z.flowControlHealth()
|
|
1587
1587
|
}),
|
|
1588
|
-
webhookActions:
|
|
1588
|
+
webhookActions: xe(() => Z.webhooksService()),
|
|
1589
1589
|
inspectStartWorkflow: (e) => X().inspectStartWorkflow(e),
|
|
1590
1590
|
inspectCancelWorkflowRun: (e) => X().inspectCancelWorkflowRun(e),
|
|
1591
1591
|
inspectSuspendWorkflowRun: (e) => X().inspectSuspendWorkflowRun(e),
|
|
@@ -1594,13 +1594,13 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
1594
1594
|
inspectRetryWorkflowRun: (e) => X().inspectRetryWorkflowRun(e),
|
|
1595
1595
|
inspectSignalWorkflowRun: (e) => X().inspectSignalWorkflowRun(e),
|
|
1596
1596
|
inspectUpdateWorkflowRun: (e) => X().inspectUpdateWorkflowRun(e),
|
|
1597
|
-
inspectInferences: (e) =>
|
|
1598
|
-
store:
|
|
1599
|
-
active: (
|
|
1597
|
+
inspectInferences: (e) => Xe({
|
|
1598
|
+
store: T,
|
|
1599
|
+
active: (y.workflows?.length ?? 0) > 0,
|
|
1600
1600
|
dispatcher: () => Z.inferenceHealth()
|
|
1601
1601
|
}, e.limit === void 0 ? {} : { limit: e.limit }),
|
|
1602
|
-
...
|
|
1603
|
-
store:
|
|
1602
|
+
..._t({
|
|
1603
|
+
store: T,
|
|
1604
1604
|
cancelRun: async (e) => await Z.runCanceller()?.(e) ?? !1,
|
|
1605
1605
|
retryRun: async (e) => X().inspectRetryWorkflowRun({ runId: e }),
|
|
1606
1606
|
redriveRun: async (e) => Z.redriveWorkflowRun({ runId: e }),
|
|
@@ -1608,11 +1608,11 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
1608
1608
|
}),
|
|
1609
1609
|
inspectRedriveWorkflowRun: (e) => Z.redriveWorkflowRun(e),
|
|
1610
1610
|
inspectResumeWorkflowRunFromStep: (e) => Z.resumeWorkflowRunFromStep(e)
|
|
1611
|
-
},
|
|
1612
|
-
let e = await
|
|
1613
|
-
return
|
|
1614
|
-
tables:
|
|
1615
|
-
sqlLayer: e.makeSqlLayer(
|
|
1611
|
+
}, Wr = (process.env.VOLTRO_TENANT_ISOLATION ?? m?.tenancy?.isolation) === "namespace", Gr = Wr && g !== "memory" ? await (async () => {
|
|
1612
|
+
let e = await F(g);
|
|
1613
|
+
return D({
|
|
1614
|
+
tables: C,
|
|
1615
|
+
sqlLayer: e.makeSqlLayer(A()),
|
|
1616
1616
|
dialect: g,
|
|
1617
1617
|
options: { retryFilter: e.retryFilter },
|
|
1618
1618
|
log: {
|
|
@@ -1620,110 +1620,110 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
1620
1620
|
error: (e, t, n) => $.error(e, t ?? {}, n)
|
|
1621
1621
|
}
|
|
1622
1622
|
});
|
|
1623
|
-
})() : void 0,
|
|
1623
|
+
})() : void 0, qr = await ut({
|
|
1624
1624
|
input: m?.tenancy?.residency,
|
|
1625
|
-
namespaceIsolationOn:
|
|
1626
|
-
makeStoreForUrl: (e, t) =>
|
|
1625
|
+
namespaceIsolationOn: Wr,
|
|
1626
|
+
makeStoreForUrl: (e, t) => nt(m, void 0, Ut(A(), t)),
|
|
1627
1627
|
log: {
|
|
1628
1628
|
info: (e, t) => $.info(e, t),
|
|
1629
1629
|
warn: (e, t) => $.warn(e, t)
|
|
1630
1630
|
}
|
|
1631
1631
|
});
|
|
1632
|
-
|
|
1633
|
-
await
|
|
1632
|
+
qr !== void 0 && Vr(async () => {
|
|
1633
|
+
await qr.close();
|
|
1634
1634
|
});
|
|
1635
|
-
let Z = await
|
|
1635
|
+
let Z = await Yi({
|
|
1636
1636
|
bootTiming: u,
|
|
1637
|
-
broadcastNamespace:
|
|
1637
|
+
broadcastNamespace: Dn,
|
|
1638
1638
|
scheduling: (() => {
|
|
1639
|
-
let e =
|
|
1639
|
+
let e = mn;
|
|
1640
1640
|
return {
|
|
1641
1641
|
admissionDrainMs: e.admissionDrainMs,
|
|
1642
1642
|
inferenceTickMs: e.inferenceTickMs,
|
|
1643
1643
|
cancelSweepMs: e.cancelSweepMs,
|
|
1644
1644
|
stalenessSweepMs: e.stalenessSweepMs,
|
|
1645
|
-
disarmWhenIdle:
|
|
1646
|
-
changeScope:
|
|
1647
|
-
broadcastAttached:
|
|
1645
|
+
disarmWhenIdle: $e({
|
|
1646
|
+
changeScope: T.changeScope,
|
|
1647
|
+
broadcastAttached: Mn !== void 0
|
|
1648
1648
|
})
|
|
1649
1649
|
};
|
|
1650
1650
|
})(),
|
|
1651
1651
|
...m?.workflows?.staleness === void 0 ? {} : { workflowStaleness: m.workflows.staleness },
|
|
1652
1652
|
...m?.workflows?.suspendSignalHintMs === void 0 ? {} : { workflowSuspendSignalHintMs: m.workflows.suspendSignalHintMs },
|
|
1653
|
-
workflowRecording:
|
|
1653
|
+
workflowRecording: M(m?.workflows?.recording),
|
|
1654
1654
|
membership: {
|
|
1655
|
-
...
|
|
1656
|
-
instanceId:
|
|
1655
|
+
...R,
|
|
1656
|
+
instanceId: L
|
|
1657
1657
|
},
|
|
1658
1658
|
security: {
|
|
1659
|
-
defaultDeny:
|
|
1660
|
-
...
|
|
1659
|
+
defaultDeny: Oe(m),
|
|
1660
|
+
..._e(m)
|
|
1661
1661
|
},
|
|
1662
|
-
approvals: { defaultExpiryMs:
|
|
1662
|
+
approvals: { defaultExpiryMs: Ne(m) },
|
|
1663
1663
|
...m?.plugins === void 0 ? {} : { plugins: m.plugins },
|
|
1664
|
-
...
|
|
1665
|
-
restRoutes:
|
|
1666
|
-
appProcedures:
|
|
1664
|
+
...Rn ? { idempotency: Rn } : {},
|
|
1665
|
+
restRoutes: Ln,
|
|
1666
|
+
appProcedures: de,
|
|
1667
1667
|
discovered: {
|
|
1668
|
-
queries: [...
|
|
1669
|
-
mutations:
|
|
1670
|
-
actions: [...
|
|
1671
|
-
streams:
|
|
1672
|
-
events:
|
|
1673
|
-
workflows:
|
|
1674
|
-
workflowWorkers:
|
|
1675
|
-
eventTriggers:
|
|
1668
|
+
queries: [...y.queries, ...Ir],
|
|
1669
|
+
mutations: y.mutations,
|
|
1670
|
+
actions: [...y.actions, ...Fr],
|
|
1671
|
+
streams: y.streams,
|
|
1672
|
+
events: y.events,
|
|
1673
|
+
workflows: y.workflows,
|
|
1674
|
+
workflowWorkers: y.workflowWorkers,
|
|
1675
|
+
eventTriggers: y.eventTriggers,
|
|
1676
1676
|
schedules: Zn,
|
|
1677
|
-
subscribers:
|
|
1677
|
+
subscribers: lr,
|
|
1678
1678
|
outboxHandlers: vr,
|
|
1679
|
-
connections:
|
|
1679
|
+
connections: y.connections,
|
|
1680
1680
|
reactions: ur,
|
|
1681
|
-
aggregates:
|
|
1681
|
+
aggregates: br,
|
|
1682
1682
|
expectations: Ar,
|
|
1683
1683
|
budgets: Mr,
|
|
1684
1684
|
experiments: Pr,
|
|
1685
|
-
...
|
|
1685
|
+
...Ee === void 0 ? {} : { webhooks: Ee }
|
|
1686
1686
|
},
|
|
1687
1687
|
log: $,
|
|
1688
|
-
analytics:
|
|
1689
|
-
aggregateStorage:
|
|
1688
|
+
analytics: Fe.sink,
|
|
1689
|
+
aggregateStorage: Er,
|
|
1690
1690
|
aggregateCoordinator: Or,
|
|
1691
|
-
store:
|
|
1692
|
-
kv:
|
|
1693
|
-
cache:
|
|
1694
|
-
snapshotCache:
|
|
1691
|
+
store: T,
|
|
1692
|
+
kv: Ct,
|
|
1693
|
+
cache: ot,
|
|
1694
|
+
snapshotCache: at,
|
|
1695
1695
|
...m?.reactive === void 0 ? {} : { reactive: m.reactive },
|
|
1696
|
-
schemaRegistry:
|
|
1697
|
-
tenantScopedTables:
|
|
1698
|
-
softDeleteScopedTables:
|
|
1699
|
-
dataTransferSnapshot: Hn(
|
|
1696
|
+
schemaRegistry: He,
|
|
1697
|
+
tenantScopedTables: y.tenantScopedTables,
|
|
1698
|
+
softDeleteScopedTables: y.softDeleteScopedTables,
|
|
1699
|
+
dataTransferSnapshot: Hn(C),
|
|
1700
1700
|
dataTransferDialect: g,
|
|
1701
|
-
...
|
|
1702
|
-
...
|
|
1701
|
+
...Gr === void 0 ? {} : { ensureTenantProvisioned: Gr.ensure },
|
|
1702
|
+
...qr === void 0 ? {} : { resolveResidentStore: qr.resolveStore },
|
|
1703
1703
|
tenantIsolation: (process.env.VOLTRO_TENANT_ISOLATION ?? m?.tenancy?.isolation) === "namespace" ? "namespace" : "shared-schema",
|
|
1704
|
-
resolveSubject: (e, t) =>
|
|
1704
|
+
resolveSubject: (e, t) => In({
|
|
1705
1705
|
headers: e,
|
|
1706
1706
|
clientId: t
|
|
1707
1707
|
}),
|
|
1708
1708
|
...m?.auth === void 0 ? {} : { authority: m.auth },
|
|
1709
1709
|
...m?.agents === void 0 ? {} : { agents: m.agents },
|
|
1710
|
-
httpRoutes:
|
|
1711
|
-
getStore: () =>
|
|
1712
|
-
...
|
|
1710
|
+
httpRoutes: j.flatMap((e) => e.httpRoutes ?? []),
|
|
1711
|
+
getStore: () => We,
|
|
1712
|
+
...Jn ? { baseLayer: Jn } : {},
|
|
1713
1713
|
...sr === void 0 ? {} : { workflowEngineLayer: sr },
|
|
1714
1714
|
scheduleDefaultTrigger: $n,
|
|
1715
|
-
scheduleCoordination:
|
|
1715
|
+
scheduleCoordination: nr,
|
|
1716
1716
|
scheduleArmSelf: !q,
|
|
1717
1717
|
dormancy: process.env.VOLTRO_DORMANCY === "sleep" || process.env.VOLTRO_DORMANCY === "always-on" ? process.env.VOLTRO_DORMANCY : m?.dormancy ?? "always-on",
|
|
1718
1718
|
scheduleReplicaId: process.env.HOSTNAME ?? `pid-${process.pid}`,
|
|
1719
|
-
...
|
|
1719
|
+
...cr === void 0 ? {} : { scheduleFireInterceptor: cr },
|
|
1720
1720
|
onSchedulerReady: (e) => {
|
|
1721
1721
|
ar = e;
|
|
1722
1722
|
},
|
|
1723
1723
|
inspectRoute: { handle: async (e, t, n, r) => await ee(e, Ur, t, {
|
|
1724
1724
|
method: n,
|
|
1725
1725
|
...r === void 0 ? {} : { body: r }
|
|
1726
|
-
}) || ((n === "GET" ? await
|
|
1726
|
+
}) || ((n === "GET" ? await dn(e, Ur, t, { method: n }) : null) ?? un(e, Ur, t, {
|
|
1727
1727
|
method: n,
|
|
1728
1728
|
...r === void 0 ? {} : { body: r }
|
|
1729
1729
|
}) ?? {
|
|
@@ -1732,39 +1732,39 @@ var Ai = () => Math.max(500, Math.floor(Z() * .6)), ji = (e) => new Promise((t)
|
|
|
1732
1732
|
body: JSON.stringify({ error: "not an inspect route" })
|
|
1733
1733
|
}) },
|
|
1734
1734
|
...m?.name === void 0 ? {} : { appName: m.name },
|
|
1735
|
-
observability:
|
|
1735
|
+
observability: B,
|
|
1736
1736
|
port: h,
|
|
1737
1737
|
...m?.transport?.wsPath ? { path: m.transport.wsPath } : {}
|
|
1738
1738
|
});
|
|
1739
|
-
return
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1739
|
+
return jn = Z.dispatcher, Se(Pt([
|
|
1740
|
+
y.queries,
|
|
1741
|
+
y.mutations,
|
|
1742
|
+
y.actions,
|
|
1743
|
+
y.streams
|
|
1744
1744
|
]), (e) => {
|
|
1745
1745
|
$.warn(e);
|
|
1746
1746
|
}), $.info(`API listening on :${h}`, {
|
|
1747
1747
|
dialect: g,
|
|
1748
|
-
queries:
|
|
1749
|
-
mutations:
|
|
1750
|
-
actions:
|
|
1751
|
-
streams:
|
|
1752
|
-
workflows:
|
|
1753
|
-
workflowWorkers:
|
|
1748
|
+
queries: y.queries.length,
|
|
1749
|
+
mutations: y.mutations.length,
|
|
1750
|
+
actions: y.actions.length,
|
|
1751
|
+
streams: y.streams.length,
|
|
1752
|
+
workflows: y.workflows.length,
|
|
1753
|
+
workflowWorkers: y.workflowWorkers.length,
|
|
1754
1754
|
schedules: Zn.length,
|
|
1755
|
-
scheduleCoordination:
|
|
1756
|
-
}), u.finish($),
|
|
1757
|
-
for (let e of
|
|
1758
|
-
|
|
1755
|
+
scheduleCoordination: nr
|
|
1756
|
+
}), u.finish($), Vr(async () => {
|
|
1757
|
+
for (let e of xn) e.stop();
|
|
1758
|
+
At.stop();
|
|
1759
1759
|
try {
|
|
1760
|
-
await Z.close(),
|
|
1761
|
-
mirror:
|
|
1760
|
+
await Z.close(), xt(), Rt?.dispose(), await z.deactivate(), await Mn?.close(), await qe({
|
|
1761
|
+
mirror: Et,
|
|
1762
1762
|
log: $
|
|
1763
|
-
}), await
|
|
1763
|
+
}), await Fe.dispose(), await T.close?.();
|
|
1764
1764
|
} catch (e) {
|
|
1765
1765
|
console.error("serve: shutdown step failed, exiting anyway:", e);
|
|
1766
1766
|
}
|
|
1767
1767
|
}), await new Promise(() => {}), 0;
|
|
1768
1768
|
};
|
|
1769
1769
|
//#endregion
|
|
1770
|
-
export {
|
|
1770
|
+
export { Qi as n, Xi as r, $i as t };
|