@voltro/cli 0.11.0 → 0.11.1

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