@voltro/runtime 0.3.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
- 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, isNull as x, json as S, listRetentions as C, lt as w, lte as ee, neq as te, or as T, queryFor as ne, registerRetention as re, requireTable as ie, retentionTtlMsFromEnv as ae, serializeArraysForWrite as oe, sweepRetention as se, table as E, text as D, timestamp as O, walkLeaves as ce } from "@voltro/database";
2
- import { createCipheriv as le, createDecipheriv as ue, createHash as de, randomBytes as fe, randomUUID as pe, scryptSync as me } from "node:crypto";
3
- import { EventEmitter as he } from "node:events";
4
- import { ADMIN_SCOPE as ge, ConnectionInfo as _e, SubjectService as ve, UndoConflict as ye, UndoForbidden as be, UndoNotFound as xe, WorkflowRunHandleSchema as Se, checkGuards as Ce, diffRows as we, effectiveScopes as Te, hasEffectiveScope as Ee, isIdKeyed as De, publishServerError as Oe, requireScope as ke, systemSubject as Ae, tsMs as je } from "@voltro/protocol";
5
- import { createLogger as Me } from "@voltro/logger";
6
- import { Cause as k, Clock as Ne, Context as Pe, Cron as A, Deferred as Fe, Duration as Ie, Effect as j, Either as Le, Exit as Re, Layer as M, ManagedRuntime as ze, Metric as N, MetricBoundaries as Be, MetricState as Ve, Option as P, Ref as F, Schema as I, Stream as L, Tracer as He } from "effect";
7
- import * as Ue from "node:http";
8
- import { createServer as We } from "node:http";
9
- import { HttpClient as Ge, HttpClientRequest as Ke, HttpLayerRouter as R, HttpServer as qe, HttpServerRequest as z, HttpServerResponse as B } from "@effect/platform";
10
- import { NodeContext as Je, NodeHttpServer as Ye, NodeRuntime as Xe } from "@effect/platform-node";
11
- import { Rpc as Ze, RpcSerialization as Qe, RpcServer as $e } from "@effect/rpc";
12
- import { defineRestRoute as et, dispatchSharedPath as tt, requireScope as nt } from "@voltro/protocol/rest";
13
- import { AsyncLocalStorage as rt } from "node:async_hooks";
14
- import { SpanKind as it, SpanStatusCode as at } from "@opentelemetry/api";
15
- import { Kv as ot, KvError as st, KvStore as ct, layerConnections as lt, layerMemory as ut, layerRedis as dt } from "@voltro/kv";
16
- import { apiKeyStrategy as ft } from "@voltro/protocol/apikey";
17
- import { getCurrentWorkflowExecutionId as pt, inspectWorkflow as mt } from "@voltro/workflow";
18
- import { ArrayFormatter as ht } from "effect/ParseResult";
19
- import { spawn as gt } from "node:child_process";
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
+ import { createCipheriv as de, createDecipheriv as fe, createHash as pe, randomBytes as me, randomUUID as he, scryptSync as ge } from "node:crypto";
3
+ import { EventEmitter as _e } from "node:events";
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 _t = 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,9 +59,9 @@ var _t = class {
59
59
  });
60
60
  return { perTable: e };
61
61
  }
62
- }, vt = (e) => {
62
+ }, bt = (e) => {
63
63
  let t = [];
64
- for (let n of ce(e)) n.conjunctive && n.path === void 0 && (n.op === "eq" && t.push({
64
+ for (let n of ue(e)) n.conjunctive && n.path === void 0 && (n.op === "eq" && t.push({
65
65
  column: n.column,
66
66
  values: [n.value]
67
67
  }), n.op === "in" && t.push({
@@ -69,18 +69,18 @@ var _t = class {
69
69
  values: n.value
70
70
  }));
71
71
  return t;
72
- }, yt = (e) => {
72
+ }, xt = (e) => {
73
73
  let t = [];
74
- for (let n of ce(e)) n.conjunctive && n.path === void 0 && (n.op === "gt" || n.op === "gte" || n.op === "lt" || n.op === "lte") && t.push({
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,
76
76
  op: n.op,
77
77
  threshold: n.value
78
78
  });
79
79
  return t;
80
- }, bt = (e, t) => {
81
- for (let n of ce(e)) if (n.conjunctive && n.path === void 0 && n.op === "eq" && n.column === t) return n.value;
80
+ }, St = (e, t) => {
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
- }, xt = (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 _t = class {
88
88
  n.push(`${typeof e}:${String(e)}`);
89
89
  }
90
90
  return n.join("|");
91
- }, St = (e, t) => e === null || t === null ? null : e === t ? 0 : typeof e == typeof t ? e > t ? 1 : -1 : null, Ct = (e, t, n) => {
92
- let r = St(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 _t = class {
97
97
  case "lt": return r < 0;
98
98
  case "lte": return r <= 0;
99
99
  }
100
- }, wt = 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 _t = 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 = vt(e.predicate), n = yt(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 = xt(r.fields, (t) => bt(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 _t = class {
252
252
  }
253
253
  }
254
254
  for (let [e, a] of i) {
255
- let i = xt(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 _t = 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) Ct(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 _t = 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 (!Ct(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 _t = class {
297
297
  }
298
298
  return i;
299
299
  }
300
- }, Tt = (e) => {
300
+ }, Dt = (e) => {
301
301
  if (e == null) return null;
302
- if (Array.isArray(e)) return e.map(Tt);
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] = Tt(t[e]);
305
+ for (let e of n) r[e] = Dt(t[e]);
306
306
  return r;
307
307
  }
308
308
  return e;
309
- }, Et = (e, t, n) => {
310
- let r = Tt({
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
- return de("sha256").update(JSON.stringify(r)).digest("hex").slice(0, 16);
316
- }, Dt = class {
315
+ return pe("sha256").update(JSON.stringify(r)).digest("hex").slice(0, 16);
316
+ }, kt = class {
317
317
  matcher;
318
318
  byFingerprint = /* @__PURE__ */ new Map();
319
319
  byClient = /* @__PURE__ */ new Map();
@@ -332,7 +332,7 @@ var _t = class {
332
332
  } catch {}
333
333
  }
334
334
  subscribe(e, t, n, r) {
335
- let i = Et(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 _t = class {
390
390
  });
391
391
  return e;
392
392
  }
393
- }, Ot = (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 _t = class {
400
400
  return r.direction === "asc" ? a : -a;
401
401
  }
402
402
  return 0;
403
- }), kt = (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 _t = class {
418
418
  ...e,
419
419
  [i]: c
420
420
  };
421
- }, At = (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 = jt(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 _t = class {
437
437
  }
438
438
  }
439
439
  return n;
440
- }, jt = (e, t, n = /* @__PURE__ */ new Map(), r = null) => {
441
- let i = r ?? V(e.predicate, n), a = [...t.values()].filter((t) => At(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 = Mt(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) => At(e.having, t, r));
446
+ return t.filter((t) => Mt(e.having, t, r));
447
447
  }
448
- let o = Ot(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 _t = class {
453
453
  for (let n of l) t[n] = e[n];
454
454
  return t;
455
455
  });
456
- }, Mt = (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 _t = 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] = Nt(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
- }, Nt = (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 _t = class {
519
519
  }
520
520
  default: throw Error(`computeAggregates: unknown op '${e.op}'`);
521
521
  }
522
- }, Pt = "\0", Ft = (e, t) => e === null ? t : `${e}${Pt}${t}`, It = 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;
@@ -529,13 +529,13 @@ var _t = class {
529
529
  return r.#e = t.tables, r.#t = t.emitter, r.#n = t.numericCounters, r;
530
530
  }
531
531
  constructor(e, t = null) {
532
- if (this.#r = t, this.#e = /* @__PURE__ */ new Map(), this.#t = new he(), this.#n = /* @__PURE__ */ new Map(), e) for (let [n, r] of Object.entries(e)) {
532
+ if (this.#r = t, this.#e = /* @__PURE__ */ new Map(), this.#t = new _e(), this.#n = /* @__PURE__ */ new Map(), e) for (let [n, r] of Object.entries(e)) {
533
533
  let e = /* @__PURE__ */ new Map();
534
534
  for (let t of r) {
535
535
  let n = t.id;
536
536
  n && e.set(n, t);
537
537
  }
538
- this.#e.set(Ft(t, n), e);
538
+ this.#e.set(Lt(t, n), e);
539
539
  }
540
540
  }
541
541
  withNamespace(t) {
@@ -546,11 +546,11 @@ var _t = class {
546
546
  }, t);
547
547
  }
548
548
  #a(e) {
549
- return Ft(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}${Pt}`;
553
- for (let [n, r] of this.#e) t === null ? n.includes(Pt) || 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,8 +558,8 @@ var _t = 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 = jt(e, this.#e.get(this.#a(e.table)) ?? /* @__PURE__ */ new Map(), this.#o());
562
- return _(e) ? n(t, e.eager, ie(e.table), (e) => this.query(e)) : t;
561
+ let t = Nt(e, this.#e.get(this.#a(e.table)) ?? /* @__PURE__ */ new Map(), this.#o());
562
+ return _(e) ? n(t, e.eager, oe(e.table), (e) => this.query(e)) : t;
563
563
  }
564
564
  async insert(e, t) {
565
565
  let n = t;
@@ -588,7 +588,7 @@ var _t = class {
588
588
  if (!i) return null;
589
589
  let a = i.get(t);
590
590
  if (!a) return null;
591
- let o = kt(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 _t = class {
688
688
  }
689
689
  }
690
690
  async transactional(e) {
691
- let t = new Lt(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 _t = class {
724
724
  allocateNumericId: (e) => this.#c(e)
725
725
  };
726
726
  }
727
- }, Lt = class {
727
+ }, zt = class {
728
728
  parent;
729
729
  overlay = /* @__PURE__ */ new Map();
730
730
  tombstones = /* @__PURE__ */ new Map();
@@ -754,8 +754,8 @@ var _t = 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 = jt(e, this.materialise(e.table), t);
758
- return _(e) ? n(r, e.eager, ie(e.table), (e) => this.query(e)) : r;
757
+ let t = this.buildTablesView(e), r = Nt(e, this.materialise(e.table), t);
758
+ return _(e) ? n(r, e.eager, oe(e.table), (e) => this.query(e)) : r;
759
759
  }
760
760
  async insert(e, t) {
761
761
  let n = t;
@@ -793,7 +793,7 @@ var _t = 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 = kt(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 _t = class {
894
894
  discard() {
895
895
  this.settled || (this.settled = !0, this.overlay.clear(), this.tombstones.clear(), this.events.length = 0);
896
896
  }
897
- }, Rt = (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 _t = 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
- }, zt = (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
- }, Bt = (e) => ({
912
- has: (t) => Ee(e, t),
913
- hasAny: (t) => t.some((t) => Ee(e, t)),
914
- require: (t) => ke(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 Te(e);
916
+ return De(e);
917
917
  }
918
- }), Vt = (e) => {
918
+ }), Ut = (e) => {
919
919
  let t = /* @__PURE__ */ new Set();
920
- return Ht(e, t), t;
921
- }, Ht = (e, t) => {
922
- if (t.add(e.table), e.eager !== void 0 && Ut(e.table, e.eager, t), e.setOp !== void 0) for (let n of e.setOp.queries) Ht(n, t);
923
- if (e.ctes !== void 0) for (let n of e.ctes) Ht(n.descriptor, t);
924
- }, Ut = (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 _t = 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 && Ut(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 && Ut(e, a.with, n);
935
+ n.add(e), a.with !== void 0 && Gt(e, a.with, n);
936
936
  }
937
937
  }
938
- }, Wt = (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-")), Gt = /* @__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 _t = 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
- }, Kt = (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 _t = 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"]), qt(i.tableName, o, n), o.with !== void 0 && Kt(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"]), qt(s.tableName, o, n), o.with !== void 0 && Kt(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
- }, qt = (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
- }, Jt = (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 (Wt(e)) {
987
- for (let n of Vt(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 && Kt(e.table, e.eager, t), t;
996
- }, Yt = (e) => {
997
- if (e.op === "insert" || e.op === "delete" || e.old === null || e.new === null) return Gt;
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
- }, Xt = (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 = Yt(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 = Be.exponential({
1009
+ }, en = He.exponential({
1010
1010
  start: .001,
1011
1011
  factor: 2,
1012
1012
  count: 16
1013
- }), Zt = N.counter("voltro_rpc_requests_total", { description: "Total RPC handler invocations." }), Qt = N.counter("voltro_rpc_errors_total", { description: "RPC handler invocations that errored." }), $t = N.histogram("voltro_rpc_duration_seconds", W, "RPC handler duration in seconds."), en = N.counter("voltro_http_requests_total", { description: "Total HTTP route invocations." }), tn = N.histogram("voltro_http_duration_seconds", W, "HTTP route duration in seconds."), nn = N.histogram("voltro_plugin_hook_duration_seconds", W, "Plugin interceptor duration in seconds."), rn = N.counter("voltro_plugin_hook_errors_total", { description: "Plugin interceptor invocations that errored." }), an = N.counter("voltro_subscription_deliveries_total", { description: "Total subscription deliveries (snapshot + delta)." }), on = N.histogram("voltro_subscription_delivery_seconds", W, "Subscription delivery produce→push latency in seconds."), sn = N.gauge("voltro_subscriptions_active", { description: "Currently-open subscriptions." }), cn = (e) => {
1014
- let t = e.durationMs / 1e3, n = e.kind === "rpc" ? j.zipRight(N.increment(Zt).pipe(j.tagMetrics("tag", e.tag), j.tagMetrics("status", e.status)), j.zipRight(N.update($t, t).pipe(j.tagMetrics("tag", e.tag)), e.status === "error" ? N.increment(Qt).pipe(j.tagMetrics("tag", e.tag)) : j.void)) : e.kind === "request" ? j.zipRight(N.increment(en).pipe(j.tagMetrics("route", e.tag), j.tagMetrics("status", e.status)), N.update(tn, t).pipe(j.tagMetrics("route", e.tag))) : j.zipRight(N.update(nn, t).pipe(j.tagMetrics("hook", e.tag)), e.status === "error" ? N.increment(rn).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
- }, ln = (e) => e.startsWith("subscription.") ? e.slice(13) : e, un = (e) => {
1017
- let t = ln(e.label);
1018
- j.runSync(j.zipRight(N.increment(an).pipe(j.tagMetrics("tag", t), j.tagMetrics("kind", e.kind)), N.update(on, e.durationMs / 1e3).pipe(j.tagMetrics("tag", t), j.tagMetrics("kind", e.kind))));
1019
- }, dn = /* @__PURE__ */ new Map(), fn = (e, t) => {
1020
- let n = ln(e), r = Math.max(0, (dn.get(n) ?? 0) + t);
1021
- r === 0 ? dn.delete(n) : dn.set(n, r), j.runSync(N.set(sn, r).pipe(j.tagMetrics("tag", n)));
1022
- }, pn = (e, t) => N.counter(e, t === void 0 ? {} : { description: t }), mn = (e, t) => N.gauge(e, t === void 0 ? {} : { description: t }), hn = (e, t = W, n) => N.histogram(e, t, n), gn = (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
- }, _n = N.snapshot.pipe(j.map((e) => e.map((e) => {
1027
- let t = e.metricKey.name, n = gn(e.metricKey.tags), r = P.getOrUndefined(e.metricKey.description), i = r === void 0 ? {} : { description: r }, a = e.metricState;
1028
- if (Ve.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 _t = class {
1037
1037
  sum: a.sum,
1038
1038
  count: a.count
1039
1039
  };
1040
- if (Ve.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 (Ve.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 _t = class {
1056
1056
  value: t.value
1057
1057
  }] : [])
1058
1058
  };
1059
- if (Ve.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 _t = class {
1074
1074
  type: "counter",
1075
1075
  value: Number(a.count)
1076
1076
  };
1077
- }))), vn = () => j.runSync(_n), G = Me({ scope: "voltro:dispatcher" }), yn = 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,63 +1084,95 @@ var _t = class {
1084
1084
  computedSubs = /* @__PURE__ */ new Map();
1085
1085
  computedByTable = /* @__PURE__ */ new Map();
1086
1086
  constructor(e) {
1087
- this.deps = e, this.matcher = new wt(), this.subscriptionRegistry = new Dt(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_${pe()}`, s = i ?? `subscription.${e.table}`, c = Vt(e), l = Jt(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
- }), fn(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), fn(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
- let i = `csub_${pe()}`, a = e.dependentTables, o = {
1164
+ let i = `csub_${he()}`, a = e.dependentTables, o = {
1134
1165
  id: i,
1135
1166
  recompute: e.recompute,
1136
1167
  tenantId: e.tenantId,
1137
1168
  emit: t,
1138
1169
  context: n,
1139
1170
  label: r ?? "subscription.computed",
1140
- lastJson: bn(e.value),
1171
+ tables: a,
1172
+ lastJson: wn(e.value),
1141
1173
  revision: 0
1142
1174
  };
1143
- this.computedSubs.set(i, o), fn(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 _t = class {
1160
1192
  durationMs: Date.now() - s,
1161
1193
  rowCount: 1
1162
1194
  }), () => {
1163
- this.computedSubs.delete(i), fn(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 _t = class {
1170
1202
  async recomputeComputed(e) {
1171
1203
  let t = Date.now();
1172
1204
  try {
1173
- let n = await e.recompute(), r = bn(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 _t = 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 _t = 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 _t = 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 (!Xt(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 (xn(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), De(o) && De(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: we(o, i)
1302
+ patch: Ee(o, i)
1260
1303
  }) : n.emit({
1261
1304
  _tag: "snapshot",
1262
1305
  revision: a,
@@ -1274,7 +1317,7 @@ var _t = 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 _t = 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
- }, bn = (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
- }, xn = (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
- }, Sn = (e) => typeof e == "object" && !!e && e.__voltroComputed === !0, Cn = 1440 * 60 * 1e3, wn = 3600 * 1e3, K = /* @__PURE__ */ new Map(), Tn = /* @__PURE__ */ new Set(), En = (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 Tn) try {
1350
+ for (let n of kn) try {
1308
1351
  n(e, t);
1309
1352
  } catch {}
1310
- }, Dn = (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
- }, On = (e) => {
1314
- K.delete(e);
1315
- }, kn = (e) => (Tn.add(e), () => {
1316
- Tn.delete(e);
1317
- }), An = setInterval(() => {
1318
- let e = Date.now() - Cn;
1319
- for (let [t, n] of K) n.touchedAt < e && K.delete(t);
1320
- }, wn);
1321
- typeof An == "object" && An && "unref" in An && An.unref();
1322
- var q = /* @__PURE__ */ new Map(), jn = (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));
1327
- };
1328
1356
  }, Mn = (e) => {
1329
- let t = q.get(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));
1370
+ };
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
- }, Nn = (e) => q.get(e)?.size ?? 0, Pn = () => {
1337
- K.clear(), q.clear();
1338
- }, Fn = () => [...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
- })), In = /^00-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/, Ln = (e) => `00-${e.traceId}-${e.spanId}-${e.sampled ? "01" : "00"}`, Rn = (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 = In.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(), jn = (e, t) => {
1349
1392
  spanId: r,
1350
1393
  sampled: (parseInt(i, 16) & 1) == 1
1351
1394
  };
1352
- }, zn = (e) => {
1353
- let t = Rn(e);
1354
- if (t !== null) return He.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
- }, Bn = new rt(), Vn = (e, t) => Bn.run(e, t), Hn = () => Bn.getStore(), Un = (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(), jn = (e, t) => {
1381
1424
  }));
1382
1425
  }
1383
1426
  };
1384
- }, Wn = (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(), jn = (e, t) => {
1415
1458
  }));
1416
1459
  }
1417
1460
  };
1418
- }, Gn = (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(), jn = (e, t) => {
1438
1481
  return n.size;
1439
1482
  }
1440
1483
  };
1441
- }, Kn = (e, t) => e === null ? t === void 0 ? "anon:bg" : `anon:${t}` : `subject:${e}`, qn = (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(), jn = (e, t) => {
1497
1540
  return o.size;
1498
1541
  }
1499
1542
  };
1500
- }, Jn = Me({ scope: "voltro:replication" }), Yn = new rt(), Xn = (e, t) => Yn.run(e, t), Zn = () => Yn.getStore(), Qn = 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(), jn = (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 ?? Gn({ now: this.now }), this.selector = e.replicaSelector ?? Un(), this.health = e.replicaHealth ?? Wn({ 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 = Yn.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(), jn = (e, t) => {
1577
1620
  waitMs: 0
1578
1621
  }), r;
1579
1622
  } catch (r) {
1580
- return this.health.reportFailure(i, String(r)), Jn.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(), jn = (e, t) => {
1646
1689
  fallbackReason: "wait-timeout"
1647
1690
  }), this.primary.query(e);
1648
1691
  }
1649
- await $n(10);
1692
+ await rr(10);
1650
1693
  }
1651
1694
  }
1652
1695
  async insert(e, t) {
@@ -1686,8 +1729,8 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
1686
1729
  return await this.stampPostWrite(), r;
1687
1730
  }
1688
1731
  async transactional(e) {
1689
- let t = await Xn({
1690
- subjectKey: Yn.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(), jn = (e, t) => {
1703
1746
  }
1704
1747
  async stampPostWrite() {
1705
1748
  if (this.replicas.length === 0) return;
1706
- let e = Yn.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(), jn = (e, t) => {
1711
1754
  expiresAt: this.now() + this.rywTtlMs
1712
1755
  });
1713
1756
  } catch (e) {
1714
- Jn.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
- }, $n = (e) => new Promise((t) => setTimeout(t, e)), er = (e, t, n) => ({
1763
+ }, rr = (e) => new Promise((t) => setTimeout(t, e)), ir = (e, t, n) => ({
1721
1764
  subject: e,
1722
- traceId: t?.traceId ?? pe(),
1765
+ traceId: t?.traceId ?? he(),
1723
1766
  ...t?.spanId === void 0 ? {} : { spanId: t.spanId },
1724
1767
  ...n === void 0 ? {} : { clientId: n }
1725
- }), tr = j.currentSpan.pipe(j.catchAll(() => j.succeed(void 0))), nr = (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
- }), rr = (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
- }, ir = (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) => (ur(`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: mr(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 = jn(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
- })), ar = (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) => (ur(`subscription.${r}`, n.traceId, e), {
1807
+ onFailure: (e) => (mr(`subscription.${r}`, n.traceId, e), {
1765
1808
  ok: !1,
1766
- error: mr(e)
1809
+ error: vr(e)
1767
1810
  }),
1768
1811
  onSuccess: (e) => ({
1769
1812
  ok: !0,
@@ -1779,21 +1822,21 @@ var q = /* @__PURE__ */ new Map(), jn = (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 = jn(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
- })), or = (e, t, n = "rpc.subscription", r, i) => L.unwrap(j.gen(function* () {
1788
- let a = yield* ve, o = yield* _e, s = yield* tr;
1789
- rr(s, n, a);
1790
- let c = er(a, s, o.clientId), l = Kn(a.id, o.clientId), u = Xn({ subjectKey: l }, () => Vn({
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) => (ur(`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: mr(e)
1839
+ error: vr(e)
1797
1840
  }),
1798
1841
  onSuccess: (e) => ({
1799
1842
  ok: !0,
@@ -1801,45 +1844,45 @@ var q = /* @__PURE__ */ new Map(), jn = (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 (Sn(f)) return ar(f, t, c, n);
1812
- let p = f, m = r?.(p);
1813
- return ir(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" } }))), sr = (e, t = "rpc.stream") => L.unwrap(j.gen(function* () {
1819
- let n = yield* ve, r = yield* _e, i = yield* tr;
1820
- rr(i, t, n);
1821
- let a = er(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* Fe.make(), t = jn(c, () => {
1826
- Fe.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(Fe.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" } }))), cr = Me({ scope: "voltro:rpc" }), lr = Me({ scope: "voltro:http" }), ur = (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 = Rt(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 ? cr.error(`${e} failed: ${l}`, c) : cr.warn(`${e} failed: ${l}`, c);
1838
- }, dr = /* @__PURE__ */ new Set(["SqlError", "ResultLengthMismatch"]), fr = (e) => typeof e == "object" && !!e && typeof e._tag == "string" && dr.has(e._tag), pr = (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
- }), mr = (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(), jn = (e, t) => {
1850
1893
  ...typeof i == "string" ? { _tag: i } : {},
1851
1894
  message: typeof a == "string" ? a : String(t)
1852
1895
  };
1853
- }, hr = (e, t, n = "rpc.mutation") => j.gen(function* () {
1854
- let r = yield* ve, i = yield* _e, a = yield* tr;
1855
- rr(a, n, r);
1856
- let o = er(r, a, i.clientId), s = Xn({ subjectKey: Kn(r.id, i.clientId) }, () => Vn({
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(() => ur(n, o.traceId, e))), j.catchIf(fr, () => j.die(pr(o.traceId))), j.annotateLogs(nr(o)));
1864
- }).pipe(j.withSpan(n, { attributes: { "framework.kind": "mutation" } })), gr = 8 * 1024 * 1024, _r = (e) => {
1865
- let t = e.port ?? 4e3, n = e.path ?? "/ws", r = We(), 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(), jn = (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 = zn(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(), jn = (e, t) => {
1968
2011
  query: a,
1969
2012
  headers: n,
1970
2013
  rawBody: o
1971
- }, c = yield* j.promise(() => tt(e, s));
1972
- c.status >= 500 && lr.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(), jn = (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(() => lr.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(), jn = (e, t) => {
1992
2035
  });
1993
2036
  l = M.mergeAll(...r);
1994
2037
  }
1995
- let u = $e.layerProtocolWebsocketRouter({ path: n }), d = $e.layer(e.group), f = $e.layer(e.group).pipe(M.provide($e.layerProtocolHttpRouter({ path: "/rpc" })), M.provide(Qe.layerJson), M.provide(e.httpHandlersLayer ?? e.handlersLayer)), p = M.scopedDiscard(j.gen(function* () {
1996
- let e = yield* $e.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
- On(t), Mn(t);
2042
+ Mn(t), In(t);
2000
2043
  }).pipe(j.forever));
2001
- })), m = M.mergeAll(d, p).pipe(M.provide(u), M.provide(Qe.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(), jn = (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) => qe.serve(x(e))))).pipe(M.provide(Ye.layer(() => r, { port: t })), M.provide(Je.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 = Me({ scope: "voltro:rpc" }), w = 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 Xe.runMain(w, { disableErrorReporting: !0 }), r;
2048
- }, vr = (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(), jn = (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
- }), yr = () => {
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
- }, br = () => {
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
- }, xr = 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(), jn = (e, t) => {
2082
2125
  otlpMetrics: r,
2083
2126
  nodeSdk: i
2084
2127
  };
2085
- }, Sr = (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(), jn = (e, t) => {
2105
2148
  }),
2106
2149
  inMemory: void 0
2107
2150
  };
2108
- }, Cr = async (e = {}) => {
2109
- let t = e.mode ?? yr(), n = e.metricsMode ?? br(), 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(), jn = (e, t) => {
2115
2158
  metricsMode: n,
2116
2159
  inMemoryMetricExporter: void 0
2117
2160
  };
2118
- let a = await xr(), { 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: _ } = Sr(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(), jn = (e, t) => {
2139
2182
  metricsMode: n,
2140
2183
  inMemoryMetricExporter: _
2141
2184
  };
2142
- }, wr = {
2143
- [it.INTERNAL]: "internal",
2144
- [it.SERVER]: "server",
2145
- [it.CLIENT]: "client",
2146
- [it.PRODUCER]: "producer",
2147
- [it.CONSUMER]: "consumer"
2148
- }, Tr = (e) => e[0] * 1e3 + e[1] / 1e6, Er = 512, Dr = 48, Or = (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 >= Dr) break;
2194
+ if (n >= jr) break;
2152
2195
  let i = e[r];
2153
- if (typeof i == "string") t[r] = i.length > Er ? `${i.slice(0, Er)}…` : 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(), jn = (e, t) => {
2159
2202
  } catch {
2160
2203
  e = String(i);
2161
2204
  }
2162
- t[r] = e.length > Er ? `${e.slice(0, Er)}…` : e;
2205
+ t[r] = e.length > Ar ? `${e.slice(0, Ar)}…` : e;
2163
2206
  }
2164
2207
  n++;
2165
2208
  }
2166
2209
  return t;
2167
- }, kr = {
2168
- [at.UNSET]: "unset",
2169
- [at.OK]: "ok",
2170
- [at.ERROR]: "error"
2171
- }, Ar = (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: Tr(e.time),
2175
- ...e.attributes ? { attributes: Or(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: wr[e.kind] ?? "internal",
2183
- attributes: Or(e.attributes),
2184
- startMs: Tr(e.startTime),
2185
- endMs: Tr(e.endTime),
2186
- durationMs: Tr(e.duration),
2187
- status: kr[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
- }, jr = (e) => ({
2234
+ }, Fr = (e) => ({
2192
2235
  onStart: () => {},
2193
2236
  onEnd: (t) => {
2194
2237
  try {
2195
- e(Ar(t));
2238
+ e(Pr(t));
2196
2239
  } catch {}
2197
2240
  },
2198
2241
  forceFlush: () => Promise.resolve(),
2199
2242
  shutdown: () => Promise.resolve()
2200
- }), Mr = { get: (e) => Promise.resolve(process.env[e]) }, Nr = Mr, Pr = (e) => {
2201
- Nr = e;
2202
- }, Fr = () => {
2203
- Nr = Mr;
2204
- }, Ir = async (e) => await Nr.get(e) ?? process.env[e], Lr = (e) => process.env[e], Rr = (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(), jn = (e, t) => {
2212
2255
  at: n()
2213
2256
  }), o;
2214
2257
  } };
2215
- }, zr = (e) => {
2258
+ }, Ur = (e) => {
2216
2259
  let t = {
2217
2260
  accept: "application/json",
2218
2261
  ...e.headers ?? {}
2219
2262
  };
2220
- if (e.perKey) return Rr({ 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,50 +2271,59 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2228
2271
  let t = (await a())[e];
2229
2272
  return typeof t == "string" ? t : void 0;
2230
2273
  } };
2231
- }, Br = (e) => e === void 0 || e === "env" || typeof e == "object" && e.kind === "env" ? Mr : e.kind === "custom" ? e.backend : e.kind === "http" ? zr(e) : Mr, Vr = (e) => /^[0-9a-f]{64}$/i.test(e) ? Buffer.from(e, "hex") : me(e, "voltro:field-encryption:v1", 32), Hr = (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) => {
2235
- let r = fe(12), i = le("aes-256-gcm", t, r), a = Buffer.concat([i.update(n, "utf8"), i.final()]), o = i.getAuthTag();
2278
+ let r = me(12), i = de("aes-256-gcm", t, r), a = Buffer.concat([i.update(n, "utf8"), i.final()]), o = i.getAuthTag();
2236
2279
  return `${e}${r.toString("base64")}:${o.toString("base64")}:${a.toString("base64")}`;
2237
2280
  },
2238
2281
  decrypt: (n) => {
2239
2282
  let [r, i, a] = n.slice(e.length).split(":");
2240
2283
  if (!r || !i || a === void 0) throw Error("field cipher: malformed ciphertext");
2241
- let o = ue("aes-256-gcm", t, Buffer.from(r, "base64"));
2284
+ let o = fe("aes-256-gcm", t, Buffer.from(r, "base64"));
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
- }, Ur = (e) => Hr(Vr(e)), Wr, Gr = (e) => {
2246
- Wr = e;
2247
- }, Kr = () => Wr, J = "_voltro_idempotency", qr = (e) => {
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}`);
2293
+ return t.encrypt(e);
2294
+ }, $r = (e) => {
2295
+ if (!x(e)) return e;
2296
+ let t = Xr();
2297
+ if (!t) throw Error(`decryptField: ${Zr}`);
2298
+ return t.decrypt(e);
2299
+ }, q = "_voltro_idempotency", ei = (e) => {
2248
2300
  if (e == null) return null;
2249
2301
  let t = typeof e == "string" ? JSON.parse(e) : e;
2250
2302
  return t && typeof t == "object" && "status" in t ? t : null;
2251
- }, Jr = (e) => ({
2303
+ }, ti = (e) => ({
2252
2304
  scope: e.scope,
2253
2305
  key: e.key,
2254
2306
  status: e.status === "completed" ? "completed" : "in_flight",
2255
- response: qr(e.response),
2256
- createdAt: je(e.createdAt)
2257
- }), Yr = async (e, n, r) => (await e.query({
2258
- table: J,
2307
+ response: ei(e.response),
2308
+ createdAt: Pe(e.createdAt)
2309
+ }), ni = async (e, n, r) => (await e.query({
2310
+ table: q,
2259
2311
  predicate: t(u("scope", n), u("key", r)),
2260
2312
  order: [],
2261
2313
  take: 1,
2262
2314
  skip: void 0,
2263
2315
  projection: void 0
2264
- }))[0] ?? null, Xr = (e) => ({
2316
+ }))[0] ?? null, ri = (e) => ({
2265
2317
  get: async (t, n) => {
2266
- let r = await Yr(e, t, n);
2267
- return r ? Jr(r) : null;
2318
+ let r = await ni(e, t, n);
2319
+ return r ? ti(r) : null;
2268
2320
  },
2269
2321
  claim: async (t, n, r, i) => {
2270
2322
  for (let a = 0; a < 2; a++) {
2271
2323
  let a = f({
2272
2324
  kind: "typeid",
2273
2325
  prefix: "idem"
2274
- }, J), o = await e.insertIgnore(J, {
2326
+ }, q), o = await e.insertIgnore(q, {
2275
2327
  id: a,
2276
2328
  scope: t,
2277
2329
  key: n,
@@ -2280,11 +2332,11 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2280
2332
  createdAt: new Date(r)
2281
2333
  }, { conflictColumns: ["scope", "key"] });
2282
2334
  if (o.id === a) return "claimed";
2283
- if (r - je(o.createdAt) < i) return Jr(o);
2284
- await e.delete(J, o.id);
2335
+ if (r - Pe(o.createdAt) < i) return ti(o);
2336
+ await e.delete(q, o.id);
2285
2337
  }
2286
- let a = await Yr(e, t, n);
2287
- return a ? Jr(a) : {
2338
+ let a = await ni(e, t, n);
2339
+ return a ? ti(a) : {
2288
2340
  scope: t,
2289
2341
  key: n,
2290
2342
  status: "in_flight",
@@ -2293,36 +2345,36 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2293
2345
  };
2294
2346
  },
2295
2347
  complete: async (t, n, r, i) => {
2296
- let a = await Yr(e, t, n);
2297
- a && await e.update(J, a.id, {
2348
+ let a = await ni(e, t, n);
2349
+ a && await e.update(q, a.id, {
2298
2350
  status: "completed",
2299
2351
  response: r
2300
2352
  });
2301
2353
  },
2302
2354
  release: async (t, n) => {
2303
- let r = await Yr(e, t, n);
2304
- r && await e.delete(J, r.id);
2355
+ let r = await ni(e, t, n);
2356
+ r && await e.delete(q, r.id);
2305
2357
  }
2306
- }), Y = "_voltro_kv", Zr = (e) => {
2358
+ }), J = "_voltro_kv", ii = (e) => {
2307
2359
  if (e == null) return null;
2308
2360
  if (e instanceof Date) return e.getTime();
2309
2361
  if (typeof e == "number") return e;
2310
2362
  let t = Date.parse(String(e));
2311
2363
  return Number.isNaN(t) ? null : t;
2312
- }, Qr = (e, t) => {
2313
- let n = Zr(e.expiresAt);
2364
+ }, ai = (e, t) => {
2365
+ let n = ii(e.expiresAt);
2314
2366
  return n !== null && n <= t;
2315
- }, $r = (e) => e === null ? null : JSON.parse(e), ei = async (e, t) => (await e.query({
2316
- table: Y,
2367
+ }, oi = (e) => e === null ? null : JSON.parse(e), si = async (e, t) => (await e.query({
2368
+ table: J,
2317
2369
  predicate: u("key", t),
2318
2370
  order: [],
2319
2371
  take: 1,
2320
2372
  skip: void 0,
2321
2373
  projection: void 0
2322
- }))[0] ?? null, ti = (e) => {
2374
+ }))[0] ?? null, ci = (e) => {
2323
2375
  let n = (e, t, n) => j.tryPromise({
2324
2376
  try: n,
2325
- catch: (n) => new st({
2377
+ catch: (n) => new lt({
2326
2378
  operation: e,
2327
2379
  key: t,
2328
2380
  cause: String(n)
@@ -2330,15 +2382,15 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2330
2382
  });
2331
2383
  return {
2332
2384
  get: (t) => n("get", t, async () => {
2333
- let n = await ei(e, t);
2334
- return n === null ? P.none() : Qr(n, Date.now()) ? (await e.delete(Y, n.id), P.none()) : P.some($r(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));
2335
2387
  }),
2336
2388
  set: (t, r, i) => n("set", t, async () => {
2337
2389
  let n = Date.now(), a = i?.ttlMs !== void 0 && i.ttlMs > 0 ? new Date(n + i.ttlMs) : null, o = f({
2338
2390
  kind: "typeid",
2339
2391
  prefix: "kv"
2340
- }, Y);
2341
- await e.upsert(Y, {
2392
+ }, J);
2393
+ await e.upsert(J, {
2342
2394
  id: o,
2343
2395
  key: t,
2344
2396
  value: JSON.stringify(r),
@@ -2354,36 +2406,36 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2354
2406
  });
2355
2407
  }),
2356
2408
  delete: (t) => n("delete", t, async () => {
2357
- let n = await ei(e, t);
2409
+ let n = await si(e, t);
2358
2410
  if (n === null) return !1;
2359
- let r = !Qr(n, Date.now());
2360
- return await e.delete(Y, n.id), r;
2411
+ let r = !ai(n, Date.now());
2412
+ return await e.delete(J, n.id), r;
2361
2413
  }),
2362
2414
  has: (t) => n("has", t, async () => {
2363
- let n = await ei(e, t);
2364
- return n === null ? !1 : Qr(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;
2365
2417
  }),
2366
2418
  list: (r) => n("list", "", async () => {
2367
- let n = Date.now(), i = T(x("expiresAt"), h("expiresAt", new Date(n))), a = r === "" ? i : t(o("key", r), i), s = await e.query({
2368
- table: Y,
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({
2420
+ table: J,
2369
2421
  predicate: a,
2370
2422
  order: [],
2371
2423
  take: void 0,
2372
2424
  skip: void 0,
2373
2425
  projection: void 0
2374
2426
  }), c = [];
2375
- for (let e of s) Qr(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);
2376
2428
  return c;
2377
2429
  }),
2378
2430
  clear: () => n("clear", "", async () => {
2379
- await e.deleteMany(Y, { where: {
2431
+ await e.deleteMany(J, { where: {
2380
2432
  column: "id",
2381
2433
  op: "isNotNull"
2382
2434
  } });
2383
2435
  })
2384
2436
  };
2385
- }, ni = async ({ store: e, env: t = process.env }) => {
2386
- let n = (t.KV_BACKEND ?? "database").toLowerCase(), r = n === "redis" ? "redis" : n === "memory" ? "memory" : "database", i = r === "redis" ? dt(t.KV_KEY_PREFIX ? { keyPrefix: t.KV_KEY_PREFIX } : {}).pipe(M.provide(lt)) : r === "memory" ? ut() : M.succeed(ct, ct.of(ti(e))), a = ze.make(ot.Default.pipe(M.provide(i))), o = await a.runPromise(ot);
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);
2387
2439
  return {
2388
2440
  kv: {
2389
2441
  get: (e) => a.runPromise(o.get(e)).then((e) => P.getOrUndefined(e)),
@@ -2398,7 +2450,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2398
2450
  backend: r,
2399
2451
  dispose: () => a.dispose()
2400
2452
  };
2401
- }, ri = {
2453
+ }, ui = {
2402
2454
  get: () => Promise.resolve(void 0),
2403
2455
  getOrElse: (e, t) => Promise.resolve(t()),
2404
2456
  set: () => Promise.resolve(),
@@ -2406,7 +2458,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2406
2458
  has: () => Promise.resolve(!1),
2407
2459
  list: () => Promise.resolve([]),
2408
2460
  clear: () => Promise.resolve()
2409
- }, ii = "_voltro_api_keys", ai = (e) => de("sha256").update(e, "utf8").digest("hex"), oi = (e = "voltro_") => `${e}${fe(30).toString("base64url")}`, si = (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) => ({
2410
2462
  id: e.id,
2411
2463
  name: e.name,
2412
2464
  keyPrefix: e.keyPrefix,
@@ -2416,17 +2468,17 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2416
2468
  expiresAt: e.expiresAt,
2417
2469
  revokedAt: e.revokedAt,
2418
2470
  createdAt: e.createdAt
2419
- }), ci = (e, t) => e.revokedAt === null && (e.expiresAt === null || e.expiresAt > t), li = (e, t = {}) => {
2471
+ }), hi = (e, t) => e.revokedAt === null && (e.expiresAt === null || e.expiresAt > t), gi = (e, t = {}) => {
2420
2472
  let n = t.prefix ?? "voltro_", r = async (t) => {
2421
- let r = oi(n), i = f({
2473
+ let r = pi(n), i = f({
2422
2474
  kind: "typeid",
2423
2475
  prefix: "apikey"
2424
- }, ii), 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;
2425
2477
  return await e.insert({
2426
2478
  id: i,
2427
2479
  tenantId: t.tenantId ?? null,
2428
2480
  name: t.name,
2429
- hashedKey: ai(r),
2481
+ hashedKey: fi(r),
2430
2482
  keyPrefix: r.slice(0, n.length + 6),
2431
2483
  scopes: a,
2432
2484
  lastUsedAt: null,
@@ -2444,7 +2496,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2444
2496
  };
2445
2497
  }, i = async (t, n = Date.now()) => {
2446
2498
  let r = await e.findByHash(t);
2447
- return !r || !ci(r, n) ? null : (await e.patch(r.id, { lastUsedAt: n }), {
2499
+ return !r || !hi(r, n) ? null : (await e.patch(r.id, { lastUsedAt: n }), {
2448
2500
  id: r.id,
2449
2501
  tenantId: r.tenantId ?? "",
2450
2502
  scopes: r.scopes ?? []
@@ -2453,7 +2505,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2453
2505
  return {
2454
2506
  issue: r,
2455
2507
  resolveByHash: i,
2456
- verify: (e, t) => i(ai(e), t),
2508
+ verify: (e, t) => i(fi(e), t),
2457
2509
  revoke: async (t, n = Date.now()) => await e.findById(t) ? (await e.patch(t, { revokedAt: n }), !0) : !1,
2458
2510
  rotate: async (t, n = Date.now()) => {
2459
2511
  let i = await e.findById(t);
@@ -2464,9 +2516,9 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2464
2516
  createdBy: i.createdBy
2465
2517
  })) : null;
2466
2518
  },
2467
- list: async (t) => (await e.listByTenant(t)).map(si)
2519
+ list: async (t) => (await e.listByTenant(t)).map(mi)
2468
2520
  };
2469
- }, ui = () => {
2521
+ }, _i = () => {
2470
2522
  let e = /* @__PURE__ */ new Map();
2471
2523
  return {
2472
2524
  insert: async (t) => {
@@ -2483,21 +2535,21 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2483
2535
  });
2484
2536
  }
2485
2537
  };
2486
- }, di = (e) => e == null ? null : e instanceof Date ? e.getTime() : typeof e == "number" ? e : typeof e == "string" ? new Date(e).getTime() : null, fi = (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) => ({
2487
2539
  id: String(e.id),
2488
2540
  tenantId: e.tenantId ?? null,
2489
2541
  name: String(e.name),
2490
2542
  hashedKey: String(e.hashedKey),
2491
2543
  keyPrefix: String(e.keyPrefix),
2492
2544
  scopes: e.scopes ?? null,
2493
- lastUsedAt: di(e.lastUsedAt),
2494
- expiresAt: di(e.expiresAt),
2495
- revokedAt: di(e.revokedAt),
2545
+ lastUsedAt: vi(e.lastUsedAt),
2546
+ expiresAt: vi(e.expiresAt),
2547
+ revokedAt: vi(e.revokedAt),
2496
2548
  createdBy: e.createdBy ?? null,
2497
- createdAt: di(e.createdAt) ?? 0
2498
- }), pi = (e) => {
2549
+ createdAt: vi(e.createdAt) ?? 0
2550
+ }), bi = (e) => {
2499
2551
  let t = async (t) => await e.query({
2500
- table: ii,
2552
+ table: di,
2501
2553
  predicate: t,
2502
2554
  order: [],
2503
2555
  take: void 0,
@@ -2515,32 +2567,32 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2515
2567
  };
2516
2568
  return {
2517
2569
  insert: async (t) => {
2518
- await e.insert(ii, n(t));
2570
+ await e.insert(di, n(t));
2519
2571
  },
2520
2572
  findByHash: async (e) => {
2521
2573
  let n = await t(u("hashedKey", e));
2522
- return n[0] ? fi(n[0]) : null;
2574
+ return n[0] ? yi(n[0]) : null;
2523
2575
  },
2524
2576
  findById: async (e) => {
2525
2577
  let n = await t(u("id", e));
2526
- return n[0] ? fi(n[0]) : null;
2578
+ return n[0] ? yi(n[0]) : null;
2527
2579
  },
2528
- listByTenant: async (e) => (await t(e === null ? void 0 : u("tenantId", e))).map(fi).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),
2529
2581
  patch: async (t, r) => {
2530
- await e.update(ii, t, n(r));
2582
+ await e.update(di, t, n(r));
2531
2583
  }
2532
2584
  };
2533
- }, mi = (e, t = {}) => ft({
2585
+ }, xi = (e, t = {}) => mt({
2534
2586
  id: "voltro-apikey",
2535
2587
  ...t.prefix ? { prefix: t.prefix } : {},
2536
2588
  resolveKey: (t) => e.resolveByHash(t)
2537
- }), hi = (e) => {
2589
+ }), Si = (e) => {
2538
2590
  let t = e.subject;
2539
2591
  return {
2540
2592
  id: t.id ?? null,
2541
2593
  tenantId: t.tenantId ?? null
2542
2594
  };
2543
- }, gi = (e, t = "/v1/api-keys") => {
2595
+ }, Ci = (e, t = "/v1/api-keys") => {
2544
2596
  let n = I.Struct({
2545
2597
  id: I.String,
2546
2598
  name: I.String,
@@ -2553,11 +2605,11 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2553
2605
  createdAt: I.Number
2554
2606
  });
2555
2607
  return [
2556
- et({
2608
+ nt({
2557
2609
  method: "POST",
2558
2610
  path: `${t}/issue`,
2559
2611
  summary: "Issue an API key (the token is returned ONCE).",
2560
- guards: [nt(ge)],
2612
+ guards: [it(ve)],
2561
2613
  input: I.Struct({ body: I.Struct({
2562
2614
  name: I.String,
2563
2615
  scopes: I.optional(I.Array(I.String)),
@@ -2569,7 +2621,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2569
2621
  keyPrefix: I.String
2570
2622
  }),
2571
2623
  handler: async (t, n) => {
2572
- let r = t.body, i = hi(n), a = await e.issue({
2624
+ let r = t.body, i = Si(n), a = await e.issue({
2573
2625
  tenantId: i.tenantId,
2574
2626
  name: r.name,
2575
2627
  ...r.scopes ? { scopes: r.scopes } : {},
@@ -2583,41 +2635,68 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2583
2635
  };
2584
2636
  }
2585
2637
  }),
2586
- et({
2638
+ nt({
2587
2639
  method: "GET",
2588
2640
  path: t,
2589
2641
  summary: "List the caller tenant's API keys (no secrets).",
2590
- guards: [nt(ge)],
2642
+ guards: [it(ve)],
2591
2643
  input: I.Struct({}),
2592
2644
  output: I.Struct({ keys: I.Array(n) }),
2593
- handler: async (t, n) => ({ keys: [...await e.list(hi(n).tenantId)] })
2645
+ handler: async (t, n) => ({ keys: [...await e.list(Si(n).tenantId)] })
2594
2646
  }),
2595
- et({
2647
+ nt({
2596
2648
  method: "POST",
2597
2649
  path: `${t}/revoke`,
2598
2650
  summary: "Revoke an API key by id.",
2599
- guards: [nt(ge)],
2651
+ guards: [it(ve)],
2600
2652
  input: I.Struct({ body: I.Struct({ id: I.String }) }),
2601
2653
  output: I.Struct({ ok: I.Boolean }),
2602
2654
  handler: async (t, n) => ({ ok: await e.revoke(t.body.id) })
2603
2655
  })
2604
2656
  ];
2605
- }, _i = (e) => Ze.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, {
2606
2685
  payload: e.payloadSchema,
2607
- success: Se,
2686
+ success: we,
2608
2687
  error: e.errorSchema
2609
- }), X = (e, t) => ({
2688
+ }), Y = (e, t) => ({
2610
2689
  id: t,
2611
2690
  workflowName: e,
2612
2691
  executionId: t,
2613
2692
  status: "running"
2614
- }), vi = X, yi = (e) => {
2693
+ }), Mi = Y, Ni = (e) => {
2615
2694
  let t = k.failureOption(e), n = t._tag === "Some" ? t.value : k.squash(e);
2616
2695
  return {
2617
2696
  tag: n && typeof n == "object" && "_tag" in n ? String(n._tag) : null,
2618
2697
  message: n?.message ?? String(n)
2619
2698
  };
2620
- }, bi = (e, t, n) => {
2699
+ }, Pi = (e, t, n) => {
2621
2700
  if (n === void 0) return {
2622
2701
  id: t,
2623
2702
  workflowName: e,
@@ -2632,7 +2711,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2632
2711
  };
2633
2712
  if (typeof n == "object" && n && n._tag === "Complete") {
2634
2713
  let r = n.exit;
2635
- return Re.isSuccess(r) ? {
2714
+ return Be.isSuccess(r) ? {
2636
2715
  id: t,
2637
2716
  workflowName: e,
2638
2717
  executionId: t,
@@ -2643,7 +2722,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2643
2722
  workflowName: e,
2644
2723
  executionId: t,
2645
2724
  status: "failed",
2646
- error: yi(r.cause)
2725
+ error: Ni(r.cause)
2647
2726
  };
2648
2727
  }
2649
2728
  return {
@@ -2652,17 +2731,17 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2652
2731
  executionId: t,
2653
2732
  status: "running"
2654
2733
  };
2655
- }, xi = (e) => new Promise((t) => setTimeout(t, e)), Si = (e) => {
2734
+ }, Fi = (e) => new Promise((t) => setTimeout(t, e)), Ii = (e) => {
2656
2735
  let t = new Map(e.workflows.map((e) => [e.definition.name, e.definition])), n = (e) => {
2657
2736
  let n = t.get(e);
2658
2737
  if (!n) throw Error(`Unknown workflow: ${e}`);
2659
2738
  return n;
2660
2739
  }, r = async (t, r) => {
2661
2740
  let i = n(t);
2662
- return bi(t, r, await e.runEffect(i.poll(r)));
2663
- }, i = async () => e.runEffect(pt()), 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) => {
2664
2743
  let a = n(t), o;
2665
- 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 })));
2666
2745
  };
2667
2746
  return {
2668
2747
  start: a,
@@ -2700,7 +2779,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2700
2779
  let e = await r(i, a);
2701
2780
  if (e.status === "succeeded" || e.status === "failed" || e.status === "cancelled") return e;
2702
2781
  if (o?.timeoutMs !== void 0 && Date.now() - s >= o.timeoutMs) throw Error(`Timed out waiting for workflow '${i}' run '${a}'`);
2703
- await xi(c);
2782
+ await Fi(c);
2704
2783
  }
2705
2784
  }),
2706
2785
  cancel: async (t, r) => {
@@ -2738,22 +2817,22 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2738
2817
  return e.retry(t, n);
2739
2818
  }
2740
2819
  };
2741
- }, Ci = (e, t) => ({
2820
+ }, Li = (e, t) => ({
2742
2821
  ...e,
2743
2822
  start: async (n, r, i) => {
2744
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.");
2745
2824
  let a = await e.executionId(n, r);
2746
- return t(() => e.start(n, r)), X(n, a);
2825
+ return t(() => e.start(n, r)), Y(n, a);
2747
2826
  },
2748
2827
  child: async (n, r, i) => {
2749
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.");
2750
2829
  let a = await e.executionId(n, r);
2751
- return t(() => e.child(n, r, i)), X(n, a);
2830
+ return t(() => e.child(n, r, i)), Y(n, a);
2752
2831
  },
2753
2832
  run: async () => {
2754
2833
  throw Error("ctx.workflows.run(...) is not allowed inside a mutation transaction; use ctx.workflows.start(...) so the workflow starts after commit.");
2755
2834
  }
2756
- }), wi = (e, t) => ({
2835
+ }), Ri = (e, t) => ({
2757
2836
  ...e,
2758
2837
  start: (n, r, i) => e.start(n, r, {
2759
2838
  ...i,
@@ -2767,7 +2846,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2767
2846
  ...i,
2768
2847
  callerContext: t
2769
2848
  })
2770
- }), Ti = (e) => {
2849
+ }), zi = (e) => {
2771
2850
  let t = () => {
2772
2851
  let t = e();
2773
2852
  if (!t) throw Error("Workflow runtime is not ready yet");
@@ -2788,55 +2867,55 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2788
2867
  listRuns: ((e) => t().listRuns(e)),
2789
2868
  retry: (e, n) => t().retry(e, n)
2790
2869
  };
2791
- }, Ei = (e, t) => {
2870
+ }, Bi = (e, t) => {
2792
2871
  let n = {};
2793
- 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" } }));
2794
2873
  return n;
2795
- }, Di = (e, t, n) => e.map((e) => e.definition.toLayer(((r, i) => {
2874
+ }, Vi = (e, t, n) => e.map((e) => e.definition.toLayer(((r, i) => {
2796
2875
  let a = t.resolveStartContext?.(e.definition.name, i);
2797
2876
  return (a === void 0 ? j.succeed(void 0) : j.promise(() => Promise.resolve(a))).pipe(j.flatMap((a) => {
2798
- let o = e.buildExecute(t.buildContext(a, {
2877
+ let o = t.buildContext(a, {
2799
2878
  workflowName: e.definition.name,
2800
2879
  executionId: i,
2801
2880
  parentExecutionId: a?.parentExecutionId ?? null,
2802
2881
  parentClosePolicy: a?.parentClosePolicy ?? null
2803
- }));
2804
- 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));
2805
2884
  }));
2806
- }))), Oi = (e) => ({
2885
+ }))), Hi = (e) => ({
2807
2886
  _tag: "workflowEventTrigger",
2808
2887
  ...e
2809
- }), ki = Oi, Ai = (e) => typeof e == "object" && !!e && e._tag === "workflowEventTrigger", ji = () => {
2888
+ }), Ui = Hi, Wi = (e) => typeof e == "object" && !!e && e._tag === "workflowEventTrigger", Gi = () => {
2810
2889
  let e = globalThis.crypto;
2811
2890
  return typeof e?.randomUUID == "function" ? e.randomUUID() : `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`;
2812
- }, Mi = (e) => `${e}_${ji()}`, Ni = (e) => e.id ?? `${e.event}->${e.workflow}`, Pi = E("_voltro_workflow_events", {
2891
+ }, Ki = (e) => `${e}_${Gi()}`, qi = (e) => e.id ?? `${e.event}->${e.workflow}`, Ji = T("_voltro_workflow_events", {
2813
2892
  id: v({ prefix: "wfe" }),
2814
- name: D(),
2815
- payload: S(),
2816
- source: D(),
2817
- subject: S().nullable(),
2818
- traceId: D().nullable(),
2819
- occurredAt: O().default("now")
2820
- }).index(["name"]).index(["source"]).index(["occurredAt"]).reactive(), Fi = E("_voltro_workflow_event_deliveries", {
2893
+ name: E(),
2894
+ payload: C(),
2895
+ source: E(),
2896
+ subject: C().nullable(),
2897
+ traceId: E().nullable(),
2898
+ occurredAt: D().default("now")
2899
+ }).index(["name"]).index(["source"]).index(["occurredAt"]).reactive(), Yi = T("_voltro_workflow_event_deliveries", {
2821
2900
  id: v({ prefix: "wfed" }),
2822
- eventId: D(),
2823
- eventName: D(),
2824
- triggerId: D(),
2825
- workflowName: D(),
2826
- executionId: D().nullable(),
2827
- status: D().oneOf([
2901
+ eventId: E(),
2902
+ eventName: E(),
2903
+ triggerId: E(),
2904
+ workflowName: E(),
2905
+ executionId: E().nullable(),
2906
+ status: E().oneOf([
2828
2907
  "starting",
2829
2908
  "started",
2830
2909
  "skipped",
2831
2910
  "failed"
2832
2911
  ]).default("starting"),
2833
- idempotencyKey: D().unique(),
2912
+ idempotencyKey: E().unique(),
2834
2913
  skipped: r().default(!1),
2835
- errorMessage: D().nullable(),
2836
- createdAt: O().default("now"),
2837
- completedAt: O().nullable()
2838
- }).index(["eventId"]).index(["eventName"]).index(["triggerId"]).index(["workflowName"]).index(["status"]).reactive(), Ii = (e) => {
2839
- let t = e.makeId ?? Mi, n = /* @__PURE__ */ new Map();
2914
+ errorMessage: E().nullable(),
2915
+ createdAt: D().default("now"),
2916
+ completedAt: D().nullable()
2917
+ }).index(["eventId"]).index(["eventName"]).index(["triggerId"]).index(["workflowName"]).index(["status"]).reactive(), Xi = (e) => {
2918
+ let t = e.makeId ?? Ki, n = /* @__PURE__ */ new Map();
2840
2919
  for (let t of e.triggers) {
2841
2920
  let e = n.get(t.event);
2842
2921
  e ? e.push(t) : n.set(t.event, [t]);
@@ -2877,7 +2956,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2877
2956
  });
2878
2957
  let p = o(n), m = [];
2879
2958
  for (let o of p) {
2880
- let s = Ni(o), l = o.workflow, d;
2959
+ let s = qi(o), l = o.workflow, d;
2881
2960
  try {
2882
2961
  let p = o.idempotencyKey?.(f) ?? `${c}:${s}`;
2883
2962
  if (o.filter && !await o.filter(f)) {
@@ -2980,11 +3059,266 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
2980
3059
  triggered: m
2981
3060
  };
2982
3061
  } };
2983
- }, Li = M.effect(Ge.HttpClient, j.map(Ge.HttpClient, (e) => e.pipe(Ge.mapRequestEffect((e) => j.currentSpan.pipe(j.map((t) => e.headers.traceparent === void 0 ? Ke.setHeader(e, "traceparent", Ln({
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({
2984
3318
  traceId: t.traceId,
2985
3319
  spanId: t.spanId,
2986
3320
  sampled: t.sampled
2987
- })) : e), j.catchAll(() => j.succeed(e))))))), Ri = "voltro/audit", zi = "voltro/softDelete", Bi = "voltro/tenant", Vi = (e) => {
3321
+ })) : e), j.catchAll(() => j.succeed(e))))))), Da = "voltro/audit", Oa = "voltro/softDelete", ka = "voltro/tenant", Aa = (e) => {
2988
3322
  let t = /* @__PURE__ */ new Map();
2989
3323
  for (let n of e) {
2990
3324
  let e = /* @__PURE__ */ new Set();
@@ -3027,48 +3361,49 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3027
3361
  return !1;
3028
3362
  },
3029
3363
  idScheme: (e) => t.get(e)?.idScheme,
3030
- defaultFactories: (e) => t.get(e)?.defaultFactories ?? Hi,
3031
- computedFields: (e) => t.get(e)?.computedFields ?? Ui,
3364
+ defaultFactories: (e) => t.get(e)?.defaultFactories ?? ja,
3365
+ computedFields: (e) => t.get(e)?.computedFields ?? Ma,
3032
3366
  insertSchema: (e) => t.get(e)?.insertSchema,
3033
3367
  validatePatchSchema: (e) => t.get(e)?.validatePatchSchema
3034
3368
  };
3035
- }, Hi = /* @__PURE__ */ new Map(), Ui = /* @__PURE__ */ new Map(), Wi = Vi([]), Gi = class extends Error {
3036
- table;
3037
- _tag = "NoRowFound";
3038
- constructor(e) {
3039
- 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`;
3040
3375
  }
3041
- }, Ki = class extends Error {
3042
- table;
3043
- expected;
3044
- _tag = "OptimisticLockError";
3045
- constructor(e, t) {
3046
- 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}`;
3047
3382
  }
3048
- }, qi = (e) => typeof e == "object" && !!e && ("and" in e || "or" in e || "not" in e || "op" in e || "subquery" in e), Ji = (e) => {
3049
- if (e.length === 1 && qi(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];
3050
3385
  let t = e[0];
3051
3386
  if (e.length === 2) return u(t, e[1]);
3052
3387
  let n = e[1], r = e[2];
3053
3388
  switch (n) {
3054
3389
  case "=": return u(t, r);
3055
3390
  case "!=":
3056
- case "<>": return te(t, r);
3391
+ case "<>": return w(t, r);
3057
3392
  case ">": return h(t, r);
3058
3393
  case ">=": return g(t, r);
3059
- case "<": return w(t, r);
3060
- case "<=": return ee(t, r);
3394
+ case "<": return te(t, r);
3395
+ case "<=": return ne(t, r);
3061
3396
  case "in": return y(t, r);
3062
3397
  case "like":
3063
3398
  case "contains":
3064
3399
  case "fts": return o(t, r);
3065
3400
  default: return u(t, r);
3066
3401
  }
3067
- }, Yi = (e) => {
3402
+ }, Ra = (e) => {
3068
3403
  let t = m(e);
3069
3404
  if (t === void 0) throw Error(`unknown table '${e}' — is it declared with table()?`);
3070
- return ne(t);
3071
- }, Xi = class e {
3405
+ return ie(t);
3406
+ }, za = class e {
3072
3407
  backend;
3073
3408
  scope;
3074
3409
  table;
@@ -3082,7 +3417,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3082
3417
  return new e(this.backend, this.scope, this.table, t, this.skipTenant, this.skipSoftDelete);
3083
3418
  }
3084
3419
  where(...e) {
3085
- return this.clone(this.query.where(Ji(e)));
3420
+ return this.clone(this.query.where(La(e)));
3086
3421
  }
3087
3422
  orderBy(e, t = "asc") {
3088
3423
  return this.clone(this.query.orderBy(e, t));
@@ -3116,7 +3451,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3116
3451
  }
3117
3452
  scopedQuery() {
3118
3453
  let e = this.query, { subject: t, schemaRegistry: n } = this.scope;
3119
- return !this.skipTenant && n.hasTenant(this.table) && t.tenantId != null && (e = e.where(u("tenantId", t.tenantId))), !this.skipSoftDelete && n.hasSoftDelete(this.table) && (e = e.where(x("deletedAt"))), e;
3454
+ return !this.skipTenant && n.hasTenant(this.table) && t.tenantId != null && (e = e.where(u("tenantId", t.tenantId))), !this.skipSoftDelete && n.hasSoftDelete(this.table) && (e = e.where(S("deletedAt"))), e;
3120
3455
  }
3121
3456
  async all() {
3122
3457
  return this.backend.query(this.scopedQuery().descriptor);
@@ -3128,9 +3463,16 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3128
3463
  return this.maybeOne();
3129
3464
  }
3130
3465
  async one() {
3131
- let e = await this.maybeOne();
3132
- if (e === null) throw new Gi(this.table);
3133
- 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;
3134
3476
  }
3135
3477
  async count() {
3136
3478
  let e = (await this.backend.query(this.scopedQuery().count().descriptor))[0]?.count;
@@ -3142,7 +3484,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3142
3484
  get descriptor() {
3143
3485
  return this.scopedQuery().descriptor;
3144
3486
  }
3145
- }, Zi = class {
3487
+ }, Ba = class {
3146
3488
  backend;
3147
3489
  scope;
3148
3490
  table;
@@ -3153,7 +3495,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3153
3495
  this.backend = e, this.scope = t, this.table = n;
3154
3496
  }
3155
3497
  where(...e) {
3156
- let n = Ji(e);
3498
+ let n = La(e);
3157
3499
  return this.predicate = this.predicate ? t(this.predicate, n) : n, this;
3158
3500
  }
3159
3501
  unscoped() {
@@ -3177,13 +3519,16 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3177
3519
  }
3178
3520
  async set(e) {
3179
3521
  let t = await this.backend.updateMany(this.table, e, { where: this.scopedWhere() });
3180
- if (this.expectedVersion !== void 0 && t === 0) throw new Ki(this.table, this.expectedVersion);
3522
+ if (this.expectedVersion !== void 0 && t === 0) throw new Fa({
3523
+ table: this.table,
3524
+ expected: this.expectedVersion
3525
+ });
3181
3526
  return t;
3182
3527
  }
3183
3528
  async restore() {
3184
3529
  return this.backend.updateMany(this.table, { deletedAt: null }, { where: this.scopedWhere() });
3185
3530
  }
3186
- }, Qi = class {
3531
+ }, Va = class {
3187
3532
  backend;
3188
3533
  scope;
3189
3534
  table;
@@ -3193,7 +3538,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3193
3538
  this.backend = e, this.scope = t, this.table = n;
3194
3539
  }
3195
3540
  where(...e) {
3196
- let n = Ji(e);
3541
+ let n = La(e);
3197
3542
  return this.predicate = this.predicate ? t(this.predicate, n) : n, this;
3198
3543
  }
3199
3544
  unscoped() {
@@ -3214,46 +3559,32 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3214
3559
  async hard() {
3215
3560
  return this.backend.deleteMany(this.table, { where: this.scopedWhere() });
3216
3561
  }
3217
- }, $i = (e, t) => ({
3218
- select: (n) => new Xi(e, t, n, Yi(n)),
3219
- updateWhere: (n) => new Zi(e, t, n),
3220
- deleteWhere: (n) => new Qi(e, t, n)
3221
- }), ea = class extends I.TaggedError()("TenantScopeViolation", {
3222
- table: I.String,
3223
- reason: I.String
3224
- }) {}, ta = class extends I.TaggedError()("StoreOperationFailed", {
3225
- operation: I.String,
3226
- table: I.String,
3227
- cause: I.String
3228
- }) {}, na = class extends I.TaggedError()("TableValidationFailed", {
3229
- table: I.String,
3230
- summary: I.String,
3231
- issues: I.Array(I.Struct({
3232
- path: I.String,
3233
- message: I.String
3234
- }))
3235
- }) {}, ra = "id", ia = (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) => {
3236
3567
  let n = {};
3237
3568
  for (let r of t) e[r] !== void 0 && (n[r] = e[r]);
3238
3569
  return n;
3239
- }, aa = "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).", oa = (e) => {
3240
- throw new ea({
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({
3241
3572
  table: e,
3242
- reason: aa
3573
+ reason: Ga
3243
3574
  });
3244
- }, sa = (e, n) => {
3575
+ }, qa = (e, n) => {
3245
3576
  let r = n.subject.id, i = n.subject.tenantId, a = (e, t) => {
3246
3577
  let a = { ...t }, o = n.schemaRegistry, s = o.idScheme(e);
3247
- if (s !== void 0 && a[ra] == null) if (s.kind === "numeric") delete a[ra];
3578
+ if (s !== void 0 && a[Ua] == null) if (s.kind === "numeric") delete a[Ua];
3248
3579
  else {
3249
3580
  let t = f(s, e);
3250
- t !== null && (a[ra] = t);
3581
+ t !== null && (a[Ua] = t);
3251
3582
  }
3252
3583
  if (o.hasAudit(e)) {
3253
3584
  let e = /* @__PURE__ */ new Date();
3254
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));
3255
3586
  }
3256
- o.hasTenant(e) && ("tenantId" in a || (i === null && oa(e), a.tenantId = i));
3587
+ o.hasTenant(e) && ("tenantId" in a || (i === null && Ka(e), a.tenantId = i));
3257
3588
  let c = o.defaultFactories(e);
3258
3589
  if (c.size > 0) for (let [e, t] of c) (!(e in a) || a[e] === void 0) && (a[e] = t());
3259
3590
  let l = o.computedFields(e);
@@ -3268,10 +3599,10 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3268
3599
  try {
3269
3600
  return await r();
3270
3601
  } catch (n) {
3271
- let r = Rt(n);
3272
- if (zt(r)) {
3602
+ let r = Bt(n);
3603
+ if (Vt(r)) {
3273
3604
  let n = t.tenantId, i = `${r.dbConstraint ?? ""} ${r.dbColumn ?? ""} ${r.dbMessage ?? ""} ${r.dbCauseChain ?? ""}`.toLowerCase();
3274
- if (i.includes("tenantid") || /\btenants\b/.test(i) || n != null && i.includes(String(n).toLowerCase())) throw new ea({
3605
+ if (i.includes("tenantid") || /\btenants\b/.test(i) || n != null && i.includes(String(n).toLowerCase())) throw new wi({
3275
3606
  table: e,
3276
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)`
3277
3608
  });
@@ -3292,11 +3623,11 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3292
3623
  if (r === void 0) return t;
3293
3624
  let i = I.decodeUnknownEither(r)(t);
3294
3625
  if (i._tag === "Right") return t;
3295
- let a = ht.formatErrorSync(i.left).map((e) => ({
3626
+ let a = _t.formatErrorSync(i.left).map((e) => ({
3296
3627
  path: e.path.length === 0 ? "<root>" : e.path.join("."),
3297
3628
  message: e.message
3298
3629
  })), o = a[0];
3299
- throw new na({
3630
+ throw new Ei({
3300
3631
  table: e,
3301
3632
  summary: o === void 0 ? "patch validation failed" : `${o.path}: ${o.message}`,
3302
3633
  issues: a
@@ -3309,29 +3640,29 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3309
3640
  if (r === void 0) return t;
3310
3641
  let i = I.decodeUnknownEither(r)(t);
3311
3642
  if (i._tag === "Right") return t;
3312
- let a = ht.formatErrorSync(i.left).map((e) => ({
3643
+ let a = _t.formatErrorSync(i.left).map((e) => ({
3313
3644
  path: e.path.length === 0 ? "<root>" : e.path.join("."),
3314
3645
  message: e.message
3315
3646
  })), o = a[0];
3316
- throw new na({
3647
+ throw new Ei({
3317
3648
  table: e,
3318
3649
  summary: o === void 0 ? "row validation failed" : `${o.path}: ${o.message}`,
3319
3650
  issues: a
3320
3651
  });
3321
3652
  }, v = n.dialect, y = (e, t) => {
3322
3653
  let n = m(e);
3323
- return l(v ? oe(t, n, v) : t, n, Kr());
3654
+ return l(v ? ce(t, n, v) : t, n, Xr());
3324
3655
  }, b = (e, t) => {
3325
- let n = m(e), r = s(t, n, Kr());
3656
+ let n = m(e), r = s(t, n, Xr());
3326
3657
  return v ? c(r, n, v) : r;
3327
- }, S = (e) => {
3658
+ }, x = (e) => {
3328
3659
  let r = e.table, a = e.predicate;
3329
3660
  if (!e.crossTenant && i != null && n.schemaRegistry.hasTenant(r)) {
3330
3661
  let e = u("tenantId", i);
3331
3662
  a = a ? t(a, e) : e;
3332
3663
  }
3333
3664
  if (!e.includeDeleted && n.schemaRegistry.hasSoftDelete(r)) {
3334
- let e = x("deletedAt");
3665
+ let e = S("deletedAt");
3335
3666
  a = a ? t(a, e) : e;
3336
3667
  }
3337
3668
  return a === e.predicate ? e : {
@@ -3341,13 +3672,13 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3341
3672
  }, C = async (t) => {
3342
3673
  let n = await e.query(t);
3343
3674
  return b(t.table, n);
3344
- }, w = async (e) => C(S(e)), ee = async (t, r, i) => {
3675
+ }, ee = async (e) => C(x(e)), te = async (t, r, i) => {
3345
3676
  let a = o(t, i);
3346
3677
  if (n.schemaRegistry.computedFields(t).size > 0) {
3347
3678
  let n = (await e.query({
3348
3679
  table: t,
3349
3680
  predicate: {
3350
- column: ra,
3681
+ column: Ua,
3351
3682
  op: "eq",
3352
3683
  value: r
3353
3684
  },
@@ -3362,23 +3693,23 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3362
3693
  a = h(t, a);
3363
3694
  let s = await e.update(t, r, y(t, a));
3364
3695
  return s === null ? null : b(t, [s])[0];
3365
- }, te = async (t, r) => n.schemaRegistry.hasSoftDelete(t) ? await e.update(t, r, g()) !== null : e.delete(t, r), T = async (t, n, r) => e.updateMany(t, y(t, o(t, n)), r), ne = async (t, n) => e.deleteMany(t, n), re = (e, r) => i != null && n.schemaRegistry.hasTenant(e) ? t(r, u("tenantId", i)) : r, ie = async (e, t, n) => T(e, t, {
3696
+ }, ne = async (t, r) => n.schemaRegistry.hasSoftDelete(t) ? await e.update(t, r, g()) !== null : e.delete(t, r), w = async (t, n, r) => e.updateMany(t, y(t, o(t, n)), r), re = async (t, n) => e.deleteMany(t, n), ie = (e, r) => i != null && n.schemaRegistry.hasTenant(e) ? t(r, u("tenantId", i)) : r, ae = async (e, t, n) => w(e, t, {
3366
3697
  ...n,
3367
- where: re(e, n.where)
3368
- }), ae = async (e, t) => ne(e, {
3698
+ where: ie(e, n.where)
3699
+ }), oe = async (e, t) => re(e, {
3369
3700
  ...t,
3370
- where: re(e, t.where)
3371
- }), se = $i({
3701
+ where: ie(e, t.where)
3702
+ }), se = Ha({
3372
3703
  query: C,
3373
- updateMany: T,
3374
- deleteMany: ne,
3704
+ updateMany: w,
3705
+ deleteMany: re,
3375
3706
  delete: (t, n) => e.delete(t, n)
3376
3707
  }, {
3377
3708
  subject: n.subject,
3378
3709
  schemaRegistry: n.schemaRegistry
3379
3710
  });
3380
3711
  return {
3381
- query: w,
3712
+ query: ee,
3382
3713
  insert: async (t, n) => {
3383
3714
  let r = a(t, n), i = await d(t, r, () => e.insert(t, y(t, _(t, r))));
3384
3715
  return b(t, [i])[0];
@@ -3392,12 +3723,12 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3392
3723
  return a === null ? null : b(t, [a])[0];
3393
3724
  },
3394
3725
  select: se.select,
3395
- update: ((e, t, n) => t === void 0 ? se.updateWhere(e) : ee(e, t, n)),
3396
- delete: ((e, t) => t === void 0 ? se.deleteWhere(e) : te(e, t)),
3397
- applyDefined: ia,
3726
+ update: ((e, t, n) => t === void 0 ? se.updateWhere(e) : te(e, t, n)),
3727
+ delete: ((e, t) => t === void 0 ? se.deleteWhere(e) : ne(e, t)),
3728
+ applyDefined: Wa,
3398
3729
  hardDelete: async (t, n) => e.delete(t, n),
3399
- updateMany: ie,
3400
- deleteMany: ae,
3730
+ updateMany: ae,
3731
+ deleteMany: oe,
3401
3732
  upsert: async (t, n, r) => {
3402
3733
  let i = a(t, n), o = await d(t, i, () => e.upsert(t, y(t, _(t, i)), r));
3403
3734
  return b(t, [o])[0];
@@ -3406,34 +3737,34 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3406
3737
  let i = a(t, n), o = await d(t, i, () => e.insertIgnore(t, y(t, _(t, i)), r));
3407
3738
  return b(t, [o])[0];
3408
3739
  },
3409
- transactional: (t) => e.transactional(async (e) => t(sa(e, n))),
3740
+ transactional: (t) => e.transactional(async (e) => t(qa(e, n))),
3410
3741
  ...e.raw ? { raw: e.raw.bind(e) } : {},
3411
3742
  onChange: (t) => e.onChange(t),
3412
3743
  injectExternalChange: (t) => e.injectExternalChange(t),
3413
3744
  ...e.changeScope === void 0 ? {} : { changeScope: e.changeScope }
3414
3745
  };
3415
- }, ca = class extends I.TaggedError()("CircuitOpen", {
3746
+ }, Ja = class extends I.TaggedError()("CircuitOpen", {
3416
3747
  name: I.String,
3417
3748
  retryAfterMs: I.Number
3418
- }) {}, la = {
3749
+ }) {}, Ya = {
3419
3750
  tag: "closed",
3420
3751
  failureCount: 0,
3421
3752
  halfOpenSuccesses: 0,
3422
3753
  openedAt: 0
3423
- }, ua = { make: (e) => j.gen(function* () {
3424
- let t = e.name ?? "circuit", n = Ie.toMillis(Ie.decode(e.resetTimeout)), r = e.halfOpenSuccessThreshold ?? 1, i = e.isFailure ?? (() => !0), a = yield* F.make(la), 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* () {
3425
3756
  let e = yield* F.get(a);
3426
3757
  if (e.tag === "half-open") {
3427
3758
  let t = e.halfOpenSuccesses + 1;
3428
- yield* F.set(a, t >= r ? la : {
3759
+ yield* F.set(a, t >= r ? Ya : {
3429
3760
  ...e,
3430
3761
  halfOpenSuccesses: t
3431
3762
  });
3432
3763
  return;
3433
3764
  }
3434
- e.failureCount !== 0 && (yield* F.set(a, la));
3765
+ e.failureCount !== 0 && (yield* F.set(a, Ya));
3435
3766
  }), s = j.gen(function* () {
3436
- let t = yield* Ne.currentTimeMillis, n = yield* F.get(a);
3767
+ let t = yield* Fe.currentTimeMillis, n = yield* F.get(a);
3437
3768
  if (n.tag === "half-open" || n.tag === "open") {
3438
3769
  yield* F.set(a, {
3439
3770
  tag: "open",
@@ -3456,7 +3787,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3456
3787
  }), c = j.gen(function* () {
3457
3788
  let e = yield* F.get(a);
3458
3789
  if (e.tag !== "open") return null;
3459
- let t = (yield* Ne.currentTimeMillis) - e.openedAt;
3790
+ let t = (yield* Fe.currentTimeMillis) - e.openedAt;
3460
3791
  return t >= n ? (yield* F.set(a, {
3461
3792
  tag: "half-open",
3462
3793
  failureCount: 0,
@@ -3469,7 +3800,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3469
3800
  if (k.isInterruptedOnly(e)) return j.void;
3470
3801
  let t = k.failureOption(e), n = t._tag === "Some" ? t.value : void 0;
3471
3802
  return i(n) ? s : j.void;
3472
- })) : yield* j.fail(new ca({
3803
+ })) : yield* j.fail(new Ja({
3473
3804
  name: t,
3474
3805
  retryAfterMs: n
3475
3806
  }));
@@ -3478,38 +3809,25 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3478
3809
  value: F.get(a).pipe(j.map((e) => e.tag)),
3479
3810
  enumerable: !0
3480
3811
  }), Object.defineProperty(u, "reset", {
3481
- value: F.set(a, la),
3812
+ value: F.set(a, Ya),
3482
3813
  enumerable: !0
3483
3814
  }), u;
3484
- }) }, da, fa = (e) => {
3485
- da = e;
3486
- }, pa = () => {
3487
- da = void 0;
3488
- }, ma = async (e, t = {}) => {
3489
- let n = t.scopes === void 0 ? Ae(t.id ?? "system") : Ae(t.id ?? "system", t.scopes), r = t.store ?? da?.dataStore, i = t.schemaRegistry ?? da?.schemaRegistry, a = t.dialect ?? da?.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;
3490
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.");
3491
3822
  return e({
3492
3823
  subject: n,
3493
- store: sa(r, {
3824
+ store: qa(r, {
3494
3825
  subject: n,
3495
3826
  schemaRegistry: i,
3496
3827
  ...a === void 0 ? {} : { dialect: a }
3497
3828
  })
3498
3829
  });
3499
- }, ha = class extends Pe.Tag("@voltro/EffectStore")() {}, ga = (e, t) => (n) => n instanceof ea ? n : new ta({
3500
- operation: e,
3501
- table: t,
3502
- cause: String(n)
3503
- }), _a = (e, t, n) => j.tryPromise({
3504
- try: n,
3505
- catch: ga(e, t)
3506
- }), va = (e) => M.succeed(ha, {
3507
- query: (t) => _a("query", t.table, () => e.query(t)),
3508
- insert: (t, n) => _a("insert", t, () => e.insert(t, n)),
3509
- update: (t, n, r) => _a("update", t, () => e.update(t, n, r)),
3510
- delete: (t, n) => _a("delete", t, () => e.delete(t, n)),
3511
- hardDelete: (t, n) => _a("hardDelete", t, () => e.hardDelete(t, n))
3512
- }), ya = (e) => {
3830
+ }, to = (e) => {
3513
3831
  let { currentRegion: t, replicaRegions: n, inner: r } = e, i = (e) => {
3514
3832
  if (t === void 0) return {
3515
3833
  sameRegion: [],
@@ -3537,7 +3855,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3537
3855
  return r.loadSnapshot();
3538
3856
  }
3539
3857
  };
3540
- }, ba = (e = process.env) => {
3858
+ }, no = (e = process.env) => {
3541
3859
  for (let t of [
3542
3860
  "VOLTRO_REGION",
3543
3861
  "AWS_REGION",
@@ -3549,7 +3867,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3549
3867
  let n = e[t];
3550
3868
  if (typeof n == "string" && n.length > 0) return n;
3551
3869
  }
3552
- }, xa = () => {
3870
+ }, ro = () => {
3553
3871
  let e = {
3554
3872
  primary: 0,
3555
3873
  lagByReplica: /* @__PURE__ */ new Map()
@@ -3574,27 +3892,27 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3574
3892
  e.lagByReplica.set(t, n);
3575
3893
  }
3576
3894
  };
3577
- }, Sa = Symbol.for("@voltro/ScheduleDefinition"), Ca = (e) => typeof e == "object" && !!e && Sa in e, wa = 30 * 6e4, Ta = (e) => {
3895
+ }, io = Symbol.for("@voltro/ScheduleDefinition"), ao = (e) => typeof e == "object" && !!e && io in e, oo = 30 * 6e4, so = (e) => {
3578
3896
  let t = A.parse(e.cron, e.timezone);
3579
- if (Le.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)}`);
3580
3898
  if (!e.timezone || e.timezone.trim() === "") throw Error(`defineSchedule("${e.name}"): timezone is required (e.g. "UTC", "Europe/Berlin")`);
3581
3899
  if (e.handler === void 0 && e.workflow === void 0) throw Error(`defineSchedule("${e.name}"): define either handler or workflow`);
3582
3900
  return {
3583
3901
  ...e,
3584
3902
  onOverlap: e.onOverlap ?? "skip",
3585
3903
  backfill: e.backfill ?? "skip",
3586
- maxRuntimeMs: e.maxRuntimeMs ?? wa,
3587
- [Sa]: !0
3904
+ maxRuntimeMs: e.maxRuntimeMs ?? oo,
3905
+ [io]: !0
3588
3906
  };
3589
- }, Ea = (e) => A.unsafeParse(e.cron, e.timezone), Da = (e, t = /* @__PURE__ */ new Date()) => A.next(Ea(e), t), Z = "_voltro_wakeups", Oa = (e) => `${e.tenantId}:${e.kind}:${e.refId}`, ka = (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) => ({
3590
3908
  tenantId: String(e.tenantId),
3591
3909
  kind: String(e.kind),
3592
3910
  refId: String(e.refId),
3593
3911
  wakeAt: e.wakeAt instanceof Date ? e.wakeAt : new Date(String(e.wakeAt)),
3594
3912
  status: e.status === "fired" ? "fired" : "pending"
3595
- }), Aa = async (e, t) => {
3913
+ }), po = async (e, t) => {
3596
3914
  await e.upsert(Z, {
3597
- id: Oa(t),
3915
+ id: uo(t),
3598
3916
  tenantId: t.tenantId,
3599
3917
  kind: t.kind,
3600
3918
  refId: t.refId,
@@ -3604,7 +3922,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3604
3922
  conflictColumns: ["id"],
3605
3923
  update: ["wakeAt", "status"]
3606
3924
  });
3607
- }, ja = async (e, t) => e.delete(Z, Oa(t)), Ma = async (e, t) => await e.update(Z, Oa(t), { status: "fired" }) !== null, Na = (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: [{
3608
3926
  column: "id",
3609
3927
  op: "eq",
3610
3928
  value: e
@@ -3612,16 +3930,16 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3612
3930
  column: "status",
3613
3931
  op: "eq",
3614
3932
  value: t
3615
- }] }), Pa = async (e, t) => await e.updateMany(Z, { status: "fired" }, { where: Na(Oa(t), "pending") }) > 0, Fa = async (e, t) => {
3616
- await e.updateMany(Z, { status: "pending" }, { where: Na(Oa(t), "fired") });
3617
- }, Ia = {
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 = {
3618
3936
  column: "status",
3619
3937
  op: "eq",
3620
3938
  value: "pending"
3621
- }, La = async (e, t) => {
3939
+ }, bo = async (e, t) => {
3622
3940
  let n = {
3623
3941
  table: Z,
3624
- predicate: Ia,
3942
+ predicate: yo,
3625
3943
  order: [{
3626
3944
  column: "wakeAt",
3627
3945
  direction: "asc"
@@ -3630,18 +3948,18 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3630
3948
  skip: void 0,
3631
3949
  projection: void 0
3632
3950
  };
3633
- return (await e.query(n)).map(ka);
3634
- }, Ra = async (e, t, n = 500) => {
3635
- let r = await La(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();
3636
3954
  return r.filter((e) => e.wakeAt.getTime() <= i);
3637
- }, za = async (e) => (await La(e, 1))[0] ?? null, Ba = {
3955
+ }, So = async (e) => (await bo(e, 1))[0] ?? null, Co = {
3638
3956
  column: "status",
3639
3957
  op: "eq",
3640
3958
  value: "fired"
3641
- }, Va = async (e, t = {}) => {
3959
+ }, wo = async (e, t = {}) => {
3642
3960
  let n = {
3643
3961
  table: Z,
3644
- predicate: Ba,
3962
+ predicate: Co,
3645
3963
  order: [{
3646
3964
  column: "wakeAt",
3647
3965
  direction: "asc"
@@ -3652,12 +3970,12 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3652
3970
  }, r = await e.query(n), i = t.firedOlderThan?.getTime(), a = 0;
3653
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++;
3654
3972
  return a;
3655
- }, Ha = {
3973
+ }, To = {
3656
3974
  kind: "single",
3657
3975
  tryClaim: async () => !0
3658
- }, Ua = "_voltro_schedule_claims", Wa = (e, t, n) => {
3976
+ }, Eo = "_voltro_schedule_claims", Do = (e, t, n) => {
3659
3977
  let r = async (t) => (await e.query({
3660
- table: Ua,
3978
+ table: Eo,
3661
3979
  order: [],
3662
3980
  predicate: void 0,
3663
3981
  projection: ["id"],
@@ -3672,7 +3990,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3672
3990
  if (await r(s)) return !1;
3673
3991
  } catch {}
3674
3992
  try {
3675
- return await e.insert(Ua, {
3993
+ return await e.insert(Eo, {
3676
3994
  id: s,
3677
3995
  scheduleName: i,
3678
3996
  bucket: o,
@@ -3690,12 +4008,12 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3690
4008
  }
3691
4009
  }
3692
4010
  };
3693
- }, Ga = "_voltro_schedule_runs", Ka = async (e, t) => {
4011
+ }, Oo = "_voltro_schedule_runs", ko = async (e, t) => {
3694
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) => {
3695
- s?.(e, Ja(t));
4013
+ s?.(e, jo(t));
3696
4014
  }, _ = async (e, t, r, i, s, c) => {
3697
4015
  try {
3698
- let o = `sr_${pe()}`, l = await n.insert(Ga, {
4016
+ let o = `sr_${he()}`, l = await n.insert(Oo, {
3699
4017
  id: o,
3700
4018
  name: e.name,
3701
4019
  status: i,
@@ -3720,7 +4038,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3720
4038
  }
3721
4039
  }, v = async (e, t) => {
3722
4040
  try {
3723
- let r = await n.update(Ga, e, t);
4041
+ let r = await n.update(Oo, e, t);
3724
4042
  r && g("update", r);
3725
4043
  } catch (t) {
3726
4044
  o.warn("schedule: failed to record run finish", {
@@ -3731,7 +4049,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3731
4049
  }, y = async (e) => {
3732
4050
  try {
3733
4051
  let t = await n.query({
3734
- table: Ga,
4052
+ table: Oo,
3735
4053
  predicate: {
3736
4054
  _tag: "leaf",
3737
4055
  column: "status",
@@ -3796,7 +4114,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3796
4114
  let n = Q(t).includes("exceeded maxRuntimeMs");
3797
4115
  s && await v(s, {
3798
4116
  status: "failed",
3799
- errorTag: n ? "timeout" : qa(t),
4117
+ errorTag: n ? "timeout" : Ao(t),
3800
4118
  errorMessage: Q(t),
3801
4119
  completedAt: /* @__PURE__ */ new Date(),
3802
4120
  durationMs: Date.now() - l
@@ -3804,7 +4122,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3804
4122
  name: e.name,
3805
4123
  reason: Q(t),
3806
4124
  timeout: n
3807
- }), Oe({
4125
+ }), Ae({
3808
4126
  error: t,
3809
4127
  source: "schedule",
3810
4128
  name: e.name,
@@ -3853,8 +4171,8 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3853
4171
  }
3854
4172
  }, C = async (e) => {
3855
4173
  try {
3856
- let t = A.next(Ea(e), /* @__PURE__ */ new Date());
3857
- await Aa(n, {
4174
+ let t = A.next(co(e), /* @__PURE__ */ new Date());
4175
+ await po(n, {
3858
4176
  tenantId: u,
3859
4177
  kind: "schedule",
3860
4178
  refId: e.name,
@@ -3866,13 +4184,13 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3866
4184
  reason: Q(t)
3867
4185
  });
3868
4186
  }
3869
- }, w = 2147483647, ee = (e) => {
4187
+ }, ee = 2147483647, te = (e) => {
3870
4188
  if (m) return;
3871
- let n = Ea(e), r = A.next(n, /* @__PURE__ */ new Date()), i = () => {
4189
+ let n = co(e), r = A.next(n, /* @__PURE__ */ new Date()), i = () => {
3872
4190
  if (m) return;
3873
4191
  let n = r.getTime() - Date.now();
3874
- if (n > w) {
3875
- let t = setTimeout(i, w);
4192
+ if (n > ee) {
4193
+ let t = setTimeout(i, ee);
3876
4194
  d.set(e.name, t);
3877
4195
  return;
3878
4196
  }
@@ -3880,17 +4198,17 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3880
4198
  x(e, r, e.trigger ?? t.defaultTrigger).catch((t) => o.warn("schedule: fire rejected", {
3881
4199
  name: e.name,
3882
4200
  reason: Q(t)
3883
- })).finally(() => ee(e));
4201
+ })).finally(() => te(e));
3884
4202
  }, Math.max(0, n));
3885
4203
  d.set(e.name, a);
3886
4204
  };
3887
4205
  i();
3888
- }, te = async (e) => {
4206
+ }, ne = async (e) => {
3889
4207
  if (e.backfill === "skip") return;
3890
4208
  let r;
3891
4209
  try {
3892
4210
  let t = (await n.query({
3893
- table: Ga,
4211
+ table: Oo,
3894
4212
  order: [{
3895
4213
  column: "scheduledAt",
3896
4214
  direction: "desc"
@@ -3909,7 +4227,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3909
4227
  return;
3910
4228
  }
3911
4229
  if (!r) return;
3912
- let i = Ea(e), a = [], s = A.next(i, r), c = Date.now();
4230
+ let i = co(e), a = [], s = A.next(i, r), c = Date.now();
3913
4231
  for (; s.getTime() < c && a.length < 1e3;) a.push(s), s = A.next(i, s);
3914
4232
  if (a.length !== 0) if (o.info("schedule: backfill", {
3915
4233
  name: e.name,
@@ -3920,20 +4238,20 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3920
4238
  let n = a[a.length - 1];
3921
4239
  await x(e, n, e.trigger ?? t.defaultTrigger);
3922
4240
  } else for (let n of a) await x(e, n, e.trigger ?? t.defaultTrigger);
3923
- }, T = e.filter((e) => (e.trigger ?? t.defaultTrigger) === "self");
4241
+ }, w = e.filter((e) => (e.trigger ?? t.defaultTrigger) === "self");
3924
4242
  o.info("scheduler: starting", {
3925
4243
  total: e.length,
3926
- self: T.length,
3927
- external: e.length - T.length,
4244
+ self: w.length,
4245
+ external: e.length - w.length,
3928
4246
  coordinator: r.kind
3929
4247
  });
3930
- let ne = (t.armSelf ?? !0) && !l;
4248
+ let re = (t.armSelf ?? !0) && !l;
3931
4249
  if (l) {
3932
- o.info("scheduler: sleep mode — registering wakeups, not arming timers", { count: T.length });
3933
- for (let e of T) await C(e);
3934
- } else if (ne) {
3935
- for (let e of T) await te(e);
3936
- for (let e of T) ee(e);
4250
+ o.info("scheduler: sleep mode — registering wakeups, not arming timers", { count: w.length });
4251
+ for (let e of w) await C(e);
4252
+ } else if (re) {
4253
+ for (let e of w) await ne(e);
4254
+ for (let e of w) te(e);
3937
4255
  }
3938
4256
  return {
3939
4257
  fireNow: async (e, t) => {
@@ -3954,11 +4272,11 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3954
4272
  d.clear(), o.info("scheduler: stopped");
3955
4273
  }
3956
4274
  };
3957
- }, Q = (e) => e?.message ?? String(e), qa = (e) => e && typeof e == "object" && "_tag" in e ? String(e._tag) : null, Ja = (e) => {
4275
+ }, Q = (e) => e?.message ?? String(e), Ao = (e) => e && typeof e == "object" && "_tag" in e ? String(e._tag) : null, jo = (e) => {
3958
4276
  let t = {};
3959
4277
  for (let [n, r] of Object.entries(e)) t[n] = r instanceof Date ? r.toISOString() : r;
3960
4278
  return t;
3961
- }, Ya = (e, t, n, r) => {
4279
+ }, Mo = (e, t, n, r) => {
3962
4280
  let i = !1, a, o = async () => {
3963
4281
  if (i) return;
3964
4282
  let a = new Date(Math.floor(Date.now() / t) * t), o = !1;
@@ -3988,96 +4306,96 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
3988
4306
  i || (i = !0, a && clearInterval(a), a = void 0);
3989
4307
  }
3990
4308
  };
3991
- }, Xa = (e) => (t, n, r) => Ya(t, n, r, e), Za = E("_voltro_schedule_runs", {
4309
+ }, No = (e) => (t, n, r) => Mo(t, n, r, e), Po = T("_voltro_schedule_runs", {
3992
4310
  id: v({ prefix: "schrun" }),
3993
- name: D(),
3994
- status: D().oneOf([
4311
+ name: E(),
4312
+ status: E().oneOf([
3995
4313
  "running",
3996
4314
  "succeeded",
3997
4315
  "failed",
3998
4316
  "skipped",
3999
4317
  "missed"
4000
4318
  ]).default("running"),
4001
- trigger: D().oneOf([
4319
+ trigger: E().oneOf([
4002
4320
  "self",
4003
4321
  "external",
4004
4322
  "manual"
4005
4323
  ]).default("self"),
4006
- scheduledAt: O(),
4007
- firedAt: O().nullable(),
4008
- completedAt: O().nullable(),
4324
+ scheduledAt: D(),
4325
+ firedAt: D().nullable(),
4326
+ completedAt: D().nullable(),
4009
4327
  durationMs: b().nullable(),
4010
- errorTag: D().nullable(),
4011
- errorMessage: D().nullable(),
4012
- coordinationOutcome: D().oneOf([
4328
+ errorTag: E().nullable(),
4329
+ errorMessage: E().nullable(),
4330
+ coordinationOutcome: E().oneOf([
4013
4331
  "single",
4014
4332
  "wonLock",
4015
4333
  "lostLock",
4016
4334
  "external",
4017
4335
  "cluster"
4018
4336
  ]).nullable(),
4019
- replicaId: D().nullable(),
4020
- result: S().nullable()
4021
- }).index(["name", "scheduledAt"]).index(["status"]), Qa = E("_voltro_schedule_claims", {
4337
+ replicaId: E().nullable(),
4338
+ result: C().nullable()
4339
+ }).index(["name", "scheduledAt"]).index(["status"]), Fo = T("_voltro_schedule_claims", {
4022
4340
  id: v({ prefix: "schclaim" }),
4023
- scheduleName: D(),
4024
- bucket: D(),
4025
- claimedBy: D(),
4026
- claimedAt: O()
4027
- }).index(["scheduleName", "bucket"]).index(["claimedAt"]), $a = E("_voltro_traces", {
4341
+ scheduleName: E(),
4342
+ bucket: E(),
4343
+ claimedBy: E(),
4344
+ claimedAt: D()
4345
+ }).index(["scheduleName", "bucket"]).index(["claimedAt"]), Io = T("_voltro_traces", {
4028
4346
  id: v({ prefix: "span" }),
4029
- traceId: D(),
4030
- spanId: D(),
4031
- parentSpanId: D().nullable(),
4032
- name: D(),
4033
- kind: D().oneOf([
4347
+ traceId: E(),
4348
+ spanId: E(),
4349
+ parentSpanId: E().nullable(),
4350
+ name: E(),
4351
+ kind: E().oneOf([
4034
4352
  "internal",
4035
4353
  "server",
4036
4354
  "client",
4037
4355
  "producer",
4038
4356
  "consumer"
4039
4357
  ]).default("internal"),
4040
- status: D().oneOf([
4358
+ status: E().oneOf([
4041
4359
  "ok",
4042
4360
  "error",
4043
4361
  "unset"
4044
4362
  ]).default("unset"),
4045
- statusMessage: D().nullable(),
4046
- startedAt: O(),
4047
- endedAt: O(),
4363
+ statusMessage: E().nullable(),
4364
+ startedAt: D(),
4365
+ endedAt: D(),
4048
4366
  durationMs: b(),
4049
- attributes: S().nullable(),
4050
- events: S().nullable()
4051
- }).index(["traceId", "startedAt"]).index(["startedAt"]).index(["status"]), eo = E("_voltro_undo_log", {
4367
+ attributes: C().nullable(),
4368
+ events: C().nullable()
4369
+ }).index(["traceId", "startedAt"]).index(["startedAt"]).index(["status"]), Lo = T("_voltro_undo_log", {
4052
4370
  id: v({ prefix: "undo" }),
4053
- tag: D(),
4054
- label: D().nullable(),
4055
- subjectId: D().nullable(),
4056
- tenantId: D().nullable(),
4057
- traceId: D().nullable(),
4058
- changes: D(),
4371
+ tag: E(),
4372
+ label: E().nullable(),
4373
+ subjectId: E().nullable(),
4374
+ tenantId: E().nullable(),
4375
+ traceId: E().nullable(),
4376
+ changes: E(),
4059
4377
  crossesAction: r().default(!1),
4060
4378
  undone: r().default(!1),
4061
- createdAt: O().default("now")
4062
- }).index(["subjectId", "createdAt"]).reactive(), to = (e = process.env) => {
4379
+ createdAt: D().default("now")
4380
+ }).index(["subjectId", "createdAt"]).reactive(), Ro = (e = process.env) => {
4063
4381
  let t = (e.VOLTRO_UNDO ?? "").toLowerCase();
4064
4382
  return t === "on" || t === "1" || t === "true" ? !0 : t === "off" || t === "0" || t === "false" ? !1 : e.NODE_ENV !== "production";
4065
- }, no = (e) => e.startsWith("_voltro"), ro = async (e, t, n) => (await e.query({
4383
+ }, zo = (e) => e.startsWith("_voltro"), Bo = async (e, t, n) => (await e.query({
4066
4384
  table: t,
4067
4385
  predicate: u("id", n),
4068
4386
  order: []
4069
- }))[0] ?? null, io = (e, t) => new Proxy(e, { get(e, n, r) {
4387
+ }))[0] ?? null, Vo = (e, t) => new Proxy(e, { get(e, n, r) {
4070
4388
  if (n === "insert") return async (n, r) => {
4071
4389
  let i = await e.insert(n, r);
4072
- return no(n) || t({
4390
+ return zo(n) || t({
4073
4391
  table: n,
4074
4392
  op: "insert",
4075
4393
  next: i
4076
4394
  }), i;
4077
4395
  };
4078
4396
  if (n === "update") return async (n, r, i) => {
4079
- let a = no(n) ? null : await ro(e, n, r), o = await e.update(n, r, i);
4080
- return no(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({
4081
4399
  table: n,
4082
4400
  op: "update",
4083
4401
  id: r,
@@ -4086,8 +4404,8 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4086
4404
  }), o;
4087
4405
  };
4088
4406
  if (n === "delete") return async (n, r) => {
4089
- let i = no(n) ? null : await ro(e, n, r), a = await e.delete(n, r);
4090
- return !no(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({
4091
4409
  table: n,
4092
4410
  op: "delete",
4093
4411
  id: r,
@@ -4096,10 +4414,10 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4096
4414
  };
4097
4415
  let i = Reflect.get(e, n, r);
4098
4416
  return typeof i == "function" ? i.bind(e) : i;
4099
- } }), ao = (e) => {
4417
+ } }), Ho = (e) => {
4100
4418
  let t = [];
4101
4419
  return {
4102
- tx: io(e, (e) => t.push(e)),
4420
+ tx: Vo(e, (e) => t.push(e)),
4103
4421
  persist: async (e, n) => {
4104
4422
  if (t.length === 0 || n.tag.startsWith("__voltro")) return;
4105
4423
  let r = n.subject;
@@ -4115,14 +4433,14 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4115
4433
  });
4116
4434
  }
4117
4435
  };
4118
- }, oo = (e) => {
4436
+ }, Uo = (e) => {
4119
4437
  if (e.id !== void 0) return e.id;
4120
4438
  let t = e.next?.id;
4121
4439
  if (typeof t == "string") return t;
4122
4440
  let n = e.prev?.id;
4123
4441
  return typeof n == "string" ? n : void 0;
4124
- }, so = (e) => {
4125
- let t = oo(e);
4442
+ }, Wo = (e) => {
4443
+ let t = Uo(e);
4126
4444
  switch (e.op) {
4127
4445
  case "insert": return t === void 0 ? null : {
4128
4446
  table: e.table,
@@ -4146,28 +4464,28 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4146
4464
  row: e.prev
4147
4465
  };
4148
4466
  }
4149
- }, co = (e) => {
4150
- if (e.crossesAction) throw new lo(e.invocationId, "action");
4467
+ }, Go = (e) => {
4468
+ if (e.crossesAction) throw new Ko(e.invocationId, "action");
4151
4469
  let t = [];
4152
4470
  for (let n = e.changes.length - 1; n >= 0; --n) {
4153
- let r = so(e.changes[n]);
4471
+ let r = Wo(e.changes[n]);
4154
4472
  r !== null && t.push(r);
4155
4473
  }
4156
4474
  return t;
4157
- }, lo = class extends Error {
4475
+ }, Ko = class extends Error {
4158
4476
  invocationId;
4159
4477
  boundary;
4160
4478
  _tag = "UndoBoundaryError";
4161
4479
  constructor(e, t) {
4162
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";
4163
4481
  }
4164
- }, uo = (e, t, n = ["updatedAt", "updatedBy"]) => {
4482
+ }, qo = (e, t, n = ["updatedAt", "updatedBy"]) => {
4165
4483
  if (t == null) return e == null;
4166
4484
  if (e == null) return !1;
4167
4485
  let r = new Set(n);
4168
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;
4169
4487
  return !0;
4170
- }, fo = class {
4488
+ }, Jo = class {
4171
4489
  capacity;
4172
4490
  done = [];
4173
4491
  undone = [];
@@ -4203,7 +4521,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4203
4521
  redo: [...this.undone]
4204
4522
  };
4205
4523
  }
4206
- }, po = (e, t = /* @__PURE__ */ new Set()) => e.op === "insert" ? {
4524
+ }, Yo = (e, t = /* @__PURE__ */ new Set()) => e.op === "insert" ? {
4207
4525
  table: e.table,
4208
4526
  op: "insert",
4209
4527
  next: e.new ?? null
@@ -4220,7 +4538,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4220
4538
  table: e.table,
4221
4539
  op: "delete",
4222
4540
  prev: e.old ?? null
4223
- }, mo = async (e, t) => {
4541
+ }, Xo = async (e, t) => {
4224
4542
  switch (t.op) {
4225
4543
  case "delete":
4226
4544
  await e.delete(t.table, t.id);
@@ -4238,21 +4556,21 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4238
4556
  await e.insert(t.table, t.row);
4239
4557
  return;
4240
4558
  }
4241
- }, ho = async (e, t) => {
4242
- for (let n of t) await mo(e, n);
4243
- }, go = (e) => e.request?.subject?.id ?? null, _o = (e) => e === !0 || e === 1, vo = 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({
4244
4562
  table: t,
4245
4563
  predicate: u("id", n),
4246
4564
  order: []
4247
- }))[0] ?? null, yo = (e) => {
4565
+ }))[0] ?? null, ts = (e) => {
4248
4566
  try {
4249
4567
  let t = JSON.parse(String(e ?? "[]"));
4250
4568
  return Array.isArray(t) ? t : [];
4251
4569
  } catch {
4252
4570
  return [];
4253
4571
  }
4254
- }, bo = (e) => e.id ?? e.next?.id ?? e.prev?.id, xo = async (e, t) => {
4255
- let n = go(t);
4572
+ }, ns = (e) => e.id ?? e.next?.id ?? e.prev?.id, rs = async (e, t) => {
4573
+ let n = Qo(t);
4256
4574
  return [...await t.store.query({
4257
4575
  table: "_voltro_undo_log",
4258
4576
  predicate: u("subjectId", n),
@@ -4261,68 +4579,68 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4261
4579
  id: String(e.id),
4262
4580
  tag: String(e.tag ?? ""),
4263
4581
  label: e.label ?? null,
4264
- undone: _o(e.undone),
4265
- crossesAction: _o(e.crossesAction),
4582
+ undone: $o(e.undone),
4583
+ crossesAction: $o(e.crossesAction),
4266
4584
  createdAt: String(e.createdAt ?? "")
4267
4585
  }));
4268
- }, So = async (e, t) => {
4269
- let n = await vo(t.store, "_voltro_undo_log", e.invocationId);
4270
- if (!n) throw new xe({ invocationId: e.invocationId });
4271
- if ((n.subjectId ?? null) !== go(t)) throw new be({ 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 });
4272
4590
  return n;
4273
- }, Co = async (e, t) => {
4274
- let n = await So(e, t);
4275
- if (_o(n.undone)) return { ok: !0 };
4276
- if (_o(n.crossesAction)) throw new ye({
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({
4277
4595
  invocationId: e.invocationId,
4278
4596
  reason: "action"
4279
4597
  });
4280
- let r = yo(n.changes);
4598
+ let r = ts(n.changes);
4281
4599
  for (let n of r) {
4282
- let r = bo(n);
4283
- if (r !== void 0 && !uo(await vo(t.store, n.table, r), n.next ?? null)) throw new ye({
4600
+ let r = ns(n);
4601
+ if (r !== void 0 && !qo(await es(t.store, n.table, r), n.next ?? null)) throw new xe({
4284
4602
  invocationId: e.invocationId,
4285
4603
  reason: "conflict"
4286
4604
  });
4287
4605
  }
4288
4606
  let i = {
4289
4607
  invocationId: e.invocationId,
4290
- subject: go(t),
4608
+ subject: Qo(t),
4291
4609
  changes: r,
4292
4610
  crossesAction: !1
4293
4611
  };
4294
- return await ho(t.store, co(i)), await t.store.update("_voltro_undo_log", e.invocationId, { undone: !0 }), { ok: !0 };
4295
- }, wo = async (e, t) => {
4296
- let n = await So(e, t);
4297
- if (!_o(n.undone)) return { ok: !0 };
4298
- for (let e of yo(n.changes)) {
4299
- let n = bo(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);
4300
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);
4301
4619
  }
4302
4620
  return await t.store.update("_voltro_undo_log", e.invocationId, { undone: !1 }), { ok: !0 };
4303
- }, To = (e = process.env) => {
4621
+ }, ss = (e = process.env) => {
4304
4622
  let t = (e.VOLTRO_TIMELINE ?? "").toLowerCase();
4305
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";
4306
- }, Eo = /pass(word)?|secret|token|api[_-]?key|authorization|cookie|ssn|credit[_-]?card|card[_-]?number|cvv|encrypted/i, Do = "«redacted»", Oo = (e) => {
4624
+ }, cs = /pass(word)?|secret|token|api[_-]?key|authorization|cookie|ssn|credit[_-]?card|card[_-]?number|cvv|encrypted/i, ls = "«redacted»", us = (e) => {
4307
4625
  if (e == null) return null;
4308
4626
  let t = {};
4309
- for (let [n, r] of Object.entries(e)) t[n] = Eo.test(n) ? Do : r;
4627
+ for (let [n, r] of Object.entries(e)) t[n] = cs.test(n) ? ls : r;
4310
4628
  return t;
4311
- }, ko = (e) => {
4629
+ }, ds = (e) => {
4312
4630
  let t = e?.id;
4313
4631
  return typeof t == "string" ? t : void 0;
4314
- }, Ao = (e, t) => {
4632
+ }, fs = (e, t) => {
4315
4633
  if (t.op === "insert") {
4316
- let n = ko(t.new);
4634
+ let n = ds(t.new);
4317
4635
  return n === void 0 ? e : e.filter((e) => e.id !== n);
4318
4636
  }
4319
4637
  if (t.op === "update") {
4320
4638
  if (t.old == null) return e;
4321
- let n = ko(t.new) ?? ko(t.old);
4639
+ let n = ds(t.new) ?? ds(t.old);
4322
4640
  return e.map((e) => e.id === n ? t.old : e);
4323
4641
  }
4324
4642
  return t.old == null ? e : [...e, t.old];
4325
- }, jo = class {
4643
+ }, ps = class {
4326
4644
  mode;
4327
4645
  capacity;
4328
4646
  now;
@@ -4342,8 +4660,8 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4342
4660
  ts: this.now(),
4343
4661
  table: e.table,
4344
4662
  op: e.op,
4345
- old: Oo(e.old),
4346
- new: Oo(e.new),
4663
+ old: us(e.old),
4664
+ new: us(e.new),
4347
4665
  tenantId: n
4348
4666
  }), this.ring.length > this.capacity && this.ring.shift(), t;
4349
4667
  }
@@ -4356,23 +4674,23 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4356
4674
  }
4357
4675
  replay(e, t, n) {
4358
4676
  let r = this.ring.filter((n) => n.table === e && n.seq > t).sort((e, t) => t.seq - e.seq), i = n;
4359
- for (let e of r) i = Ao(i, e);
4677
+ for (let e of r) i = fs(i, e);
4360
4678
  return i;
4361
4679
  }
4362
- }, Mo, No = () => (Mo === void 0 && (Mo = new jo(To())), Mo), Po = (e) => {
4363
- Mo = e;
4364
- }, Fo = (e) => {
4365
- let t = No();
4680
+ }, ms, hs = () => (ms === void 0 && (ms = new ps(ss())), ms), gs = (e) => {
4681
+ ms = e;
4682
+ }, _s = (e) => {
4683
+ let t = hs();
4366
4684
  if (t.enabled) try {
4367
4685
  t.record(e);
4368
4686
  } catch {}
4369
- }, Io = /* @__PURE__ */ new Set([
4687
+ }, vs = /* @__PURE__ */ new Set([
4370
4688
  "count",
4371
4689
  "sum",
4372
4690
  "avg",
4373
4691
  "min",
4374
4692
  "max"
4375
- ]), Lo = (e) => {
4693
+ ]), ys = (e) => {
4376
4694
  if (e.joins !== void 0 && e.joins.length > 0) return {
4377
4695
  maintainable: !1,
4378
4696
  reason: "joins are not maintainable in v1"
@@ -4394,7 +4712,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4394
4712
  reason: "v1 maintains exactly one aggregation"
4395
4713
  };
4396
4714
  let t = e.aggregations[0];
4397
- return Io.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) ? {
4398
4716
  maintainable: !1,
4399
4717
  reason: `op '${t.op}' requires a column`
4400
4718
  } : {
@@ -4408,7 +4726,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4408
4726
  maintainable: !1,
4409
4727
  reason: `op '${t.op}' is not maintainable`
4410
4728
  };
4411
- }, Ro = "\0", $ = (e, t) => t === void 0 || t.length === 0 ? "" : t.map((t) => JSON.stringify(e[t] ?? null)).join(Ro), zo = (e, t) => t === void 0 ? 0 : Number(e[t] ?? 0), Bo = (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) => {
4412
4730
  switch (e.op) {
4413
4731
  case "count": return t.count;
4414
4732
  case "sum": return t.sum ?? 0;
@@ -4416,10 +4734,10 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4416
4734
  case "min":
4417
4735
  case "max": return t.count > 0 ? t.extreme ?? null : null;
4418
4736
  }
4419
- }, Vo = (e, t) => {
4737
+ }, Cs = (e, t) => {
4420
4738
  let n = /* @__PURE__ */ new Map();
4421
4739
  for (let r of t) {
4422
- let t = $(r, e.groupBy), i = n.get(t), a = zo(r, e.column);
4740
+ let t = $(r, e.groupBy), i = n.get(t), a = xs(r, e.column);
4423
4741
  if (i === void 0) n.set(t, {
4424
4742
  count: 1,
4425
4743
  ...e.op === "sum" || e.op === "avg" ? { sum: a } : {},
@@ -4435,10 +4753,10 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4435
4753
  }
4436
4754
  }
4437
4755
  return n;
4438
- }, Ho = (e, t) => [...t.entries()].map(([t, n]) => ({
4756
+ }, ws = (e, t) => [...t.entries()].map(([t, n]) => ({
4439
4757
  groupKey: t,
4440
- value: Bo(e, n)
4441
- })), Uo = (e, t, n) => {
4758
+ value: Ss(e, n)
4759
+ })), Ts = (e, t, n) => {
4442
4760
  let r = new Map(t), i = /* @__PURE__ */ new Set(), a = (t) => {
4443
4761
  let n = $(t, e.groupBy), a = r.get(n);
4444
4762
  if (a === void 0) return;
@@ -4447,7 +4765,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4447
4765
  r.delete(n);
4448
4766
  return;
4449
4767
  }
4450
- let s = zo(t, e.column);
4768
+ let s = xs(t, e.column);
4451
4769
  e.op === "min" || e.op === "max" ? (a.extreme !== void 0 && s === a.extreme && i.add(n), r.set(n, {
4452
4770
  count: o,
4453
4771
  ...a.extreme === void 0 ? {} : { extreme: a.extreme }
@@ -4456,7 +4774,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4456
4774
  ...e.op === "sum" || e.op === "avg" ? { sum: (a.sum ?? 0) - s } : {}
4457
4775
  });
4458
4776
  }, o = (t) => {
4459
- let n = $(t, e.groupBy), i = r.get(n), a = zo(t, e.column);
4777
+ let n = $(t, e.groupBy), i = r.get(n), a = xs(t, e.column);
4460
4778
  if (i === void 0) {
4461
4779
  r.set(n, {
4462
4780
  count: 1,
@@ -4476,15 +4794,15 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4476
4794
  state: r,
4477
4795
  rescanGroups: [...i]
4478
4796
  };
4479
- }, Wo = (e, t, n, r) => {
4797
+ }, Es = (e, t, n, r) => {
4480
4798
  if (n.length === 0) return t;
4481
- let i = new Set(n), a = Vo(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);
4482
4800
  for (let e of i) {
4483
4801
  let t = a.get(e);
4484
4802
  t === void 0 ? o.delete(e) : o.set(e, t);
4485
4803
  }
4486
4804
  return o;
4487
- }, Go = class {
4805
+ }, Ds = class {
4488
4806
  shape;
4489
4807
  state = /* @__PURE__ */ new Map();
4490
4808
  groups = /* @__PURE__ */ new Map();
@@ -4492,7 +4810,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4492
4810
  this.shape = e;
4493
4811
  }
4494
4812
  seed(e) {
4495
- this.state = Vo(this.shape, e), this.groups.clear();
4813
+ this.state = Cs(this.shape, e), this.groups.clear();
4496
4814
  for (let t of e) {
4497
4815
  let e = $(t, this.shape.groupBy);
4498
4816
  this.groups.has(e) || this.groups.set(e, this.groupValues(t));
@@ -4504,14 +4822,14 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4504
4822
  let e = $(t, this.shape.groupBy);
4505
4823
  this.groups.has(e) || this.groups.set(e, this.groupValues(t));
4506
4824
  }
4507
- let n = Uo(this.shape, this.state, e);
4825
+ let n = Ts(this.shape, this.state, e);
4508
4826
  this.state = n.state;
4509
4827
  for (let e of this.groups.keys()) this.state.has(e) || this.groups.delete(e);
4510
4828
  return n.rescanGroups;
4511
4829
  }
4512
4830
  resolveRescan(e, t) {
4513
4831
  if (e.length === 0) return;
4514
- this.state = Wo(this.shape, this.state, e, t);
4832
+ this.state = Es(this.shape, this.state, e, t);
4515
4833
  let n = new Set(e);
4516
4834
  for (let e of t) {
4517
4835
  let t = $(e, this.shape.groupBy);
@@ -4520,7 +4838,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4520
4838
  for (let e of n) this.state.has(e) || this.groups.delete(e);
4521
4839
  }
4522
4840
  materialize() {
4523
- return Ho(this.shape, this.state).map((e) => ({
4841
+ return ws(this.shape, this.state).map((e) => ({
4524
4842
  groupKey: e.groupKey,
4525
4843
  group: this.groups.get(e.groupKey) ?? {},
4526
4844
  value: e.value
@@ -4533,70 +4851,19 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4533
4851
  for (let r of t) n[r] = e[r];
4534
4852
  return n;
4535
4853
  }
4536
- }, Ko = "admin:full", qo = class extends I.TaggedError()("AccessDenied", {
4537
- action: I.String,
4538
- resourceType: I.String,
4539
- resourceId: I.String
4540
- }) {}, Jo = /* @__PURE__ */ new Map(), Yo = (e) => {
4541
- if (typeof e.resourceType != "string" || e.resourceType.length === 0) throw Error("defineResourcePolicy: a non-empty `resourceType` is required");
4542
- if (e.actions === void 0 || Object.keys(e.actions).length === 0) throw Error(`resource policy '${e.resourceType}': at least one action is required`);
4543
- if (Jo.has(e.resourceType)) throw Error(`resource policy '${e.resourceType}' is already registered — types must be unique`);
4544
- return Jo.set(e.resourceType, e), e;
4545
- }, Xo = (e) => Jo.get(e), Zo = () => [...Jo.values()], Qo = () => Jo.clear(), $o = () => Zo().map((e) => {
4546
- let t = /* @__PURE__ */ new Set();
4547
- for (let n of Object.values(e.actions)) for (let e of n) t.add(e);
4548
- for (let [n, r] of Object.entries(e.implies ?? {})) {
4549
- t.add(n);
4550
- for (let e of r) t.add(e);
4551
- }
4552
- return {
4553
- resourceType: e.resourceType,
4554
- actions: e.actions,
4555
- relations: [...t],
4556
- implies: e.implies ?? {}
4557
- };
4558
- }), es = (e, t) => {
4559
- let n = new Set(e);
4560
- if (t === void 0) return n;
4561
- let r = [...e];
4562
- for (; r.length > 0;) {
4563
- let e = r.pop();
4564
- for (let i of t[e] ?? []) n.has(i) || (n.add(i), r.push(i));
4565
- }
4566
- return n;
4567
- }, ts = (e, t, n, r) => e.id === null ? /* @__PURE__ */ new Set() : es(n.filter((n) => n.subjectId === e.id && n.resourceType === t.type && n.resourceId === t.id).map((e) => e.relation), r.implies), ns = (e, t, n, r) => {
4568
- if (e.scopes?.includes("admin:full")) return !0;
4569
- if (e.id === null || n.tenantId != null && e.tenantId !== n.tenantId) return !1;
4570
- let i = r.policy.actions[t];
4571
- if (i === void 0 || i.length === 0) return !1;
4572
- let a = ts(e, n, r.tuples, r.policy);
4573
- return i.some((e) => a.has(e));
4574
- }, rs = (e, t, n, r) => {
4575
- if (!ns(e, t, n, r)) throw new qo({
4576
- action: t,
4577
- resourceType: n.type,
4578
- resourceId: n.id
4579
- });
4580
- }, is = (e, t, n, r, i) => r.filter((r) => ns(e, t, {
4581
- type: n,
4582
- id: r.id,
4583
- ...r.tenantId === void 0 ? {} : { tenantId: r.tenantId }
4584
- }, i)), as = (e, t) => {
4585
- let n = new Set(t.map((e) => e.id));
4586
- return e.filter((e) => !n.has(e.id)).map((e) => e.id);
4587
- }, os = E("_voltro_rebac_tuples", {
4854
+ }, Os = T("_voltro_rebac_tuples", {
4588
4855
  id: v({ prefix: "rbct" }),
4589
- subjectId: D(),
4590
- relation: D(),
4591
- resourceType: D(),
4592
- resourceId: D(),
4593
- tenantId: D().nullable(),
4594
- createdAt: O().default("now")
4856
+ subjectId: E(),
4857
+ relation: E(),
4858
+ resourceType: E(),
4859
+ resourceId: E(),
4860
+ tenantId: E().nullable(),
4861
+ createdAt: D().default("now")
4595
4862
  }).index([
4596
4863
  "subjectId",
4597
4864
  "resourceType",
4598
4865
  "resourceId"
4599
- ]).reactive(), ss = async (e, n, r, i) => n === null ? [] : (await e.query({
4866
+ ]).reactive(), ks = async (e, n, r, i) => n === null ? [] : (await e.query({
4600
4867
  table: "_voltro_rebac_tuples",
4601
4868
  predicate: t(u("subjectId", n), u("resourceType", r), u("resourceId", i)),
4602
4869
  order: [],
@@ -4608,16 +4875,16 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4608
4875
  relation: e.relation,
4609
4876
  resourceType: e.resourceType,
4610
4877
  resourceId: e.resourceId
4611
- })), cs = (e) => ({
4878
+ })), As = (e) => ({
4612
4879
  id: e.id,
4613
4880
  tenantId: e.tenantId,
4614
4881
  ...e.scopes === void 0 ? {} : { scopes: e.scopes }
4615
- }), ls = (e, t) => {
4616
- let n = t.getPolicy ?? Xo;
4882
+ }), js = (e, t) => {
4883
+ let n = t.getPolicy ?? la;
4617
4884
  return (r, i) => {
4618
4885
  let a = e[i.tag];
4619
4886
  if (a === void 0) return r;
4620
- let o = n(a.resourceType), s = (e) => j.fail(new qo({
4887
+ let o = n(a.resourceType), s = (e) => j.fail(new oa({
4621
4888
  action: a.action,
4622
4889
  resourceType: a.resourceType,
4623
4890
  resourceId: e
@@ -4625,17 +4892,17 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4625
4892
  if (o === void 0) return s("");
4626
4893
  let c = a.resourceId(i.input);
4627
4894
  if (c === null || c === "") return s("");
4628
- let l = cs(i.subject), u = {
4895
+ let l = As(i.subject), u = {
4629
4896
  type: a.resourceType,
4630
4897
  id: c,
4631
4898
  tenantId: i.subject.tenantId
4632
4899
  };
4633
- return j.flatMap(j.promise(async () => t.loadTuples(l.id, a.resourceType, c)), (e) => ns(l, a.action, u, {
4900
+ return j.flatMap(j.promise(async () => t.loadTuples(l.id, a.resourceType, c)), (e) => ha(l, a.action, u, {
4634
4901
  policy: o,
4635
4902
  tuples: e
4636
4903
  }) ? r : s(c));
4637
4904
  };
4638
- }, us = async (e, n, r) => n === null ? [] : (await e.query({
4905
+ }, Ms = async (e, n, r) => n === null ? [] : (await e.query({
4639
4906
  table: "_voltro_rebac_tuples",
4640
4907
  predicate: t(u("subjectId", n), u("resourceType", r)),
4641
4908
  order: [],
@@ -4647,18 +4914,18 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4647
4914
  relation: e.relation,
4648
4915
  resourceType: e.resourceType,
4649
4916
  resourceId: e.resourceId
4650
- })), ds = (e) => {
4651
- let t = e.getPolicy ?? Xo;
4917
+ })), Ns = (e) => {
4918
+ let t = e.getPolicy ?? la;
4652
4919
  return async (n, r, i, a) => {
4653
4920
  let o = t(r);
4654
4921
  if (o === void 0) return [];
4655
- let s = cs(n);
4656
- return is(s, i, r, a, {
4922
+ let s = As(n);
4923
+ return _a(s, i, r, a, {
4657
4924
  policy: o,
4658
4925
  tuples: await e.loadSubjectTuples(s.id, r)
4659
4926
  });
4660
4927
  };
4661
- }, fs = (e) => {
4928
+ }, Ps = (e) => {
4662
4929
  if (typeof e.name != "string" || e.name.length === 0) throw Error("defineReaction: a non-empty `name` is required");
4663
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`);
4664
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', … }`);
@@ -4666,14 +4933,14 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4666
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`);
4667
4934
  if (e.guards.costBudgetUsd !== void 0 && e.guards.costBudgetUsd < 0) throw Error(`reaction '${e.name}': guards.costBudgetUsd must be >= 0`);
4668
4935
  return e;
4669
- }, ps = (e, t) => e === void 0 ? !0 : Array.isArray(e) ? e.includes(t) : e === t, ms = (e) => e.new?.tenantId ?? e.old?.tenantId ?? null, hs = 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 {
4670
4937
  hits = /* @__PURE__ */ new Map();
4671
4938
  allow(e, t, n, r) {
4672
4939
  let i = r - n, a = (this.hits.get(e) ?? []).filter((e) => e > i);
4673
4940
  return a.length >= t ? (this.hits.set(e, a), !1) : (a.push(r), this.hits.set(e, a), !0);
4674
4941
  }
4675
- }, gs = async (e, t, n) => {
4676
- if (t.table !== e.watch.table || !ps(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";
4677
4944
  if (e.when !== void 0 && !e.when(t)) return "skipped-when";
4678
4945
  let r = `${e.name}:${e.guards.dedupeKey(t)}`;
4679
4946
  if (await n.dedupe.has(r)) return "skipped-dedupe";
@@ -4682,26 +4949,26 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4682
4949
  let t = n.now?.() ?? Date.now();
4683
4950
  if (!n.rateLimiter.allow(e.name, i.limit, i.windowMs, t)) return "skipped-ratelimit";
4684
4951
  }
4685
- let a = ms(t);
4952
+ let a = Is(t);
4686
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, {
4687
4954
  id: a,
4688
4955
  via: "agent"
4689
4956
  }), await n.dedupe.add(r), "acted");
4690
- }, _s = E("_voltro_wakeups", {
4957
+ }, zs = T("_voltro_wakeups", {
4691
4958
  id: v({ prefix: "wakeup" }),
4692
- tenantId: D(),
4693
- kind: D(),
4694
- refId: D(),
4695
- wakeAt: O(),
4696
- status: D()
4697
- }).index(["status", "wakeAt"]).index(["tenantId"]), vs = async (e) => {
4698
- let t = e.now?.() ?? /* @__PURE__ */ new Date(), n = await Ra(e.store, t, e.batchLimit ?? 100);
4959
+ tenantId: E(),
4960
+ kind: E(),
4961
+ refId: E(),
4962
+ wakeAt: D(),
4963
+ status: E()
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);
4699
4966
  if (n.length === 0) return 0;
4700
4967
  let r = 0;
4701
- for (let t of n) if (await Pa(e.store, t)) try {
4968
+ for (let t of n) if (await _o(e.store, t)) try {
4702
4969
  await e.adapter.wake(t), r++;
4703
4970
  } catch (n) {
4704
- await Fa(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", {
4705
4972
  tenantId: t.tenantId,
4706
4973
  kind: t.kind,
4707
4974
  refId: t.refId,
@@ -4709,11 +4976,11 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4709
4976
  });
4710
4977
  }
4711
4978
  return r > 0 && e.log?.info("wake: woke due deployments", { count: r }), r;
4712
- }, ys = (e, t = 1e3) => {
4979
+ }, Vs = (e, t = 1e3) => {
4713
4980
  let n = !1, r, i = async () => {
4714
4981
  if (!n) {
4715
4982
  try {
4716
- await vs(e);
4983
+ await Bs(e);
4717
4984
  } catch (t) {
4718
4985
  e.log?.warn("wake: tick failed", { reason: t instanceof Error ? t.message : String(t) });
4719
4986
  }
@@ -4723,10 +4990,10 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4723
4990
  return i(), { stop: () => {
4724
4991
  n = !0, r !== void 0 && clearTimeout(r);
4725
4992
  } };
4726
- }, bs = (e) => ({ wake: async () => {
4993
+ }, Hs = (e) => ({ wake: async () => {
4727
4994
  await e.start();
4728
- } }), xs = (e) => new Promise((t) => setTimeout(t, e)), Ss = (e) => {
4729
- let t = e.fetchImpl ?? fetch, n = e.now ?? Date.now, r = e.sleep ?? xs, i = e.spawnImpl ?? gt, 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 () => {
4730
4997
  try {
4731
4998
  let n = await t(e.healthUrl);
4732
4999
  return d(n);
@@ -4780,11 +5047,11 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4780
5047
  },
4781
5048
  stop: m
4782
5049
  };
4783
- }, Cs = async (e) => {
5050
+ }, Gs = async (e) => {
4784
5051
  if (e.signals.connectedClients() > 0 || e.signals.inFlightRequests() > 0 || e.signals.activeWorkflowExecutions() > 0) return !1;
4785
- let t = (e.now?.() ?? /* @__PURE__ */ new Date()).getTime() + (e.wakeLookaheadMs ?? 3e4), n = await za(e.store);
5052
+ let t = (e.now?.() ?? /* @__PURE__ */ new Date()).getTime() + (e.wakeLookaheadMs ?? 3e4), n = await So(e.store);
4786
5053
  return !(n !== null && n.wakeAt.getTime() <= t);
4787
- }, ws = (e, t = Date.now) => {
5054
+ }, Ks = (e, t = Date.now) => {
4788
5055
  let n;
4789
5056
  return {
4790
5057
  update: (r) => {
@@ -4796,7 +5063,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4796
5063
  n = void 0;
4797
5064
  }
4798
5065
  };
4799
- }, Ts = () => {
5066
+ }, qs = () => {
4800
5067
  let e = 0, t = 0;
4801
5068
  return {
4802
5069
  onRequestStart: () => {
@@ -4814,8 +5081,8 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4814
5081
  inFlightRequests: () => e,
4815
5082
  openConnections: () => t
4816
5083
  };
4817
- }, Es = (e) => ({ run: async (t) => (e.onActivity?.(), await e.ensureAwake(), t()) }), Ds = (e, t, n, r) => new Promise((i, a) => {
4818
- let o = Ue.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({
4819
5086
  host: n,
4820
5087
  port: r,
4821
5088
  method: e.method,
@@ -4825,8 +5092,8 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4825
5092
  t.writeHead(e.statusCode ?? 502, e.headers), e.pipe(t), e.on("end", i), e.on("error", a);
4826
5093
  });
4827
5094
  o.on("error", a), e.pipe(o);
4828
- }), Os = (e, t, n, r, i) => new Promise((a, o) => {
4829
- let s = Ue.request({
5095
+ }), Xs = (e, t, n, r, i) => new Promise((a, o) => {
5096
+ let s = Ge.request({
4830
5097
  host: r,
4831
5098
  port: i,
4832
5099
  method: e.method,
@@ -4840,21 +5107,21 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4840
5107
  };
4841
5108
  t.on("close", s), r.on("close", s), r.on("error", o);
4842
5109
  }), s.on("error", o), s.end();
4843
- }), ks = (e) => {
4844
- let t = Es({
5110
+ }), Zs = (e) => {
5111
+ let t = Js({
4845
5112
  ensureAwake: () => e.supervisor.start(),
4846
5113
  ...e.onActivity === void 0 ? {} : { onActivity: e.onActivity }
4847
- }), n = e.activity, r = Ue.createServer((r, i) => {
4848
- n?.onRequestStart(), i.on("close", () => n?.onRequestEnd()), t.run(() => Ds(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) => {
4849
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");
4850
5117
  });
4851
5118
  });
4852
5119
  return r.on("upgrade", (r, i, a) => {
4853
- n?.onConnect(), i.on("close", () => n?.onDisconnect()), t.run(() => Os(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) => {
4854
5121
  e.log?.warn("wake-router: upgrade proxy failed", { reason: t instanceof Error ? t.message : String(t) }), i.destroy();
4855
5122
  });
4856
5123
  }), r;
4857
- }, As = async (e) => {
5124
+ }, Qs = async (e) => {
4858
5125
  try {
4859
5126
  return (await e.query({
4860
5127
  table: "_voltro_workflow_runs",
@@ -4871,15 +5138,15 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4871
5138
  } catch {
4872
5139
  return 0;
4873
5140
  }
4874
- }, js = async (e) => {
4875
- let t = bs(e.supervisor), n = await vs({
5141
+ }, $s = async (e) => {
5142
+ let t = Hs(e.supervisor), n = await Bs({
4876
5143
  store: e.store,
4877
5144
  adapter: t,
4878
5145
  ...e.now === void 0 ? {} : { now: e.now },
4879
5146
  ...e.log === void 0 ? {} : { log: e.log }
4880
5147
  });
4881
5148
  n > 0 && e.idleGate.reset();
4882
- let r = await Cs({
5149
+ let r = await Gs({
4883
5150
  store: e.store,
4884
5151
  signals: e.signals,
4885
5152
  ...e.wakeLookaheadMs === void 0 ? {} : { wakeLookaheadMs: e.wakeLookaheadMs },
@@ -4889,12 +5156,12 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4889
5156
  woke: n,
4890
5157
  stopped: i
4891
5158
  };
4892
- }, Ms = async (e) => {
4893
- let t = ws(e.idleGraceMs ?? 6e4), n = e.tickMs ?? 1e3, r = Ts(), 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 ?? {
4894
5161
  connectedClients: () => r.openConnections(),
4895
5162
  inFlightRequests: () => r.inFlightRequests(),
4896
5163
  activeWorkflowExecutions: () => i
4897
- }, s = ks({
5164
+ }, s = Zs({
4898
5165
  supervisor: e.supervisor,
4899
5166
  targetHost: e.targetHost,
4900
5167
  targetPort: e.targetPort,
@@ -4913,7 +5180,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4913
5180
  let l = !1, u, d = e.firedRetentionMs ?? 10 * 6e4, f = 0, p = async () => {
4914
5181
  if (!l) {
4915
5182
  try {
4916
- if (a && (i = await As(e.store)), await js({
5183
+ if (a && (i = await Qs(e.store)), await $s({
4917
5184
  store: e.store,
4918
5185
  supervisor: e.supervisor,
4919
5186
  signals: o,
@@ -4921,7 +5188,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4921
5188
  ...e.wakeLookaheadMs === void 0 ? {} : { wakeLookaheadMs: e.wakeLookaheadMs },
4922
5189
  ...e.log === void 0 ? {} : { log: e.log }
4923
5190
  }), f++ % 60 == 0) {
4924
- let t = await Va(e.store, { firedOlderThan: new Date(Date.now() - d) });
5191
+ let t = await wo(e.store, { firedOlderThan: new Date(Date.now() - d) });
4925
5192
  t > 0 && e.log?.info("orchestrator: pruned fired wakeups", { count: t });
4926
5193
  }
4927
5194
  } catch (t) {
@@ -4936,14 +5203,14 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4936
5203
  l = !0, u !== void 0 && clearTimeout(u), await new Promise((e) => s.close(() => e()));
4937
5204
  }
4938
5205
  };
4939
- }, Ns = (e) => e, Ps = class extends I.TaggedError()("AnalyticsError", {
5206
+ }, tc = (e) => e, nc = class extends I.TaggedError()("AnalyticsError", {
4940
5207
  provider: I.String,
4941
5208
  operation: I.String,
4942
5209
  cause: I.String
4943
- }) {}, Fs = class extends I.TaggedError()("AnalyticsCapabilityNotSupported", {
5210
+ }) {}, rc = class extends I.TaggedError()("AnalyticsCapabilityNotSupported", {
4944
5211
  provider: I.String,
4945
5212
  capability: I.String
4946
- }) {}, Is = class extends Pe.Tag("@voltro/AnalyticsSink")() {}, Ls = (e, t) => ({
5213
+ }) {}, ic = class extends Ie.Tag("@voltro/AnalyticsSink")() {}, ac = (e, t) => ({
4947
5214
  info: e.info,
4948
5215
  track: (n) => e.track(n.tenantId === void 0 ? {
4949
5216
  ...n,
@@ -4962,20 +5229,20 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4962
5229
  tenantId: t
4963
5230
  } : n),
4964
5231
  ...e.mirror === void 0 ? {} : { mirror: e.mirror }
4965
- }), Rs = () => j.gen(function* () {
4966
- let e = yield* Is, t = yield* j.serviceOption(ve), n = P.match(t, {
5232
+ }), oc = () => j.gen(function* () {
5233
+ let e = yield* ic, t = yield* j.serviceOption(be), n = P.match(t, {
4967
5234
  onNone: () => null,
4968
5235
  onSome: (e) => e.tenantId ?? null
4969
5236
  });
4970
- return n === null ? e : Ls(e, n);
4971
- }), zs = "noop", Bs = () => {
4972
- let e = (e) => j.fail(new Fs({
4973
- provider: zs,
5237
+ return n === null ? e : ac(e, n);
5238
+ }), sc = "noop", cc = () => {
5239
+ let e = (e) => j.fail(new rc({
5240
+ provider: sc,
4974
5241
  capability: e
4975
5242
  }));
4976
5243
  return {
4977
5244
  info: {
4978
- provider: zs,
5245
+ provider: sc,
4979
5246
  capabilities: {
4980
5247
  track: !0,
4981
5248
  aggregate: !1,
@@ -4989,8 +5256,8 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
4989
5256
  timeseries: () => e("timeseries"),
4990
5257
  topN: () => e("topN")
4991
5258
  };
4992
- }, Vs = (e) => {
4993
- if (e.length === 0) return Bs();
5259
+ }, lc = (e) => {
5260
+ if (e.length === 0) return cc();
4994
5261
  if (e.length === 1) return e[0];
4995
5262
  let t = {
4996
5263
  provider: "compose",
@@ -5007,7 +5274,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
5007
5274
  discard: !0
5008
5275
  }), r = (t, n) => {
5009
5276
  let r = e.find((e) => e.info.capabilities[t]);
5010
- return r === void 0 ? j.fail(new Fs({
5277
+ return r === void 0 ? j.fail(new rc({
5011
5278
  provider: "compose",
5012
5279
  capability: t
5013
5280
  })) : n(r);
@@ -5030,11 +5297,11 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
5030
5297
  topN: (e) => r("topN", (t) => t.topN(e)),
5031
5298
  ...a === void 0 ? {} : { mirror: a }
5032
5299
  };
5033
- }, Hs = (e) => {
5300
+ }, uc = (e) => {
5034
5301
  let t = e.filter((e) => e.dispose !== void 0);
5035
5302
  return {
5036
5303
  kind: "compose",
5037
- build: (t) => Vs(e.map((e) => e.build(t))),
5304
+ build: (t) => lc(e.map((e) => e.build(t))),
5038
5305
  tables: e.flatMap((e) => e.tables ?? []),
5039
5306
  initialize: (t) => j.forEach(e, (e) => e.initialize ? e.initialize(t) : j.void, {
5040
5307
  concurrency: 1,
@@ -5045,15 +5312,15 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
5045
5312
  discard: !0
5046
5313
  }) } : {}
5047
5314
  };
5048
- }, Us = {
5315
+ }, dc = {
5049
5316
  kind: "noop",
5050
- build: () => Bs()
5051
- }, Ws = {
5317
+ build: () => cc()
5318
+ }, fc = {
5052
5319
  tables: [],
5053
5320
  detach: () => {}
5054
- }, Gs = (e) => {
5321
+ }, pc = (e) => {
5055
5322
  let { store: t, sink: n, log: r } = e, i = n.mirror;
5056
- if (i === void 0 || i.tables.length === 0) return Ws;
5323
+ if (i === void 0 || i.tables.length === 0) return fc;
5057
5324
  let a = e.run ?? ((e) => j.runPromise(e)), o = i.primaryKey ?? "id", s = new Set(i.tables), c = (e) => {
5058
5325
  if (e.op === "delete") {
5059
5326
  let t = e.old;
@@ -5077,11 +5344,11 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
5077
5344
  tables: i.tables,
5078
5345
  detach: l
5079
5346
  };
5080
- }, Ks = (e) => {
5347
+ }, mc = (e) => {
5081
5348
  let t = typeof e.refresh == "string" ? { interval: e.refresh } : e.refresh, n = e.strategy ?? "replace";
5082
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`);
5083
5350
  if (e.incremental !== void 0) {
5084
- let t = Lo({
5351
+ let t = ys({
5085
5352
  aggregations: [{
5086
5353
  op: e.incremental.op,
5087
5354
  ...e.incremental.column === void 0 ? {} : { column: e.incremental.column }
@@ -5103,38 +5370,38 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
5103
5370
  build: e.build,
5104
5371
  ...e.incremental === void 0 ? {} : { incremental: e.incremental }
5105
5372
  };
5106
- }, qs = (e) => typeof e == "object" && !!e && e._voltroAggregate === !0, Js = class extends I.TaggedError()("AggregateStale", {
5373
+ }, hc = (e) => typeof e == "object" && !!e && e._voltroAggregate === !0, gc = class extends I.TaggedError()("AggregateStale", {
5107
5374
  name: I.String,
5108
5375
  ageMs: I.Number,
5109
5376
  maxAgeMs: I.Number
5110
- }) {}, Ys = class extends I.TaggedError()("AggregateNotFound", { name: I.String }) {}, Xs = class extends I.TaggedError()("AggregateError", {
5377
+ }) {}, _c = class extends I.TaggedError()("AggregateNotFound", { name: I.String }) {}, vc = class extends I.TaggedError()("AggregateError", {
5111
5378
  name: I.String,
5112
5379
  operation: I.String,
5113
5380
  cause: I.String
5114
- }) {}, Zs = class extends Pe.Tag("@voltro/AggregateRegistry")() {}, Qs = (e) => j.gen(function* () {
5115
- return (yield* Zs).getHandle(e);
5116
- }), $s = (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) => {
5117
5384
  if (e.crossTenant || !n.has(e.table) || r == null) return e;
5118
5385
  let i = u("tenantId", r);
5119
5386
  return {
5120
5387
  ...e,
5121
5388
  predicate: e.predicate ? t(e.predicate, i) : i
5122
5389
  };
5123
- }, ec = (e, n) => {
5390
+ }, Sc = (e, n) => {
5124
5391
  if (e.includeDeleted || !n.has(e.table)) return e;
5125
- let r = x("deletedAt");
5392
+ let r = S("deletedAt");
5126
5393
  return {
5127
5394
  ...e,
5128
5395
  predicate: e.predicate ? t(e.predicate, r) : r
5129
5396
  };
5130
- }, tc = (e) => j.runPromiseExit(e).then((e) => {
5131
- if (Re.isSuccess(e)) return e.value;
5397
+ }, Cc = (e) => j.runPromiseExit(e).then((e) => {
5398
+ if (Be.isSuccess(e)) return e.value;
5132
5399
  let t = k.failureOption(e.cause);
5133
5400
  throw P.isSome(t) ? t.value : k.squash(e.cause);
5134
- }), nc = (e, t) => e.pipe(j.provideService(ve, t)), rc = (e, t) => {
5135
- let n = Ce(t, e.guards);
5136
- if (n) throw n;
5137
- }, ic = async (e) => {
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));
5403
+ if (r) throw r;
5404
+ }, Ec = async (e) => {
5138
5405
  let t = `${e.kind}.${e.name}`, n = Date.now(), r = "ok";
5139
5406
  try {
5140
5407
  if (e.interceptor) {
@@ -5149,7 +5416,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
5149
5416
  traceId: e.requestContext.traceId,
5150
5417
  ...e.requestContext.spanId === void 0 ? {} : { spanId: e.requestContext.spanId }
5151
5418
  }), r = await j.runPromiseExit(n);
5152
- if (Re.isSuccess(r)) return r.value;
5419
+ if (Be.isSuccess(r)) return r.value;
5153
5420
  throw k.squash(r.cause);
5154
5421
  }
5155
5422
  return await e.runExecutor();
@@ -5163,27 +5430,27 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
5163
5430
  status: r
5164
5431
  });
5165
5432
  }
5166
- }, ac = /* @__PURE__ */ new Set([1213, 1205]), oc = /* @__PURE__ */ new Set([
5433
+ }, Dc = /* @__PURE__ */ new Set([1213, 1205]), Oc = /* @__PURE__ */ new Set([
5167
5434
  "ER_LOCK_DEADLOCK",
5168
5435
  "ER_LOCK_WAIT_TIMEOUT",
5169
5436
  "40001",
5170
5437
  "40P01"
5171
- ]), sc = (e) => {
5438
+ ]), kc = (e) => {
5172
5439
  let t = e;
5173
5440
  for (let e = 0; e < 6 && typeof t == "object" && t; e++) {
5174
5441
  let e = t;
5175
- if (typeof e.errno == "number" && ac.has(e.errno) || typeof e.code == "string" && oc.has(e.code) || typeof e.sqlState == "string" && oc.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;
5176
5443
  t = e.cause;
5177
5444
  }
5178
5445
  return !1;
5179
- }, cc = 3, lc = (e) => new Promise((t) => setTimeout(t, e)), uc = async (e) => {
5446
+ }, Ac = 3, jc = (e) => new Promise((t) => setTimeout(t, e)), Mc = async (e) => {
5180
5447
  for (let t = 1;; t++) try {
5181
5448
  return await e();
5182
5449
  } catch (e) {
5183
- if (t >= cc || !sc(e)) throw e;
5184
- await lc(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));
5185
5452
  }
5186
- }, dc = (e) => (t, n, r) => ic({
5453
+ }, Nc = (e) => (t, n, r) => Ec({
5187
5454
  name: t.descriptor.name,
5188
5455
  kind: "mutation",
5189
5456
  input: n,
@@ -5191,11 +5458,11 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
5191
5458
  ...e.interceptor ? { interceptor: e.interceptor } : {},
5192
5459
  ...e.recordMetric ? { recordMetric: e.recordMetric } : {},
5193
5460
  runExecutor: async () => {
5194
- rc(t.descriptor, r.subject);
5195
- let i = [], a = await uc(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) => {
5196
5463
  let o = e.undoCapture?.(a), s = o ? o.tx : a, c = e.buildContext(r, s, { afterCommit: (e) => {
5197
5464
  i.push(e);
5198
- } }), l = t.executor(n, c), u = j.isEffect(l) ? await e.runEffect(nc(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;
5199
5466
  return o && await o.persist(c.store, {
5200
5467
  tag: t.descriptor.name,
5201
5468
  subject: r.subject,
@@ -5205,34 +5472,44 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
5205
5472
  for (let e of i) await e();
5206
5473
  return a;
5207
5474
  }
5208
- }), fc = (e) => e && typeof e == "object" && "descriptor" in e ? e.descriptor : e, pc = (e) => typeof e == "object" && !!e && !Array.isArray(e) && "table" in e && "order" in e, mc = (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) => {
5209
5476
  let t = e.descriptor.source;
5210
5477
  return t == null ? [] : typeof t == "string" ? [t] : [...t];
5211
- }, hc = (e) => (t, n) => (r) => {
5212
- let i = e.buildContext(r), a = async () => {
5213
- let i = e.buildContext(r), a = t.executor(n, i);
5214
- return j.isEffect(a) ? j.runPromise(e.provideEffect(nc(a, r.subject), i.store)) : fc(await Promise.resolve(a));
5215
- }, o = (n) => {
5216
- let i = fc(n);
5217
- return pc(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) : {
5218
5490
  __voltroComputed: !0,
5219
5491
  value: i,
5220
- dependentTables: mc(t),
5492
+ dependentTables: Ic(t),
5221
5493
  tenantId: r.subject?.tenantId ?? null,
5222
- recompute: a
5494
+ recompute: o
5223
5495
  };
5224
- }, s = () => {
5225
- let a = Ce(r.subject, t.descriptor.guards);
5226
- if (a) return j.fail(a);
5227
- let s = t.executor(n, i);
5228
- return j.isEffect(s) ? e.provideEffect(nc(s, r.subject), i.store).pipe(j.map(o)) : s instanceof Promise ? j.promise(() => s).pipe(j.map(o)) : o(s);
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 = () => {
5500
+ let e = t.descriptor.guards;
5501
+ return !e || e.length === 0 ? c() : Te(r.subject, e, n).pipe(j.flatMap((e) => {
5502
+ if (e) return j.fail(e);
5503
+ let t = c();
5504
+ return j.isEffect(t) ? t : j.succeed(t);
5505
+ }));
5229
5506
  };
5230
- if (!e.interceptor) return s();
5231
- let c = j.suspend(() => {
5232
- let e = s();
5507
+ if (!e.interceptor) return l();
5508
+ let u = j.suspend(() => {
5509
+ let e = l();
5233
5510
  return j.isEffect(e) ? e : j.succeed(e);
5234
5511
  });
5235
- return e.interceptor(c, {
5512
+ return e.interceptor(u, {
5236
5513
  tag: t.descriptor.name,
5237
5514
  kind: "query",
5238
5515
  input: n,
@@ -5240,7 +5517,7 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
5240
5517
  traceId: r.traceId,
5241
5518
  ...r.spanId === void 0 ? {} : { spanId: r.spanId }
5242
5519
  });
5243
- }, gc = (e) => (t, n, r) => ic({
5520
+ }, zc = (e) => (t, n, r) => Ec({
5244
5521
  name: t.descriptor.name,
5245
5522
  kind: "action",
5246
5523
  input: n,
@@ -5248,16 +5525,16 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
5248
5525
  ...e.interceptor ? { interceptor: e.interceptor } : {},
5249
5526
  ...e.recordMetric ? { recordMetric: e.recordMetric } : {},
5250
5527
  runExecutor: async () => {
5251
- rc(t.descriptor, r.subject);
5528
+ await Tc(t.descriptor, r.subject, n);
5252
5529
  let i = e.buildContext(r), a = t.executor(n, i);
5253
- return j.isEffect(a) ? e.runEffect(nc(a, r.subject), i.store) : a;
5530
+ return j.isEffect(a) ? e.runEffect(wc(a, r.subject), i.store) : a;
5254
5531
  }
5255
- }), _c = (e) => e instanceof Date ? e.toISOString() : typeof e == "string" && e.length > 0 ? e : null, vc = (e) => typeof e == "string" && e.length > 0 ? e : null, yc = [
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 = [
5256
5533
  "updatedAt",
5257
5534
  "createdAt",
5258
5535
  "updatedBy",
5259
5536
  "createdBy"
5260
- ], bc = (e) => yc.some((t) => t in e), xc = (e, t, n) => {
5537
+ ], Uc = (e) => Hc.some((t) => t in e), Wc = (e, t, n) => {
5261
5538
  let r = {
5262
5539
  table: t.table,
5263
5540
  id: t.id,
@@ -5272,14 +5549,14 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
5272
5549
  found: !1
5273
5550
  };
5274
5551
  let i = t.column === void 0 ? void 0 : e[t.column];
5275
- if (!bc(e)) return {
5552
+ if (!Uc(e)) return {
5276
5553
  ...r,
5277
5554
  value: i,
5278
5555
  lastWrite: null,
5279
5556
  attribution: "none",
5280
5557
  found: !0
5281
5558
  };
5282
- let a = vc(e.updatedBy) ?? vc(e.createdBy), o = _c(e.updatedAt) ?? _c(e.createdAt);
5559
+ let a = Vc(e.updatedBy) ?? Vc(e.createdBy), o = Bc(e.updatedAt) ?? Bc(e.createdAt);
5283
5560
  return {
5284
5561
  ...r,
5285
5562
  value: i,
@@ -5291,12 +5568,12 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
5291
5568
  attribution: "audit",
5292
5569
  found: !0
5293
5570
  };
5294
- }, Sc = (e, t) => {
5571
+ }, Gc = (e, t) => {
5295
5572
  let n = e.map((e) => {
5296
5573
  let n = e.newValue ?? e.value, r = t.column !== void 0 && n && typeof n == "object" ? n[t.column] : e.newValue ?? e.value;
5297
5574
  return {
5298
- actor: { id: vc(e.actor) ?? vc(e.changedBy) },
5299
- at: _c(e.at) ?? _c(e.changedAt),
5575
+ actor: { id: Vc(e.actor) ?? Vc(e.changedBy) },
5576
+ at: Bc(e.at) ?? Bc(e.changedAt),
5300
5577
  ...e.traceId === void 0 ? {} : { traceId: e.traceId },
5301
5578
  value: r
5302
5579
  };
@@ -5311,12 +5588,12 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
5311
5588
  history: n,
5312
5589
  found: n.length > 0
5313
5590
  };
5314
- }, Cc = (e) => {
5591
+ }, Kc = (e) => {
5315
5592
  let t = e.new?.id;
5316
5593
  if (typeof t == "string") return t;
5317
5594
  let n = e.old?.id;
5318
5595
  return typeof n == "string" ? n : void 0;
5319
- }, wc = (e) => {
5596
+ }, qc = (e) => {
5320
5597
  let t = {};
5321
5598
  if (e.op === "insert") for (let [n, r] of Object.entries(e.new ?? {})) t[n] = {
5322
5599
  from: void 0,
@@ -5336,11 +5613,11 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
5336
5613
  return {
5337
5614
  table: e.table,
5338
5615
  op: e.op,
5339
- id: Cc(e),
5616
+ id: Kc(e),
5340
5617
  fields: t
5341
5618
  };
5342
- }, Tc = (e) => {
5343
- let t = e.map(wc);
5619
+ }, Jc = (e) => {
5620
+ let t = e.map(qc);
5344
5621
  return {
5345
5622
  rows: t,
5346
5623
  summary: {
@@ -5349,21 +5626,21 @@ var q = /* @__PURE__ */ new Map(), jn = (e, t) => {
5349
5626
  deletes: t.filter((e) => e.op === "delete").length
5350
5627
  }
5351
5628
  };
5352
- }, Ec = class extends Error {
5629
+ }, Yc = class extends Error {
5353
5630
  constructor() {
5354
5631
  super("voltro:preview-rollback"), this.name = "PreviewRollback";
5355
5632
  }
5356
- }, Dc = async (e, t) => {
5633
+ }, Xc = async (e, t) => {
5357
5634
  let n, r = !1;
5358
5635
  try {
5359
5636
  await e.transactional(async (e) => {
5360
- throw n = await t(e), r = !0, new Ec();
5637
+ throw n = await t(e), r = !0, new Yc();
5361
5638
  });
5362
5639
  } catch (e) {
5363
- if (!(e instanceof Ec)) throw e;
5640
+ if (!(e instanceof Yc)) throw e;
5364
5641
  }
5365
5642
  if (!r) throw Error("preview: handler did not complete");
5366
5643
  return n;
5367
- }, Oc = "framework-runtime";
5644
+ }, Zc = "framework-runtime";
5368
5645
  //#endregion
5369
- export { ii as API_KEYS_TABLE, qo as AccessDenied, Xs as AggregateError, Go as AggregateMaintainer, Ys as AggregateNotFound, Zs as AggregateRegistry, Js as AggregateStale, Fs as AnalyticsCapabilityNotSupported, Ps as AnalyticsError, Is as AnalyticsSink, ua as CircuitBreaker, ca as CircuitOpen, gr as DEFAULT_MAX_RPC_BODY_BYTES, Qi as DeleteBuilder, yn as Dispatcher, ha as EffectStore, It as InMemoryDataStore, wt as IndexedMatcher, _t as LinearScanMatcher, Be as MetricBoundaries, zs as NOOP_ANALYTICS_PROVIDER, Gi as NoRowFound, Ki as OptimisticLockError, Ko as REBAC_ADMIN_SCOPE, Oc as RUNTIME_NAME, hs as ReactionRateLimiter, Qn as ReplicatedDataStore, Xi as SelectBuilder, ta as StoreOperationFailed, Dt as SubscriptionRegistry, na as TableValidationFailed, ea as TenantScopeViolation, jo as TimelineRecorder, lo as UndoBoundaryError, fo as UndoStack, Zi as UpdateBuilder, Ri as VOLTRO_AUDIT_MIXIN_ID, zi as VOLTRO_SOFT_DELETE_MIXIN_ID, Bi as VOLTRO_TENANT_MIXIN_ID, Nn as _connectionStreamCount, Pn as _resetConnectionSubjectsForTest, os as _voltroRebacTuplesTable, Qa as _voltroScheduleClaimsTable, Za as _voltroScheduleRunsTable, $a as _voltroTracesTable, eo as _voltroUndoLogTable, _s as _voltroWakeupsTable, Fi as _voltroWorkflowEventDeliveriesTable, Pi as _voltroWorkflowEventsTable, gi as apiKeyManagementRoutes, ia as applyDefined, Uo as applyDelta, mo as applyInverse, ho as applyInverses, ec as applySoftDeleteScope, $s as applyTenantScope, Co as applyUndoInvocation, rs as assertCan, Gs as attachAnalyticsMirror, vr as awaitServerListening, En as bindConnectionSubject, hr as bindMutation, sr as bindStream, or as bindSubscription, ir as bindSubscriptionUntyped, Vo as buildIvmState, Tc as buildPreview, ls as buildRebacInterceptor, ds as buildRebacReadFilter, Kn as buildSubjectKey, Cr as buildTracingLayer, Rr as cachedBackend, ns as can, ja as cancelWakeup, Lo as classifyShape, Qo as clearResourcePolicies, i as clearRetentions, pa as clearSystemStoreHandle, Ea as compileCron, Hs as composeAnalytics, Vs as composeAnalyticsSinks, Fn as connectionSubjectsSnapshot, As as countRunningWorkflows, pn as counter, Zn as currentRoutingContext, Hn as currentTraceContext, pi as dataStoreApiKeyStore, Xr as dataStoreIdempotencyStore, ti as dataStoreKvStore, Ks as defineAggregate, ki as defineEventTrigger, fs as defineReaction, Yo as defineResourcePolicy, Ta as defineSchedule, Ns as defineSubscriber, Vr as deriveKey, wc as diffChange, Ra as dueWakeups, ts as effectiveRelations, Wi as emptySchemaRegistry, Mr as envSecretsBackend, zn as externalSpanFromTraceparent, Rt as extractDbCause, Et as fingerprintFor, Ln as formatTraceparent, po as forwardChangeFromCdc, mi as frameworkApiKeyStrategy, mn as gauge, oi as generateApiKeyToken, Dn as getConnectionSubject, Kr as getFieldCipher, Xo as getResourcePolicy, No as getTimelineRecorder, $ as groupKeyOf, hn as histogramMetric, Sc as historyProvenance, zr as httpSecretsBackend, mt as inspectWorkflow, Mn as interruptConnectionStreams, so as invertChange, qs as isAggregateDefinition, zt as isForeignKeyViolation, Cs as isIdleNow, fr as isInfraError, uo as isSafeToApply, Ca as isScheduleDefinition, Ai as isWorkflowEventTriggerDefinition, Bo as ivmValue, xc as lastWriteProvenance, Zo as listResourcePolicies, C as listRetentions, ss as loadResourceTuples, us as loadSubjectTuples, ya as localityAwareSelector, gc as makeActionRunner, Wa as makeAdvisoryLockCoordinator, Hr as makeAesCipher, li as makeApiKeyService, Bt as makeAppAccess, ni as makeAsyncKv, jr as makeBufferingSpanProcessor, Xa as makeCoordinatedScheduler, va as makeEffectStoreLayer, Ii as makeEventsFacade, Ur as makeFieldCipher, $i as makeFluentStore, ws as makeIdleGate, Ti as makeLazyWorkflowFacade, dc as makeMutationRunner, Ci as makePostCommitWorkflowFacade, bs as makeProcessAdapter, hc as makeQueryDescriptorProducer, Ts as makeRouterActivity, Vi as makeSchemaRegistry, ao as makeUndoCapture, Es as makeWakeGate, ks as makeWakeProxyServer, Si as makeWorkflowFacade, wi as makeWorkflowFacadeWithCallerContext, Ei as makeWorkflowHandlers, Di as makeWorkflowLayers, vi as makeWorkflowRunHandle, Ma as markWakeupFired, Ho as materializeIvm, ui as memoryApiKeyStore, xa as memoryReplicationAdapter, Gn as memoryRywPositionStore, Da as nextFiring, za as nextWakeup, Ss as nodeProcessSupervisor, Bs as noopAnalytics, Us as noopAnalyticsSpec, ri as noopKv, kn as onBindConnectionSubject, Rn as parseTraceparent, Un as powerOfTwoSelector, Dc as previewInRollback, Va as pruneWakeups, $o as rebacPolicyGraph, cn as recordSample, fn as recordSubscriptionActive, un as recordSubscriptionDelivery, Fo as recordTimelineEvent, Oo as redactRow, qn as redisRywPositionStore, wo as redoUndoInvocation, jn as registerConnectionStream, re as registerRetention, Aa as registerWakeup, Fa as releaseWakeup, Wn as replicaHealth, Fr as resetSecretsBackend, ba as resolveCurrentRegion, Vt as resolveDependentTables, Wo as resolveRescan, Ir as resolveSecret, Lr as resolveSecretSync, Br as resolveSecretsBackend, To as resolveTimelineMode, ae as retentionTtlMsFromEnv, Ao as reverseEventOverRows, as as revokedIds, ma as runAsSystem, js as runOrchestratorTick, tc as runProvidedEffect, gs as runReaction, Ms as runSingleNodeOrchestrator, ys as runWakeLoop, Xn as runWithRoutingContext, Vn as runWithTraceContext, Ya as scheduleCoordinated, Gr as setFieldCipher, Pr as setSecretsBackend, fa as setSystemStoreHandle, Po as setTimelineRecorderForTest, ai as sha256Hex, Ha as singleCoordinator, _n as snapshotMetrics, vn as snapshotMetricsSync, _r as startRpcServer, Ka as startScheduler, se as sweepRetention, co as synthesizeInverse, Li as tracingHttpClientLayer, Oi as triggerWorkflow, Pa as tryClaimWakeup, On as unbindConnectionSubject, to as undoCaptureEnabled, xo as undoLogExecutor, Qs as useAggregate, Rs as useAnalytics, is as visibleRows, vs as wakeDueOnce, _i as workflowToRpc, io as wrapCaptureStore, sa 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 };