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