@voltro/cli 0.22.0 → 0.23.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 +383 -0
- package/dist/apiBuild-CD-4JLLA.js +2 -0
- package/dist/{apiBuild-2zRxj2hJ.js → apiBuild-JQtIhZPy.js} +2 -2
- package/dist/bin.js +3 -3
- package/dist/{commands-DGaeTn2f.js → commands-Bsu9Buln.js} +1764 -1492
- package/dist/dbCommand-CSguuUQn.js +2 -0
- package/dist/{dbCommand-DVASmZj2.js → dbCommand-GI7-BVZt.js} +440 -259
- package/dist/{dev-BEYBSGJ7.js → dev-DRxF_qOB.js} +1 -1
- package/dist/{dev-DeHVUxQx.js → dev-jM07kq_D.js} +1479 -1479
- package/dist/index.js +1 -1
- package/dist/{inspectMetrics-4AVPn6IS.js → inspectMetrics-dcC7gnxu.js} +603 -560
- package/dist/{serveCommand-DEVTtnLy.js → serveCommand-Cl8sicD5.js} +230 -229
- package/dist/serveEntry.js +2 -2
- package/dist/{start-BjGUIIvj.js → start-C_4VUDT8.js} +327 -325
- package/dist/startEntry.js +2 -2
- package/package.json +17 -17
- package/templates/AGENTS.md +1 -1
- package/templates/agent-docs/_index.md +1 -1
- package/templates/agent-docs/_manifest.json +1 -1
- package/templates/agent-docs/caching.md +21 -5
- package/templates/agent-docs/cli.md +44 -0
- package/templates/agent-docs/data.md +23 -5
- package/templates/agent-docs/database/migrations.md +94 -0
- package/templates/agent-docs/plugins.md +42 -0
- package/templates/agent-docs/routing.md +23 -1
- package/templates/agent-docs/templates/apibackends.md +2 -2
- package/templates/agent-docs/whats-new.md +203 -136
- 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-storage/package.json +8 -8
- package/templates/apps/api-data-advanced/package.json +8 -8
- package/templates/apps/api-durable/package.json +8 -8
- package/templates/apps/api-feature-flags/package.json +9 -9
- package/templates/apps/api-governance/package.json +8 -8
- package/templates/apps/api-kv/package.json +8 -8
- package/templates/apps/api-moderation/package.json +8 -8
- package/templates/apps/api-observability/package.json +8 -8
- package/templates/apps/api-ratelimit/package.json +8 -8
- package/templates/apps/api-rbac/package.json +8 -8
- package/templates/apps/api-rest/package.json +7 -7
- package/templates/apps/api-saas/package.json +11 -11
- package/templates/apps/api-search/package.json +8 -8
- package/templates/apps/api-versioning/app.config.ts +6 -4
- package/templates/apps/api-versioning/package.json +8 -8
- package/templates/apps/api-webhooks/package.json +9 -9
- package/templates/apps/changelog/package.json +6 -6
- package/templates/apps/edge-functions/package.json +2 -2
- package/templates/apps/frontend-admin/package.json +8 -8
- package/templates/apps/frontend-app/package.json +8 -8
- package/templates/apps/frontend-blank/package.json +7 -7
- 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-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/dist/apiBuild-sqNmWmY5.js +0 -2
- package/dist/dbCommand-CO3eSAZR.js +0 -2
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ot as e, t } from "./inspectMetrics-dcC7gnxu.js";
|
|
2
2
|
import { s as n } from "./seedRunner-D6eu-u5U.js";
|
|
3
3
|
import { r, t as i } from "./appModuleLoader-C9r9mxZt.js";
|
|
4
4
|
import { f as a, m as o, n as s, p as c, u as l } from "./frameworkTableAssembly-sg41s14F.js";
|
|
5
5
|
import { l as u } from "./fileConventions-CBNPZVOV.js";
|
|
6
6
|
import { p as d } from "./inspect-_ldwsAwH.js";
|
|
7
|
-
import { $ as ee, A as f, B as p, C as te, D as m, E as ne, F as re, G as ie, H as ae, I as h, K as oe, L as g, M as _, N as se, O as v, P as y, R as ce, S as le, T as ue, V as de, W as fe, _ as b, at as pe, b as me, c as he, et as ge, h as
|
|
8
|
-
import { l as O, r as k } from "./apiBuild-
|
|
9
|
-
import { t as
|
|
10
|
-
import { n as
|
|
11
|
-
import { join as
|
|
12
|
-
import { pathToFileURL as
|
|
13
|
-
import { Cause as
|
|
14
|
-
import { createLogger as
|
|
15
|
-
import { existsSync as
|
|
16
|
-
import { AggregateRegistry as
|
|
7
|
+
import { $ as ee, A as f, B as p, C as te, D as m, E as ne, F as re, G as ie, H as ae, I as h, K as oe, L as g, M as _, N as se, O as v, P as y, R as ce, S as le, T as ue, V as de, W as fe, _ as b, at as pe, b as me, c as he, et as ge, h as _e, i as x, it as S, j as ve, k as ye, lt as be, m as C, nt as w, o as T, ot as xe, q as Se, r as Ce, rt as we, st as E, t as Te, tt as Ee, u as De, ut as Oe, v as ke, w as Ae, x as D, y as je, z as Me } from "./dev-jM07kq_D.js";
|
|
8
|
+
import { l as O, r as k } from "./apiBuild-JQtIhZPy.js";
|
|
9
|
+
import { t as A } from "./bootTiming-BdyP9nYw.js";
|
|
10
|
+
import { n as Ne } from "./cliArgs-qdZSElM3.js";
|
|
11
|
+
import { join as Pe } from "node:path";
|
|
12
|
+
import { pathToFileURL as Fe } from "node:url";
|
|
13
|
+
import { Cause as Ie, Effect as j, Layer as M, ManagedRuntime as Le } from "effect";
|
|
14
|
+
import { createLogger as N } from "@voltro/logger";
|
|
15
|
+
import { existsSync as Re } from "node:fs";
|
|
16
|
+
import { AggregateRegistry as P, Dispatcher as ze, apiKeyManagementRoutes as Be, applySoftDeleteScope as Ve, applyTenantScope as He, attachAnalyticsMirror as Ue, awaitServerListening as We, bindMutation as F, bindStream as Ge, bindSubscription as I, buildTracingLayer as Ke, cancelWakeup as qe, compileCron as L, dataStoreApiKeyStore as Je, dataStoreIdempotencyStore as Ye, formatServerOnlyLeaks as Xe, frameworkApiKeyStrategy as Ze, installPolicyGuardResolver as Qe, loadResourceTuples as $e, makeActionRunner as R, makeAdvisoryLockCoordinator as et, makeApiKeyService as tt, makeApiKeyUsageBuffer as nt, makeApiKeyUsageFlusher as rt, makeAsyncKv as it, makeCoordinatedScheduler as at, makeEffectStoreLayer as ot, makeLazyWorkflowFacade as st, makeMutationRunner as ct, makeOneShotQueryRunner as lt, makeQueryDescriptorProducer as ut, makeQueryReauthorizer as dt, makeQuerySubscriber as ft, makeSchemaRegistry as pt, makeWorkflowFacade as mt, makeWorkflowFacadeWithCallerContext as ht, makeWorkflowLayers as gt, noopKv as z, onProcessShutdown as _t, recordSubscriptionDelivery as vt, registerWakeup as yt, resolveSecretsBackend as bt, runProvidedEffect as xt, setSecretsBackend as St, setSystemStoreHandle as Ct, setTupleSource as wt, singleCoordinator as Tt, startRpcServer as Et, startScheduler as Dt, workflowToRpc as B, wrapStoreWithBootCodec as Ot } from "@voltro/runtime";
|
|
17
17
|
import { RpcGroup as kt } from "@effect/rpc";
|
|
18
18
|
import { SqlClient as At } from "@effect/sql";
|
|
19
19
|
import { and as jt, ensureTableRegistered as Mt, eq as V, or as Nt } from "@voltro/database";
|
|
20
20
|
import { appStorageProvider as H, fromNodeReadable as Pt, getObjectStream as Ft, putObjectStream as It, toNodeReadable as U } from "@voltro/plugin-storage";
|
|
21
|
-
import { AuthMiddleware as
|
|
21
|
+
import { AuthMiddleware as Lt, ConnectionInfoMiddleware as W, actionToRpc as G, anonymousSubject as Rt, isWireReachable as zt, mutationToRpc as Bt, queryToRpc as K, streamToRpc as Vt, workflowCancelDescriptor as Ht, workflowDomainEventsQueryDescriptor as q, workflowEventDeliveriesQueryDescriptor as Ut, workflowResumeDescriptor as J, workflowRunEventsQueryDescriptor as Y, workflowRunQueryDescriptor as X, workflowRunStepsQueryDescriptor as Wt, workflowRunsQueryDescriptor as Z, workflowSignalDescriptor as Gt, workflowUpdateDescriptor as Kt } from "@voltro/protocol";
|
|
22
22
|
import { assertProductionSessionSecret as qt } from "@voltro/protocol/session";
|
|
23
23
|
import { createHash as Jt, timingSafeEqual as Yt } from "node:crypto";
|
|
24
24
|
import { declaredSnapshot as Xt, describeOutcome as Zt, runPlannedMigrations as Qt } from "@voltro/database/sql";
|
|
@@ -42,7 +42,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
42
42
|
if (!t || t.length < 16) return Q(503, { error: "data transfer misconfigured (no/weak secret)" });
|
|
43
43
|
let n = yn(e.headers);
|
|
44
44
|
return !n || !bn(n, t) ? Q(401, { error: "unauthorized" }) : null;
|
|
45
|
-
}, Sn =
|
|
45
|
+
}, Sn = N({ scope: "voltro:admin-import" }), Cn = "VBUNDLE2", wn = async function* (e) {
|
|
46
46
|
yield e;
|
|
47
47
|
}, Tn = (e) => async (t) => {
|
|
48
48
|
let n = xn(t, e.secret);
|
|
@@ -66,7 +66,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
66
66
|
dir: f,
|
|
67
67
|
blobs: e.assetSink
|
|
68
68
|
}) : await mn(c, f);
|
|
69
|
-
let t = await
|
|
69
|
+
let t = await j.runPromiseExit(un({
|
|
70
70
|
store: e.store,
|
|
71
71
|
bundleDir: f,
|
|
72
72
|
...r ? { mode: r } : {},
|
|
@@ -121,7 +121,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
121
121
|
force: !0
|
|
122
122
|
});
|
|
123
123
|
}
|
|
124
|
-
}, En =
|
|
124
|
+
}, En = N({ scope: "voltro:admin-export" }), Dn = async (e) => {
|
|
125
125
|
let t = [];
|
|
126
126
|
for await (let n of e) t.push(Buffer.from(n));
|
|
127
127
|
return new Uint8Array(Buffer.concat(t));
|
|
@@ -154,7 +154,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
154
154
|
}
|
|
155
155
|
let a = r.consistency === "snapshot" ? "snapshot" : i.consistency ?? "live", o = (typeof r.compression == "string" ? r.compression : void 0) ?? i.compression, s = i.scope ?? On(r), c = typeof r.bundleKey == "string" && r.bundleKey.length > 0, l = r.assets === !0 && e.assetSource ? { blobs: e.assetSource } : {}, u = await import("node:os"), d = await import("node:fs/promises"), ee = await import("node:path"), f = await d.mkdtemp(ee.join(u.tmpdir(), "voltro-admin-export-"));
|
|
156
156
|
try {
|
|
157
|
-
let t = await
|
|
157
|
+
let t = await j.runPromise(ln({
|
|
158
158
|
store: e.store,
|
|
159
159
|
snapshot: e.snapshot,
|
|
160
160
|
dialect: e.dialect,
|
|
@@ -230,7 +230,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
230
230
|
if (!o) throw Error(`data profile '${i}' has no default export`);
|
|
231
231
|
return o;
|
|
232
232
|
}, jn = (e, t, n = {}) => (async function* () {
|
|
233
|
-
let r = await U((await
|
|
233
|
+
let r = await U((await j.runPromise(Ft(e, t).pipe(j.timeout(n.openTimeout ?? "30 seconds")))).stream), i = n.stallMs ?? 12e4, a, o = () => {
|
|
234
234
|
a && clearTimeout(a), a = setTimeout(() => r.destroy(/* @__PURE__ */ Error(`storage read stalled for ${i}ms reading '${t}'`)), i);
|
|
235
235
|
};
|
|
236
236
|
try {
|
|
@@ -249,20 +249,20 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
249
249
|
invalidateTag: async () => 0,
|
|
250
250
|
wrap: async (e, t, n) => n()
|
|
251
251
|
}, Nn = async (e) => {
|
|
252
|
-
|
|
252
|
+
Ct({
|
|
253
253
|
dataStore: e.store,
|
|
254
254
|
schemaRegistry: e.schemaRegistry
|
|
255
255
|
});
|
|
256
|
-
let t = new
|
|
256
|
+
let t = new ze({
|
|
257
257
|
store: e.store,
|
|
258
258
|
...e.snapshotCache ? { cache: e.snapshotCache } : {},
|
|
259
|
-
recordDelivery: (e) =>
|
|
259
|
+
recordDelivery: (e) => vt({
|
|
260
260
|
label: e.label,
|
|
261
261
|
kind: e.kind,
|
|
262
262
|
durationMs: e.durationMs,
|
|
263
263
|
rowCount: e.rowCount
|
|
264
264
|
})
|
|
265
|
-
}), n = e.cache ?? Mn, r = e.kv ??
|
|
265
|
+
}), n = e.cache ?? Mn, r = e.kv ?? z, i, a, o, s = /* @__PURE__ */ new Map(), c = () => `wfctx_${globalThis.crypto?.randomUUID?.() ?? `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`, l = async (t, n, r) => {
|
|
266
266
|
let i = {
|
|
267
267
|
...r,
|
|
268
268
|
source: r.source ?? `workflow:${t}`
|
|
@@ -318,7 +318,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
318
318
|
process.stderr.write(`[workflow] failed to load start context for ${n}: ${e?.message ?? String(e)}\n`);
|
|
319
319
|
return;
|
|
320
320
|
}
|
|
321
|
-
}, d = (e.discovered.workflows?.length ?? 0) > 0 ?
|
|
321
|
+
}, d = (e.discovered.workflows?.length ?? 0) > 0 ? st(() => i) : void 0, f = (e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.eventTriggers?.length ?? 0) > 0, te = f || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster", re = e.tenantIsolation === "namespace", ie = (e.log ?? N({ scope: "voltro:serve" })).child("webhooks"), ae, h = e.discovered.webhooks;
|
|
322
322
|
if (h && h.outgoing.length > 0 && e.workflowEngineLayer !== void 0) {
|
|
323
323
|
let t = e.workflowEngineLayer, i = S({
|
|
324
324
|
store: e.store,
|
|
@@ -327,8 +327,8 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
327
327
|
kv: r
|
|
328
328
|
}), a = h.outgoing.map((e) => e.descriptor);
|
|
329
329
|
ae = rn(i, async (e) => {
|
|
330
|
-
let n = on.execute(e).pipe(
|
|
331
|
-
|
|
330
|
+
let n = on.execute(e).pipe(j.provide(on.toLayer(nn(i, { events: a })).pipe(M.provideMerge(t))));
|
|
331
|
+
j.runPromise(n).catch((t) => {
|
|
332
332
|
ie.error("deliverWebhook workflow crashed", {
|
|
333
333
|
deliveryId: e.deliveryId,
|
|
334
334
|
targetId: e.targetId
|
|
@@ -340,7 +340,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
340
340
|
if (h) for (let e of h.incoming) {
|
|
341
341
|
let t = e.descriptor.path ?? an(e.descriptor.id), n = `VOLTRO_WEBHOOK_SECRET_${e.descriptor.id.toUpperCase().replace(/[^A-Z0-9]/g, "_")}`, r = sn(e.descriptor, {
|
|
342
342
|
resolveSecret: async () => process.env[n] ?? null,
|
|
343
|
-
resolveWorkflows: () => d === void 0 ? void 0 :
|
|
343
|
+
resolveWorkflows: () => d === void 0 ? void 0 : ht(d, {
|
|
344
344
|
traceId: `incoming:${e.descriptor.id}`,
|
|
345
345
|
source: `incoming:${e.descriptor.id}`
|
|
346
346
|
}),
|
|
@@ -357,17 +357,17 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
357
357
|
});
|
|
358
358
|
oe.set(t, { handle: r });
|
|
359
359
|
}
|
|
360
|
-
|
|
360
|
+
Qe(), wt((t) => $e(e.store, t.subjectId, t.resourceType, t.resourceId));
|
|
361
361
|
let se = (e.discovered.outboxHandlers?.length ?? 0) > 0 ? p({
|
|
362
362
|
handlers: e.discovered.outboxHandlers ?? [],
|
|
363
363
|
store: e.store,
|
|
364
|
-
log: (e.log ??
|
|
364
|
+
log: (e.log ?? N({ scope: "voltro:serve" })).child("outbox")
|
|
365
365
|
}) : void 0, v = ce({
|
|
366
366
|
definitions: (e.discovered.connections ?? []).map((e) => e.definition),
|
|
367
367
|
store: e.store,
|
|
368
368
|
publicUrl: g(e.port ?? 4e3),
|
|
369
|
-
log: (e.log ??
|
|
370
|
-
}), y =
|
|
369
|
+
log: (e.log ?? N({ scope: "voltro:serve" })).child("connections")
|
|
370
|
+
}), y = we({
|
|
371
371
|
store: e.store,
|
|
372
372
|
schemaRegistry: e.schemaRegistry,
|
|
373
373
|
cache: n,
|
|
@@ -378,70 +378,70 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
378
378
|
namespaceIsolationOn: re,
|
|
379
379
|
...se === void 0 ? {} : { outbox: { nudge: se.nudge } },
|
|
380
380
|
...v.active ? { connections: { registry: v.registry } } : {}
|
|
381
|
-
}), ue =
|
|
382
|
-
let r = t.pipe(
|
|
383
|
-
return
|
|
384
|
-
}, pe =
|
|
381
|
+
}), ue = M.succeed(P, m), fe = (t, n) => {
|
|
382
|
+
let r = t.pipe(j.provide(ot(n)));
|
|
383
|
+
return (e.baseLayer ? r.pipe(j.provide(e.baseLayer)) : r).pipe(j.provide(ue));
|
|
384
|
+
}, pe = (e, t) => xt(fe(e, t)), me = ct({
|
|
385
385
|
store: e.store,
|
|
386
386
|
buildContext: (e, t, n) => y(e, t, n),
|
|
387
|
-
runEffect:
|
|
387
|
+
runEffect: pe,
|
|
388
388
|
undoCapture: le()
|
|
389
|
-
}),
|
|
389
|
+
}), he = D(), ge = R({
|
|
390
390
|
buildContext: (e) => y(e),
|
|
391
|
-
runEffect:
|
|
392
|
-
}),
|
|
391
|
+
runEffect: pe
|
|
392
|
+
}), _e = {
|
|
393
393
|
buildContext: (e) => y(e),
|
|
394
|
-
finalize: (t, n) => He(
|
|
395
|
-
provideEffect:
|
|
396
|
-
}, x =
|
|
397
|
-
...
|
|
394
|
+
finalize: (t, n) => Ve(He(t, e.tenantScopedTables, n.subject.tenantId), e.softDeleteScopedTables),
|
|
395
|
+
provideEffect: fe
|
|
396
|
+
}, x = ut(_e), ye = lt({
|
|
397
|
+
..._e,
|
|
398
398
|
queryRows: (t) => e.store.query(t)
|
|
399
|
-
}),
|
|
400
|
-
...
|
|
399
|
+
}), be = ft({
|
|
400
|
+
..._e,
|
|
401
401
|
subscribeDescriptor: (e, n, r) => t.subscribe(e, n, r),
|
|
402
402
|
subscribeComputed: (e, n, r) => t.subscribeComputed(e, n, r)
|
|
403
|
-
}), C = {};
|
|
403
|
+
}), C = (e) => e.filter((e) => zt(e.descriptor)), T = {};
|
|
404
404
|
for (let n of [
|
|
405
|
-
...e.discovered.queries,
|
|
406
|
-
...
|
|
405
|
+
...C(e.discovered.queries),
|
|
406
|
+
...he.queries,
|
|
407
407
|
...v.queries
|
|
408
|
-
])
|
|
408
|
+
]) T[n.descriptor.name] = (e) => I(x(n, e), t, `subscription.${n.descriptor.name}`, void 0, void 0, dt(n, e));
|
|
409
409
|
for (let t of [
|
|
410
|
-
...e.discovered.mutations,
|
|
411
|
-
...
|
|
410
|
+
...C(e.discovered.mutations),
|
|
411
|
+
...he.mutations,
|
|
412
412
|
...v.mutations
|
|
413
|
-
])
|
|
414
|
-
for (let t of [...e.discovered.actions, ...v.actions])
|
|
415
|
-
let
|
|
413
|
+
]) T[t.descriptor.name] = (e) => F(async (e, n) => me(t, e, n), e, `mutation.${t.descriptor.name}`);
|
|
414
|
+
for (let t of [...C(e.discovered.actions), ...v.actions]) T[t.descriptor.name] = (e) => F(async (e, n) => ge(t, e, n), e, `action.${t.descriptor.name}`);
|
|
415
|
+
let xe = () => `public-${Math.random().toString(36).slice(2, 10)}`, Se = [
|
|
416
416
|
...e.discovered.queries.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
|
|
417
417
|
descriptor: e.descriptor,
|
|
418
|
-
invoke: (t, n) =>
|
|
418
|
+
invoke: (t, n) => ye(e, t, {
|
|
419
419
|
subject: n.subject,
|
|
420
|
-
traceId:
|
|
420
|
+
traceId: xe()
|
|
421
421
|
}),
|
|
422
|
-
subscribe: (t, n, r) =>
|
|
422
|
+
subscribe: (t, n, r) => be(e, t, {
|
|
423
423
|
subject: n.subject,
|
|
424
|
-
traceId:
|
|
424
|
+
traceId: xe()
|
|
425
425
|
}, r)
|
|
426
426
|
})),
|
|
427
427
|
...e.discovered.mutations.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
|
|
428
428
|
descriptor: e.descriptor,
|
|
429
|
-
invoke: (t, n) =>
|
|
429
|
+
invoke: (t, n) => me(e, t, {
|
|
430
430
|
subject: n.subject,
|
|
431
|
-
traceId:
|
|
431
|
+
traceId: xe()
|
|
432
432
|
})
|
|
433
433
|
})),
|
|
434
434
|
...e.discovered.actions.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
|
|
435
435
|
descriptor: e.descriptor,
|
|
436
|
-
invoke: (t, n) =>
|
|
436
|
+
invoke: (t, n) => ge(e, t, {
|
|
437
437
|
subject: n.subject,
|
|
438
|
-
traceId:
|
|
438
|
+
traceId: xe()
|
|
439
439
|
})
|
|
440
440
|
}))
|
|
441
|
-
],
|
|
441
|
+
], Ce = Se.length > 0 ? tn(en(Se), {
|
|
442
442
|
store: e.store,
|
|
443
443
|
resolveSubject: (t) => e.resolveSubject(t, -1)
|
|
444
|
-
}) : [], E = e.dataTransferSecret ?? process.env.VOLTRO_DATA_TRANSFER_SECRET,
|
|
444
|
+
}) : [], E = e.dataTransferSecret ?? process.env.VOLTRO_DATA_TRANSFER_SECRET, Te = E && E.length >= 16 ? [{
|
|
445
445
|
method: "POST",
|
|
446
446
|
path: _n,
|
|
447
447
|
handle: Tn({
|
|
@@ -464,32 +464,32 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
464
464
|
assetSource: fn(H(), e.store),
|
|
465
465
|
putArchive: async (e, t) => {
|
|
466
466
|
let { Readable: n } = await import("node:stream"), r = H(), i = Pt("storage", () => n.from(t()));
|
|
467
|
-
await
|
|
467
|
+
await j.runPromise(It(r, e, i, { contentType: "application/octet-stream" }));
|
|
468
468
|
}
|
|
469
469
|
})
|
|
470
|
-
}] : [],
|
|
470
|
+
}] : [], Ee = [
|
|
471
471
|
...e.httpRoutes ?? [],
|
|
472
|
-
...
|
|
473
|
-
...
|
|
472
|
+
...Ce,
|
|
473
|
+
...Te,
|
|
474
474
|
...v.httpRoutes
|
|
475
475
|
];
|
|
476
|
-
for (let t of e.discovered.streams ?? [])
|
|
476
|
+
for (let t of C(e.discovered.streams ?? [])) T[t.descriptor.name] = (n) => Ge((r) => {
|
|
477
477
|
let i = y(r), a = t.executor(n, i);
|
|
478
|
-
if (
|
|
479
|
-
let t = a.pipe(
|
|
480
|
-
return (e.baseLayer ? t.pipe(
|
|
478
|
+
if (j.isEffect(a)) {
|
|
479
|
+
let t = a.pipe(j.provide(ot(i.store)));
|
|
480
|
+
return (e.baseLayer ? t.pipe(j.provide(e.baseLayer)) : t).pipe(j.provide(ue));
|
|
481
481
|
}
|
|
482
|
-
return typeof a == "object" && a && typeof a.then == "function" ?
|
|
482
|
+
return typeof a == "object" && a && typeof a.then == "function" ? j.promise(() => a) : a;
|
|
483
483
|
}, `stream.${t.descriptor.name}`);
|
|
484
|
-
for (let t of e.discovered.workflows ?? [])
|
|
484
|
+
for (let t of e.discovered.workflows ?? []) T[t.definition.name] = (e) => F(async (e, n) => {
|
|
485
485
|
let r = n;
|
|
486
|
-
return
|
|
486
|
+
return ht(d, {
|
|
487
487
|
subject: r.subject,
|
|
488
488
|
traceId: r.traceId,
|
|
489
489
|
source: "workflow-rpc"
|
|
490
490
|
}).start(t.definition.name, e);
|
|
491
491
|
}, e, `workflow.${t.definition.name}`);
|
|
492
|
-
f && (
|
|
492
|
+
f && (T[X.name] = (e) => I(x({
|
|
493
493
|
descriptor: X,
|
|
494
494
|
executor: (e) => {
|
|
495
495
|
let t = e.id;
|
|
@@ -505,7 +505,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
505
505
|
projection: void 0
|
|
506
506
|
};
|
|
507
507
|
}
|
|
508
|
-
}, e), t, `subscription.${X.name}`),
|
|
508
|
+
}, e), t, `subscription.${X.name}`), T[Z.name] = (e) => I(x({
|
|
509
509
|
descriptor: Z,
|
|
510
510
|
executor: (e) => {
|
|
511
511
|
let t = e, n = [...t.tag === void 0 ? [] : [V("tag", t.tag)], ...t.status === void 0 ? [] : [V("status", t.status)]], r = Number.isFinite(t.limit) && t.limit !== void 0 ? Math.min(Math.max(Math.floor(t.limit), 1), 500) : 100;
|
|
@@ -521,7 +521,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
521
521
|
projection: void 0
|
|
522
522
|
};
|
|
523
523
|
}
|
|
524
|
-
}, e), t, `subscription.${Z.name}`),
|
|
524
|
+
}, e), t, `subscription.${Z.name}`), T[Wt.name] = (e) => I(x({
|
|
525
525
|
descriptor: Wt,
|
|
526
526
|
executor: (e) => {
|
|
527
527
|
let t = e.runId;
|
|
@@ -537,7 +537,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
537
537
|
projection: void 0
|
|
538
538
|
};
|
|
539
539
|
}
|
|
540
|
-
}, e), t, `subscription.${Wt.name}`),
|
|
540
|
+
}, e), t, `subscription.${Wt.name}`), T[Y.name] = (e) => I(x({
|
|
541
541
|
descriptor: Y,
|
|
542
542
|
executor: (e) => {
|
|
543
543
|
let t = e.runId;
|
|
@@ -553,8 +553,8 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
553
553
|
projection: void 0
|
|
554
554
|
};
|
|
555
555
|
}
|
|
556
|
-
}, e), t, `subscription.${Y.name}`),
|
|
557
|
-
descriptor:
|
|
556
|
+
}, e), t, `subscription.${Y.name}`), T[q.name] = (e) => I(x({
|
|
557
|
+
descriptor: q,
|
|
558
558
|
executor: (e) => {
|
|
559
559
|
let t = e;
|
|
560
560
|
return {
|
|
@@ -569,8 +569,8 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
569
569
|
projection: void 0
|
|
570
570
|
};
|
|
571
571
|
}
|
|
572
|
-
}, e), t, `subscription.${
|
|
573
|
-
descriptor:
|
|
572
|
+
}, e), t, `subscription.${q.name}`), T[Ut.name] = (e) => I(x({
|
|
573
|
+
descriptor: Ut,
|
|
574
574
|
executor: (e) => {
|
|
575
575
|
let t = e.eventId;
|
|
576
576
|
return {
|
|
@@ -585,63 +585,63 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
585
585
|
projection: void 0
|
|
586
586
|
};
|
|
587
587
|
}
|
|
588
|
-
}, e), t, `subscription.${
|
|
588
|
+
}, e), t, `subscription.${Ut.name}`), T[Ht.name] = (t) => F(async (t, n) => {
|
|
589
589
|
let r = t;
|
|
590
590
|
return await w(e.store, n.subject, { executionId: r.executionId }), await d.cancel(r.workflowName, r.executionId), await Pe(r.workflowName, r.executionId, "workflow.cancel"), { ok: !0 };
|
|
591
|
-
}, t, `action.${
|
|
591
|
+
}, t, `action.${Ht.name}`), T[J.name] = (t) => F(async (t, n) => {
|
|
592
592
|
let r = t;
|
|
593
593
|
return await w(e.store, n.subject, { executionId: r.executionId }), await d.resume(r.workflowName, r.executionId), { ok: !0 };
|
|
594
|
-
}, t, `action.${
|
|
594
|
+
}, t, `action.${J.name}`), T[Gt.name] = (t) => F(async (t, n) => {
|
|
595
595
|
let r = t;
|
|
596
596
|
return await w(e.store, n.subject, { id: r.id }), d.signal({ id: r.id }, r.signalName, r.payload);
|
|
597
|
-
}, t, `action.${Gt.name}`),
|
|
597
|
+
}, t, `action.${Gt.name}`), T[Kt.name] = (t) => F(async (t, n) => {
|
|
598
598
|
let r = t;
|
|
599
599
|
return await w(e.store, n.subject, { id: r.id }), d.update({ id: r.id }, r.updateName, r.payload, r.timeoutMs === void 0 ? void 0 : { timeoutMs: r.timeoutMs });
|
|
600
600
|
}, t, `action.${Kt.name}`));
|
|
601
|
-
let
|
|
602
|
-
...
|
|
603
|
-
...
|
|
604
|
-
...
|
|
605
|
-
...
|
|
606
|
-
...
|
|
607
|
-
...v.queries.map((e) =>
|
|
608
|
-
...v.mutations.map((e) =>
|
|
609
|
-
...v.actions.map((e) =>
|
|
610
|
-
...(e.discovered.streams ?? []).map((e) =>
|
|
601
|
+
let De = [
|
|
602
|
+
...C(e.discovered.queries).map((e) => K(e.descriptor)),
|
|
603
|
+
...C(e.discovered.mutations).map((e) => Bt(e.descriptor)),
|
|
604
|
+
...C(e.discovered.actions).map((e) => G(e.descriptor)),
|
|
605
|
+
...he.queries.map((e) => K(e.descriptor)),
|
|
606
|
+
...he.mutations.map((e) => Bt(e.descriptor)),
|
|
607
|
+
...v.queries.map((e) => K(e.descriptor)),
|
|
608
|
+
...v.mutations.map((e) => Bt(e.descriptor)),
|
|
609
|
+
...v.actions.map((e) => G(e.descriptor)),
|
|
610
|
+
...C(e.discovered.streams ?? []).map((e) => Vt(e.descriptor)),
|
|
611
611
|
...(e.discovered.workflows ?? []).map((e) => B(e.definition)),
|
|
612
612
|
...f ? [
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
q
|
|
618
|
-
q(Ht),
|
|
619
|
-
K(Vt),
|
|
613
|
+
K(X),
|
|
614
|
+
K(Z),
|
|
615
|
+
K(Wt),
|
|
616
|
+
K(Y),
|
|
617
|
+
K(q),
|
|
620
618
|
K(Ut),
|
|
621
|
-
|
|
622
|
-
|
|
619
|
+
G(Ht),
|
|
620
|
+
G(J),
|
|
621
|
+
G(Gt),
|
|
622
|
+
G(Kt)
|
|
623
623
|
] : []
|
|
624
|
-
],
|
|
625
|
-
register: (t, n, r) =>
|
|
626
|
-
tenantId: r ??
|
|
624
|
+
], Oe = kt.make(...De).middleware(Lt).middleware(W), Ae = M.succeed(Lt, Lt.of(({ headers: t, clientId: n }) => j.promise(() => e.resolveSubject(t, n)))), je = M.succeed(W, W.of(({ clientId: e }) => j.succeed({ clientId: e }))), Me = e.dormancyTenantId ?? "default", O = e.dormancy === "sleep" ? {
|
|
625
|
+
register: (t, n, r) => yt(e.store, {
|
|
626
|
+
tenantId: r ?? Me,
|
|
627
627
|
kind: "workflow",
|
|
628
628
|
refId: t,
|
|
629
629
|
wakeAt: n
|
|
630
630
|
}),
|
|
631
631
|
cancel: (t, n) => qe(e.store, {
|
|
632
|
-
tenantId: n ??
|
|
632
|
+
tenantId: n ?? Me,
|
|
633
633
|
kind: "workflow",
|
|
634
634
|
refId: t
|
|
635
635
|
}).then(() => {})
|
|
636
|
-
} : void 0,
|
|
636
|
+
} : void 0, k = te ? await import("@voltro/workflow") : void 0, A = k?.makeWorkflowRunRecorder({
|
|
637
637
|
store: e.store,
|
|
638
|
-
...
|
|
638
|
+
...O === void 0 ? {} : { wakeups: O }
|
|
639
639
|
}), Ne = async (t, n) => {
|
|
640
|
-
await
|
|
640
|
+
await k.closeWorkflowChildrenForParent({
|
|
641
641
|
store: e.store,
|
|
642
642
|
parentExecutionId: t,
|
|
643
643
|
parentStatus: n,
|
|
644
|
-
recorder:
|
|
644
|
+
recorder: A,
|
|
645
645
|
log: { warn: (e, t) => {
|
|
646
646
|
process.stderr.write(`[workflow] ${e} ${t ? JSON.stringify(t) : ""}\n`);
|
|
647
647
|
} },
|
|
@@ -667,7 +667,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
667
667
|
cancelled: !0,
|
|
668
668
|
completedAt: /* @__PURE__ */ new Date()
|
|
669
669
|
}), o = i.subject?.tenantId ?? void 0;
|
|
670
|
-
a && await
|
|
670
|
+
a && await A.recordEvent({
|
|
671
671
|
runId: i.id,
|
|
672
672
|
eventType: "run-cancelled",
|
|
673
673
|
payload: {
|
|
@@ -677,15 +677,15 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
677
677
|
...o == null ? {} : { tenantId: o }
|
|
678
678
|
}
|
|
679
679
|
}), a && await Ne(n, "cancelled");
|
|
680
|
-
}, Fe = [...
|
|
680
|
+
}, Fe = [...gt(e.discovered.workflows ?? [], {
|
|
681
681
|
buildContext: (t, n) => e.buildContextForWorkflow?.(t, n) ?? y({
|
|
682
682
|
subject: t.subject,
|
|
683
683
|
traceId: t.traceId
|
|
684
684
|
}, e.store, void 0, `workflow:${n.workflowName}`, { parentExecutionId: n.executionId }),
|
|
685
685
|
resolveStartContext: u
|
|
686
686
|
}, (t, n, r) => {
|
|
687
|
-
let i =
|
|
688
|
-
return
|
|
687
|
+
let i = k.getWorkflowVersionMetadata(t.definition);
|
|
688
|
+
return k.wrapWorkflowExecuteWithRunRecording({
|
|
689
689
|
name: t.definition.name,
|
|
690
690
|
store: e.store,
|
|
691
691
|
subject: r.subject,
|
|
@@ -697,33 +697,33 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
697
697
|
parentExecutionId: r?.parentExecutionId ?? null,
|
|
698
698
|
parentClosePolicy: r?.parentClosePolicy ?? null,
|
|
699
699
|
onParentClose: ({ executionId: e, status: t }) => Ne(e, t),
|
|
700
|
-
recorder:
|
|
700
|
+
recorder: A
|
|
701
701
|
}, n);
|
|
702
|
-
}), ...e.discovered.workflowWorkers ?? []], Ie = Fe.length > 0 ?
|
|
702
|
+
}), ...e.discovered.workflowWorkers ?? []], Ie = Fe.length > 0 ? M.mergeAll(...Fe) : M.empty;
|
|
703
703
|
if (((e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster") && e.workflowEngineLayer !== void 0) {
|
|
704
|
-
let t = Ie.pipe(
|
|
705
|
-
a =
|
|
704
|
+
let t = Ie.pipe(M.provideMerge(e.workflowEngineLayer));
|
|
705
|
+
a = Le.make(e.baseLayer === void 0 ? t : t.pipe(M.provideMerge(e.baseLayer))), await a.runPromise(j.void), i = (e.discovered.workflows?.length ?? 0) > 0 ? mt({
|
|
706
706
|
workflows: e.discovered.workflows ?? [],
|
|
707
707
|
runEffect: (e) => a.runPromise(e),
|
|
708
708
|
rememberStartContext: l,
|
|
709
709
|
signal: async (t, n, r) => {
|
|
710
|
-
let i = await
|
|
710
|
+
let i = await k.sendWorkflowSignal({
|
|
711
711
|
store: e.store,
|
|
712
|
-
recorder:
|
|
712
|
+
recorder: A,
|
|
713
713
|
target: t,
|
|
714
714
|
signalName: n,
|
|
715
715
|
payload: r
|
|
716
716
|
});
|
|
717
|
-
return await a.runPromise(
|
|
717
|
+
return await a.runPromise(k.completeSuspendingSignal({
|
|
718
718
|
store: e.store,
|
|
719
719
|
target: t,
|
|
720
720
|
signalName: n,
|
|
721
721
|
payload: r
|
|
722
722
|
})).catch(() => {}), i;
|
|
723
723
|
},
|
|
724
|
-
update: (t, n, r, i) =>
|
|
724
|
+
update: (t, n, r, i) => k.sendWorkflowUpdate({
|
|
725
725
|
store: e.store,
|
|
726
|
-
recorder:
|
|
726
|
+
recorder: A,
|
|
727
727
|
target: t,
|
|
728
728
|
updateName: n,
|
|
729
729
|
payload: r,
|
|
@@ -737,29 +737,30 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
737
737
|
}, t, n)
|
|
738
738
|
}) : void 0;
|
|
739
739
|
}
|
|
740
|
-
let
|
|
741
|
-
...
|
|
742
|
-
...
|
|
743
|
-
...
|
|
744
|
-
...
|
|
745
|
-
}), Ye = !1, Xe = e.store.ping ? () => e.store.ping().then(() => !0).catch(() => !1) : void 0, { server: Ze, shutdown:
|
|
746
|
-
group:
|
|
747
|
-
handlersLayer:
|
|
748
|
-
httpHandlersLayer:
|
|
740
|
+
let Re = M.mergeAll(Oe.toLayer(T), Ae, je), Be = ee(T, e.discovered.queries.map((e) => e.descriptor.name), f), Ue = M.mergeAll(Oe.toLayer(Be), Ae, je), L = e.observability, Je = await Ke({
|
|
741
|
+
...L && L.spanProcessors.length > 0 ? { extraSpanProcessors: L.spanProcessors } : {},
|
|
742
|
+
...L && L.metricReaders.length > 0 ? { extraMetricReaders: L.metricReaders } : {},
|
|
743
|
+
...L && Object.keys(L.resourceAttributes).length > 0 ? { resourceAttributes: L.resourceAttributes } : {},
|
|
744
|
+
...L && L.sampler !== void 0 ? { sampler: L.sampler } : {}
|
|
745
|
+
}), Ye = !1, Xe = e.store.ping ? () => e.store.ping().then(() => !0).catch(() => !1) : void 0, { server: Ze, shutdown: tt } = Et({
|
|
746
|
+
group: Oe,
|
|
747
|
+
handlersLayer: Re,
|
|
748
|
+
httpHandlersLayer: Ue,
|
|
749
749
|
port: e.port ?? 4e3,
|
|
750
|
+
...e.host === void 0 ? {} : { host: e.host },
|
|
750
751
|
path: e.path ?? "/ws",
|
|
751
752
|
tracerLayer: Je.layer,
|
|
752
753
|
healthCheck: {
|
|
753
754
|
isReady: () => Ye,
|
|
754
755
|
...Xe ? { ping: Xe } : {}
|
|
755
756
|
},
|
|
756
|
-
...
|
|
757
|
+
...Ee.length > 0 ? { httpRoutes: Ee } : {},
|
|
757
758
|
...e.getStore === void 0 ? {} : { getStore: e.getStore },
|
|
758
759
|
...oe.size > 0 ? { webhookRoutes: oe } : {},
|
|
759
760
|
...e.inspectRoute === void 0 ? {} : { inspectRoute: e.inspectRoute }
|
|
760
761
|
});
|
|
761
762
|
if (await We(Ze), (e.discovered.schedules?.length ?? 0) > 0) {
|
|
762
|
-
let t = (e.scheduleCoordination ?? "single") === "advisoryLock" ?
|
|
763
|
+
let t = (e.scheduleCoordination ?? "single") === "advisoryLock" ? et(e.store, e.scheduleReplicaId ?? `pid-${process.pid}`) : Tt;
|
|
763
764
|
o = await Dt(e.discovered.schedules ?? [], {
|
|
764
765
|
store: e.store,
|
|
765
766
|
coordinator: t,
|
|
@@ -788,7 +789,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
788
789
|
...e.onScheduleRunEvent === void 0 ? {} : { onRunEvent: e.onScheduleRunEvent }
|
|
789
790
|
}), e.onSchedulerReady?.(o);
|
|
790
791
|
}
|
|
791
|
-
let nt = e.log ??
|
|
792
|
+
let nt = e.log ?? N({ scope: "voltro:serve" }), rt, it;
|
|
792
793
|
if ((e.discovered.subscribers?.length ?? 0) > 0 && (rt = de(e.discovered.subscribers ?? [], e.store, nt.child("subscribe"), e.schemaRegistry)), (e.discovered.reactions?.length ?? 0) > 0) {
|
|
793
794
|
let t = nt.child("reaction");
|
|
794
795
|
it = ve(e.discovered.reactions ?? [], e.store, {
|
|
@@ -799,7 +800,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
799
800
|
return;
|
|
800
801
|
}
|
|
801
802
|
let e = r.new ?? r.old ?? {};
|
|
802
|
-
await
|
|
803
|
+
await ht(d, {
|
|
803
804
|
traceId: `reaction:${n.workflow}`,
|
|
804
805
|
source: `reaction:${n.workflow}`
|
|
805
806
|
}).start(n.workflow, e);
|
|
@@ -807,8 +808,8 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
807
808
|
}
|
|
808
809
|
await _(n.agent, r, {
|
|
809
810
|
findAgentSend: (t) => e.discovered.actions.find((e) => e.descriptor.name === `${t}.send`),
|
|
810
|
-
runAction: (e, t, n) => Promise.resolve(
|
|
811
|
-
makeSubject: (e) =>
|
|
811
|
+
runAction: (e, t, n) => Promise.resolve(ge(e, t, n)),
|
|
812
|
+
makeSubject: (e) => Rt(e),
|
|
812
813
|
now: () => Date.now(),
|
|
813
814
|
log: t
|
|
814
815
|
});
|
|
@@ -816,7 +817,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
816
817
|
checkBudget: async (n, r) => {
|
|
817
818
|
try {
|
|
818
819
|
let { requireAiBudget: t } = await import("@voltro/ai");
|
|
819
|
-
return (await
|
|
820
|
+
return (await j.runPromise(j.either(t(e.store, {
|
|
820
821
|
tenantId: n,
|
|
821
822
|
limitUsd: r
|
|
822
823
|
}))))._tag === "Right";
|
|
@@ -834,20 +835,20 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
834
835
|
...e.analytics === void 0 ? {} : { analytics: e.analytics },
|
|
835
836
|
...e.aggregateStorage === void 0 ? {} : { storage: e.aggregateStorage },
|
|
836
837
|
...e.aggregateCoordinator === void 0 ? {} : { coordinator: e.aggregateCoordinator }
|
|
837
|
-
}), ue =
|
|
838
|
+
}), ue = M.succeed(P, at.registry)), Ye = !0, e.bootTiming?.mark("ready"), {
|
|
838
839
|
dispatcher: t,
|
|
839
840
|
server: Ze,
|
|
840
841
|
scheduler: o,
|
|
841
842
|
close: async () => {
|
|
842
|
-
Ye = !1, at?.detach(), it?.(), rt?.(), await o?.shutdown(), t.close(), await a?.dispose(), await new Promise((e) => Ze.close(() => e())), await
|
|
843
|
+
Ye = !1, at?.detach(), it?.(), rt?.(), await o?.shutdown(), t.close(), await a?.dispose(), await new Promise((e) => Ze.close(() => e())), await tt();
|
|
843
844
|
}
|
|
844
845
|
};
|
|
845
|
-
}, $ =
|
|
846
|
+
}, $ = N({ scope: "voltro:serve" }), Pn = (e, t, n) => (e === "production" || e === "staging") && t !== "memory" && n !== "0", Fn = Ne, In = async (e) => {
|
|
846
847
|
let t = O(process.cwd());
|
|
847
|
-
if (
|
|
848
|
+
if (Re(t)) {
|
|
848
849
|
let n;
|
|
849
850
|
try {
|
|
850
|
-
let e = await import(
|
|
851
|
+
let e = await import(Fe(t).href);
|
|
851
852
|
typeof e.runServe == "function" ? n = e.runServe : $.warn("serve bundle has no runServe export — using the standard serve path");
|
|
852
853
|
} catch (e) {
|
|
853
854
|
$.warn("serve bundle failed to load — using the standard serve path", {}, e);
|
|
@@ -856,7 +857,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
856
857
|
}
|
|
857
858
|
return Ln(e);
|
|
858
859
|
}, Ln = async (ee) => {
|
|
859
|
-
let p =
|
|
860
|
+
let p = A();
|
|
860
861
|
process.env.NODE_ENV || (process.env.NODE_ENV = "production");
|
|
861
862
|
try {
|
|
862
863
|
qt();
|
|
@@ -864,7 +865,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
864
865
|
throw gn(e instanceof Error ? e.message : String(e));
|
|
865
866
|
}
|
|
866
867
|
let m = process.cwd(), ne = Number(process.env.PORT ?? Fn(ee, "--port") ?? 4e3), g = await he(m);
|
|
867
|
-
|
|
868
|
+
St(bt(g?.secrets)), await e({
|
|
868
869
|
rawEnv: g?.env,
|
|
869
870
|
appType: "api",
|
|
870
871
|
root: m,
|
|
@@ -872,23 +873,23 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
872
873
|
generateTypes: !1
|
|
873
874
|
}), p.mark("config");
|
|
874
875
|
let _ = (process.env.DB_DIALECT ?? g?.store ?? "memory").toLowerCase(), ce = (_ === "mariadb" || _ === "postgres" || _ === "mssql") && (process.env.CDC ?? "1") !== "0", le = _ === "mariadb" ? "mariadb" : _ === "mssql" ? "mssql" : void 0, de = k(m);
|
|
875
|
-
if (!i() &&
|
|
876
|
-
let e = await import(
|
|
876
|
+
if (!i() && Re(de)) try {
|
|
877
|
+
let e = await import(Fe(de).href);
|
|
877
878
|
if (e.modules) {
|
|
878
879
|
let t = {};
|
|
879
|
-
for (let [n, r] of Object.entries(e.modules)) t[
|
|
880
|
+
for (let [n, r] of Object.entries(e.modules)) t[Pe(m, n)] = r;
|
|
880
881
|
r(t), $.info("precompiled api bundle loaded", { modules: Object.keys(t).length });
|
|
881
882
|
}
|
|
882
883
|
} catch (e) {
|
|
883
884
|
$.warn("precompiled api bundle failed to load — falling back to source", {}, e);
|
|
884
885
|
}
|
|
885
|
-
let b = await
|
|
886
|
+
let b = await C(m), S = await De(b, { cdc: ce && le !== void 0 });
|
|
886
887
|
{
|
|
887
|
-
let e = h(S.serverOnlyLeaks, re(process.env, "strict"),
|
|
888
|
+
let e = h(S.serverOnlyLeaks, re(process.env, "strict"), Xe, "`voltro serve`");
|
|
888
889
|
if (e.action === "fail") throw gn(e.message ?? "");
|
|
889
890
|
e.action === "warn" && $.warn(e.message ?? "");
|
|
890
891
|
}
|
|
891
|
-
let ve = b.filter((e) => Ae.test(e)), w = ve.length > 0 ? await ue(ve, $.child("webhooks")) : void 0,
|
|
892
|
+
let ve = b.filter((e) => Ae.test(e)), w = ve.length > 0 ? await ue(ve, $.child("webhooks")) : void 0, we = s({
|
|
892
893
|
mix: S.featureMix,
|
|
893
894
|
plugins: g?.plugins ?? [],
|
|
894
895
|
cdc: ce && le !== void 0,
|
|
@@ -899,23 +900,23 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
899
900
|
log: $
|
|
900
901
|
}), O = (() => {
|
|
901
902
|
let e = new Set(S.tables.map((e) => e.tableName)), t = [...S.tables];
|
|
902
|
-
for (let n of [...
|
|
903
|
+
for (let n of [...we, ...D.tables]) e.has(n.tableName) || (e.add(n.tableName), t.push(n));
|
|
903
904
|
return t;
|
|
904
905
|
})();
|
|
905
906
|
for (let e of O) Mt(e);
|
|
906
|
-
let
|
|
907
|
-
if (Pn(
|
|
908
|
-
let e = (await n(_)).makeSqlLayer(T()), t = await
|
|
909
|
-
appliedBy: `serve:${
|
|
907
|
+
let Ne = (process.env.NODE_ENV ?? "").toLowerCase();
|
|
908
|
+
if (Pn(Ne, _, process.env.VOLTRO_AUTO_MIGRATE)) {
|
|
909
|
+
let e = (await n(_)).makeSqlLayer(T()), t = await j.runPromise(At.SqlClient.pipe(j.flatMap((e) => Qt(e, O, {
|
|
910
|
+
appliedBy: `serve:${Ne}`,
|
|
910
911
|
environment: "prod",
|
|
911
912
|
dialectId: _
|
|
912
|
-
})),
|
|
913
|
+
})), j.provide(e)));
|
|
913
914
|
t.kind === "prod-mismatch" && ($.error(Zt(t, _)), $.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(Zt(t, _));
|
|
914
915
|
}
|
|
915
|
-
let
|
|
916
|
+
let N = pt(O);
|
|
916
917
|
p.mark("discover");
|
|
917
|
-
let
|
|
918
|
-
for (let e of
|
|
918
|
+
let P = await x(g, void 0), ze = Ot(P, _);
|
|
919
|
+
for (let e of E({
|
|
919
920
|
dialect: String(g?.store ?? process.env.DB_DIALECT ?? "postgres"),
|
|
920
921
|
changeStrategy: (process.env.CDC ?? "1") === "0" ? "inline" : "cdc",
|
|
921
922
|
dbUrl: process.env.DB_URL,
|
|
@@ -929,77 +930,77 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
929
930
|
})
|
|
930
931
|
})) e.level === "warn" ? $.warn(e.message) : $.info(e.message);
|
|
931
932
|
g?.cache && !process.env.CACHE_BACKEND && (process.env.CACHE_BACKEND = g.cache), g?.cacheRedisUrl && !process.env.CACHE_REDIS_URL && (process.env.CACHE_REDIS_URL = g.cacheRedisUrl), g?.cacheRedisDriver && !process.env.CACHE_REDIS_DRIVER && (process.env.CACHE_REDIS_DRIVER = g.cacheRedisDriver), g?.cacheKeyPrefix && !process.env.CACHE_KEY_PREFIX && (process.env.CACHE_KEY_PREFIX = g.cacheKeyPrefix);
|
|
932
|
-
let { service:
|
|
933
|
-
$.info(`cache backend resolved: ${Ge}` + (Ge === "redis" ? ` (driver ${process.env.CACHE_REDIS_DRIVER ?? "resp"})` : " — in-process, not cross-instance")),
|
|
934
|
-
|
|
933
|
+
let { service: Ve, invalidationBus: He, snapshotCache: We, cache: F, backend: Ge, dispose: I } = await xe({ env: process.env });
|
|
934
|
+
$.info(`cache backend resolved: ${Ge}` + (Ge === "redis" ? ` (driver ${process.env.CACHE_REDIS_DRIVER ?? "resp"})` : " — in-process, not cross-instance")), P.onChange((e) => {
|
|
935
|
+
j.runFork(He.publish(e.table));
|
|
935
936
|
}), g?.kv && !process.env.KV_BACKEND && (process.env.KV_BACKEND = g.kv), g?.kvRedisUrl && !process.env.KV_REDIS_URL && (process.env.KV_REDIS_URL = g.kvRedisUrl), g?.kvKeyPrefix && !process.env.KV_KEY_PREFIX && (process.env.KV_KEY_PREFIX = g.kvKeyPrefix);
|
|
936
|
-
let { kv: Ke, service: qe } = await
|
|
937
|
+
let { kv: Ke, service: qe } = await it({ store: P });
|
|
937
938
|
p.mark("store");
|
|
938
|
-
let
|
|
939
|
-
store:
|
|
939
|
+
let Qe = Ue({
|
|
940
|
+
store: P,
|
|
940
941
|
sink: D.sink,
|
|
941
942
|
log: $
|
|
942
|
-
}),
|
|
943
|
-
store:
|
|
943
|
+
}), $e = pe({
|
|
944
|
+
store: P,
|
|
944
945
|
dialect: _
|
|
945
|
-
}),
|
|
946
|
-
_ !== "memory" && (
|
|
947
|
-
let
|
|
946
|
+
}), R = g?.plugins ?? [], ot = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, st, ct;
|
|
947
|
+
_ !== "memory" && (st = Le.make((await n(_)).makeSqlLayer(T())), ct = await st.runPromise(At.SqlClient));
|
|
948
|
+
let lt = at({
|
|
948
949
|
coordinator: [
|
|
949
950
|
"postgres",
|
|
950
951
|
"mariadb",
|
|
951
952
|
"mysql",
|
|
952
953
|
"mssql"
|
|
953
|
-
].includes(_) ?
|
|
954
|
-
replicaId:
|
|
954
|
+
].includes(_) ? et(P, ot, $) : Tt,
|
|
955
|
+
replicaId: ot,
|
|
955
956
|
log: $
|
|
956
|
-
}),
|
|
957
|
-
...
|
|
957
|
+
}), ut = [], dt = {
|
|
958
|
+
...ct ? { sql: ct } : {},
|
|
958
959
|
scheduleCoordinated: (e, t, n) => {
|
|
959
|
-
let r =
|
|
960
|
-
return
|
|
960
|
+
let r = lt(e, t, n);
|
|
961
|
+
return ut.push(r), r;
|
|
961
962
|
}
|
|
962
963
|
};
|
|
963
|
-
for (let e of
|
|
964
|
-
let
|
|
965
|
-
if (
|
|
966
|
-
let e =
|
|
967
|
-
|
|
964
|
+
for (let e of R) e.bindDataStore?.(P, dt);
|
|
965
|
+
let ft = R.filter((e) => typeof e.onChangeEvent == "function");
|
|
966
|
+
if (ft.length > 0) {
|
|
967
|
+
let e = P.changeScope ?? "local";
|
|
968
|
+
P.onChange((t) => {
|
|
968
969
|
let n = y(t, e);
|
|
969
|
-
for (let e of
|
|
970
|
+
for (let e of ft) j.runFork(e.onChangeEvent(n).pipe(j.catchAllCause((t) => j.sync(() => $.warn(`plugin ${e.name} onChangeEvent failed`, { error: Ie.pretty(t) })))));
|
|
970
971
|
});
|
|
971
972
|
}
|
|
972
|
-
let
|
|
973
|
-
plugins:
|
|
973
|
+
let mt = me({
|
|
974
|
+
plugins: R,
|
|
974
975
|
appName: g?.name ?? "voltro-api",
|
|
975
976
|
appType: "api",
|
|
976
977
|
voltroVersion: process.env.npm_package_version ?? "0.0.0",
|
|
977
978
|
log: $
|
|
978
979
|
});
|
|
979
|
-
|
|
980
|
-
let
|
|
980
|
+
R.length && await mt.activate(), p.mark("plugins");
|
|
981
|
+
let ht = await mt.gatherObservability(), gt = await _e(P, g, _, {
|
|
981
982
|
info: (e, t) => process.stdout.write(`[broadcast] ${e} ${t ? JSON.stringify(t) : ""}\n`),
|
|
982
983
|
warn: (e, t) => process.stderr.write(`[broadcast] ${e} ${t ? JSON.stringify(t) : ""}\n`),
|
|
983
984
|
debug: () => {}
|
|
984
|
-
}),
|
|
985
|
-
|
|
986
|
-
let
|
|
987
|
-
prefix:
|
|
988
|
-
...
|
|
989
|
-
}) : void 0, wt =
|
|
990
|
-
store:
|
|
985
|
+
}), z = g?.apiKeys, vt = (typeof z == "object" ? z.prefix : void 0) ?? "voltro_", yt = z ? Je(P) : void 0, xt = yt ? nt({ flush: rt(yt) }) : void 0;
|
|
986
|
+
xt && _t(() => xt.shutdown());
|
|
987
|
+
let Ct = yt ? tt(yt, {
|
|
988
|
+
prefix: vt,
|
|
989
|
+
...xt ? { usage: xt } : {}
|
|
990
|
+
}) : void 0, wt = Ct ? [Ze(Ct, { prefix: vt })] : [], Et = Ce([...g?.auth?.strategies ?? [], ...wt], $t(g?.plugins ?? []), g?.auth?.anonymousTenantRequired ?? !1, g?.auth?.resolveScopes, () => ze), Dt = [...g?.restRoutes ?? [], ...Ct ? Be(Ct, (typeof z == "object" ? z.managementPath : void 0) ?? "/v1/api-keys") : []], B = g?.idempotency, kt = B ? {
|
|
991
|
+
store: Ye(P),
|
|
991
992
|
header: (typeof B == "object" ? B.header : void 0) ?? "Idempotency-Key",
|
|
992
993
|
ttlMs: (typeof B == "object" ? B.ttlMs : void 0) ?? 864e5
|
|
993
994
|
} : void 0, jt = Dt.length > 0 ? tn(Dt, {
|
|
994
|
-
store:
|
|
995
|
+
store: P,
|
|
995
996
|
resolveSubject: (e) => Et({
|
|
996
997
|
headers: e,
|
|
997
998
|
clientId: -1
|
|
998
999
|
}),
|
|
999
1000
|
...kt ? { idempotency: kt } : {}
|
|
1000
|
-
}) : [], V =
|
|
1001
|
+
}) : [], V = R.map((e) => e.services).filter((e) => e !== void 0), Nt = M.mergeAll(Ee({
|
|
1001
1002
|
analyticsLayer: D.layer,
|
|
1002
|
-
cacheService:
|
|
1003
|
+
cacheService: Ve,
|
|
1003
1004
|
kvService: qe,
|
|
1004
1005
|
pluginServices: V,
|
|
1005
1006
|
userLayers: g?.layers ?? []
|
|
@@ -1008,22 +1009,22 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
1008
1009
|
"mysql",
|
|
1009
1010
|
"mariadb",
|
|
1010
1011
|
"mssql"
|
|
1011
|
-
]), It = H.coordination ?? (Ft.has(_) ? "advisoryLock" : "single"), U = It === "cluster" && Ft.has(_),
|
|
1012
|
+
]), It = H.coordination ?? (Ft.has(_) ? "advisoryLock" : "single"), U = It === "cluster" && Ft.has(_), Lt = U ? "cluster" : It === "advisoryLock" && Ft.has(_) ? "advisoryLock" : "single";
|
|
1012
1013
|
It === "cluster" && !U && $.warn("scheduling.coordination=cluster needs a sql-backed store except sqlite — falling back to single"), It === "advisoryLock" && !Ft.has(_) && $.warn("scheduling.coordination=advisoryLock needs a SQL store (the claim-row gate) — falling back to single");
|
|
1013
|
-
let
|
|
1014
|
-
if (
|
|
1014
|
+
let W, G = S.workflows.length > 0 || S.workflowWorkers.length > 0 || S.eventTriggers.length > 0 || (w?.outgoing.length ?? 0) > 0 || U, Rt;
|
|
1015
|
+
if (G) {
|
|
1015
1016
|
if (_ === "mssql") {
|
|
1016
1017
|
let e = await fe(process.cwd());
|
|
1017
1018
|
e && $.warn(e);
|
|
1018
1019
|
}
|
|
1019
1020
|
let [{ WorkflowEngine: e }, { makeClusterCronLayer: t, workflowEngineLayer: r, resolveRunnerStorage: i }] = await Promise.all([import("@effect/workflow"), import("@voltro/workflow/cluster")]), a = U ? S.schedules.filter((e) => (e.trigger ?? Pt) === "self").map((e) => t({
|
|
1020
1021
|
name: e.name,
|
|
1021
|
-
cron:
|
|
1022
|
+
cron: L(e),
|
|
1022
1023
|
execute: async () => {
|
|
1023
|
-
await
|
|
1024
|
+
await W?.fireFromCluster(e.name);
|
|
1024
1025
|
}
|
|
1025
1026
|
})) : [];
|
|
1026
|
-
|
|
1027
|
+
Rt = _ === "memory" ? e.layerMemory : await (async () => {
|
|
1027
1028
|
let e = await n(_), t = i({ sqliteFamily: e.id === "sqlite" || e.id === "turso" });
|
|
1028
1029
|
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)" : "") : "")), r({
|
|
1029
1030
|
sqlClientLayer: e.makeSqlLayer(T()),
|
|
@@ -1034,13 +1035,13 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
1034
1035
|
});
|
|
1035
1036
|
})();
|
|
1036
1037
|
}
|
|
1037
|
-
let
|
|
1038
|
+
let zt = je(R, t()), Bt = b.filter((e) => /\.subscribe\.tsx?$/.test(e)), K = Bt.length > 0 ? await ae(Bt, $) : [], Vt = b.filter((e) => /\.reaction\.tsx?$/.test(e)), Ht = Vt.length > 0 ? await se(Vt, $) : [], q = b.filter((e) => u.test(e)), Ut = q.length > 0 ? await Me(q, $) : [], J = b.filter((e) => /\.aggregate\.tsx?$/.test(e)), Y = J.length > 0 ? await v(J, $) : [], X = ye();
|
|
1038
1039
|
if (Y.length > 0 && _ !== "memory") try {
|
|
1039
1040
|
X = f((await n(_)).makeSqlLayer(T()));
|
|
1040
1041
|
} catch (e) {
|
|
1041
1042
|
$.warn("aggregate: SQL storage init failed — falling back to in-process", { err: String(e) });
|
|
1042
1043
|
}
|
|
1043
|
-
let Wt = _ === "memory" ? Tt :
|
|
1044
|
+
let Wt = _ === "memory" ? Tt : et(P, `aggregate@${process.pid}`, $), Z = [], Gt = [], Kt = b.filter((e) => l.test(e));
|
|
1044
1045
|
if (Kt.length > 0) {
|
|
1045
1046
|
let e = $.child("agent"), t = b.filter((e) => a.test(e));
|
|
1046
1047
|
t.length > 0 && await o(t, e);
|
|
@@ -1064,10 +1065,10 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
1064
1065
|
workflowWorkers: S.workflowWorkers,
|
|
1065
1066
|
eventTriggers: S.eventTriggers,
|
|
1066
1067
|
schedules: S.schedules,
|
|
1067
|
-
subscribers:
|
|
1068
|
-
outboxHandlers:
|
|
1068
|
+
subscribers: K,
|
|
1069
|
+
outboxHandlers: Ut,
|
|
1069
1070
|
connections: S.connections,
|
|
1070
|
-
reactions:
|
|
1071
|
+
reactions: Ht,
|
|
1071
1072
|
aggregates: Y,
|
|
1072
1073
|
...w === void 0 ? {} : { webhooks: w }
|
|
1073
1074
|
},
|
|
@@ -1075,11 +1076,11 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
1075
1076
|
analytics: D.sink,
|
|
1076
1077
|
aggregateStorage: X,
|
|
1077
1078
|
aggregateCoordinator: Wt,
|
|
1078
|
-
store:
|
|
1079
|
+
store: P,
|
|
1079
1080
|
kv: Ke,
|
|
1080
1081
|
cache: F,
|
|
1081
1082
|
snapshotCache: We,
|
|
1082
|
-
schemaRegistry:
|
|
1083
|
+
schemaRegistry: N,
|
|
1083
1084
|
tenantScopedTables: S.tenantScopedTables,
|
|
1084
1085
|
softDeleteScopedTables: S.softDeleteScopedTables,
|
|
1085
1086
|
dataTransferSnapshot: Xt(O),
|
|
@@ -1089,18 +1090,18 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
1089
1090
|
headers: e,
|
|
1090
1091
|
clientId: t
|
|
1091
1092
|
}),
|
|
1092
|
-
httpRoutes: [...
|
|
1093
|
-
getStore: () =>
|
|
1093
|
+
httpRoutes: [...R.flatMap((e) => e.httpRoutes ?? []), ...jt],
|
|
1094
|
+
getStore: () => ze,
|
|
1094
1095
|
...Nt ? { baseLayer: Nt } : {},
|
|
1095
|
-
...
|
|
1096
|
+
...Rt === void 0 ? {} : { workflowEngineLayer: Rt },
|
|
1096
1097
|
scheduleDefaultTrigger: Pt,
|
|
1097
|
-
scheduleCoordination:
|
|
1098
|
+
scheduleCoordination: Lt,
|
|
1098
1099
|
scheduleArmSelf: !U,
|
|
1099
1100
|
dormancy: process.env.VOLTRO_DORMANCY === "sleep" || process.env.VOLTRO_DORMANCY === "always-on" ? process.env.VOLTRO_DORMANCY : g?.dormancy ?? "always-on",
|
|
1100
1101
|
scheduleReplicaId: process.env.HOSTNAME ?? `pid-${process.pid}`,
|
|
1101
|
-
...
|
|
1102
|
+
...zt === void 0 ? {} : { scheduleFireInterceptor: zt },
|
|
1102
1103
|
onSchedulerReady: (e) => {
|
|
1103
|
-
|
|
1104
|
+
W = e;
|
|
1104
1105
|
},
|
|
1105
1106
|
inspectRoute: { handle: (e, t, n, r) => d(e, {
|
|
1106
1107
|
kind: "api",
|
|
@@ -1112,11 +1113,11 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
1112
1113
|
store: _,
|
|
1113
1114
|
cdc: ce ? "on" : "off"
|
|
1114
1115
|
},
|
|
1115
|
-
rpc:
|
|
1116
|
+
rpc: be(S, m),
|
|
1116
1117
|
workflows: Oe(S, m),
|
|
1117
1118
|
inspectFireSchedule: async ({ name: e, trigger: t }) => {
|
|
1118
|
-
if (!
|
|
1119
|
-
return { runId: await
|
|
1119
|
+
if (!W) throw Error("scheduler not started — this app registers no self-triggered schedules (all schedules are trigger:'external', or there are none).");
|
|
1120
|
+
return { runId: await W.fireNow(e, t) ?? null };
|
|
1120
1121
|
}
|
|
1121
1122
|
}, t, {
|
|
1122
1123
|
method: n,
|
|
@@ -1126,11 +1127,11 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
1126
1127
|
contentType: "application/json",
|
|
1127
1128
|
body: JSON.stringify({ error: "not an inspect route" })
|
|
1128
1129
|
} },
|
|
1129
|
-
observability:
|
|
1130
|
+
observability: ht,
|
|
1130
1131
|
port: ne,
|
|
1131
1132
|
...g?.transport?.wsPath ? { path: g.transport.wsPath } : {}
|
|
1132
1133
|
});
|
|
1133
|
-
return
|
|
1134
|
+
return Se(oe([
|
|
1134
1135
|
S.queries,
|
|
1135
1136
|
S.mutations,
|
|
1136
1137
|
S.actions,
|
|
@@ -1146,12 +1147,12 @@ var hn = "VoltroBootRefusal", gn = (e) => {
|
|
|
1146
1147
|
workflows: S.workflows.length,
|
|
1147
1148
|
workflowWorkers: S.workflowWorkers.length,
|
|
1148
1149
|
schedules: S.schedules.length,
|
|
1149
|
-
scheduleCoordination:
|
|
1150
|
-
}), p.finish($),
|
|
1151
|
-
for (let e of
|
|
1152
|
-
|
|
1150
|
+
scheduleCoordination: Lt
|
|
1151
|
+
}), p.finish($), _t(async () => {
|
|
1152
|
+
for (let e of ut) e.stop();
|
|
1153
|
+
Qe.detach(), $e.stop(), I(), st?.dispose();
|
|
1153
1154
|
try {
|
|
1154
|
-
await
|
|
1155
|
+
await mt.deactivate(), await gt?.close(), await D.dispose(), await Jt.close(), await P.close?.();
|
|
1155
1156
|
} catch (e) {
|
|
1156
1157
|
console.error("serve: shutdown step failed, exiting anyway:", e);
|
|
1157
1158
|
}
|