@voltro/cli 0.22.1 → 0.24.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.
Files changed (76) hide show
  1. package/CHANGELOG.md +427 -0
  2. package/bin/voltro.mjs +39 -4
  3. package/dist/{apiBuild-DiWxVz-M.js → apiBuild-B2m4XK_8.js} +45 -23
  4. package/dist/apiBuild-UEM3QBke.js +2 -0
  5. package/dist/bin.js +3 -3
  6. package/dist/{commands-BxRaIOBG.js → commands-CaIhTsC2.js} +2944 -2557
  7. package/dist/{dbCommand-DVASmZj2.js → dbCommand-CC61CsAc.js} +474 -263
  8. package/dist/dbCommand-Cr__4ATv.js +2 -0
  9. package/dist/{dev-Dd3EZzj5.js → dev-DPkQVUTP.js} +1 -1
  10. package/dist/{dev-BRiPgbKw.js → dev-NCuEhNxs.js} +1593 -1575
  11. package/dist/index.js +1 -1
  12. package/dist/{inspectMetrics-9ZSuDeqD.js → inspectMetrics-dcC7gnxu.js} +566 -552
  13. package/dist/{serveCommand-DXJOARkO.js → serveCommand-C4gzDZzc.js} +425 -411
  14. package/dist/serveEntry.js +2 -2
  15. package/dist/{start-CsIjcOi-.js → start-C_4VUDT8.js} +327 -325
  16. package/dist/startEntry.js +2 -2
  17. package/package.json +17 -17
  18. package/templates/AGENTS.md +1 -1
  19. package/templates/agent-docs/_index.md +1 -1
  20. package/templates/agent-docs/_manifest.json +1 -1
  21. package/templates/agent-docs/authentication.md +21 -0
  22. package/templates/agent-docs/caching.md +21 -5
  23. package/templates/agent-docs/cli.md +61 -0
  24. package/templates/agent-docs/data.md +208 -170
  25. package/templates/agent-docs/database/migrations.md +123 -0
  26. package/templates/agent-docs/database/seedsdialects.md +12 -0
  27. package/templates/agent-docs/deployment.md +66 -1
  28. package/templates/agent-docs/plugins.md +42 -0
  29. package/templates/agent-docs/routing.md +23 -1
  30. package/templates/agent-docs/templates/apibackends.md +2 -2
  31. package/templates/agent-docs/whats-new.md +281 -32
  32. package/templates/agent-docs/workflows.md +30 -0
  33. package/templates/apps/api-ai/package.json +8 -7
  34. package/templates/apps/api-auth/package.json +9 -8
  35. package/templates/apps/api-backend/package.json +8 -7
  36. package/templates/apps/api-backend-deactivation/package.json +8 -7
  37. package/templates/apps/api-backend-mail/package.json +9 -8
  38. package/templates/apps/api-backend-mariadb/package.json +10 -9
  39. package/templates/apps/api-backend-storage/package.json +9 -8
  40. package/templates/apps/api-data-advanced/package.json +9 -8
  41. package/templates/apps/api-durable/package.json +9 -8
  42. package/templates/apps/api-feature-flags/package.json +10 -9
  43. package/templates/apps/api-governance/package.json +9 -8
  44. package/templates/apps/api-kv/package.json +9 -8
  45. package/templates/apps/api-moderation/package.json +9 -8
  46. package/templates/apps/api-observability/package.json +9 -8
  47. package/templates/apps/api-ratelimit/package.json +9 -8
  48. package/templates/apps/api-rbac/package.json +9 -8
  49. package/templates/apps/api-rest/package.json +8 -7
  50. package/templates/apps/api-saas/package.json +12 -11
  51. package/templates/apps/api-search/package.json +9 -8
  52. package/templates/apps/api-versioning/app.config.ts +6 -4
  53. package/templates/apps/api-versioning/package.json +9 -8
  54. package/templates/apps/api-webhooks/package.json +10 -9
  55. package/templates/apps/changelog/package.json +7 -6
  56. package/templates/apps/edge-functions/package.json +3 -2
  57. package/templates/apps/frontend-admin/package.json +9 -8
  58. package/templates/apps/frontend-app/package.json +9 -8
  59. package/templates/apps/frontend-blank/package.json +8 -7
  60. package/templates/apps/frontend-contact/package.json +8 -7
  61. package/templates/apps/frontend-contact/src/globals.d.ts +6 -0
  62. package/templates/apps/frontend-dashboard/package.json +8 -7
  63. package/templates/apps/frontend-docs/package.json +8 -7
  64. package/templates/apps/frontend-docs/src/globals.d.ts +6 -0
  65. package/templates/apps/frontend-i18n/package.json +7 -6
  66. package/templates/apps/frontend-landing/package.json +8 -7
  67. package/templates/apps/frontend-landing/src/globals.d.ts +6 -0
  68. package/templates/apps/frontend-spa/package.json +8 -7
  69. package/templates/apps/frontend-spa/src/globals.d.ts +6 -0
  70. package/templates/apps/frontend-ssr/package.json +8 -7
  71. package/templates/apps/frontend-ssr/src/globals.d.ts +6 -0
  72. package/templates/apps/frontend-ssr-api/package.json +9 -8
  73. package/templates/apps/frontend-static-blog/package.json +7 -6
  74. package/templates/apps/frontend-static-blog/src/globals.d.ts +6 -0
  75. package/dist/apiBuild-COyPDf3R.js +0 -2
  76. package/dist/dbCommand-CO3eSAZR.js +0 -2
@@ -1,54 +1,54 @@
1
- import { at as e, t } from "./inspectMetrics-9ZSuDeqD.js";
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 _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 Te, t as Ee, tt as De, u as Oe, ut as ke, v as Ae, w as je, x as E, y as Me, z as Ne } from "./dev-BRiPgbKw.js";
8
- import { l as D, r as O } from "./apiBuild-DiWxVz-M.js";
9
- import { t as k } from "./bootTiming-BdyP9nYw.js";
10
- import { n as Pe } from "./cliArgs-qdZSElM3.js";
11
- import { join as Fe } from "node:path";
12
- import { pathToFileURL as Ie } from "node:url";
13
- import { Cause as Le, Effect as A, Layer as j, ManagedRuntime as Re } from "effect";
14
- import { createLogger as M } from "@voltro/logger";
15
- import { existsSync as ze } from "node:fs";
16
- import { AggregateRegistry as N, Dispatcher as Be, apiKeyManagementRoutes as Ve, applySoftDeleteScope as He, applyTenantScope as Ue, attachAnalyticsMirror as We, awaitServerListening as Ge, bindMutation as P, bindStream as Ke, bindSubscription as F, buildTracingLayer as qe, cancelWakeup as Je, compileCron as I, dataStoreApiKeyStore as Ye, dataStoreIdempotencyStore as Xe, formatServerOnlyLeaks as Ze, frameworkApiKeyStrategy as Qe, installPolicyGuardResolver as $e, loadResourceTuples as et, makeActionRunner as L, makeAdvisoryLockCoordinator as tt, makeApiKeyService as nt, makeApiKeyUsageBuffer as rt, makeApiKeyUsageFlusher as it, makeAsyncKv as at, makeCoordinatedScheduler as ot, makeEffectStoreLayer as st, makeLazyWorkflowFacade as ct, makeMutationRunner as lt, makeOneShotQueryRunner as ut, makeQueryDescriptorProducer as dt, makeQueryReauthorizer as ft, makeQuerySubscriber as pt, makeSchemaRegistry as mt, makeWorkflowFacade as ht, makeWorkflowFacadeWithCallerContext as gt, makeWorkflowLayers as _t, noopKv as R, onProcessShutdown as vt, recordSubscriptionDelivery as yt, registerWakeup as z, resolveSecretsBackend as bt, runProvidedEffect as B, setSecretsBackend as xt, setSystemStoreHandle as St, setTupleSource as Ct, singleCoordinator as wt, startRpcServer as Tt, startScheduler as Et, workflowToRpc as V, wrapStoreWithBootCodec as Dt } from "@voltro/runtime";
17
- import { RpcGroup as Ot } from "@effect/rpc";
18
- import { SqlClient as kt } from "@effect/sql";
19
- import { and as At, ensureTableRegistered as jt, eq as H, or as Mt } from "@voltro/database";
20
- import { appStorageProvider as U, fromNodeReadable as Nt, getObjectStream as Pt, putObjectStream as Ft, toNodeReadable as W } from "@voltro/plugin-storage";
21
- import { AuthMiddleware as It, ConnectionInfoMiddleware as G, actionToRpc as K, anonymousSubject as Lt, isWireReachable as Rt, mutationToRpc as zt, queryToRpc as q, streamToRpc as Bt, workflowCancelDescriptor as Vt, workflowDomainEventsQueryDescriptor as J, workflowEventDeliveriesQueryDescriptor as Ht, workflowResumeDescriptor as Ut, workflowRunEventsQueryDescriptor as Y, workflowRunQueryDescriptor as X, workflowRunStepsQueryDescriptor as Wt, workflowRunsQueryDescriptor as Z, workflowSignalDescriptor as Gt, workflowUpdateDescriptor as Kt } from "@voltro/protocol";
22
- import { assertProductionSessionSecret as qt } from "@voltro/protocol/session";
23
- import { createHash as Jt, timingSafeEqual as Yt } from "node:crypto";
24
- import { declaredSnapshot as Xt, describeOutcome as Zt, runPlannedMigrations as Qt } from "@voltro/database/sql";
25
- import { getAuthSessionStrategy as $t } from "@voltro/plugin-auth";
26
- import { collectPublicApiRoutes as en, restRoutesToHttpRoutes as tn } from "@voltro/protocol/rest";
27
- import { buildDeliverWebhookExecute as nn, buildWebhooksService as rn, defaultIncomingPath as an, deliverWebhookWorkflow as on, mountIncomingWebhook as sn } from "@voltro/plugin-webhooks";
28
- import { packBundle as cn, runExport as ln, runImport as un, storageBlobSink as dn, storageRefsBlobSource as fn, unpackBundle as pn, unpackBundleToDir as mn } from "@voltro/data-transfer";
7
+ import { A as f, B as p, C as ee, D as m, E as te, F as ne, G as re, H as h, I as g, J as ie, K as ae, L as _, M as oe, N as v, O as y, P as b, R as se, S as ce, T as le, U as ue, V as de, at as x, b as fe, c as pe, ct as me, dt as he, et as S, g as ge, h as C, i as _e, it as ve, j as ye, k as w, nt as T, o as E, ot as be, q as xe, r as Se, rt as D, st as Ce, t as we, tt as Te, u as Ee, ut as De, v as Oe, w as ke, x as Ae, y as je, z as O } from "./dev-NCuEhNxs.js";
8
+ import { r as Me, u as k } from "./apiBuild-B2m4XK_8.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, makeMutationOutputCodec as ct, makeMutationRunner as lt, makeOneShotQueryRunner as ut, makeQueryDescriptorProducer as dt, makeQueryReauthorizer as ft, makeQuerySubscriber as pt, makeSchemaRegistry as mt, makeWorkflowFacade as ht, makeWorkflowFacadeWithCallerContext as gt, makeWorkflowLayers as z, noopKv as _t, onProcessShutdown as vt, recordSubscriptionDelivery as yt, registerWakeup as bt, resolveSecretsBackend as xt, runProvidedEffect as St, setSecretsBackend as Ct, setSystemStoreHandle as wt, setTupleSource as Tt, singleCoordinator as Et, startRpcServer as Dt, startScheduler as B, workflowToRpc as V, wrapStoreWithBootCodec as Ot } from "@voltro/runtime";
17
+ import { RpcGroup as kt } from "@effect/rpc";
18
+ import { SqlClient as At } from "@effect/sql";
19
+ import { and as jt, ensureTableRegistered as Mt, eq as H, or as Nt } from "@voltro/database";
20
+ import { appStorageProvider as U, fromNodeReadable as Pt, getObjectStream as Ft, putObjectStream as W, toNodeReadable as It } from "@voltro/plugin-storage";
21
+ import { AuthMiddleware as G, ConnectionInfoMiddleware as Lt, actionToRpc as K, anonymousSubject as Rt, isWireReachable as zt, mutationToRpc as Bt, queryToRpc as q, streamToRpc as Vt, workflowCancelDescriptor as Ht, workflowDomainEventsQueryDescriptor as Ut, workflowEventDeliveriesQueryDescriptor as J, workflowResumeDescriptor as Wt, workflowRunEventsQueryDescriptor as Y, workflowRunQueryDescriptor as Gt, workflowRunStepsQueryDescriptor as X, workflowRunsQueryDescriptor as Z, workflowSignalDescriptor as Kt, workflowUpdateDescriptor as qt } from "@voltro/protocol";
22
+ import { assertProductionSessionSecret as Jt } from "@voltro/protocol/session";
23
+ import { createHash as Yt, timingSafeEqual as Xt } from "node:crypto";
24
+ import { declaredSnapshot as Zt, describeOutcome as Qt, runPlannedMigrations as $t } from "@voltro/database/sql";
25
+ import { getAuthSessionStrategy as en } from "@voltro/plugin-auth";
26
+ import { collectPublicApiRoutes as tn, restRoutesToHttpRoutes as nn } from "@voltro/protocol/rest";
27
+ import { buildDeliverWebhookExecute as rn, buildWebhooksService as an, defaultIncomingPath as on, deliverWebhookWorkflow as sn, mountIncomingWebhook as cn } from "@voltro/plugin-webhooks";
28
+ import { packBundle as ln, runExport as un, runImport as dn, storageBlobSink as fn, storageRefsBlobSource as pn, unpackBundle as mn, unpackBundleToDir as hn } from "@voltro/data-transfer";
29
29
  //#region src/bootRefusal.ts
30
- var hn = "VoltroBootRefusal", gn = (e) => {
30
+ var gn = "VoltroBootRefusal", _n = (e) => {
31
31
  let t = Error(e);
32
- return t.name = hn, t;
33
- }, _n = "/_voltro/admin/import", vn = "/_voltro/admin/export", Q = (e, t) => ({
32
+ return t.name = gn, t;
33
+ }, vn = "/_voltro/admin/import", yn = "/_voltro/admin/export", Q = (e, t) => ({
34
34
  status: e,
35
35
  contentType: "application/json; charset=utf-8",
36
36
  body: JSON.stringify(t)
37
- }), yn = (e) => {
37
+ }), bn = (e) => {
38
38
  let t = e.authorization ?? e.Authorization, n = t ? /^Bearer\s+(.+)$/i.exec(t) : null;
39
39
  return n ? n[1] : null;
40
- }, bn = (e, t) => Yt(Jt("sha256").update(e).digest(), Jt("sha256").update(t).digest()), xn = (e, t) => {
40
+ }, xn = (e, t) => Xt(Yt("sha256").update(e).digest(), Yt("sha256").update(t).digest()), Sn = (e, t) => {
41
41
  if (e.method.toUpperCase() !== "POST") return Q(405, { error: "method not allowed" });
42
42
  if (!t || t.length < 16) return Q(503, { error: "data transfer misconfigured (no/weak secret)" });
43
- let n = yn(e.headers);
44
- return !n || !bn(n, t) ? Q(401, { error: "unauthorized" }) : null;
45
- }, Sn = M({ scope: "voltro:admin-import" }), Cn = "VBUNDLE2", wn = async function* (e) {
43
+ let n = bn(e.headers);
44
+ return !n || !xn(n, t) ? Q(401, { error: "unauthorized" }) : null;
45
+ }, Cn = N({ scope: "voltro:admin-import" }), wn = "VBUNDLE2", Tn = async function* (e) {
46
46
  yield e;
47
- }, Tn = (e) => async (t) => {
48
- let n = xn(t, e.secret);
47
+ }, En = (e) => async (t) => {
48
+ let n = Sn(t, e.secret);
49
49
  if (n) return n;
50
- 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") === Cn, c, l;
51
- if (s) c = wn(t.rawBody), l = "upload";
50
+ 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") === wn, c, l;
51
+ if (s) c = Tn(t.rawBody), l = "upload";
52
52
  else {
53
53
  let n;
54
54
  try {
@@ -60,28 +60,28 @@ var hn = "VoltroBootRefusal", gn = (e) => {
60
60
  if (!e.openArchive) return Q(501, { error: "storage transport not configured on this instance" });
61
61
  c = e.openArchive(n.bundleKey), l = "storage";
62
62
  }
63
- let 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-import-"));
63
+ 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-"));
64
64
  try {
65
- e.assetSink ? await pn(c, {
66
- dir: f,
65
+ e.assetSink ? await mn(c, {
66
+ dir: p,
67
67
  blobs: e.assetSink
68
- }) : await mn(c, f);
69
- let t = await A.runPromiseExit(un({
68
+ }) : await hn(c, p);
69
+ let t = await j.runPromiseExit(dn({
70
70
  store: e.store,
71
- bundleDir: f,
71
+ bundleDir: p,
72
72
  ...r ? { mode: r } : {},
73
73
  ...i ? { onConflict: i } : {},
74
74
  ...a ? { atomic: a } : {},
75
75
  ...e.snapshot ? { targetSnapshot: e.snapshot } : {},
76
76
  force: o,
77
- onWarn: (e) => Sn.warn("admin.import", { message: e }),
77
+ onWarn: (e) => Cn.warn("admin.import", { message: e }),
78
78
  ...e.assetSink ? { assetsAlreadyRestored: !0 } : {}
79
79
  }));
80
80
  if (t._tag === "Failure") {
81
81
  let e = t.cause._tag === "Fail" ? t.cause.error : void 0;
82
82
  if (e && e._tag === "SchemaDriftError") {
83
83
  let t = e;
84
- return Sn.warn("admin.import refused (schema drift)", {
84
+ return Cn.warn("admin.import refused (schema drift)", {
85
85
  transport: l,
86
86
  bundle: t.bundleFingerprint.slice(0, 16),
87
87
  target: t.targetFingerprint.slice(0, 16)
@@ -96,7 +96,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
96
96
  throw Error(String(e?.message ?? e ?? "import failed"));
97
97
  }
98
98
  let n = t.value, s = n.tables.reduce((e, t) => e + t.rowCount, 0);
99
- return Sn.info("admin.import", {
99
+ return Cn.info("admin.import", {
100
100
  transport: l,
101
101
  tables: n.tables.length,
102
102
  rows: s,
@@ -108,7 +108,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
108
108
  transport: l
109
109
  });
110
110
  } catch (e) {
111
- return Sn.warn("admin.import failed", {
111
+ return Cn.warn("admin.import failed", {
112
112
  transport: l,
113
113
  error: e?.message ?? String(e)
114
114
  }), Q(500, {
@@ -116,23 +116,23 @@ var hn = "VoltroBootRefusal", gn = (e) => {
116
116
  message: e?.message ?? String(e)
117
117
  });
118
118
  } finally {
119
- await d.rm(f, {
119
+ await d.rm(p, {
120
120
  recursive: !0,
121
121
  force: !0
122
122
  });
123
123
  }
124
- }, En = M({ scope: "voltro:admin-export" }), Dn = async (e) => {
124
+ }, Dn = N({ scope: "voltro:admin-export" }), On = 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));
128
- }, On = (e) => typeof e.tenant == "string" && e.tenant ? {
128
+ }, kn = (e) => typeof e.tenant == "string" && e.tenant ? {
129
129
  kind: "tenant",
130
130
  tenantId: e.tenant
131
131
  } : Array.isArray(e.tables) && e.tables.length ? {
132
132
  kind: "tables",
133
133
  tables: e.tables.filter((e) => typeof e == "string")
134
- } : { kind: "all" }, kn = (e) => async (t) => {
135
- let n = xn(t, e.secret);
134
+ } : { kind: "all" }, An = (e) => async (t) => {
135
+ let n = Sn(t, e.secret);
136
136
  if (n) return n;
137
137
  let r;
138
138
  try {
@@ -152,13 +152,13 @@ var hn = "VoltroBootRefusal", gn = (e) => {
152
152
  });
153
153
  }
154
154
  }
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-"));
155
+ let a = r.consistency === "snapshot" ? "snapshot" : i.consistency ?? "live", o = (typeof r.compression == "string" ? r.compression : void 0) ?? i.compression, s = i.scope ?? kn(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-"));
156
156
  try {
157
- let t = await A.runPromise(ln({
157
+ let t = await j.runPromise(un({
158
158
  store: e.store,
159
159
  snapshot: e.snapshot,
160
160
  dialect: e.dialect,
161
- outDir: f,
161
+ outDir: p,
162
162
  ...i.subset ? { subset: i.subset } : {
163
163
  scope: s,
164
164
  ...e.tenantTables && e.tenantTables.length > 0 ? { tenantTables: e.tenantTables } : {}
@@ -170,10 +170,10 @@ var hn = "VoltroBootRefusal", gn = (e) => {
170
170
  if (c) {
171
171
  if (!e.putArchive) return Q(501, { error: "storage transport not configured on this instance" });
172
172
  let i = r.bundleKey;
173
- return await e.putArchive(i, () => cn({
174
- dir: f,
173
+ return await e.putArchive(i, () => ln({
174
+ dir: p,
175
175
  ...l
176
- })), En.info("admin.export", {
176
+ })), Dn.info("admin.export", {
177
177
  transport: "storage",
178
178
  tables: t.tables.length,
179
179
  rows: n,
@@ -187,11 +187,11 @@ var hn = "VoltroBootRefusal", gn = (e) => {
187
187
  transport: "storage"
188
188
  });
189
189
  }
190
- let d = await Dn(cn({
191
- dir: f,
190
+ let d = await On(ln({
191
+ dir: p,
192
192
  ...l
193
193
  }));
194
- return En.info("admin.export", {
194
+ return Dn.info("admin.export", {
195
195
  transport: "download",
196
196
  tables: t.tables.length,
197
197
  rows: n,
@@ -208,17 +208,17 @@ var hn = "VoltroBootRefusal", gn = (e) => {
208
208
  }
209
209
  };
210
210
  } catch (e) {
211
- return En.warn("admin.export failed", { error: e?.message ?? String(e) }), Q(500, {
211
+ return Dn.warn("admin.export failed", { error: e?.message ?? String(e) }), Q(500, {
212
212
  error: "export failed",
213
213
  message: e?.message ?? String(e)
214
214
  });
215
215
  } finally {
216
- await d.rm(f, {
216
+ await d.rm(p, {
217
217
  recursive: !0,
218
218
  force: !0
219
219
  });
220
220
  }
221
- }, An = async (e) => {
221
+ }, jn = async (e) => {
222
222
  let { resolve: t } = await import("node:path"), { existsSync: n } = await import("node:fs"), r = [
223
223
  e,
224
224
  `${e}.profile.ts`,
@@ -229,8 +229,8 @@ var hn = "VoltroBootRefusal", gn = (e) => {
229
229
  let a = await import(i), o = a.default ?? a.profile;
230
230
  if (!o) throw Error(`data profile '${i}' has no default export`);
231
231
  return o;
232
- }, jn = (e, t, n = {}) => (async function* () {
233
- let r = await W((await A.runPromise(Pt(e, t).pipe(A.timeout(n.openTimeout ?? "30 seconds")))).stream), i = n.stallMs ?? 12e4, a, o = () => {
232
+ }, Mn = (e, t, n = {}) => (async function* () {
233
+ let r = await It((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 {
@@ -239,7 +239,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
239
239
  } finally {
240
240
  a && clearTimeout(a), r.destroy();
241
241
  }
242
- })(), Mn = {
242
+ })(), Nn = {
243
243
  get: async () => void 0,
244
244
  set: async () => {},
245
245
  setWithTags: async () => {},
@@ -248,12 +248,12 @@ var hn = "VoltroBootRefusal", gn = (e) => {
248
248
  clear: async () => {},
249
249
  invalidateTag: async () => 0,
250
250
  wrap: async (e, t, n) => n()
251
- }, Nn = async (e) => {
252
- St({
251
+ }, Pn = async (e) => {
252
+ wt({
253
253
  dataStore: e.store,
254
254
  schemaRegistry: e.schemaRegistry
255
255
  });
256
- let t = new Be({
256
+ let t = new ze({
257
257
  store: e.store,
258
258
  ...e.snapshotCache ? { cache: e.snapshotCache } : {},
259
259
  recordDelivery: (e) => yt({
@@ -262,7 +262,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
262
262
  durationMs: e.durationMs,
263
263
  rowCount: e.rowCount
264
264
  })
265
- }), n = e.cache ?? Mn, r = e.kv ?? R, 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) => {
265
+ }), n = e.cache ?? Nn, r = e.kv ?? _t, 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,27 +318,27 @@ 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 ? ct(() => 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 ?? M({ scope: "voltro:serve" })).child("webhooks"), ae, h = e.discovered.webhooks;
322
- if (h && h.outgoing.length > 0 && e.workflowEngineLayer !== void 0) {
323
- let t = e.workflowEngineLayer, i = S({
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, p = f || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster", te = e.tenantIsolation === "namespace", ne = (e.log ?? N({ scope: "voltro:serve" })).child("webhooks"), re, g = e.discovered.webhooks;
322
+ if (g && g.outgoing.length > 0 && e.workflowEngineLayer !== void 0) {
323
+ let t = e.workflowEngineLayer, i = x({
324
324
  store: e.store,
325
325
  schemaRegistry: e.schemaRegistry,
326
326
  cache: n,
327
327
  kv: r
328
- }), a = h.outgoing.map((e) => e.descriptor);
329
- ae = rn(i, async (e) => {
330
- let n = on.execute(e).pipe(A.provide(on.toLayer(nn(i, { events: a })).pipe(j.provideMerge(t))));
331
- A.runPromise(n).catch((t) => {
332
- ie.error("deliverWebhook workflow crashed", {
328
+ }), a = g.outgoing.map((e) => e.descriptor);
329
+ re = an(i, async (e) => {
330
+ let n = sn.execute(e).pipe(j.provide(sn.toLayer(rn(i, { events: a })).pipe(M.provideMerge(t))));
331
+ j.runPromise(n).catch((t) => {
332
+ ne.error("deliverWebhook workflow crashed", {
333
333
  deliveryId: e.deliveryId,
334
334
  targetId: e.targetId
335
335
  }, t);
336
336
  });
337
337
  }, { events: a });
338
338
  }
339
- let oe = /* @__PURE__ */ new Map();
340
- if (h) for (let e of h.incoming) {
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, {
339
+ let ie = /* @__PURE__ */ new Map();
340
+ if (g) for (let e of g.incoming) {
341
+ let t = e.descriptor.path ?? on(e.descriptor.id), n = `VOLTRO_WEBHOOK_SECRET_${e.descriptor.id.toUpperCase().replace(/[^A-Z0-9]/g, "_")}`, r = cn(e.descriptor, {
342
342
  resolveSecret: async () => process.env[n] ?? null,
343
343
  resolveWorkflows: () => d === void 0 ? void 0 : gt(d, {
344
344
  traceId: `incoming:${e.descriptor.id}`,
@@ -352,136 +352,142 @@ var hn = "VoltroBootRefusal", gn = (e) => {
352
352
  idempotency: e.idempotency,
353
353
  durationMs: e.durationMs
354
354
  };
355
- e.status >= 500 ? ie.error("incoming delivery failed", t) : e.status >= 400 ? ie.warn("incoming delivery rejected", t) : ie.info("incoming delivery handled", t);
355
+ e.status >= 500 ? ne.error("incoming delivery failed", t) : e.status >= 400 ? ne.warn("incoming delivery rejected", t) : ne.info("incoming delivery handled", t);
356
356
  }
357
357
  });
358
- oe.set(t, { handle: r });
358
+ ie.set(t, { handle: r });
359
359
  }
360
- $e(), Ct((t) => et(e.store, t.subjectId, t.resourceType, t.resourceId));
361
- let se = (e.discovered.outboxHandlers?.length ?? 0) > 0 ? p({
360
+ Qe(), Tt((t) => $e(e.store, t.subjectId, t.resourceType, t.resourceId));
361
+ let ae = (e.discovered.outboxHandlers?.length ?? 0) > 0 ? de({
362
362
  handlers: e.discovered.outboxHandlers ?? [],
363
363
  store: e.store,
364
- log: (e.log ?? M({ scope: "voltro:serve" })).child("outbox")
365
- }) : void 0, v = ce({
364
+ log: (e.log ?? N({ scope: "voltro:serve" })).child("outbox")
365
+ }) : void 0, _ = O({
366
366
  definitions: (e.discovered.connections ?? []).map((e) => e.definition),
367
367
  store: e.store,
368
- publicUrl: g(e.port ?? 4e3),
369
- log: (e.log ?? M({ scope: "voltro:serve" })).child("connections")
370
- }), y = we({
368
+ publicUrl: se(e.port ?? 4e3),
369
+ log: (e.log ?? N({ scope: "voltro:serve" })).child("connections")
370
+ }), b = ve({
371
371
  store: e.store,
372
372
  schemaRegistry: e.schemaRegistry,
373
373
  cache: n,
374
374
  kv: r,
375
- ...ae === void 0 ? {} : { webhooksService: ae },
375
+ ...re === void 0 ? {} : { webhooksService: re },
376
376
  ...d === void 0 ? {} : { workflowsProxy: d },
377
377
  eventTriggers: e.discovered.eventTriggers ?? [],
378
- namespaceIsolationOn: re,
379
- ...se === void 0 ? {} : { outbox: { nudge: se.nudge } },
380
- ...v.active ? { connections: { registry: v.registry } } : {}
381
- }), ue = j.succeed(N, m), fe = (t, n) => {
382
- let r = t.pipe(A.provide(st(n)));
383
- return (e.baseLayer ? r.pipe(A.provide(e.baseLayer)) : r).pipe(A.provide(ue));
384
- }, pe = (e, t) => B(fe(e, t)), me = lt({
378
+ namespaceIsolationOn: te,
379
+ ...ae === void 0 ? {} : { outbox: { nudge: ae.nudge } },
380
+ ..._.active ? { connections: { registry: _.registry } } : {}
381
+ }), le = M.succeed(P, y), ue = (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(le));
384
+ }, fe = (e, t) => St(ue(e, t)), pe = lt({
385
385
  store: e.store,
386
- buildContext: (e, t, n) => y(e, t, n),
387
- runEffect: pe,
388
- undoCapture: le()
389
- }), he = E(), ge = L({
390
- buildContext: (e) => y(e),
391
- runEffect: pe
392
- }), _e = {
393
- buildContext: (e) => y(e),
394
- finalize: (t, n) => He(Ue(t, e.tenantScopedTables, n.subject.tenantId), e.softDeleteScopedTables),
395
- provideEffect: fe
396
- }, x = dt(_e), ye = ut({
397
- ..._e,
386
+ buildContext: (e, t, n) => b(e, t, n),
387
+ runEffect: fe,
388
+ undoCapture: ee()
389
+ }), me = ce(), he = R({
390
+ buildContext: (e) => b(e),
391
+ runEffect: fe
392
+ }), ge = {
393
+ buildContext: (e) => b(e),
394
+ finalize: (t, n) => Ve(He(t, e.tenantScopedTables, n.subject.tenantId), e.softDeleteScopedTables),
395
+ provideEffect: ue
396
+ }, C = dt(ge), _e = ut({
397
+ ...ge,
398
398
  queryRows: (t) => e.store.query(t)
399
- }), be = pt({
400
- ..._e,
399
+ }), ye = pt({
400
+ ...ge,
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
+ }), w = (e) => e.filter((e) => zt(e.descriptor)), T = {};
404
404
  for (let n of [
405
- ...e.discovered.queries,
406
- ...he.queries,
407
- ...v.queries
408
- ]) C[n.descriptor.name] = (e) => F(x(n, e), t, `subscription.${n.descriptor.name}`, void 0, void 0, ft(n, e));
405
+ ...w(e.discovered.queries),
406
+ ...me.queries,
407
+ ..._.queries
408
+ ]) T[n.descriptor.name] = (e) => I(C(n, e), t, `subscription.${n.descriptor.name}`, void 0, void 0, ft(n, e));
409
409
  for (let t of [
410
- ...e.discovered.mutations,
411
- ...he.mutations,
412
- ...v.mutations
413
- ]) C[t.descriptor.name] = (e) => P(async (e, n) => me(t, e, n), e, `mutation.${t.descriptor.name}`);
414
- for (let t of [...e.discovered.actions, ...v.actions]) C[t.descriptor.name] = (e) => P(async (e, n) => ge(t, e, n), e, `action.${t.descriptor.name}`);
415
- let T = () => `public-${Math.random().toString(36).slice(2, 10)}`, xe = [
410
+ ...w(e.discovered.mutations),
411
+ ...me.mutations,
412
+ ..._.mutations
413
+ ]) {
414
+ let n = ct(t.descriptor.output);
415
+ T[t.descriptor.name] = (r) => F(async (e, n) => pe(t, e, n), r, `mutation.${t.descriptor.name}`, n, e.idempotency);
416
+ }
417
+ for (let t of [...w(e.discovered.actions), ..._.actions]) {
418
+ let n = ct(t.descriptor.output);
419
+ T[t.descriptor.name] = (r) => F(async (e, n) => he(t, e, n), r, `action.${t.descriptor.name}`, n, e.idempotency);
420
+ }
421
+ let E = () => `public-${Math.random().toString(36).slice(2, 10)}`, be = [
416
422
  ...e.discovered.queries.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
417
423
  descriptor: e.descriptor,
418
- invoke: (t, n) => ye(e, t, {
424
+ invoke: (t, n) => _e(e, t, {
419
425
  subject: n.subject,
420
- traceId: T()
426
+ traceId: E()
421
427
  }),
422
- subscribe: (t, n, r) => be(e, t, {
428
+ subscribe: (t, n, r) => ye(e, t, {
423
429
  subject: n.subject,
424
- traceId: T()
430
+ traceId: E()
425
431
  }, r)
426
432
  })),
427
433
  ...e.discovered.mutations.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
428
434
  descriptor: e.descriptor,
429
- invoke: (t, n) => me(e, t, {
435
+ invoke: (t, n) => pe(e, t, {
430
436
  subject: n.subject,
431
- traceId: T()
437
+ traceId: E()
432
438
  })
433
439
  })),
434
440
  ...e.discovered.actions.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
435
441
  descriptor: e.descriptor,
436
- invoke: (t, n) => ge(e, t, {
442
+ invoke: (t, n) => he(e, t, {
437
443
  subject: n.subject,
438
- traceId: T()
444
+ traceId: E()
439
445
  })
440
446
  }))
441
- ], Se = xe.length > 0 ? tn(en(xe), {
447
+ ], xe = be.length > 0 ? nn(tn(be), {
442
448
  store: e.store,
443
449
  resolveSubject: (t) => e.resolveSubject(t, -1)
444
- }) : [], Ce = e.dataTransferSecret ?? process.env.VOLTRO_DATA_TRANSFER_SECRET, Te = Ce && Ce.length >= 16 ? [{
450
+ }) : [], Se = e.dataTransferSecret ?? process.env.VOLTRO_DATA_TRANSFER_SECRET, Ce = Se && Se.length >= 16 ? [{
445
451
  method: "POST",
446
- path: _n,
447
- handle: Tn({
448
- secret: Ce,
452
+ path: vn,
453
+ handle: En({
454
+ secret: Se,
449
455
  store: e.store,
450
456
  ...e.dataTransferSnapshot ? { snapshot: e.dataTransferSnapshot } : {},
451
- assetSink: dn(U()),
452
- openArchive: (e) => jn(U(), e)
457
+ assetSink: fn(U()),
458
+ openArchive: (e) => Mn(U(), e)
453
459
  })
454
460
  }, {
455
461
  method: "POST",
456
- path: vn,
457
- handle: kn({
458
- secret: Ce,
462
+ path: yn,
463
+ handle: An({
464
+ secret: Se,
459
465
  store: e.store,
460
466
  snapshot: e.dataTransferSnapshot ?? { tables: [] },
461
467
  dialect: e.dataTransferDialect ?? "memory",
462
468
  tenantTables: [...e.tenantScopedTables],
463
- loadProfile: An,
464
- assetSource: fn(U(), e.store),
469
+ loadProfile: jn,
470
+ assetSource: pn(U(), e.store),
465
471
  putArchive: async (e, t) => {
466
- let { Readable: n } = await import("node:stream"), r = U(), i = Nt("storage", () => n.from(t()));
467
- await A.runPromise(Ft(r, e, i, { contentType: "application/octet-stream" }));
472
+ let { Readable: n } = await import("node:stream"), r = U(), i = Pt("storage", () => n.from(t()));
473
+ await j.runPromise(W(r, e, i, { contentType: "application/octet-stream" }));
468
474
  }
469
475
  })
470
- }] : [], Ee = [
476
+ }] : [], we = [
471
477
  ...e.httpRoutes ?? [],
472
- ...Se,
473
- ...Te,
474
- ...v.httpRoutes
478
+ ...xe,
479
+ ...Ce,
480
+ ..._.httpRoutes
475
481
  ];
476
- for (let t of e.discovered.streams ?? []) C[t.descriptor.name] = (n) => Ke((r) => {
477
- let i = y(r), a = t.executor(n, i);
478
- if (A.isEffect(a)) {
479
- let t = a.pipe(A.provide(st(i.store)));
480
- return (e.baseLayer ? t.pipe(A.provide(e.baseLayer)) : t).pipe(A.provide(ue));
482
+ for (let t of w(e.discovered.streams ?? [])) T[t.descriptor.name] = (n) => Ge((r) => {
483
+ let i = b(r), a = t.executor(n, i);
484
+ if (j.isEffect(a)) {
485
+ let t = a.pipe(j.provide(ot(i.store)));
486
+ return (e.baseLayer ? t.pipe(j.provide(e.baseLayer)) : t).pipe(j.provide(le));
481
487
  }
482
- return typeof a == "object" && a && typeof a.then == "function" ? A.promise(() => a) : a;
488
+ return typeof a == "object" && a && typeof a.then == "function" ? j.promise(() => a) : a;
483
489
  }, `stream.${t.descriptor.name}`);
484
- for (let t of e.discovered.workflows ?? []) C[t.definition.name] = (e) => P(async (e, n) => {
490
+ for (let t of e.discovered.workflows ?? []) T[t.definition.name] = (e) => F(async (e, n) => {
485
491
  let r = n;
486
492
  return gt(d, {
487
493
  subject: r.subject,
@@ -489,8 +495,8 @@ var hn = "VoltroBootRefusal", gn = (e) => {
489
495
  source: "workflow-rpc"
490
496
  }).start(t.definition.name, e);
491
497
  }, e, `workflow.${t.definition.name}`);
492
- f && (C[X.name] = (e) => F(x({
493
- descriptor: X,
498
+ f && (T[Gt.name] = (e) => I(C({
499
+ descriptor: Gt,
494
500
  executor: (e) => {
495
501
  let t = e.id;
496
502
  return {
@@ -499,13 +505,13 @@ var hn = "VoltroBootRefusal", gn = (e) => {
499
505
  column: "startedAt",
500
506
  direction: "desc"
501
507
  }],
502
- predicate: Mt(H("id", t), H("executionId", t)),
508
+ predicate: Nt(H("id", t), H("executionId", t)),
503
509
  take: 1,
504
510
  skip: void 0,
505
511
  projection: void 0
506
512
  };
507
513
  }
508
- }, e), t, `subscription.${X.name}`), C[Z.name] = (e) => F(x({
514
+ }, e), t, `subscription.${Gt.name}`), T[Z.name] = (e) => I(C({
509
515
  descriptor: Z,
510
516
  executor: (e) => {
511
517
  let t = e, n = [...t.tag === void 0 ? [] : [H("tag", t.tag)], ...t.status === void 0 ? [] : [H("status", t.status)]], r = Number.isFinite(t.limit) && t.limit !== void 0 ? Math.min(Math.max(Math.floor(t.limit), 1), 500) : 100;
@@ -515,14 +521,14 @@ var hn = "VoltroBootRefusal", gn = (e) => {
515
521
  column: "startedAt",
516
522
  direction: "desc"
517
523
  }],
518
- predicate: n.length === 0 ? void 0 : n.length === 1 ? n[0] : At(...n),
524
+ predicate: n.length === 0 ? void 0 : n.length === 1 ? n[0] : jt(...n),
519
525
  take: r,
520
526
  skip: void 0,
521
527
  projection: void 0
522
528
  };
523
529
  }
524
- }, e), t, `subscription.${Z.name}`), C[Wt.name] = (e) => F(x({
525
- descriptor: Wt,
530
+ }, e), t, `subscription.${Z.name}`), T[X.name] = (e) => I(C({
531
+ descriptor: X,
526
532
  executor: (e) => {
527
533
  let t = e.runId;
528
534
  return {
@@ -537,7 +543,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
537
543
  projection: void 0
538
544
  };
539
545
  }
540
- }, e), t, `subscription.${Wt.name}`), C[Y.name] = (e) => F(x({
546
+ }, e), t, `subscription.${X.name}`), T[Y.name] = (e) => I(C({
541
547
  descriptor: Y,
542
548
  executor: (e) => {
543
549
  let t = e.runId;
@@ -553,8 +559,8 @@ var hn = "VoltroBootRefusal", gn = (e) => {
553
559
  projection: void 0
554
560
  };
555
561
  }
556
- }, e), t, `subscription.${Y.name}`), C[J.name] = (e) => F(x({
557
- descriptor: J,
562
+ }, e), t, `subscription.${Y.name}`), T[Ut.name] = (e) => I(C({
563
+ descriptor: Ut,
558
564
  executor: (e) => {
559
565
  let t = e;
560
566
  return {
@@ -569,8 +575,8 @@ var hn = "VoltroBootRefusal", gn = (e) => {
569
575
  projection: void 0
570
576
  };
571
577
  }
572
- }, e), t, `subscription.${J.name}`), C[Ht.name] = (e) => F(x({
573
- descriptor: Ht,
578
+ }, e), t, `subscription.${Ut.name}`), T[J.name] = (e) => I(C({
579
+ descriptor: J,
574
580
  executor: (e) => {
575
581
  let t = e.eventId;
576
582
  return {
@@ -585,63 +591,66 @@ var hn = "VoltroBootRefusal", gn = (e) => {
585
591
  projection: void 0
586
592
  };
587
593
  }
588
- }, e), t, `subscription.${Ht.name}`), C[Vt.name] = (t) => P(async (t, n) => {
594
+ }, e), t, `subscription.${J.name}`), T[Ht.name] = (t) => F(async (t, n) => {
589
595
  let r = t;
590
- return await w(e.store, n.subject, { executionId: r.executionId }), await d.cancel(r.workflowName, r.executionId), await Fe(r.workflowName, r.executionId, "workflow.cancel"), { ok: !0 };
591
- }, t, `action.${Vt.name}`), C[Ut.name] = (t) => P(async (t, n) => {
596
+ return await D(e.store, n.subject, { executionId: r.executionId }), await d.cancel(r.workflowName, r.executionId), await Pe(r.workflowName, r.executionId, "workflow.cancel"), { ok: !0 };
597
+ }, t, `action.${Ht.name}`), T[Wt.name] = (t) => F(async (t, n) => {
592
598
  let r = t;
593
- return await w(e.store, n.subject, { executionId: r.executionId }), await d.resume(r.workflowName, r.executionId), { ok: !0 };
594
- }, t, `action.${Ut.name}`), C[Gt.name] = (t) => P(async (t, n) => {
599
+ return await D(e.store, n.subject, { executionId: r.executionId }), await d.resume(r.workflowName, r.executionId), { ok: !0 };
600
+ }, t, `action.${Wt.name}`), T[Kt.name] = (t) => F(async (t, n) => {
595
601
  let r = t;
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}`), C[Kt.name] = (t) => P(async (t, n) => {
602
+ return await D(e.store, n.subject, { id: r.id }), d.signal({ id: r.id }, r.signalName, r.payload);
603
+ }, t, `action.${Kt.name}`), T[qt.name] = (t) => F(async (t, n) => {
598
604
  let r = t;
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
- }, t, `action.${Kt.name}`));
601
- let De = (e) => e.filter((e) => Rt(e.descriptor)), Oe = [
602
- ...De(e.discovered.queries).map((e) => q(e.descriptor)),
603
- ...De(e.discovered.mutations).map((e) => zt(e.descriptor)),
604
- ...De(e.discovered.actions).map((e) => K(e.descriptor)),
605
- ...he.queries.map((e) => q(e.descriptor)),
606
- ...he.mutations.map((e) => zt(e.descriptor)),
607
- ...v.queries.map((e) => q(e.descriptor)),
608
- ...v.mutations.map((e) => zt(e.descriptor)),
609
- ...v.actions.map((e) => K(e.descriptor)),
610
- ...(e.discovered.streams ?? []).map((e) => Bt(e.descriptor)),
605
+ return await D(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 });
606
+ }, t, `action.${qt.name}`));
607
+ let Te = [
608
+ ...w(e.discovered.queries).map((e) => q(e.descriptor)),
609
+ ...w(e.discovered.mutations).map((e) => Bt(e.descriptor)),
610
+ ...w(e.discovered.actions).map((e) => K(e.descriptor)),
611
+ ...me.queries.map((e) => q(e.descriptor)),
612
+ ...me.mutations.map((e) => Bt(e.descriptor)),
613
+ ..._.queries.map((e) => q(e.descriptor)),
614
+ ..._.mutations.map((e) => Bt(e.descriptor)),
615
+ ..._.actions.map((e) => K(e.descriptor)),
616
+ ...w(e.discovered.streams ?? []).map((e) => Vt(e.descriptor)),
611
617
  ...(e.discovered.workflows ?? []).map((e) => V(e.definition)),
612
618
  ...f ? [
613
- q(X),
619
+ q(Gt),
614
620
  q(Z),
615
- q(Wt),
621
+ q(X),
616
622
  q(Y),
623
+ q(Ut),
617
624
  q(J),
618
- q(Ht),
619
- K(Vt),
620
- K(Ut),
621
- K(Gt),
622
- K(Kt)
625
+ K(Ht),
626
+ K(Wt),
627
+ K(Kt),
628
+ K(qt)
623
629
  ] : []
624
- ], ke = Ot.make(...Oe).middleware(It).middleware(G), je = j.succeed(It, It.of(({ headers: t, clientId: n }) => A.promise(() => e.resolveSubject(t, n)))), Me = j.succeed(G, G.of(({ clientId: e }) => A.succeed({ clientId: e }))), Ne = e.dormancyTenantId ?? "default", D = e.dormancy === "sleep" ? {
625
- register: (t, n, r) => z(e.store, {
626
- tenantId: r ?? Ne,
630
+ ], Ee = kt.make(...Te).middleware(G).middleware(Lt), De = M.succeed(G, G.of(({ headers: t, clientId: n }) => j.promise(() => e.resolveSubject(t, n)))), ke = M.succeed(Lt, Lt.of(({ headers: e, clientId: t }) => j.succeed({
631
+ clientId: t,
632
+ ...e["idempotency-key"] ? { idempotencyKey: e["idempotency-key"] } : {}
633
+ }))), Ae = e.dormancyTenantId ?? "default", Me = e.dormancy === "sleep" ? {
634
+ register: (t, n, r) => bt(e.store, {
635
+ tenantId: r ?? Ae,
627
636
  kind: "workflow",
628
637
  refId: t,
629
638
  wakeAt: n
630
639
  }),
631
- cancel: (t, n) => Je(e.store, {
632
- tenantId: n ?? Ne,
640
+ cancel: (t, n) => qe(e.store, {
641
+ tenantId: n ?? Ae,
633
642
  kind: "workflow",
634
643
  refId: t
635
644
  }).then(() => {})
636
- } : void 0, O = te ? await import("@voltro/workflow") : void 0, k = O?.makeWorkflowRunRecorder({
645
+ } : void 0, k = p ? await import("@voltro/workflow") : void 0, A = k?.makeWorkflowRunRecorder({
637
646
  store: e.store,
638
- ...D === void 0 ? {} : { wakeups: D }
639
- }), Pe = async (t, n) => {
640
- await O.closeWorkflowChildrenForParent({
647
+ ...Me === void 0 ? {} : { wakeups: Me }
648
+ }), Ne = async (t, n) => {
649
+ await k.closeWorkflowChildrenForParent({
641
650
  store: e.store,
642
651
  parentExecutionId: t,
643
652
  parentStatus: n,
644
- recorder: k,
653
+ recorder: A,
645
654
  log: { warn: (e, t) => {
646
655
  process.stderr.write(`[workflow] ${e} ${t ? JSON.stringify(t) : ""}\n`);
647
656
  } },
@@ -652,7 +661,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
652
661
  await a.runPromise(r.definition.interrupt(n));
653
662
  }
654
663
  });
655
- }, Fe = async (t, n, r) => {
664
+ }, Pe = async (t, n, r) => {
656
665
  let i = (await e.store.query({
657
666
  table: "_voltro_workflow_runs",
658
667
  order: [],
@@ -667,7 +676,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
667
676
  cancelled: !0,
668
677
  completedAt: /* @__PURE__ */ new Date()
669
678
  }), o = i.subject?.tenantId ?? void 0;
670
- a && await k.recordEvent({
679
+ a && await A.recordEvent({
671
680
  runId: i.id,
672
681
  eventType: "run-cancelled",
673
682
  payload: {
@@ -676,16 +685,16 @@ var hn = "VoltroBootRefusal", gn = (e) => {
676
685
  executionId: n,
677
686
  ...o == null ? {} : { tenantId: o }
678
687
  }
679
- }), a && await Pe(n, "cancelled");
680
- }, Ie = [..._t(e.discovered.workflows ?? [], {
681
- buildContext: (t, n) => e.buildContextForWorkflow?.(t, n) ?? y({
688
+ }), a && await Ne(n, "cancelled");
689
+ }, Fe = [...z(e.discovered.workflows ?? [], {
690
+ buildContext: (t, n) => e.buildContextForWorkflow?.(t, n) ?? b({
682
691
  subject: t.subject,
683
692
  traceId: t.traceId
684
693
  }, e.store, void 0, `workflow:${n.workflowName}`, { parentExecutionId: n.executionId }),
685
694
  resolveStartContext: u
686
695
  }, (t, n, r) => {
687
- let i = O.getWorkflowVersionMetadata(t.definition);
688
- return O.wrapWorkflowExecuteWithRunRecording({
696
+ let i = k.getWorkflowVersionMetadata(t.definition);
697
+ return k.wrapWorkflowExecuteWithRunRecording({
689
698
  name: t.definition.name,
690
699
  store: e.store,
691
700
  subject: r.subject,
@@ -696,71 +705,72 @@ var hn = "VoltroBootRefusal", gn = (e) => {
696
705
  workflowPatches: i.patches,
697
706
  parentExecutionId: r?.parentExecutionId ?? null,
698
707
  parentClosePolicy: r?.parentClosePolicy ?? null,
699
- onParentClose: ({ executionId: e, status: t }) => Pe(e, t),
700
- recorder: k
708
+ onParentClose: ({ executionId: e, status: t }) => Ne(e, t),
709
+ recorder: A
701
710
  }, n);
702
- }), ...e.discovered.workflowWorkers ?? []], Le = Ie.length > 0 ? j.mergeAll(...Ie) : j.empty;
711
+ }), ...e.discovered.workflowWorkers ?? []], Ie = Fe.length > 0 ? M.mergeAll(...Fe) : M.empty;
703
712
  if (((e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster") && e.workflowEngineLayer !== void 0) {
704
- let t = Le.pipe(j.provideMerge(e.workflowEngineLayer));
705
- a = Re.make(e.baseLayer === void 0 ? t : t.pipe(j.provideMerge(e.baseLayer))), await a.runPromise(A.void), i = (e.discovered.workflows?.length ?? 0) > 0 ? ht({
713
+ let t = Ie.pipe(M.provideMerge(e.workflowEngineLayer));
714
+ 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 ? ht({
706
715
  workflows: e.discovered.workflows ?? [],
707
716
  runEffect: (e) => a.runPromise(e),
708
717
  rememberStartContext: l,
709
718
  signal: async (t, n, r) => {
710
- let i = await O.sendWorkflowSignal({
719
+ let i = await k.sendWorkflowSignal({
711
720
  store: e.store,
712
- recorder: k,
721
+ recorder: A,
713
722
  target: t,
714
723
  signalName: n,
715
724
  payload: r
716
725
  });
717
- return await a.runPromise(O.completeSuspendingSignal({
726
+ return await a.runPromise(k.completeSuspendingSignal({
718
727
  store: e.store,
719
728
  target: t,
720
729
  signalName: n,
721
730
  payload: r
722
731
  })).catch(() => {}), i;
723
732
  },
724
- update: (t, n, r, i) => O.sendWorkflowUpdate({
733
+ update: (t, n, r, i) => k.sendWorkflowUpdate({
725
734
  store: e.store,
726
- recorder: k,
735
+ recorder: A,
727
736
  target: t,
728
737
  updateName: n,
729
738
  payload: r,
730
739
  ...i === void 0 ? {} : { options: i }
731
740
  }),
732
- listRuns: (t) => b(e.store, t),
733
- retry: (t, n) => Ae({
741
+ listRuns: (t) => Oe(e.store, t),
742
+ retry: (t, n) => je({
734
743
  store: e.store,
735
744
  workflows: e.discovered.workflows ?? [],
736
745
  runPromise: (e) => a.runPromise(e)
737
746
  }, t, n)
738
747
  }) : void 0;
739
748
  }
740
- let ze = j.mergeAll(ke.toLayer(C), je, Me), Ve = ee(C, e.discovered.queries.map((e) => e.descriptor.name), f), We = j.mergeAll(ke.toLayer(Ve), je, Me), I = e.observability, Ye = await qe({
741
- ...I && I.spanProcessors.length > 0 ? { extraSpanProcessors: I.spanProcessors } : {},
742
- ...I && I.metricReaders.length > 0 ? { extraMetricReaders: I.metricReaders } : {},
743
- ...I && Object.keys(I.resourceAttributes).length > 0 ? { resourceAttributes: I.resourceAttributes } : {},
744
- ...I && I.sampler !== void 0 ? { sampler: I.sampler } : {}
745
- }), Xe = !1, Ze = e.store.ping ? () => e.store.ping().then(() => !0).catch(() => !1) : void 0, { server: Qe, shutdown: nt } = Tt({
746
- group: ke,
747
- handlersLayer: ze,
748
- httpHandlersLayer: We,
749
+ let Re = M.mergeAll(Ee.toLayer(T), De, ke), Be = S(T, e.discovered.queries.map((e) => e.descriptor.name), f), Ue = M.mergeAll(Ee.toLayer(Be), De, ke), L = e.observability, Je = await Ke({
750
+ ...L && L.spanProcessors.length > 0 ? { extraSpanProcessors: L.spanProcessors } : {},
751
+ ...L && L.metricReaders.length > 0 ? { extraMetricReaders: L.metricReaders } : {},
752
+ ...L && Object.keys(L.resourceAttributes).length > 0 ? { resourceAttributes: L.resourceAttributes } : {},
753
+ ...L && L.sampler !== void 0 ? { sampler: L.sampler } : {}
754
+ }), Ye = !1, Xe = e.store.ping ? () => e.store.ping().then(() => !0).catch(() => !1) : void 0, { server: Ze, shutdown: tt } = Dt({
755
+ group: Ee,
756
+ handlersLayer: Re,
757
+ httpHandlersLayer: Ue,
749
758
  port: e.port ?? 4e3,
759
+ ...e.host === void 0 ? {} : { host: e.host },
750
760
  path: e.path ?? "/ws",
751
- tracerLayer: Ye.layer,
761
+ tracerLayer: Je.layer,
752
762
  healthCheck: {
753
- isReady: () => Xe,
754
- ...Ze ? { ping: Ze } : {}
763
+ isReady: () => Ye,
764
+ ...Xe ? { ping: Xe } : {}
755
765
  },
756
- ...Ee.length > 0 ? { httpRoutes: Ee } : {},
766
+ ...we.length > 0 ? { httpRoutes: we } : {},
757
767
  ...e.getStore === void 0 ? {} : { getStore: e.getStore },
758
- ...oe.size > 0 ? { webhookRoutes: oe } : {},
768
+ ...ie.size > 0 ? { webhookRoutes: ie } : {},
759
769
  ...e.inspectRoute === void 0 ? {} : { inspectRoute: e.inspectRoute }
760
770
  });
761
- if (await Ge(Qe), (e.discovered.schedules?.length ?? 0) > 0) {
762
- let t = (e.scheduleCoordination ?? "single") === "advisoryLock" ? tt(e.store, e.scheduleReplicaId ?? `pid-${process.pid}`) : wt;
763
- o = await Et(e.discovered.schedules ?? [], {
771
+ if (await We(Ze), (e.discovered.schedules?.length ?? 0) > 0) {
772
+ let t = (e.scheduleCoordination ?? "single") === "advisoryLock" ? et(e.store, e.scheduleReplicaId ?? `pid-${process.pid}`) : Et;
773
+ o = await B(e.discovered.schedules ?? [], {
764
774
  store: e.store,
765
775
  coordinator: t,
766
776
  defaultTrigger: e.scheduleDefaultTrigger ?? "self",
@@ -768,7 +778,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
768
778
  armSelf: e.scheduleArmSelf ?? !0,
769
779
  dormancy: e.dormancy ?? "always-on",
770
780
  ...e.dormancyTenantId === void 0 ? {} : { dormancyTenantId: e.dormancyTenantId },
771
- buildContext: ({ traceId: t, scheduleName: n, subject: r }) => y({
781
+ buildContext: ({ traceId: t, scheduleName: n, subject: r }) => b({
772
782
  subject: r,
773
783
  traceId: t
774
784
  }, e.store, void 0, `schedule:${n}`),
@@ -788,10 +798,10 @@ var hn = "VoltroBootRefusal", gn = (e) => {
788
798
  ...e.onScheduleRunEvent === void 0 ? {} : { onRunEvent: e.onScheduleRunEvent }
789
799
  }), e.onSchedulerReady?.(o);
790
800
  }
791
- let rt = e.log ?? M({ scope: "voltro:serve" }), it, at;
792
- if ((e.discovered.subscribers?.length ?? 0) > 0 && (it = de(e.discovered.subscribers ?? [], e.store, rt.child("subscribe"), e.schemaRegistry)), (e.discovered.reactions?.length ?? 0) > 0) {
793
- let t = rt.child("reaction");
794
- at = ve(e.discovered.reactions ?? [], e.store, {
801
+ let nt = e.log ?? N({ scope: "voltro:serve" }), rt, it;
802
+ if ((e.discovered.subscribers?.length ?? 0) > 0 && (rt = h(e.discovered.subscribers ?? [], e.store, nt.child("subscribe"), e.schemaRegistry)), (e.discovered.reactions?.length ?? 0) > 0) {
803
+ let t = nt.child("reaction");
804
+ it = oe(e.discovered.reactions ?? [], e.store, {
795
805
  runAct: async (n, r) => {
796
806
  if (n.kind === "workflow") {
797
807
  if (d === void 0) {
@@ -805,10 +815,10 @@ var hn = "VoltroBootRefusal", gn = (e) => {
805
815
  }).start(n.workflow, e);
806
816
  return;
807
817
  }
808
- await _(n.agent, r, {
818
+ await v(n.agent, r, {
809
819
  findAgentSend: (t) => e.discovered.actions.find((e) => e.descriptor.name === `${t}.send`),
810
- runAction: (e, t, n) => Promise.resolve(ge(e, t, n)),
811
- makeSubject: (e) => Lt(e),
820
+ runAction: (e, t, n) => Promise.resolve(he(e, t, n)),
821
+ makeSubject: (e) => Rt(e),
812
822
  now: () => Date.now(),
813
823
  log: t
814
824
  });
@@ -816,7 +826,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
816
826
  checkBudget: async (n, r) => {
817
827
  try {
818
828
  let { requireAiBudget: t } = await import("@voltro/ai");
819
- return (await A.runPromise(A.either(t(e.store, {
829
+ return (await j.runPromise(j.either(t(e.store, {
820
830
  tenantId: n,
821
831
  limitUsd: r
822
832
  }))))._tag === "Right";
@@ -826,97 +836,97 @@ var hn = "VoltroBootRefusal", gn = (e) => {
826
836
  }
827
837
  }, t);
828
838
  }
829
- let ot;
830
- return (e.discovered.aggregates?.length ?? 0) > 0 && (ot = await ne({
839
+ let at;
840
+ return (e.discovered.aggregates?.length ?? 0) > 0 && (at = await m({
831
841
  discovered: e.discovered.aggregates ?? [],
832
842
  store: e.store,
833
- log: rt.child("aggregate"),
843
+ log: nt.child("aggregate"),
834
844
  ...e.analytics === void 0 ? {} : { analytics: e.analytics },
835
845
  ...e.aggregateStorage === void 0 ? {} : { storage: e.aggregateStorage },
836
846
  ...e.aggregateCoordinator === void 0 ? {} : { coordinator: e.aggregateCoordinator }
837
- }), ue = j.succeed(N, ot.registry)), Xe = !0, e.bootTiming?.mark("ready"), {
847
+ }), le = M.succeed(P, at.registry)), Ye = !0, e.bootTiming?.mark("ready"), {
838
848
  dispatcher: t,
839
- server: Qe,
849
+ server: Ze,
840
850
  scheduler: o,
841
851
  close: async () => {
842
- Xe = !1, ot?.detach(), at?.(), it?.(), await o?.shutdown(), t.close(), await a?.dispose(), await new Promise((e) => Qe.close(() => e())), await nt();
852
+ Ye = !1, at?.detach(), it?.(), rt?.(), await o?.shutdown(), t.close(), await a?.dispose(), await new Promise((e) => Ze.close(() => e())), await tt();
843
853
  }
844
854
  };
845
- }, $ = M({ scope: "voltro:serve" }), Pn = (e, t, n) => (e === "production" || e === "staging") && t !== "memory" && n !== "0", Fn = Pe, In = async (e) => {
846
- let t = D(process.cwd());
847
- if (ze(t)) {
855
+ }, $ = N({ scope: "voltro:serve" }), Fn = (e, t, n) => (e === "production" || e === "staging") && t !== "memory" && n !== "0", In = Ne, Ln = async (e) => {
856
+ let t = k(process.cwd());
857
+ if (Re(t)) {
848
858
  let n;
849
859
  try {
850
- let e = await import(Ie(t).href);
860
+ let e = await import(Fe(t).href);
851
861
  typeof e.runServe == "function" ? n = e.runServe : $.warn("serve bundle has no runServe export — using the standard serve path");
852
862
  } catch (e) {
853
863
  $.warn("serve bundle failed to load — using the standard serve path", {}, e);
854
864
  }
855
865
  if (n) return $.info("serve: booting from the precompiled serve bundle"), n(e);
856
866
  }
857
- return Ln(e);
858
- }, Ln = async (ee) => {
859
- let p = k();
867
+ return Rn(e);
868
+ }, Rn = async (ee) => {
869
+ let m = A();
860
870
  process.env.NODE_ENV || (process.env.NODE_ENV = "production");
861
871
  try {
862
- qt();
872
+ Jt();
863
873
  } catch (e) {
864
- throw gn(e instanceof Error ? e.message : String(e));
874
+ throw _n(e instanceof Error ? e.message : String(e));
865
875
  }
866
- let m = process.cwd(), ne = Number(process.env.PORT ?? Fn(ee, "--port") ?? 4e3), g = await he(m);
867
- xt(bt(g?.secrets)), await e({
868
- rawEnv: g?.env,
876
+ let h = process.cwd(), oe = Number(process.env.PORT ?? In(ee, "--port") ?? 4e3), v = await pe(h);
877
+ Ct(xt(v?.secrets)), await e({
878
+ rawEnv: v?.env,
869
879
  appType: "api",
870
- root: m,
880
+ root: h,
871
881
  log: $,
872
882
  generateTypes: !1
873
- }), p.mark("config");
874
- 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 = O(m);
875
- if (!i() && ze(de)) try {
876
- let e = await import(Ie(de).href);
883
+ }), m.mark("config");
884
+ let y = (process.env.DB_DIALECT ?? v?.store ?? "memory").toLowerCase(), se = (y === "mariadb" || y === "postgres" || y === "mssql") && (process.env.CDC ?? "1") !== "0", ce = y === "mariadb" ? "mariadb" : y === "mssql" ? "mssql" : void 0, de = Me(h);
885
+ if (!i() && Re(de)) try {
886
+ let e = await import(Fe(de).href);
877
887
  if (e.modules) {
878
888
  let t = {};
879
- for (let [n, r] of Object.entries(e.modules)) t[Fe(m, n)] = r;
889
+ for (let [n, r] of Object.entries(e.modules)) t[Pe(h, n)] = r;
880
890
  r(t), $.info("precompiled api bundle loaded", { modules: Object.keys(t).length });
881
891
  }
882
892
  } catch (e) {
883
893
  $.warn("precompiled api bundle failed to load — falling back to source", {}, e);
884
894
  }
885
- let b = await C(m), S = await Oe(b, { cdc: ce && le !== void 0 });
895
+ let x = await C(h), S = await Ee(x, { cdc: se && ce !== void 0 });
886
896
  {
887
- let e = h(S.serverOnlyLeaks, re(process.env, "strict"), Ze, "`voltro serve`");
888
- if (e.action === "fail") throw gn(e.message ?? "");
897
+ let e = _(S.serverOnlyLeaks, g(process.env, "strict"), Xe, "`voltro serve`");
898
+ if (e.action === "fail") throw _n(e.message ?? "");
889
899
  e.action === "warn" && $.warn(e.message ?? "");
890
900
  }
891
- let ve = b.filter((e) => je.test(e)), w = ve.length > 0 ? await ue(ve, $.child("webhooks")) : void 0, we = s({
901
+ let ve = x.filter((e) => le.test(e)), D = ve.length > 0 ? await te(ve, $.child("webhooks")) : void 0, Oe = s({
892
902
  mix: S.featureMix,
893
- plugins: g?.plugins ?? [],
894
- cdc: ce && le !== void 0,
895
- ...le ? { cdcDialect: le } : {}
896
- }), Ae = g?.analytics !== void 0 && g.analytics.kind !== "noop" && _ !== "memory" ? (await n(_)).makeSqlLayer(T()) : void 0, E = await ie({
897
- spec: g?.analytics,
898
- sqlLayer: Ae,
903
+ plugins: v?.plugins ?? [],
904
+ cdc: se && ce !== void 0,
905
+ ...ce ? { cdcDialect: ce } : {}
906
+ }), je = v?.analytics !== void 0 && v.analytics.kind !== "noop" && y !== "memory" ? (await n(y)).makeSqlLayer(E()) : void 0, O = await ae({
907
+ spec: v?.analytics,
908
+ sqlLayer: je,
899
909
  log: $
900
- }), D = (() => {
910
+ }), k = (() => {
901
911
  let e = new Set(S.tables.map((e) => e.tableName)), t = [...S.tables];
902
- for (let n of [...we, ...E.tables]) e.has(n.tableName) || (e.add(n.tableName), t.push(n));
912
+ for (let n of [...Oe, ...O.tables]) e.has(n.tableName) || (e.add(n.tableName), t.push(n));
903
913
  return t;
904
914
  })();
905
- for (let e of D) jt(e);
906
- let Pe = (process.env.NODE_ENV ?? "").toLowerCase();
907
- if (Pn(Pe, _, process.env.VOLTRO_AUTO_MIGRATE)) {
908
- let e = (await n(_)).makeSqlLayer(T()), t = await A.runPromise(kt.SqlClient.pipe(A.flatMap((e) => Qt(e, D, {
909
- appliedBy: `serve:${Pe}`,
915
+ for (let e of k) Mt(e);
916
+ let Ne = (process.env.NODE_ENV ?? "").toLowerCase();
917
+ if (Fn(Ne, y, process.env.VOLTRO_AUTO_MIGRATE)) {
918
+ let e = (await n(y)).makeSqlLayer(E()), t = await j.runPromise(At.SqlClient.pipe(j.flatMap((e) => $t(e, k, {
919
+ appliedBy: `serve:${Ne}`,
910
920
  environment: "prod",
911
- dialectId: _
912
- })), A.provide(e)));
913
- 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, _));
921
+ dialectId: y
922
+ })), j.provide(e)));
923
+ t.kind === "prod-mismatch" && ($.error(Qt(t, y)), $.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(Qt(t, y));
914
924
  }
915
- let M = mt(D);
916
- p.mark("discover");
917
- let N = await x(g, void 0), Be = Dt(N, _);
918
- for (let e of Te({
919
- dialect: String(g?.store ?? process.env.DB_DIALECT ?? "postgres"),
925
+ let N = mt(k);
926
+ m.mark("discover");
927
+ let P = await _e(v, void 0), ze = Ot(P, y);
928
+ for (let e of me({
929
+ dialect: String(v?.store ?? process.env.DB_DIALECT ?? "postgres"),
920
930
  changeStrategy: (process.env.CDC ?? "1") === "0" ? "inline" : "cdc",
921
931
  dbUrl: process.env.DB_URL,
922
932
  tables: S.tables.map((e) => ({
@@ -928,105 +938,105 @@ var hn = "VoltroBootRefusal", gn = (e) => {
928
938
  return t === void 0 ? [] : typeof t == "string" ? [t] : [...t];
929
939
  })
930
940
  })) e.level === "warn" ? $.warn(e.message) : $.info(e.message);
931
- 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: He, invalidationBus: Ue, snapshotCache: Ge, cache: P, backend: Ke, dispose: F } = await xe({ env: process.env });
933
- $.info(`cache backend resolved: ${Ke}` + (Ke === "redis" ? ` (driver ${process.env.CACHE_REDIS_DRIVER ?? "resp"})` : " — in-process, not cross-instance")), N.onChange((e) => {
934
- A.runFork(Ue.publish(e.table));
935
- }), 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: qe, service: Je } = await at({ store: N });
937
- p.mark("store");
938
- let $e = We({
939
- store: N,
940
- sink: E.sink,
941
+ v?.cache && !process.env.CACHE_BACKEND && (process.env.CACHE_BACKEND = v.cache), v?.cacheRedisUrl && !process.env.CACHE_REDIS_URL && (process.env.CACHE_REDIS_URL = v.cacheRedisUrl), v?.cacheRedisDriver && !process.env.CACHE_REDIS_DRIVER && (process.env.CACHE_REDIS_DRIVER = v.cacheRedisDriver), v?.cacheKeyPrefix && !process.env.CACHE_KEY_PREFIX && (process.env.CACHE_KEY_PREFIX = v.cacheKeyPrefix);
942
+ let { service: Ve, invalidationBus: He, snapshotCache: We, cache: F, backend: Ge, dispose: I } = await Ce({ env: process.env });
943
+ $.info(`cache backend resolved: ${Ge}` + (Ge === "redis" ? ` (driver ${process.env.CACHE_REDIS_DRIVER ?? "resp"})` : " — in-process, not cross-instance")), P.onChange((e) => {
944
+ j.runFork(He.publish(e.table));
945
+ }), v?.kv && !process.env.KV_BACKEND && (process.env.KV_BACKEND = v.kv), v?.kvRedisUrl && !process.env.KV_REDIS_URL && (process.env.KV_REDIS_URL = v.kvRedisUrl), v?.kvKeyPrefix && !process.env.KV_KEY_PREFIX && (process.env.KV_KEY_PREFIX = v.kvKeyPrefix);
946
+ let { kv: Ke, service: qe } = await it({ store: P });
947
+ m.mark("store");
948
+ let Qe = Ue({
949
+ store: P,
950
+ sink: O.sink,
941
951
  log: $
942
- }), et = pe({
943
- store: N,
944
- dialect: _
945
- }), L = g?.plugins ?? [], st = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, ct, lt;
946
- _ !== "memory" && (ct = Re.make((await n(_)).makeSqlLayer(T())), lt = await ct.runPromise(kt.SqlClient));
947
- let ut = ot({
952
+ }), $e = be({
953
+ store: P,
954
+ dialect: y
955
+ }), R = v?.plugins ?? [], ot = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, st, ct;
956
+ y !== "memory" && (st = Le.make((await n(y)).makeSqlLayer(E())), ct = await st.runPromise(At.SqlClient));
957
+ let lt = at({
948
958
  coordinator: [
949
959
  "postgres",
950
960
  "mariadb",
951
961
  "mysql",
952
962
  "mssql"
953
- ].includes(_) ? tt(N, st, $) : wt,
954
- replicaId: st,
963
+ ].includes(y) ? et(P, ot, $) : Et,
964
+ replicaId: ot,
955
965
  log: $
956
- }), dt = [], ft = {
957
- ...lt ? { sql: lt } : {},
966
+ }), ut = [], dt = {
967
+ ...ct ? { sql: ct } : {},
958
968
  scheduleCoordinated: (e, t, n) => {
959
- let r = ut(e, t, n);
960
- return dt.push(r), r;
969
+ let r = lt(e, t, n);
970
+ return ut.push(r), r;
961
971
  }
962
972
  };
963
- for (let e of L) e.bindDataStore?.(N, ft);
964
- let pt = L.filter((e) => typeof e.onChangeEvent == "function");
965
- if (pt.length > 0) {
966
- let e = N.changeScope ?? "local";
967
- N.onChange((t) => {
968
- let n = y(t, e);
969
- for (let e of pt) A.runFork(e.onChangeEvent(n).pipe(A.catchAllCause((t) => A.sync(() => $.warn(`plugin ${e.name} onChangeEvent failed`, { error: Le.pretty(t) })))));
973
+ for (let e of R) e.bindDataStore?.(P, dt);
974
+ let ft = R.filter((e) => typeof e.onChangeEvent == "function");
975
+ if (ft.length > 0) {
976
+ let e = P.changeScope ?? "local";
977
+ P.onChange((t) => {
978
+ let n = ne(t, e);
979
+ 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
980
  });
971
981
  }
972
- let ht = me({
973
- plugins: L,
974
- appName: g?.name ?? "voltro-api",
982
+ let pt = Ae({
983
+ plugins: R,
984
+ appName: v?.name ?? "voltro-api",
975
985
  appType: "api",
976
986
  voltroVersion: process.env.npm_package_version ?? "0.0.0",
977
987
  log: $
978
988
  });
979
- L.length && await ht.activate(), p.mark("plugins");
980
- let gt = await ht.gatherObservability(), _t = await _e(N, g, _, {
989
+ R.length && await pt.activate(), m.mark("plugins");
990
+ let ht = await pt.gatherObservability(), gt = await ge(P, v, y, {
981
991
  info: (e, t) => process.stdout.write(`[broadcast] ${e} ${t ? JSON.stringify(t) : ""}\n`),
982
992
  warn: (e, t) => process.stderr.write(`[broadcast] ${e} ${t ? JSON.stringify(t) : ""}\n`),
983
993
  debug: () => {}
984
- }), R = g?.apiKeys, yt = (typeof R == "object" ? R.prefix : void 0) ?? "voltro_", z = R ? Ye(N) : void 0, B = z ? rt({ flush: it(z) }) : void 0;
985
- B && vt(() => B.shutdown());
986
- let St = z ? nt(z, {
987
- prefix: yt,
988
- ...B ? { usage: B } : {}
989
- }) : void 0, Ct = St ? [Qe(St, { prefix: yt })] : [], Tt = Ce([...g?.auth?.strategies ?? [], ...Ct], $t(g?.plugins ?? []), g?.auth?.anonymousTenantRequired ?? !1, g?.auth?.resolveScopes, () => Be), Et = [...g?.restRoutes ?? [], ...St ? Ve(St, (typeof R == "object" ? R.managementPath : void 0) ?? "/v1/api-keys") : []], V = g?.idempotency, Ot = V ? {
990
- store: Xe(N),
991
- header: (typeof V == "object" ? V.header : void 0) ?? "Idempotency-Key",
992
- ttlMs: (typeof V == "object" ? V.ttlMs : void 0) ?? 864e5
993
- } : void 0, At = Et.length > 0 ? tn(Et, {
994
- store: N,
994
+ }), z = v?.apiKeys, _t = (typeof z == "object" ? z.prefix : void 0) ?? "voltro_", yt = z ? Je(P) : void 0, bt = yt ? nt({ flush: rt(yt) }) : void 0;
995
+ bt && vt(() => bt.shutdown());
996
+ let St = yt ? tt(yt, {
997
+ prefix: _t,
998
+ ...bt ? { usage: bt } : {}
999
+ }) : void 0, wt = St ? [Ze(St, { prefix: _t })] : [], Tt = Se([...v?.auth?.strategies ?? [], ...wt], en(v?.plugins ?? []), v?.auth?.anonymousTenantRequired ?? !1, v?.auth?.resolveScopes, () => ze), Dt = [...v?.restRoutes ?? [], ...St ? Be(St, (typeof z == "object" ? z.managementPath : void 0) ?? "/v1/api-keys") : []], B = v?.idempotency, V = B ? {
1000
+ store: Ye(P),
1001
+ header: (typeof B == "object" ? B.header : void 0) ?? "Idempotency-Key",
1002
+ ttlMs: (typeof B == "object" ? B.ttlMs : void 0) ?? 864e5
1003
+ } : void 0, kt = Dt.length > 0 ? nn(Dt, {
1004
+ store: P,
995
1005
  resolveSubject: (e) => Tt({
996
1006
  headers: e,
997
1007
  clientId: -1
998
1008
  }),
999
- ...Ot ? { idempotency: Ot } : {}
1000
- }) : [], H = L.map((e) => e.services).filter((e) => e !== void 0), Mt = j.mergeAll(De({
1001
- analyticsLayer: E.layer,
1002
- cacheService: He,
1003
- kvService: Je,
1004
- pluginServices: H,
1005
- userLayers: g?.layers ?? []
1006
- }), ge(g?.http ?? {})), U = g?.scheduling ?? {}, Nt = U.trigger ?? "self", Pt = /* @__PURE__ */ new Set([
1009
+ ...V ? { idempotency: V } : {}
1010
+ }) : [], jt = R.map((e) => e.services).filter((e) => e !== void 0), H = M.mergeAll(T({
1011
+ analyticsLayer: O.layer,
1012
+ cacheService: Ve,
1013
+ kvService: qe,
1014
+ pluginServices: jt,
1015
+ userLayers: v?.layers ?? []
1016
+ }), Te(v?.http ?? {})), Nt = v?.scheduling ?? {}, U = Nt.trigger ?? "self", Pt = /* @__PURE__ */ new Set([
1007
1017
  "postgres",
1008
1018
  "mysql",
1009
1019
  "mariadb",
1010
1020
  "mssql"
1011
- ]), Ft = U.coordination ?? (Pt.has(_) ? "advisoryLock" : "single"), W = Ft === "cluster" && Pt.has(_), It = W ? "cluster" : Ft === "advisoryLock" && Pt.has(_) ? "advisoryLock" : "single";
1012
- Ft === "cluster" && !W && $.warn("scheduling.coordination=cluster needs a sql-backed store except sqlite — falling back to single"), Ft === "advisoryLock" && !Pt.has(_) && $.warn("scheduling.coordination=advisoryLock needs a SQL store (the claim-row gate) — falling back to single");
1013
- let G, K = S.workflows.length > 0 || S.workflowWorkers.length > 0 || S.eventTriggers.length > 0 || (w?.outgoing.length ?? 0) > 0 || W, Lt;
1014
- if (K) {
1015
- if (_ === "mssql") {
1016
- let e = await fe(process.cwd());
1021
+ ]), Ft = Nt.coordination ?? (Pt.has(y) ? "advisoryLock" : "single"), W = Ft === "cluster" && Pt.has(y), It = W ? "cluster" : Ft === "advisoryLock" && Pt.has(y) ? "advisoryLock" : "single";
1022
+ Ft === "cluster" && !W && $.warn("scheduling.coordination=cluster needs a sql-backed store except sqlite — falling back to single"), Ft === "advisoryLock" && !Pt.has(y) && $.warn("scheduling.coordination=advisoryLock needs a SQL store (the claim-row gate) — falling back to single");
1023
+ let G, Lt = S.workflows.length > 0 || S.workflowWorkers.length > 0 || S.eventTriggers.length > 0 || (D?.outgoing.length ?? 0) > 0 || W, K;
1024
+ if (Lt) {
1025
+ if (y === "mssql") {
1026
+ let e = await re(process.cwd());
1017
1027
  e && $.warn(e);
1018
1028
  }
1019
- let [{ WorkflowEngine: e }, { makeClusterCronLayer: t, workflowEngineLayer: r, resolveRunnerStorage: i }] = await Promise.all([import("@effect/workflow"), import("@voltro/workflow/cluster")]), a = W ? S.schedules.filter((e) => (e.trigger ?? Nt) === "self").map((e) => t({
1029
+ let [{ WorkflowEngine: e }, { makeClusterCronLayer: t, workflowEngineLayer: r, resolveRunnerStorage: i }] = await Promise.all([import("@effect/workflow"), import("@voltro/workflow/cluster")]), a = W ? S.schedules.filter((e) => (e.trigger ?? U) === "self").map((e) => t({
1020
1030
  name: e.name,
1021
- cron: I(e),
1031
+ cron: L(e),
1022
1032
  execute: async () => {
1023
1033
  await G?.fireFromCluster(e.name);
1024
1034
  }
1025
1035
  })) : [];
1026
- Lt = _ === "memory" ? e.layerMemory : await (async () => {
1027
- let e = await n(_), t = i({ sqliteFamily: e.id === "sqlite" || e.id === "turso" });
1036
+ K = y === "memory" ? e.layerMemory : await (async () => {
1037
+ let e = await n(y), t = i({ sqliteFamily: e.id === "sqlite" || e.id === "turso" });
1028
1038
  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
- sqlClientLayer: e.makeSqlLayer(T()),
1039
+ sqlClientLayer: e.makeSqlLayer(E()),
1030
1040
  runnerStorage: t,
1031
1041
  dialectId: e.id,
1032
1042
  ...process.env.VOLTRO_WORKFLOW_RUNNER_PORT ? { runnerListenPort: Number(process.env.VOLTRO_WORKFLOW_RUNNER_PORT) } : {},
@@ -1034,69 +1044,73 @@ var hn = "VoltroBootRefusal", gn = (e) => {
1034
1044
  });
1035
1045
  })();
1036
1046
  }
1037
- let Rt = Me(L, t()), zt = b.filter((e) => /\.subscribe\.tsx?$/.test(e)), q = zt.length > 0 ? await ae(zt, $) : [], Bt = b.filter((e) => /\.reaction\.tsx?$/.test(e)), Vt = Bt.length > 0 ? await se(Bt, $) : [], J = b.filter((e) => u.test(e)), Ht = J.length > 0 ? await Ne(J, $) : [], Ut = b.filter((e) => /\.aggregate\.tsx?$/.test(e)), Y = Ut.length > 0 ? await v(Ut, $) : [], X = ye();
1038
- if (Y.length > 0 && _ !== "memory") try {
1039
- X = f((await n(_)).makeSqlLayer(T()));
1047
+ let Rt = fe(R, t()), zt = x.filter((e) => /\.subscribe\.tsx?$/.test(e)), Bt = zt.length > 0 ? await ue(zt, $) : [], q = x.filter((e) => /\.reaction\.tsx?$/.test(e)), Vt = q.length > 0 ? await b(q, $) : [], Ht = x.filter((e) => u.test(e)), Ut = Ht.length > 0 ? await p(Ht, $) : [], J = x.filter((e) => /\.aggregate\.tsx?$/.test(e)), Wt = J.length > 0 ? await w(J, $) : [], Y = f();
1048
+ if (Wt.length > 0 && y !== "memory") try {
1049
+ Y = ye((await n(y)).makeSqlLayer(E()));
1040
1050
  } catch (e) {
1041
1051
  $.warn("aggregate: SQL storage init failed — falling back to in-process", { err: String(e) });
1042
1052
  }
1043
- let Wt = _ === "memory" ? wt : tt(N, `aggregate@${process.pid}`, $), Z = [], Gt = [], Kt = b.filter((e) => l.test(e));
1053
+ let Gt = y === "memory" ? Et : et(P, `aggregate@${process.pid}`, $), X = [], Z = [], Kt = x.filter((e) => l.test(e));
1044
1054
  if (Kt.length > 0) {
1045
- let e = $.child("agent"), t = b.filter((e) => a.test(e));
1055
+ let e = $.child("agent"), t = x.filter((e) => a.test(e));
1046
1056
  t.length > 0 && await o(t, e);
1047
1057
  let n = await c(Kt, e);
1048
- for (let e of n.agents) for (let t of te(e)) (t.kind === "action" ? Z : Gt).push({
1058
+ for (let e of n.agents) for (let t of ke(e)) (t.kind === "action" ? X : Z).push({
1049
1059
  file: t.file,
1050
1060
  descriptor: t.descriptor,
1051
1061
  executor: t.executor
1052
1062
  });
1053
1063
  n.agents.length > 0 && e.info("synthesized agent routes", { agents: n.agents.map((e) => e.descriptor.name) });
1054
1064
  }
1055
- p.mark("workflow");
1056
- let Jt = await Nn({
1057
- bootTiming: p,
1065
+ m.mark("workflow");
1066
+ let qt = await Pn({
1067
+ bootTiming: m,
1068
+ ...V ? { idempotency: {
1069
+ store: V.store,
1070
+ ttlMs: V.ttlMs
1071
+ } } : {},
1058
1072
  discovered: {
1059
- queries: [...S.queries, ...Gt],
1073
+ queries: [...S.queries, ...Z],
1060
1074
  mutations: S.mutations,
1061
- actions: [...S.actions, ...Z],
1075
+ actions: [...S.actions, ...X],
1062
1076
  streams: S.streams,
1063
1077
  workflows: S.workflows,
1064
1078
  workflowWorkers: S.workflowWorkers,
1065
1079
  eventTriggers: S.eventTriggers,
1066
1080
  schedules: S.schedules,
1067
- subscribers: q,
1068
- outboxHandlers: Ht,
1081
+ subscribers: Bt,
1082
+ outboxHandlers: Ut,
1069
1083
  connections: S.connections,
1070
1084
  reactions: Vt,
1071
- aggregates: Y,
1072
- ...w === void 0 ? {} : { webhooks: w }
1085
+ aggregates: Wt,
1086
+ ...D === void 0 ? {} : { webhooks: D }
1073
1087
  },
1074
1088
  log: $,
1075
- analytics: E.sink,
1076
- aggregateStorage: X,
1077
- aggregateCoordinator: Wt,
1078
- store: N,
1079
- kv: qe,
1080
- cache: P,
1081
- snapshotCache: Ge,
1082
- schemaRegistry: M,
1089
+ analytics: O.sink,
1090
+ aggregateStorage: Y,
1091
+ aggregateCoordinator: Gt,
1092
+ store: P,
1093
+ kv: Ke,
1094
+ cache: F,
1095
+ snapshotCache: We,
1096
+ schemaRegistry: N,
1083
1097
  tenantScopedTables: S.tenantScopedTables,
1084
1098
  softDeleteScopedTables: S.softDeleteScopedTables,
1085
- dataTransferSnapshot: Xt(D),
1086
- dataTransferDialect: _,
1087
- tenantIsolation: (process.env.VOLTRO_TENANT_ISOLATION ?? g?.tenancy?.isolation) === "namespace" ? "namespace" : "shared-schema",
1099
+ dataTransferSnapshot: Zt(k),
1100
+ dataTransferDialect: y,
1101
+ tenantIsolation: (process.env.VOLTRO_TENANT_ISOLATION ?? v?.tenancy?.isolation) === "namespace" ? "namespace" : "shared-schema",
1088
1102
  resolveSubject: (e, t) => Tt({
1089
1103
  headers: e,
1090
1104
  clientId: t
1091
1105
  }),
1092
- httpRoutes: [...L.flatMap((e) => e.httpRoutes ?? []), ...At],
1093
- getStore: () => Be,
1094
- ...Mt ? { baseLayer: Mt } : {},
1095
- ...Lt === void 0 ? {} : { workflowEngineLayer: Lt },
1096
- scheduleDefaultTrigger: Nt,
1106
+ httpRoutes: [...R.flatMap((e) => e.httpRoutes ?? []), ...kt],
1107
+ getStore: () => ze,
1108
+ ...H ? { baseLayer: H } : {},
1109
+ ...K === void 0 ? {} : { workflowEngineLayer: K },
1110
+ scheduleDefaultTrigger: U,
1097
1111
  scheduleCoordination: It,
1098
1112
  scheduleArmSelf: !W,
1099
- dormancy: process.env.VOLTRO_DORMANCY === "sleep" || process.env.VOLTRO_DORMANCY === "always-on" ? process.env.VOLTRO_DORMANCY : g?.dormancy ?? "always-on",
1113
+ dormancy: process.env.VOLTRO_DORMANCY === "sleep" || process.env.VOLTRO_DORMANCY === "always-on" ? process.env.VOLTRO_DORMANCY : v?.dormancy ?? "always-on",
1100
1114
  scheduleReplicaId: process.env.HOSTNAME ?? `pid-${process.pid}`,
1101
1115
  ...Rt === void 0 ? {} : { scheduleFireInterceptor: Rt },
1102
1116
  onSchedulerReady: (e) => {
@@ -1105,15 +1119,15 @@ var hn = "VoltroBootRefusal", gn = (e) => {
1105
1119
  inspectRoute: { handle: (e, t, n, r) => d(e, {
1106
1120
  kind: "api",
1107
1121
  meta: {
1108
- name: g?.name ?? "voltro-api",
1109
- voltroVersion: Ee,
1110
- port: ne,
1122
+ name: v?.name ?? "voltro-api",
1123
+ voltroVersion: we,
1124
+ port: oe,
1111
1125
  mode: "start",
1112
- store: _,
1113
- cdc: ce ? "on" : "off"
1126
+ store: y,
1127
+ cdc: se ? "on" : "off"
1114
1128
  },
1115
- rpc: be(S, m),
1116
- workflows: ke(S, m),
1129
+ rpc: De(S, h),
1130
+ workflows: he(S, h),
1117
1131
  inspectFireSchedule: async ({ name: e, trigger: t }) => {
1118
1132
  if (!G) throw Error("scheduler not started — this app registers no self-triggered schedules (all schedules are trigger:'external', or there are none).");
1119
1133
  return { runId: await G.fireNow(e, t) ?? null };
@@ -1126,19 +1140,19 @@ var hn = "VoltroBootRefusal", gn = (e) => {
1126
1140
  contentType: "application/json",
1127
1141
  body: JSON.stringify({ error: "not an inspect route" })
1128
1142
  } },
1129
- observability: gt,
1130
- port: ne,
1131
- ...g?.transport?.wsPath ? { path: g.transport.wsPath } : {}
1143
+ observability: ht,
1144
+ port: oe,
1145
+ ...v?.transport?.wsPath ? { path: v.transport.wsPath } : {}
1132
1146
  });
1133
- return Se(oe([
1147
+ return ie(xe([
1134
1148
  S.queries,
1135
1149
  S.mutations,
1136
1150
  S.actions,
1137
1151
  S.streams
1138
1152
  ]), (e) => {
1139
1153
  $.warn(e);
1140
- }), $.info(`API listening on :${ne}`, {
1141
- dialect: _,
1154
+ }), $.info(`API listening on :${oe}`, {
1155
+ dialect: y,
1142
1156
  queries: S.queries.length,
1143
1157
  mutations: S.mutations.length,
1144
1158
  actions: S.actions.length,
@@ -1147,15 +1161,15 @@ var hn = "VoltroBootRefusal", gn = (e) => {
1147
1161
  workflowWorkers: S.workflowWorkers.length,
1148
1162
  schedules: S.schedules.length,
1149
1163
  scheduleCoordination: It
1150
- }), p.finish($), vt(async () => {
1151
- for (let e of dt) e.stop();
1152
- $e.detach(), et.stop(), F(), ct?.dispose();
1164
+ }), m.finish($), vt(async () => {
1165
+ for (let e of ut) e.stop();
1166
+ Qe.detach(), $e.stop(), I(), st?.dispose();
1153
1167
  try {
1154
- await ht.deactivate(), await _t?.close(), await E.dispose(), await Jt.close(), await N.close?.();
1168
+ await pt.deactivate(), await gt?.close(), await O.dispose(), await qt.close(), await P.close?.();
1155
1169
  } catch (e) {
1156
1170
  console.error("serve: shutdown step failed, exiting anyway:", e);
1157
1171
  }
1158
1172
  }), await new Promise(() => {}), 0;
1159
1173
  };
1160
1174
  //#endregion
1161
- export { In as n, An as r, Ln as t };
1175
+ export { Ln as n, jn as r, Rn as t };