@voltro/runtime 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,24 +1,24 @@
1
1
  import { ENCRYPTED_PREFIX as e, and as t, attachEagerLoads as n, boolean as r, clearRetentions as i, collectSubqueries as a, contains as o, decryptFieldsOnRead as s, deserializeArraysOnRead as c, encryptFieldsForWrite as l, eq as u, evaluatePredicate as d, generateId as f, getRelations as p, getTable as m, gt as h, gte as g, hasEagerLoads as _, id as v, inSet as y, integer as b, isEncrypted as x, isNull as S, json as C, listRetentions as ee, lt as te, lte as ne, neq as w, or as re, queryFor as ie, registerRetention as ae, requireTable as oe, retentionTtlMsFromEnv as se, serializeArraysForWrite as ce, sweepRetention as le, table as T, text as E, timestamp as D, walkLeaves as ue } from "@voltro/database";
2
2
  import { createCipheriv as de, createDecipheriv as fe, createHash as pe, randomBytes as me, randomUUID as he, scryptSync as ge } from "node:crypto";
3
3
  import { EventEmitter as _e } from "node:events";
4
- import { ADMIN_SCOPE as ve, ConnectionInfo as ye, SubjectService as O, UndoConflict as be, UndoForbidden as xe, UndoNotFound as Se, WorkflowRunHandleSchema as Ce, checkGuardsEffect as we, diffRows as Te, effectiveScopes as Ee, hasEffectiveScope as De, isIdKeyed as Oe, publishServerError as ke, requireScope as Ae, systemSubject as je, tsMs as Me } from "@voltro/protocol";
5
- import { createLogger as Ne } from "@voltro/logger";
6
- import { Cause as k, Clock as Pe, Context as Fe, Cron as A, Deferred as Ie, Duration as Le, Effect as j, Either as Re, Exit as ze, Layer as M, ManagedRuntime as Be, Metric as N, MetricBoundaries as Ve, MetricState as He, Option as P, Ref as F, Schema as I, Stream as L, Tracer as Ue } from "effect";
7
- import * as We from "node:http";
8
- import { createServer as Ge } from "node:http";
9
- import { HttpClient as Ke, HttpClientRequest as qe, HttpLayerRouter as R, HttpServer as Je, HttpServerRequest as z, HttpServerResponse as B } from "@effect/platform";
10
- import { NodeContext as Ye, NodeHttpServer as Xe, NodeRuntime as Ze } from "@effect/platform-node";
11
- import { Rpc as Qe, RpcSerialization as $e, RpcServer as et } from "@effect/rpc";
12
- import { defineRestRoute as tt, dispatchSharedPath as nt, requireScope as rt } from "@voltro/protocol/rest";
13
- import { AsyncLocalStorage as it } from "node:async_hooks";
14
- import { SpanKind as at, SpanStatusCode as ot } from "@opentelemetry/api";
15
- import { Kv as st, KvError as ct, KvStore as lt, layerConnections as ut, layerMemory as dt, layerRedis as ft } from "@voltro/kv";
16
- import { apiKeyStrategy as pt } from "@voltro/protocol/apikey";
17
- import { getCurrentWorkflowExecutionId as mt, inspectWorkflow as ht } from "@voltro/workflow";
18
- import { ArrayFormatter as gt } from "effect/ParseResult";
19
- import { spawn as _t } from "node:child_process";
4
+ import { ADMIN_SCOPE as ve, ConnectionInfo as ye, SubjectService as be, UndoConflict as xe, UndoForbidden as Se, UndoNotFound as Ce, WorkflowRunHandleSchema as we, checkGuardsEffect as Te, diffRows as Ee, effectiveScopes as De, hasEffectiveScope as Oe, isIdKeyed as ke, publishServerError as Ae, requireScope as je, setPolicyGuardResolver as Me, systemSubject as Ne, tsMs as Pe } from "@voltro/protocol";
5
+ import { createLogger as O } from "@voltro/logger";
6
+ import { Cause as k, Clock as Fe, Context as Ie, Cron as A, Deferred as Le, Duration as Re, Effect as j, Either as ze, Exit as Be, Layer as M, ManagedRuntime as Ve, Metric as N, MetricBoundaries as He, MetricState as Ue, Option as P, Ref as F, Schema as I, Stream as L, Tracer as We } from "effect";
7
+ import * as Ge from "node:http";
8
+ import { createServer as Ke } from "node:http";
9
+ import { HttpClient as qe, HttpClientRequest as Je, HttpLayerRouter as R, HttpServer as Ye, HttpServerRequest as z, HttpServerResponse as B } from "@effect/platform";
10
+ import { NodeContext as Xe, NodeHttpServer as Ze, NodeRuntime as Qe } from "@effect/platform-node";
11
+ import { Rpc as $e, RpcSerialization as et, RpcServer as tt } from "@effect/rpc";
12
+ import { defineRestRoute as nt, dispatchSharedPath as rt, requireScope as it } from "@voltro/protocol/rest";
13
+ import { AsyncLocalStorage as at } from "node:async_hooks";
14
+ import { SpanKind as ot, SpanStatusCode as st } from "@opentelemetry/api";
15
+ import { Kv as ct, KvError as lt, KvStore as ut, layerConnections as dt, layerMemory as ft, layerRedis as pt } from "@voltro/kv";
16
+ import { apiKeyStrategy as mt } from "@voltro/protocol/apikey";
17
+ import { getCurrentWorkflowExecutionId as ht, inspectWorkflow as gt } from "@voltro/workflow";
18
+ import { ArrayFormatter as _t } from "effect/ParseResult";
19
+ import { spawn as vt } from "node:child_process";
20
20
  //#region src/matcher.ts
21
- var vt = class {
21
+ var yt = class {
22
22
  byTable = /* @__PURE__ */ new Map();
23
23
  register(e) {
24
24
  let t = this.byTable.get(e.table);
@@ -59,7 +59,7 @@ var vt = class {
59
59
  });
60
60
  return { perTable: e };
61
61
  }
62
- }, yt = (e) => {
62
+ }, bt = (e) => {
63
63
  let t = [];
64
64
  for (let n of ue(e)) n.conjunctive && n.path === void 0 && (n.op === "eq" && t.push({
65
65
  column: n.column,
@@ -69,7 +69,7 @@ var vt = class {
69
69
  values: n.value
70
70
  }));
71
71
  return t;
72
- }, bt = (e) => {
72
+ }, xt = (e) => {
73
73
  let t = [];
74
74
  for (let n of ue(e)) n.conjunctive && n.path === void 0 && (n.op === "gt" || n.op === "gte" || n.op === "lt" || n.op === "lte") && t.push({
75
75
  column: n.column,
@@ -77,10 +77,10 @@ var vt = class {
77
77
  threshold: n.value
78
78
  });
79
79
  return t;
80
- }, xt = (e, t) => {
80
+ }, St = (e, t) => {
81
81
  for (let n of ue(e)) if (n.conjunctive && n.path === void 0 && n.op === "eq" && n.column === t) return n.value;
82
82
  return null;
83
- }, St = (e, t) => {
83
+ }, Ct = (e, t) => {
84
84
  let n = [];
85
85
  for (let r of e) {
86
86
  let e = t(r);
@@ -88,8 +88,8 @@ var vt = class {
88
88
  n.push(`${typeof e}:${String(e)}`);
89
89
  }
90
90
  return n.join("|");
91
- }, Ct = (e, t) => e === null || t === null ? null : e === t ? 0 : typeof e == typeof t ? e > t ? 1 : -1 : null, wt = (e, t, n) => {
92
- let r = Ct(e, n);
91
+ }, wt = (e, t) => e === null || t === null ? null : e === t ? 0 : typeof e == typeof t ? e > t ? 1 : -1 : null, Tt = (e, t, n) => {
92
+ let r = wt(e, n);
93
93
  if (r === null) return !1;
94
94
  switch (t) {
95
95
  case "gt": return r > 0;
@@ -97,7 +97,7 @@ var vt = class {
97
97
  case "lt": return r < 0;
98
98
  case "lte": return r <= 0;
99
99
  }
100
- }, Tt = class {
100
+ }, Et = class {
101
101
  columnByTable = /* @__PURE__ */ new Map();
102
102
  rangeByTable = /* @__PURE__ */ new Map();
103
103
  tupleByTable = /* @__PURE__ */ new Map();
@@ -105,9 +105,9 @@ var vt = class {
105
105
  subscriptions = /* @__PURE__ */ new Map();
106
106
  register(e) {
107
107
  this.columnByTable.has(e.table) || this.columnByTable.set(e.table, /* @__PURE__ */ new Map()), this.rangeByTable.has(e.table) || this.rangeByTable.set(e.table, /* @__PURE__ */ new Map()), this.tupleByTable.has(e.table) || this.tupleByTable.set(e.table, /* @__PURE__ */ new Map()), this.unindexedByTable.has(e.table) || this.unindexedByTable.set(e.table, /* @__PURE__ */ new Set());
108
- let t = yt(e.predicate), n = bt(e.predicate);
108
+ let t = bt(e.predicate), n = xt(e.predicate);
109
109
  if (e.usingIndex !== void 0) {
110
- let r = e.usingIndex, i = St(r.fields, (t) => xt(e.predicate, t));
110
+ let r = e.usingIndex, i = Ct(r.fields, (t) => St(e.predicate, t));
111
111
  if (i !== null) {
112
112
  let a = `${r.name}|${i}`, o = this.tupleByTable.get(e.table), s = o.get(a);
113
113
  s || (s = /* @__PURE__ */ new Set(), o.set(a, s)), s.add(e.id), this.subscriptions.set(e.id, {
@@ -252,7 +252,7 @@ var vt = class {
252
252
  }
253
253
  }
254
254
  for (let [e, a] of i) {
255
- let i = St(a, (e) => t[e]);
255
+ let i = Ct(a, (e) => t[e]);
256
256
  if (i === null) continue;
257
257
  let o = r.get(`${e}|${i}`);
258
258
  if (o) for (let e of o) n.add(e);
@@ -266,7 +266,7 @@ var vt = class {
266
266
  let a = this.rangeByTable.get(e);
267
267
  if (a) for (let [e, r] of a) {
268
268
  let i = t[e];
269
- if (i !== null) for (let [e, t] of r) for (let r of t) wt(i, e, r.threshold) && n.add(r.subId);
269
+ if (i !== null) for (let [e, t] of r) for (let r of t) Tt(i, e, r.threshold) && n.add(r.subId);
270
270
  }
271
271
  return n;
272
272
  }
@@ -275,7 +275,7 @@ var vt = class {
275
275
  let e = t[n.column];
276
276
  if (n.kind === "eq") {
277
277
  if (e !== n.value) return !1;
278
- } else if (!wt(e, n.op, n.threshold)) return !1;
278
+ } else if (!Tt(e, n.op, n.threshold)) return !1;
279
279
  }
280
280
  return !0;
281
281
  }
@@ -297,23 +297,23 @@ var vt = class {
297
297
  }
298
298
  return i;
299
299
  }
300
- }, Et = (e) => {
300
+ }, Dt = (e) => {
301
301
  if (e == null) return null;
302
- if (Array.isArray(e)) return e.map(Et);
302
+ if (Array.isArray(e)) return e.map(Dt);
303
303
  if (typeof e == "object") {
304
304
  let t = e, n = Object.keys(t).sort(), r = {};
305
- for (let e of n) r[e] = Et(t[e]);
305
+ for (let e of n) r[e] = Dt(t[e]);
306
306
  return r;
307
307
  }
308
308
  return e;
309
- }, Dt = (e, t, n) => {
310
- let r = Et({
309
+ }, Ot = (e, t, n) => {
310
+ let r = Dt({
311
311
  table: e,
312
312
  predicate: t,
313
313
  indexHint: n ?? null
314
314
  });
315
315
  return pe("sha256").update(JSON.stringify(r)).digest("hex").slice(0, 16);
316
- }, Ot = class {
316
+ }, kt = class {
317
317
  matcher;
318
318
  byFingerprint = /* @__PURE__ */ new Map();
319
319
  byClient = /* @__PURE__ */ new Map();
@@ -332,7 +332,7 @@ var vt = class {
332
332
  } catch {}
333
333
  }
334
334
  subscribe(e, t, n, r) {
335
- let i = Dt(t, n, r?.name), a = this.byFingerprint.get(i);
335
+ let i = Ot(t, n, r?.name), a = this.byFingerprint.get(i);
336
336
  return a ? (a.subscribers.add(e), this.byClient.set(e, i), this.notifyChange(), {
337
337
  fingerprint: i,
338
338
  deduplicated: !0
@@ -390,7 +390,7 @@ var vt = class {
390
390
  });
391
391
  return e;
392
392
  }
393
- }, kt = (e, t) => t.length === 0 ? e : [...e].sort((e, n) => {
393
+ }, At = (e, t) => t.length === 0 ? e : [...e].sort((e, n) => {
394
394
  for (let r of t) {
395
395
  let t = e[r.column], i = n[r.column];
396
396
  if (t === i) continue;
@@ -400,7 +400,7 @@ var vt = class {
400
400
  return r.direction === "asc" ? a : -a;
401
401
  }
402
402
  return 0;
403
- }), At = (e, t, n) => {
403
+ }), jt = (e, t, n) => {
404
404
  let r = t.split("."), i = r[0], a = r.slice(1), o = (e) => typeof e == "object" && !!e && !Array.isArray(e), s = e[i], c;
405
405
  if (a.length === 0) c = o(s) && o(n) ? {
406
406
  ...s,
@@ -418,11 +418,11 @@ var vt = class {
418
418
  ...e,
419
419
  [i]: c
420
420
  };
421
- }, jt = (e, t, n) => !e || d(e, t, n), V = (e, t) => {
421
+ }, Mt = (e, t, n) => !e || d(e, t, n), V = (e, t) => {
422
422
  let n = /* @__PURE__ */ new Map();
423
423
  if (!e) return n;
424
424
  for (let r of a(e)) {
425
- let e = t.get(r.descriptor.table) ?? /* @__PURE__ */ new Map(), i = V(r.descriptor.predicate, t), a = Mt(r.descriptor, e, t, i);
425
+ let e = t.get(r.descriptor.table) ?? /* @__PURE__ */ new Map(), i = V(r.descriptor.predicate, t), a = Nt(r.descriptor, e, t, i);
426
426
  if (r.kind === "exists") n.set(r.descriptor, a.length);
427
427
  else {
428
428
  let e = r.descriptor.projection, t = /* @__PURE__ */ new Set();
@@ -437,15 +437,15 @@ var vt = class {
437
437
  }
438
438
  }
439
439
  return n;
440
- }, Mt = (e, t, n = /* @__PURE__ */ new Map(), r = null) => {
441
- let i = r ?? V(e.predicate, n), a = [...t.values()].filter((t) => jt(e.predicate, t, i));
440
+ }, Nt = (e, t, n = /* @__PURE__ */ new Map(), r = null) => {
441
+ let i = r ?? V(e.predicate, n), a = [...t.values()].filter((t) => Mt(e.predicate, t, i));
442
442
  if (e.aggregations && e.aggregations.length > 0) {
443
- let t = Nt(a, e.aggregations, e.groupBy);
443
+ let t = Pt(a, e.aggregations, e.groupBy);
444
444
  if (!e.having) return t;
445
445
  let r = V(e.having, n);
446
- return t.filter((t) => jt(e.having, t, r));
446
+ return t.filter((t) => Mt(e.having, t, r));
447
447
  }
448
- let o = kt(a, e.order), s = e.skip ? o.slice(e.skip) : o, c = e.take === void 0 ? s : s.slice(0, e.take);
448
+ let o = At(a, e.order), s = e.skip ? o.slice(e.skip) : o, c = e.take === void 0 ? s : s.slice(0, e.take);
449
449
  if (!e.projection) return c;
450
450
  let l = e.projection;
451
451
  return c.map((e) => {
@@ -453,7 +453,7 @@ var vt = class {
453
453
  for (let n of l) t[n] = e[n];
454
454
  return t;
455
455
  });
456
- }, Nt = (e, t, n) => {
456
+ }, Pt = (e, t, n) => {
457
457
  let r = /* @__PURE__ */ new Map();
458
458
  for (let t of e) {
459
459
  let e = {};
@@ -471,11 +471,11 @@ var vt = class {
471
471
  let i = [];
472
472
  for (let e of r.values()) {
473
473
  let n = { ...e.keyVals };
474
- for (let r of t) n[r.alias] = Pt(r, e.rows);
474
+ for (let r of t) n[r.alias] = Ft(r, e.rows);
475
475
  i.push(n);
476
476
  }
477
477
  return i;
478
- }, Pt = (e, t) => {
478
+ }, Ft = (e, t) => {
479
479
  switch (e.op) {
480
480
  case "count": return e.column === void 0 ? t.length : t.reduce((t, n) => t + +(n[e.column] !== null && n[e.column] !== void 0), 0);
481
481
  case "count-distinct": {
@@ -519,7 +519,7 @@ var vt = class {
519
519
  }
520
520
  default: throw Error(`computeAggregates: unknown op '${e.op}'`);
521
521
  }
522
- }, Ft = "\0", It = (e, t) => e === null ? t : `${e}${Ft}${t}`, Lt = class e {
522
+ }, It = "\0", Lt = (e, t) => e === null ? t : `${e}${It}${t}`, Rt = class e {
523
523
  #e;
524
524
  #t;
525
525
  #n;
@@ -535,7 +535,7 @@ var vt = class {
535
535
  let n = t.id;
536
536
  n && e.set(n, t);
537
537
  }
538
- this.#e.set(It(t, n), e);
538
+ this.#e.set(Lt(t, n), e);
539
539
  }
540
540
  }
541
541
  withNamespace(t) {
@@ -546,11 +546,11 @@ var vt = class {
546
546
  }, t);
547
547
  }
548
548
  #a(e) {
549
- return It(this.#r, e);
549
+ return Lt(this.#r, e);
550
550
  }
551
551
  #o() {
552
- let e = /* @__PURE__ */ new Map(), t = this.#r === null ? null : `${this.#r}${Ft}`;
553
- for (let [n, r] of this.#e) t === null ? n.includes(Ft) || e.set(n, r) : n.startsWith(t) && e.set(n.slice(t.length), r);
552
+ let e = /* @__PURE__ */ new Map(), t = this.#r === null ? null : `${this.#r}${It}`;
553
+ for (let [n, r] of this.#e) t === null ? n.includes(It) || e.set(n, r) : n.startsWith(t) && e.set(n.slice(t.length), r);
554
554
  return e;
555
555
  }
556
556
  #s(e) {
@@ -558,7 +558,7 @@ var vt = class {
558
558
  return n || (n = /* @__PURE__ */ new Map(), this.#e.set(t, n)), n;
559
559
  }
560
560
  async query(e) {
561
- let t = Mt(e, this.#e.get(this.#a(e.table)) ?? /* @__PURE__ */ new Map(), this.#o());
561
+ let t = Nt(e, this.#e.get(this.#a(e.table)) ?? /* @__PURE__ */ new Map(), this.#o());
562
562
  return _(e) ? n(t, e.eager, oe(e.table), (e) => this.query(e)) : t;
563
563
  }
564
564
  async insert(e, t) {
@@ -588,7 +588,7 @@ var vt = class {
588
588
  if (!i) return null;
589
589
  let a = i.get(t);
590
590
  if (!a) return null;
591
- let o = At(a, n, r);
591
+ let o = jt(a, n, r);
592
592
  return i.set(t, o), this.#t.emit("change", {
593
593
  table: e,
594
594
  op: "update",
@@ -688,7 +688,7 @@ var vt = class {
688
688
  }
689
689
  }
690
690
  async transactional(e) {
691
- let t = new Rt(this.#u());
691
+ let t = new zt(this.#u());
692
692
  try {
693
693
  let n = await e(t);
694
694
  return t.commit(), n;
@@ -724,7 +724,7 @@ var vt = class {
724
724
  allocateNumericId: (e) => this.#c(e)
725
725
  };
726
726
  }
727
- }, Rt = class {
727
+ }, zt = class {
728
728
  parent;
729
729
  overlay = /* @__PURE__ */ new Map();
730
730
  tombstones = /* @__PURE__ */ new Map();
@@ -754,7 +754,7 @@ var vt = class {
754
754
  return t || (t = /* @__PURE__ */ new Map(), this.overlay.set(e, t)), t;
755
755
  }
756
756
  async query(e) {
757
- let t = this.buildTablesView(e), r = Mt(e, this.materialise(e.table), t);
757
+ let t = this.buildTablesView(e), r = Nt(e, this.materialise(e.table), t);
758
758
  return _(e) ? n(r, e.eager, oe(e.table), (e) => this.query(e)) : r;
759
759
  }
760
760
  async insert(e, t) {
@@ -793,7 +793,7 @@ var vt = class {
793
793
  async patchJson(e, t, n, r) {
794
794
  let i = this.materialise(e).get(t);
795
795
  if (!i) return null;
796
- let a = At(i, n, r);
796
+ let a = jt(i, n, r);
797
797
  return this.getOrCreateOverlay(e).set(t, a), this.events.push({
798
798
  table: e,
799
799
  op: "update",
@@ -894,7 +894,7 @@ var vt = class {
894
894
  discard() {
895
895
  this.settled || (this.settled = !0, this.overlay.clear(), this.tombstones.clear(), this.events.length = 0);
896
896
  }
897
- }, zt = (e) => {
897
+ }, Bt = (e) => {
898
898
  let t = {}, n = [], r = e;
899
899
  for (let e = 0; e < 8 && typeof r == "object" && r; e++) {
900
900
  let e = r;
@@ -905,23 +905,23 @@ var vt = class {
905
905
  (o || s) && n.push(`${o || "Error"}${s ? `: ${s.slice(0, 200)}` : ""}`), r = e.cause;
906
906
  }
907
907
  return n.length > 0 && (t.dbCauseChain = n.join(" ← "), t.dbMessage === void 0 && (t.dbMessage = n[n.length - 1])), t;
908
- }, Bt = (e) => {
908
+ }, Vt = (e) => {
909
909
  let t = e.dbCode;
910
910
  return t === "23503" || e.dbErrno === 1452 || t === 547 || t === "SQLITE_CONSTRAINT_FOREIGNKEY";
911
- }, Vt = (e) => ({
912
- has: (t) => De(e, t),
913
- hasAny: (t) => t.some((t) => De(e, t)),
914
- require: (t) => Ae(e, t),
911
+ }, Ht = (e) => ({
912
+ has: (t) => Oe(e, t),
913
+ hasAny: (t) => t.some((t) => Oe(e, t)),
914
+ require: (t) => je(e, t),
915
915
  get scopes() {
916
- return Ee(e);
916
+ return De(e);
917
917
  }
918
- }), Ht = (e) => {
918
+ }), Ut = (e) => {
919
919
  let t = /* @__PURE__ */ new Set();
920
- return Ut(e, t), t;
921
- }, Ut = (e, t) => {
922
- if (t.add(e.table), e.eager !== void 0 && Wt(e.table, e.eager, t), e.setOp !== void 0) for (let n of e.setOp.queries) Ut(n, t);
923
- if (e.ctes !== void 0) for (let n of e.ctes) Ut(n.descriptor, t);
924
- }, Wt = (e, t, n) => {
920
+ return Wt(e, t), t;
921
+ }, Wt = (e, t) => {
922
+ if (t.add(e.table), e.eager !== void 0 && Gt(e.table, e.eager, t), e.setOp !== void 0) for (let n of e.setOp.queries) Wt(n, t);
923
+ if (e.ctes !== void 0) for (let n of e.ctes) Wt(n.descriptor, t);
924
+ }, Gt = (e, t, n) => {
925
925
  let r = p(e);
926
926
  if (r !== void 0) for (let [e, i] of Object.entries(t)) {
927
927
  let t = r[e];
@@ -929,24 +929,24 @@ var vt = class {
929
929
  let a = i === !0 ? {} : i;
930
930
  if (t.kind === "manyToMany") {
931
931
  let e = t.through().tableName, r = t.target().tableName;
932
- n.add(e), n.add(r), a.with !== void 0 && Wt(r, a.with, n);
932
+ n.add(e), n.add(r), a.with !== void 0 && Gt(r, a.with, n);
933
933
  } else {
934
934
  let e = t.target().tableName;
935
- n.add(e), a.with !== void 0 && Wt(e, a.with, n);
935
+ n.add(e), a.with !== void 0 && Gt(e, a.with, n);
936
936
  }
937
937
  }
938
- }, Gt = (e) => e.setOp !== void 0 || e.ctes !== void 0 && e.ctes.length > 0 || e.aggregations !== void 0 && e.aggregations.some((e) => e.op.startsWith("window-")), Kt = /* @__PURE__ */ new Set(["*"]), H = (e, t) => {
938
+ }, Kt = (e) => e.setOp !== void 0 || e.ctes !== void 0 && e.ctes.length > 0 || e.aggregations !== void 0 && e.aggregations.some((e) => e.op.startsWith("window-")), qt = /* @__PURE__ */ new Set(["*"]), Jt = (e, t) => {
939
939
  if (e !== void 0) {
940
940
  if ("not" in e) {
941
- H(e.not, t);
941
+ Jt(e.not, t);
942
942
  return;
943
943
  }
944
944
  if ("and" in e) {
945
- for (let n of e.and) H(n, t);
945
+ for (let n of e.and) Jt(n, t);
946
946
  return;
947
947
  }
948
948
  if ("or" in e) {
949
- for (let n of e.or) H(n, t);
949
+ for (let n of e.or) Jt(n, t);
950
950
  return;
951
951
  }
952
952
  if (e.op === "subquery-in" || e.op === "subquery-not-in") {
@@ -955,11 +955,11 @@ var vt = class {
955
955
  }
956
956
  e.op === "exists" || e.op === "not-exists" || t.add(e.column);
957
957
  }
958
- }, U = (e, t, n) => {
958
+ }, H = (e, t, n) => {
959
959
  let r = e.get(t);
960
960
  r === void 0 && (r = /* @__PURE__ */ new Set(), e.set(t, r));
961
961
  for (let e of n) r.add(e);
962
- }, qt = (e, t, n) => {
962
+ }, Yt = (e, t, n) => {
963
963
  let r = p(e);
964
964
  if (r !== void 0) for (let [i, a] of Object.entries(t)) {
965
965
  let t = r[i];
@@ -967,65 +967,65 @@ var vt = class {
967
967
  let o = a === !0 ? {} : a;
968
968
  if (t.kind === "manyToMany") {
969
969
  let r = t.through(), i = t.target();
970
- U(n, r.tableName, [t.sourceKey, t.targetKey]), U(n, e, ["id"]), U(n, i.tableName, ["id"]), Jt(i.tableName, o, n), o.with !== void 0 && qt(i.tableName, o.with, n);
970
+ H(n, r.tableName, [t.sourceKey, t.targetKey]), H(n, e, ["id"]), H(n, i.tableName, ["id"]), Xt(i.tableName, o, n), o.with !== void 0 && Yt(i.tableName, o.with, n);
971
971
  continue;
972
972
  }
973
973
  let s = t.target();
974
- t.foreignKey !== void 0 && U(n, s.tableName, [t.foreignKey]), t.sourceKey === void 0 ? U(n, e, ["id"]) : U(n, e, [t.sourceKey]), U(n, s.tableName, ["id"]), Jt(s.tableName, o, n), o.with !== void 0 && qt(s.tableName, o.with, n);
974
+ t.foreignKey !== void 0 && H(n, s.tableName, [t.foreignKey]), t.sourceKey === void 0 ? H(n, e, ["id"]) : H(n, e, [t.sourceKey]), H(n, s.tableName, ["id"]), Xt(s.tableName, o, n), o.with !== void 0 && Yt(s.tableName, o.with, n);
975
975
  }
976
- }, Jt = (e, t, n) => {
976
+ }, Xt = (e, t, n) => {
977
977
  if (t.where !== void 0) {
978
978
  let r = /* @__PURE__ */ new Set();
979
- H(t.where, r), U(n, e, r);
979
+ Jt(t.where, r), H(n, e, r);
980
980
  }
981
- t.orderBy !== void 0 && U(n, e, t.orderBy.map((e) => e.column));
981
+ t.orderBy !== void 0 && H(n, e, t.orderBy.map((e) => e.column));
982
982
  let r = m(e);
983
- r === void 0 ? U(n, e, ["*"]) : U(n, e, Object.keys(r.fields));
984
- }, Yt = (e) => {
983
+ r === void 0 ? H(n, e, ["*"]) : H(n, e, Object.keys(r.fields));
984
+ }, Zt = (e) => {
985
985
  let t = /* @__PURE__ */ new Map();
986
- if (Gt(e)) {
987
- for (let n of Ht(e)) U(t, n, ["*"]);
986
+ if (Kt(e)) {
987
+ for (let n of Ut(e)) H(t, n, ["*"]);
988
988
  return t;
989
989
  }
990
990
  let n = /* @__PURE__ */ new Set();
991
991
  if (e.projection !== void 0) for (let t of e.projection) n.add(t);
992
992
  else n.add("*");
993
- H(e.predicate, n);
993
+ Jt(e.predicate, n);
994
994
  for (let t of e.order) n.add(t.column);
995
- return U(t, e.table, n), e.eager !== void 0 && qt(e.table, e.eager, t), t;
996
- }, Xt = (e) => {
997
- if (e.op === "insert" || e.op === "delete" || e.old === null || e.new === null) return Kt;
995
+ return H(t, e.table, n), e.eager !== void 0 && Yt(e.table, e.eager, t), t;
996
+ }, Qt = (e) => {
997
+ if (e.op === "insert" || e.op === "delete" || e.old === null || e.new === null) return qt;
998
998
  let t = /* @__PURE__ */ new Set(), n = e.old, r = e.new, i = /* @__PURE__ */ new Set([...Object.keys(n), ...Object.keys(r)]);
999
999
  for (let e of i) Object.is(n[e], r[e]) || t.add(e);
1000
1000
  return t;
1001
- }, Zt = (e, t) => {
1001
+ }, $t = (e, t) => {
1002
1002
  let n = t.get(e.table);
1003
1003
  if (n === void 0) return !1;
1004
1004
  if (n.has("*")) return !0;
1005
- let r = Xt(e);
1005
+ let r = Qt(e);
1006
1006
  if (r.has("*")) return !0;
1007
1007
  for (let e of r) if (n.has(e)) return !0;
1008
1008
  return !1;
1009
- }, W = Ve.exponential({
1009
+ }, en = He.exponential({
1010
1010
  start: .001,
1011
1011
  factor: 2,
1012
1012
  count: 16
1013
- }), Qt = N.counter("voltro_rpc_requests_total", { description: "Total RPC handler invocations." }), $t = N.counter("voltro_rpc_errors_total", { description: "RPC handler invocations that errored." }), en = N.histogram("voltro_rpc_duration_seconds", W, "RPC handler duration in seconds."), tn = N.counter("voltro_http_requests_total", { description: "Total HTTP route invocations." }), nn = N.histogram("voltro_http_duration_seconds", W, "HTTP route duration in seconds."), rn = N.histogram("voltro_plugin_hook_duration_seconds", W, "Plugin interceptor duration in seconds."), an = N.counter("voltro_plugin_hook_errors_total", { description: "Plugin interceptor invocations that errored." }), on = N.counter("voltro_subscription_deliveries_total", { description: "Total subscription deliveries (snapshot + delta)." }), sn = N.histogram("voltro_subscription_delivery_seconds", W, "Subscription delivery produce→push latency in seconds."), cn = N.gauge("voltro_subscriptions_active", { description: "Currently-open subscriptions." }), ln = (e) => {
1014
- let t = e.durationMs / 1e3, n = e.kind === "rpc" ? j.zipRight(N.increment(Qt).pipe(j.tagMetrics("tag", e.tag), j.tagMetrics("status", e.status)), j.zipRight(N.update(en, t).pipe(j.tagMetrics("tag", e.tag)), e.status === "error" ? N.increment($t).pipe(j.tagMetrics("tag", e.tag)) : j.void)) : e.kind === "request" ? j.zipRight(N.increment(tn).pipe(j.tagMetrics("route", e.tag), j.tagMetrics("status", e.status)), N.update(nn, t).pipe(j.tagMetrics("route", e.tag))) : j.zipRight(N.update(rn, t).pipe(j.tagMetrics("hook", e.tag)), e.status === "error" ? N.increment(an).pipe(j.tagMetrics("hook", e.tag)) : j.void);
1013
+ }), tn = N.counter("voltro_rpc_requests_total", { description: "Total RPC handler invocations." }), nn = N.counter("voltro_rpc_errors_total", { description: "RPC handler invocations that errored." }), rn = N.histogram("voltro_rpc_duration_seconds", en, "RPC handler duration in seconds."), an = N.counter("voltro_http_requests_total", { description: "Total HTTP route invocations." }), on = N.histogram("voltro_http_duration_seconds", en, "HTTP route duration in seconds."), sn = N.histogram("voltro_plugin_hook_duration_seconds", en, "Plugin interceptor duration in seconds."), cn = N.counter("voltro_plugin_hook_errors_total", { description: "Plugin interceptor invocations that errored." }), ln = N.counter("voltro_subscription_deliveries_total", { description: "Total subscription deliveries (snapshot + delta)." }), un = N.histogram("voltro_subscription_delivery_seconds", en, "Subscription delivery produce→push latency in seconds."), dn = N.gauge("voltro_subscriptions_active", { description: "Currently-open subscriptions." }), fn = (e) => {
1014
+ let t = e.durationMs / 1e3, n = e.kind === "rpc" ? j.zipRight(N.increment(tn).pipe(j.tagMetrics("tag", e.tag), j.tagMetrics("status", e.status)), j.zipRight(N.update(rn, t).pipe(j.tagMetrics("tag", e.tag)), e.status === "error" ? N.increment(nn).pipe(j.tagMetrics("tag", e.tag)) : j.void)) : e.kind === "request" ? j.zipRight(N.increment(an).pipe(j.tagMetrics("route", e.tag), j.tagMetrics("status", e.status)), N.update(on, t).pipe(j.tagMetrics("route", e.tag))) : j.zipRight(N.update(sn, t).pipe(j.tagMetrics("hook", e.tag)), e.status === "error" ? N.increment(cn).pipe(j.tagMetrics("hook", e.tag)) : j.void);
1015
1015
  j.runSync(n);
1016
- }, un = (e) => e.startsWith("subscription.") ? e.slice(13) : e, dn = (e) => {
1017
- let t = un(e.label);
1018
- j.runSync(j.zipRight(N.increment(on).pipe(j.tagMetrics("tag", t), j.tagMetrics("kind", e.kind)), N.update(sn, e.durationMs / 1e3).pipe(j.tagMetrics("tag", t), j.tagMetrics("kind", e.kind))));
1019
- }, fn = /* @__PURE__ */ new Map(), pn = (e, t) => {
1020
- let n = un(e), r = Math.max(0, (fn.get(n) ?? 0) + t);
1021
- r === 0 ? fn.delete(n) : fn.set(n, r), j.runSync(N.set(cn, r).pipe(j.tagMetrics("tag", n)));
1022
- }, mn = (e, t) => N.counter(e, t === void 0 ? {} : { description: t }), hn = (e, t) => N.gauge(e, t === void 0 ? {} : { description: t }), gn = (e, t = W, n) => N.histogram(e, t, n), _n = (e) => {
1016
+ }, pn = (e) => e.startsWith("subscription.") ? e.slice(13) : e, mn = (e) => {
1017
+ let t = pn(e.label);
1018
+ j.runSync(j.zipRight(N.increment(ln).pipe(j.tagMetrics("tag", t), j.tagMetrics("kind", e.kind)), N.update(un, e.durationMs / 1e3).pipe(j.tagMetrics("tag", t), j.tagMetrics("kind", e.kind))));
1019
+ }, hn = /* @__PURE__ */ new Map(), U = (e, t) => {
1020
+ let n = pn(e), r = Math.max(0, (hn.get(n) ?? 0) + t);
1021
+ r === 0 ? hn.delete(n) : hn.set(n, r), j.runSync(N.set(dn, r).pipe(j.tagMetrics("tag", n)));
1022
+ }, gn = (e, t) => N.counter(e, t === void 0 ? {} : { description: t }), _n = (e, t) => N.gauge(e, t === void 0 ? {} : { description: t }), vn = (e, t = en, n) => N.histogram(e, t, n), yn = (e) => {
1023
1023
  let t = {};
1024
1024
  for (let n of e) t[n.key] = n.value;
1025
1025
  return t;
1026
- }, vn = N.snapshot.pipe(j.map((e) => e.map((e) => {
1027
- let t = e.metricKey.name, n = _n(e.metricKey.tags), r = P.getOrUndefined(e.metricKey.description), i = r === void 0 ? {} : { description: r }, a = e.metricState;
1028
- if (He.isHistogramState(a)) return {
1026
+ }, bn = N.snapshot.pipe(j.map((e) => e.map((e) => {
1027
+ let t = e.metricKey.name, n = yn(e.metricKey.tags), r = P.getOrUndefined(e.metricKey.description), i = r === void 0 ? {} : { description: r }, a = e.metricState;
1028
+ if (Ue.isHistogramState(a)) return {
1029
1029
  name: t,
1030
1030
  labels: n,
1031
1031
  ...i,
@@ -1037,14 +1037,14 @@ var vt = class {
1037
1037
  sum: a.sum,
1038
1038
  count: a.count
1039
1039
  };
1040
- if (He.isGaugeState(a)) return {
1040
+ if (Ue.isGaugeState(a)) return {
1041
1041
  name: t,
1042
1042
  labels: n,
1043
1043
  ...i,
1044
1044
  type: "gauge",
1045
1045
  value: Number(a.value)
1046
1046
  };
1047
- if (He.isSummaryState(a)) return {
1047
+ if (Ue.isSummaryState(a)) return {
1048
1048
  name: t,
1049
1049
  labels: n,
1050
1050
  ...i,
@@ -1056,7 +1056,7 @@ var vt = class {
1056
1056
  value: t.value
1057
1057
  }] : [])
1058
1058
  };
1059
- if (He.isFrequencyState(a)) {
1059
+ if (Ue.isFrequencyState(a)) {
1060
1060
  let e = {};
1061
1061
  for (let [t, n] of a.occurrences) e[t] = n;
1062
1062
  return {
@@ -1074,7 +1074,7 @@ var vt = class {
1074
1074
  type: "counter",
1075
1075
  value: Number(a.count)
1076
1076
  };
1077
- }))), yn = () => j.runSync(vn), G = Ne({ scope: "voltro:dispatcher" }), bn = class {
1077
+ }))), xn = () => j.runSync(bn), W = O({ scope: "voltro:dispatcher" }), Sn = (e) => typeof e == "object" && !!e && e._tag === "ScopeError", Cn = class {
1078
1078
  deps;
1079
1079
  subscriptionRegistry;
1080
1080
  matcher;
@@ -1084,51 +1084,82 @@ var vt = class {
1084
1084
  computedSubs = /* @__PURE__ */ new Map();
1085
1085
  computedByTable = /* @__PURE__ */ new Map();
1086
1086
  constructor(e) {
1087
- this.deps = e, this.matcher = new Tt(), this.subscriptionRegistry = new Ot(this.matcher), this.unsubscribeChange = e.store.onChange((e) => {
1087
+ this.deps = e, this.matcher = new Et(), this.subscriptionRegistry = new kt(this.matcher), this.unsubscribeChange = e.store.onChange((e) => {
1088
1088
  this.handleChange(e);
1089
1089
  });
1090
1090
  }
1091
- async subscribe(e, t, n, r, i, a) {
1092
- let o = `sub_${he()}`, s = i ?? `subscription.${e.table}`, c = Ht(e), l = Yt(e);
1093
- e.predicate !== void 0 && this.subscriptionRegistry.subscribe(o, e.table, e.predicate, r);
1094
- for (let e of c) {
1091
+ async subscribe(e, t, n, r, i, a, o) {
1092
+ let s = `sub_${he()}`, c = i ?? `subscription.${e.table}`, l = Ut(e), u = Zt(e);
1093
+ e.predicate !== void 0 && this.subscriptionRegistry.subscribe(s, e.table, e.predicate, r);
1094
+ for (let e of l) {
1095
1095
  let t = this.dependentByTable.get(e);
1096
- t === void 0 && (t = /* @__PURE__ */ new Set(), this.dependentByTable.set(e, t)), t.add(o);
1096
+ t === void 0 && (t = /* @__PURE__ */ new Set(), this.dependentByTable.set(e, t)), t.add(s);
1097
1097
  }
1098
- let u = Date.now(), d = Array.from(c), f = this.deps.cache !== void 0 && a !== void 0 ? await this.deps.cache.wrap(a, d, () => this.deps.store.query(e)) : await this.deps.store.query(e);
1099
- this.subscriptions.set(o, {
1100
- id: o,
1098
+ let d = Date.now(), f = Array.from(l), p = this.deps.cache !== void 0 && a !== void 0 ? await this.deps.cache.wrap(a, f, () => this.deps.store.query(e)) : await this.deps.store.query(e);
1099
+ this.subscriptions.set(s, {
1100
+ id: s,
1101
1101
  descriptor: e,
1102
1102
  context: n,
1103
1103
  emit: t,
1104
- label: s,
1105
- dependentTables: c,
1106
- relevantFields: l,
1107
- lastDelivered: f,
1108
- cacheBinding: a
1109
- }), pn(s, 1), t({
1104
+ label: c,
1105
+ dependentTables: l,
1106
+ relevantFields: u,
1107
+ lastDelivered: p,
1108
+ cacheBinding: a,
1109
+ reauthorize: o
1110
+ }), U(c, 1), t({
1110
1111
  _tag: "snapshot",
1111
1112
  revision: 0,
1112
- data: f
1113
+ data: p
1113
1114
  });
1114
- let p = Date.now();
1115
+ let m = Date.now();
1115
1116
  return this.deps.recordDelivery?.({
1116
1117
  traceId: n.traceId,
1117
1118
  parentSpanId: n.spanId,
1118
- label: s,
1119
+ label: c,
1119
1120
  kind: "snapshot",
1120
- startMs: u,
1121
- endMs: p,
1122
- durationMs: p - u,
1123
- rowCount: f.length
1121
+ startMs: d,
1122
+ endMs: m,
1123
+ durationMs: m - d,
1124
+ rowCount: p.length
1124
1125
  }), () => {
1125
- this.subscriptions.delete(o), pn(s, -1), this.subscriptionRegistry.unsubscribe(o);
1126
- for (let e of c) {
1126
+ this.subscriptions.delete(s), U(c, -1), this.subscriptionRegistry.unsubscribe(s);
1127
+ for (let e of l) {
1127
1128
  let t = this.dependentByTable.get(e);
1128
- t !== void 0 && (t.delete(o), t.size === 0 && this.dependentByTable.delete(e));
1129
+ t !== void 0 && (t.delete(s), t.size === 0 && this.dependentByTable.delete(e));
1129
1130
  }
1130
1131
  };
1131
1132
  }
1133
+ revokeSubscription(e, t) {
1134
+ this.subscriptions.delete(e.id), U(e.label, -1), this.subscriptionRegistry.unsubscribe(e.id);
1135
+ for (let t of e.dependentTables) {
1136
+ let n = this.dependentByTable.get(t);
1137
+ n !== void 0 && (n.delete(e.id), n.size === 0 && this.dependentByTable.delete(t));
1138
+ }
1139
+ W.warn("subscription revoked mid-stream — guards no longer satisfied", {
1140
+ id: e.id,
1141
+ label: e.label,
1142
+ traceId: e.context.traceId
1143
+ }), e.emit({
1144
+ _tag: "error",
1145
+ error: t
1146
+ });
1147
+ }
1148
+ revokeComputed(e, t) {
1149
+ this.computedSubs.delete(e.id), U(e.label, -1);
1150
+ for (let t of e.tables) {
1151
+ let n = this.computedByTable.get(t);
1152
+ n !== void 0 && (n.delete(e.id), n.size === 0 && this.computedByTable.delete(t));
1153
+ }
1154
+ W.warn("computed subscription revoked mid-stream — guards no longer satisfied", {
1155
+ id: e.id,
1156
+ label: e.label,
1157
+ traceId: e.context.traceId
1158
+ }), e.emit({
1159
+ _tag: "error",
1160
+ error: t
1161
+ });
1162
+ }
1132
1163
  async subscribeComputed(e, t, n, r) {
1133
1164
  let i = `csub_${he()}`, a = e.dependentTables, o = {
1134
1165
  id: i,
@@ -1137,10 +1168,11 @@ var vt = class {
1137
1168
  emit: t,
1138
1169
  context: n,
1139
1170
  label: r ?? "subscription.computed",
1140
- lastJson: xn(e.value),
1171
+ tables: a,
1172
+ lastJson: wn(e.value),
1141
1173
  revision: 0
1142
1174
  };
1143
- this.computedSubs.set(i, o), pn(o.label, 1);
1175
+ this.computedSubs.set(i, o), U(o.label, 1);
1144
1176
  for (let e of a) {
1145
1177
  let t = this.computedByTable.get(e);
1146
1178
  t === void 0 && (t = /* @__PURE__ */ new Set(), this.computedByTable.set(e, t)), t.add(i);
@@ -1160,7 +1192,7 @@ var vt = class {
1160
1192
  durationMs: Date.now() - s,
1161
1193
  rowCount: 1
1162
1194
  }), () => {
1163
- this.computedSubs.delete(i), pn(o.label, -1);
1195
+ this.computedSubs.delete(i), U(o.label, -1);
1164
1196
  for (let e of a) {
1165
1197
  let t = this.computedByTable.get(e);
1166
1198
  t !== void 0 && (t.delete(i), t.size === 0 && this.computedByTable.delete(e));
@@ -1170,7 +1202,7 @@ var vt = class {
1170
1202
  async recomputeComputed(e) {
1171
1203
  let t = Date.now();
1172
1204
  try {
1173
- let n = await e.recompute(), r = xn(n);
1205
+ let n = await e.recompute(), r = wn(n);
1174
1206
  if (r === e.lastJson) return;
1175
1207
  e.lastJson = r, e.revision += 1;
1176
1208
  let i = Date.now();
@@ -1189,7 +1221,11 @@ var vt = class {
1189
1221
  rowCount: 1
1190
1222
  });
1191
1223
  } catch (t) {
1192
- G.warn("computed recompute failed; subscriber left on last value", {
1224
+ if (Sn(t)) {
1225
+ this.revokeComputed(e, t);
1226
+ return;
1227
+ }
1228
+ W.warn("computed recompute failed; subscriber left on last value", {
1193
1229
  id: e.id,
1194
1230
  label: e.label,
1195
1231
  traceId: e.context.traceId
@@ -1224,7 +1260,7 @@ var vt = class {
1224
1260
  for (let e of n) r.add(e.subscriberId);
1225
1261
  let i = this.dependentByTable.get(e.table);
1226
1262
  if (i !== void 0) for (let e of i) r.add(e);
1227
- if (G.trace("handleChange", {
1263
+ if (W.trace("handleChange", {
1228
1264
  table: e.table,
1229
1265
  op: e.op,
1230
1266
  matcher: n.length,
@@ -1235,28 +1271,35 @@ var vt = class {
1235
1271
  for (let t of r) {
1236
1272
  let n = this.subscriptions.get(t);
1237
1273
  if (!n) {
1238
- G.trace("missing subscription", { subscriberId: t });
1274
+ W.trace("missing subscription", { subscriberId: t });
1239
1275
  continue;
1240
1276
  }
1241
- if (!Zt(e, n.relevantFields)) {
1277
+ if (!$t(e, n.relevantFields)) {
1242
1278
  o++;
1243
1279
  continue;
1244
1280
  }
1245
1281
  let r = Date.now();
1246
1282
  try {
1283
+ if (n.reauthorize !== void 0) {
1284
+ let e = await n.reauthorize();
1285
+ if (e) {
1286
+ this.revokeSubscription(n, e);
1287
+ continue;
1288
+ }
1289
+ }
1247
1290
  let i = await this.deps.store.query(n.descriptor), o = n.lastDelivered;
1248
- if (Sn(i, o)) {
1249
- G.trace("suppressed no-op delta", {
1291
+ if (Tn(i, o)) {
1292
+ W.trace("suppressed no-op delta", {
1250
1293
  subscriberId: t,
1251
1294
  table: e.table
1252
1295
  });
1253
1296
  continue;
1254
1297
  }
1255
- n.lastDelivered = i, this.deps.cache !== void 0 && n.cacheBinding !== void 0 && this.deps.cache.put(n.cacheBinding, Array.from(n.dependentTables), i), Oe(o) && Oe(i) ? n.emit({
1298
+ n.lastDelivered = i, this.deps.cache !== void 0 && n.cacheBinding !== void 0 && this.deps.cache.put(n.cacheBinding, Array.from(n.dependentTables), i), ke(o) && ke(i) ? n.emit({
1256
1299
  _tag: "delta",
1257
1300
  revision: a,
1258
1301
  emittedAt: a,
1259
- patch: Te(o, i)
1302
+ patch: Ee(o, i)
1260
1303
  }) : n.emit({
1261
1304
  _tag: "snapshot",
1262
1305
  revision: a,
@@ -1274,7 +1317,7 @@ var vt = class {
1274
1317
  rowCount: i.length
1275
1318
  });
1276
1319
  } catch (r) {
1277
- G.warn("reactive re-query failed; subscriber left on last snapshot", {
1320
+ W.warn("reactive re-query failed; subscriber left on last snapshot", {
1278
1321
  subscriberId: t,
1279
1322
  label: n.label,
1280
1323
  table: e.table,
@@ -1282,66 +1325,66 @@ var vt = class {
1282
1325
  }, r);
1283
1326
  }
1284
1327
  }
1285
- o > 0 && G.trace("handleChange/prefiltered", {
1328
+ o > 0 && W.trace("handleChange/prefiltered", {
1286
1329
  table: e.table,
1287
1330
  op: e.op,
1288
1331
  skipped: o
1289
1332
  });
1290
1333
  }
1291
- }, xn = (e) => {
1334
+ }, wn = (e) => {
1292
1335
  try {
1293
1336
  return JSON.stringify(e) ?? "null";
1294
1337
  } catch {
1295
1338
  return String(e);
1296
1339
  }
1297
- }, Sn = (e, t) => {
1340
+ }, Tn = (e, t) => {
1298
1341
  if (e === t) return !0;
1299
1342
  if (e.length !== t.length) return !1;
1300
1343
  for (let n = 0; n < e.length; n++) if (JSON.stringify(e[n]) !== JSON.stringify(t[n])) return !1;
1301
1344
  return !0;
1302
- }, Cn = (e) => typeof e == "object" && !!e && e.__voltroComputed === !0, wn = 1440 * 60 * 1e3, Tn = 3600 * 1e3, K = /* @__PURE__ */ new Map(), En = /* @__PURE__ */ new Set(), Dn = (e, t) => {
1303
- K.set(e, {
1345
+ }, En = (e) => typeof e == "object" && !!e && e.__voltroComputed === !0, Dn = 1440 * 60 * 1e3, On = 3600 * 1e3, G = /* @__PURE__ */ new Map(), kn = /* @__PURE__ */ new Set(), An = (e, t) => {
1346
+ G.set(e, {
1304
1347
  subject: t,
1305
1348
  touchedAt: Date.now()
1306
1349
  });
1307
- for (let n of En) try {
1350
+ for (let n of kn) try {
1308
1351
  n(e, t);
1309
1352
  } catch {}
1310
- }, On = (e) => {
1311
- let t = K.get(e);
1353
+ }, jn = (e) => {
1354
+ let t = G.get(e);
1312
1355
  if (t) return t.touchedAt = Date.now(), t.subject;
1313
- }, kn = (e) => {
1314
- K.delete(e);
1315
- }, An = (e) => (En.add(e), () => {
1316
- En.delete(e);
1317
- }), jn = setInterval(() => {
1318
- let e = Date.now() - wn;
1319
- for (let [t, n] of K) n.touchedAt < e && K.delete(t);
1320
- }, Tn);
1321
- typeof jn == "object" && jn && "unref" in jn && jn.unref();
1322
- var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
1323
- let n = q.get(e);
1324
- return n || (n = /* @__PURE__ */ new Set(), q.set(e, n)), n.add(t), () => {
1325
- let n = q.get(e);
1326
- n && (n.delete(t), n.size === 0 && q.delete(e));
1356
+ }, Mn = (e) => {
1357
+ G.delete(e);
1358
+ }, Nn = (e) => (kn.add(e), () => {
1359
+ kn.delete(e);
1360
+ }), Pn = setInterval(() => {
1361
+ let e = Date.now() - Dn;
1362
+ for (let [t, n] of G) n.touchedAt < e && G.delete(t);
1363
+ }, On);
1364
+ typeof Pn == "object" && Pn && "unref" in Pn && Pn.unref();
1365
+ var K = /* @__PURE__ */ new Map(), Fn = (e, t) => {
1366
+ let n = K.get(e);
1367
+ return n || (n = /* @__PURE__ */ new Set(), K.set(e, n)), n.add(t), () => {
1368
+ let n = K.get(e);
1369
+ n && (n.delete(t), n.size === 0 && K.delete(e));
1327
1370
  };
1328
- }, Nn = (e) => {
1329
- let t = q.get(e);
1371
+ }, In = (e) => {
1372
+ let t = K.get(e);
1330
1373
  if (t) {
1331
1374
  for (let e of [...t]) try {
1332
1375
  e();
1333
1376
  } catch {}
1334
- q.delete(e);
1377
+ K.delete(e);
1335
1378
  }
1336
- }, Pn = (e) => q.get(e)?.size ?? 0, Fn = () => {
1337
- K.clear(), q.clear();
1338
- }, In = () => [...K.entries()].map(([e, t]) => ({
1379
+ }, Ln = (e) => K.get(e)?.size ?? 0, Rn = () => {
1380
+ G.clear(), K.clear();
1381
+ }, zn = () => [...G.entries()].map(([e, t]) => ({
1339
1382
  clientId: e,
1340
1383
  subjectType: t.subject.type,
1341
1384
  tenantId: t.subject.tenantId
1342
- })), Ln = /^00-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/, Rn = (e) => `00-${e.traceId}-${e.spanId}-${e.sampled ? "01" : "00"}`, zn = (e) => {
1385
+ })), Bn = /^00-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/, Vn = (e) => `00-${e.traceId}-${e.spanId}-${e.sampled ? "01" : "00"}`, Hn = (e) => {
1343
1386
  if (typeof e != "string") return null;
1344
- let t = Ln.exec(e.trim().toLowerCase());
1387
+ let t = Bn.exec(e.trim().toLowerCase());
1345
1388
  if (t === null) return null;
1346
1389
  let [, n, r, i] = t;
1347
1390
  return n === "0".repeat(32) || r === "0".repeat(16) ? null : {
@@ -1349,14 +1392,14 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
1349
1392
  spanId: r,
1350
1393
  sampled: (parseInt(i, 16) & 1) == 1
1351
1394
  };
1352
- }, Bn = (e) => {
1353
- let t = zn(e);
1354
- if (t !== null) return Ue.externalSpan({
1395
+ }, Un = (e) => {
1396
+ let t = Hn(e);
1397
+ if (t !== null) return We.externalSpan({
1355
1398
  traceId: t.traceId,
1356
1399
  spanId: t.spanId,
1357
1400
  sampled: t.sampled
1358
1401
  });
1359
- }, Vn = new it(), Hn = (e, t) => Vn.run(e, t), Un = () => Vn.getStore(), Wn = (e = {}) => {
1402
+ }, Wn = new at(), Gn = (e, t) => Wn.run(e, t), Kn = () => Wn.getStore(), qn = (e = {}) => {
1360
1403
  let t = e.random ?? Math.random, n = /* @__PURE__ */ new Map(), r = (e) => n.get(e) ?? 0;
1361
1404
  return {
1362
1405
  pick(e) {
@@ -1381,7 +1424,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
1381
1424
  }));
1382
1425
  }
1383
1426
  };
1384
- }, Gn = (e = {}) => {
1427
+ }, Jn = (e = {}) => {
1385
1428
  let t = e.thresholdFailures ?? 3, n = e.windowMs ?? 1e4, r = e.blackoutMs ?? 6e4, i = e.now ?? Date.now, a = /* @__PURE__ */ new Map(), o = (e) => {
1386
1429
  let t = a.get(e);
1387
1430
  return t === void 0 && (t = {
@@ -1415,7 +1458,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
1415
1458
  }));
1416
1459
  }
1417
1460
  };
1418
- }, Kn = (e = {}) => {
1461
+ }, Yn = (e = {}) => {
1419
1462
  let t = e.now ?? Date.now, n = /* @__PURE__ */ new Map();
1420
1463
  return {
1421
1464
  get(e) {
@@ -1438,7 +1481,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
1438
1481
  return n.size;
1439
1482
  }
1440
1483
  };
1441
- }, qn = (e, t) => e === null ? t === void 0 ? "anon:bg" : `anon:${t}` : `subject:${e}`, Jn = (e) => {
1484
+ }, Xn = (e, t) => e === null ? t === void 0 ? "anon:bg" : `anon:${t}` : `subject:${e}`, Zn = (e) => {
1442
1485
  let t = e.now ?? Date.now, n = e.keyPrefix ?? "voltro:ryw", r = e.channel ?? `${n}:bus`, i = e.onError ?? ((e, t) => {
1443
1486
  process.stderr.write(`[voltro:ryw] redis ${t} failed: ${String(e)}\n`);
1444
1487
  }), a = `${process.pid ?? 0}:${Math.random() * 1e9 | 0}:${t()}`, o = /* @__PURE__ */ new Map(), s = (e) => {
@@ -1497,7 +1540,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
1497
1540
  return o.size;
1498
1541
  }
1499
1542
  };
1500
- }, Yn = Ne({ scope: "voltro:replication" }), Xn = new it(), Zn = (e, t) => Xn.run(e, t), Qn = () => Xn.getStore(), $n = class {
1543
+ }, Qn = O({ scope: "voltro:replication" }), $n = new at(), er = (e, t) => $n.run(e, t), tr = () => $n.getStore(), nr = class {
1501
1544
  primary;
1502
1545
  replicas;
1503
1546
  adapter;
@@ -1510,10 +1553,10 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
1510
1553
  recordRouting;
1511
1554
  now;
1512
1555
  constructor(e) {
1513
- this.primary = e.primary, this.replicas = e.replicas, this.adapter = e.replicationAdapter, this.policy = e.rywPolicy ?? "fallback", this.rywTtlMs = e.rywTtlMs ?? 3e4, this.rywMaxWaitMs = e.rywMaxWaitMs ?? 500, this.now = e.now ?? Date.now, this.rywStore = e.rywStore ?? Kn({ now: this.now }), this.selector = e.replicaSelector ?? Wn(), this.health = e.replicaHealth ?? Gn({ now: this.now }), e.recordRouting !== void 0 && (this.recordRouting = e.recordRouting);
1556
+ this.primary = e.primary, this.replicas = e.replicas, this.adapter = e.replicationAdapter, this.policy = e.rywPolicy ?? "fallback", this.rywTtlMs = e.rywTtlMs ?? 3e4, this.rywMaxWaitMs = e.rywMaxWaitMs ?? 500, this.now = e.now ?? Date.now, this.rywStore = e.rywStore ?? Yn({ now: this.now }), this.selector = e.replicaSelector ?? qn(), this.health = e.replicaHealth ?? Jn({ now: this.now }), e.recordRouting !== void 0 && (this.recordRouting = e.recordRouting);
1514
1557
  }
1515
1558
  async query(e) {
1516
- let t = Xn.getStore(), n = t?.subjectKey ?? "anon:bg";
1559
+ let t = $n.getStore(), n = t?.subjectKey ?? "anon:bg";
1517
1560
  if (t?.forcePrimary === !0) return this.emitRouting({
1518
1561
  target: "primary",
1519
1562
  replicaIndex: null,
@@ -1577,7 +1620,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
1577
1620
  waitMs: 0
1578
1621
  }), r;
1579
1622
  } catch (r) {
1580
- return this.health.reportFailure(i, String(r)), Yn.warn("replica query failed; falling back to primary", {
1623
+ return this.health.reportFailure(i, String(r)), Qn.warn("replica query failed; falling back to primary", {
1581
1624
  idx: a,
1582
1625
  err: r
1583
1626
  }), this.emitRouting({
@@ -1646,7 +1689,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
1646
1689
  fallbackReason: "wait-timeout"
1647
1690
  }), this.primary.query(e);
1648
1691
  }
1649
- await er(10);
1692
+ await rr(10);
1650
1693
  }
1651
1694
  }
1652
1695
  async insert(e, t) {
@@ -1686,8 +1729,8 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
1686
1729
  return await this.stampPostWrite(), r;
1687
1730
  }
1688
1731
  async transactional(e) {
1689
- let t = await Zn({
1690
- subjectKey: Xn.getStore()?.subjectKey ?? "anon:bg",
1732
+ let t = await er({
1733
+ subjectKey: $n.getStore()?.subjectKey ?? "anon:bg",
1691
1734
  forcePrimary: !0
1692
1735
  }, () => this.primary.transactional(e));
1693
1736
  return await this.stampPostWrite(), t;
@@ -1703,7 +1746,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
1703
1746
  }
1704
1747
  async stampPostWrite() {
1705
1748
  if (this.replicas.length === 0) return;
1706
- let e = Xn.getStore()?.subjectKey ?? "anon:bg";
1749
+ let e = $n.getStore()?.subjectKey ?? "anon:bg";
1707
1750
  try {
1708
1751
  let t = await this.adapter.capturePrimaryPosition(this.primary);
1709
1752
  this.rywStore.set(e, {
@@ -1711,59 +1754,59 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
1711
1754
  expiresAt: this.now() + this.rywTtlMs
1712
1755
  });
1713
1756
  } catch (e) {
1714
- Yn.warn("failed to capture primary position; RYW skipped", { err: e });
1757
+ Qn.warn("failed to capture primary position; RYW skipped", { err: e });
1715
1758
  }
1716
1759
  }
1717
1760
  emitRouting(e) {
1718
1761
  this.recordRouting?.(e);
1719
1762
  }
1720
- }, er = (e) => new Promise((t) => setTimeout(t, e)), tr = (e, t, n) => ({
1763
+ }, rr = (e) => new Promise((t) => setTimeout(t, e)), ir = (e, t, n) => ({
1721
1764
  subject: e,
1722
1765
  traceId: t?.traceId ?? he(),
1723
1766
  ...t?.spanId === void 0 ? {} : { spanId: t.spanId },
1724
1767
  ...n === void 0 ? {} : { clientId: n }
1725
- }), nr = j.currentSpan.pipe(j.catchAll(() => j.succeed(void 0))), rr = (e) => ({
1768
+ }), ar = j.currentSpan.pipe(j.catchAll(() => j.succeed(void 0))), or = (e) => ({
1726
1769
  traceId: e.traceId,
1727
1770
  ...e.spanId === void 0 ? {} : { spanId: e.spanId }
1728
- }), ir = (e, t, n) => {
1771
+ }), sr = (e, t, n) => {
1729
1772
  e !== void 0 && (e.attribute("rpc.tag", t), e.attribute("subject.type", n.type), n.tenantId !== void 0 && n.tenantId !== null && e.attribute("tenant.id", n.tenantId));
1730
- }, ar = (e, t, n, r, i, a) => L.asyncScoped((o) => j.gen(function* () {
1731
- let s = yield* j.tryPromise(() => t.subscribe(e, (e) => {
1732
- o.single(e);
1733
- }, n, r, i, a)).pipe(j.matchCause({
1734
- onFailure: (e) => (dr(`subscription.${i}`, n.traceId, e), {
1773
+ }, cr = (e, t, n, r, i, a, o) => L.asyncScoped((s) => j.gen(function* () {
1774
+ let c = yield* j.tryPromise(() => t.subscribe(e, (e) => {
1775
+ s.single(e);
1776
+ }, n, r, i, a, o)).pipe(j.matchCause({
1777
+ onFailure: (e) => (mr(`subscription.${i}`, n.traceId, e), {
1735
1778
  ok: !1,
1736
- error: hr(e)
1779
+ error: vr(e)
1737
1780
  }),
1738
1781
  onSuccess: (e) => ({
1739
1782
  ok: !0,
1740
1783
  unsubscribe: e
1741
1784
  })
1742
1785
  }));
1743
- if (!s.ok) {
1744
- o.single({
1786
+ if (!c.ok) {
1787
+ s.single({
1745
1788
  _tag: "error",
1746
- error: s.error
1747
- }), o.end();
1789
+ error: c.error
1790
+ }), s.end();
1748
1791
  return;
1749
1792
  }
1750
- let c = s.unsubscribe;
1751
- if (yield* j.addFinalizer(() => j.sync(() => c())), n.clientId !== void 0) {
1752
- let e = Mn(n.clientId, () => {
1753
- o.end();
1793
+ let l = c.unsubscribe;
1794
+ if (yield* j.addFinalizer(() => j.sync(() => l())), n.clientId !== void 0) {
1795
+ let e = Fn(n.clientId, () => {
1796
+ s.end();
1754
1797
  });
1755
1798
  yield* j.addFinalizer(() => j.sync(() => e()));
1756
1799
  }
1757
- })), or = (e, t, n, r) => L.asyncScoped((i) => j.gen(function* () {
1800
+ })), lr = (e, t, n, r) => L.asyncScoped((i) => j.gen(function* () {
1758
1801
  let a = yield* j.tryPromise(() => t.subscribeComputed(e, (e) => {
1759
1802
  i.single(e._tag === "snapshot" ? {
1760
1803
  ...e,
1761
1804
  computed: !0
1762
1805
  } : e);
1763
1806
  }, n, r)).pipe(j.matchCause({
1764
- onFailure: (e) => (dr(`subscription.${r}`, n.traceId, e), {
1807
+ onFailure: (e) => (mr(`subscription.${r}`, n.traceId, e), {
1765
1808
  ok: !1,
1766
- error: hr(e)
1809
+ error: vr(e)
1767
1810
  }),
1768
1811
  onSuccess: (e) => ({
1769
1812
  ok: !0,
@@ -1779,21 +1822,21 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
1779
1822
  }
1780
1823
  let o = a.unsubscribe;
1781
1824
  if (yield* j.addFinalizer(() => j.sync(() => o())), n.clientId !== void 0) {
1782
- let e = Mn(n.clientId, () => {
1825
+ let e = Fn(n.clientId, () => {
1783
1826
  i.end();
1784
1827
  });
1785
1828
  yield* j.addFinalizer(() => j.sync(() => e()));
1786
1829
  }
1787
- })), sr = (e, t, n = "rpc.subscription", r, i) => L.unwrap(j.gen(function* () {
1788
- let a = yield* O, o = yield* ye, s = yield* nr;
1789
- ir(s, n, a);
1790
- let c = tr(a, s, o.clientId), l = qn(a.id, o.clientId), u = Zn({ subjectKey: l }, () => Hn({
1791
- traceId: c.traceId,
1792
- ...c.spanId === void 0 ? {} : { spanId: c.spanId }
1793
- }, () => e(c))), d = j.isEffect(u) ? yield* u.pipe(j.matchCause({
1794
- onFailure: (e) => (dr(`subscription.${n}`, c.traceId, e), {
1830
+ })), ur = (e, t, n = "rpc.subscription", r, i, a) => L.unwrap(j.gen(function* () {
1831
+ let o = yield* be, s = yield* ye, c = yield* ar;
1832
+ sr(c, n, o);
1833
+ let l = ir(o, c, s.clientId), u = Xn(o.id, s.clientId), d = er({ subjectKey: u }, () => Gn({
1834
+ traceId: l.traceId,
1835
+ ...l.spanId === void 0 ? {} : { spanId: l.spanId }
1836
+ }, () => e(l))), f = j.isEffect(d) ? yield* d.pipe(j.matchCause({
1837
+ onFailure: (e) => (mr(`subscription.${n}`, l.traceId, e), {
1795
1838
  ok: !1,
1796
- error: hr(e)
1839
+ error: vr(e)
1797
1840
  }),
1798
1841
  onSuccess: (e) => ({
1799
1842
  ok: !0,
@@ -1801,45 +1844,45 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
1801
1844
  })
1802
1845
  })) : {
1803
1846
  ok: !0,
1804
- value: u
1847
+ value: d
1805
1848
  };
1806
- if (!d.ok) return L.make({
1849
+ if (!f.ok) return L.make({
1807
1850
  _tag: "error",
1808
- error: d.error
1851
+ error: f.error
1809
1852
  });
1810
- let f = d.value;
1811
- if (Cn(f)) return or(f, t, c, n);
1812
- let p = f, m = r?.(p);
1813
- return ar(p, t, c, m, n, i === void 0 ? void 0 : {
1814
- key: i.scope === "subject" ? `${i.baseKey}:s:${l}` : `${i.baseKey}:global`,
1853
+ let p = f.value;
1854
+ if (En(p)) return lr(p, t, l, n);
1855
+ let m = p, h = r?.(m);
1856
+ return cr(m, t, l, h, n, i === void 0 ? void 0 : {
1857
+ key: i.scope === "subject" ? `${i.baseKey}:s:${u}` : `${i.baseKey}:global`,
1815
1858
  ttlMs: i.ttlMs,
1816
1859
  swrMs: i.swrMs
1817
- });
1818
- }).pipe(j.withSpan(n, { attributes: { "framework.kind": "subscription" } }))), cr = (e, t = "rpc.stream") => L.unwrap(j.gen(function* () {
1819
- let n = yield* O, r = yield* ye, i = yield* nr;
1820
- ir(i, t, n);
1821
- let a = tr(n, i, r.clientId), o = e(a), s = j.isEffect(o) ? yield* o.pipe(j.orDie) : o;
1860
+ }, a?.(o));
1861
+ }).pipe(j.withSpan(n, { attributes: { "framework.kind": "subscription" } }))), dr = (e, t = "rpc.stream") => L.unwrap(j.gen(function* () {
1862
+ let n = yield* be, r = yield* ye, i = yield* ar;
1863
+ sr(i, t, n);
1864
+ let a = ir(n, i, r.clientId), o = e(a), s = j.isEffect(o) ? yield* o.pipe(j.orDie) : o;
1822
1865
  if (a.clientId === void 0) return s;
1823
1866
  let c = a.clientId;
1824
1867
  return L.unwrapScoped(j.gen(function* () {
1825
- let e = yield* Ie.make(), t = Mn(c, () => {
1826
- Ie.unsafeDone(e, j.void);
1868
+ let e = yield* Le.make(), t = Fn(c, () => {
1869
+ Le.unsafeDone(e, j.void);
1827
1870
  });
1828
- return yield* j.addFinalizer(() => j.sync(() => t())), s.pipe(L.interruptWhen(Ie.await(e)));
1871
+ return yield* j.addFinalizer(() => j.sync(() => t())), s.pipe(L.interruptWhen(Le.await(e)));
1829
1872
  }));
1830
- }).pipe(j.withSpan(t, { attributes: { "framework.kind": "stream" } }))), lr = Ne({ scope: "voltro:rpc" }), ur = Ne({ scope: "voltro:http" }), dr = (e, t, n) => {
1873
+ }).pipe(j.withSpan(t, { attributes: { "framework.kind": "stream" } }))), fr = O({ scope: "voltro:rpc" }), pr = O({ scope: "voltro:http" }), mr = (e, t, n) => {
1831
1874
  if (k.isInterruptedOnly(n)) return;
1832
- let r = k.squash(n), i = r?._tag, a = r instanceof Error ? r.message : r?.message ?? String(r), o = k.dieOption(n)._tag === "Some", s = zt(r), c = {
1875
+ let r = k.squash(n), i = r?._tag, a = r instanceof Error ? r.message : r?.message ?? String(r), o = k.dieOption(n)._tag === "Some", s = Bt(r), c = {
1833
1876
  traceId: t,
1834
1877
  ...i === void 0 ? {} : { errorTag: i },
1835
1878
  ...s
1836
1879
  }, l = a === "Failed to execute statement" && typeof s.dbMessage == "string" ? s.dbMessage : a;
1837
- o ? lr.error(`${e} failed: ${l}`, c) : lr.warn(`${e} failed: ${l}`, c);
1838
- }, fr = /* @__PURE__ */ new Set(["SqlError", "ResultLengthMismatch"]), pr = (e) => typeof e == "object" && !!e && typeof e._tag == "string" && fr.has(e._tag), mr = (e) => ({
1880
+ o ? fr.error(`${e} failed: ${l}`, c) : fr.warn(`${e} failed: ${l}`, c);
1881
+ }, hr = /* @__PURE__ */ new Set(["SqlError", "ResultLengthMismatch"]), gr = (e) => typeof e == "object" && !!e && typeof e._tag == "string" && hr.has(e._tag), _r = (e) => ({
1839
1882
  _tag: "InternalError",
1840
1883
  message: "internal server error",
1841
1884
  traceId: e
1842
- }), hr = (e) => {
1885
+ }), vr = (e) => {
1843
1886
  let t = k.squash(e);
1844
1887
  t && typeof t == "object" && t._tag === "UnknownException" && (t = t.error ?? t.cause ?? t);
1845
1888
  let n = t && typeof t == "object" ? t : {}, r = {};
@@ -1850,19 +1893,19 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
1850
1893
  ...typeof i == "string" ? { _tag: i } : {},
1851
1894
  message: typeof a == "string" ? a : String(t)
1852
1895
  };
1853
- }, gr = (e, t, n = "rpc.mutation") => j.gen(function* () {
1854
- let r = yield* O, i = yield* ye, a = yield* nr;
1855
- ir(a, n, r);
1856
- let o = tr(r, a, i.clientId), s = Zn({ subjectKey: qn(r.id, i.clientId) }, () => Hn({
1896
+ }, yr = (e, t, n = "rpc.mutation") => j.gen(function* () {
1897
+ let r = yield* be, i = yield* ye, a = yield* ar;
1898
+ sr(a, n, r);
1899
+ let o = ir(r, a, i.clientId), s = er({ subjectKey: Xn(r.id, i.clientId) }, () => Gn({
1857
1900
  traceId: o.traceId,
1858
1901
  ...o.spanId === void 0 ? {} : { spanId: o.spanId }
1859
1902
  }, () => e(t, o)));
1860
1903
  return yield* (j.isEffect(s) ? s : j.tryPromise({
1861
1904
  try: () => Promise.resolve(s),
1862
1905
  catch: (e) => e
1863
- })).pipe(j.tapErrorCause((e) => j.sync(() => dr(n, o.traceId, e))), j.catchIf(pr, () => j.die(mr(o.traceId))), j.annotateLogs(rr(o)));
1864
- }).pipe(j.withSpan(n, { attributes: { "framework.kind": "mutation" } })), _r = 8 * 1024 * 1024, vr = (e) => {
1865
- let t = e.port ?? 4e3, n = e.path ?? "/ws", r = Ge(), i = (t) => z.HttpServerRequest.pipe(j.flatMap((t) => j.gen(function* () {
1906
+ })).pipe(j.tapErrorCause((e) => j.sync(() => mr(n, o.traceId, e))), j.catchIf(gr, () => j.die(_r(o.traceId))), j.annotateLogs(or(o)));
1907
+ }).pipe(j.withSpan(n, { attributes: { "framework.kind": "mutation" } })), br = 8 * 1024 * 1024, xr = (e) => {
1908
+ let t = e.port ?? 4e3, n = e.path ?? "/ws", r = Ke(), i = (t) => z.HttpServerRequest.pipe(j.flatMap((t) => j.gen(function* () {
1866
1909
  if (!e.inspectRoute) return B.text("inspect route not configured", { status: 404 });
1867
1910
  let n = {};
1868
1911
  for (let [e, r] of Object.entries(t.headers)) r !== void 0 && (n[e.toLowerCase()] = Array.isArray(r) ? r.join(", ") : r);
@@ -1938,7 +1981,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
1938
1981
  let t = (e) => z.HttpServerRequest.pipe(j.flatMap((t) => j.gen(function* () {
1939
1982
  let n = {};
1940
1983
  for (let [e, r] of Object.entries(t.headers)) r !== void 0 && (n[e.toLowerCase()] = Array.isArray(r) ? r.join(", ") : r);
1941
- let r = t.method !== "GET" && t.method !== "HEAD" ? yield* t.text.pipe(j.orElseSucceed(() => "")) : "", i = new TextEncoder().encode(r), a = t.url.split("?")[0], o = Bn(n.traceparent), s = yield* j.promise(() => e.handle({
1984
+ let r = t.method !== "GET" && t.method !== "HEAD" ? yield* t.text.pipe(j.orElseSucceed(() => "")) : "", i = new TextEncoder().encode(r), a = t.url.split("?")[0], o = Un(n.traceparent), s = yield* j.promise(() => e.handle({
1942
1985
  method: t.method,
1943
1986
  path: a,
1944
1987
  headers: n,
@@ -1968,8 +2011,8 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
1968
2011
  query: a,
1969
2012
  headers: n,
1970
2013
  rawBody: o
1971
- }, c = yield* j.promise(() => nt(e, s));
1972
- c.status >= 500 && ur.warn(`${t.method} ${i} → ${c.status}`, {
2014
+ }, c = yield* j.promise(() => rt(e, s));
2015
+ c.status >= 500 && pr.warn(`${t.method} ${i} → ${c.status}`, {
1973
2016
  method: t.method,
1974
2017
  path: i,
1975
2018
  status: c.status,
@@ -1981,7 +2024,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
1981
2024
  headers: l
1982
2025
  };
1983
2026
  return c.body instanceof Uint8Array ? B.uint8Array(c.body, u) : B.text(c.body ?? "", u);
1984
- })), j.tapErrorCause((t) => k.isInterruptedOnly(t) ? j.void : j.sync(() => ur.error(`${e.map((e) => e.method).join("|")} ${e[0].path} threw`, { path: e[0].path }, k.squash(t))))), n = /* @__PURE__ */ new Map();
2027
+ })), j.tapErrorCause((t) => k.isInterruptedOnly(t) ? j.void : j.sync(() => pr.error(`${e.map((e) => e.method).join("|")} ${e[0].path} threw`, { path: e[0].path }, k.squash(t))))), n = /* @__PURE__ */ new Map();
1985
2028
  for (let t of e.httpRoutes) {
1986
2029
  let e = n.get(t.path);
1987
2030
  e ? e.push(t) : n.set(t.path, [t]);
@@ -1992,13 +2035,13 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
1992
2035
  });
1993
2036
  l = M.mergeAll(...r);
1994
2037
  }
1995
- let u = et.layerProtocolWebsocketRouter({ path: n }), d = et.layer(e.group), f = et.layer(e.group).pipe(M.provide(et.layerProtocolHttpRouter({ path: "/rpc" })), M.provide($e.layerJson), M.provide(e.httpHandlersLayer ?? e.handlersLayer)), p = M.scopedDiscard(j.gen(function* () {
1996
- let e = yield* et.Protocol;
2038
+ let u = tt.layerProtocolWebsocketRouter({ path: n }), d = tt.layer(e.group), f = tt.layer(e.group).pipe(M.provide(tt.layerProtocolHttpRouter({ path: "/rpc" })), M.provide(et.layerJson), M.provide(e.httpHandlersLayer ?? e.handlersLayer)), p = M.scopedDiscard(j.gen(function* () {
2039
+ let e = yield* tt.Protocol;
1997
2040
  yield* j.forkScoped(j.gen(function* () {
1998
2041
  let t = yield* e.disconnects.take;
1999
- kn(t), Nn(t);
2042
+ Mn(t), In(t);
2000
2043
  }).pipe(j.forever));
2001
- })), m = M.mergeAll(d, p).pipe(M.provide(u), M.provide($e.layerJson), M.provide(e.handlersLayer)), h = M.mergeAll(m, f, s, c, l), g = e.pluginHttpInterceptor, _ = e.healthCheck, v = Number(process.env.VOLTRO_MAX_RPC_BODY_BYTES), y = e.maxRpcBodyBytes ?? (Number.isFinite(v) && v > 0 ? v : 8388608), b = { "cache-control": "no-store" }, x = (e) => j.gen(function* () {
2044
+ })), m = M.mergeAll(d, p).pipe(M.provide(u), M.provide(et.layerJson), M.provide(e.handlersLayer)), h = M.mergeAll(m, f, s, c, l), g = e.pluginHttpInterceptor, _ = e.healthCheck, v = Number(process.env.VOLTRO_MAX_RPC_BODY_BYTES), y = e.maxRpcBodyBytes ?? (Number.isFinite(v) && v > 0 ? v : 8388608), b = { "cache-control": "no-store" }, x = (e) => j.gen(function* () {
2002
2045
  let t = yield* z.HttpServerRequest, n = {};
2003
2046
  for (let [e, r] of Object.entries(t.headers)) r !== void 0 && (n[e.toLowerCase()] = Array.isArray(r) ? r.join(", ") : r);
2004
2047
  let r = t.url.indexOf("?"), i = r === -1 ? t.url : t.url.slice(0, r);
@@ -2039,13 +2082,13 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2039
2082
  status: l.status,
2040
2083
  ...l.headers ? { headers: l.headers } : {}
2041
2084
  });
2042
- }), S = M.unwrapEffect(R.toHttpEffect(h).pipe(j.map((e) => Je.serve(x(e))))).pipe(M.provide(Xe.layer(() => r, { port: t })), M.provide(Ye.layer));
2085
+ }), S = M.unwrapEffect(R.toHttpEffect(h).pipe(j.map((e) => Ye.serve(x(e))))).pipe(M.provide(Ze.layer(() => r, { port: t })), M.provide(Xe.layer));
2043
2086
  e.tracerLayer && (S = S.pipe(M.provide(e.tracerLayer)));
2044
- let C = Ne({ scope: "voltro:rpc" }), ee = M.launch(S).pipe(j.catchAllCause((e) => j.sync(() => {
2087
+ let C = O({ scope: "voltro:rpc" }), ee = M.launch(S).pipe(j.catchAllCause((e) => j.sync(() => {
2045
2088
  C.error("rpc server crashed", {}, k.squash(e)), process.exit(1);
2046
2089
  })));
2047
- return Ze.runMain(ee, { disableErrorReporting: !0 }), r;
2048
- }, yr = (e, t = 1e4) => new Promise((n, r) => {
2090
+ return Qe.runMain(ee, { disableErrorReporting: !0 }), r;
2091
+ }, Sr = (e, t = 1e4) => new Promise((n, r) => {
2049
2092
  if (e.listening) {
2050
2093
  n();
2051
2094
  return;
@@ -2061,13 +2104,13 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2061
2104
  o(e);
2062
2105
  }
2063
2106
  a = setTimeout(() => o(/* @__PURE__ */ Error(`rpc server did not bind within ${t}ms`)), t), e.on("listening", s), e.on("error", c);
2064
- }), br = () => {
2107
+ }), Cr = () => {
2065
2108
  let e = process.env.FRAMEWORK_TRACING?.toLowerCase();
2066
2109
  return e === "console" || e === "otlp" || e === "off" ? e : process.env.OTEL_EXPORTER_OTLP_ENDPOINT || process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT ? "otlp" : "off";
2067
- }, xr = () => {
2110
+ }, wr = () => {
2068
2111
  let e = process.env.FRAMEWORK_METRICS?.toLowerCase();
2069
2112
  return e === "console" || e === "otlp" || e === "off" ? e : process.env.OTEL_EXPORTER_OTLP_ENDPOINT || process.env.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT ? "otlp" : "off";
2070
- }, Sr = async () => {
2113
+ }, Tr = async () => {
2071
2114
  let [e, t, n, r, i] = await Promise.all([
2072
2115
  import("@opentelemetry/sdk-trace-base"),
2073
2116
  import("@opentelemetry/sdk-metrics"),
@@ -2082,7 +2125,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2082
2125
  otlpMetrics: r,
2083
2126
  nodeSdk: i
2084
2127
  };
2085
- }, Cr = (e, t, n) => {
2128
+ }, Er = (e, t, n) => {
2086
2129
  let { PeriodicExportingMetricReader: r, ConsoleMetricExporter: i, InMemoryMetricExporter: a, AggregationTemporality: o } = e.sdkMetrics;
2087
2130
  if (t === "off") return {
2088
2131
  reader: void 0,
@@ -2105,8 +2148,8 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2105
2148
  }),
2106
2149
  inMemory: void 0
2107
2150
  };
2108
- }, wr = async (e = {}) => {
2109
- let t = e.mode ?? br(), n = e.metricsMode ?? xr(), r = e.extraSpanProcessors ?? [], i = e.extraMetricReaders ?? [];
2151
+ }, Dr = async (e = {}) => {
2152
+ let t = e.mode ?? Cr(), n = e.metricsMode ?? wr(), r = e.extraSpanProcessors ?? [], i = e.extraMetricReaders ?? [];
2110
2153
  if (t === "off" && e.traceSink === void 0 && n === "off" && r.length === 0 && i.length === 0) return {
2111
2154
  layer: M.empty,
2112
2155
  mode: t,
@@ -2115,13 +2158,13 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2115
2158
  metricsMode: n,
2116
2159
  inMemoryMetricExporter: void 0
2117
2160
  };
2118
- let a = await Sr(), { ConsoleSpanExporter: o, InMemorySpanExporter: s, SimpleSpanProcessor: c, BatchSpanProcessor: l } = a.sdkTrace, u = t === "off", d = e.serviceName ?? process.env.OTEL_SERVICE_NAME ?? "voltro-app", f, p;
2161
+ let a = await Tr(), { ConsoleSpanExporter: o, InMemorySpanExporter: s, SimpleSpanProcessor: c, BatchSpanProcessor: l } = a.sdkTrace, u = t === "off", d = e.serviceName ?? process.env.OTEL_SERVICE_NAME ?? "voltro-app", f, p;
2119
2162
  e.spanProcessor ? p = e.spanProcessor : u ? p = void 0 : t === "memory" ? (f = new s(), p = new c(f)) : p = t === "console" ? new c(new o()) : new l(new a.otlpTrace.OTLPTraceExporter());
2120
2163
  let m = [
2121
2164
  ...e.traceSink ? [e.traceSink] : [],
2122
2165
  ...p ? [p] : [],
2123
2166
  ...r
2124
- ], h = m.length === 1 ? m[0] : m, { reader: g, inMemory: _ } = Cr(a, n, e.metricExportIntervalMillis ?? (process.env.OTEL_METRIC_EXPORT_INTERVAL ? Number(process.env.OTEL_METRIC_EXPORT_INTERVAL) : 6e4)), v = [...g ? [g] : [], ...i], y = v.length === 0 ? void 0 : v.length === 1 ? v[0] : v, b = {
2167
+ ], h = m.length === 1 ? m[0] : m, { reader: g, inMemory: _ } = Er(a, n, e.metricExportIntervalMillis ?? (process.env.OTEL_METRIC_EXPORT_INTERVAL ? Number(process.env.OTEL_METRIC_EXPORT_INTERVAL) : 6e4)), v = [...g ? [g] : [], ...i], y = v.length === 0 ? void 0 : v.length === 1 ? v[0] : v, b = {
2125
2168
  serviceName: d,
2126
2169
  ...e.serviceVersion ? { serviceVersion: e.serviceVersion } : {},
2127
2170
  ...e.resourceAttributes ? { attributes: e.resourceAttributes } : {}
@@ -2139,18 +2182,18 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2139
2182
  metricsMode: n,
2140
2183
  inMemoryMetricExporter: _
2141
2184
  };
2142
- }, Tr = {
2143
- [at.INTERNAL]: "internal",
2144
- [at.SERVER]: "server",
2145
- [at.CLIENT]: "client",
2146
- [at.PRODUCER]: "producer",
2147
- [at.CONSUMER]: "consumer"
2148
- }, Er = (e) => e[0] * 1e3 + e[1] / 1e6, Dr = 512, Or = 48, kr = (e) => {
2185
+ }, Or = {
2186
+ [ot.INTERNAL]: "internal",
2187
+ [ot.SERVER]: "server",
2188
+ [ot.CLIENT]: "client",
2189
+ [ot.PRODUCER]: "producer",
2190
+ [ot.CONSUMER]: "consumer"
2191
+ }, kr = (e) => e[0] * 1e3 + e[1] / 1e6, Ar = 512, jr = 48, Mr = (e) => {
2149
2192
  let t = {}, n = 0;
2150
2193
  for (let r in e) {
2151
- if (n >= Or) break;
2194
+ if (n >= jr) break;
2152
2195
  let i = e[r];
2153
- if (typeof i == "string") t[r] = i.length > Dr ? `${i.slice(0, Dr)}…` : i;
2196
+ if (typeof i == "string") t[r] = i.length > Ar ? `${i.slice(0, Ar)}…` : i;
2154
2197
  else if (typeof i == "number" || typeof i == "boolean" || i == null) t[r] = i;
2155
2198
  else {
2156
2199
  let e;
@@ -2159,49 +2202,49 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2159
2202
  } catch {
2160
2203
  e = String(i);
2161
2204
  }
2162
- t[r] = e.length > Dr ? `${e.slice(0, Dr)}…` : e;
2205
+ t[r] = e.length > Ar ? `${e.slice(0, Ar)}…` : e;
2163
2206
  }
2164
2207
  n++;
2165
2208
  }
2166
2209
  return t;
2167
- }, Ar = {
2168
- [ot.UNSET]: "unset",
2169
- [ot.OK]: "ok",
2170
- [ot.ERROR]: "error"
2171
- }, jr = (e) => {
2210
+ }, Nr = {
2211
+ [st.UNSET]: "unset",
2212
+ [st.OK]: "ok",
2213
+ [st.ERROR]: "error"
2214
+ }, Pr = (e) => {
2172
2215
  let t = e.spanContext(), n = e.events.length > 0 ? e.events.slice(0, 16).map((e) => ({
2173
2216
  name: e.name,
2174
- tsMs: Er(e.time),
2175
- ...e.attributes ? { attributes: kr(e.attributes) } : {}
2217
+ tsMs: kr(e.time),
2218
+ ...e.attributes ? { attributes: Mr(e.attributes) } : {}
2176
2219
  })) : void 0;
2177
2220
  return {
2178
2221
  traceId: t.traceId,
2179
2222
  spanId: t.spanId,
2180
2223
  parentSpanId: e.parentSpanContext?.spanId ?? null,
2181
2224
  name: e.name,
2182
- kind: Tr[e.kind] ?? "internal",
2183
- attributes: kr(e.attributes),
2184
- startMs: Er(e.startTime),
2185
- endMs: Er(e.endTime),
2186
- durationMs: Er(e.duration),
2187
- status: Ar[e.status.code] ?? "unset",
2225
+ kind: Or[e.kind] ?? "internal",
2226
+ attributes: Mr(e.attributes),
2227
+ startMs: kr(e.startTime),
2228
+ endMs: kr(e.endTime),
2229
+ durationMs: kr(e.duration),
2230
+ status: Nr[e.status.code] ?? "unset",
2188
2231
  ...e.status.message ? { statusMessage: e.status.message } : {},
2189
2232
  ...n ? { events: n } : {}
2190
2233
  };
2191
- }, Mr = (e) => ({
2234
+ }, Fr = (e) => ({
2192
2235
  onStart: () => {},
2193
2236
  onEnd: (t) => {
2194
2237
  try {
2195
- e(jr(t));
2238
+ e(Pr(t));
2196
2239
  } catch {}
2197
2240
  },
2198
2241
  forceFlush: () => Promise.resolve(),
2199
2242
  shutdown: () => Promise.resolve()
2200
- }), Nr = { get: (e) => Promise.resolve(process.env[e]) }, Pr = Nr, Fr = (e) => {
2201
- Pr = e;
2202
- }, Ir = () => {
2203
- Pr = Nr;
2204
- }, Lr = async (e) => await Pr.get(e) ?? process.env[e], Rr = (e) => process.env[e], zr = (e, t = 6e4, n = () => Date.now()) => {
2243
+ }), Ir = { get: (e) => Promise.resolve(process.env[e]) }, Lr = Ir, Rr = (e) => {
2244
+ Lr = e;
2245
+ }, zr = () => {
2246
+ Lr = Ir;
2247
+ }, Br = async (e) => await Lr.get(e) ?? process.env[e], Vr = (e) => process.env[e], Hr = (e, t = 6e4, n = () => Date.now()) => {
2205
2248
  let r = /* @__PURE__ */ new Map();
2206
2249
  return { get: async (i) => {
2207
2250
  let a = r.get(i);
@@ -2212,12 +2255,12 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2212
2255
  at: n()
2213
2256
  }), o;
2214
2257
  } };
2215
- }, Br = (e) => {
2258
+ }, Ur = (e) => {
2216
2259
  let t = {
2217
2260
  accept: "application/json",
2218
2261
  ...e.headers ?? {}
2219
2262
  };
2220
- if (e.perKey) return zr({ get: async (n) => {
2263
+ if (e.perKey) return Hr({ get: async (n) => {
2221
2264
  let r = await fetch(`${e.url.replace(/\/$/, "")}/${encodeURIComponent(n)}`, { headers: t });
2222
2265
  if (!r.ok) return;
2223
2266
  let i = await r.json();
@@ -2228,7 +2271,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2228
2271
  let t = (await a())[e];
2229
2272
  return typeof t == "string" ? t : void 0;
2230
2273
  } };
2231
- }, Vr = (e) => e === void 0 || e === "env" || typeof e == "object" && e.kind === "env" ? Nr : e.kind === "custom" ? e.backend : e.kind === "http" ? Br(e) : Nr, Hr = (e) => /^[0-9a-f]{64}$/i.test(e) ? Buffer.from(e, "hex") : ge(e, "voltro:field-encryption:v1", 32), Ur = (t) => {
2274
+ }, Wr = (e) => e === void 0 || e === "env" || typeof e == "object" && e.kind === "env" ? Ir : e.kind === "custom" ? e.backend : e.kind === "http" ? Ur(e) : Ir, Gr = (e) => /^[0-9a-f]{64}$/i.test(e) ? Buffer.from(e, "hex") : ge(e, "voltro:field-encryption:v1", 32), Kr = (t) => {
2232
2275
  if (t.length !== 32) throw Error(`field cipher key must be 32 bytes, got ${t.length}`);
2233
2276
  return {
2234
2277
  encrypt: (n) => {
@@ -2242,45 +2285,45 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2242
2285
  return o.setAuthTag(Buffer.from(i, "base64")), Buffer.concat([o.update(Buffer.from(a, "base64")), o.final()]).toString("utf8");
2243
2286
  }
2244
2287
  };
2245
- }, Wr = (e) => Ur(Hr(e)), Gr, Kr = (e) => {
2246
- Gr = e;
2247
- }, qr = () => Gr, Jr = "no field cipher registered — enable `@voltro/plugin-governance` `governancePlugin({ fieldEncryption: { key } })` (or call setFieldCipher) so a key is available.", Yr = (e) => {
2248
- let t = qr();
2249
- if (!t) throw Error(`encryptField: ${Jr}`);
2288
+ }, qr = (e) => Kr(Gr(e)), Jr, Yr = (e) => {
2289
+ Jr = e;
2290
+ }, Xr = () => Jr, Zr = "no field cipher registered — enable `@voltro/plugin-governance` `governancePlugin({ fieldEncryption: { key } })` (or call setFieldCipher) so a key is available.", Qr = (e) => {
2291
+ let t = Xr();
2292
+ if (!t) throw Error(`encryptField: ${Zr}`);
2250
2293
  return t.encrypt(e);
2251
- }, Xr = (e) => {
2294
+ }, $r = (e) => {
2252
2295
  if (!x(e)) return e;
2253
- let t = qr();
2254
- if (!t) throw Error(`decryptField: ${Jr}`);
2296
+ let t = Xr();
2297
+ if (!t) throw Error(`decryptField: ${Zr}`);
2255
2298
  return t.decrypt(e);
2256
- }, J = "_voltro_idempotency", Zr = (e) => {
2299
+ }, q = "_voltro_idempotency", ei = (e) => {
2257
2300
  if (e == null) return null;
2258
2301
  let t = typeof e == "string" ? JSON.parse(e) : e;
2259
2302
  return t && typeof t == "object" && "status" in t ? t : null;
2260
- }, Qr = (e) => ({
2303
+ }, ti = (e) => ({
2261
2304
  scope: e.scope,
2262
2305
  key: e.key,
2263
2306
  status: e.status === "completed" ? "completed" : "in_flight",
2264
- response: Zr(e.response),
2265
- createdAt: Me(e.createdAt)
2266
- }), $r = async (e, n, r) => (await e.query({
2267
- table: J,
2307
+ response: ei(e.response),
2308
+ createdAt: Pe(e.createdAt)
2309
+ }), ni = async (e, n, r) => (await e.query({
2310
+ table: q,
2268
2311
  predicate: t(u("scope", n), u("key", r)),
2269
2312
  order: [],
2270
2313
  take: 1,
2271
2314
  skip: void 0,
2272
2315
  projection: void 0
2273
- }))[0] ?? null, ei = (e) => ({
2316
+ }))[0] ?? null, ri = (e) => ({
2274
2317
  get: async (t, n) => {
2275
- let r = await $r(e, t, n);
2276
- return r ? Qr(r) : null;
2318
+ let r = await ni(e, t, n);
2319
+ return r ? ti(r) : null;
2277
2320
  },
2278
2321
  claim: async (t, n, r, i) => {
2279
2322
  for (let a = 0; a < 2; a++) {
2280
2323
  let a = f({
2281
2324
  kind: "typeid",
2282
2325
  prefix: "idem"
2283
- }, J), o = await e.insertIgnore(J, {
2326
+ }, q), o = await e.insertIgnore(q, {
2284
2327
  id: a,
2285
2328
  scope: t,
2286
2329
  key: n,
@@ -2289,11 +2332,11 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2289
2332
  createdAt: new Date(r)
2290
2333
  }, { conflictColumns: ["scope", "key"] });
2291
2334
  if (o.id === a) return "claimed";
2292
- if (r - Me(o.createdAt) < i) return Qr(o);
2293
- await e.delete(J, o.id);
2335
+ if (r - Pe(o.createdAt) < i) return ti(o);
2336
+ await e.delete(q, o.id);
2294
2337
  }
2295
- let a = await $r(e, t, n);
2296
- return a ? Qr(a) : {
2338
+ let a = await ni(e, t, n);
2339
+ return a ? ti(a) : {
2297
2340
  scope: t,
2298
2341
  key: n,
2299
2342
  status: "in_flight",
@@ -2302,36 +2345,36 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2302
2345
  };
2303
2346
  },
2304
2347
  complete: async (t, n, r, i) => {
2305
- let a = await $r(e, t, n);
2306
- a && await e.update(J, a.id, {
2348
+ let a = await ni(e, t, n);
2349
+ a && await e.update(q, a.id, {
2307
2350
  status: "completed",
2308
2351
  response: r
2309
2352
  });
2310
2353
  },
2311
2354
  release: async (t, n) => {
2312
- let r = await $r(e, t, n);
2313
- r && await e.delete(J, r.id);
2355
+ let r = await ni(e, t, n);
2356
+ r && await e.delete(q, r.id);
2314
2357
  }
2315
- }), Y = "_voltro_kv", ti = (e) => {
2358
+ }), J = "_voltro_kv", ii = (e) => {
2316
2359
  if (e == null) return null;
2317
2360
  if (e instanceof Date) return e.getTime();
2318
2361
  if (typeof e == "number") return e;
2319
2362
  let t = Date.parse(String(e));
2320
2363
  return Number.isNaN(t) ? null : t;
2321
- }, ni = (e, t) => {
2322
- let n = ti(e.expiresAt);
2364
+ }, ai = (e, t) => {
2365
+ let n = ii(e.expiresAt);
2323
2366
  return n !== null && n <= t;
2324
- }, ri = (e) => e === null ? null : JSON.parse(e), ii = async (e, t) => (await e.query({
2325
- table: Y,
2367
+ }, oi = (e) => e === null ? null : JSON.parse(e), si = async (e, t) => (await e.query({
2368
+ table: J,
2326
2369
  predicate: u("key", t),
2327
2370
  order: [],
2328
2371
  take: 1,
2329
2372
  skip: void 0,
2330
2373
  projection: void 0
2331
- }))[0] ?? null, ai = (e) => {
2374
+ }))[0] ?? null, ci = (e) => {
2332
2375
  let n = (e, t, n) => j.tryPromise({
2333
2376
  try: n,
2334
- catch: (n) => new ct({
2377
+ catch: (n) => new lt({
2335
2378
  operation: e,
2336
2379
  key: t,
2337
2380
  cause: String(n)
@@ -2339,15 +2382,15 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2339
2382
  });
2340
2383
  return {
2341
2384
  get: (t) => n("get", t, async () => {
2342
- let n = await ii(e, t);
2343
- return n === null ? P.none() : ni(n, Date.now()) ? (await e.delete(Y, n.id), P.none()) : P.some(ri(n.value));
2385
+ let n = await si(e, t);
2386
+ return n === null ? P.none() : ai(n, Date.now()) ? (await e.delete(J, n.id), P.none()) : P.some(oi(n.value));
2344
2387
  }),
2345
2388
  set: (t, r, i) => n("set", t, async () => {
2346
2389
  let n = Date.now(), a = i?.ttlMs !== void 0 && i.ttlMs > 0 ? new Date(n + i.ttlMs) : null, o = f({
2347
2390
  kind: "typeid",
2348
2391
  prefix: "kv"
2349
- }, Y);
2350
- await e.upsert(Y, {
2392
+ }, J);
2393
+ await e.upsert(J, {
2351
2394
  id: o,
2352
2395
  key: t,
2353
2396
  value: JSON.stringify(r),
@@ -2363,36 +2406,36 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2363
2406
  });
2364
2407
  }),
2365
2408
  delete: (t) => n("delete", t, async () => {
2366
- let n = await ii(e, t);
2409
+ let n = await si(e, t);
2367
2410
  if (n === null) return !1;
2368
- let r = !ni(n, Date.now());
2369
- return await e.delete(Y, n.id), r;
2411
+ let r = !ai(n, Date.now());
2412
+ return await e.delete(J, n.id), r;
2370
2413
  }),
2371
2414
  has: (t) => n("has", t, async () => {
2372
- let n = await ii(e, t);
2373
- return n === null ? !1 : ni(n, Date.now()) ? (await e.delete(Y, n.id), !1) : !0;
2415
+ let n = await si(e, t);
2416
+ return n === null ? !1 : ai(n, Date.now()) ? (await e.delete(J, n.id), !1) : !0;
2374
2417
  }),
2375
2418
  list: (r) => n("list", "", async () => {
2376
2419
  let n = Date.now(), i = re(S("expiresAt"), h("expiresAt", new Date(n))), a = r === "" ? i : t(o("key", r), i), s = await e.query({
2377
- table: Y,
2420
+ table: J,
2378
2421
  predicate: a,
2379
2422
  order: [],
2380
2423
  take: void 0,
2381
2424
  skip: void 0,
2382
2425
  projection: void 0
2383
2426
  }), c = [];
2384
- for (let e of s) ni(e, n) || (r === "" || e.key.startsWith(r)) && c.push(e.key);
2427
+ for (let e of s) ai(e, n) || (r === "" || e.key.startsWith(r)) && c.push(e.key);
2385
2428
  return c;
2386
2429
  }),
2387
2430
  clear: () => n("clear", "", async () => {
2388
- await e.deleteMany(Y, { where: {
2431
+ await e.deleteMany(J, { where: {
2389
2432
  column: "id",
2390
2433
  op: "isNotNull"
2391
2434
  } });
2392
2435
  })
2393
2436
  };
2394
- }, oi = async ({ store: e, env: t = process.env }) => {
2395
- let n = (t.KV_BACKEND ?? "database").toLowerCase(), r = n === "redis" ? "redis" : n === "memory" ? "memory" : "database", i = r === "redis" ? ft(t.KV_KEY_PREFIX ? { keyPrefix: t.KV_KEY_PREFIX } : {}).pipe(M.provide(ut)) : r === "memory" ? dt() : M.succeed(lt, lt.of(ai(e))), a = Be.make(st.Default.pipe(M.provide(i))), o = await a.runPromise(st);
2437
+ }, li = async ({ store: e, env: t = process.env }) => {
2438
+ let n = (t.KV_BACKEND ?? "database").toLowerCase(), r = n === "redis" ? "redis" : n === "memory" ? "memory" : "database", i = r === "redis" ? pt(t.KV_KEY_PREFIX ? { keyPrefix: t.KV_KEY_PREFIX } : {}).pipe(M.provide(dt)) : r === "memory" ? ft() : M.succeed(ut, ut.of(ci(e))), a = Ve.make(ct.Default.pipe(M.provide(i))), o = await a.runPromise(ct);
2396
2439
  return {
2397
2440
  kv: {
2398
2441
  get: (e) => a.runPromise(o.get(e)).then((e) => P.getOrUndefined(e)),
@@ -2407,7 +2450,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2407
2450
  backend: r,
2408
2451
  dispose: () => a.dispose()
2409
2452
  };
2410
- }, si = {
2453
+ }, ui = {
2411
2454
  get: () => Promise.resolve(void 0),
2412
2455
  getOrElse: (e, t) => Promise.resolve(t()),
2413
2456
  set: () => Promise.resolve(),
@@ -2415,7 +2458,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2415
2458
  has: () => Promise.resolve(!1),
2416
2459
  list: () => Promise.resolve([]),
2417
2460
  clear: () => Promise.resolve()
2418
- }, ci = "_voltro_api_keys", li = (e) => pe("sha256").update(e, "utf8").digest("hex"), ui = (e = "voltro_") => `${e}${me(30).toString("base64url")}`, di = (e) => ({
2461
+ }, di = "_voltro_api_keys", fi = (e) => pe("sha256").update(e, "utf8").digest("hex"), pi = (e = "voltro_") => `${e}${me(30).toString("base64url")}`, mi = (e) => ({
2419
2462
  id: e.id,
2420
2463
  name: e.name,
2421
2464
  keyPrefix: e.keyPrefix,
@@ -2425,17 +2468,17 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2425
2468
  expiresAt: e.expiresAt,
2426
2469
  revokedAt: e.revokedAt,
2427
2470
  createdAt: e.createdAt
2428
- }), fi = (e, t) => e.revokedAt === null && (e.expiresAt === null || e.expiresAt > t), pi = (e, t = {}) => {
2471
+ }), hi = (e, t) => e.revokedAt === null && (e.expiresAt === null || e.expiresAt > t), gi = (e, t = {}) => {
2429
2472
  let n = t.prefix ?? "voltro_", r = async (t) => {
2430
- let r = ui(n), i = f({
2473
+ let r = pi(n), i = f({
2431
2474
  kind: "typeid",
2432
2475
  prefix: "apikey"
2433
- }, ci), a = t.scopes ?? [], o = t.expiresAt == null ? null : t.expiresAt instanceof Date ? t.expiresAt.getTime() : t.expiresAt;
2476
+ }, di), a = t.scopes ?? [], o = t.expiresAt == null ? null : t.expiresAt instanceof Date ? t.expiresAt.getTime() : t.expiresAt;
2434
2477
  return await e.insert({
2435
2478
  id: i,
2436
2479
  tenantId: t.tenantId ?? null,
2437
2480
  name: t.name,
2438
- hashedKey: li(r),
2481
+ hashedKey: fi(r),
2439
2482
  keyPrefix: r.slice(0, n.length + 6),
2440
2483
  scopes: a,
2441
2484
  lastUsedAt: null,
@@ -2453,7 +2496,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2453
2496
  };
2454
2497
  }, i = async (t, n = Date.now()) => {
2455
2498
  let r = await e.findByHash(t);
2456
- return !r || !fi(r, n) ? null : (await e.patch(r.id, { lastUsedAt: n }), {
2499
+ return !r || !hi(r, n) ? null : (await e.patch(r.id, { lastUsedAt: n }), {
2457
2500
  id: r.id,
2458
2501
  tenantId: r.tenantId ?? "",
2459
2502
  scopes: r.scopes ?? []
@@ -2462,7 +2505,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2462
2505
  return {
2463
2506
  issue: r,
2464
2507
  resolveByHash: i,
2465
- verify: (e, t) => i(li(e), t),
2508
+ verify: (e, t) => i(fi(e), t),
2466
2509
  revoke: async (t, n = Date.now()) => await e.findById(t) ? (await e.patch(t, { revokedAt: n }), !0) : !1,
2467
2510
  rotate: async (t, n = Date.now()) => {
2468
2511
  let i = await e.findById(t);
@@ -2473,9 +2516,9 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2473
2516
  createdBy: i.createdBy
2474
2517
  })) : null;
2475
2518
  },
2476
- list: async (t) => (await e.listByTenant(t)).map(di)
2519
+ list: async (t) => (await e.listByTenant(t)).map(mi)
2477
2520
  };
2478
- }, mi = () => {
2521
+ }, _i = () => {
2479
2522
  let e = /* @__PURE__ */ new Map();
2480
2523
  return {
2481
2524
  insert: async (t) => {
@@ -2492,21 +2535,21 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2492
2535
  });
2493
2536
  }
2494
2537
  };
2495
- }, hi = (e) => e == null ? null : e instanceof Date ? e.getTime() : typeof e == "number" ? e : typeof e == "string" ? new Date(e).getTime() : null, gi = (e) => ({
2538
+ }, vi = (e) => e == null ? null : e instanceof Date ? e.getTime() : typeof e == "number" ? e : typeof e == "string" ? new Date(e).getTime() : null, yi = (e) => ({
2496
2539
  id: String(e.id),
2497
2540
  tenantId: e.tenantId ?? null,
2498
2541
  name: String(e.name),
2499
2542
  hashedKey: String(e.hashedKey),
2500
2543
  keyPrefix: String(e.keyPrefix),
2501
2544
  scopes: e.scopes ?? null,
2502
- lastUsedAt: hi(e.lastUsedAt),
2503
- expiresAt: hi(e.expiresAt),
2504
- revokedAt: hi(e.revokedAt),
2545
+ lastUsedAt: vi(e.lastUsedAt),
2546
+ expiresAt: vi(e.expiresAt),
2547
+ revokedAt: vi(e.revokedAt),
2505
2548
  createdBy: e.createdBy ?? null,
2506
- createdAt: hi(e.createdAt) ?? 0
2507
- }), _i = (e) => {
2549
+ createdAt: vi(e.createdAt) ?? 0
2550
+ }), bi = (e) => {
2508
2551
  let t = async (t) => await e.query({
2509
- table: ci,
2552
+ table: di,
2510
2553
  predicate: t,
2511
2554
  order: [],
2512
2555
  take: void 0,
@@ -2524,32 +2567,32 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2524
2567
  };
2525
2568
  return {
2526
2569
  insert: async (t) => {
2527
- await e.insert(ci, n(t));
2570
+ await e.insert(di, n(t));
2528
2571
  },
2529
2572
  findByHash: async (e) => {
2530
2573
  let n = await t(u("hashedKey", e));
2531
- return n[0] ? gi(n[0]) : null;
2574
+ return n[0] ? yi(n[0]) : null;
2532
2575
  },
2533
2576
  findById: async (e) => {
2534
2577
  let n = await t(u("id", e));
2535
- return n[0] ? gi(n[0]) : null;
2578
+ return n[0] ? yi(n[0]) : null;
2536
2579
  },
2537
- listByTenant: async (e) => (await t(e === null ? void 0 : u("tenantId", e))).map(gi).filter((t) => e === null || t.tenantId === e),
2580
+ listByTenant: async (e) => (await t(e === null ? void 0 : u("tenantId", e))).map(yi).filter((t) => e === null || t.tenantId === e),
2538
2581
  patch: async (t, r) => {
2539
- await e.update(ci, t, n(r));
2582
+ await e.update(di, t, n(r));
2540
2583
  }
2541
2584
  };
2542
- }, vi = (e, t = {}) => pt({
2585
+ }, xi = (e, t = {}) => mt({
2543
2586
  id: "voltro-apikey",
2544
2587
  ...t.prefix ? { prefix: t.prefix } : {},
2545
2588
  resolveKey: (t) => e.resolveByHash(t)
2546
- }), yi = (e) => {
2589
+ }), Si = (e) => {
2547
2590
  let t = e.subject;
2548
2591
  return {
2549
2592
  id: t.id ?? null,
2550
2593
  tenantId: t.tenantId ?? null
2551
2594
  };
2552
- }, bi = (e, t = "/v1/api-keys") => {
2595
+ }, Ci = (e, t = "/v1/api-keys") => {
2553
2596
  let n = I.Struct({
2554
2597
  id: I.String,
2555
2598
  name: I.String,
@@ -2562,11 +2605,11 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2562
2605
  createdAt: I.Number
2563
2606
  });
2564
2607
  return [
2565
- tt({
2608
+ nt({
2566
2609
  method: "POST",
2567
2610
  path: `${t}/issue`,
2568
2611
  summary: "Issue an API key (the token is returned ONCE).",
2569
- guards: [rt(ve)],
2612
+ guards: [it(ve)],
2570
2613
  input: I.Struct({ body: I.Struct({
2571
2614
  name: I.String,
2572
2615
  scopes: I.optional(I.Array(I.String)),
@@ -2578,7 +2621,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2578
2621
  keyPrefix: I.String
2579
2622
  }),
2580
2623
  handler: async (t, n) => {
2581
- let r = t.body, i = yi(n), a = await e.issue({
2624
+ let r = t.body, i = Si(n), a = await e.issue({
2582
2625
  tenantId: i.tenantId,
2583
2626
  name: r.name,
2584
2627
  ...r.scopes ? { scopes: r.scopes } : {},
@@ -2592,41 +2635,68 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2592
2635
  };
2593
2636
  }
2594
2637
  }),
2595
- tt({
2638
+ nt({
2596
2639
  method: "GET",
2597
2640
  path: t,
2598
2641
  summary: "List the caller tenant's API keys (no secrets).",
2599
- guards: [rt(ve)],
2642
+ guards: [it(ve)],
2600
2643
  input: I.Struct({}),
2601
2644
  output: I.Struct({ keys: I.Array(n) }),
2602
- handler: async (t, n) => ({ keys: [...await e.list(yi(n).tenantId)] })
2645
+ handler: async (t, n) => ({ keys: [...await e.list(Si(n).tenantId)] })
2603
2646
  }),
2604
- tt({
2647
+ nt({
2605
2648
  method: "POST",
2606
2649
  path: `${t}/revoke`,
2607
2650
  summary: "Revoke an API key by id.",
2608
- guards: [rt(ve)],
2651
+ guards: [it(ve)],
2609
2652
  input: I.Struct({ body: I.Struct({ id: I.String }) }),
2610
2653
  output: I.Struct({ ok: I.Boolean }),
2611
2654
  handler: async (t, n) => ({ ok: await e.revoke(t.body.id) })
2612
2655
  })
2613
2656
  ];
2614
- }, xi = (e) => Qe.make(e.name, {
2657
+ }, wi = class extends I.TaggedError()("TenantScopeViolation", {
2658
+ table: I.String,
2659
+ reason: I.String
2660
+ }) {}, Ti = class extends I.TaggedError()("StoreOperationFailed", {
2661
+ operation: I.String,
2662
+ table: I.String,
2663
+ cause: I.String
2664
+ }) {}, Ei = class extends I.TaggedError()("TableValidationFailed", {
2665
+ table: I.String,
2666
+ summary: I.String,
2667
+ issues: I.Array(I.Struct({
2668
+ path: I.String,
2669
+ message: I.String
2670
+ }))
2671
+ }) {}, Di = class extends Ie.Tag("@voltro/EffectStore")() {}, Oi = (e, t) => (n) => n instanceof wi ? n : new Ti({
2672
+ operation: e,
2673
+ table: t,
2674
+ cause: String(n)
2675
+ }), ki = (e, t, n) => j.tryPromise({
2676
+ try: n,
2677
+ catch: Oi(e, t)
2678
+ }), Ai = (e) => M.succeed(Di, {
2679
+ query: ((t) => ki("query", t.table, () => e.query(t))),
2680
+ insert: (t, n) => ki("insert", t, () => e.insert(t, n)),
2681
+ update: (t, n, r) => ki("update", t, () => e.update(t, n, r)),
2682
+ delete: (t, n) => ki("delete", t, () => e.delete(t, n)),
2683
+ hardDelete: (t, n) => ki("hardDelete", t, () => e.hardDelete(t, n))
2684
+ }), ji = (e) => $e.make(e.name, {
2615
2685
  payload: e.payloadSchema,
2616
- success: Ce,
2686
+ success: we,
2617
2687
  error: e.errorSchema
2618
- }), X = (e, t) => ({
2688
+ }), Y = (e, t) => ({
2619
2689
  id: t,
2620
2690
  workflowName: e,
2621
2691
  executionId: t,
2622
2692
  status: "running"
2623
- }), Si = X, Ci = (e) => {
2693
+ }), Mi = Y, Ni = (e) => {
2624
2694
  let t = k.failureOption(e), n = t._tag === "Some" ? t.value : k.squash(e);
2625
2695
  return {
2626
2696
  tag: n && typeof n == "object" && "_tag" in n ? String(n._tag) : null,
2627
2697
  message: n?.message ?? String(n)
2628
2698
  };
2629
- }, wi = (e, t, n) => {
2699
+ }, Pi = (e, t, n) => {
2630
2700
  if (n === void 0) return {
2631
2701
  id: t,
2632
2702
  workflowName: e,
@@ -2641,7 +2711,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2641
2711
  };
2642
2712
  if (typeof n == "object" && n && n._tag === "Complete") {
2643
2713
  let r = n.exit;
2644
- return ze.isSuccess(r) ? {
2714
+ return Be.isSuccess(r) ? {
2645
2715
  id: t,
2646
2716
  workflowName: e,
2647
2717
  executionId: t,
@@ -2652,7 +2722,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2652
2722
  workflowName: e,
2653
2723
  executionId: t,
2654
2724
  status: "failed",
2655
- error: Ci(r.cause)
2725
+ error: Ni(r.cause)
2656
2726
  };
2657
2727
  }
2658
2728
  return {
@@ -2661,17 +2731,17 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2661
2731
  executionId: t,
2662
2732
  status: "running"
2663
2733
  };
2664
- }, Ti = (e) => new Promise((t) => setTimeout(t, e)), Ei = (e) => {
2734
+ }, Fi = (e) => new Promise((t) => setTimeout(t, e)), Ii = (e) => {
2665
2735
  let t = new Map(e.workflows.map((e) => [e.definition.name, e.definition])), n = (e) => {
2666
2736
  let n = t.get(e);
2667
2737
  if (!n) throw Error(`Unknown workflow: ${e}`);
2668
2738
  return n;
2669
2739
  }, r = async (t, r) => {
2670
2740
  let i = n(t);
2671
- return wi(t, r, await e.runEffect(i.poll(r)));
2672
- }, i = async () => e.runEffect(mt()), a = async (t, r, i) => {
2741
+ return Pi(t, r, await e.runEffect(i.poll(r)));
2742
+ }, i = async () => e.runEffect(ht()), a = async (t, r, i) => {
2673
2743
  let a = n(t), o;
2674
- return i?.callerContext !== void 0 && (o = await e.runEffect(a.executionId(r)), await e.rememberStartContext?.(t, o, i.callerContext)), i?.wait ? (await e.runEffect(a.execute(r)), X(t, o ?? await e.runEffect(a.executionId(r)))) : X(t, await e.runEffect(a.execute(r, { discard: !0 })));
2744
+ return i?.callerContext !== void 0 && (o = await e.runEffect(a.executionId(r)), await e.rememberStartContext?.(t, o, i.callerContext)), i?.wait ? (await e.runEffect(a.execute(r)), Y(t, o ?? await e.runEffect(a.executionId(r)))) : Y(t, await e.runEffect(a.execute(r, { discard: !0 })));
2675
2745
  };
2676
2746
  return {
2677
2747
  start: a,
@@ -2709,7 +2779,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2709
2779
  let e = await r(i, a);
2710
2780
  if (e.status === "succeeded" || e.status === "failed" || e.status === "cancelled") return e;
2711
2781
  if (o?.timeoutMs !== void 0 && Date.now() - s >= o.timeoutMs) throw Error(`Timed out waiting for workflow '${i}' run '${a}'`);
2712
- await Ti(c);
2782
+ await Fi(c);
2713
2783
  }
2714
2784
  }),
2715
2785
  cancel: async (t, r) => {
@@ -2747,22 +2817,22 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2747
2817
  return e.retry(t, n);
2748
2818
  }
2749
2819
  };
2750
- }, Di = (e, t) => ({
2820
+ }, Li = (e, t) => ({
2751
2821
  ...e,
2752
2822
  start: async (n, r, i) => {
2753
2823
  if (i?.wait) throw Error("ctx.workflows.start(..., { wait: true }) is not allowed inside a mutation transaction; start the workflow and wait after commit.");
2754
2824
  let a = await e.executionId(n, r);
2755
- return t(() => e.start(n, r)), X(n, a);
2825
+ return t(() => e.start(n, r)), Y(n, a);
2756
2826
  },
2757
2827
  child: async (n, r, i) => {
2758
2828
  if (i?.wait) throw Error("ctx.workflows.child(..., { wait: true }) is not allowed inside a mutation transaction; start the child workflow and wait after commit.");
2759
2829
  let a = await e.executionId(n, r);
2760
- return t(() => e.child(n, r, i)), X(n, a);
2830
+ return t(() => e.child(n, r, i)), Y(n, a);
2761
2831
  },
2762
2832
  run: async () => {
2763
2833
  throw Error("ctx.workflows.run(...) is not allowed inside a mutation transaction; use ctx.workflows.start(...) so the workflow starts after commit.");
2764
2834
  }
2765
- }), Oi = (e, t) => ({
2835
+ }), Ri = (e, t) => ({
2766
2836
  ...e,
2767
2837
  start: (n, r, i) => e.start(n, r, {
2768
2838
  ...i,
@@ -2776,7 +2846,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2776
2846
  ...i,
2777
2847
  callerContext: t
2778
2848
  })
2779
- }), ki = (e) => {
2849
+ }), zi = (e) => {
2780
2850
  let t = () => {
2781
2851
  let t = e();
2782
2852
  if (!t) throw Error("Workflow runtime is not ready yet");
@@ -2797,28 +2867,28 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2797
2867
  listRuns: ((e) => t().listRuns(e)),
2798
2868
  retry: (e, n) => t().retry(e, n)
2799
2869
  };
2800
- }, Ai = (e, t) => {
2870
+ }, Bi = (e, t) => {
2801
2871
  let n = {};
2802
- for (let r of e) n[r.definition.name] = (e) => (t ? j.promise(() => t.start(r.definition.name, e)) : r.definition.execute(e, { discard: !0 }).pipe(j.map((e) => X(r.definition.name, e)))).pipe(j.withSpan(`workflow.${r.definition.name}`, { attributes: { "framework.kind": "workflow" } }));
2872
+ for (let r of e) n[r.definition.name] = (e) => (t ? j.promise(() => t.start(r.definition.name, e)) : r.definition.execute(e, { discard: !0 }).pipe(j.map((e) => Y(r.definition.name, e)))).pipe(j.withSpan(`workflow.${r.definition.name}`, { attributes: { "framework.kind": "workflow" } }));
2803
2873
  return n;
2804
- }, ji = (e, t, n) => e.map((e) => e.definition.toLayer(((r, i) => {
2874
+ }, Vi = (e, t, n) => e.map((e) => e.definition.toLayer(((r, i) => {
2805
2875
  let a = t.resolveStartContext?.(e.definition.name, i);
2806
2876
  return (a === void 0 ? j.succeed(void 0) : j.promise(() => Promise.resolve(a))).pipe(j.flatMap((a) => {
2807
- let o = e.buildExecute(t.buildContext(a, {
2877
+ let o = t.buildContext(a, {
2808
2878
  workflowName: e.definition.name,
2809
2879
  executionId: i,
2810
2880
  parentExecutionId: a?.parentExecutionId ?? null,
2811
2881
  parentClosePolicy: a?.parentClosePolicy ?? null
2812
- }));
2813
- return (n?.(e, o, a) ?? o)(r, i);
2882
+ }), s = e.buildExecute(o), c = (n?.(e, s, a) ?? s)(r, i), l = o?.store;
2883
+ return l === void 0 ? c : j.provide(c, Ai(l));
2814
2884
  }));
2815
- }))), Mi = (e) => ({
2885
+ }))), Hi = (e) => ({
2816
2886
  _tag: "workflowEventTrigger",
2817
2887
  ...e
2818
- }), Ni = Mi, Pi = (e) => typeof e == "object" && !!e && e._tag === "workflowEventTrigger", Fi = () => {
2888
+ }), Ui = Hi, Wi = (e) => typeof e == "object" && !!e && e._tag === "workflowEventTrigger", Gi = () => {
2819
2889
  let e = globalThis.crypto;
2820
2890
  return typeof e?.randomUUID == "function" ? e.randomUUID() : `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`;
2821
- }, Ii = (e) => `${e}_${Fi()}`, Li = (e) => e.id ?? `${e.event}->${e.workflow}`, Ri = T("_voltro_workflow_events", {
2891
+ }, Ki = (e) => `${e}_${Gi()}`, qi = (e) => e.id ?? `${e.event}->${e.workflow}`, Ji = T("_voltro_workflow_events", {
2822
2892
  id: v({ prefix: "wfe" }),
2823
2893
  name: E(),
2824
2894
  payload: C(),
@@ -2826,7 +2896,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2826
2896
  subject: C().nullable(),
2827
2897
  traceId: E().nullable(),
2828
2898
  occurredAt: D().default("now")
2829
- }).index(["name"]).index(["source"]).index(["occurredAt"]).reactive(), zi = T("_voltro_workflow_event_deliveries", {
2899
+ }).index(["name"]).index(["source"]).index(["occurredAt"]).reactive(), Yi = T("_voltro_workflow_event_deliveries", {
2830
2900
  id: v({ prefix: "wfed" }),
2831
2901
  eventId: E(),
2832
2902
  eventName: E(),
@@ -2844,8 +2914,8 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2844
2914
  errorMessage: E().nullable(),
2845
2915
  createdAt: D().default("now"),
2846
2916
  completedAt: D().nullable()
2847
- }).index(["eventId"]).index(["eventName"]).index(["triggerId"]).index(["workflowName"]).index(["status"]).reactive(), Bi = (e) => {
2848
- let t = e.makeId ?? Ii, n = /* @__PURE__ */ new Map();
2917
+ }).index(["eventId"]).index(["eventName"]).index(["triggerId"]).index(["workflowName"]).index(["status"]).reactive(), Xi = (e) => {
2918
+ let t = e.makeId ?? Ki, n = /* @__PURE__ */ new Map();
2849
2919
  for (let t of e.triggers) {
2850
2920
  let e = n.get(t.event);
2851
2921
  e ? e.push(t) : n.set(t.event, [t]);
@@ -2886,7 +2956,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2886
2956
  });
2887
2957
  let p = o(n), m = [];
2888
2958
  for (let o of p) {
2889
- let s = Li(o), l = o.workflow, d;
2959
+ let s = qi(o), l = o.workflow, d;
2890
2960
  try {
2891
2961
  let p = o.idempotencyKey?.(f) ?? `${c}:${s}`;
2892
2962
  if (o.filter && !await o.filter(f)) {
@@ -2989,11 +3059,266 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
2989
3059
  triggered: m
2990
3060
  };
2991
3061
  } };
2992
- }, Vi = M.effect(Ke.HttpClient, j.map(Ke.HttpClient, (e) => e.pipe(Ke.mapRequestEffect((e) => j.currentSpan.pipe(j.map((t) => e.headers.traceparent === void 0 ? qe.setHeader(e, "traceparent", Rn({
3062
+ }, Zi = O({ scope: "voltro:outbox" }), X = "_voltro_outbox", Qi = {
3063
+ kind: "typeid",
3064
+ prefix: "obx"
3065
+ }, $i = T(X, {
3066
+ id: v({ prefix: "obx" }),
3067
+ effect: E(),
3068
+ payload: C(),
3069
+ status: E(),
3070
+ attempts: b(),
3071
+ maxAttempts: b(),
3072
+ nextAttemptAt: D(),
3073
+ idempotencyKey: E().nullable(),
3074
+ lastError: E().nullable(),
3075
+ subjectId: E().nullable(),
3076
+ tenantId: E().nullable(),
3077
+ traceId: E().nullable(),
3078
+ createdAt: D(),
3079
+ deliveredAt: D().nullable()
3080
+ }), ea = (e) => {
3081
+ if (e.effect.trim() === "") throw Error("defineOutboxHandler: `effect` must be a non-empty name");
3082
+ if (e.maxAttempts !== void 0 && e.maxAttempts < 1) throw Error(`defineOutboxHandler("${e.effect}"): maxAttempts must be >= 1`);
3083
+ return e;
3084
+ }, ta = 8, na = (e) => ({ enqueue: async (n, r, i) => {
3085
+ let a = (e.now ?? (() => /* @__PURE__ */ new Date()))(), o = i?.idempotencyKey;
3086
+ if (o !== void 0) {
3087
+ let n = (await e.store.query({
3088
+ table: X,
3089
+ predicate: t(u("idempotencyKey", o), u("status", "pending")),
3090
+ order: [],
3091
+ take: 1,
3092
+ skip: void 0,
3093
+ projection: void 0
3094
+ }))[0];
3095
+ if (n !== void 0) return n.id;
3096
+ }
3097
+ let s = {
3098
+ id: f(Qi, X),
3099
+ effect: n,
3100
+ payload: r,
3101
+ status: "pending",
3102
+ attempts: 0,
3103
+ maxAttempts: i?.maxAttempts ?? ta,
3104
+ nextAttemptAt: new Date(a.getTime() + (i?.delayMs ?? 0)),
3105
+ idempotencyKey: o ?? null,
3106
+ lastError: null,
3107
+ subjectId: e.subject.id ?? null,
3108
+ tenantId: e.subject.tenantId ?? null,
3109
+ traceId: e.traceId,
3110
+ createdAt: a,
3111
+ deliveredAt: null
3112
+ }, c = await e.store.insert(X, s);
3113
+ if (e.afterCommit !== void 0 && e.nudge !== void 0) {
3114
+ let t = e.nudge;
3115
+ e.afterCommit(async () => {
3116
+ t();
3117
+ });
3118
+ }
3119
+ return c.id ?? s.id;
3120
+ } }), ra = (e) => Math.min(1e3 * 2 ** Math.max(0, e - 1), 5 * 6e4), ia = async (e) => {
3121
+ let n = (e.now ?? (() => /* @__PURE__ */ new Date()))(), r = await e.store.query({
3122
+ table: X,
3123
+ predicate: t(u("status", "pending"), ne("nextAttemptAt", n)),
3124
+ order: [{
3125
+ column: "nextAttemptAt",
3126
+ direction: "asc"
3127
+ }],
3128
+ take: e.batchSize ?? 50,
3129
+ skip: void 0,
3130
+ projection: void 0
3131
+ }), i = 0, a = 0, o = 0, s = 0;
3132
+ for (let t of r) {
3133
+ let r = t.id, c = t.effect, l = e.handlers.get(c);
3134
+ if (l === void 0) {
3135
+ s++;
3136
+ continue;
3137
+ }
3138
+ let u = t.attempts + 1, d = t.maxAttempts ?? ta;
3139
+ try {
3140
+ await l.handler({
3141
+ payload: t.payload ?? {},
3142
+ attempt: u,
3143
+ subjectId: t.subjectId ?? null,
3144
+ tenantId: t.tenantId ?? null,
3145
+ traceId: t.traceId ?? null
3146
+ }), await e.store.update(X, r, {
3147
+ status: "delivered",
3148
+ attempts: u,
3149
+ deliveredAt: /* @__PURE__ */ new Date(),
3150
+ lastError: null
3151
+ }), i++;
3152
+ } catch (t) {
3153
+ let i = t instanceof Error ? t.message : String(t), s = u >= d;
3154
+ await e.store.update(X, r, {
3155
+ status: s ? "dead" : "pending",
3156
+ attempts: u,
3157
+ lastError: i,
3158
+ nextAttemptAt: new Date(n.getTime() + ra(u))
3159
+ }), s ? (o++, Zi.error("outbox effect dead-lettered after exhausting attempts", {
3160
+ id: r,
3161
+ effect: c,
3162
+ attempts: u,
3163
+ maxAttempts: d
3164
+ }, t)) : (a++, Zi.warn("outbox delivery failed; will retry", {
3165
+ id: r,
3166
+ effect: c,
3167
+ attempt: u,
3168
+ maxAttempts: d,
3169
+ retryInMs: ra(u)
3170
+ }));
3171
+ }
3172
+ }
3173
+ return {
3174
+ delivered: i,
3175
+ failed: a,
3176
+ dead: o,
3177
+ skipped: s
3178
+ };
3179
+ }, aa = "admin:full", oa = class extends I.TaggedError()("AccessDenied", {
3180
+ action: I.String,
3181
+ resourceType: I.String,
3182
+ resourceId: I.String
3183
+ }) {}, sa = /* @__PURE__ */ new Map(), ca = (e) => {
3184
+ if (typeof e.resourceType != "string" || e.resourceType.length === 0) throw Error("defineResourcePolicy: a non-empty `resourceType` is required");
3185
+ if (e.actions === void 0 || Object.keys(e.actions).length === 0) throw Error(`resource policy '${e.resourceType}': at least one action is required`);
3186
+ if (sa.has(e.resourceType)) throw Error(`resource policy '${e.resourceType}' is already registered — types must be unique`);
3187
+ return sa.set(e.resourceType, e), e;
3188
+ }, la = (e) => sa.get(e), ua = () => [...sa.values()], da = () => sa.clear(), fa = () => ua().map((e) => {
3189
+ let t = /* @__PURE__ */ new Set();
3190
+ for (let n of Object.values(e.actions)) for (let e of n) t.add(e);
3191
+ for (let [n, r] of Object.entries(e.implies ?? {})) {
3192
+ t.add(n);
3193
+ for (let e of r) t.add(e);
3194
+ }
3195
+ return {
3196
+ resourceType: e.resourceType,
3197
+ actions: e.actions,
3198
+ relations: [...t],
3199
+ implies: e.implies ?? {}
3200
+ };
3201
+ }), pa = (e, t) => {
3202
+ let n = new Set(e);
3203
+ if (t === void 0) return n;
3204
+ let r = [...e];
3205
+ for (; r.length > 0;) {
3206
+ let e = r.pop();
3207
+ for (let i of t[e] ?? []) n.has(i) || (n.add(i), r.push(i));
3208
+ }
3209
+ return n;
3210
+ }, ma = (e, t, n, r) => e.id === null ? /* @__PURE__ */ new Set() : pa(n.filter((n) => n.subjectId === e.id && n.resourceType === t.type && n.resourceId === t.id).map((e) => e.relation), r.implies), ha = (e, t, n, r) => {
3211
+ if (e.scopes?.includes("admin:full")) return !0;
3212
+ if (e.id === null || n.tenantId != null && e.tenantId !== n.tenantId) return !1;
3213
+ let i = r.policy.actions[t];
3214
+ if (i === void 0 || i.length === 0) return !1;
3215
+ let a = ma(e, n, r.tuples, r.policy);
3216
+ return i.some((e) => a.has(e));
3217
+ }, ga = (e, t, n, r) => {
3218
+ if (!ha(e, t, n, r)) throw new oa({
3219
+ action: t,
3220
+ resourceType: n.type,
3221
+ resourceId: n.id
3222
+ });
3223
+ }, _a = (e, t, n, r, i) => r.filter((r) => ha(e, t, {
3224
+ type: n,
3225
+ id: r.id,
3226
+ ...r.tenantId === void 0 ? {} : { tenantId: r.tenantId }
3227
+ }, i)), va = (e, t) => {
3228
+ let n = new Set(t.map((e) => e.id));
3229
+ return e.filter((e) => !n.has(e.id)).map((e) => e.id);
3230
+ }, ya = O({ scope: "voltro:policy" }), ba, xa = (e) => {
3231
+ ba = e;
3232
+ }, Sa = () => ba, Ca = () => {
3233
+ Me((e) => j.gen(function* () {
3234
+ let t = la(e.resourceType);
3235
+ if (t === void 0) return ya.warn("policy guard denied — no resource policy registered for this type", {
3236
+ resourceType: e.resourceType,
3237
+ action: e.action
3238
+ }), !1;
3239
+ let n = ba;
3240
+ if (n === void 0) return ya.warn("policy guard denied — no tuple source registered (call setTupleSource at boot)", {
3241
+ resourceType: e.resourceType,
3242
+ action: e.action
3243
+ }), !1;
3244
+ let r = yield* j.tryPromise({
3245
+ try: async () => n({
3246
+ subjectId: e.subject.id,
3247
+ resourceType: e.resourceType,
3248
+ resourceId: e.resourceId
3249
+ }),
3250
+ catch: (e) => e
3251
+ }).pipe(j.catchAll((t) => (ya.error("policy guard denied — tuple source failed", {
3252
+ resourceType: e.resourceType,
3253
+ resourceId: e.resourceId
3254
+ }, t), j.succeed([])))), i = e.subject;
3255
+ return ha({
3256
+ id: e.subject.id,
3257
+ tenantId: i.tenantId ?? null,
3258
+ ...i.scopes === void 0 ? {} : { scopes: i.scopes }
3259
+ }, e.action, {
3260
+ type: e.resourceType,
3261
+ id: e.resourceId,
3262
+ tenantId: i.tenantId ?? null
3263
+ }, {
3264
+ policy: t,
3265
+ tuples: r
3266
+ });
3267
+ }));
3268
+ }, wa = (e) => {
3269
+ Promise.resolve().then(e);
3270
+ }, Ta = (e) => {
3271
+ let t = e.schedule ?? wa, n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map(), i = (e, t) => `${e}${t}`, a = async (t) => {
3272
+ let a = r.get(t);
3273
+ if (a === void 0) return;
3274
+ r.delete(t);
3275
+ let o = [...a.ids].filter((e) => !n.has(i(t, e)));
3276
+ try {
3277
+ if (o.length > 0) {
3278
+ let r = await e.store.query({
3279
+ table: t,
3280
+ predicate: y("id", o),
3281
+ order: [],
3282
+ take: void 0,
3283
+ skip: void 0,
3284
+ projection: void 0
3285
+ }), a = new Map(r.map((e) => [String(e.id), e]));
3286
+ for (let e of o) n.set(i(t, e), a.get(e) ?? null);
3287
+ }
3288
+ for (let e of a.waiters) e.resolve(e.ids.map((e) => n.get(i(t, e)) ?? null));
3289
+ } catch (e) {
3290
+ for (let t of a.waiters) t.reject(e);
3291
+ }
3292
+ }, o = (e, o) => {
3293
+ if (o.length === 0) return Promise.resolve([]);
3294
+ if (o.every((t) => n.has(i(e, t)))) return Promise.resolve(o.map((t) => n.get(i(e, t)) ?? null));
3295
+ let s = r.get(e);
3296
+ s === void 0 && (s = {
3297
+ ids: /* @__PURE__ */ new Set(),
3298
+ waiters: [],
3299
+ scheduled: !1
3300
+ }, r.set(e, s));
3301
+ for (let e of o) s.ids.add(e);
3302
+ let c = new Promise((e, t) => {
3303
+ s.waiters.push({
3304
+ ids: o,
3305
+ resolve: e,
3306
+ reject: t
3307
+ });
3308
+ });
3309
+ return s.scheduled || (s.scheduled = !0, t(() => {
3310
+ a(e);
3311
+ })), c;
3312
+ };
3313
+ return {
3314
+ load: async (e, t) => (await o(e, [t]))[0] ?? null,
3315
+ loadMany: (e, t) => o(e, t)
3316
+ };
3317
+ }, Ea = M.effect(qe.HttpClient, j.map(qe.HttpClient, (e) => e.pipe(qe.mapRequestEffect((e) => j.currentSpan.pipe(j.map((t) => e.headers.traceparent === void 0 ? Je.setHeader(e, "traceparent", Vn({
2993
3318
  traceId: t.traceId,
2994
3319
  spanId: t.spanId,
2995
3320
  sampled: t.sampled
2996
- })) : e), j.catchAll(() => j.succeed(e))))))), Hi = "voltro/audit", Ui = "voltro/softDelete", Wi = "voltro/tenant", Gi = (e) => {
3321
+ })) : e), j.catchAll(() => j.succeed(e))))))), Da = "voltro/audit", Oa = "voltro/softDelete", ka = "voltro/tenant", Aa = (e) => {
2997
3322
  let t = /* @__PURE__ */ new Map();
2998
3323
  for (let n of e) {
2999
3324
  let e = /* @__PURE__ */ new Set();
@@ -3036,26 +3361,27 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3036
3361
  return !1;
3037
3362
  },
3038
3363
  idScheme: (e) => t.get(e)?.idScheme,
3039
- defaultFactories: (e) => t.get(e)?.defaultFactories ?? Ki,
3040
- computedFields: (e) => t.get(e)?.computedFields ?? qi,
3364
+ defaultFactories: (e) => t.get(e)?.defaultFactories ?? ja,
3365
+ computedFields: (e) => t.get(e)?.computedFields ?? Ma,
3041
3366
  insertSchema: (e) => t.get(e)?.insertSchema,
3042
3367
  validatePatchSchema: (e) => t.get(e)?.validatePatchSchema
3043
3368
  };
3044
- }, Ki = /* @__PURE__ */ new Map(), qi = /* @__PURE__ */ new Map(), Ji = Gi([]), Yi = class extends Error {
3045
- table;
3046
- _tag = "NoRowFound";
3047
- constructor(e) {
3048
- super(`expected exactly one row in '${e}', found none`), this.table = e, this.name = "NoRowFound";
3369
+ }, ja = /* @__PURE__ */ new Map(), Ma = /* @__PURE__ */ new Map(), Na = Aa([]), Pa = class extends I.TaggedError()("NoRowFound", {
3370
+ table: I.String,
3371
+ found: I.Number
3372
+ }) {
3373
+ get message() {
3374
+ return this.found === 0 ? `expected exactly one row in '${this.table}', found none` : `expected exactly one row in '${this.table}', found more than one`;
3049
3375
  }
3050
- }, Xi = class extends Error {
3051
- table;
3052
- expected;
3053
- _tag = "OptimisticLockError";
3054
- constructor(e, t) {
3055
- super(`optimistic lock failed on '${e}': expected version ${t}`), this.table = e, this.expected = t, this.name = "OptimisticLockError";
3376
+ }, Fa = class extends I.TaggedError()("OptimisticLockError", {
3377
+ table: I.String,
3378
+ expected: I.Number
3379
+ }) {
3380
+ get message() {
3381
+ return `optimistic lock failed on '${this.table}': expected version ${this.expected}`;
3056
3382
  }
3057
- }, Zi = (e) => typeof e == "object" && !!e && ("and" in e || "or" in e || "not" in e || "op" in e || "subquery" in e), Qi = (e) => {
3058
- if (e.length === 1 && Zi(e[0])) return e[0];
3383
+ }, Ia = (e) => typeof e == "object" && !!e && ("and" in e || "or" in e || "not" in e || "op" in e || "subquery" in e), La = (e) => {
3384
+ if (e.length === 1 && Ia(e[0])) return e[0];
3059
3385
  let t = e[0];
3060
3386
  if (e.length === 2) return u(t, e[1]);
3061
3387
  let n = e[1], r = e[2];
@@ -3073,11 +3399,11 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3073
3399
  case "fts": return o(t, r);
3074
3400
  default: return u(t, r);
3075
3401
  }
3076
- }, $i = (e) => {
3402
+ }, Ra = (e) => {
3077
3403
  let t = m(e);
3078
3404
  if (t === void 0) throw Error(`unknown table '${e}' — is it declared with table()?`);
3079
3405
  return ie(t);
3080
- }, ea = class e {
3406
+ }, za = class e {
3081
3407
  backend;
3082
3408
  scope;
3083
3409
  table;
@@ -3091,7 +3417,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3091
3417
  return new e(this.backend, this.scope, this.table, t, this.skipTenant, this.skipSoftDelete);
3092
3418
  }
3093
3419
  where(...e) {
3094
- return this.clone(this.query.where(Qi(e)));
3420
+ return this.clone(this.query.where(La(e)));
3095
3421
  }
3096
3422
  orderBy(e, t = "asc") {
3097
3423
  return this.clone(this.query.orderBy(e, t));
@@ -3137,9 +3463,16 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3137
3463
  return this.maybeOne();
3138
3464
  }
3139
3465
  async one() {
3140
- let e = await this.maybeOne();
3141
- if (e === null) throw new Yi(this.table);
3142
- return e;
3466
+ let e = await this.backend.query(this.scopedQuery().limit(2).descriptor), t = e[0];
3467
+ if (t === void 0) throw new Pa({
3468
+ table: this.table,
3469
+ found: 0
3470
+ });
3471
+ if (e.length > 1) throw new Pa({
3472
+ table: this.table,
3473
+ found: e.length
3474
+ });
3475
+ return t;
3143
3476
  }
3144
3477
  async count() {
3145
3478
  let e = (await this.backend.query(this.scopedQuery().count().descriptor))[0]?.count;
@@ -3151,7 +3484,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3151
3484
  get descriptor() {
3152
3485
  return this.scopedQuery().descriptor;
3153
3486
  }
3154
- }, ta = class {
3487
+ }, Ba = class {
3155
3488
  backend;
3156
3489
  scope;
3157
3490
  table;
@@ -3162,7 +3495,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3162
3495
  this.backend = e, this.scope = t, this.table = n;
3163
3496
  }
3164
3497
  where(...e) {
3165
- let n = Qi(e);
3498
+ let n = La(e);
3166
3499
  return this.predicate = this.predicate ? t(this.predicate, n) : n, this;
3167
3500
  }
3168
3501
  unscoped() {
@@ -3186,13 +3519,16 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3186
3519
  }
3187
3520
  async set(e) {
3188
3521
  let t = await this.backend.updateMany(this.table, e, { where: this.scopedWhere() });
3189
- if (this.expectedVersion !== void 0 && t === 0) throw new Xi(this.table, this.expectedVersion);
3522
+ if (this.expectedVersion !== void 0 && t === 0) throw new Fa({
3523
+ table: this.table,
3524
+ expected: this.expectedVersion
3525
+ });
3190
3526
  return t;
3191
3527
  }
3192
3528
  async restore() {
3193
3529
  return this.backend.updateMany(this.table, { deletedAt: null }, { where: this.scopedWhere() });
3194
3530
  }
3195
- }, na = class {
3531
+ }, Va = class {
3196
3532
  backend;
3197
3533
  scope;
3198
3534
  table;
@@ -3202,7 +3538,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3202
3538
  this.backend = e, this.scope = t, this.table = n;
3203
3539
  }
3204
3540
  where(...e) {
3205
- let n = Qi(e);
3541
+ let n = La(e);
3206
3542
  return this.predicate = this.predicate ? t(this.predicate, n) : n, this;
3207
3543
  }
3208
3544
  unscoped() {
@@ -3223,46 +3559,32 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3223
3559
  async hard() {
3224
3560
  return this.backend.deleteMany(this.table, { where: this.scopedWhere() });
3225
3561
  }
3226
- }, ra = (e, t) => ({
3227
- select: (n) => new ea(e, t, n, $i(n)),
3228
- updateWhere: (n) => new ta(e, t, n),
3229
- deleteWhere: (n) => new na(e, t, n)
3230
- }), ia = class extends I.TaggedError()("TenantScopeViolation", {
3231
- table: I.String,
3232
- reason: I.String
3233
- }) {}, aa = class extends I.TaggedError()("StoreOperationFailed", {
3234
- operation: I.String,
3235
- table: I.String,
3236
- cause: I.String
3237
- }) {}, oa = class extends I.TaggedError()("TableValidationFailed", {
3238
- table: I.String,
3239
- summary: I.String,
3240
- issues: I.Array(I.Struct({
3241
- path: I.String,
3242
- message: I.String
3243
- }))
3244
- }) {}, sa = "id", ca = (e, t) => {
3562
+ }, Ha = (e, t) => ({
3563
+ select: (n) => new za(e, t, n, Ra(n)),
3564
+ updateWhere: (n) => new Ba(e, t, n),
3565
+ deleteWhere: (n) => new Va(e, t, n)
3566
+ }), Ua = "id", Wa = (e, t) => {
3245
3567
  let n = {};
3246
3568
  for (let r of t) e[r] !== void 0 && (n[r] = e[r]);
3247
3569
  return n;
3248
- }, la = "cannot insert into tenant-scoped table without an authenticated tenant — subject.tenantId is null. Either authenticate first or pass tenantId explicitly in the row (admin tooling).", ua = (e) => {
3249
- throw new ia({
3570
+ }, Ga = "cannot insert into tenant-scoped table without an authenticated tenant — subject.tenantId is null. Either authenticate first or pass tenantId explicitly in the row (admin tooling).", Ka = (e) => {
3571
+ throw new wi({
3250
3572
  table: e,
3251
- reason: la
3573
+ reason: Ga
3252
3574
  });
3253
- }, da = (e, n) => {
3575
+ }, qa = (e, n) => {
3254
3576
  let r = n.subject.id, i = n.subject.tenantId, a = (e, t) => {
3255
3577
  let a = { ...t }, o = n.schemaRegistry, s = o.idScheme(e);
3256
- if (s !== void 0 && a[sa] == null) if (s.kind === "numeric") delete a[sa];
3578
+ if (s !== void 0 && a[Ua] == null) if (s.kind === "numeric") delete a[Ua];
3257
3579
  else {
3258
3580
  let t = f(s, e);
3259
- t !== null && (a[sa] = t);
3581
+ t !== null && (a[Ua] = t);
3260
3582
  }
3261
3583
  if (o.hasAudit(e)) {
3262
3584
  let e = /* @__PURE__ */ new Date();
3263
3585
  "createdAt" in a || (a.createdAt = e), "updatedAt" in a || (a.updatedAt = e), r !== null && ("createdBy" in a || (a.createdBy = r), "updatedBy" in a || (a.updatedBy = r));
3264
3586
  }
3265
- o.hasTenant(e) && ("tenantId" in a || (i === null && ua(e), a.tenantId = i));
3587
+ o.hasTenant(e) && ("tenantId" in a || (i === null && Ka(e), a.tenantId = i));
3266
3588
  let c = o.defaultFactories(e);
3267
3589
  if (c.size > 0) for (let [e, t] of c) (!(e in a) || a[e] === void 0) && (a[e] = t());
3268
3590
  let l = o.computedFields(e);
@@ -3277,10 +3599,10 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3277
3599
  try {
3278
3600
  return await r();
3279
3601
  } catch (n) {
3280
- let r = zt(n);
3281
- if (Bt(r)) {
3602
+ let r = Bt(n);
3603
+ if (Vt(r)) {
3282
3604
  let n = t.tenantId, i = `${r.dbConstraint ?? ""} ${r.dbColumn ?? ""} ${r.dbMessage ?? ""} ${r.dbCauseChain ?? ""}`.toLowerCase();
3283
- if (i.includes("tenantid") || /\btenants\b/.test(i) || n != null && i.includes(String(n).toLowerCase())) throw new ia({
3605
+ if (i.includes("tenantid") || /\btenants\b/.test(i) || n != null && i.includes(String(n).toLowerCase())) throw new wi({
3284
3606
  table: e,
3285
3607
  reason: n == null ? "write references a tenant that does not exist" : `tenant '${String(n)}' does not exist — seed the row in \`tenants\`, or fix how the request resolved this tenant (subject.tenantId / the x-tenant header / the dev TENANT fallback)`
3286
3608
  });
@@ -3301,11 +3623,11 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3301
3623
  if (r === void 0) return t;
3302
3624
  let i = I.decodeUnknownEither(r)(t);
3303
3625
  if (i._tag === "Right") return t;
3304
- let a = gt.formatErrorSync(i.left).map((e) => ({
3626
+ let a = _t.formatErrorSync(i.left).map((e) => ({
3305
3627
  path: e.path.length === 0 ? "<root>" : e.path.join("."),
3306
3628
  message: e.message
3307
3629
  })), o = a[0];
3308
- throw new oa({
3630
+ throw new Ei({
3309
3631
  table: e,
3310
3632
  summary: o === void 0 ? "patch validation failed" : `${o.path}: ${o.message}`,
3311
3633
  issues: a
@@ -3318,20 +3640,20 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3318
3640
  if (r === void 0) return t;
3319
3641
  let i = I.decodeUnknownEither(r)(t);
3320
3642
  if (i._tag === "Right") return t;
3321
- let a = gt.formatErrorSync(i.left).map((e) => ({
3643
+ let a = _t.formatErrorSync(i.left).map((e) => ({
3322
3644
  path: e.path.length === 0 ? "<root>" : e.path.join("."),
3323
3645
  message: e.message
3324
3646
  })), o = a[0];
3325
- throw new oa({
3647
+ throw new Ei({
3326
3648
  table: e,
3327
3649
  summary: o === void 0 ? "row validation failed" : `${o.path}: ${o.message}`,
3328
3650
  issues: a
3329
3651
  });
3330
3652
  }, v = n.dialect, y = (e, t) => {
3331
3653
  let n = m(e);
3332
- return l(v ? ce(t, n, v) : t, n, qr());
3654
+ return l(v ? ce(t, n, v) : t, n, Xr());
3333
3655
  }, b = (e, t) => {
3334
- let n = m(e), r = s(t, n, qr());
3656
+ let n = m(e), r = s(t, n, Xr());
3335
3657
  return v ? c(r, n, v) : r;
3336
3658
  }, x = (e) => {
3337
3659
  let r = e.table, a = e.predicate;
@@ -3356,7 +3678,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3356
3678
  let n = (await e.query({
3357
3679
  table: t,
3358
3680
  predicate: {
3359
- column: sa,
3681
+ column: Ua,
3360
3682
  op: "eq",
3361
3683
  value: r
3362
3684
  },
@@ -3377,7 +3699,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3377
3699
  }), oe = async (e, t) => re(e, {
3378
3700
  ...t,
3379
3701
  where: ie(e, t.where)
3380
- }), se = ra({
3702
+ }), se = Ha({
3381
3703
  query: C,
3382
3704
  updateMany: w,
3383
3705
  deleteMany: re,
@@ -3403,7 +3725,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3403
3725
  select: se.select,
3404
3726
  update: ((e, t, n) => t === void 0 ? se.updateWhere(e) : te(e, t, n)),
3405
3727
  delete: ((e, t) => t === void 0 ? se.deleteWhere(e) : ne(e, t)),
3406
- applyDefined: ca,
3728
+ applyDefined: Wa,
3407
3729
  hardDelete: async (t, n) => e.delete(t, n),
3408
3730
  updateMany: ae,
3409
3731
  deleteMany: oe,
@@ -3415,34 +3737,34 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3415
3737
  let i = a(t, n), o = await d(t, i, () => e.insertIgnore(t, y(t, _(t, i)), r));
3416
3738
  return b(t, [o])[0];
3417
3739
  },
3418
- transactional: (t) => e.transactional(async (e) => t(da(e, n))),
3740
+ transactional: (t) => e.transactional(async (e) => t(qa(e, n))),
3419
3741
  ...e.raw ? { raw: e.raw.bind(e) } : {},
3420
3742
  onChange: (t) => e.onChange(t),
3421
3743
  injectExternalChange: (t) => e.injectExternalChange(t),
3422
3744
  ...e.changeScope === void 0 ? {} : { changeScope: e.changeScope }
3423
3745
  };
3424
- }, fa = class extends I.TaggedError()("CircuitOpen", {
3746
+ }, Ja = class extends I.TaggedError()("CircuitOpen", {
3425
3747
  name: I.String,
3426
3748
  retryAfterMs: I.Number
3427
- }) {}, pa = {
3749
+ }) {}, Ya = {
3428
3750
  tag: "closed",
3429
3751
  failureCount: 0,
3430
3752
  halfOpenSuccesses: 0,
3431
3753
  openedAt: 0
3432
- }, ma = { make: (e) => j.gen(function* () {
3433
- let t = e.name ?? "circuit", n = Le.toMillis(Le.decode(e.resetTimeout)), r = e.halfOpenSuccessThreshold ?? 1, i = e.isFailure ?? (() => !0), a = yield* F.make(pa), o = j.gen(function* () {
3754
+ }, Xa = { make: (e) => j.gen(function* () {
3755
+ let t = e.name ?? "circuit", n = Re.toMillis(Re.decode(e.resetTimeout)), r = e.halfOpenSuccessThreshold ?? 1, i = e.isFailure ?? (() => !0), a = yield* F.make(Ya), o = j.gen(function* () {
3434
3756
  let e = yield* F.get(a);
3435
3757
  if (e.tag === "half-open") {
3436
3758
  let t = e.halfOpenSuccesses + 1;
3437
- yield* F.set(a, t >= r ? pa : {
3759
+ yield* F.set(a, t >= r ? Ya : {
3438
3760
  ...e,
3439
3761
  halfOpenSuccesses: t
3440
3762
  });
3441
3763
  return;
3442
3764
  }
3443
- e.failureCount !== 0 && (yield* F.set(a, pa));
3765
+ e.failureCount !== 0 && (yield* F.set(a, Ya));
3444
3766
  }), s = j.gen(function* () {
3445
- let t = yield* Pe.currentTimeMillis, n = yield* F.get(a);
3767
+ let t = yield* Fe.currentTimeMillis, n = yield* F.get(a);
3446
3768
  if (n.tag === "half-open" || n.tag === "open") {
3447
3769
  yield* F.set(a, {
3448
3770
  tag: "open",
@@ -3465,7 +3787,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3465
3787
  }), c = j.gen(function* () {
3466
3788
  let e = yield* F.get(a);
3467
3789
  if (e.tag !== "open") return null;
3468
- let t = (yield* Pe.currentTimeMillis) - e.openedAt;
3790
+ let t = (yield* Fe.currentTimeMillis) - e.openedAt;
3469
3791
  return t >= n ? (yield* F.set(a, {
3470
3792
  tag: "half-open",
3471
3793
  failureCount: 0,
@@ -3478,7 +3800,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3478
3800
  if (k.isInterruptedOnly(e)) return j.void;
3479
3801
  let t = k.failureOption(e), n = t._tag === "Some" ? t.value : void 0;
3480
3802
  return i(n) ? s : j.void;
3481
- })) : yield* j.fail(new fa({
3803
+ })) : yield* j.fail(new Ja({
3482
3804
  name: t,
3483
3805
  retryAfterMs: n
3484
3806
  }));
@@ -3487,38 +3809,25 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3487
3809
  value: F.get(a).pipe(j.map((e) => e.tag)),
3488
3810
  enumerable: !0
3489
3811
  }), Object.defineProperty(u, "reset", {
3490
- value: F.set(a, pa),
3812
+ value: F.set(a, Ya),
3491
3813
  enumerable: !0
3492
3814
  }), u;
3493
- }) }, ha, ga = (e) => {
3494
- ha = e;
3495
- }, _a = () => {
3496
- ha = void 0;
3497
- }, va = async (e, t = {}) => {
3498
- let n = t.scopes === void 0 ? je(t.id ?? "system") : je(t.id ?? "system", t.scopes), r = t.store ?? ha?.dataStore, i = t.schemaRegistry ?? ha?.schemaRegistry, a = t.dialect ?? ha?.dialect;
3815
+ }) }, Za, Qa = (e) => {
3816
+ Za = e;
3817
+ }, $a = () => {
3818
+ Za = void 0;
3819
+ }, eo = async (e, t = {}) => {
3820
+ let n = t.scopes === void 0 ? Ne(t.id ?? "system") : Ne(t.id ?? "system", t.scopes), r = t.store ?? Za?.dataStore, i = t.schemaRegistry ?? Za?.schemaRegistry, a = t.dialect ?? Za?.dialect;
3499
3821
  if (r === void 0 || i === void 0) throw Error("runAsSystem: no data store available — register one at boot via setSystemStoreHandle({ dataStore, schemaRegistry }) or pass { store, schemaRegistry } in the options.");
3500
3822
  return e({
3501
3823
  subject: n,
3502
- store: da(r, {
3824
+ store: qa(r, {
3503
3825
  subject: n,
3504
3826
  schemaRegistry: i,
3505
3827
  ...a === void 0 ? {} : { dialect: a }
3506
3828
  })
3507
3829
  });
3508
- }, ya = class extends Fe.Tag("@voltro/EffectStore")() {}, ba = (e, t) => (n) => n instanceof ia ? n : new aa({
3509
- operation: e,
3510
- table: t,
3511
- cause: String(n)
3512
- }), xa = (e, t, n) => j.tryPromise({
3513
- try: n,
3514
- catch: ba(e, t)
3515
- }), Sa = (e) => M.succeed(ya, {
3516
- query: (t) => xa("query", t.table, () => e.query(t)),
3517
- insert: (t, n) => xa("insert", t, () => e.insert(t, n)),
3518
- update: (t, n, r) => xa("update", t, () => e.update(t, n, r)),
3519
- delete: (t, n) => xa("delete", t, () => e.delete(t, n)),
3520
- hardDelete: (t, n) => xa("hardDelete", t, () => e.hardDelete(t, n))
3521
- }), Ca = (e) => {
3830
+ }, to = (e) => {
3522
3831
  let { currentRegion: t, replicaRegions: n, inner: r } = e, i = (e) => {
3523
3832
  if (t === void 0) return {
3524
3833
  sameRegion: [],
@@ -3546,7 +3855,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3546
3855
  return r.loadSnapshot();
3547
3856
  }
3548
3857
  };
3549
- }, wa = (e = process.env) => {
3858
+ }, no = (e = process.env) => {
3550
3859
  for (let t of [
3551
3860
  "VOLTRO_REGION",
3552
3861
  "AWS_REGION",
@@ -3558,7 +3867,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3558
3867
  let n = e[t];
3559
3868
  if (typeof n == "string" && n.length > 0) return n;
3560
3869
  }
3561
- }, Ta = () => {
3870
+ }, ro = () => {
3562
3871
  let e = {
3563
3872
  primary: 0,
3564
3873
  lagByReplica: /* @__PURE__ */ new Map()
@@ -3583,27 +3892,27 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3583
3892
  e.lagByReplica.set(t, n);
3584
3893
  }
3585
3894
  };
3586
- }, Ea = Symbol.for("@voltro/ScheduleDefinition"), Da = (e) => typeof e == "object" && !!e && Ea in e, Oa = 30 * 6e4, ka = (e) => {
3895
+ }, io = Symbol.for("@voltro/ScheduleDefinition"), ao = (e) => typeof e == "object" && !!e && io in e, oo = 30 * 6e4, so = (e) => {
3587
3896
  let t = A.parse(e.cron, e.timezone);
3588
- if (Re.isLeft(t)) throw Error(`defineSchedule("${e.name}"): invalid cron expression "${e.cron}" (tz="${e.timezone}") — ${String(t.left)}`);
3897
+ if (ze.isLeft(t)) throw Error(`defineSchedule("${e.name}"): invalid cron expression "${e.cron}" (tz="${e.timezone}") — ${String(t.left)}`);
3589
3898
  if (!e.timezone || e.timezone.trim() === "") throw Error(`defineSchedule("${e.name}"): timezone is required (e.g. "UTC", "Europe/Berlin")`);
3590
3899
  if (e.handler === void 0 && e.workflow === void 0) throw Error(`defineSchedule("${e.name}"): define either handler or workflow`);
3591
3900
  return {
3592
3901
  ...e,
3593
3902
  onOverlap: e.onOverlap ?? "skip",
3594
3903
  backfill: e.backfill ?? "skip",
3595
- maxRuntimeMs: e.maxRuntimeMs ?? Oa,
3596
- [Ea]: !0
3904
+ maxRuntimeMs: e.maxRuntimeMs ?? oo,
3905
+ [io]: !0
3597
3906
  };
3598
- }, Aa = (e) => A.unsafeParse(e.cron, e.timezone), ja = (e, t = /* @__PURE__ */ new Date()) => A.next(Aa(e), t), Z = "_voltro_wakeups", Ma = (e) => `${e.tenantId}:${e.kind}:${e.refId}`, Na = (e) => ({
3907
+ }, co = (e) => A.unsafeParse(e.cron, e.timezone), lo = (e, t = /* @__PURE__ */ new Date()) => A.next(co(e), t), Z = "_voltro_wakeups", uo = (e) => `${e.tenantId}:${e.kind}:${e.refId}`, fo = (e) => ({
3599
3908
  tenantId: String(e.tenantId),
3600
3909
  kind: String(e.kind),
3601
3910
  refId: String(e.refId),
3602
3911
  wakeAt: e.wakeAt instanceof Date ? e.wakeAt : new Date(String(e.wakeAt)),
3603
3912
  status: e.status === "fired" ? "fired" : "pending"
3604
- }), Pa = async (e, t) => {
3913
+ }), po = async (e, t) => {
3605
3914
  await e.upsert(Z, {
3606
- id: Ma(t),
3915
+ id: uo(t),
3607
3916
  tenantId: t.tenantId,
3608
3917
  kind: t.kind,
3609
3918
  refId: t.refId,
@@ -3613,7 +3922,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3613
3922
  conflictColumns: ["id"],
3614
3923
  update: ["wakeAt", "status"]
3615
3924
  });
3616
- }, Fa = async (e, t) => e.delete(Z, Ma(t)), Ia = async (e, t) => await e.update(Z, Ma(t), { status: "fired" }) !== null, La = (e, t) => ({ and: [{
3925
+ }, mo = async (e, t) => e.delete(Z, uo(t)), ho = async (e, t) => await e.update(Z, uo(t), { status: "fired" }) !== null, go = (e, t) => ({ and: [{
3617
3926
  column: "id",
3618
3927
  op: "eq",
3619
3928
  value: e
@@ -3621,16 +3930,16 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3621
3930
  column: "status",
3622
3931
  op: "eq",
3623
3932
  value: t
3624
- }] }), Ra = async (e, t) => await e.updateMany(Z, { status: "fired" }, { where: La(Ma(t), "pending") }) > 0, za = async (e, t) => {
3625
- await e.updateMany(Z, { status: "pending" }, { where: La(Ma(t), "fired") });
3626
- }, Ba = {
3933
+ }] }), _o = async (e, t) => await e.updateMany(Z, { status: "fired" }, { where: go(uo(t), "pending") }) > 0, vo = async (e, t) => {
3934
+ await e.updateMany(Z, { status: "pending" }, { where: go(uo(t), "fired") });
3935
+ }, yo = {
3627
3936
  column: "status",
3628
3937
  op: "eq",
3629
3938
  value: "pending"
3630
- }, Va = async (e, t) => {
3939
+ }, bo = async (e, t) => {
3631
3940
  let n = {
3632
3941
  table: Z,
3633
- predicate: Ba,
3942
+ predicate: yo,
3634
3943
  order: [{
3635
3944
  column: "wakeAt",
3636
3945
  direction: "asc"
@@ -3639,18 +3948,18 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3639
3948
  skip: void 0,
3640
3949
  projection: void 0
3641
3950
  };
3642
- return (await e.query(n)).map(Na);
3643
- }, Ha = async (e, t, n = 500) => {
3644
- let r = await Va(e, n), i = t.getTime();
3951
+ return (await e.query(n)).map(fo);
3952
+ }, xo = async (e, t, n = 500) => {
3953
+ let r = await bo(e, n), i = t.getTime();
3645
3954
  return r.filter((e) => e.wakeAt.getTime() <= i);
3646
- }, Ua = async (e) => (await Va(e, 1))[0] ?? null, Wa = {
3955
+ }, So = async (e) => (await bo(e, 1))[0] ?? null, Co = {
3647
3956
  column: "status",
3648
3957
  op: "eq",
3649
3958
  value: "fired"
3650
- }, Ga = async (e, t = {}) => {
3959
+ }, wo = async (e, t = {}) => {
3651
3960
  let n = {
3652
3961
  table: Z,
3653
- predicate: Wa,
3962
+ predicate: Co,
3654
3963
  order: [{
3655
3964
  column: "wakeAt",
3656
3965
  direction: "asc"
@@ -3661,12 +3970,12 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3661
3970
  }, r = await e.query(n), i = t.firedOlderThan?.getTime(), a = 0;
3662
3971
  for (let t of r) i !== void 0 && (t.wakeAt instanceof Date ? t.wakeAt : new Date(String(t.wakeAt))).getTime() >= i || await e.delete(Z, String(t.id)) && a++;
3663
3972
  return a;
3664
- }, Ka = {
3973
+ }, To = {
3665
3974
  kind: "single",
3666
3975
  tryClaim: async () => !0
3667
- }, qa = "_voltro_schedule_claims", Ja = (e, t, n) => {
3976
+ }, Eo = "_voltro_schedule_claims", Do = (e, t, n) => {
3668
3977
  let r = async (t) => (await e.query({
3669
- table: qa,
3978
+ table: Eo,
3670
3979
  order: [],
3671
3980
  predicate: void 0,
3672
3981
  projection: ["id"],
@@ -3681,7 +3990,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3681
3990
  if (await r(s)) return !1;
3682
3991
  } catch {}
3683
3992
  try {
3684
- return await e.insert(qa, {
3993
+ return await e.insert(Eo, {
3685
3994
  id: s,
3686
3995
  scheduleName: i,
3687
3996
  bucket: o,
@@ -3699,12 +4008,12 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3699
4008
  }
3700
4009
  }
3701
4010
  };
3702
- }, Ya = "_voltro_schedule_runs", Xa = async (e, t) => {
4011
+ }, Oo = "_voltro_schedule_runs", ko = async (e, t) => {
3703
4012
  let { store: n, coordinator: r, buildContext: i, replicaId: a, log: o, onRunEvent: s, interceptFire: c } = t, l = t.dormancy === "sleep", u = t.dormancyTenantId ?? "default", d = /* @__PURE__ */ new Map(), f = /* @__PURE__ */ new Set(), p = /* @__PURE__ */ new Map(), m = !1, h = new Map(e.map((e) => [e.name, e])), g = (e, t) => {
3704
- s?.(e, Qa(t));
4013
+ s?.(e, jo(t));
3705
4014
  }, _ = async (e, t, r, i, s, c) => {
3706
4015
  try {
3707
- let o = `sr_${he()}`, l = await n.insert(Ya, {
4016
+ let o = `sr_${he()}`, l = await n.insert(Oo, {
3708
4017
  id: o,
3709
4018
  name: e.name,
3710
4019
  status: i,
@@ -3729,7 +4038,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3729
4038
  }
3730
4039
  }, v = async (e, t) => {
3731
4040
  try {
3732
- let r = await n.update(Ya, e, t);
4041
+ let r = await n.update(Oo, e, t);
3733
4042
  r && g("update", r);
3734
4043
  } catch (t) {
3735
4044
  o.warn("schedule: failed to record run finish", {
@@ -3740,7 +4049,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3740
4049
  }, y = async (e) => {
3741
4050
  try {
3742
4051
  let t = await n.query({
3743
- table: Ya,
4052
+ table: Oo,
3744
4053
  predicate: {
3745
4054
  _tag: "leaf",
3746
4055
  column: "status",
@@ -3805,7 +4114,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3805
4114
  let n = Q(t).includes("exceeded maxRuntimeMs");
3806
4115
  s && await v(s, {
3807
4116
  status: "failed",
3808
- errorTag: n ? "timeout" : Za(t),
4117
+ errorTag: n ? "timeout" : Ao(t),
3809
4118
  errorMessage: Q(t),
3810
4119
  completedAt: /* @__PURE__ */ new Date(),
3811
4120
  durationMs: Date.now() - l
@@ -3813,7 +4122,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3813
4122
  name: e.name,
3814
4123
  reason: Q(t),
3815
4124
  timeout: n
3816
- }), ke({
4125
+ }), Ae({
3817
4126
  error: t,
3818
4127
  source: "schedule",
3819
4128
  name: e.name,
@@ -3862,8 +4171,8 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3862
4171
  }
3863
4172
  }, C = async (e) => {
3864
4173
  try {
3865
- let t = A.next(Aa(e), /* @__PURE__ */ new Date());
3866
- await Pa(n, {
4174
+ let t = A.next(co(e), /* @__PURE__ */ new Date());
4175
+ await po(n, {
3867
4176
  tenantId: u,
3868
4177
  kind: "schedule",
3869
4178
  refId: e.name,
@@ -3877,7 +4186,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3877
4186
  }
3878
4187
  }, ee = 2147483647, te = (e) => {
3879
4188
  if (m) return;
3880
- let n = Aa(e), r = A.next(n, /* @__PURE__ */ new Date()), i = () => {
4189
+ let n = co(e), r = A.next(n, /* @__PURE__ */ new Date()), i = () => {
3881
4190
  if (m) return;
3882
4191
  let n = r.getTime() - Date.now();
3883
4192
  if (n > ee) {
@@ -3899,7 +4208,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3899
4208
  let r;
3900
4209
  try {
3901
4210
  let t = (await n.query({
3902
- table: Ya,
4211
+ table: Oo,
3903
4212
  order: [{
3904
4213
  column: "scheduledAt",
3905
4214
  direction: "desc"
@@ -3918,7 +4227,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3918
4227
  return;
3919
4228
  }
3920
4229
  if (!r) return;
3921
- let i = Aa(e), a = [], s = A.next(i, r), c = Date.now();
4230
+ let i = co(e), a = [], s = A.next(i, r), c = Date.now();
3922
4231
  for (; s.getTime() < c && a.length < 1e3;) a.push(s), s = A.next(i, s);
3923
4232
  if (a.length !== 0) if (o.info("schedule: backfill", {
3924
4233
  name: e.name,
@@ -3963,11 +4272,11 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3963
4272
  d.clear(), o.info("scheduler: stopped");
3964
4273
  }
3965
4274
  };
3966
- }, Q = (e) => e?.message ?? String(e), Za = (e) => e && typeof e == "object" && "_tag" in e ? String(e._tag) : null, Qa = (e) => {
4275
+ }, Q = (e) => e?.message ?? String(e), Ao = (e) => e && typeof e == "object" && "_tag" in e ? String(e._tag) : null, jo = (e) => {
3967
4276
  let t = {};
3968
4277
  for (let [n, r] of Object.entries(e)) t[n] = r instanceof Date ? r.toISOString() : r;
3969
4278
  return t;
3970
- }, $a = (e, t, n, r) => {
4279
+ }, Mo = (e, t, n, r) => {
3971
4280
  let i = !1, a, o = async () => {
3972
4281
  if (i) return;
3973
4282
  let a = new Date(Math.floor(Date.now() / t) * t), o = !1;
@@ -3997,7 +4306,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
3997
4306
  i || (i = !0, a && clearInterval(a), a = void 0);
3998
4307
  }
3999
4308
  };
4000
- }, eo = (e) => (t, n, r) => $a(t, n, r, e), to = T("_voltro_schedule_runs", {
4309
+ }, No = (e) => (t, n, r) => Mo(t, n, r, e), Po = T("_voltro_schedule_runs", {
4001
4310
  id: v({ prefix: "schrun" }),
4002
4311
  name: E(),
4003
4312
  status: E().oneOf([
@@ -4027,13 +4336,13 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4027
4336
  ]).nullable(),
4028
4337
  replicaId: E().nullable(),
4029
4338
  result: C().nullable()
4030
- }).index(["name", "scheduledAt"]).index(["status"]), no = T("_voltro_schedule_claims", {
4339
+ }).index(["name", "scheduledAt"]).index(["status"]), Fo = T("_voltro_schedule_claims", {
4031
4340
  id: v({ prefix: "schclaim" }),
4032
4341
  scheduleName: E(),
4033
4342
  bucket: E(),
4034
4343
  claimedBy: E(),
4035
4344
  claimedAt: D()
4036
- }).index(["scheduleName", "bucket"]).index(["claimedAt"]), ro = T("_voltro_traces", {
4345
+ }).index(["scheduleName", "bucket"]).index(["claimedAt"]), Io = T("_voltro_traces", {
4037
4346
  id: v({ prefix: "span" }),
4038
4347
  traceId: E(),
4039
4348
  spanId: E(),
@@ -4057,7 +4366,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4057
4366
  durationMs: b(),
4058
4367
  attributes: C().nullable(),
4059
4368
  events: C().nullable()
4060
- }).index(["traceId", "startedAt"]).index(["startedAt"]).index(["status"]), io = T("_voltro_undo_log", {
4369
+ }).index(["traceId", "startedAt"]).index(["startedAt"]).index(["status"]), Lo = T("_voltro_undo_log", {
4061
4370
  id: v({ prefix: "undo" }),
4062
4371
  tag: E(),
4063
4372
  label: E().nullable(),
@@ -4068,25 +4377,25 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4068
4377
  crossesAction: r().default(!1),
4069
4378
  undone: r().default(!1),
4070
4379
  createdAt: D().default("now")
4071
- }).index(["subjectId", "createdAt"]).reactive(), ao = (e = process.env) => {
4380
+ }).index(["subjectId", "createdAt"]).reactive(), Ro = (e = process.env) => {
4072
4381
  let t = (e.VOLTRO_UNDO ?? "").toLowerCase();
4073
4382
  return t === "on" || t === "1" || t === "true" ? !0 : t === "off" || t === "0" || t === "false" ? !1 : e.NODE_ENV !== "production";
4074
- }, oo = (e) => e.startsWith("_voltro"), so = async (e, t, n) => (await e.query({
4383
+ }, zo = (e) => e.startsWith("_voltro"), Bo = async (e, t, n) => (await e.query({
4075
4384
  table: t,
4076
4385
  predicate: u("id", n),
4077
4386
  order: []
4078
- }))[0] ?? null, co = (e, t) => new Proxy(e, { get(e, n, r) {
4387
+ }))[0] ?? null, Vo = (e, t) => new Proxy(e, { get(e, n, r) {
4079
4388
  if (n === "insert") return async (n, r) => {
4080
4389
  let i = await e.insert(n, r);
4081
- return oo(n) || t({
4390
+ return zo(n) || t({
4082
4391
  table: n,
4083
4392
  op: "insert",
4084
4393
  next: i
4085
4394
  }), i;
4086
4395
  };
4087
4396
  if (n === "update") return async (n, r, i) => {
4088
- let a = oo(n) ? null : await so(e, n, r), o = await e.update(n, r, i);
4089
- return oo(n) || t({
4397
+ let a = zo(n) ? null : await Bo(e, n, r), o = await e.update(n, r, i);
4398
+ return zo(n) || t({
4090
4399
  table: n,
4091
4400
  op: "update",
4092
4401
  id: r,
@@ -4095,8 +4404,8 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4095
4404
  }), o;
4096
4405
  };
4097
4406
  if (n === "delete") return async (n, r) => {
4098
- let i = oo(n) ? null : await so(e, n, r), a = await e.delete(n, r);
4099
- return !oo(n) && a && t({
4407
+ let i = zo(n) ? null : await Bo(e, n, r), a = await e.delete(n, r);
4408
+ return !zo(n) && a && t({
4100
4409
  table: n,
4101
4410
  op: "delete",
4102
4411
  id: r,
@@ -4105,10 +4414,10 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4105
4414
  };
4106
4415
  let i = Reflect.get(e, n, r);
4107
4416
  return typeof i == "function" ? i.bind(e) : i;
4108
- } }), lo = (e) => {
4417
+ } }), Ho = (e) => {
4109
4418
  let t = [];
4110
4419
  return {
4111
- tx: co(e, (e) => t.push(e)),
4420
+ tx: Vo(e, (e) => t.push(e)),
4112
4421
  persist: async (e, n) => {
4113
4422
  if (t.length === 0 || n.tag.startsWith("__voltro")) return;
4114
4423
  let r = n.subject;
@@ -4124,14 +4433,14 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4124
4433
  });
4125
4434
  }
4126
4435
  };
4127
- }, uo = (e) => {
4436
+ }, Uo = (e) => {
4128
4437
  if (e.id !== void 0) return e.id;
4129
4438
  let t = e.next?.id;
4130
4439
  if (typeof t == "string") return t;
4131
4440
  let n = e.prev?.id;
4132
4441
  return typeof n == "string" ? n : void 0;
4133
- }, fo = (e) => {
4134
- let t = uo(e);
4442
+ }, Wo = (e) => {
4443
+ let t = Uo(e);
4135
4444
  switch (e.op) {
4136
4445
  case "insert": return t === void 0 ? null : {
4137
4446
  table: e.table,
@@ -4155,28 +4464,28 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4155
4464
  row: e.prev
4156
4465
  };
4157
4466
  }
4158
- }, po = (e) => {
4159
- if (e.crossesAction) throw new mo(e.invocationId, "action");
4467
+ }, Go = (e) => {
4468
+ if (e.crossesAction) throw new Ko(e.invocationId, "action");
4160
4469
  let t = [];
4161
4470
  for (let n = e.changes.length - 1; n >= 0; --n) {
4162
- let r = fo(e.changes[n]);
4471
+ let r = Wo(e.changes[n]);
4163
4472
  r !== null && t.push(r);
4164
4473
  }
4165
4474
  return t;
4166
- }, mo = class extends Error {
4475
+ }, Ko = class extends Error {
4167
4476
  invocationId;
4168
4477
  boundary;
4169
4478
  _tag = "UndoBoundaryError";
4170
4479
  constructor(e, t) {
4171
4480
  super(t === "action" ? `cannot undo invocation ${e}: it crossed an action (external side effect)` : `cannot undo invocation ${e}: the row changed since (conflict)`), this.invocationId = e, this.boundary = t, this.name = "UndoBoundaryError";
4172
4481
  }
4173
- }, ho = (e, t, n = ["updatedAt", "updatedBy"]) => {
4482
+ }, qo = (e, t, n = ["updatedAt", "updatedBy"]) => {
4174
4483
  if (t == null) return e == null;
4175
4484
  if (e == null) return !1;
4176
4485
  let r = new Set(n);
4177
4486
  for (let [n, i] of Object.entries(t)) if (!r.has(n) && !Object.is(e[n], i) && JSON.stringify(e[n]) !== JSON.stringify(i)) return !1;
4178
4487
  return !0;
4179
- }, go = class {
4488
+ }, Jo = class {
4180
4489
  capacity;
4181
4490
  done = [];
4182
4491
  undone = [];
@@ -4212,7 +4521,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4212
4521
  redo: [...this.undone]
4213
4522
  };
4214
4523
  }
4215
- }, _o = (e, t = /* @__PURE__ */ new Set()) => e.op === "insert" ? {
4524
+ }, Yo = (e, t = /* @__PURE__ */ new Set()) => e.op === "insert" ? {
4216
4525
  table: e.table,
4217
4526
  op: "insert",
4218
4527
  next: e.new ?? null
@@ -4229,7 +4538,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4229
4538
  table: e.table,
4230
4539
  op: "delete",
4231
4540
  prev: e.old ?? null
4232
- }, vo = async (e, t) => {
4541
+ }, Xo = async (e, t) => {
4233
4542
  switch (t.op) {
4234
4543
  case "delete":
4235
4544
  await e.delete(t.table, t.id);
@@ -4247,21 +4556,21 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4247
4556
  await e.insert(t.table, t.row);
4248
4557
  return;
4249
4558
  }
4250
- }, yo = async (e, t) => {
4251
- for (let n of t) await vo(e, n);
4252
- }, bo = (e) => e.request?.subject?.id ?? null, xo = (e) => e === !0 || e === 1, So = async (e, t, n) => (await e.query({
4559
+ }, Zo = async (e, t) => {
4560
+ for (let n of t) await Xo(e, n);
4561
+ }, Qo = (e) => e.request?.subject?.id ?? null, $o = (e) => e === !0 || e === 1, es = async (e, t, n) => (await e.query({
4253
4562
  table: t,
4254
4563
  predicate: u("id", n),
4255
4564
  order: []
4256
- }))[0] ?? null, Co = (e) => {
4565
+ }))[0] ?? null, ts = (e) => {
4257
4566
  try {
4258
4567
  let t = JSON.parse(String(e ?? "[]"));
4259
4568
  return Array.isArray(t) ? t : [];
4260
4569
  } catch {
4261
4570
  return [];
4262
4571
  }
4263
- }, wo = (e) => e.id ?? e.next?.id ?? e.prev?.id, To = async (e, t) => {
4264
- let n = bo(t);
4572
+ }, ns = (e) => e.id ?? e.next?.id ?? e.prev?.id, rs = async (e, t) => {
4573
+ let n = Qo(t);
4265
4574
  return [...await t.store.query({
4266
4575
  table: "_voltro_undo_log",
4267
4576
  predicate: u("subjectId", n),
@@ -4270,68 +4579,68 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4270
4579
  id: String(e.id),
4271
4580
  tag: String(e.tag ?? ""),
4272
4581
  label: e.label ?? null,
4273
- undone: xo(e.undone),
4274
- crossesAction: xo(e.crossesAction),
4582
+ undone: $o(e.undone),
4583
+ crossesAction: $o(e.crossesAction),
4275
4584
  createdAt: String(e.createdAt ?? "")
4276
4585
  }));
4277
- }, Eo = async (e, t) => {
4278
- let n = await So(t.store, "_voltro_undo_log", e.invocationId);
4279
- if (!n) throw new Se({ invocationId: e.invocationId });
4280
- if ((n.subjectId ?? null) !== bo(t)) throw new xe({ invocationId: e.invocationId });
4586
+ }, is = async (e, t) => {
4587
+ let n = await es(t.store, "_voltro_undo_log", e.invocationId);
4588
+ if (!n) throw new Ce({ invocationId: e.invocationId });
4589
+ if ((n.subjectId ?? null) !== Qo(t)) throw new Se({ invocationId: e.invocationId });
4281
4590
  return n;
4282
- }, Do = async (e, t) => {
4283
- let n = await Eo(e, t);
4284
- if (xo(n.undone)) return { ok: !0 };
4285
- if (xo(n.crossesAction)) throw new be({
4591
+ }, as = async (e, t) => {
4592
+ let n = await is(e, t);
4593
+ if ($o(n.undone)) return { ok: !0 };
4594
+ if ($o(n.crossesAction)) throw new xe({
4286
4595
  invocationId: e.invocationId,
4287
4596
  reason: "action"
4288
4597
  });
4289
- let r = Co(n.changes);
4598
+ let r = ts(n.changes);
4290
4599
  for (let n of r) {
4291
- let r = wo(n);
4292
- if (r !== void 0 && !ho(await So(t.store, n.table, r), n.next ?? null)) throw new be({
4600
+ let r = ns(n);
4601
+ if (r !== void 0 && !qo(await es(t.store, n.table, r), n.next ?? null)) throw new xe({
4293
4602
  invocationId: e.invocationId,
4294
4603
  reason: "conflict"
4295
4604
  });
4296
4605
  }
4297
4606
  let i = {
4298
4607
  invocationId: e.invocationId,
4299
- subject: bo(t),
4608
+ subject: Qo(t),
4300
4609
  changes: r,
4301
4610
  crossesAction: !1
4302
4611
  };
4303
- return await yo(t.store, po(i)), await t.store.update("_voltro_undo_log", e.invocationId, { undone: !0 }), { ok: !0 };
4304
- }, Oo = async (e, t) => {
4305
- let n = await Eo(e, t);
4306
- if (!xo(n.undone)) return { ok: !0 };
4307
- for (let e of Co(n.changes)) {
4308
- let n = wo(e);
4612
+ return await Zo(t.store, Go(i)), await t.store.update("_voltro_undo_log", e.invocationId, { undone: !0 }), { ok: !0 };
4613
+ }, os = async (e, t) => {
4614
+ let n = await is(e, t);
4615
+ if (!$o(n.undone)) return { ok: !0 };
4616
+ for (let e of ts(n.changes)) {
4617
+ let n = ns(e);
4309
4618
  e.op === "insert" && e.next ? await t.store.insert(e.table, e.next) : e.op === "update" && n !== void 0 && e.next ? await t.store.update(e.table, n, e.next) : e.op === "delete" && n !== void 0 && await t.store.delete(e.table, n);
4310
4619
  }
4311
4620
  return await t.store.update("_voltro_undo_log", e.invocationId, { undone: !1 }), { ok: !0 };
4312
- }, ko = (e = process.env) => {
4621
+ }, ss = (e = process.env) => {
4313
4622
  let t = (e.VOLTRO_TIMELINE ?? "").toLowerCase();
4314
4623
  return t === "off" || t === "0" || t === "false" ? "off" : t === "all" ? "all" : t === "interesting" || t === "on" || t === "1" || t === "true" ? "interesting" : e.NODE_ENV === "production" ? "off" : "interesting";
4315
- }, Ao = /pass(word)?|secret|token|api[_-]?key|authorization|cookie|ssn|credit[_-]?card|card[_-]?number|cvv|encrypted/i, jo = "«redacted»", Mo = (e) => {
4624
+ }, cs = /pass(word)?|secret|token|api[_-]?key|authorization|cookie|ssn|credit[_-]?card|card[_-]?number|cvv|encrypted/i, ls = "«redacted»", us = (e) => {
4316
4625
  if (e == null) return null;
4317
4626
  let t = {};
4318
- for (let [n, r] of Object.entries(e)) t[n] = Ao.test(n) ? jo : r;
4627
+ for (let [n, r] of Object.entries(e)) t[n] = cs.test(n) ? ls : r;
4319
4628
  return t;
4320
- }, No = (e) => {
4629
+ }, ds = (e) => {
4321
4630
  let t = e?.id;
4322
4631
  return typeof t == "string" ? t : void 0;
4323
- }, Po = (e, t) => {
4632
+ }, fs = (e, t) => {
4324
4633
  if (t.op === "insert") {
4325
- let n = No(t.new);
4634
+ let n = ds(t.new);
4326
4635
  return n === void 0 ? e : e.filter((e) => e.id !== n);
4327
4636
  }
4328
4637
  if (t.op === "update") {
4329
4638
  if (t.old == null) return e;
4330
- let n = No(t.new) ?? No(t.old);
4639
+ let n = ds(t.new) ?? ds(t.old);
4331
4640
  return e.map((e) => e.id === n ? t.old : e);
4332
4641
  }
4333
4642
  return t.old == null ? e : [...e, t.old];
4334
- }, Fo = class {
4643
+ }, ps = class {
4335
4644
  mode;
4336
4645
  capacity;
4337
4646
  now;
@@ -4351,8 +4660,8 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4351
4660
  ts: this.now(),
4352
4661
  table: e.table,
4353
4662
  op: e.op,
4354
- old: Mo(e.old),
4355
- new: Mo(e.new),
4663
+ old: us(e.old),
4664
+ new: us(e.new),
4356
4665
  tenantId: n
4357
4666
  }), this.ring.length > this.capacity && this.ring.shift(), t;
4358
4667
  }
@@ -4365,23 +4674,23 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4365
4674
  }
4366
4675
  replay(e, t, n) {
4367
4676
  let r = this.ring.filter((n) => n.table === e && n.seq > t).sort((e, t) => t.seq - e.seq), i = n;
4368
- for (let e of r) i = Po(i, e);
4677
+ for (let e of r) i = fs(i, e);
4369
4678
  return i;
4370
4679
  }
4371
- }, Io, Lo = () => (Io === void 0 && (Io = new Fo(ko())), Io), Ro = (e) => {
4372
- Io = e;
4373
- }, zo = (e) => {
4374
- let t = Lo();
4680
+ }, ms, hs = () => (ms === void 0 && (ms = new ps(ss())), ms), gs = (e) => {
4681
+ ms = e;
4682
+ }, _s = (e) => {
4683
+ let t = hs();
4375
4684
  if (t.enabled) try {
4376
4685
  t.record(e);
4377
4686
  } catch {}
4378
- }, Bo = /* @__PURE__ */ new Set([
4687
+ }, vs = /* @__PURE__ */ new Set([
4379
4688
  "count",
4380
4689
  "sum",
4381
4690
  "avg",
4382
4691
  "min",
4383
4692
  "max"
4384
- ]), Vo = (e) => {
4693
+ ]), ys = (e) => {
4385
4694
  if (e.joins !== void 0 && e.joins.length > 0) return {
4386
4695
  maintainable: !1,
4387
4696
  reason: "joins are not maintainable in v1"
@@ -4403,7 +4712,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4403
4712
  reason: "v1 maintains exactly one aggregation"
4404
4713
  };
4405
4714
  let t = e.aggregations[0];
4406
- return Bo.has(t.op) ? t.op !== "count" && (t.column === void 0 || t.column.length === 0) ? {
4715
+ return vs.has(t.op) ? t.op !== "count" && (t.column === void 0 || t.column.length === 0) ? {
4407
4716
  maintainable: !1,
4408
4717
  reason: `op '${t.op}' requires a column`
4409
4718
  } : {
@@ -4417,7 +4726,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4417
4726
  maintainable: !1,
4418
4727
  reason: `op '${t.op}' is not maintainable`
4419
4728
  };
4420
- }, Ho = "\0", $ = (e, t) => t === void 0 || t.length === 0 ? "" : t.map((t) => JSON.stringify(e[t] ?? null)).join(Ho), Uo = (e, t) => t === void 0 ? 0 : Number(e[t] ?? 0), Wo = (e, t) => {
4729
+ }, bs = "\0", $ = (e, t) => t === void 0 || t.length === 0 ? "" : t.map((t) => JSON.stringify(e[t] ?? null)).join(bs), xs = (e, t) => t === void 0 ? 0 : Number(e[t] ?? 0), Ss = (e, t) => {
4421
4730
  switch (e.op) {
4422
4731
  case "count": return t.count;
4423
4732
  case "sum": return t.sum ?? 0;
@@ -4425,10 +4734,10 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4425
4734
  case "min":
4426
4735
  case "max": return t.count > 0 ? t.extreme ?? null : null;
4427
4736
  }
4428
- }, Go = (e, t) => {
4737
+ }, Cs = (e, t) => {
4429
4738
  let n = /* @__PURE__ */ new Map();
4430
4739
  for (let r of t) {
4431
- let t = $(r, e.groupBy), i = n.get(t), a = Uo(r, e.column);
4740
+ let t = $(r, e.groupBy), i = n.get(t), a = xs(r, e.column);
4432
4741
  if (i === void 0) n.set(t, {
4433
4742
  count: 1,
4434
4743
  ...e.op === "sum" || e.op === "avg" ? { sum: a } : {},
@@ -4444,10 +4753,10 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4444
4753
  }
4445
4754
  }
4446
4755
  return n;
4447
- }, Ko = (e, t) => [...t.entries()].map(([t, n]) => ({
4756
+ }, ws = (e, t) => [...t.entries()].map(([t, n]) => ({
4448
4757
  groupKey: t,
4449
- value: Wo(e, n)
4450
- })), qo = (e, t, n) => {
4758
+ value: Ss(e, n)
4759
+ })), Ts = (e, t, n) => {
4451
4760
  let r = new Map(t), i = /* @__PURE__ */ new Set(), a = (t) => {
4452
4761
  let n = $(t, e.groupBy), a = r.get(n);
4453
4762
  if (a === void 0) return;
@@ -4456,7 +4765,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4456
4765
  r.delete(n);
4457
4766
  return;
4458
4767
  }
4459
- let s = Uo(t, e.column);
4768
+ let s = xs(t, e.column);
4460
4769
  e.op === "min" || e.op === "max" ? (a.extreme !== void 0 && s === a.extreme && i.add(n), r.set(n, {
4461
4770
  count: o,
4462
4771
  ...a.extreme === void 0 ? {} : { extreme: a.extreme }
@@ -4465,7 +4774,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4465
4774
  ...e.op === "sum" || e.op === "avg" ? { sum: (a.sum ?? 0) - s } : {}
4466
4775
  });
4467
4776
  }, o = (t) => {
4468
- let n = $(t, e.groupBy), i = r.get(n), a = Uo(t, e.column);
4777
+ let n = $(t, e.groupBy), i = r.get(n), a = xs(t, e.column);
4469
4778
  if (i === void 0) {
4470
4779
  r.set(n, {
4471
4780
  count: 1,
@@ -4485,15 +4794,15 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4485
4794
  state: r,
4486
4795
  rescanGroups: [...i]
4487
4796
  };
4488
- }, Jo = (e, t, n, r) => {
4797
+ }, Es = (e, t, n, r) => {
4489
4798
  if (n.length === 0) return t;
4490
- let i = new Set(n), a = Go(e, r.filter((t) => i.has($(t, e.groupBy)))), o = new Map(t);
4799
+ let i = new Set(n), a = Cs(e, r.filter((t) => i.has($(t, e.groupBy)))), o = new Map(t);
4491
4800
  for (let e of i) {
4492
4801
  let t = a.get(e);
4493
4802
  t === void 0 ? o.delete(e) : o.set(e, t);
4494
4803
  }
4495
4804
  return o;
4496
- }, Yo = class {
4805
+ }, Ds = class {
4497
4806
  shape;
4498
4807
  state = /* @__PURE__ */ new Map();
4499
4808
  groups = /* @__PURE__ */ new Map();
@@ -4501,7 +4810,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4501
4810
  this.shape = e;
4502
4811
  }
4503
4812
  seed(e) {
4504
- this.state = Go(this.shape, e), this.groups.clear();
4813
+ this.state = Cs(this.shape, e), this.groups.clear();
4505
4814
  for (let t of e) {
4506
4815
  let e = $(t, this.shape.groupBy);
4507
4816
  this.groups.has(e) || this.groups.set(e, this.groupValues(t));
@@ -4513,14 +4822,14 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4513
4822
  let e = $(t, this.shape.groupBy);
4514
4823
  this.groups.has(e) || this.groups.set(e, this.groupValues(t));
4515
4824
  }
4516
- let n = qo(this.shape, this.state, e);
4825
+ let n = Ts(this.shape, this.state, e);
4517
4826
  this.state = n.state;
4518
4827
  for (let e of this.groups.keys()) this.state.has(e) || this.groups.delete(e);
4519
4828
  return n.rescanGroups;
4520
4829
  }
4521
4830
  resolveRescan(e, t) {
4522
4831
  if (e.length === 0) return;
4523
- this.state = Jo(this.shape, this.state, e, t);
4832
+ this.state = Es(this.shape, this.state, e, t);
4524
4833
  let n = new Set(e);
4525
4834
  for (let e of t) {
4526
4835
  let t = $(e, this.shape.groupBy);
@@ -4529,7 +4838,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4529
4838
  for (let e of n) this.state.has(e) || this.groups.delete(e);
4530
4839
  }
4531
4840
  materialize() {
4532
- return Ko(this.shape, this.state).map((e) => ({
4841
+ return ws(this.shape, this.state).map((e) => ({
4533
4842
  groupKey: e.groupKey,
4534
4843
  group: this.groups.get(e.groupKey) ?? {},
4535
4844
  value: e.value
@@ -4542,58 +4851,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4542
4851
  for (let r of t) n[r] = e[r];
4543
4852
  return n;
4544
4853
  }
4545
- }, Xo = "admin:full", Zo = class extends I.TaggedError()("AccessDenied", {
4546
- action: I.String,
4547
- resourceType: I.String,
4548
- resourceId: I.String
4549
- }) {}, Qo = /* @__PURE__ */ new Map(), $o = (e) => {
4550
- if (typeof e.resourceType != "string" || e.resourceType.length === 0) throw Error("defineResourcePolicy: a non-empty `resourceType` is required");
4551
- if (e.actions === void 0 || Object.keys(e.actions).length === 0) throw Error(`resource policy '${e.resourceType}': at least one action is required`);
4552
- if (Qo.has(e.resourceType)) throw Error(`resource policy '${e.resourceType}' is already registered — types must be unique`);
4553
- return Qo.set(e.resourceType, e), e;
4554
- }, es = (e) => Qo.get(e), ts = () => [...Qo.values()], ns = () => Qo.clear(), rs = () => ts().map((e) => {
4555
- let t = /* @__PURE__ */ new Set();
4556
- for (let n of Object.values(e.actions)) for (let e of n) t.add(e);
4557
- for (let [n, r] of Object.entries(e.implies ?? {})) {
4558
- t.add(n);
4559
- for (let e of r) t.add(e);
4560
- }
4561
- return {
4562
- resourceType: e.resourceType,
4563
- actions: e.actions,
4564
- relations: [...t],
4565
- implies: e.implies ?? {}
4566
- };
4567
- }), is = (e, t) => {
4568
- let n = new Set(e);
4569
- if (t === void 0) return n;
4570
- let r = [...e];
4571
- for (; r.length > 0;) {
4572
- let e = r.pop();
4573
- for (let i of t[e] ?? []) n.has(i) || (n.add(i), r.push(i));
4574
- }
4575
- return n;
4576
- }, as = (e, t, n, r) => e.id === null ? /* @__PURE__ */ new Set() : is(n.filter((n) => n.subjectId === e.id && n.resourceType === t.type && n.resourceId === t.id).map((e) => e.relation), r.implies), os = (e, t, n, r) => {
4577
- if (e.scopes?.includes("admin:full")) return !0;
4578
- if (e.id === null || n.tenantId != null && e.tenantId !== n.tenantId) return !1;
4579
- let i = r.policy.actions[t];
4580
- if (i === void 0 || i.length === 0) return !1;
4581
- let a = as(e, n, r.tuples, r.policy);
4582
- return i.some((e) => a.has(e));
4583
- }, ss = (e, t, n, r) => {
4584
- if (!os(e, t, n, r)) throw new Zo({
4585
- action: t,
4586
- resourceType: n.type,
4587
- resourceId: n.id
4588
- });
4589
- }, cs = (e, t, n, r, i) => r.filter((r) => os(e, t, {
4590
- type: n,
4591
- id: r.id,
4592
- ...r.tenantId === void 0 ? {} : { tenantId: r.tenantId }
4593
- }, i)), ls = (e, t) => {
4594
- let n = new Set(t.map((e) => e.id));
4595
- return e.filter((e) => !n.has(e.id)).map((e) => e.id);
4596
- }, us = T("_voltro_rebac_tuples", {
4854
+ }, Os = T("_voltro_rebac_tuples", {
4597
4855
  id: v({ prefix: "rbct" }),
4598
4856
  subjectId: E(),
4599
4857
  relation: E(),
@@ -4605,7 +4863,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4605
4863
  "subjectId",
4606
4864
  "resourceType",
4607
4865
  "resourceId"
4608
- ]).reactive(), ds = async (e, n, r, i) => n === null ? [] : (await e.query({
4866
+ ]).reactive(), ks = async (e, n, r, i) => n === null ? [] : (await e.query({
4609
4867
  table: "_voltro_rebac_tuples",
4610
4868
  predicate: t(u("subjectId", n), u("resourceType", r), u("resourceId", i)),
4611
4869
  order: [],
@@ -4617,16 +4875,16 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4617
4875
  relation: e.relation,
4618
4876
  resourceType: e.resourceType,
4619
4877
  resourceId: e.resourceId
4620
- })), fs = (e) => ({
4878
+ })), As = (e) => ({
4621
4879
  id: e.id,
4622
4880
  tenantId: e.tenantId,
4623
4881
  ...e.scopes === void 0 ? {} : { scopes: e.scopes }
4624
- }), ps = (e, t) => {
4625
- let n = t.getPolicy ?? es;
4882
+ }), js = (e, t) => {
4883
+ let n = t.getPolicy ?? la;
4626
4884
  return (r, i) => {
4627
4885
  let a = e[i.tag];
4628
4886
  if (a === void 0) return r;
4629
- let o = n(a.resourceType), s = (e) => j.fail(new Zo({
4887
+ let o = n(a.resourceType), s = (e) => j.fail(new oa({
4630
4888
  action: a.action,
4631
4889
  resourceType: a.resourceType,
4632
4890
  resourceId: e
@@ -4634,17 +4892,17 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4634
4892
  if (o === void 0) return s("");
4635
4893
  let c = a.resourceId(i.input);
4636
4894
  if (c === null || c === "") return s("");
4637
- let l = fs(i.subject), u = {
4895
+ let l = As(i.subject), u = {
4638
4896
  type: a.resourceType,
4639
4897
  id: c,
4640
4898
  tenantId: i.subject.tenantId
4641
4899
  };
4642
- return j.flatMap(j.promise(async () => t.loadTuples(l.id, a.resourceType, c)), (e) => os(l, a.action, u, {
4900
+ return j.flatMap(j.promise(async () => t.loadTuples(l.id, a.resourceType, c)), (e) => ha(l, a.action, u, {
4643
4901
  policy: o,
4644
4902
  tuples: e
4645
4903
  }) ? r : s(c));
4646
4904
  };
4647
- }, ms = async (e, n, r) => n === null ? [] : (await e.query({
4905
+ }, Ms = async (e, n, r) => n === null ? [] : (await e.query({
4648
4906
  table: "_voltro_rebac_tuples",
4649
4907
  predicate: t(u("subjectId", n), u("resourceType", r)),
4650
4908
  order: [],
@@ -4656,18 +4914,18 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4656
4914
  relation: e.relation,
4657
4915
  resourceType: e.resourceType,
4658
4916
  resourceId: e.resourceId
4659
- })), hs = (e) => {
4660
- let t = e.getPolicy ?? es;
4917
+ })), Ns = (e) => {
4918
+ let t = e.getPolicy ?? la;
4661
4919
  return async (n, r, i, a) => {
4662
4920
  let o = t(r);
4663
4921
  if (o === void 0) return [];
4664
- let s = fs(n);
4665
- return cs(s, i, r, a, {
4922
+ let s = As(n);
4923
+ return _a(s, i, r, a, {
4666
4924
  policy: o,
4667
4925
  tuples: await e.loadSubjectTuples(s.id, r)
4668
4926
  });
4669
4927
  };
4670
- }, gs = (e) => {
4928
+ }, Ps = (e) => {
4671
4929
  if (typeof e.name != "string" || e.name.length === 0) throw Error("defineReaction: a non-empty `name` is required");
4672
4930
  if (e.watch === void 0 || typeof e.watch.table != "string" || e.watch.table.length === 0) throw Error(`reaction '${e.name}': watch.table is required`);
4673
4931
  if (e.act === void 0 || e.act.kind !== "agent" && e.act.kind !== "workflow") throw Error(`reaction '${e.name}': act must be { kind: 'agent' | 'workflow', … }`);
@@ -4675,14 +4933,14 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4675
4933
  if (e.guards.rateLimit !== void 0 && (e.guards.rateLimit.limit <= 0 || e.guards.rateLimit.windowMs <= 0)) throw Error(`reaction '${e.name}': guards.rateLimit needs positive limit + windowMs`);
4676
4934
  if (e.guards.costBudgetUsd !== void 0 && e.guards.costBudgetUsd < 0) throw Error(`reaction '${e.name}': guards.costBudgetUsd must be >= 0`);
4677
4935
  return e;
4678
- }, _s = (e, t) => e === void 0 ? !0 : Array.isArray(e) ? e.includes(t) : e === t, vs = (e) => e.new?.tenantId ?? e.old?.tenantId ?? null, ys = class {
4936
+ }, Fs = (e, t) => e === void 0 ? !0 : Array.isArray(e) ? e.includes(t) : e === t, Is = (e) => e.new?.tenantId ?? e.old?.tenantId ?? null, Ls = class {
4679
4937
  hits = /* @__PURE__ */ new Map();
4680
4938
  allow(e, t, n, r) {
4681
4939
  let i = r - n, a = (this.hits.get(e) ?? []).filter((e) => e > i);
4682
4940
  return a.length >= t ? (this.hits.set(e, a), !1) : (a.push(r), this.hits.set(e, a), !0);
4683
4941
  }
4684
- }, bs = async (e, t, n) => {
4685
- if (t.table !== e.watch.table || !_s(e.watch.on, t.op)) return "skipped-op";
4942
+ }, Rs = async (e, t, n) => {
4943
+ if (t.table !== e.watch.table || !Fs(e.watch.on, t.op)) return "skipped-op";
4686
4944
  if (e.when !== void 0 && !e.when(t)) return "skipped-when";
4687
4945
  let r = `${e.name}:${e.guards.dedupeKey(t)}`;
4688
4946
  if (await n.dedupe.has(r)) return "skipped-dedupe";
@@ -4691,26 +4949,26 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4691
4949
  let t = n.now?.() ?? Date.now();
4692
4950
  if (!n.rateLimiter.allow(e.name, i.limit, i.windowMs, t)) return "skipped-ratelimit";
4693
4951
  }
4694
- let a = vs(t);
4952
+ let a = Is(t);
4695
4953
  return e.guards.costBudgetUsd !== void 0 && n.checkBudget !== void 0 && !await n.checkBudget(a, e.guards.costBudgetUsd) ? "skipped-budget" : (await n.runAct(e.act, t, {
4696
4954
  id: a,
4697
4955
  via: "agent"
4698
4956
  }), await n.dedupe.add(r), "acted");
4699
- }, xs = T("_voltro_wakeups", {
4957
+ }, zs = T("_voltro_wakeups", {
4700
4958
  id: v({ prefix: "wakeup" }),
4701
4959
  tenantId: E(),
4702
4960
  kind: E(),
4703
4961
  refId: E(),
4704
4962
  wakeAt: D(),
4705
4963
  status: E()
4706
- }).index(["status", "wakeAt"]).index(["tenantId"]), Ss = async (e) => {
4707
- let t = e.now?.() ?? /* @__PURE__ */ new Date(), n = await Ha(e.store, t, e.batchLimit ?? 100);
4964
+ }).index(["status", "wakeAt"]).index(["tenantId"]), Bs = async (e) => {
4965
+ let t = e.now?.() ?? /* @__PURE__ */ new Date(), n = await xo(e.store, t, e.batchLimit ?? 100);
4708
4966
  if (n.length === 0) return 0;
4709
4967
  let r = 0;
4710
- for (let t of n) if (await Ra(e.store, t)) try {
4968
+ for (let t of n) if (await _o(e.store, t)) try {
4711
4969
  await e.adapter.wake(t), r++;
4712
4970
  } catch (n) {
4713
- await za(e.store, t), e.log?.warn("wake: adapter failed — released for retry", {
4971
+ await vo(e.store, t), e.log?.warn("wake: adapter failed — released for retry", {
4714
4972
  tenantId: t.tenantId,
4715
4973
  kind: t.kind,
4716
4974
  refId: t.refId,
@@ -4718,11 +4976,11 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4718
4976
  });
4719
4977
  }
4720
4978
  return r > 0 && e.log?.info("wake: woke due deployments", { count: r }), r;
4721
- }, Cs = (e, t = 1e3) => {
4979
+ }, Vs = (e, t = 1e3) => {
4722
4980
  let n = !1, r, i = async () => {
4723
4981
  if (!n) {
4724
4982
  try {
4725
- await Ss(e);
4983
+ await Bs(e);
4726
4984
  } catch (t) {
4727
4985
  e.log?.warn("wake: tick failed", { reason: t instanceof Error ? t.message : String(t) });
4728
4986
  }
@@ -4732,10 +4990,10 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4732
4990
  return i(), { stop: () => {
4733
4991
  n = !0, r !== void 0 && clearTimeout(r);
4734
4992
  } };
4735
- }, ws = (e) => ({ wake: async () => {
4993
+ }, Hs = (e) => ({ wake: async () => {
4736
4994
  await e.start();
4737
- } }), Ts = (e) => new Promise((t) => setTimeout(t, e)), Es = (e) => {
4738
- let t = e.fetchImpl ?? fetch, n = e.now ?? Date.now, r = e.sleep ?? Ts, i = e.spawnImpl ?? _t, a = e.startTimeoutMs ?? 3e4, o = e.healthPollMs ?? 200, s = e.stopSignal ?? "SIGTERM", c = e.stopGraceMs ?? 1e4, l, u, d = e.healthCheck ?? ((e) => e.ok), f = async () => {
4995
+ } }), Us = (e) => new Promise((t) => setTimeout(t, e)), Ws = (e) => {
4996
+ let t = e.fetchImpl ?? fetch, n = e.now ?? Date.now, r = e.sleep ?? Us, i = e.spawnImpl ?? vt, a = e.startTimeoutMs ?? 3e4, o = e.healthPollMs ?? 200, s = e.stopSignal ?? "SIGTERM", c = e.stopGraceMs ?? 1e4, l, u, d = e.healthCheck ?? ((e) => e.ok), f = async () => {
4739
4997
  try {
4740
4998
  let n = await t(e.healthUrl);
4741
4999
  return d(n);
@@ -4789,11 +5047,11 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4789
5047
  },
4790
5048
  stop: m
4791
5049
  };
4792
- }, Ds = async (e) => {
5050
+ }, Gs = async (e) => {
4793
5051
  if (e.signals.connectedClients() > 0 || e.signals.inFlightRequests() > 0 || e.signals.activeWorkflowExecutions() > 0) return !1;
4794
- let t = (e.now?.() ?? /* @__PURE__ */ new Date()).getTime() + (e.wakeLookaheadMs ?? 3e4), n = await Ua(e.store);
5052
+ let t = (e.now?.() ?? /* @__PURE__ */ new Date()).getTime() + (e.wakeLookaheadMs ?? 3e4), n = await So(e.store);
4795
5053
  return !(n !== null && n.wakeAt.getTime() <= t);
4796
- }, Os = (e, t = Date.now) => {
5054
+ }, Ks = (e, t = Date.now) => {
4797
5055
  let n;
4798
5056
  return {
4799
5057
  update: (r) => {
@@ -4805,7 +5063,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4805
5063
  n = void 0;
4806
5064
  }
4807
5065
  };
4808
- }, ks = () => {
5066
+ }, qs = () => {
4809
5067
  let e = 0, t = 0;
4810
5068
  return {
4811
5069
  onRequestStart: () => {
@@ -4823,8 +5081,8 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4823
5081
  inFlightRequests: () => e,
4824
5082
  openConnections: () => t
4825
5083
  };
4826
- }, As = (e) => ({ run: async (t) => (e.onActivity?.(), await e.ensureAwake(), t()) }), js = (e, t, n, r) => new Promise((i, a) => {
4827
- let o = We.request({
5084
+ }, Js = (e) => ({ run: async (t) => (e.onActivity?.(), await e.ensureAwake(), t()) }), Ys = (e, t, n, r) => new Promise((i, a) => {
5085
+ let o = Ge.request({
4828
5086
  host: n,
4829
5087
  port: r,
4830
5088
  method: e.method,
@@ -4834,8 +5092,8 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4834
5092
  t.writeHead(e.statusCode ?? 502, e.headers), e.pipe(t), e.on("end", i), e.on("error", a);
4835
5093
  });
4836
5094
  o.on("error", a), e.pipe(o);
4837
- }), Ms = (e, t, n, r, i) => new Promise((a, o) => {
4838
- let s = We.request({
5095
+ }), Xs = (e, t, n, r, i) => new Promise((a, o) => {
5096
+ let s = Ge.request({
4839
5097
  host: r,
4840
5098
  port: i,
4841
5099
  method: e.method,
@@ -4849,21 +5107,21 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4849
5107
  };
4850
5108
  t.on("close", s), r.on("close", s), r.on("error", o);
4851
5109
  }), s.on("error", o), s.end();
4852
- }), Ns = (e) => {
4853
- let t = As({
5110
+ }), Zs = (e) => {
5111
+ let t = Js({
4854
5112
  ensureAwake: () => e.supervisor.start(),
4855
5113
  ...e.onActivity === void 0 ? {} : { onActivity: e.onActivity }
4856
- }), n = e.activity, r = We.createServer((r, i) => {
4857
- n?.onRequestStart(), i.on("close", () => n?.onRequestEnd()), t.run(() => js(r, i, e.targetHost, e.targetPort)).catch((t) => {
5114
+ }), n = e.activity, r = Ge.createServer((r, i) => {
5115
+ n?.onRequestStart(), i.on("close", () => n?.onRequestEnd()), t.run(() => Ys(r, i, e.targetHost, e.targetPort)).catch((t) => {
4858
5116
  e.log?.warn("wake-router: proxy failed", { reason: t instanceof Error ? t.message : String(t) }), i.headersSent || i.writeHead(502), i.end("wake/proxy failed");
4859
5117
  });
4860
5118
  });
4861
5119
  return r.on("upgrade", (r, i, a) => {
4862
- n?.onConnect(), i.on("close", () => n?.onDisconnect()), t.run(() => Ms(r, i, a, e.targetHost, e.targetPort)).catch((t) => {
5120
+ n?.onConnect(), i.on("close", () => n?.onDisconnect()), t.run(() => Xs(r, i, a, e.targetHost, e.targetPort)).catch((t) => {
4863
5121
  e.log?.warn("wake-router: upgrade proxy failed", { reason: t instanceof Error ? t.message : String(t) }), i.destroy();
4864
5122
  });
4865
5123
  }), r;
4866
- }, Ps = async (e) => {
5124
+ }, Qs = async (e) => {
4867
5125
  try {
4868
5126
  return (await e.query({
4869
5127
  table: "_voltro_workflow_runs",
@@ -4880,15 +5138,15 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4880
5138
  } catch {
4881
5139
  return 0;
4882
5140
  }
4883
- }, Fs = async (e) => {
4884
- let t = ws(e.supervisor), n = await Ss({
5141
+ }, $s = async (e) => {
5142
+ let t = Hs(e.supervisor), n = await Bs({
4885
5143
  store: e.store,
4886
5144
  adapter: t,
4887
5145
  ...e.now === void 0 ? {} : { now: e.now },
4888
5146
  ...e.log === void 0 ? {} : { log: e.log }
4889
5147
  });
4890
5148
  n > 0 && e.idleGate.reset();
4891
- let r = await Ds({
5149
+ let r = await Gs({
4892
5150
  store: e.store,
4893
5151
  signals: e.signals,
4894
5152
  ...e.wakeLookaheadMs === void 0 ? {} : { wakeLookaheadMs: e.wakeLookaheadMs },
@@ -4898,12 +5156,12 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4898
5156
  woke: n,
4899
5157
  stopped: i
4900
5158
  };
4901
- }, Is = async (e) => {
4902
- let t = Os(e.idleGraceMs ?? 6e4), n = e.tickMs ?? 1e3, r = ks(), i = 0, a = e.signals === void 0, o = e.signals ?? {
5159
+ }, ec = async (e) => {
5160
+ let t = Ks(e.idleGraceMs ?? 6e4), n = e.tickMs ?? 1e3, r = qs(), i = 0, a = e.signals === void 0, o = e.signals ?? {
4903
5161
  connectedClients: () => r.openConnections(),
4904
5162
  inFlightRequests: () => r.inFlightRequests(),
4905
5163
  activeWorkflowExecutions: () => i
4906
- }, s = Ns({
5164
+ }, s = Zs({
4907
5165
  supervisor: e.supervisor,
4908
5166
  targetHost: e.targetHost,
4909
5167
  targetPort: e.targetPort,
@@ -4922,7 +5180,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4922
5180
  let l = !1, u, d = e.firedRetentionMs ?? 10 * 6e4, f = 0, p = async () => {
4923
5181
  if (!l) {
4924
5182
  try {
4925
- if (a && (i = await Ps(e.store)), await Fs({
5183
+ if (a && (i = await Qs(e.store)), await $s({
4926
5184
  store: e.store,
4927
5185
  supervisor: e.supervisor,
4928
5186
  signals: o,
@@ -4930,7 +5188,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4930
5188
  ...e.wakeLookaheadMs === void 0 ? {} : { wakeLookaheadMs: e.wakeLookaheadMs },
4931
5189
  ...e.log === void 0 ? {} : { log: e.log }
4932
5190
  }), f++ % 60 == 0) {
4933
- let t = await Ga(e.store, { firedOlderThan: new Date(Date.now() - d) });
5191
+ let t = await wo(e.store, { firedOlderThan: new Date(Date.now() - d) });
4934
5192
  t > 0 && e.log?.info("orchestrator: pruned fired wakeups", { count: t });
4935
5193
  }
4936
5194
  } catch (t) {
@@ -4945,14 +5203,14 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4945
5203
  l = !0, u !== void 0 && clearTimeout(u), await new Promise((e) => s.close(() => e()));
4946
5204
  }
4947
5205
  };
4948
- }, Ls = (e) => e, Rs = class extends I.TaggedError()("AnalyticsError", {
5206
+ }, tc = (e) => e, nc = class extends I.TaggedError()("AnalyticsError", {
4949
5207
  provider: I.String,
4950
5208
  operation: I.String,
4951
5209
  cause: I.String
4952
- }) {}, zs = class extends I.TaggedError()("AnalyticsCapabilityNotSupported", {
5210
+ }) {}, rc = class extends I.TaggedError()("AnalyticsCapabilityNotSupported", {
4953
5211
  provider: I.String,
4954
5212
  capability: I.String
4955
- }) {}, Bs = class extends Fe.Tag("@voltro/AnalyticsSink")() {}, Vs = (e, t) => ({
5213
+ }) {}, ic = class extends Ie.Tag("@voltro/AnalyticsSink")() {}, ac = (e, t) => ({
4956
5214
  info: e.info,
4957
5215
  track: (n) => e.track(n.tenantId === void 0 ? {
4958
5216
  ...n,
@@ -4971,20 +5229,20 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4971
5229
  tenantId: t
4972
5230
  } : n),
4973
5231
  ...e.mirror === void 0 ? {} : { mirror: e.mirror }
4974
- }), Hs = () => j.gen(function* () {
4975
- let e = yield* Bs, t = yield* j.serviceOption(O), n = P.match(t, {
5232
+ }), oc = () => j.gen(function* () {
5233
+ let e = yield* ic, t = yield* j.serviceOption(be), n = P.match(t, {
4976
5234
  onNone: () => null,
4977
5235
  onSome: (e) => e.tenantId ?? null
4978
5236
  });
4979
- return n === null ? e : Vs(e, n);
4980
- }), Us = "noop", Ws = () => {
4981
- let e = (e) => j.fail(new zs({
4982
- provider: Us,
5237
+ return n === null ? e : ac(e, n);
5238
+ }), sc = "noop", cc = () => {
5239
+ let e = (e) => j.fail(new rc({
5240
+ provider: sc,
4983
5241
  capability: e
4984
5242
  }));
4985
5243
  return {
4986
5244
  info: {
4987
- provider: Us,
5245
+ provider: sc,
4988
5246
  capabilities: {
4989
5247
  track: !0,
4990
5248
  aggregate: !1,
@@ -4998,8 +5256,8 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
4998
5256
  timeseries: () => e("timeseries"),
4999
5257
  topN: () => e("topN")
5000
5258
  };
5001
- }, Gs = (e) => {
5002
- if (e.length === 0) return Ws();
5259
+ }, lc = (e) => {
5260
+ if (e.length === 0) return cc();
5003
5261
  if (e.length === 1) return e[0];
5004
5262
  let t = {
5005
5263
  provider: "compose",
@@ -5016,7 +5274,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
5016
5274
  discard: !0
5017
5275
  }), r = (t, n) => {
5018
5276
  let r = e.find((e) => e.info.capabilities[t]);
5019
- return r === void 0 ? j.fail(new zs({
5277
+ return r === void 0 ? j.fail(new rc({
5020
5278
  provider: "compose",
5021
5279
  capability: t
5022
5280
  })) : n(r);
@@ -5039,11 +5297,11 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
5039
5297
  topN: (e) => r("topN", (t) => t.topN(e)),
5040
5298
  ...a === void 0 ? {} : { mirror: a }
5041
5299
  };
5042
- }, Ks = (e) => {
5300
+ }, uc = (e) => {
5043
5301
  let t = e.filter((e) => e.dispose !== void 0);
5044
5302
  return {
5045
5303
  kind: "compose",
5046
- build: (t) => Gs(e.map((e) => e.build(t))),
5304
+ build: (t) => lc(e.map((e) => e.build(t))),
5047
5305
  tables: e.flatMap((e) => e.tables ?? []),
5048
5306
  initialize: (t) => j.forEach(e, (e) => e.initialize ? e.initialize(t) : j.void, {
5049
5307
  concurrency: 1,
@@ -5054,15 +5312,15 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
5054
5312
  discard: !0
5055
5313
  }) } : {}
5056
5314
  };
5057
- }, qs = {
5315
+ }, dc = {
5058
5316
  kind: "noop",
5059
- build: () => Ws()
5060
- }, Js = {
5317
+ build: () => cc()
5318
+ }, fc = {
5061
5319
  tables: [],
5062
5320
  detach: () => {}
5063
- }, Ys = (e) => {
5321
+ }, pc = (e) => {
5064
5322
  let { store: t, sink: n, log: r } = e, i = n.mirror;
5065
- if (i === void 0 || i.tables.length === 0) return Js;
5323
+ if (i === void 0 || i.tables.length === 0) return fc;
5066
5324
  let a = e.run ?? ((e) => j.runPromise(e)), o = i.primaryKey ?? "id", s = new Set(i.tables), c = (e) => {
5067
5325
  if (e.op === "delete") {
5068
5326
  let t = e.old;
@@ -5086,11 +5344,11 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
5086
5344
  tables: i.tables,
5087
5345
  detach: l
5088
5346
  };
5089
- }, Xs = (e) => {
5347
+ }, mc = (e) => {
5090
5348
  let t = typeof e.refresh == "string" ? { interval: e.refresh } : e.refresh, n = e.strategy ?? "replace";
5091
5349
  if (n === "merge" && (e.mergeKey === void 0 || e.mergeKey.length === 0)) throw Error(`defineAggregate("${e.name}"): strategy: 'merge' requires mergeKey — the property on each row to upsert by`);
5092
5350
  if (e.incremental !== void 0) {
5093
- let t = Vo({
5351
+ let t = ys({
5094
5352
  aggregations: [{
5095
5353
  op: e.incremental.op,
5096
5354
  ...e.incremental.column === void 0 ? {} : { column: e.incremental.column }
@@ -5112,38 +5370,38 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
5112
5370
  build: e.build,
5113
5371
  ...e.incremental === void 0 ? {} : { incremental: e.incremental }
5114
5372
  };
5115
- }, Zs = (e) => typeof e == "object" && !!e && e._voltroAggregate === !0, Qs = class extends I.TaggedError()("AggregateStale", {
5373
+ }, hc = (e) => typeof e == "object" && !!e && e._voltroAggregate === !0, gc = class extends I.TaggedError()("AggregateStale", {
5116
5374
  name: I.String,
5117
5375
  ageMs: I.Number,
5118
5376
  maxAgeMs: I.Number
5119
- }) {}, $s = class extends I.TaggedError()("AggregateNotFound", { name: I.String }) {}, ec = class extends I.TaggedError()("AggregateError", {
5377
+ }) {}, _c = class extends I.TaggedError()("AggregateNotFound", { name: I.String }) {}, vc = class extends I.TaggedError()("AggregateError", {
5120
5378
  name: I.String,
5121
5379
  operation: I.String,
5122
5380
  cause: I.String
5123
- }) {}, tc = class extends Fe.Tag("@voltro/AggregateRegistry")() {}, nc = (e) => j.gen(function* () {
5124
- return (yield* tc).getHandle(e);
5125
- }), rc = (e, n, r) => {
5381
+ }) {}, yc = class extends Ie.Tag("@voltro/AggregateRegistry")() {}, bc = (e) => j.gen(function* () {
5382
+ return (yield* yc).getHandle(e);
5383
+ }), xc = (e, n, r) => {
5126
5384
  if (e.crossTenant || !n.has(e.table) || r == null) return e;
5127
5385
  let i = u("tenantId", r);
5128
5386
  return {
5129
5387
  ...e,
5130
5388
  predicate: e.predicate ? t(e.predicate, i) : i
5131
5389
  };
5132
- }, ic = (e, n) => {
5390
+ }, Sc = (e, n) => {
5133
5391
  if (e.includeDeleted || !n.has(e.table)) return e;
5134
5392
  let r = S("deletedAt");
5135
5393
  return {
5136
5394
  ...e,
5137
5395
  predicate: e.predicate ? t(e.predicate, r) : r
5138
5396
  };
5139
- }, ac = (e) => j.runPromiseExit(e).then((e) => {
5140
- if (ze.isSuccess(e)) return e.value;
5397
+ }, Cc = (e) => j.runPromiseExit(e).then((e) => {
5398
+ if (Be.isSuccess(e)) return e.value;
5141
5399
  let t = k.failureOption(e.cause);
5142
5400
  throw P.isSome(t) ? t.value : k.squash(e.cause);
5143
- }), oc = (e, t) => e.pipe(j.provideService(O, t)), sc = async (e, t, n) => {
5144
- let r = await j.runPromise(we(t, e.guards, n));
5401
+ }), wc = (e, t) => e.pipe(j.provideService(be, t)), Tc = async (e, t, n) => {
5402
+ let r = await j.runPromise(Te(t, e.guards, n));
5145
5403
  if (r) throw r;
5146
- }, cc = async (e) => {
5404
+ }, Ec = async (e) => {
5147
5405
  let t = `${e.kind}.${e.name}`, n = Date.now(), r = "ok";
5148
5406
  try {
5149
5407
  if (e.interceptor) {
@@ -5158,7 +5416,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
5158
5416
  traceId: e.requestContext.traceId,
5159
5417
  ...e.requestContext.spanId === void 0 ? {} : { spanId: e.requestContext.spanId }
5160
5418
  }), r = await j.runPromiseExit(n);
5161
- if (ze.isSuccess(r)) return r.value;
5419
+ if (Be.isSuccess(r)) return r.value;
5162
5420
  throw k.squash(r.cause);
5163
5421
  }
5164
5422
  return await e.runExecutor();
@@ -5172,27 +5430,27 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
5172
5430
  status: r
5173
5431
  });
5174
5432
  }
5175
- }, lc = /* @__PURE__ */ new Set([1213, 1205]), uc = /* @__PURE__ */ new Set([
5433
+ }, Dc = /* @__PURE__ */ new Set([1213, 1205]), Oc = /* @__PURE__ */ new Set([
5176
5434
  "ER_LOCK_DEADLOCK",
5177
5435
  "ER_LOCK_WAIT_TIMEOUT",
5178
5436
  "40001",
5179
5437
  "40P01"
5180
- ]), dc = (e) => {
5438
+ ]), kc = (e) => {
5181
5439
  let t = e;
5182
5440
  for (let e = 0; e < 6 && typeof t == "object" && t; e++) {
5183
5441
  let e = t;
5184
- if (typeof e.errno == "number" && lc.has(e.errno) || typeof e.code == "string" && uc.has(e.code) || typeof e.sqlState == "string" && uc.has(e.sqlState)) return !0;
5442
+ if (typeof e.errno == "number" && Dc.has(e.errno) || typeof e.code == "string" && Oc.has(e.code) || typeof e.sqlState == "string" && Oc.has(e.sqlState)) return !0;
5185
5443
  t = e.cause;
5186
5444
  }
5187
5445
  return !1;
5188
- }, fc = 3, pc = (e) => new Promise((t) => setTimeout(t, e)), mc = async (e) => {
5446
+ }, Ac = 3, jc = (e) => new Promise((t) => setTimeout(t, e)), Mc = async (e) => {
5189
5447
  for (let t = 1;; t++) try {
5190
5448
  return await e();
5191
5449
  } catch (e) {
5192
- if (t >= fc || !dc(e)) throw e;
5193
- await pc(t * 20 + Math.floor(Math.random() * 30));
5450
+ if (t >= Ac || !kc(e)) throw e;
5451
+ await jc(t * 20 + Math.floor(Math.random() * 30));
5194
5452
  }
5195
- }, hc = (e) => (t, n, r) => cc({
5453
+ }, Nc = (e) => (t, n, r) => Ec({
5196
5454
  name: t.descriptor.name,
5197
5455
  kind: "mutation",
5198
5456
  input: n,
@@ -5200,11 +5458,11 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
5200
5458
  ...e.interceptor ? { interceptor: e.interceptor } : {},
5201
5459
  ...e.recordMetric ? { recordMetric: e.recordMetric } : {},
5202
5460
  runExecutor: async () => {
5203
- await sc(t.descriptor, r.subject, n);
5204
- let i = [], a = await mc(async () => (i.length = 0, e.store.transactional(async (a) => {
5461
+ await Tc(t.descriptor, r.subject, n);
5462
+ let i = [], a = await Mc(async () => (i.length = 0, e.store.transactional(async (a) => {
5205
5463
  let o = e.undoCapture?.(a), s = o ? o.tx : a, c = e.buildContext(r, s, { afterCommit: (e) => {
5206
5464
  i.push(e);
5207
- } }), l = t.executor(n, c), u = j.isEffect(l) ? await e.runEffect(oc(l, r.subject), c.store) : await l;
5465
+ } }), l = t.executor(n, c), u = j.isEffect(l) ? await e.runEffect(wc(l, r.subject), c.store) : await l;
5208
5466
  return o && await o.persist(c.store, {
5209
5467
  tag: t.descriptor.name,
5210
5468
  subject: r.subject,
@@ -5214,39 +5472,44 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
5214
5472
  for (let e of i) await e();
5215
5473
  return a;
5216
5474
  }
5217
- }), gc = (e) => e && typeof e == "object" && "descriptor" in e ? e.descriptor : e, _c = (e) => typeof e == "object" && !!e && !Array.isArray(e) && "table" in e && "order" in e, vc = (e) => {
5475
+ }), Pc = (e) => e && typeof e == "object" && "descriptor" in e ? e.descriptor : e, Fc = (e) => typeof e == "object" && !!e && !Array.isArray(e) && "table" in e && "order" in e, Ic = (e) => {
5218
5476
  let t = e.descriptor.source;
5219
5477
  return t == null ? [] : typeof t == "string" ? [t] : [...t];
5220
- }, yc = (e) => (t, n) => (r) => {
5221
- let i = e.buildContext(r), a = async () => {
5222
- let i = e.buildContext(r), a = t.executor(n, i);
5223
- return j.isEffect(a) ? j.runPromise(e.provideEffect(oc(a, r.subject), i.store)) : gc(await Promise.resolve(a));
5224
- }, o = (n) => {
5225
- let i = gc(n);
5226
- return _c(i) ? e.finalize(i, r) : {
5478
+ }, Lc = (e, t) => (n) => () => {
5479
+ let r = e.descriptor.guards;
5480
+ return !r || r.length === 0 ? Promise.resolve(null) : j.runPromise(Te(n, r, t));
5481
+ }, Rc = (e) => (t, n) => (r) => {
5482
+ let i = e.buildContext(r), a = Lc(t, n)(r.subject), o = async () => {
5483
+ let i = await a();
5484
+ if (i) throw i;
5485
+ let o = e.buildContext(r), s = t.executor(n, o);
5486
+ return j.isEffect(s) ? j.runPromise(e.provideEffect(wc(s, r.subject), o.store)) : Pc(await Promise.resolve(s));
5487
+ }, s = (n) => {
5488
+ let i = Pc(n);
5489
+ return Fc(i) ? e.finalize(i, r) : {
5227
5490
  __voltroComputed: !0,
5228
5491
  value: i,
5229
- dependentTables: vc(t),
5492
+ dependentTables: Ic(t),
5230
5493
  tenantId: r.subject?.tenantId ?? null,
5231
- recompute: a
5494
+ recompute: o
5232
5495
  };
5233
- }, s = () => {
5234
- let a = t.executor(n, i);
5235
- return j.isEffect(a) ? e.provideEffect(oc(a, r.subject), i.store).pipe(j.map(o)) : a instanceof Promise ? j.promise(() => a).pipe(j.map(o)) : o(a);
5236
5496
  }, c = () => {
5497
+ let a = t.executor(n, i);
5498
+ return j.isEffect(a) ? e.provideEffect(wc(a, r.subject), i.store).pipe(j.map(s)) : a instanceof Promise ? j.promise(() => a).pipe(j.map(s)) : s(a);
5499
+ }, l = () => {
5237
5500
  let e = t.descriptor.guards;
5238
- return !e || e.length === 0 ? s() : we(r.subject, e, n).pipe(j.flatMap((e) => {
5501
+ return !e || e.length === 0 ? c() : Te(r.subject, e, n).pipe(j.flatMap((e) => {
5239
5502
  if (e) return j.fail(e);
5240
- let t = s();
5503
+ let t = c();
5241
5504
  return j.isEffect(t) ? t : j.succeed(t);
5242
5505
  }));
5243
5506
  };
5244
- if (!e.interceptor) return c();
5245
- let l = j.suspend(() => {
5246
- let e = c();
5507
+ if (!e.interceptor) return l();
5508
+ let u = j.suspend(() => {
5509
+ let e = l();
5247
5510
  return j.isEffect(e) ? e : j.succeed(e);
5248
5511
  });
5249
- return e.interceptor(l, {
5512
+ return e.interceptor(u, {
5250
5513
  tag: t.descriptor.name,
5251
5514
  kind: "query",
5252
5515
  input: n,
@@ -5254,7 +5517,7 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
5254
5517
  traceId: r.traceId,
5255
5518
  ...r.spanId === void 0 ? {} : { spanId: r.spanId }
5256
5519
  });
5257
- }, bc = (e) => (t, n, r) => cc({
5520
+ }, zc = (e) => (t, n, r) => Ec({
5258
5521
  name: t.descriptor.name,
5259
5522
  kind: "action",
5260
5523
  input: n,
@@ -5262,16 +5525,16 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
5262
5525
  ...e.interceptor ? { interceptor: e.interceptor } : {},
5263
5526
  ...e.recordMetric ? { recordMetric: e.recordMetric } : {},
5264
5527
  runExecutor: async () => {
5265
- await sc(t.descriptor, r.subject, n);
5528
+ await Tc(t.descriptor, r.subject, n);
5266
5529
  let i = e.buildContext(r), a = t.executor(n, i);
5267
- return j.isEffect(a) ? e.runEffect(oc(a, r.subject), i.store) : a;
5530
+ return j.isEffect(a) ? e.runEffect(wc(a, r.subject), i.store) : a;
5268
5531
  }
5269
- }), xc = (e) => e instanceof Date ? e.toISOString() : typeof e == "string" && e.length > 0 ? e : null, Sc = (e) => typeof e == "string" && e.length > 0 ? e : null, Cc = [
5532
+ }), Bc = (e) => e instanceof Date ? e.toISOString() : typeof e == "string" && e.length > 0 ? e : null, Vc = (e) => typeof e == "string" && e.length > 0 ? e : null, Hc = [
5270
5533
  "updatedAt",
5271
5534
  "createdAt",
5272
5535
  "updatedBy",
5273
5536
  "createdBy"
5274
- ], wc = (e) => Cc.some((t) => t in e), Tc = (e, t, n) => {
5537
+ ], Uc = (e) => Hc.some((t) => t in e), Wc = (e, t, n) => {
5275
5538
  let r = {
5276
5539
  table: t.table,
5277
5540
  id: t.id,
@@ -5286,14 +5549,14 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
5286
5549
  found: !1
5287
5550
  };
5288
5551
  let i = t.column === void 0 ? void 0 : e[t.column];
5289
- if (!wc(e)) return {
5552
+ if (!Uc(e)) return {
5290
5553
  ...r,
5291
5554
  value: i,
5292
5555
  lastWrite: null,
5293
5556
  attribution: "none",
5294
5557
  found: !0
5295
5558
  };
5296
- let a = Sc(e.updatedBy) ?? Sc(e.createdBy), o = xc(e.updatedAt) ?? xc(e.createdAt);
5559
+ let a = Vc(e.updatedBy) ?? Vc(e.createdBy), o = Bc(e.updatedAt) ?? Bc(e.createdAt);
5297
5560
  return {
5298
5561
  ...r,
5299
5562
  value: i,
@@ -5305,12 +5568,12 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
5305
5568
  attribution: "audit",
5306
5569
  found: !0
5307
5570
  };
5308
- }, Ec = (e, t) => {
5571
+ }, Gc = (e, t) => {
5309
5572
  let n = e.map((e) => {
5310
5573
  let n = e.newValue ?? e.value, r = t.column !== void 0 && n && typeof n == "object" ? n[t.column] : e.newValue ?? e.value;
5311
5574
  return {
5312
- actor: { id: Sc(e.actor) ?? Sc(e.changedBy) },
5313
- at: xc(e.at) ?? xc(e.changedAt),
5575
+ actor: { id: Vc(e.actor) ?? Vc(e.changedBy) },
5576
+ at: Bc(e.at) ?? Bc(e.changedAt),
5314
5577
  ...e.traceId === void 0 ? {} : { traceId: e.traceId },
5315
5578
  value: r
5316
5579
  };
@@ -5325,12 +5588,12 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
5325
5588
  history: n,
5326
5589
  found: n.length > 0
5327
5590
  };
5328
- }, Dc = (e) => {
5591
+ }, Kc = (e) => {
5329
5592
  let t = e.new?.id;
5330
5593
  if (typeof t == "string") return t;
5331
5594
  let n = e.old?.id;
5332
5595
  return typeof n == "string" ? n : void 0;
5333
- }, Oc = (e) => {
5596
+ }, qc = (e) => {
5334
5597
  let t = {};
5335
5598
  if (e.op === "insert") for (let [n, r] of Object.entries(e.new ?? {})) t[n] = {
5336
5599
  from: void 0,
@@ -5350,11 +5613,11 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
5350
5613
  return {
5351
5614
  table: e.table,
5352
5615
  op: e.op,
5353
- id: Dc(e),
5616
+ id: Kc(e),
5354
5617
  fields: t
5355
5618
  };
5356
- }, kc = (e) => {
5357
- let t = e.map(Oc);
5619
+ }, Jc = (e) => {
5620
+ let t = e.map(qc);
5358
5621
  return {
5359
5622
  rows: t,
5360
5623
  summary: {
@@ -5363,21 +5626,21 @@ var q = /* @__PURE__ */ new Map(), Mn = (e, t) => {
5363
5626
  deletes: t.filter((e) => e.op === "delete").length
5364
5627
  }
5365
5628
  };
5366
- }, Ac = class extends Error {
5629
+ }, Yc = class extends Error {
5367
5630
  constructor() {
5368
5631
  super("voltro:preview-rollback"), this.name = "PreviewRollback";
5369
5632
  }
5370
- }, jc = async (e, t) => {
5633
+ }, Xc = async (e, t) => {
5371
5634
  let n, r = !1;
5372
5635
  try {
5373
5636
  await e.transactional(async (e) => {
5374
- throw n = await t(e), r = !0, new Ac();
5637
+ throw n = await t(e), r = !0, new Yc();
5375
5638
  });
5376
5639
  } catch (e) {
5377
- if (!(e instanceof Ac)) throw e;
5640
+ if (!(e instanceof Yc)) throw e;
5378
5641
  }
5379
5642
  if (!r) throw Error("preview: handler did not complete");
5380
5643
  return n;
5381
- }, Mc = "framework-runtime";
5644
+ }, Zc = "framework-runtime";
5382
5645
  //#endregion
5383
- export { ci as API_KEYS_TABLE, Zo as AccessDenied, ec as AggregateError, Yo as AggregateMaintainer, $s as AggregateNotFound, tc as AggregateRegistry, Qs as AggregateStale, zs as AnalyticsCapabilityNotSupported, Rs as AnalyticsError, Bs as AnalyticsSink, ma as CircuitBreaker, fa as CircuitOpen, _r as DEFAULT_MAX_RPC_BODY_BYTES, na as DeleteBuilder, bn as Dispatcher, ya as EffectStore, Lt as InMemoryDataStore, Tt as IndexedMatcher, vt as LinearScanMatcher, Ve as MetricBoundaries, Us as NOOP_ANALYTICS_PROVIDER, Yi as NoRowFound, Xi as OptimisticLockError, Xo as REBAC_ADMIN_SCOPE, Mc as RUNTIME_NAME, ys as ReactionRateLimiter, $n as ReplicatedDataStore, ea as SelectBuilder, aa as StoreOperationFailed, Ot as SubscriptionRegistry, oa as TableValidationFailed, ia as TenantScopeViolation, Fo as TimelineRecorder, mo as UndoBoundaryError, go as UndoStack, ta as UpdateBuilder, Hi as VOLTRO_AUDIT_MIXIN_ID, Ui as VOLTRO_SOFT_DELETE_MIXIN_ID, Wi as VOLTRO_TENANT_MIXIN_ID, Pn as _connectionStreamCount, Fn as _resetConnectionSubjectsForTest, us as _voltroRebacTuplesTable, no as _voltroScheduleClaimsTable, to as _voltroScheduleRunsTable, ro as _voltroTracesTable, io as _voltroUndoLogTable, xs as _voltroWakeupsTable, zi as _voltroWorkflowEventDeliveriesTable, Ri as _voltroWorkflowEventsTable, bi as apiKeyManagementRoutes, ca as applyDefined, qo as applyDelta, vo as applyInverse, yo as applyInverses, ic as applySoftDeleteScope, rc as applyTenantScope, Do as applyUndoInvocation, ss as assertCan, Ys as attachAnalyticsMirror, yr as awaitServerListening, Dn as bindConnectionSubject, gr as bindMutation, cr as bindStream, sr as bindSubscription, ar as bindSubscriptionUntyped, Go as buildIvmState, kc as buildPreview, ps as buildRebacInterceptor, hs as buildRebacReadFilter, qn as buildSubjectKey, wr as buildTracingLayer, zr as cachedBackend, os as can, Fa as cancelWakeup, Vo as classifyShape, ns as clearResourcePolicies, i as clearRetentions, _a as clearSystemStoreHandle, Aa as compileCron, Ks as composeAnalytics, Gs as composeAnalyticsSinks, In as connectionSubjectsSnapshot, Ps as countRunningWorkflows, mn as counter, Qn as currentRoutingContext, Un as currentTraceContext, _i as dataStoreApiKeyStore, ei as dataStoreIdempotencyStore, ai as dataStoreKvStore, Xr as decryptField, Xs as defineAggregate, Ni as defineEventTrigger, gs as defineReaction, $o as defineResourcePolicy, ka as defineSchedule, Ls as defineSubscriber, Hr as deriveKey, Oc as diffChange, Ha as dueWakeups, as as effectiveRelations, Ji as emptySchemaRegistry, Yr as encryptField, Nr as envSecretsBackend, Bn as externalSpanFromTraceparent, zt as extractDbCause, Dt as fingerprintFor, Rn as formatTraceparent, _o as forwardChangeFromCdc, vi as frameworkApiKeyStrategy, hn as gauge, ui as generateApiKeyToken, On as getConnectionSubject, qr as getFieldCipher, es as getResourcePolicy, Lo as getTimelineRecorder, $ as groupKeyOf, gn as histogramMetric, Ec as historyProvenance, Br as httpSecretsBackend, ht as inspectWorkflow, Nn as interruptConnectionStreams, fo as invertChange, Zs as isAggregateDefinition, Bt as isForeignKeyViolation, Ds as isIdleNow, pr as isInfraError, ho as isSafeToApply, Da as isScheduleDefinition, Pi as isWorkflowEventTriggerDefinition, Wo as ivmValue, Tc as lastWriteProvenance, ts as listResourcePolicies, ee as listRetentions, ds as loadResourceTuples, ms as loadSubjectTuples, Ca as localityAwareSelector, bc as makeActionRunner, Ja as makeAdvisoryLockCoordinator, Ur as makeAesCipher, pi as makeApiKeyService, Vt as makeAppAccess, oi as makeAsyncKv, Mr as makeBufferingSpanProcessor, eo as makeCoordinatedScheduler, Sa as makeEffectStoreLayer, Bi as makeEventsFacade, Wr as makeFieldCipher, ra as makeFluentStore, Os as makeIdleGate, ki as makeLazyWorkflowFacade, hc as makeMutationRunner, Di as makePostCommitWorkflowFacade, ws as makeProcessAdapter, yc as makeQueryDescriptorProducer, ks as makeRouterActivity, Gi as makeSchemaRegistry, lo as makeUndoCapture, As as makeWakeGate, Ns as makeWakeProxyServer, Ei as makeWorkflowFacade, Oi as makeWorkflowFacadeWithCallerContext, Ai as makeWorkflowHandlers, ji as makeWorkflowLayers, Si as makeWorkflowRunHandle, Ia as markWakeupFired, Ko as materializeIvm, mi as memoryApiKeyStore, Ta as memoryReplicationAdapter, Kn as memoryRywPositionStore, ja as nextFiring, Ua as nextWakeup, Es as nodeProcessSupervisor, Ws as noopAnalytics, qs as noopAnalyticsSpec, si as noopKv, An as onBindConnectionSubject, zn as parseTraceparent, Wn as powerOfTwoSelector, jc as previewInRollback, Ga as pruneWakeups, rs as rebacPolicyGraph, ln as recordSample, pn as recordSubscriptionActive, dn as recordSubscriptionDelivery, zo as recordTimelineEvent, Mo as redactRow, Jn as redisRywPositionStore, Oo as redoUndoInvocation, Mn as registerConnectionStream, ae as registerRetention, Pa as registerWakeup, za as releaseWakeup, Gn as replicaHealth, Ir as resetSecretsBackend, wa as resolveCurrentRegion, Ht as resolveDependentTables, Jo as resolveRescan, Lr as resolveSecret, Rr as resolveSecretSync, Vr as resolveSecretsBackend, ko as resolveTimelineMode, se as retentionTtlMsFromEnv, Po as reverseEventOverRows, ls as revokedIds, va as runAsSystem, Fs as runOrchestratorTick, ac as runProvidedEffect, bs as runReaction, Is as runSingleNodeOrchestrator, Cs as runWakeLoop, Zn as runWithRoutingContext, Hn as runWithTraceContext, $a as scheduleCoordinated, Kr as setFieldCipher, Fr as setSecretsBackend, ga as setSystemStoreHandle, Ro as setTimelineRecorderForTest, li as sha256Hex, Ka as singleCoordinator, vn as snapshotMetrics, yn as snapshotMetricsSync, vr as startRpcServer, Xa as startScheduler, le as sweepRetention, po as synthesizeInverse, Vi as tracingHttpClientLayer, Mi as triggerWorkflow, Ra as tryClaimWakeup, kn as unbindConnectionSubject, ao as undoCaptureEnabled, To as undoLogExecutor, nc as useAggregate, Hs as useAnalytics, cs as visibleRows, Ss as wakeDueOnce, xi as workflowToRpc, co as wrapCaptureStore, da as wrapStoreWithMixinBehaviour };
5646
+ export { di as API_KEYS_TABLE, oa as AccessDenied, vc as AggregateError, Ds as AggregateMaintainer, _c as AggregateNotFound, yc as AggregateRegistry, gc as AggregateStale, rc as AnalyticsCapabilityNotSupported, nc as AnalyticsError, ic as AnalyticsSink, Xa as CircuitBreaker, Ja as CircuitOpen, br as DEFAULT_MAX_RPC_BODY_BYTES, Va as DeleteBuilder, Cn as Dispatcher, Di as EffectStore, Rt as InMemoryDataStore, Et as IndexedMatcher, yt as LinearScanMatcher, He as MetricBoundaries, sc as NOOP_ANALYTICS_PROVIDER, Pa as NoRowFound, X as OUTBOX_TABLE, Fa as OptimisticLockError, aa as REBAC_ADMIN_SCOPE, Zc as RUNTIME_NAME, Ls as ReactionRateLimiter, nr as ReplicatedDataStore, za as SelectBuilder, Ti as StoreOperationFailed, kt as SubscriptionRegistry, Ei as TableValidationFailed, wi as TenantScopeViolation, ps as TimelineRecorder, Ko as UndoBoundaryError, Jo as UndoStack, Ba as UpdateBuilder, Da as VOLTRO_AUDIT_MIXIN_ID, Oa as VOLTRO_SOFT_DELETE_MIXIN_ID, ka as VOLTRO_TENANT_MIXIN_ID, Ln as _connectionStreamCount, Rn as _resetConnectionSubjectsForTest, Os as _voltroRebacTuplesTable, Fo as _voltroScheduleClaimsTable, Po as _voltroScheduleRunsTable, Io as _voltroTracesTable, Lo as _voltroUndoLogTable, zs as _voltroWakeupsTable, Yi as _voltroWorkflowEventDeliveriesTable, Ji as _voltroWorkflowEventsTable, Ci as apiKeyManagementRoutes, Wa as applyDefined, Ts as applyDelta, Xo as applyInverse, Zo as applyInverses, Sc as applySoftDeleteScope, xc as applyTenantScope, as as applyUndoInvocation, ga as assertCan, pc as attachAnalyticsMirror, Sr as awaitServerListening, ra as backoffMs, An as bindConnectionSubject, yr as bindMutation, dr as bindStream, ur as bindSubscription, cr as bindSubscriptionUntyped, Cs as buildIvmState, Jc as buildPreview, js as buildRebacInterceptor, Ns as buildRebacReadFilter, Xn as buildSubjectKey, Dr as buildTracingLayer, Hr as cachedBackend, ha as can, mo as cancelWakeup, ys as classifyShape, da as clearResourcePolicies, i as clearRetentions, $a as clearSystemStoreHandle, co as compileCron, uc as composeAnalytics, lc as composeAnalyticsSinks, zn as connectionSubjectsSnapshot, Qs as countRunningWorkflows, gn as counter, tr as currentRoutingContext, Kn as currentTraceContext, bi as dataStoreApiKeyStore, ri as dataStoreIdempotencyStore, ci as dataStoreKvStore, $r as decryptField, mc as defineAggregate, Ui as defineEventTrigger, ea as defineOutboxHandler, Ps as defineReaction, ca as defineResourcePolicy, so as defineSchedule, tc as defineSubscriber, Gr as deriveKey, qc as diffChange, ia as drainOutbox, xo as dueWakeups, ma as effectiveRelations, Na as emptySchemaRegistry, Qr as encryptField, Ir as envSecretsBackend, Un as externalSpanFromTraceparent, Bt as extractDbCause, Ot as fingerprintFor, Vn as formatTraceparent, Yo as forwardChangeFromCdc, xi as frameworkApiKeyStrategy, _n as gauge, pi as generateApiKeyToken, jn as getConnectionSubject, Xr as getFieldCipher, la as getResourcePolicy, hs as getTimelineRecorder, Sa as getTupleSource, $ as groupKeyOf, vn as histogramMetric, Gc as historyProvenance, Ur as httpSecretsBackend, gt as inspectWorkflow, Ca as installPolicyGuardResolver, In as interruptConnectionStreams, Wo as invertChange, hc as isAggregateDefinition, Vt as isForeignKeyViolation, Gs as isIdleNow, gr as isInfraError, qo as isSafeToApply, ao as isScheduleDefinition, Wi as isWorkflowEventTriggerDefinition, Ss as ivmValue, Wc as lastWriteProvenance, ua as listResourcePolicies, ee as listRetentions, ks as loadResourceTuples, Ms as loadSubjectTuples, to as localityAwareSelector, zc as makeActionRunner, Do as makeAdvisoryLockCoordinator, Kr as makeAesCipher, gi as makeApiKeyService, Ht as makeAppAccess, li as makeAsyncKv, Fr as makeBufferingSpanProcessor, No as makeCoordinatedScheduler, Ta as makeDataLoader, Ai as makeEffectStoreLayer, Xi as makeEventsFacade, qr as makeFieldCipher, Ha as makeFluentStore, Ks as makeIdleGate, zi as makeLazyWorkflowFacade, Nc as makeMutationRunner, na as makeOutboxFacade, Li as makePostCommitWorkflowFacade, Hs as makeProcessAdapter, Rc as makeQueryDescriptorProducer, Lc as makeQueryReauthorizer, qs as makeRouterActivity, Aa as makeSchemaRegistry, Ho as makeUndoCapture, Js as makeWakeGate, Zs as makeWakeProxyServer, Ii as makeWorkflowFacade, Ri as makeWorkflowFacadeWithCallerContext, Bi as makeWorkflowHandlers, Vi as makeWorkflowLayers, Mi as makeWorkflowRunHandle, ho as markWakeupFired, ws as materializeIvm, _i as memoryApiKeyStore, ro as memoryReplicationAdapter, Yn as memoryRywPositionStore, lo as nextFiring, So as nextWakeup, Ws as nodeProcessSupervisor, cc as noopAnalytics, dc as noopAnalyticsSpec, ui as noopKv, Nn as onBindConnectionSubject, $i as outboxTable, Hn as parseTraceparent, qn as powerOfTwoSelector, Xc as previewInRollback, wo as pruneWakeups, fa as rebacPolicyGraph, fn as recordSample, U as recordSubscriptionActive, mn as recordSubscriptionDelivery, _s as recordTimelineEvent, us as redactRow, Zn as redisRywPositionStore, os as redoUndoInvocation, Fn as registerConnectionStream, ae as registerRetention, po as registerWakeup, vo as releaseWakeup, Jn as replicaHealth, zr as resetSecretsBackend, no as resolveCurrentRegion, Ut as resolveDependentTables, Es as resolveRescan, Br as resolveSecret, Vr as resolveSecretSync, Wr as resolveSecretsBackend, ss as resolveTimelineMode, se as retentionTtlMsFromEnv, fs as reverseEventOverRows, va as revokedIds, eo as runAsSystem, $s as runOrchestratorTick, Cc as runProvidedEffect, Rs as runReaction, ec as runSingleNodeOrchestrator, Vs as runWakeLoop, er as runWithRoutingContext, Gn as runWithTraceContext, Mo as scheduleCoordinated, Yr as setFieldCipher, Rr as setSecretsBackend, Qa as setSystemStoreHandle, gs as setTimelineRecorderForTest, xa as setTupleSource, fi as sha256Hex, To as singleCoordinator, bn as snapshotMetrics, xn as snapshotMetricsSync, xr as startRpcServer, ko as startScheduler, le as sweepRetention, Go as synthesizeInverse, Ea as tracingHttpClientLayer, Hi as triggerWorkflow, _o as tryClaimWakeup, Mn as unbindConnectionSubject, Ro as undoCaptureEnabled, rs as undoLogExecutor, bc as useAggregate, oc as useAnalytics, _a as visibleRows, Bs as wakeDueOnce, ji as workflowToRpc, Vo as wrapCaptureStore, qa as wrapStoreWithMixinBehaviour };