@voltro/runtime 0.12.0 → 0.13.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
@@ -1883,9 +1883,9 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
1883
1883
  let l = yield* P.tryPromise(() => t.subscribe(e, (e) => {
1884
1884
  c.single(e);
1885
1885
  }, n, r, i, a, o, s)).pipe(P.matchCause({
1886
- onFailure: (e) => (ni(`subscription.${i}`, n.traceId, e), {
1886
+ onFailure: (e) => (ai(`subscription.${i}`, n.traceId, e), {
1887
1887
  ok: !1,
1888
- error: oi(e)
1888
+ error: li(e)
1889
1889
  }),
1890
1890
  onSuccess: (e) => ({
1891
1891
  ok: !0,
@@ -1906,16 +1906,20 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
1906
1906
  });
1907
1907
  yield* P.addFinalizer(() => P.sync(() => e()));
1908
1908
  }
1909
- })), Zr = (e, t, n, r) => z.asyncScoped((i) => P.gen(function* () {
1909
+ })), Zr = /* @__PURE__ */ new Set(), Qr = () => {
1910
+ Zr.clear();
1911
+ }, $r = (e) => {
1912
+ Zr.has(e) || (Zr.add(e), process.stderr.write(`[voltro] ${e}: \`cache:\` is declared but NOT applied — this query's handler returns a computed value, and the snapshot cache only wraps a store read. Every subscriber re-runs the handler. Either return a query descriptor (so the read can be cached), or drop \`cache:\` so the declaration matches what happens.\n`));
1913
+ }, ei = (e, t, n, r) => z.asyncScoped((i) => P.gen(function* () {
1910
1914
  let a = yield* P.tryPromise(() => t.subscribeComputed(e, (e) => {
1911
1915
  i.single(e._tag === "snapshot" ? {
1912
1916
  ...e,
1913
1917
  computed: !0
1914
1918
  } : e);
1915
1919
  }, n, r)).pipe(P.matchCause({
1916
- onFailure: (e) => (ni(`subscription.${r}`, n.traceId, e), {
1920
+ onFailure: (e) => (ai(`subscription.${r}`, n.traceId, e), {
1917
1921
  ok: !1,
1918
- error: oi(e)
1922
+ error: li(e)
1919
1923
  }),
1920
1924
  onSuccess: (e) => ({
1921
1925
  ok: !0,
@@ -1936,16 +1940,16 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
1936
1940
  });
1937
1941
  yield* P.addFinalizer(() => P.sync(() => e()));
1938
1942
  }
1939
- })), Qr = (e, t, n = "rpc.subscription", r, i, a, o) => z.unwrap(P.gen(function* () {
1943
+ })), ti = (e, t, n = "rpc.subscription", r, i, a, o) => z.unwrap(P.gen(function* () {
1940
1944
  let s = yield* ke, c = yield* we, l = yield* Kr;
1941
1945
  Jr(l, n, s);
1942
1946
  let u = Gr(s, l, c.clientId), d = Cr(s.id, c.clientId), f = Dr({ subjectKey: d }, () => vr({
1943
1947
  traceId: u.traceId,
1944
1948
  ...u.spanId === void 0 ? {} : { spanId: u.spanId }
1945
1949
  }, () => Wr(n, () => e(u)))), p = P.isEffect(f) ? yield* f.pipe(P.matchCause({
1946
- onFailure: (e) => (ni(`subscription.${n}`, u.traceId, e), {
1950
+ onFailure: (e) => (ai(`subscription.${n}`, u.traceId, e), {
1947
1951
  ok: !1,
1948
- error: oi(e)
1952
+ error: li(e)
1949
1953
  }),
1950
1954
  onSuccess: (e) => ({
1951
1955
  ok: !0,
@@ -1960,14 +1964,14 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
1960
1964
  error: p.error
1961
1965
  });
1962
1966
  let m = p.value;
1963
- if (Qn(m)) return Zr(m, t, u, n);
1967
+ if (Qn(m)) return i !== void 0 && $r(n), ei(m, t, u, n);
1964
1968
  let h = m, g = r?.(h);
1965
1969
  return Xr(h, t, u, g, n, i === void 0 ? void 0 : {
1966
1970
  key: i.scope === "subject" ? `${i.baseKey}:s:${d}` : `${i.baseKey}:global`,
1967
1971
  ttlMs: i.ttlMs,
1968
1972
  swrMs: i.swrMs
1969
1973
  }, a?.(s), o?.(s) ?? Yr(s));
1970
- }).pipe(P.withSpan(n, { attributes: { "framework.kind": "subscription" } }))), $r = (e, t = "rpc.stream") => z.unwrap(P.gen(function* () {
1974
+ }).pipe(P.withSpan(n, { attributes: { "framework.kind": "subscription" } }))), ni = (e, t = "rpc.stream") => z.unwrap(P.gen(function* () {
1971
1975
  let n = yield* ke, r = yield* we, i = yield* Kr;
1972
1976
  Jr(i, t, n);
1973
1977
  let a = Gr(n, i, r.clientId), o = Wr(t, () => e(a)), s = P.isEffect(o) ? yield* o.pipe(P.orDie) : o;
@@ -1979,25 +1983,25 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
1979
1983
  });
1980
1984
  return yield* P.addFinalizer(() => P.sync(() => t())), s.pipe(z.interruptWhen(qe.await(e)));
1981
1985
  }));
1982
- }).pipe(P.withSpan(t, { attributes: { "framework.kind": "stream" } }))), ei = M({ scope: "voltro:rpc" }), ti = M({ scope: "voltro:http" }), ni = (e, t, n) => {
1986
+ }).pipe(P.withSpan(t, { attributes: { "framework.kind": "stream" } }))), ri = M({ scope: "voltro:rpc" }), ii = M({ scope: "voltro:http" }), ai = (e, t, n) => {
1983
1987
  if (N.isInterruptedOnly(n)) return;
1984
1988
  let r = N.squash(n), i = r?._tag, a = r instanceof Error ? r.message : r?.message ?? String(r), o = N.dieOption(n)._tag === "Some", s = en(r), c = {
1985
1989
  traceId: t,
1986
1990
  ...i === void 0 ? {} : { errorTag: i },
1987
1991
  ...s
1988
1992
  }, l = a === "Failed to execute statement" && typeof s.dbMessage == "string" ? s.dbMessage : a;
1989
- o ? ei.error(`${e} failed: ${l}`, c) : ei.warn(`${e} failed: ${l}`, c);
1990
- }, ri = /* @__PURE__ */ new Set([
1993
+ o ? ri.error(`${e} failed: ${l}`, c) : ri.warn(`${e} failed: ${l}`, c);
1994
+ }, oi = /* @__PURE__ */ new Set([
1991
1995
  "SqlError",
1992
1996
  "ResultLengthMismatch",
1993
1997
  "FieldDecryptionError"
1994
- ]), ii = (e) => typeof e == "object" && !!e && typeof e._tag == "string" && ri.has(e._tag), ai = (e) => ({
1998
+ ]), si = (e) => typeof e == "object" && !!e && typeof e._tag == "string" && oi.has(e._tag), ci = (e) => ({
1995
1999
  _tag: "InternalError",
1996
2000
  message: "internal server error",
1997
2001
  traceId: e
1998
- }), oi = (e) => {
2002
+ }), li = (e) => {
1999
2003
  let t = N.squash(e);
2000
- if (t && typeof t == "object" && t._tag === "UnknownException" && (t = t.error ?? t.cause ?? t), ii(t)) return {
2004
+ if (t && typeof t == "object" && t._tag === "UnknownException" && (t = t.error ?? t.cause ?? t), si(t)) return {
2001
2005
  _tag: "InternalError",
2002
2006
  message: "internal server error"
2003
2007
  };
@@ -2009,7 +2013,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2009
2013
  ...typeof i == "string" ? { _tag: i } : {},
2010
2014
  message: typeof a == "string" ? a : String(t)
2011
2015
  };
2012
- }, si = (e, t, n = "rpc.mutation") => P.gen(function* () {
2016
+ }, ui = (e, t, n = "rpc.mutation") => P.gen(function* () {
2013
2017
  let r = yield* ke, i = yield* we, a = yield* Kr;
2014
2018
  Jr(a, n, r);
2015
2019
  let o = Gr(r, a, i.clientId), s = Dr({ subjectKey: Cr(r.id, i.clientId) }, () => vr({
@@ -2019,8 +2023,8 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2019
2023
  return yield* (P.isEffect(s) ? s : P.tryPromise({
2020
2024
  try: () => Promise.resolve(s),
2021
2025
  catch: (e) => e
2022
- })).pipe(P.tapErrorCause((e) => P.sync(() => ni(n, o.traceId, e))), P.catchIf(ii, () => P.die(ai(o.traceId))), P.annotateLogs(qr(o)));
2023
- }).pipe(P.withSpan(n, { attributes: { "framework.kind": "mutation" } })), ci = 8 * 1024 * 1024, li = (e) => {
2026
+ })).pipe(P.tapErrorCause((e) => P.sync(() => ai(n, o.traceId, e))), P.catchIf(si, () => P.die(ci(o.traceId))), P.annotateLogs(qr(o)));
2027
+ }).pipe(P.withSpan(n, { attributes: { "framework.kind": "mutation" } })), di = 8 * 1024 * 1024, fi = (e) => {
2024
2028
  let t = e.port ?? 4e3, n = e.path ?? "/ws", r = at(), i = (t) => ct.HttpServerRequest.pipe(P.flatMap((t) => P.gen(function* () {
2025
2029
  if (!e.inspectRoute) return H.text("inspect route not configured", { status: 404 });
2026
2030
  let n = {};
@@ -2128,7 +2132,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2128
2132
  headers: n,
2129
2133
  rawBody: o
2130
2134
  }, c = yield* P.promise(() => ht(e, s));
2131
- c.status >= 500 && ti.warn(`${t.method} ${i} → ${c.status}`, {
2135
+ c.status >= 500 && ii.warn(`${t.method} ${i} → ${c.status}`, {
2132
2136
  method: t.method,
2133
2137
  path: i,
2134
2138
  status: c.status,
@@ -2163,7 +2167,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2163
2167
  });
2164
2168
  }
2165
2169
  return c.body instanceof Uint8Array ? H.uint8Array(c.body, u) : H.text(c.body ?? "", u);
2166
- })), P.tapErrorCause((t) => N.isInterruptedOnly(t) ? P.void : P.sync(() => ti.error(`${e.map((e) => e.method).join("|")} ${e[0].path} threw`, { path: e[0].path }, N.squash(t))))), n = /* @__PURE__ */ new Map();
2170
+ })), P.tapErrorCause((t) => N.isInterruptedOnly(t) ? P.void : P.sync(() => ii.error(`${e.map((e) => e.method).join("|")} ${e[0].path} threw`, { path: e[0].path }, N.squash(t))))), n = /* @__PURE__ */ new Map();
2167
2171
  for (let t of e.httpRoutes) {
2168
2172
  let e = n.get(t.path);
2169
2173
  e ? e.push(t) : n.set(t.path, [t]);
@@ -2226,21 +2230,21 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2226
2230
  let C = M({ scope: "voltro:rpc" }), w = F.launch(S).pipe(P.catchAllCause((e) => P.sync(() => {
2227
2231
  C.error("rpc server crashed", {}, N.squash(e)), process.exit(1);
2228
2232
  }))), T = P.runFork(w);
2229
- return ui.add(T), fi(), {
2233
+ return pi.add(T), hi(), {
2230
2234
  server: r,
2231
2235
  shutdown: async () => {
2232
- ui.delete(T), await P.runPromise(Ze.interrupt(T)).then(() => void 0, () => void 0);
2236
+ pi.delete(T), await P.runPromise(Ze.interrupt(T)).then(() => void 0, () => void 0);
2233
2237
  }
2234
2238
  };
2235
- }, ui = /* @__PURE__ */ new Set(), di = !1, fi = () => {
2236
- if (di) return;
2237
- di = !0;
2239
+ }, pi = /* @__PURE__ */ new Set(), mi = !1, hi = () => {
2240
+ if (mi) return;
2241
+ mi = !0;
2238
2242
  let e = () => {
2239
- let e = [...ui];
2240
- ui.clear(), Promise.all(e.map((e) => P.runPromise(Ze.interrupt(e)).then(() => void 0, () => void 0))).then(() => process.exit(0), () => process.exit(0));
2243
+ let e = [...pi];
2244
+ pi.clear(), Promise.all(e.map((e) => P.runPromise(Ze.interrupt(e)).then(() => void 0, () => void 0))).then(() => process.exit(0), () => process.exit(0));
2241
2245
  };
2242
2246
  process.once("SIGINT", e), process.once("SIGTERM", e);
2243
- }, pi = (e, t = 1e4) => new Promise((n, r) => {
2247
+ }, gi = (e, t = 1e4) => new Promise((n, r) => {
2244
2248
  if (e.listening) {
2245
2249
  n();
2246
2250
  return;
@@ -2256,13 +2260,13 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2256
2260
  o(e);
2257
2261
  }
2258
2262
  a = setTimeout(() => o(/* @__PURE__ */ Error(`rpc server did not bind within ${t}ms`)), t), e.on("listening", s), e.on("error", c);
2259
- }), mi = () => {
2263
+ }), _i = () => {
2260
2264
  let e = process.env.FRAMEWORK_TRACING?.toLowerCase();
2261
2265
  return e === "console" || e === "otlp" || e === "off" ? e : process.env.OTEL_EXPORTER_OTLP_ENDPOINT || process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT ? "otlp" : "off";
2262
- }, hi = () => {
2266
+ }, vi = () => {
2263
2267
  let e = process.env.FRAMEWORK_METRICS?.toLowerCase();
2264
2268
  return e === "console" || e === "otlp" || e === "off" ? e : process.env.OTEL_EXPORTER_OTLP_ENDPOINT || process.env.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT ? "otlp" : "off";
2265
- }, gi = async () => {
2269
+ }, yi = async () => {
2266
2270
  let [e, t, n, r, i] = await Promise.all([
2267
2271
  import("@opentelemetry/sdk-trace-base"),
2268
2272
  import("@opentelemetry/sdk-metrics"),
@@ -2277,7 +2281,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2277
2281
  otlpMetrics: r,
2278
2282
  nodeSdk: i
2279
2283
  };
2280
- }, _i = (e, t, n) => {
2284
+ }, bi = (e, t, n) => {
2281
2285
  let { PeriodicExportingMetricReader: r, ConsoleMetricExporter: i, InMemoryMetricExporter: a, AggregationTemporality: o } = e.sdkMetrics;
2282
2286
  if (t === "off") return {
2283
2287
  reader: void 0,
@@ -2300,8 +2304,8 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2300
2304
  }),
2301
2305
  inMemory: void 0
2302
2306
  };
2303
- }, vi = async (e = {}) => {
2304
- let t = e.mode ?? mi(), n = e.metricsMode ?? hi(), r = e.extraSpanProcessors ?? [], i = e.extraMetricReaders ?? [];
2307
+ }, xi = async (e = {}) => {
2308
+ let t = e.mode ?? _i(), n = e.metricsMode ?? vi(), r = e.extraSpanProcessors ?? [], i = e.extraMetricReaders ?? [];
2305
2309
  if (t === "off" && e.traceSink === void 0 && n === "off" && r.length === 0 && i.length === 0) return {
2306
2310
  layer: F.empty,
2307
2311
  mode: t,
@@ -2310,13 +2314,13 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2310
2314
  metricsMode: n,
2311
2315
  inMemoryMetricExporter: void 0
2312
2316
  };
2313
- let a = await gi(), { 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;
2317
+ let a = await yi(), { 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;
2314
2318
  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());
2315
2319
  let m = [
2316
2320
  ...e.traceSink ? [e.traceSink] : [],
2317
2321
  ...p ? [p] : [],
2318
2322
  ...r
2319
- ], h = m.length === 1 ? m[0] : m, { reader: g, inMemory: _ } = _i(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 = {
2323
+ ], h = m.length === 1 ? m[0] : m, { reader: g, inMemory: _ } = bi(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 = {
2320
2324
  serviceName: d,
2321
2325
  ...e.serviceVersion ? { serviceVersion: e.serviceVersion } : {},
2322
2326
  ...e.resourceAttributes ? { attributes: e.resourceAttributes } : {}
@@ -2334,18 +2338,18 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2334
2338
  metricsMode: n,
2335
2339
  inMemoryMetricExporter: _
2336
2340
  };
2337
- }, yi = {
2341
+ }, Si = {
2338
2342
  [yt.INTERNAL]: "internal",
2339
2343
  [yt.SERVER]: "server",
2340
2344
  [yt.CLIENT]: "client",
2341
2345
  [yt.PRODUCER]: "producer",
2342
2346
  [yt.CONSUMER]: "consumer"
2343
- }, bi = (e) => e[0] * 1e3 + e[1] / 1e6, xi = 512, Si = 48, Ci = (e) => {
2347
+ }, Ci = (e) => e[0] * 1e3 + e[1] / 1e6, wi = 512, Ti = 48, Ei = (e) => {
2344
2348
  let t = {}, n = 0;
2345
2349
  for (let r in e) {
2346
- if (n >= Si) break;
2350
+ if (n >= Ti) break;
2347
2351
  let i = e[r];
2348
- if (typeof i == "string") t[r] = i.length > xi ? `${i.slice(0, xi)}…` : i;
2352
+ if (typeof i == "string") t[r] = i.length > wi ? `${i.slice(0, wi)}…` : i;
2349
2353
  else if (typeof i == "number" || typeof i == "boolean" || i == null) t[r] = i;
2350
2354
  else {
2351
2355
  let e;
@@ -2354,49 +2358,49 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2354
2358
  } catch {
2355
2359
  e = String(i);
2356
2360
  }
2357
- t[r] = e.length > xi ? `${e.slice(0, xi)}…` : e;
2361
+ t[r] = e.length > wi ? `${e.slice(0, wi)}…` : e;
2358
2362
  }
2359
2363
  n++;
2360
2364
  }
2361
2365
  return t;
2362
- }, wi = {
2366
+ }, Di = {
2363
2367
  [bt.UNSET]: "unset",
2364
2368
  [bt.OK]: "ok",
2365
2369
  [bt.ERROR]: "error"
2366
- }, Ti = (e) => {
2370
+ }, Oi = (e) => {
2367
2371
  let t = e.spanContext(), n = e.events.length > 0 ? e.events.slice(0, 16).map((e) => ({
2368
2372
  name: e.name,
2369
- tsMs: bi(e.time),
2370
- ...e.attributes ? { attributes: Ci(e.attributes) } : {}
2373
+ tsMs: Ci(e.time),
2374
+ ...e.attributes ? { attributes: Ei(e.attributes) } : {}
2371
2375
  })) : void 0;
2372
2376
  return {
2373
2377
  traceId: t.traceId,
2374
2378
  spanId: t.spanId,
2375
2379
  parentSpanId: e.parentSpanContext?.spanId ?? null,
2376
2380
  name: e.name,
2377
- kind: yi[e.kind] ?? "internal",
2378
- attributes: Ci(e.attributes),
2379
- startMs: bi(e.startTime),
2380
- endMs: bi(e.endTime),
2381
- durationMs: bi(e.duration),
2382
- status: wi[e.status.code] ?? "unset",
2381
+ kind: Si[e.kind] ?? "internal",
2382
+ attributes: Ei(e.attributes),
2383
+ startMs: Ci(e.startTime),
2384
+ endMs: Ci(e.endTime),
2385
+ durationMs: Ci(e.duration),
2386
+ status: Di[e.status.code] ?? "unset",
2383
2387
  ...e.status.message ? { statusMessage: e.status.message } : {},
2384
2388
  ...n ? { events: n } : {}
2385
2389
  };
2386
- }, Ei = (e) => ({
2390
+ }, ki = (e) => ({
2387
2391
  onStart: () => {},
2388
2392
  onEnd: (t) => {
2389
2393
  try {
2390
- e(Ti(t));
2394
+ e(Oi(t));
2391
2395
  } catch {}
2392
2396
  },
2393
2397
  forceFlush: () => Promise.resolve(),
2394
2398
  shutdown: () => Promise.resolve()
2395
- }), Di = { get: (e) => Promise.resolve(process.env[e]) }, Oi = Di, ki = (e) => {
2396
- Oi = e;
2397
- }, Ai = () => {
2398
- Oi = Di;
2399
- }, ji = async (e) => await Oi.get(e) ?? process.env[e], Mi = (e) => process.env[e], Ni = (e, t = 6e4, n = () => Date.now()) => {
2399
+ }), Ai = { get: (e) => Promise.resolve(process.env[e]) }, ji = Ai, Mi = (e) => {
2400
+ ji = e;
2401
+ }, Ni = () => {
2402
+ ji = Ai;
2403
+ }, Pi = async (e) => await ji.get(e) ?? process.env[e], Fi = (e) => process.env[e], Ii = (e, t = 6e4, n = () => Date.now()) => {
2400
2404
  let r = /* @__PURE__ */ new Map();
2401
2405
  return { get: async (i) => {
2402
2406
  let a = r.get(i);
@@ -2407,12 +2411,12 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2407
2411
  at: n()
2408
2412
  }), o;
2409
2413
  } };
2410
- }, Pi = (e) => {
2414
+ }, Li = (e) => {
2411
2415
  let t = {
2412
2416
  accept: "application/json",
2413
2417
  ...e.headers ?? {}
2414
2418
  };
2415
- if (e.perKey) return Ni({ get: async (n) => {
2419
+ if (e.perKey) return Ii({ get: async (n) => {
2416
2420
  let r = await fetch(`${e.url.replace(/\/$/, "")}/${encodeURIComponent(n)}`, { headers: t });
2417
2421
  if (!r.ok) return;
2418
2422
  let i = await r.json();
@@ -2423,7 +2427,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2423
2427
  let t = (await a())[e];
2424
2428
  return typeof t == "string" ? t : void 0;
2425
2429
  } };
2426
- }, Fi = (e) => e === void 0 || e === "env" || typeof e == "object" && e.kind === "env" ? Di : e.kind === "custom" ? e.backend : e.kind === "http" ? Pi(e) : Di, Ii = (e) => /^[0-9a-f]{64}$/i.test(e) ? Buffer.from(e, "hex") : ve(e, "voltro:field-encryption:v1", 32), Li = (t) => {
2430
+ }, Ri = (e) => e === void 0 || e === "env" || typeof e == "object" && e.kind === "env" ? Ai : e.kind === "custom" ? e.backend : e.kind === "http" ? Li(e) : Ai, zi = (e) => /^[0-9a-f]{64}$/i.test(e) ? Buffer.from(e, "hex") : ve(e, "voltro:field-encryption:v1", 32), Bi = (t) => {
2427
2431
  if (t.length !== 32) throw Error(`field cipher key must be 32 bytes, got ${t.length}`);
2428
2432
  return {
2429
2433
  encrypt: (n) => {
@@ -2437,45 +2441,45 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2437
2441
  return o.setAuthTag(Buffer.from(i, "base64")), Buffer.concat([o.update(Buffer.from(a, "base64")), o.final()]).toString("utf8");
2438
2442
  }
2439
2443
  };
2440
- }, Ri = (e) => Li(Ii(e)), zi, Bi = (e) => {
2441
- zi = e;
2442
- }, Vi = () => zi, Hi = "no field cipher registered — enable `@voltro/plugin-governance` `governancePlugin({ fieldEncryption: { key } })` (or call setFieldCipher) so a key is available.", Ui = (e) => {
2443
- let t = Vi();
2444
- if (!t) throw Error(`encryptField: ${Hi}`);
2444
+ }, Vi = (e) => Bi(zi(e)), Hi, Ui = (e) => {
2445
+ Hi = e;
2446
+ }, Wi = () => Hi, Gi = "no field cipher registered — enable `@voltro/plugin-governance` `governancePlugin({ fieldEncryption: { key } })` (or call setFieldCipher) so a key is available.", Ki = (e) => {
2447
+ let t = Wi();
2448
+ if (!t) throw Error(`encryptField: ${Gi}`);
2445
2449
  return t.encrypt(e);
2446
- }, Wi = (e) => {
2450
+ }, qi = (e) => {
2447
2451
  if (!x(e)) return e;
2448
- let t = Vi();
2449
- if (!t) throw Error(`decryptField: ${Hi}`);
2452
+ let t = Wi();
2453
+ if (!t) throw Error(`decryptField: ${Gi}`);
2450
2454
  return t.decrypt(e);
2451
- }, Gi = "_voltro_idempotency", Ki = (e) => {
2455
+ }, Ji = "_voltro_idempotency", Yi = (e) => {
2452
2456
  if (e == null) return null;
2453
2457
  let t = typeof e == "string" ? JSON.parse(e) : e;
2454
2458
  return t && typeof t == "object" && "status" in t ? t : null;
2455
- }, qi = (e) => ({
2459
+ }, Xi = (e) => ({
2456
2460
  scope: e.scope,
2457
2461
  key: e.key,
2458
2462
  status: e.status === "completed" ? "completed" : "in_flight",
2459
- response: Ki(e.response),
2463
+ response: Yi(e.response),
2460
2464
  createdAt: Ue(e.createdAt)
2461
- }), Ji = async (e, n, r) => (await e.query({
2462
- table: Gi,
2465
+ }), Zi = async (e, n, r) => (await e.query({
2466
+ table: Ji,
2463
2467
  predicate: t(u("scope", n), u("key", r)),
2464
2468
  order: [],
2465
2469
  take: 1,
2466
2470
  skip: void 0,
2467
2471
  projection: void 0
2468
- }))[0] ?? null, Yi = (e) => ({
2472
+ }))[0] ?? null, Qi = (e) => ({
2469
2473
  get: async (t, n) => {
2470
- let r = await Ji(e, t, n);
2471
- return r ? qi(r) : null;
2474
+ let r = await Zi(e, t, n);
2475
+ return r ? Xi(r) : null;
2472
2476
  },
2473
2477
  claim: async (t, n, r, i) => {
2474
2478
  for (let a = 0; a < 2; a++) {
2475
2479
  let a = f({
2476
2480
  kind: "typeid",
2477
2481
  prefix: "idem"
2478
- }, Gi), o = await e.insertIgnore(Gi, {
2482
+ }, Ji), o = await e.insertIgnore(Ji, {
2479
2483
  id: a,
2480
2484
  scope: t,
2481
2485
  key: n,
@@ -2484,11 +2488,11 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2484
2488
  createdAt: new Date(r)
2485
2489
  }, { conflictColumns: ["scope", "key"] });
2486
2490
  if (o.id === a) return "claimed";
2487
- if (r - Ue(o.createdAt) < i) return qi(o);
2488
- await e.delete(Gi, o.id);
2491
+ if (r - Ue(o.createdAt) < i) return Xi(o);
2492
+ await e.delete(Ji, o.id);
2489
2493
  }
2490
- let a = await Ji(e, t, n);
2491
- return a ? qi(a) : {
2494
+ let a = await Zi(e, t, n);
2495
+ return a ? Xi(a) : {
2492
2496
  scope: t,
2493
2497
  key: n,
2494
2498
  status: "in_flight",
@@ -2497,33 +2501,33 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2497
2501
  };
2498
2502
  },
2499
2503
  complete: async (t, n, r, i) => {
2500
- let a = await Ji(e, t, n);
2501
- a && await e.update(Gi, a.id, {
2504
+ let a = await Zi(e, t, n);
2505
+ a && await e.update(Ji, a.id, {
2502
2506
  status: "completed",
2503
2507
  response: r
2504
2508
  });
2505
2509
  },
2506
2510
  release: async (t, n) => {
2507
- let r = await Ji(e, t, n);
2508
- r && await e.delete(Gi, r.id);
2511
+ let r = await Zi(e, t, n);
2512
+ r && await e.delete(Ji, r.id);
2509
2513
  }
2510
- }), J = "_voltro_kv", Xi = (e) => {
2514
+ }), J = "_voltro_kv", $i = (e) => {
2511
2515
  if (e == null) return null;
2512
2516
  if (e instanceof Date) return e.getTime();
2513
2517
  if (typeof e == "number") return e;
2514
2518
  let t = Date.parse(String(e));
2515
2519
  return Number.isNaN(t) ? null : t;
2516
- }, Zi = (e, t) => {
2517
- let n = Xi(e.expiresAt);
2520
+ }, ea = (e, t) => {
2521
+ let n = $i(e.expiresAt);
2518
2522
  return n !== null && n <= t;
2519
- }, Qi = (e) => e === null ? null : JSON.parse(e), $i = async (e, t) => (await e.query({
2523
+ }, ta = (e) => e === null ? null : JSON.parse(e), na = async (e, t) => (await e.query({
2520
2524
  table: J,
2521
2525
  predicate: u("key", t),
2522
2526
  order: [],
2523
2527
  take: 1,
2524
2528
  skip: void 0,
2525
2529
  projection: void 0
2526
- }))[0] ?? null, ea = (e) => {
2530
+ }))[0] ?? null, ra = (e) => {
2527
2531
  let n = (e, t, n) => P.tryPromise({
2528
2532
  try: n,
2529
2533
  catch: (n) => new St({
@@ -2534,8 +2538,8 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2534
2538
  });
2535
2539
  return {
2536
2540
  get: (t) => n("get", t, async () => {
2537
- let n = await $i(e, t);
2538
- return n === null ? tt.none() : Zi(n, Date.now()) ? (await e.delete(J, n.id), tt.none()) : tt.some(Qi(n.value));
2541
+ let n = await na(e, t);
2542
+ return n === null ? tt.none() : ea(n, Date.now()) ? (await e.delete(J, n.id), tt.none()) : tt.some(ta(n.value));
2539
2543
  }),
2540
2544
  set: (t, r, i) => n("set", t, async () => {
2541
2545
  let n = Date.now(), a = i?.ttlMs !== void 0 && i.ttlMs > 0 ? new Date(n + i.ttlMs) : null, o = f({
@@ -2558,14 +2562,14 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2558
2562
  });
2559
2563
  }),
2560
2564
  delete: (t) => n("delete", t, async () => {
2561
- let n = await $i(e, t);
2565
+ let n = await na(e, t);
2562
2566
  if (n === null) return !1;
2563
- let r = !Zi(n, Date.now());
2567
+ let r = !ea(n, Date.now());
2564
2568
  return await e.delete(J, n.id), r;
2565
2569
  }),
2566
2570
  has: (t) => n("has", t, async () => {
2567
- let n = await $i(e, t);
2568
- return n === null ? !1 : Zi(n, Date.now()) ? (await e.delete(J, n.id), !1) : !0;
2571
+ let n = await na(e, t);
2572
+ return n === null ? !1 : ea(n, Date.now()) ? (await e.delete(J, n.id), !1) : !0;
2569
2573
  }),
2570
2574
  list: (r) => n("list", "", async () => {
2571
2575
  let n = Date.now(), i = ie(S("expiresAt"), h("expiresAt", new Date(n))), a = r === "" ? i : t(o("key", r), i), s = await e.query({
@@ -2576,7 +2580,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2576
2580
  skip: void 0,
2577
2581
  projection: void 0
2578
2582
  }), c = [];
2579
- for (let e of s) Zi(e, n) || (r === "" || e.key.startsWith(r)) && c.push(e.key);
2583
+ for (let e of s) ea(e, n) || (r === "" || e.key.startsWith(r)) && c.push(e.key);
2580
2584
  return c;
2581
2585
  }),
2582
2586
  clear: () => n("clear", "", async () => {
@@ -2586,8 +2590,8 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2586
2590
  } });
2587
2591
  })
2588
2592
  };
2589
- }, ta = async ({ store: e, env: t = process.env }) => {
2590
- let n = (t.KV_BACKEND ?? "database").toLowerCase(), r = n === "redis" ? "redis" : n === "memory" ? "memory" : "database", i = r === "redis" ? Et(t.KV_KEY_PREFIX ? { keyPrefix: t.KV_KEY_PREFIX } : {}).pipe(F.provide(wt)) : r === "memory" ? Tt() : F.succeed(Ct, Ct.of(ea(e))), a = Qe.make(xt.Default.pipe(F.provide(i))), o = await a.runPromise(xt);
2593
+ }, ia = async ({ store: e, env: t = process.env }) => {
2594
+ let n = (t.KV_BACKEND ?? "database").toLowerCase(), r = n === "redis" ? "redis" : n === "memory" ? "memory" : "database", i = r === "redis" ? Et(t.KV_KEY_PREFIX ? { keyPrefix: t.KV_KEY_PREFIX } : {}).pipe(F.provide(wt)) : r === "memory" ? Tt() : F.succeed(Ct, Ct.of(ra(e))), a = Qe.make(xt.Default.pipe(F.provide(i))), o = await a.runPromise(xt);
2591
2595
  return {
2592
2596
  kv: {
2593
2597
  get: (e) => a.runPromise(o.get(e)).then((e) => tt.getOrUndefined(e)),
@@ -2602,7 +2606,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2602
2606
  backend: r,
2603
2607
  dispose: () => a.dispose()
2604
2608
  };
2605
- }, na = {
2609
+ }, aa = {
2606
2610
  get: () => Promise.resolve(void 0),
2607
2611
  getOrElse: (e, t) => Promise.resolve(t()),
2608
2612
  set: () => Promise.resolve(),
@@ -2610,7 +2614,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2610
2614
  has: () => Promise.resolve(!1),
2611
2615
  list: () => Promise.resolve([]),
2612
2616
  clear: () => Promise.resolve()
2613
- }, ra = "_voltro_api_keys", ia = (e) => he("sha256").update(e, "utf8").digest("hex"), aa = (e = "voltro_") => `${e}${ge(30).toString("base64url")}`, oa = (e) => ({
2617
+ }, oa = "_voltro_api_keys", sa = (e) => he("sha256").update(e, "utf8").digest("hex"), ca = (e = "voltro_") => `${e}${ge(30).toString("base64url")}`, la = (e) => ({
2614
2618
  id: e.id,
2615
2619
  name: e.name,
2616
2620
  keyPrefix: e.keyPrefix,
@@ -2619,26 +2623,30 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2619
2623
  lastUsedAt: e.lastUsedAt,
2620
2624
  expiresAt: e.expiresAt,
2621
2625
  revokedAt: e.revokedAt,
2622
- createdAt: e.createdAt
2623
- }), sa = (e, t) => e.revokedAt === null && (e.expiresAt === null || e.expiresAt > t), ca = (e, t = {}) => {
2626
+ createdAt: e.createdAt,
2627
+ createdBy: e.createdBy ?? null,
2628
+ onBehalfOf: e.onBehalfOf ?? null,
2629
+ ...e.metadata == null ? {} : { metadata: e.metadata }
2630
+ }), ua = (e, t) => e.revokedAt === null && (e.expiresAt === null || e.expiresAt > t), da = (e, t = {}) => {
2624
2631
  let n = t.prefix ?? "voltro_", r = t.usage, i = async (t) => {
2625
- let r = aa(n), i = f({
2632
+ let r = ca(n), i = f({
2626
2633
  kind: "typeid",
2627
2634
  prefix: "apikey"
2628
- }, ra), a = t.scopes ?? [], o = t.expiresAt == null ? null : t.expiresAt instanceof Date ? t.expiresAt.getTime() : t.expiresAt;
2635
+ }, oa), a = t.scopes ?? [], o = t.expiresAt == null ? null : t.expiresAt instanceof Date ? t.expiresAt.getTime() : t.expiresAt;
2629
2636
  return await e.insert({
2630
2637
  id: i,
2631
2638
  tenantId: t.tenantId ?? null,
2632
2639
  name: t.name,
2633
2640
  onBehalfOf: t.onBehalfOf ?? null,
2634
- hashedKey: ia(r),
2641
+ hashedKey: sa(r),
2635
2642
  keyPrefix: r.slice(0, n.length + 6),
2636
2643
  scopes: a,
2637
2644
  lastUsedAt: null,
2638
2645
  expiresAt: o,
2639
2646
  revokedAt: null,
2640
2647
  createdBy: t.createdBy ?? null,
2641
- createdAt: Date.now()
2648
+ createdAt: Date.now(),
2649
+ ...t.metadata == null ? {} : { metadata: t.metadata }
2642
2650
  }), {
2643
2651
  id: i,
2644
2652
  token: r,
@@ -2649,18 +2657,19 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2649
2657
  };
2650
2658
  }, a = async (t, n = Date.now()) => {
2651
2659
  let i = await e.findByHash(t);
2652
- return !i || !sa(i, n) ? null : (r === void 0 ? await e.patch(i.id, { lastUsedAt: n }) : r.touch(i.id, n), {
2660
+ return !i || !ua(i, n) ? null : (r === void 0 ? await e.patch(i.id, { lastUsedAt: n }) : r.touch(i.id, n), {
2653
2661
  id: i.id,
2654
2662
  tenantId: i.tenantId ?? "",
2655
2663
  createdBy: i.createdBy ?? null,
2656
2664
  onBehalfOf: i.onBehalfOf ?? null,
2657
- scopes: i.scopes ?? []
2665
+ scopes: i.scopes ?? [],
2666
+ ...i.metadata == null ? {} : { metadata: i.metadata }
2658
2667
  });
2659
2668
  };
2660
2669
  return {
2661
2670
  issue: i,
2662
2671
  resolveByHash: a,
2663
- verify: (e, t) => a(ia(e), t),
2672
+ verify: (e, t) => a(sa(e), t),
2664
2673
  revoke: async (t, n, r = Date.now()) => {
2665
2674
  let i = await e.findById(t);
2666
2675
  return !i || (i.tenantId ?? null) !== n ? !1 : (await e.patch(t, { revokedAt: r }), !0);
@@ -2672,12 +2681,13 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2672
2681
  name: a.name,
2673
2682
  scopes: a.scopes ?? [],
2674
2683
  createdBy: a.createdBy,
2675
- onBehalfOf: a.onBehalfOf ?? null
2684
+ onBehalfOf: a.onBehalfOf ?? null,
2685
+ ...a.metadata == null ? {} : { metadata: a.metadata }
2676
2686
  }));
2677
2687
  },
2678
- list: async (t) => (await e.listByTenant(t)).map(oa)
2688
+ list: async (t) => (await e.listByTenant(t)).map(la)
2679
2689
  };
2680
- }, la = () => {
2690
+ }, fa = () => {
2681
2691
  let e = /* @__PURE__ */ new Map();
2682
2692
  return {
2683
2693
  insert: async (t) => {
@@ -2694,20 +2704,21 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2694
2704
  });
2695
2705
  }
2696
2706
  };
2697
- }, ua = (e) => e == null ? null : e instanceof Date ? e.getTime() : typeof e == "number" ? e : typeof e == "string" ? new Date(e).getTime() : null, da = (e) => ({
2707
+ }, pa = (e) => e == null ? null : e instanceof Date ? e.getTime() : typeof e == "number" ? e : typeof e == "string" ? new Date(e).getTime() : null, ma = (e) => ({
2698
2708
  id: String(e.id),
2699
2709
  tenantId: e.tenantId ?? null,
2700
2710
  name: String(e.name),
2701
2711
  hashedKey: String(e.hashedKey),
2702
2712
  keyPrefix: String(e.keyPrefix),
2703
2713
  scopes: e.scopes ?? null,
2704
- lastUsedAt: ua(e.lastUsedAt),
2705
- expiresAt: ua(e.expiresAt),
2706
- revokedAt: ua(e.revokedAt),
2714
+ lastUsedAt: pa(e.lastUsedAt),
2715
+ expiresAt: pa(e.expiresAt),
2716
+ revokedAt: pa(e.revokedAt),
2707
2717
  createdBy: e.createdBy ?? null,
2708
2718
  onBehalfOf: e.onBehalfOf ?? null,
2709
- createdAt: ua(e.createdAt) ?? 0
2710
- }), fa = (e) => async (t, n) => {
2719
+ createdAt: pa(e.createdAt) ?? 0,
2720
+ ...e.metadata == null ? {} : { metadata: e.metadata }
2721
+ }), ha = (e) => async (t, n) => {
2711
2722
  let r = await e.findById(t);
2712
2723
  if (r === null) return;
2713
2724
  let i = r.requestCount ?? 0, a = r.lastUsedAt ?? 0;
@@ -2715,9 +2726,9 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2715
2726
  requestCount: i + n.requests,
2716
2727
  lastUsedAt: Math.max(a, n.lastUsedAt)
2717
2728
  });
2718
- }, pa = (e) => {
2729
+ }, ga = (e) => {
2719
2730
  let t = async (t) => await e.query({
2720
- table: ra,
2731
+ table: oa,
2721
2732
  predicate: t,
2722
2733
  order: [],
2723
2734
  take: void 0,
@@ -2735,33 +2746,33 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2735
2746
  };
2736
2747
  return {
2737
2748
  insert: async (t) => {
2738
- await e.insert(ra, n(t));
2749
+ await e.insert(oa, n(t));
2739
2750
  },
2740
2751
  findByHash: async (e) => {
2741
2752
  let n = await t(u("hashedKey", e));
2742
- return n[0] ? da(n[0]) : null;
2753
+ return n[0] ? ma(n[0]) : null;
2743
2754
  },
2744
2755
  findById: async (e) => {
2745
2756
  let n = await t(u("id", e));
2746
- return n[0] ? da(n[0]) : null;
2757
+ return n[0] ? ma(n[0]) : null;
2747
2758
  },
2748
- listByTenant: async (e) => (await t(e === null ? void 0 : u("tenantId", e))).map(da).filter((t) => e === null || t.tenantId === e),
2759
+ listByTenant: async (e) => (await t(e === null ? void 0 : u("tenantId", e))).map(ma).filter((t) => e === null || t.tenantId === e),
2749
2760
  patch: async (t, r) => {
2750
- await e.update(ra, t, n(r));
2761
+ await e.update(oa, t, n(r));
2751
2762
  }
2752
2763
  };
2753
- }, ma = (e, t = {}) => Dt({
2764
+ }, _a = (e, t = {}) => Dt({
2754
2765
  id: "voltro-apikey",
2755
2766
  ...t.prefix ? { prefix: t.prefix } : {},
2756
2767
  resolveKey: (t) => e.resolveByHash(t)
2757
- }), ha = (e) => {
2768
+ }), va = (e) => {
2758
2769
  let t = e.subject;
2759
2770
  return {
2760
2771
  id: t.id ?? null,
2761
2772
  tenantId: t.tenantId ?? null,
2762
2773
  scopes: t.scopes ?? []
2763
2774
  };
2764
- }, ga = (e, t = "/v1/api-keys") => {
2775
+ }, ya = (e, t = "/v1/api-keys") => {
2765
2776
  let n = R.Struct({
2766
2777
  id: R.String,
2767
2778
  name: R.String,
@@ -2771,7 +2782,13 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2771
2782
  lastUsedAt: R.NullOr(R.Number),
2772
2783
  expiresAt: R.NullOr(R.Number),
2773
2784
  revokedAt: R.NullOr(R.Number),
2774
- createdAt: R.Number
2785
+ createdAt: R.Number,
2786
+ createdBy: R.NullOr(R.String),
2787
+ onBehalfOf: R.NullOr(R.String),
2788
+ metadata: R.optional(R.NullOr(R.Record({
2789
+ key: R.String,
2790
+ value: R.Unknown
2791
+ })))
2775
2792
  });
2776
2793
  return [
2777
2794
  mt({
@@ -2796,7 +2813,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2796
2813
  keyPrefix: R.String
2797
2814
  }),
2798
2815
  handler: async (t, n) => {
2799
- let r = t.body, i = ha(n), a = new Set(i.scopes), o = (e) => a.has(be) || a.has(e), s = r.onBehalfOf === void 0 ? i.id : r.onBehalfOf;
2816
+ let r = t.body, i = va(n), a = new Set(i.scopes), o = (e) => a.has(be) || a.has(e), s = r.onBehalfOf === void 0 ? i.id : r.onBehalfOf;
2800
2817
  if (s === null) {
2801
2818
  if (!o(xe)) throw new Oe({
2802
2819
  required: xe,
@@ -2841,7 +2858,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2841
2858
  guards: [_t(be)],
2842
2859
  input: R.Struct({}),
2843
2860
  output: R.Struct({ keys: R.Array(n) }),
2844
- handler: async (t, n) => ({ keys: [...await e.list(ha(n).tenantId)] })
2861
+ handler: async (t, n) => ({ keys: [...await e.list(va(n).tenantId)] })
2845
2862
  }),
2846
2863
  mt({
2847
2864
  method: "POST",
@@ -2850,56 +2867,56 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2850
2867
  guards: [_t(be)],
2851
2868
  input: R.Struct({ body: R.Struct({ id: R.String }) }),
2852
2869
  output: R.Struct({ ok: R.Boolean }),
2853
- handler: async (t, n) => ({ ok: await e.revoke(t.body.id, ha(n).tenantId) })
2870
+ handler: async (t, n) => ({ ok: await e.revoke(t.body.id, va(n).tenantId) })
2854
2871
  })
2855
2872
  ];
2856
- }, _a = {
2873
+ }, ba = {
2857
2874
  type: "anonymous",
2858
2875
  id: null,
2859
2876
  tenantId: null
2860
- }, va = class extends R.TaggedError()("TenantScopeViolation", {
2877
+ }, xa = class extends R.TaggedError()("TenantScopeViolation", {
2861
2878
  table: R.String,
2862
2879
  reason: R.String
2863
- }) {}, ya = class extends R.TaggedError()("StoreOperationFailed", {
2880
+ }) {}, Sa = class extends R.TaggedError()("StoreOperationFailed", {
2864
2881
  operation: R.String,
2865
2882
  table: R.String,
2866
2883
  cause: R.String
2867
- }) {}, ba = class extends R.TaggedError()("TableValidationFailed", {
2884
+ }) {}, Ca = class extends R.TaggedError()("TableValidationFailed", {
2868
2885
  table: R.String,
2869
2886
  summary: R.String,
2870
2887
  issues: R.Array(R.Struct({
2871
2888
  path: R.String,
2872
2889
  message: R.String
2873
2890
  }))
2874
- }) {}, xa = class extends Ge.Tag("@voltro/EffectStore")() {}, Sa = (e, t) => (n) => n instanceof va ? n : new ya({
2891
+ }) {}, wa = class extends Ge.Tag("@voltro/EffectStore")() {}, Ta = (e, t) => (n) => n instanceof xa ? n : new Sa({
2875
2892
  operation: e,
2876
2893
  table: t,
2877
2894
  cause: String(n)
2878
- }), Ca = (e, t, n) => P.tryPromise({
2895
+ }), Ea = (e, t, n) => P.tryPromise({
2879
2896
  try: n,
2880
- catch: Sa(e, t)
2881
- }), wa = (e) => F.succeed(xa, {
2882
- query: ((t) => Ca("query", t.table, () => e.query(t))),
2883
- insert: (t, n) => Ca("insert", t, () => e.insert(t, n)),
2884
- update: (t, n, r) => Ca("update", t, () => e.update(t, n, r)),
2885
- delete: (t, n) => Ca("delete", t, () => e.delete(t, n)),
2886
- hardDelete: (t, n) => Ca("hardDelete", t, () => e.hardDelete(t, n))
2887
- }), Ta = (e) => dt.make(e.name, {
2897
+ catch: Ta(e, t)
2898
+ }), Da = (e) => F.succeed(wa, {
2899
+ query: ((t) => Ea("query", t.table, () => e.query(t))),
2900
+ insert: (t, n) => Ea("insert", t, () => e.insert(t, n)),
2901
+ update: (t, n, r) => Ea("update", t, () => e.update(t, n, r)),
2902
+ delete: (t, n) => Ea("delete", t, () => e.delete(t, n)),
2903
+ hardDelete: (t, n) => Ea("hardDelete", t, () => e.hardDelete(t, n))
2904
+ }), Oa = (e) => dt.make(e.name, {
2888
2905
  payload: e.payloadSchema,
2889
2906
  success: Ne,
2890
2907
  error: e.errorSchema
2891
- }), Ea = (e, t) => ({
2908
+ }), ka = (e, t) => ({
2892
2909
  id: t,
2893
2910
  workflowName: e,
2894
2911
  executionId: t,
2895
2912
  status: "running"
2896
- }), Da = Ea, Oa = (e) => {
2913
+ }), Aa = ka, ja = (e) => {
2897
2914
  let t = N.failureOption(e), n = t._tag === "Some" ? t.value : N.squash(e);
2898
2915
  return {
2899
2916
  tag: n && typeof n == "object" && "_tag" in n ? String(n._tag) : null,
2900
2917
  message: n?.message ?? String(n)
2901
2918
  };
2902
- }, ka = (e, t, n) => {
2919
+ }, Ma = (e, t, n) => {
2903
2920
  if (n === void 0) return {
2904
2921
  id: t,
2905
2922
  workflowName: e,
@@ -2925,7 +2942,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2925
2942
  workflowName: e,
2926
2943
  executionId: t,
2927
2944
  status: "failed",
2928
- error: Oa(r.cause)
2945
+ error: ja(r.cause)
2929
2946
  };
2930
2947
  }
2931
2948
  return {
@@ -2934,7 +2951,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2934
2951
  executionId: t,
2935
2952
  status: "running"
2936
2953
  };
2937
- }, Aa = (e) => new Promise((t) => setTimeout(t, e)), ja = class extends Error {
2954
+ }, Na = (e) => new Promise((t) => setTimeout(t, e)), Pa = class extends Error {
2938
2955
  workflowName;
2939
2956
  missingFields;
2940
2957
  detail;
@@ -2943,7 +2960,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2943
2960
  let r = t.length > 0 ? ` missing required field(s): ${t.join(", ")}.` : "";
2944
2961
  super(`Workflow "${e}" was started with an invalid payload.${r} ${n}`), this.workflowName = e, this.missingFields = t, this.detail = n, this.name = "WorkflowPayloadError";
2945
2962
  }
2946
- }, Ma = (e) => {
2963
+ }, Fa = (e) => {
2947
2964
  let t = e.ast;
2948
2965
  if (!Array.isArray(t.propertySignatures)) return {
2949
2966
  required: [],
@@ -2954,10 +2971,10 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2954
2971
  required: n.filter((e) => !e.isOptional).map((e) => String(e.name)),
2955
2972
  optional: n.filter((e) => e.isOptional).map((e) => String(e.name))
2956
2973
  };
2957
- }, Na = (e) => {
2974
+ }, Ia = (e) => {
2958
2975
  let t = e.ast;
2959
2976
  return Array.isArray(t.propertySignatures) ? t.propertySignatures.filter((e) => !e.isOptional && typeof e.name == "string").map((e) => String(e.name)) : [];
2960
- }, Pa = (e) => {
2977
+ }, La = (e) => {
2961
2978
  let t = new Map(e.workflows.map((e) => [e.definition.name, e.definition])), n = (e) => {
2962
2979
  let n = t.get(e);
2963
2980
  if (!n) {
@@ -2968,17 +2985,17 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
2968
2985
  }, r = (e, t) => {
2969
2986
  let n = R.validateEither(e.payloadSchema)(t);
2970
2987
  if (n._tag === "Right") return;
2971
- let r = typeof t == "object" && t ? Object.keys(t) : [], i = Na(e.payloadSchema).filter((e) => !r.includes(e));
2972
- throw new ja(e.name, i, kt.formatErrorSync(n.left));
2988
+ let r = typeof t == "object" && t ? Object.keys(t) : [], i = Ia(e.payloadSchema).filter((e) => !r.includes(e));
2989
+ throw new Pa(e.name, i, kt.formatErrorSync(n.left));
2973
2990
  }, i = (e, t) => {
2974
2991
  let i = n(e);
2975
2992
  return r(i, t), i;
2976
2993
  }, a = async (t, r) => {
2977
2994
  let i = n(t);
2978
- return ka(t, r, await e.runEffect(i.poll(r)));
2995
+ return Ma(t, r, await e.runEffect(i.poll(r)));
2979
2996
  }, o = async () => e.runEffect(At()), s = async (t, n, r) => {
2980
2997
  let a = i(t, n), o;
2981
- return r?.callerContext !== void 0 && (o = await e.runEffect(a.executionId(n)), await e.rememberStartContext?.(t, o, r.callerContext)), r?.wait ? (await e.runEffect(a.execute(n)), Ea(t, o ?? await e.runEffect(a.executionId(n)))) : Ea(t, await e.runEffect(a.execute(n, { discard: !0 })));
2998
+ return r?.callerContext !== void 0 && (o = await e.runEffect(a.executionId(n)), await e.rememberStartContext?.(t, o, r.callerContext)), r?.wait ? (await e.runEffect(a.execute(n)), ka(t, o ?? await e.runEffect(a.executionId(n)))) : ka(t, await e.runEffect(a.execute(n, { discard: !0 })));
2982
2999
  };
2983
3000
  return {
2984
3001
  start: s,
@@ -3016,7 +3033,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3016
3033
  let e = await a(r, i);
3017
3034
  if (e.status === "succeeded" || e.status === "failed" || e.status === "cancelled") return e;
3018
3035
  if (o?.timeoutMs !== void 0 && Date.now() - s >= o.timeoutMs) throw Error(`Timed out waiting for workflow '${r}' run '${i}'`);
3019
- await Aa(c);
3036
+ await Na(c);
3020
3037
  }
3021
3038
  }),
3022
3039
  cancel: async (t, r) => {
@@ -3054,22 +3071,22 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3054
3071
  return e.retry(t, n);
3055
3072
  }
3056
3073
  };
3057
- }, Fa = (e, t) => ({
3074
+ }, Ra = (e, t) => ({
3058
3075
  ...e,
3059
3076
  start: async (n, r, i) => {
3060
3077
  if (i?.wait) throw Error("ctx.workflows.start(..., { wait: true }) is not allowed inside a mutation transaction; start the workflow and wait after commit.");
3061
3078
  let a = await e.executionId(n, r);
3062
- return t(() => e.start(n, r)), Ea(n, a);
3079
+ return t(() => e.start(n, r)), ka(n, a);
3063
3080
  },
3064
3081
  child: async (n, r, i) => {
3065
3082
  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.");
3066
3083
  let a = await e.executionId(n, r);
3067
- return t(() => e.child(n, r, i)), Ea(n, a);
3084
+ return t(() => e.child(n, r, i)), ka(n, a);
3068
3085
  },
3069
3086
  run: async () => {
3070
3087
  throw Error("ctx.workflows.run(...) is not allowed inside a mutation transaction; use ctx.workflows.start(...) so the workflow starts after commit.");
3071
3088
  }
3072
- }), Ia = (e, t) => ({
3089
+ }), za = (e, t) => ({
3073
3090
  ...e,
3074
3091
  start: (n, r, i) => e.start(n, r, {
3075
3092
  ...i,
@@ -3083,7 +3100,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3083
3100
  ...i,
3084
3101
  callerContext: t
3085
3102
  })
3086
- }), La = (e) => {
3103
+ }), Ba = (e) => {
3087
3104
  let t = () => {
3088
3105
  let t = e();
3089
3106
  if (!t) throw Error("Workflow runtime is not ready yet");
@@ -3104,32 +3121,32 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3104
3121
  listRuns: ((e) => t().listRuns(e)),
3105
3122
  retry: (e, n) => t().retry(e, n)
3106
3123
  };
3107
- }, Ra = (e, t) => {
3124
+ }, Va = (e, t) => {
3108
3125
  let n = {};
3109
- for (let r of e) n[r.definition.name] = (e) => (t ? P.promise(() => t.start(r.definition.name, e)) : r.definition.execute(e, { discard: !0 }).pipe(P.map((e) => Ea(r.definition.name, e)))).pipe(P.withSpan(`workflow.${r.definition.name}`, { attributes: { "framework.kind": "workflow" } }));
3126
+ for (let r of e) n[r.definition.name] = (e) => (t ? P.promise(() => t.start(r.definition.name, e)) : r.definition.execute(e, { discard: !0 }).pipe(P.map((e) => ka(r.definition.name, e)))).pipe(P.withSpan(`workflow.${r.definition.name}`, { attributes: { "framework.kind": "workflow" } }));
3110
3127
  return n;
3111
- }, za = (e, t, n) => e.map((e) => e.definition.toLayer(((r, i) => {
3128
+ }, Ha = (e, t, n) => e.map((e) => e.definition.toLayer(((r, i) => {
3112
3129
  let a = t.resolveStartContext?.(e.definition.name, i);
3113
3130
  return (a === void 0 ? P.succeed(void 0) : P.promise(() => Promise.resolve(a))).pipe(P.flatMap((a) => {
3114
3131
  let o = {
3115
3132
  ...a,
3116
- subject: a?.subject ?? _a,
3133
+ subject: a?.subject ?? ba,
3117
3134
  traceId: a?.traceId ?? "workflow-bootstrap"
3118
3135
  }, s = t.buildContext(o, {
3119
3136
  workflowName: e.definition.name,
3120
3137
  executionId: i,
3121
3138
  parentExecutionId: a?.parentExecutionId ?? null,
3122
3139
  parentClosePolicy: a?.parentClosePolicy ?? null
3123
- }), c = e.buildExecute(s), l = (n?.(e, c, o) ?? c)(r, i), u = F.succeed(ke, o.subject), d = s?.store, f = d === void 0 ? l : P.provide(l, wa(d));
3140
+ }), c = e.buildExecute(s), l = (n?.(e, c, o) ?? c)(r, i), u = F.succeed(ke, o.subject), d = s?.store, f = d === void 0 ? l : P.provide(l, Da(d));
3124
3141
  return P.provide(f, u);
3125
3142
  }));
3126
- }))), Ba = (e) => ({
3143
+ }))), Ua = (e) => ({
3127
3144
  _tag: "workflowEventTrigger",
3128
3145
  ...e
3129
- }), Va = Ba, Ha = (e) => typeof e == "object" && !!e && e._tag === "workflowEventTrigger", Ua = () => {
3146
+ }), Wa = Ua, Ga = (e) => typeof e == "object" && !!e && e._tag === "workflowEventTrigger", Ka = () => {
3130
3147
  let e = globalThis.crypto;
3131
3148
  return typeof e?.randomUUID == "function" ? e.randomUUID() : `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`;
3132
- }, Wa = (e) => `${e}_${Ua()}`, Ga = (e) => e.id ?? `${e.event}->${e.workflow}`, Ka = O("_voltro_workflow_events", {
3149
+ }, qa = (e) => `${e}_${Ka()}`, Ja = (e) => e.id ?? `${e.event}->${e.workflow}`, Ya = O("_voltro_workflow_events", {
3133
3150
  id: v({ prefix: "wfe" }),
3134
3151
  name: k(),
3135
3152
  payload: C(),
@@ -3137,7 +3154,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3137
3154
  subject: C().nullable(),
3138
3155
  traceId: k().nullable(),
3139
3156
  occurredAt: A().default("now")
3140
- }).index(["name"]).index(["source"]).index(["occurredAt"]).reactive(), qa = O("_voltro_workflow_event_deliveries", {
3157
+ }).index(["name"]).index(["source"]).index(["occurredAt"]).reactive(), Xa = O("_voltro_workflow_event_deliveries", {
3141
3158
  id: v({ prefix: "wfed" }),
3142
3159
  eventId: k(),
3143
3160
  eventName: k(),
@@ -3155,8 +3172,8 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3155
3172
  errorMessage: k().nullable(),
3156
3173
  createdAt: A().default("now"),
3157
3174
  completedAt: A().nullable()
3158
- }).index(["eventId"]).index(["eventName"]).index(["triggerId"]).index(["workflowName"]).index(["status"]).reactive(), Ja = (e) => {
3159
- let t = e.makeId ?? Wa, n = /* @__PURE__ */ new Map();
3175
+ }).index(["eventId"]).index(["eventName"]).index(["triggerId"]).index(["workflowName"]).index(["status"]).reactive(), Za = (e) => {
3176
+ let t = e.makeId ?? qa, n = /* @__PURE__ */ new Map();
3160
3177
  for (let t of e.triggers) {
3161
3178
  let e = n.get(t.event);
3162
3179
  e ? e.push(t) : n.set(t.event, [t]);
@@ -3197,7 +3214,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3197
3214
  });
3198
3215
  let p = o(n), m = [];
3199
3216
  for (let o of p) {
3200
- let s = Ga(o), l = o.workflow, d;
3217
+ let s = Ja(o), l = o.workflow, d;
3201
3218
  try {
3202
3219
  let p = o.idempotencyKey?.(f) ?? `${c}:${s}`;
3203
3220
  if (o.filter && !await o.filter(f)) {
@@ -3300,10 +3317,10 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3300
3317
  triggered: m
3301
3318
  };
3302
3319
  } };
3303
- }, Ya = M({ scope: "voltro:outbox" }), Y = "_voltro_outbox", Xa = {
3320
+ }, Qa = M({ scope: "voltro:outbox" }), Y = "_voltro_outbox", $a = {
3304
3321
  kind: "typeid",
3305
3322
  prefix: "obx"
3306
- }, Za = O(Y, {
3323
+ }, eo = O(Y, {
3307
3324
  id: v({ prefix: "obx" }),
3308
3325
  effect: k(),
3309
3326
  payload: C(),
@@ -3321,10 +3338,10 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3321
3338
  resendRequestedBy: k().nullable(),
3322
3339
  resendReason: k().nullable(),
3323
3340
  resendCount: b()
3324
- }), Qa = "_voltro_outbox_attempts", $a = {
3341
+ }), to = "_voltro_outbox_attempts", no = {
3325
3342
  kind: "typeid",
3326
3343
  prefix: "obxa"
3327
- }, eo = O(Qa, {
3344
+ }, ro = O(to, {
3328
3345
  id: v({ prefix: "obxa" }),
3329
3346
  outboxId: k(),
3330
3347
  effect: k(),
@@ -3345,11 +3362,11 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3345
3362
  subjectId: k().nullable(),
3346
3363
  tenantId: k().nullable(),
3347
3364
  traceId: k().nullable()
3348
- }).index(["outboxId", "attempt"]).index(["startedAt"]).index(["outcome"]), to = (e) => {
3365
+ }).index(["outboxId", "attempt"]).index(["startedAt"]).index(["outcome"]), io = (e) => {
3349
3366
  if (e.effect.trim() === "") throw Error("defineOutboxHandler: `effect` must be a non-empty name");
3350
3367
  if (e.maxAttempts !== void 0 && e.maxAttempts < 1) throw Error(`defineOutboxHandler("${e.effect}"): maxAttempts must be >= 1`);
3351
3368
  return e;
3352
- }, no = 8, ro = (e) => ({
3369
+ }, ao = 8, oo = (e) => ({
3353
3370
  enqueue: async (n, r, i) => {
3354
3371
  let a = (e.now ?? (() => /* @__PURE__ */ new Date()))(), o = i?.idempotencyKey;
3355
3372
  if (o !== void 0) {
@@ -3364,12 +3381,12 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3364
3381
  if (n !== void 0) return n.id;
3365
3382
  }
3366
3383
  let s = {
3367
- id: f(Xa, Y),
3384
+ id: f($a, Y),
3368
3385
  effect: n,
3369
3386
  payload: r,
3370
3387
  status: "pending",
3371
3388
  attempts: 0,
3372
- maxAttempts: i?.maxAttempts ?? no,
3389
+ maxAttempts: i?.maxAttempts ?? ao,
3373
3390
  nextAttemptAt: new Date(a.getTime() + (i?.delayMs ?? 0)),
3374
3391
  idempotencyKey: o ?? null,
3375
3392
  lastError: null,
@@ -3416,7 +3433,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3416
3433
  });
3417
3434
  } else e.nudge?.();
3418
3435
  }
3419
- }), io = (e) => Math.min(1e3 * 2 ** Math.max(0, e - 1), 5 * 6e4), ao = 50, oo = (e, t) => e.length <= t ? e : `${e.slice(0, t)}… [clipped]`, so = (e) => {
3436
+ }), so = (e) => Math.min(1e3 * 2 ** Math.max(0, e - 1), 5 * 6e4), co = 50, lo = (e, t) => e.length <= t ? e : `${e.slice(0, t)}… [clipped]`, uo = (e) => {
3420
3437
  if (e == null) return null;
3421
3438
  let t = typeof e == "object" && !Array.isArray(e) ? e : { value: e }, n;
3422
3439
  try {
@@ -3426,13 +3443,13 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3426
3443
  }
3427
3444
  return n.length > 8192 ? {
3428
3445
  truncated: !0,
3429
- preview: oo(n, 8192)
3446
+ preview: lo(n, 8192)
3430
3447
  } : t;
3431
- }, co = async (e, t, n) => {
3448
+ }, fo = async (e, t, n) => {
3432
3449
  let r = t.outboxRow, i = r.id, a = r.resendRequestedBy ?? null;
3433
3450
  try {
3434
- await e.insert(Qa, {
3435
- id: f($a, Qa),
3451
+ await e.insert(to, {
3452
+ id: f(no, to),
3436
3453
  outboxId: i,
3437
3454
  effect: r.effect,
3438
3455
  attempt: t.attempt,
@@ -3443,14 +3460,14 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3443
3460
  startedAt: t.startedAt,
3444
3461
  finishedAt: t.finishedAt,
3445
3462
  durationMs: Math.max(0, t.finishedAt.getTime() - t.startedAt.getTime()),
3446
- error: t.error === null ? null : oo(t.error, 4e3),
3447
- response: so(t.response),
3463
+ error: t.error === null ? null : lo(t.error, 4e3),
3464
+ response: uo(t.response),
3448
3465
  subjectId: r.subjectId ?? null,
3449
3466
  tenantId: r.tenantId ?? null,
3450
3467
  traceId: r.traceId ?? null
3451
3468
  });
3452
3469
  } catch (e) {
3453
- Ya.warn("outbox: could not record delivery attempt (delivery itself is unaffected)", {
3470
+ Qa.warn("outbox: could not record delivery attempt (delivery itself is unaffected)", {
3454
3471
  outboxId: i,
3455
3472
  attempt: t.attempt
3456
3473
  }, e);
@@ -3458,7 +3475,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3458
3475
  }
3459
3476
  if (!(t.attempt <= n)) try {
3460
3477
  let t = await e.query({
3461
- table: Qa,
3478
+ table: to,
3462
3479
  predicate: u("outboxId", i),
3463
3480
  order: [{
3464
3481
  column: "attempt",
@@ -3468,11 +3485,11 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3468
3485
  skip: void 0,
3469
3486
  projection: ["id"]
3470
3487
  });
3471
- for (let r of t.slice(0, Math.max(0, t.length - n))) await e.delete(Qa, r.id);
3488
+ for (let r of t.slice(0, Math.max(0, t.length - n))) await e.delete(to, r.id);
3472
3489
  } catch (e) {
3473
- Ya.warn("outbox: attempt-log trim failed; the log may exceed its cap", { outboxId: i }, e);
3490
+ Qa.warn("outbox: attempt-log trim failed; the log may exceed its cap", { outboxId: i }, e);
3474
3491
  }
3475
- }, lo = async (e) => {
3492
+ }, po = async (e) => {
3476
3493
  let n = (e.now ?? (() => /* @__PURE__ */ new Date()))(), r = await e.store.query({
3477
3494
  table: Y,
3478
3495
  predicate: t(u("status", "pending"), ee("nextAttemptAt", n)),
@@ -3490,7 +3507,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3490
3507
  s++;
3491
3508
  continue;
3492
3509
  }
3493
- let u = t.attempts + 1, d = t.maxAttempts ?? no, f = /* @__PURE__ */ new Date(), p = e.attemptLogCap ?? 50;
3510
+ let u = t.attempts + 1, d = t.maxAttempts ?? ao, f = /* @__PURE__ */ new Date(), p = e.attemptLogCap ?? 50;
3494
3511
  try {
3495
3512
  let n = await l.handler({
3496
3513
  payload: t.payload ?? {},
@@ -3499,7 +3516,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3499
3516
  tenantId: t.tenantId ?? null,
3500
3517
  traceId: t.traceId ?? null
3501
3518
  });
3502
- await co(e.store, {
3519
+ await fo(e.store, {
3503
3520
  outboxRow: t,
3504
3521
  attempt: u,
3505
3522
  outcome: "delivered",
@@ -3517,7 +3534,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3517
3534
  }), i++;
3518
3535
  } catch (i) {
3519
3536
  let s = i instanceof Error ? i.message : String(i), l = u >= d;
3520
- await co(e.store, {
3537
+ await fo(e.store, {
3521
3538
  outboxRow: t,
3522
3539
  attempt: u,
3523
3540
  outcome: l ? "dead" : "failed",
@@ -3529,20 +3546,20 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3529
3546
  status: l ? "dead" : "pending",
3530
3547
  attempts: u,
3531
3548
  lastError: s,
3532
- nextAttemptAt: new Date(n.getTime() + io(u)),
3549
+ nextAttemptAt: new Date(n.getTime() + so(u)),
3533
3550
  resendRequestedBy: null,
3534
3551
  resendReason: null
3535
- }), l ? (o++, Ya.error("outbox effect dead-lettered after exhausting attempts", {
3552
+ }), l ? (o++, Qa.error("outbox effect dead-lettered after exhausting attempts", {
3536
3553
  id: r,
3537
3554
  effect: c,
3538
3555
  attempts: u,
3539
3556
  maxAttempts: d
3540
- }, i)) : (a++, Ya.warn("outbox delivery failed; will retry", {
3557
+ }, i)) : (a++, Qa.warn("outbox delivery failed; will retry", {
3541
3558
  id: r,
3542
3559
  effect: c,
3543
3560
  attempt: u,
3544
3561
  maxAttempts: d,
3545
- retryInMs: io(u)
3562
+ retryInMs: so(u)
3546
3563
  }));
3547
3564
  }
3548
3565
  }
@@ -3552,10 +3569,10 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3552
3569
  dead: o,
3553
3570
  skipped: s
3554
3571
  };
3555
- }, uo = M({ scope: "voltro:connections" }), X = "_voltro_connections", fo = {
3572
+ }, mo = M({ scope: "voltro:connections" }), X = "_voltro_connections", ho = {
3556
3573
  kind: "typeid",
3557
3574
  prefix: "conn"
3558
- }, po = O(X, {
3575
+ }, go = O(X, {
3559
3576
  id: v({ prefix: "conn" }),
3560
3577
  connectionId: k(),
3561
3578
  subjectId: k(),
@@ -3578,10 +3595,10 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3578
3595
  metadata: C().nullable(),
3579
3596
  connectedAt: A(),
3580
3597
  updatedAt: A()
3581
- }).unique("bySubject", ["connectionId", "subjectId"]).index(["subjectId"]).reactive(), mo = "_voltro_connection_grants", ho = {
3598
+ }).unique("bySubject", ["connectionId", "subjectId"]).index(["subjectId"]).reactive(), _o = "_voltro_connection_grants", vo = {
3582
3599
  kind: "typeid",
3583
3600
  prefix: "cgrant"
3584
- }, go = O(mo, {
3601
+ }, yo = O(_o, {
3585
3602
  id: v({ prefix: "cgrant" }),
3586
3603
  state: k().unique(),
3587
3604
  connectionId: k(),
@@ -3591,8 +3608,8 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3591
3608
  redirectTo: k(),
3592
3609
  createdAt: A(),
3593
3610
  expiresAt: A()
3594
- }).index(["expiresAt"]), _o = /^[a-z][a-z0-9-]*$/, vo = (e) => {
3595
- if (!_o.test(e.id)) throw Error(`defineConnection: id "${e.id}" must be lowercase kebab-case (it becomes a URL path segment).`);
3611
+ }).index(["expiresAt"]), bo = /^[a-z][a-z0-9-]*$/, xo = (e) => {
3612
+ if (!bo.test(e.id)) throw Error(`defineConnection: id "${e.id}" must be lowercase kebab-case (it becomes a URL path segment).`);
3596
3613
  if (e.kind === "oauth2") {
3597
3614
  for (let t of [
3598
3615
  "authorizeUrl",
@@ -3602,9 +3619,9 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3602
3619
  ]) if (typeof e[t] != "string" || e[t].length === 0) throw Error(`defineConnection("${e.id}"): \`${t}\` is required for kind 'oauth2'.`);
3603
3620
  }
3604
3621
  return e;
3605
- }, yo = (e) => e.label ?? e.id, bo = (e) => {
3606
- if (e.length !== 0 && Vi() === void 0) throw Error(`connections: ${e.length} connection(s) declared (${e.map((e) => e.id).join(", ")}) but no field cipher is registered. Connection tokens are stored encrypted and there is no plaintext fallback. Enable \`@voltro/plugin-governance\` with \`governancePlugin({ fieldEncryption: { key: env.FIELD_ENCRYPTION_KEY } })\` (or call setFieldCipher at boot).`);
3607
- }, xo = (e) => {
3622
+ }, So = (e) => e.label ?? e.id, Co = (e) => {
3623
+ if (e.length !== 0 && Wi() === void 0) throw Error(`connections: ${e.length} connection(s) declared (${e.map((e) => e.id).join(", ")}) but no field cipher is registered. Connection tokens are stored encrypted and there is no plaintext fallback. Enable \`@voltro/plugin-governance\` with \`governancePlugin({ fieldEncryption: { key: env.FIELD_ENCRYPTION_KEY } })\` (or call setFieldCipher at boot).`);
3624
+ }, wo = (e) => {
3608
3625
  let t = /* @__PURE__ */ new Map();
3609
3626
  for (let n of e) {
3610
3627
  if (t.has(n.id)) throw Error(`connections: duplicate connection id "${n.id}" — each *.connection.ts must declare a distinct id.`);
@@ -3614,14 +3631,14 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3614
3631
  get: (e) => t.get(e),
3615
3632
  list: () => [...t.values()]
3616
3633
  };
3617
- }, So = (e) => {
3634
+ }, To = (e) => {
3618
3635
  if (e == null) return null;
3619
3636
  let t = e instanceof Date ? e : new Date(String(e));
3620
3637
  return Number.isNaN(t.getTime()) ? null : t;
3621
- }, Co = (e) => So(e)?.toISOString() ?? null, wo = (e) => String(e ?? "").split(" ").filter((e) => e.length > 0), To = (e, t) => t === void 0 ? {
3638
+ }, Eo = (e) => To(e)?.toISOString() ?? null, Do = (e) => String(e ?? "").split(" ").filter((e) => e.length > 0), Oo = (e, t) => t === void 0 ? {
3622
3639
  connectionId: e.id,
3623
3640
  kind: e.kind,
3624
- label: yo(e),
3641
+ label: So(e),
3625
3642
  status: "disconnected",
3626
3643
  accountId: null,
3627
3644
  accountLabel: null,
@@ -3632,31 +3649,31 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3632
3649
  } : {
3633
3650
  connectionId: e.id,
3634
3651
  kind: e.kind,
3635
- label: yo(e),
3652
+ label: So(e),
3636
3653
  status: String(t.status ?? "connected"),
3637
3654
  accountId: t.accountId ?? null,
3638
3655
  accountLabel: t.accountLabel ?? null,
3639
- scopes: wo(t.scopes),
3640
- expiresAt: Co(t.expiresAt),
3656
+ scopes: Do(t.scopes),
3657
+ expiresAt: Eo(t.expiresAt),
3641
3658
  lastError: t.lastError ?? null,
3642
- connectedAt: Co(t.connectedAt)
3643
- }, Eo = async (e, n, r) => (await e.query({
3659
+ connectedAt: Eo(t.connectedAt)
3660
+ }, ko = async (e, n, r) => (await e.query({
3644
3661
  table: X,
3645
3662
  predicate: t(u("connectionId", n), u("subjectId", r)),
3646
3663
  order: [],
3647
3664
  take: 1,
3648
3665
  skip: void 0,
3649
3666
  projection: void 0
3650
- }))[0], Do = async (e) => {
3667
+ }))[0], Ao = async (e) => {
3651
3668
  let t = (e.now ?? (() => /* @__PURE__ */ new Date()))(), n = e.tokens.expiresAt === void 0 ? null : new Date(e.tokens.expiresAt), r = {
3652
- id: f(fo, X),
3669
+ id: f(ho, X),
3653
3670
  connectionId: e.definition.id,
3654
3671
  subjectId: e.subjectId,
3655
3672
  tenantId: e.tenantId,
3656
3673
  kind: e.definition.kind,
3657
3674
  status: "connected",
3658
- accessToken: Ui(e.tokens.accessToken),
3659
- refreshToken: e.tokens.refreshToken === void 0 ? null : Ui(e.tokens.refreshToken),
3675
+ accessToken: Ki(e.tokens.accessToken),
3676
+ refreshToken: e.tokens.refreshToken === void 0 ? null : Ki(e.tokens.refreshToken),
3660
3677
  expiresAt: n,
3661
3678
  scopes: e.tokens.scopes.length > 0 ? e.tokens.scopes.join(" ") : null,
3662
3679
  accountId: e.account?.accountId ?? null,
@@ -3667,8 +3684,8 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3667
3684
  connectedAt: t,
3668
3685
  updatedAt: t
3669
3686
  };
3670
- return Oo(e.store, r);
3671
- }, Oo = (e, t) => e.upsert(X, t, {
3687
+ return jo(e.store, r);
3688
+ }, jo = (e, t) => e.upsert(X, t, {
3672
3689
  conflictColumns: ["connectionId", "subjectId"],
3673
3690
  update: [
3674
3691
  "kind",
@@ -3684,10 +3701,10 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3684
3701
  "metadata",
3685
3702
  "updatedAt"
3686
3703
  ]
3687
- }), ko = async (e, t, n) => {
3688
- let r = await Eo(e, t, n);
3704
+ }), Mo = async (e, t, n) => {
3705
+ let r = await ko(e, t, n);
3689
3706
  return r !== void 0 && e.delete(X, r.id);
3690
- }, Ao = async (e, t, n) => {
3707
+ }, No = async (e, t, n) => {
3691
3708
  let r = await e.query({
3692
3709
  table: X,
3693
3710
  predicate: u("subjectId", n),
@@ -3696,9 +3713,9 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3696
3713
  skip: void 0,
3697
3714
  projection: void 0
3698
3715
  }), i = new Map(r.map((e) => [String(e.connectionId), e]));
3699
- return t.list().map((e) => To(e, i.get(e.id)));
3700
- }, jo = (e, t) => globalThis.fetch(e, t), Mo = async (e, t, n) => {
3701
- let r = e.fetchImpl ?? jo, i, a;
3716
+ return t.list().map((e) => Oo(e, i.get(e.id)));
3717
+ }, Po = (e, t) => globalThis.fetch(e, t), Fo = async (e, t, n) => {
3718
+ let r = e.fetchImpl ?? Po, i, a;
3702
3719
  try {
3703
3720
  let n = await r(e.tokenUrl, {
3704
3721
  method: "POST",
@@ -3738,62 +3755,62 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3738
3755
  ...Number.isFinite(o.expires_in) ? { expiresAt: n() + o.expires_in * 1e3 } : {},
3739
3756
  scopes: (o.scope ?? e.scopes?.join(" ") ?? "").split(" ").filter(Boolean)
3740
3757
  };
3741
- }, No = (e, t, n = Date.now) => Mo(e, {
3758
+ }, Io = (e, t, n = Date.now) => Fo(e, {
3742
3759
  grant_type: "authorization_code",
3743
3760
  client_id: e.clientId,
3744
3761
  client_secret: e.clientSecret,
3745
3762
  code: t.code,
3746
3763
  redirect_uri: t.redirectUri,
3747
3764
  ...t.codeVerifier ? { code_verifier: t.codeVerifier } : {}
3748
- }, n), Po = (e, t, n = Date.now) => Mo(e, {
3765
+ }, n), Lo = (e, t, n = Date.now) => Fo(e, {
3749
3766
  grant_type: "refresh_token",
3750
3767
  client_id: e.clientId,
3751
3768
  client_secret: e.clientSecret,
3752
3769
  refresh_token: t
3753
- }, n), Fo = 6e4, Io = 3e4, Lo = class extends Error {
3770
+ }, n), Ro = 6e4, zo = 3e4, Bo = class extends Error {
3754
3771
  connectionId;
3755
3772
  subjectId;
3756
3773
  _tag = "ConnectionNotConnected";
3757
3774
  constructor(e, t) {
3758
3775
  super(`connection "${e}" is not connected for this subject`), this.connectionId = e, this.subjectId = t, this.name = "ConnectionNotConnected";
3759
3776
  }
3760
- }, Ro = (e) => new Promise((t) => {
3777
+ }, Vo = (e) => new Promise((t) => {
3761
3778
  setTimeout(t, e);
3762
- }), zo = /* @__PURE__ */ new Map(), Bo = (e, t) => `${e}${t}`, Vo = () => {
3763
- zo.clear();
3764
- }, Ho = (e, t) => ({
3779
+ }), Ho = /* @__PURE__ */ new Map(), Uo = (e, t) => `${e}${t}`, Wo = () => {
3780
+ Ho.clear();
3781
+ }, Go = (e, t) => ({
3765
3782
  connectionId: e.id,
3766
3783
  kind: e.kind,
3767
- accessToken: Wi(String(t.accessToken)),
3768
- expiresAt: So(t.expiresAt),
3769
- scopes: wo(t.scopes),
3784
+ accessToken: qi(String(t.accessToken)),
3785
+ expiresAt: To(t.expiresAt),
3786
+ scopes: Do(t.scopes),
3770
3787
  accountId: t.accountId ?? null,
3771
3788
  accountLabel: t.accountLabel ?? null
3772
- }), Uo = (e, t, n) => {
3773
- let r = So(e.expiresAt);
3789
+ }), Ko = (e, t, n) => {
3790
+ let r = To(e.expiresAt);
3774
3791
  return r !== null && r.getTime() - n < t;
3775
- }, Wo = async (e) => {
3776
- let t = e.now ?? Date.now, { store: n, definition: r, subjectId: i } = e, a = await Eo(n, r.id, i);
3777
- if (a === void 0) throw new Lo(r.id, i);
3778
- if (r.kind === "pat" || !Uo(a, r.refreshSkewMs ?? 6e4, t())) return Ho(r, a);
3779
- let o = Bo(r.id, i), s = zo.get(o);
3792
+ }, qo = async (e) => {
3793
+ let t = e.now ?? Date.now, { store: n, definition: r, subjectId: i } = e, a = await ko(n, r.id, i);
3794
+ if (a === void 0) throw new Bo(r.id, i);
3795
+ if (r.kind === "pat" || !Ko(a, r.refreshSkewMs ?? 6e4, t())) return Go(r, a);
3796
+ let o = Uo(r.id, i), s = Ho.get(o);
3780
3797
  if (s !== void 0) return s;
3781
- let c = Go({
3798
+ let c = Jo({
3782
3799
  ...e,
3783
3800
  now: t,
3784
3801
  row: a
3785
3802
  }).finally(() => {
3786
- zo.delete(o);
3803
+ Ho.delete(o);
3787
3804
  });
3788
- return zo.set(o, c), c;
3789
- }, Go = async (e) => {
3790
- let { store: n, subjectId: r, now: i } = e, a = e.definition, o = e.sleep ?? Ro, s = a.refreshSkewMs ?? 6e4, c = e.row.id;
3805
+ return Ho.set(o, c), c;
3806
+ }, Jo = async (e) => {
3807
+ let { store: n, subjectId: r, now: i } = e, a = e.definition, o = e.sleep ?? Vo, s = a.refreshSkewMs ?? 6e4, c = e.row.id;
3791
3808
  if (await n.updateMany("_voltro_connections", { refreshLockedUntil: new Date(i() + 3e4) }, { where: t(u("id", c), ee("refreshLockedUntil", new Date(i()))) }) === 0) {
3792
3809
  for (let e = 0; e < 10; e++) {
3793
3810
  await o(200);
3794
- let e = await Eo(n, a.id, r);
3795
- if (e === void 0) throw new Lo(a.id, r);
3796
- if (!Uo(e, s, i())) return Ho(a, e);
3811
+ let e = await ko(n, a.id, r);
3812
+ if (e === void 0) throw new Bo(a.id, r);
3813
+ if (!Ko(e, s, i())) return Go(a, e);
3797
3814
  }
3798
3815
  throw new j({
3799
3816
  connectionId: a.id,
@@ -3814,7 +3831,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3814
3831
  });
3815
3832
  let d;
3816
3833
  try {
3817
- d = await Po(a, Wi(String(l)), i);
3834
+ d = await Lo(a, qi(String(l)), i);
3818
3835
  } catch (e) {
3819
3836
  let t = e instanceof j ? e : new j({
3820
3837
  connectionId: a.id,
@@ -3827,11 +3844,11 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3827
3844
  refreshLockedUntil: /* @__PURE__ */ new Date(0),
3828
3845
  updatedAt: new Date(i()),
3829
3846
  ...t.transient ? {} : {
3830
- accessToken: Ui(""),
3847
+ accessToken: Ki(""),
3831
3848
  refreshToken: null,
3832
3849
  expiresAt: null
3833
3850
  }
3834
- }), uo.warn("connection refresh failed", {
3851
+ }), mo.warn("connection refresh failed", {
3835
3852
  connectionId: a.id,
3836
3853
  transient: t.transient,
3837
3854
  reason: t.reason
@@ -3839,40 +3856,40 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3839
3856
  }
3840
3857
  let f = {
3841
3858
  status: "connected",
3842
- accessToken: Ui(d.accessToken),
3843
- ...d.refreshToken === void 0 ? {} : { refreshToken: Ui(d.refreshToken) },
3859
+ accessToken: Ki(d.accessToken),
3860
+ ...d.refreshToken === void 0 ? {} : { refreshToken: Ki(d.refreshToken) },
3844
3861
  expiresAt: d.expiresAt === void 0 ? null : new Date(d.expiresAt),
3845
3862
  ...d.scopes.length > 0 ? { scopes: d.scopes.join(" ") } : {},
3846
3863
  lastError: null,
3847
3864
  refreshLockedUntil: /* @__PURE__ */ new Date(0),
3848
3865
  updatedAt: new Date(i())
3849
3866
  };
3850
- return Ho(a, await n.update(X, c, f) ?? {
3867
+ return Go(a, await n.update(X, c, f) ?? {
3851
3868
  ...e.row,
3852
3869
  ...f
3853
3870
  });
3854
- }, Ko = (e = 32) => {
3871
+ }, Yo = (e = 32) => {
3855
3872
  let t = new Uint8Array(e);
3856
3873
  return globalThis.crypto.getRandomValues(t), Array.from(t, (e) => e.toString(16).padStart(2, "0")).join("");
3857
- }, qo = (e) => {
3874
+ }, Xo = (e) => {
3858
3875
  let t = "";
3859
3876
  for (let n of e) t += String.fromCharCode(n);
3860
3877
  return btoa(t).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
3861
- }, Jo = async (e) => {
3878
+ }, Zo = async (e) => {
3862
3879
  let t = await globalThis.crypto.subtle.digest("SHA-256", new TextEncoder().encode(e));
3863
- return qo(new Uint8Array(t));
3864
- }, Yo = 10 * 6e4, Xo = (e) => `/_voltro/connections/${e}/callback`, Zo = (e) => e === void 0 || e.length === 0 || !e.startsWith("/") || e.startsWith("//") || e.startsWith("/\\") ? "/" : e, Qo = (e, t) => e.redirectUri ?? `${t.replace(/\/+$/, "")}${Xo(e.id)}`, $o = async (e) => {
3865
- let t = (e.now ?? (() => /* @__PURE__ */ new Date()))(), { definition: n } = e, r = Ko(), i = n.pkce === !1 ? null : Ko(48), a = Qo(n, e.publicUrl);
3866
- await e.store.insert(mo, {
3867
- id: f(ho, mo),
3880
+ return Xo(new Uint8Array(t));
3881
+ }, Qo = 10 * 6e4, $o = (e) => `/_voltro/connections/${e}/callback`, es = (e) => e === void 0 || e.length === 0 || !e.startsWith("/") || e.startsWith("//") || e.startsWith("/\\") ? "/" : e, ts = (e, t) => e.redirectUri ?? `${t.replace(/\/+$/, "")}${$o(e.id)}`, ns = async (e) => {
3882
+ let t = (e.now ?? (() => /* @__PURE__ */ new Date()))(), { definition: n } = e, r = Yo(), i = n.pkce === !1 ? null : Yo(48), a = ts(n, e.publicUrl);
3883
+ await e.store.insert(_o, {
3884
+ id: f(vo, _o),
3868
3885
  state: r,
3869
3886
  connectionId: n.id,
3870
3887
  subjectId: e.subjectId,
3871
3888
  tenantId: e.tenantId,
3872
- codeVerifier: i === null ? null : Ui(i),
3873
- redirectTo: Zo(e.redirectTo),
3889
+ codeVerifier: i === null ? null : Ki(i),
3890
+ redirectTo: es(e.redirectTo),
3874
3891
  createdAt: t,
3875
- expiresAt: new Date(t.getTime() + Yo)
3892
+ expiresAt: new Date(t.getTime() + Qo)
3876
3893
  });
3877
3894
  let o = new URLSearchParams({
3878
3895
  response_type: "code",
@@ -3882,15 +3899,15 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3882
3899
  ...n.scopes && n.scopes.length > 0 ? { scope: n.scopes.join(" ") } : {},
3883
3900
  ...n.authorizeParams ?? {}
3884
3901
  });
3885
- i !== null && (o.set("code_challenge", await Jo(i)), o.set("code_challenge_method", "S256"));
3902
+ i !== null && (o.set("code_challenge", await Zo(i)), o.set("code_challenge_method", "S256"));
3886
3903
  let s = n.authorizeUrl.includes("?") ? "&" : "?";
3887
3904
  return {
3888
3905
  authorizeUrl: `${n.authorizeUrl}${s}${o.toString()}`,
3889
3906
  state: r
3890
3907
  };
3891
- }, es = async (e) => {
3908
+ }, rs = async (e) => {
3892
3909
  let t = (e.now ?? (() => /* @__PURE__ */ new Date()))(), n = (await e.store.query({
3893
- table: mo,
3910
+ table: _o,
3894
3911
  predicate: u("state", e.state),
3895
3912
  order: [],
3896
3913
  take: 1,
@@ -3902,8 +3919,8 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3902
3919
  reason: "unknown or already-used handshake state",
3903
3920
  transient: !1
3904
3921
  });
3905
- await e.store.delete(mo, n.id);
3906
- let r = String(n.connectionId), i = So(n.expiresAt);
3922
+ await e.store.delete(_o, n.id);
3923
+ let r = String(n.connectionId), i = To(n.expiresAt);
3907
3924
  if (i !== null && i.getTime() < t.getTime()) throw new j({
3908
3925
  connectionId: r,
3909
3926
  reason: "handshake expired — start again",
@@ -3915,17 +3932,17 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3915
3932
  reason: "no oauth2 connection is declared under that id",
3916
3933
  transient: !1
3917
3934
  });
3918
- let o = n.codeVerifier === null || n.codeVerifier === void 0 ? null : Wi(String(n.codeVerifier)), s = await No(a, {
3935
+ let o = n.codeVerifier === null || n.codeVerifier === void 0 ? null : qi(String(n.codeVerifier)), s = await Io(a, {
3919
3936
  code: e.code,
3920
- redirectUri: Qo(a, e.publicUrl),
3937
+ redirectUri: ts(a, e.publicUrl),
3921
3938
  codeVerifier: o
3922
3939
  }, () => t.getTime()), c = a.identify === void 0 ? void 0 : await a.identify(s).catch((e) => {
3923
- uo.warn("connection identify failed; storing without account details", {
3940
+ mo.warn("connection identify failed; storing without account details", {
3924
3941
  connectionId: r,
3925
3942
  reason: String(e)
3926
3943
  });
3927
3944
  });
3928
- return await Do({
3945
+ return await Ao({
3929
3946
  store: e.store,
3930
3947
  definition: a,
3931
3948
  subjectId: String(n.subjectId),
@@ -3935,11 +3952,11 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3935
3952
  now: () => t
3936
3953
  }), {
3937
3954
  connectionId: r,
3938
- redirectTo: Zo(String(n.redirectTo ?? "/"))
3955
+ redirectTo: es(String(n.redirectTo ?? "/"))
3939
3956
  };
3940
- }, ts = async (e, t = /* @__PURE__ */ new Date()) => {
3957
+ }, is = async (e, t = /* @__PURE__ */ new Date()) => {
3941
3958
  let n = await e.query({
3942
- table: mo,
3959
+ table: _o,
3943
3960
  predicate: ee("expiresAt", t),
3944
3961
  order: [],
3945
3962
  take: void 0,
@@ -3948,27 +3965,27 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3948
3965
  }), r = 0;
3949
3966
  for (let t of n) await e.delete("_voltro_connection_grants", t.id) && r++;
3950
3967
  return r;
3951
- }, ns, rs = (e) => {
3952
- ns = e;
3953
- }, is = () => ns, as = (e, t) => {
3954
- let n = ns;
3968
+ }, as, os = (e) => {
3969
+ as = e;
3970
+ }, ss = () => as, cs = (e, t) => {
3971
+ let n = as;
3955
3972
  return n === void 0 ? Promise.reject(/* @__PURE__ */ Error(`resolveConnectionForSubject("${t}"): no connection vault is registered — the app declares no \`*.connection.ts\`, or this call ran before boot completed.`)) : n(e, t);
3956
- }, os = (e) => async (t, n) => {
3973
+ }, ls = (e) => async (t, n) => {
3957
3974
  let r = e.registry.get(n);
3958
3975
  if (r === void 0) throw Error(`connection "${n}" is not declared. Declared: ${e.registry.list().map((e) => e.id).join(", ") || "(none)"}.`);
3959
3976
  let i = t.id ?? null;
3960
- if (i === null || i === "") throw new Lo(n, "<anonymous>");
3961
- return Wo({
3977
+ if (i === null || i === "") throw new Bo(n, "<anonymous>");
3978
+ return qo({
3962
3979
  store: e.store,
3963
3980
  definition: r,
3964
3981
  subjectId: i
3965
3982
  });
3966
- }, ss = (e) => {
3983
+ }, us = (e) => {
3967
3984
  let t = e.subject.id ?? null, n = async (n) => {
3968
3985
  let r = e.registry.get(n);
3969
3986
  if (r === void 0) throw Error(`ctx.connections.get("${n}"): no such connection is declared. Declared: ${e.registry.list().map((e) => e.id).join(", ") || "(none)"}.`);
3970
- if (t === null || t === "") throw new Lo(n, "<anonymous>");
3971
- return Wo({
3987
+ if (t === null || t === "") throw new Bo(n, "<anonymous>");
3988
+ return qo({
3972
3989
  store: e.store,
3973
3990
  definition: r,
3974
3991
  subjectId: t
@@ -3980,7 +3997,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3980
3997
  try {
3981
3998
  return await n(e);
3982
3999
  } catch (e) {
3983
- if (e instanceof Lo) return null;
4000
+ if (e instanceof Bo) return null;
3984
4001
  throw e;
3985
4002
  }
3986
4003
  },
@@ -3995,17 +4012,17 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
3995
4012
  expiresAt: null,
3996
4013
  lastError: null,
3997
4014
  connectedAt: null
3998
- })) : Ao(e.store, e.registry, t)
4015
+ })) : No(e.store, e.registry, t)
3999
4016
  };
4000
- }, cs = (e, t) => {
4017
+ }, ds = (e, t) => {
4001
4018
  let n = e.request?.subject?.id ?? null;
4002
4019
  if (n === null || n === "") throw new De({ connectionId: t });
4003
4020
  return n;
4004
- }, ls = (e, t) => {
4021
+ }, fs = (e, t) => {
4005
4022
  let n = e.registry.get(t);
4006
4023
  if (n === void 0) throw new Ee({ connectionId: t });
4007
4024
  return n;
4008
- }, us = (e) => async (t, n) => {
4025
+ }, ps = (e) => async (t, n) => {
4009
4026
  let r = n.request?.subject?.id ?? null;
4010
4027
  return r === null || r === "" ? e.registry.list().map((e) => ({
4011
4028
  connectionId: e.id,
@@ -4018,15 +4035,15 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4018
4035
  expiresAt: null,
4019
4036
  lastError: null,
4020
4037
  connectedAt: null
4021
- })) : Ao(n.store, e.registry, r);
4022
- }, ds = (e) => async (t, n) => {
4023
- let r = ls(e, t.connectionId), i = cs(n, t.connectionId);
4038
+ })) : No(n.store, e.registry, r);
4039
+ }, ms = (e) => async (t, n) => {
4040
+ let r = fs(e, t.connectionId), i = ds(n, t.connectionId);
4024
4041
  if (r.kind !== "oauth2") throw new Te({
4025
4042
  connectionId: t.connectionId,
4026
4043
  expected: "oauth2",
4027
4044
  actual: r.kind
4028
4045
  });
4029
- return $o({
4046
+ return ns({
4030
4047
  store: n.store,
4031
4048
  definition: r,
4032
4049
  subjectId: i,
@@ -4034,8 +4051,8 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4034
4051
  publicUrl: e.publicUrl,
4035
4052
  ...t.redirectTo === void 0 ? {} : { redirectTo: t.redirectTo }
4036
4053
  });
4037
- }, fs = (e) => async (t, n) => {
4038
- let r = ls(e, t.connectionId), i = cs(n, t.connectionId);
4054
+ }, hs = (e) => async (t, n) => {
4055
+ let r = fs(e, t.connectionId), i = ds(n, t.connectionId);
4039
4056
  if (r.kind !== "pat") throw new Te({
4040
4057
  connectionId: t.connectionId,
4041
4058
  expected: "pat",
@@ -4057,7 +4074,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4057
4074
  transient: !1
4058
4075
  });
4059
4076
  }
4060
- return await Do({
4077
+ return await Ao({
4061
4078
  store: n.store,
4062
4079
  definition: r,
4063
4080
  subjectId: i,
@@ -4068,20 +4085,20 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4068
4085
  },
4069
4086
  ...o === void 0 ? {} : { account: o }
4070
4087
  }), { ok: !0 };
4071
- }, ps = (e) => async (t, n) => {
4072
- ls(e, t.connectionId);
4073
- let r = cs(n, t.connectionId);
4074
- return { ok: await ko(n.store, t.connectionId, r) };
4075
- }, ms = "admin:full", hs = class extends R.TaggedError()("AccessDenied", {
4088
+ }, gs = (e) => async (t, n) => {
4089
+ fs(e, t.connectionId);
4090
+ let r = ds(n, t.connectionId);
4091
+ return { ok: await Mo(n.store, t.connectionId, r) };
4092
+ }, _s = "admin:full", vs = class extends R.TaggedError()("AccessDenied", {
4076
4093
  action: R.String,
4077
4094
  resourceType: R.String,
4078
4095
  resourceId: R.String
4079
- }) {}, gs = /* @__PURE__ */ new Map(), _s = (e) => {
4096
+ }) {}, ys = /* @__PURE__ */ new Map(), bs = (e) => {
4080
4097
  if (typeof e.resourceType != "string" || e.resourceType.length === 0) throw Error("defineResourcePolicy: a non-empty `resourceType` is required");
4081
4098
  if (e.actions === void 0 || Object.keys(e.actions).length === 0) throw Error(`resource policy '${e.resourceType}': at least one action is required`);
4082
- if (gs.has(e.resourceType)) throw Error(`resource policy '${e.resourceType}' is already registered — types must be unique`);
4083
- return gs.set(e.resourceType, e), e;
4084
- }, vs = (e) => gs.get(e), ys = () => [...gs.values()], bs = () => gs.clear(), xs = () => ys().map((e) => {
4099
+ if (ys.has(e.resourceType)) throw Error(`resource policy '${e.resourceType}' is already registered — types must be unique`);
4100
+ return ys.set(e.resourceType, e), e;
4101
+ }, xs = (e) => ys.get(e), Ss = () => [...ys.values()], Cs = () => ys.clear(), ws = () => Ss().map((e) => {
4085
4102
  let t = /* @__PURE__ */ new Set();
4086
4103
  for (let n of Object.values(e.actions)) for (let e of n) t.add(e);
4087
4104
  for (let [n, r] of Object.entries(e.implies ?? {})) {
@@ -4094,7 +4111,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4094
4111
  relations: [...t],
4095
4112
  implies: e.implies ?? {}
4096
4113
  };
4097
- }), Ss = (e, t) => {
4114
+ }), Ts = (e, t) => {
4098
4115
  let n = new Set(e);
4099
4116
  if (t === void 0) return n;
4100
4117
  let r = [...e];
@@ -4103,37 +4120,37 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4103
4120
  for (let i of t[e] ?? []) n.has(i) || (n.add(i), r.push(i));
4104
4121
  }
4105
4122
  return n;
4106
- }, Cs = (e, t, n, r) => e.id === null ? /* @__PURE__ */ new Set() : Ss(n.filter((n) => n.subjectId === e.id && n.resourceType === t.type && n.resourceId === t.id).map((e) => e.relation), r.implies), ws = (e, t, n, r) => {
4123
+ }, Es = (e, t, n, r) => e.id === null ? /* @__PURE__ */ new Set() : Ts(n.filter((n) => n.subjectId === e.id && n.resourceType === t.type && n.resourceId === t.id).map((e) => e.relation), r.implies), Ds = (e, t, n, r) => {
4107
4124
  if (e.scopes?.includes("admin:full")) return !0;
4108
4125
  if (e.id === null || n.tenantId != null && e.tenantId !== n.tenantId) return !1;
4109
4126
  let i = r.policy.actions[t];
4110
4127
  if (i === void 0 || i.length === 0) return !1;
4111
- let a = Cs(e, n, r.tuples, r.policy);
4128
+ let a = Es(e, n, r.tuples, r.policy);
4112
4129
  return i.some((e) => a.has(e));
4113
- }, Ts = (e, t, n, r) => {
4114
- if (!ws(e, t, n, r)) throw new hs({
4130
+ }, Os = (e, t, n, r) => {
4131
+ if (!Ds(e, t, n, r)) throw new vs({
4115
4132
  action: t,
4116
4133
  resourceType: n.type,
4117
4134
  resourceId: n.id
4118
4135
  });
4119
- }, Es = (e, t, n, r, i) => r.filter((r) => ws(e, t, {
4136
+ }, ks = (e, t, n, r, i) => r.filter((r) => Ds(e, t, {
4120
4137
  type: n,
4121
4138
  id: r.id,
4122
4139
  ...r.tenantId === void 0 ? {} : { tenantId: r.tenantId }
4123
- }, i)), Ds = (e, t) => {
4140
+ }, i)), As = (e, t) => {
4124
4141
  let n = new Set(t.map((e) => e.id));
4125
4142
  return e.filter((e) => !n.has(e.id)).map((e) => e.id);
4126
- }, Os = M({ scope: "voltro:policy" }), ks, As = (e) => {
4127
- ks = e;
4128
- }, js = () => ks, Ms = () => {
4143
+ }, js = M({ scope: "voltro:policy" }), Ms, Ns = (e) => {
4144
+ Ms = e;
4145
+ }, Ps = () => Ms, Fs = () => {
4129
4146
  Ve((e) => P.gen(function* () {
4130
- let t = vs(e.resourceType);
4131
- if (t === void 0) return Os.warn("policy guard denied — no resource policy registered for this type", {
4147
+ let t = xs(e.resourceType);
4148
+ if (t === void 0) return js.warn("policy guard denied — no resource policy registered for this type", {
4132
4149
  resourceType: e.resourceType,
4133
4150
  action: e.action
4134
4151
  }), !1;
4135
- let n = ks;
4136
- if (n === void 0) return Os.warn("policy guard denied — no tuple source registered (call setTupleSource at boot)", {
4152
+ let n = Ms;
4153
+ if (n === void 0) return js.warn("policy guard denied — no tuple source registered (call setTupleSource at boot)", {
4137
4154
  resourceType: e.resourceType,
4138
4155
  action: e.action
4139
4156
  }), !1;
@@ -4144,11 +4161,11 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4144
4161
  resourceId: e.resourceId
4145
4162
  }),
4146
4163
  catch: (e) => e
4147
- }).pipe(P.catchAll((t) => (Os.error("policy guard denied — tuple source failed", {
4164
+ }).pipe(P.catchAll((t) => (js.error("policy guard denied — tuple source failed", {
4148
4165
  resourceType: e.resourceType,
4149
4166
  resourceId: e.resourceId
4150
4167
  }, t), P.succeed([])))), i = e.subject;
4151
- return ws({
4168
+ return Ds({
4152
4169
  id: e.subject.id,
4153
4170
  tenantId: i.tenantId ?? null,
4154
4171
  ...i.scopes === void 0 ? {} : { scopes: i.scopes }
@@ -4161,10 +4178,10 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4161
4178
  tuples: r
4162
4179
  });
4163
4180
  }));
4164
- }, Ns = (e) => {
4181
+ }, Is = (e) => {
4165
4182
  Promise.resolve().then(e);
4166
- }, Ps = (e) => {
4167
- let t = e.schedule ?? Ns, n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map(), i = (e, t) => `${e}${t}`, a = async (t) => {
4183
+ }, Ls = (e) => {
4184
+ let t = e.schedule ?? Is, n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map(), i = (e, t) => `${e}${t}`, a = async (t) => {
4168
4185
  let a = r.get(t);
4169
4186
  if (a === void 0) return;
4170
4187
  r.delete(t);
@@ -4210,23 +4227,23 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4210
4227
  load: async (e, t) => (await o(e, [t]))[0] ?? null,
4211
4228
  loadMany: (e, t) => o(e, t)
4212
4229
  };
4213
- }, Fs = F.effect(B.HttpClient, P.map(B.HttpClient, (e) => e.pipe(B.mapRequestEffect((e) => P.currentSpan.pipe(P.map((t) => e.headers.traceparent === void 0 ? ot.setHeader(e, "traceparent", mr({
4230
+ }, Rs = F.effect(B.HttpClient, P.map(B.HttpClient, (e) => e.pipe(B.mapRequestEffect((e) => P.currentSpan.pipe(P.map((t) => e.headers.traceparent === void 0 ? ot.setHeader(e, "traceparent", mr({
4214
4231
  traceId: t.traceId,
4215
4232
  spanId: t.spanId,
4216
4233
  sampled: t.sampled
4217
- })) : e), P.catchAll(() => P.succeed(e))))))), Is = class extends Error {
4234
+ })) : e), P.catchAll(() => P.succeed(e))))))), zs = class extends Error {
4218
4235
  url;
4219
4236
  reason;
4220
4237
  _tag = "SsrfBlockedError";
4221
4238
  constructor(e, t) {
4222
4239
  super(`SSRF: blocked outbound request to ${e} — ${t}. If this target is intentional, add its host to \`http.allowHosts\` in app.config.ts.`), this.url = e, this.reason = t, this.name = "SsrfBlockedError";
4223
4240
  }
4224
- }, Ls = (e, t) => e === 0 || e === 10 || e === 127 || e === 100 && t >= 64 && t <= 127 || e === 169 && t === 254 || e === 172 && t >= 16 && t <= 31 || e === 192 && t === 168 || e === 198 && (t === 18 || t === 19) || e >= 224, Rs = (e) => e === "::" || e === "::1" || e.startsWith("fc") || e.startsWith("fd") || e.startsWith("fe80") || e.startsWith("::ffff:"), zs = (e, t, n) => n.some((n) => {
4241
+ }, Bs = (e, t) => e === 0 || e === 10 || e === 127 || e === 100 && t >= 64 && t <= 127 || e === 169 && t === 254 || e === 172 && t >= 16 && t <= 31 || e === 192 && t === 168 || e === 198 && (t === 18 || t === 19) || e >= 224, Vs = (e) => e === "::" || e === "::1" || e.startsWith("fc") || e.startsWith("fd") || e.startsWith("fe80") || e.startsWith("::ffff:"), Hs = (e, t, n) => n.some((n) => {
4225
4242
  let r = n.trim().toLowerCase();
4226
4243
  if (r === "") return !1;
4227
4244
  let i = t === "" ? e : `${e}:${t}`;
4228
4245
  return r === e || r === i ? !0 : r.startsWith("*.") ? e.endsWith(r.slice(1)) : !1;
4229
- }), Bs = (e, t = {}) => {
4246
+ }), Us = (e, t = {}) => {
4230
4247
  let n;
4231
4248
  try {
4232
4249
  n = new URL(e);
@@ -4235,25 +4252,25 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4235
4252
  }
4236
4253
  if (n.protocol !== "http:" && n.protocol !== "https:") return `blocked scheme "${n.protocol}"`;
4237
4254
  let r = n.hostname.replace(/^\[|\]$/g, "").toLowerCase();
4238
- if (zs(r, n.port, t.allowHosts ?? [])) return null;
4255
+ if (Hs(r, n.port, t.allowHosts ?? [])) return null;
4239
4256
  if (r === "localhost" || r.endsWith(".localhost") || r.endsWith(".internal") || r.endsWith(".local")) return `blocked host "${r}"`;
4240
4257
  let i = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(r);
4241
4258
  if (i) {
4242
4259
  let e = Number(i[1]), t = Number(i[2]);
4243
- return e > 255 || t > 255 || Number(i[3]) > 255 || Number(i[4]) > 255 ? "malformed ipv4 literal" : Ls(e, t) ? `blocked private/reserved address ${r}` : null;
4260
+ return e > 255 || t > 255 || Number(i[3]) > 255 || Number(i[4]) > 255 ? "malformed ipv4 literal" : Bs(e, t) ? `blocked private/reserved address ${r}` : null;
4244
4261
  }
4245
4262
  if (r.includes(":")) {
4246
4263
  let e = /^::ffff:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/.exec(r);
4247
- return e ? Bs(`${n.protocol}//${e[1]}`, t) : Rs(r) ? `blocked private/reserved address ${r}` : null;
4264
+ return e ? Us(`${n.protocol}//${e[1]}`, t) : Vs(r) ? `blocked private/reserved address ${r}` : null;
4248
4265
  }
4249
4266
  return null;
4250
- }, Vs = (e = {}) => F.effect(B.HttpClient, P.map(B.HttpClient, (t) => {
4267
+ }, Ws = (e = {}) => F.effect(B.HttpClient, P.map(B.HttpClient, (t) => {
4251
4268
  let n = B.transform(t, (t, n) => P.suspend(() => {
4252
- let r = Bs(n.url, e);
4253
- return r === null ? t : P.die(new Is(n.url, r));
4269
+ let r = Us(n.url, e);
4270
+ return r === null ? t : P.die(new zs(n.url, r));
4254
4271
  }));
4255
4272
  return B.followRedirects(n, e.maxRedirects ?? 5);
4256
- })), Hs = (e) => {
4273
+ })), Gs = (e) => {
4257
4274
  let t = e.now ?? Date.now, n = e.intervalMs ?? 3e4, r = e.maxPending ?? 500, i = /* @__PURE__ */ new Map(), a = !1, o = async () => {
4258
4275
  if (i.size === 0) return;
4259
4276
  let t = i;
@@ -4282,7 +4299,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4282
4299
  },
4283
4300
  pending: () => i.size
4284
4301
  };
4285
- }, Us = "voltro/audit", Ws = "voltro/softDelete", Gs = "voltro/tenant", Ks = (e) => {
4302
+ }, Ks = "voltro/audit", qs = "voltro/softDelete", Js = "voltro/tenant", Ys = (e) => {
4286
4303
  let t = /* @__PURE__ */ new Map();
4287
4304
  for (let n of e) {
4288
4305
  let e = /* @__PURE__ */ new Set();
@@ -4326,28 +4343,28 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4326
4343
  return !1;
4327
4344
  },
4328
4345
  idScheme: (e) => t.get(e)?.idScheme,
4329
- defaultFactories: (e) => t.get(e)?.defaultFactories ?? qs,
4330
- computedFields: (e) => t.get(e)?.computedFields ?? Js,
4331
- generatedColumns: (e) => t.get(e)?.generatedColumns ?? Ys,
4346
+ defaultFactories: (e) => t.get(e)?.defaultFactories ?? Xs,
4347
+ computedFields: (e) => t.get(e)?.computedFields ?? Zs,
4348
+ generatedColumns: (e) => t.get(e)?.generatedColumns ?? Qs,
4332
4349
  insertSchema: (e) => t.get(e)?.insertSchema,
4333
4350
  validatePatchSchema: (e) => t.get(e)?.validatePatchSchema
4334
4351
  };
4335
- }, qs = /* @__PURE__ */ new Map(), Js = /* @__PURE__ */ new Map(), Ys = /* @__PURE__ */ new Set(), Xs = Ks([]), Zs = class extends R.TaggedError()("NoRowFound", {
4352
+ }, Xs = /* @__PURE__ */ new Map(), Zs = /* @__PURE__ */ new Map(), Qs = /* @__PURE__ */ new Set(), $s = Ys([]), ec = class extends R.TaggedError()("NoRowFound", {
4336
4353
  table: R.String,
4337
4354
  found: R.Number
4338
4355
  }) {
4339
4356
  get message() {
4340
4357
  return this.found === 0 ? `expected exactly one row in '${this.table}', found none` : `expected exactly one row in '${this.table}', found more than one`;
4341
4358
  }
4342
- }, Qs = class extends R.TaggedError()("OptimisticLockError", {
4359
+ }, tc = class extends R.TaggedError()("OptimisticLockError", {
4343
4360
  table: R.String,
4344
4361
  expected: R.Number
4345
4362
  }) {
4346
4363
  get message() {
4347
4364
  return `optimistic lock failed on '${this.table}': expected version ${this.expected}`;
4348
4365
  }
4349
- }, $s = (e) => typeof e == "object" && !!e && ("and" in e || "or" in e || "not" in e || "op" in e || "subquery" in e), ec = (e) => {
4350
- if (e.length === 1 && $s(e[0])) return e[0];
4366
+ }, nc = (e) => typeof e == "object" && !!e && ("and" in e || "or" in e || "not" in e || "op" in e || "subquery" in e), rc = (e) => {
4367
+ if (e.length === 1 && nc(e[0])) return e[0];
4351
4368
  let t = e[0];
4352
4369
  if (e.length === 2) return u(t, e[1]);
4353
4370
  let n = e[1], r = e[2];
@@ -4365,11 +4382,11 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4365
4382
  case "fts": return o(t, r);
4366
4383
  default: return u(t, r);
4367
4384
  }
4368
- }, tc = (e) => {
4385
+ }, ic = (e) => {
4369
4386
  let t = m(e);
4370
4387
  if (t === void 0) throw Error(`unknown table '${e}' — is it declared with table()?`);
4371
4388
  return E(t);
4372
- }, nc = class e {
4389
+ }, ac = class e {
4373
4390
  backend;
4374
4391
  scope;
4375
4392
  table;
@@ -4383,7 +4400,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4383
4400
  return new e(this.backend, this.scope, this.table, t, this.skipTenant, this.skipSoftDelete);
4384
4401
  }
4385
4402
  where(...e) {
4386
- return this.clone(this.query.where(ec(e)));
4403
+ return this.clone(this.query.where(rc(e)));
4387
4404
  }
4388
4405
  orderBy(e, t = "asc") {
4389
4406
  return this.clone(this.query.orderBy(e, t));
@@ -4432,11 +4449,11 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4432
4449
  }
4433
4450
  async one() {
4434
4451
  let e = await this.backend.query(this.scopedQuery().limit(2).descriptor), t = e[0];
4435
- if (t === void 0) throw new Zs({
4452
+ if (t === void 0) throw new ec({
4436
4453
  table: this.table,
4437
4454
  found: 0
4438
4455
  });
4439
- if (e.length > 1) throw new Zs({
4456
+ if (e.length > 1) throw new ec({
4440
4457
  table: this.table,
4441
4458
  found: e.length
4442
4459
  });
@@ -4452,7 +4469,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4452
4469
  get descriptor() {
4453
4470
  return this.scopedQuery().descriptor;
4454
4471
  }
4455
- }, rc = class {
4472
+ }, oc = class {
4456
4473
  backend;
4457
4474
  scope;
4458
4475
  table;
@@ -4463,7 +4480,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4463
4480
  this.backend = e, this.scope = t, this.table = n;
4464
4481
  }
4465
4482
  where(...e) {
4466
- let n = ec(e);
4483
+ let n = rc(e);
4467
4484
  return this.predicate = this.predicate ? t(this.predicate, n) : n, this;
4468
4485
  }
4469
4486
  unscoped() {
@@ -4487,7 +4504,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4487
4504
  }
4488
4505
  async set(e) {
4489
4506
  let t = await this.backend.updateMany(this.table, e, { where: this.scopedWhere() });
4490
- if (this.expectedVersion !== void 0 && t === 0) throw new Qs({
4507
+ if (this.expectedVersion !== void 0 && t === 0) throw new tc({
4491
4508
  table: this.table,
4492
4509
  expected: this.expectedVersion
4493
4510
  });
@@ -4496,7 +4513,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4496
4513
  async restore() {
4497
4514
  return this.backend.updateMany(this.table, { deletedAt: null }, { where: this.scopedWhere() });
4498
4515
  }
4499
- }, ic = class {
4516
+ }, sc = class {
4500
4517
  backend;
4501
4518
  scope;
4502
4519
  table;
@@ -4506,7 +4523,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4506
4523
  this.backend = e, this.scope = t, this.table = n;
4507
4524
  }
4508
4525
  where(...e) {
4509
- let n = ec(e);
4526
+ let n = rc(e);
4510
4527
  return this.predicate = this.predicate ? t(this.predicate, n) : n, this;
4511
4528
  }
4512
4529
  unscoped() {
@@ -4527,36 +4544,36 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4527
4544
  async hard() {
4528
4545
  return this.backend.deleteMany(this.table, { where: this.scopedWhere() });
4529
4546
  }
4530
- }, ac = (e, t) => ({
4531
- select: (n) => new nc(e, t, n, tc(n)),
4532
- updateWhere: (n) => new rc(e, t, n),
4533
- deleteWhere: (n) => new ic(e, t, n)
4534
- }), oc = "id", sc = (e) => "descriptor" in e ? e.descriptor : e, cc = (e, t) => {
4547
+ }, cc = (e, t) => ({
4548
+ select: (n) => new ac(e, t, n, ic(n)),
4549
+ updateWhere: (n) => new oc(e, t, n),
4550
+ deleteWhere: (n) => new sc(e, t, n)
4551
+ }), lc = "id", uc = (e) => "descriptor" in e ? e.descriptor : e, dc = (e, t) => {
4535
4552
  let n = {};
4536
4553
  for (let r of t) e[r] !== void 0 && (n[r] = e[r]);
4537
4554
  return n;
4538
- }, lc = "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).", uc = (e) => {
4539
- throw new va({
4555
+ }, fc = "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).", pc = (e) => {
4556
+ throw new xa({
4540
4557
  table: e,
4541
- reason: lc
4558
+ reason: fc
4542
4559
  });
4543
- }, dc = (e) => {
4560
+ }, mc = (e) => {
4544
4561
  if (e.type !== "apiKey") return e.id;
4545
4562
  let t = e.metadata?.userId;
4546
4563
  return typeof t == "string" && t !== "" ? t : e.id;
4547
- }, fc = (e, n) => {
4548
- let r = Hr(e), i = dc(n.subject), a = n.subject.tenantId, o = n.rowFilter ?? Vn, d = (e, t) => {
4564
+ }, hc = (e, n) => {
4565
+ let r = Hr(e), i = mc(n.subject), a = n.subject.tenantId, o = n.rowFilter ?? Vn, d = (e, t) => {
4549
4566
  let r = { ...t }, o = n.schemaRegistry, s = o.idScheme(e);
4550
- if (s !== void 0 && r[oc] == null) if (s.kind === "numeric") delete r[oc];
4567
+ if (s !== void 0 && r[lc] == null) if (s.kind === "numeric") delete r[lc];
4551
4568
  else {
4552
4569
  let t = f(s, e);
4553
- t !== null && (r[oc] = t);
4570
+ t !== null && (r[lc] = t);
4554
4571
  }
4555
4572
  if (o.hasAudit(e)) {
4556
4573
  let e = /* @__PURE__ */ new Date();
4557
4574
  "createdAt" in r || (r.createdAt = e), "updatedAt" in r || (r.updatedAt = e), i !== null && ("createdBy" in r || (r.createdBy = i), "updatedBy" in r || (r.updatedBy = i));
4558
4575
  }
4559
- o.hasTenant(e) && ("tenantId" in r || (a === null && uc(e), r.tenantId = a));
4576
+ o.hasTenant(e) && ("tenantId" in r || (a === null && pc(e), r.tenantId = a));
4560
4577
  let c = o.defaultFactories(e);
4561
4578
  if (c.size > 0) for (let [e, t] of c) (!(e in r) || r[e] === void 0) && (r[e] = t());
4562
4579
  let l = o.computedFields(e);
@@ -4576,7 +4593,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4576
4593
  let r = en(n);
4577
4594
  if (tn(r)) {
4578
4595
  let n = t.tenantId, i = `${r.dbConstraint ?? ""} ${r.dbColumn ?? ""} ${r.dbMessage ?? ""} ${r.dbCauseChain ?? ""}`.toLowerCase();
4579
- if (i.includes("tenantid") || /\btenants\b/.test(i) || n != null && i.includes(String(n).toLowerCase())) throw new va({
4596
+ if (i.includes("tenantid") || /\btenants\b/.test(i) || n != null && i.includes(String(n).toLowerCase())) throw new xa({
4580
4597
  table: e,
4581
4598
  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)`
4582
4599
  });
@@ -4601,7 +4618,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4601
4618
  path: e.path.length === 0 ? "<root>" : e.path.join("."),
4602
4619
  message: e.message
4603
4620
  })), o = a[0];
4604
- throw new ba({
4621
+ throw new Ca({
4605
4622
  table: e,
4606
4623
  summary: o === void 0 ? "patch validation failed" : `${o.path}: ${o.message}`,
4607
4624
  issues: a
@@ -4611,7 +4628,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4611
4628
  return i !== null && (e.deletedBy = i), e;
4612
4629
  }, b = (e, t, n) => {
4613
4630
  let r = te(n, t);
4614
- if (r.length !== 0) throw new ba({
4631
+ if (r.length !== 0) throw new Ca({
4615
4632
  table: e,
4616
4633
  summary: `upsert conflictColumns [${n.map((e) => `'${e}'`).join(", ")}] but the payload is missing ${r.map((e) => `'${e}'`).join(", ")}`,
4617
4634
  issues: r.map((e) => ({
@@ -4623,7 +4640,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4623
4640
  let r = m(e);
4624
4641
  if (r !== void 0) {
4625
4642
  let n = ne(r, t);
4626
- if (n.length > 0) throw new ba({
4643
+ if (n.length > 0) throw new Ca({
4627
4644
  table: e,
4628
4645
  summary: `missing required column${n.length > 1 ? "s" : ""} ${n.map((e) => `'${e}'`).join(", ")} — NOT NULL with no default and not auto-stamped`,
4629
4646
  issues: n.map((e) => ({
@@ -4640,14 +4657,14 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4640
4657
  path: e.path.length === 0 ? "<root>" : e.path.join("."),
4641
4658
  message: e.message
4642
4659
  })), s = o[0];
4643
- throw new ba({
4660
+ throw new Ca({
4644
4661
  table: e,
4645
4662
  summary: s === void 0 ? "row validation failed" : `${s.path}: ${s.message}`,
4646
4663
  issues: o
4647
4664
  });
4648
4665
  }, C = n.dialect, w = (e, t) => {
4649
4666
  let n = m(e);
4650
- return l(C ? ce(t, n, C) : t, n, Vi());
4667
+ return l(C ? ce(t, n, C) : t, n, Wi());
4651
4668
  }, T = process.env.VOLTRO_FIELD_DECRYPT_ON_ERROR === "null" ? "null" : "throw", ee = M({ scope: "store.fieldEncryption" }), re = /* @__PURE__ */ new Set(), ie = (e) => {
4652
4669
  let t = `${e.table}.${e.column}`;
4653
4670
  re.has(t) || (re.add(t), ee.warn("encrypted column degraded to null — could not decrypt with the active key", {
@@ -4657,7 +4674,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4657
4674
  hint: "VOLTRO_FIELD_DECRYPT_ON_ERROR=null is set — this row was likely encrypted under a different key"
4658
4675
  }));
4659
4676
  }, E = (e, t) => {
4660
- let n = m(e), r = s(t, n, Vi(), {
4677
+ let n = m(e), r = s(t, n, Wi(), {
4661
4678
  onError: T,
4662
4679
  ...T === "null" ? { warn: ie } : {}
4663
4680
  });
@@ -4685,7 +4702,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4685
4702
  let n = (await r.query({
4686
4703
  table: e,
4687
4704
  predicate: {
4688
- column: oc,
4705
+ column: lc,
4689
4706
  op: "eq",
4690
4707
  value: t
4691
4708
  },
@@ -4706,7 +4723,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4706
4723
  }), A = async (e, t) => de(e, {
4707
4724
  ...t,
4708
4725
  where: O(e, t.where)
4709
- }), fe = ac({
4726
+ }), fe = cc({
4710
4727
  query: oe,
4711
4728
  updateMany: ue,
4712
4729
  deleteMany: de,
@@ -4735,26 +4752,26 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4735
4752
  return {
4736
4753
  query: D,
4737
4754
  one: (async (e) => {
4738
- let t = sc(e), n = await D({
4755
+ let t = uc(e), n = await D({
4739
4756
  ...t,
4740
4757
  take: 2
4741
4758
  }), r = n[0];
4742
- if (r === void 0) throw new Zs({
4759
+ if (r === void 0) throw new ec({
4743
4760
  table: t.table,
4744
4761
  found: 0
4745
4762
  });
4746
- if (n.length > 1) throw new Zs({
4763
+ if (n.length > 1) throw new ec({
4747
4764
  table: t.table,
4748
4765
  found: n.length
4749
4766
  });
4750
4767
  return r;
4751
4768
  }),
4752
4769
  first: (async (e) => (await D({
4753
- ...sc(e),
4770
+ ...uc(e),
4754
4771
  take: 1
4755
4772
  }))[0] ?? null),
4756
4773
  maybeOne: (async (e) => (await D({
4757
- ...sc(e),
4774
+ ...uc(e),
4758
4775
  take: 1
4759
4776
  }))[0] ?? null),
4760
4777
  insert: async (e, t) => {
@@ -4835,7 +4852,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4835
4852
  select: fe.select,
4836
4853
  update: pe,
4837
4854
  delete: me,
4838
- applyDefined: cc,
4855
+ applyDefined: dc,
4839
4856
  hardDelete: async (e, t) => r.delete(e, t),
4840
4857
  updateMany: k,
4841
4858
  deleteMany: A,
@@ -4851,28 +4868,28 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4851
4868
  let a = await h(e, i, () => r.insertIgnore(e, w(e, x(e, i)), n));
4852
4869
  return E(e, [a])[0];
4853
4870
  },
4854
- transactional: (e) => r.transactional(async (t) => e(fc(t, n))),
4871
+ transactional: (e) => r.transactional(async (t) => e(hc(t, n))),
4855
4872
  ...r.raw ? { raw: r.raw.bind(r) } : {},
4856
4873
  onChange: (e) => r.onChange(e),
4857
4874
  injectExternalChange: (e) => r.injectExternalChange(e),
4858
4875
  ...r.changeScope === void 0 ? {} : { changeScope: r.changeScope }
4859
4876
  };
4860
- }, pc = (e, t) => {
4877
+ }, gc = (e, t) => {
4861
4878
  if (t === void 0 || t.length === 0) return e;
4862
4879
  let n = { ...e };
4863
4880
  for (let e of t) delete n[e];
4864
4881
  return n;
4865
- }, mc = (e, t) => {
4882
+ }, _c = (e, t) => {
4866
4883
  let n = m(e), r = n === void 0 ? [] : le(n);
4867
4884
  return r.length === 0 ? t ?? [] : t === void 0 ? r : [...t, ...r];
4868
- }, hc = (e, t) => t.length === 0 ? e : e.map((e) => pc(e, t)), gc = (e, t, n, r, i) => {
4885
+ }, vc = (e, t) => t.length === 0 ? e : e.map((e) => gc(e, t)), yc = (e, t, n, r, i) => {
4869
4886
  let a = {
4870
4887
  ...t?.(r) ?? {},
4871
4888
  ...n?.(i) ?? {}
4872
4889
  }, o = e;
4873
4890
  for (let [e, t] of Object.entries(a)) t !== void 0 && (o = o.where(e, t));
4874
4891
  return o;
4875
- }, _c = 1e3, vc = (e, t = _c) => {
4892
+ }, bc = 1e3, xc = (e, t = bc) => {
4876
4893
  let n = (e) => typeof e == "number" && Number.isFinite(e) ? e : void 0, r = (e) => Math.max(1, Math.min(Math.floor(e), t)), i = n(e.page);
4877
4894
  if (i !== void 0) {
4878
4895
  let t = r(n(e.pageSize) ?? 100);
@@ -4885,35 +4902,35 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4885
4902
  limit: r(n(e.limit) ?? 100),
4886
4903
  offset: Math.max(0, Math.floor(n(e.offset) ?? 0))
4887
4904
  };
4888
- }, yc = {
4905
+ }, Sc = {
4889
4906
  list: (e, t = {}) => async (n, r) => {
4890
4907
  let i = n ?? {}, a = r.store.select(e);
4891
4908
  if (t.columns !== void 0 && t.columns.length > 0) {
4892
- let n = new Set(mc(e, void 0)), r = t.columns.filter((e) => !n.has(e));
4909
+ let n = new Set(_c(e, void 0)), r = t.columns.filter((e) => !n.has(e));
4893
4910
  r.length > 0 && (a = a.select(...r));
4894
4911
  }
4895
- t.include !== void 0 && (a = a.with(t.include)), a = gc(a, t.filter, t.scope, i, r);
4912
+ t.include !== void 0 && (a = a.with(t.include)), a = yc(a, t.filter, t.scope, i, r);
4896
4913
  for (let e of t.sort ?? []) a = a.orderBy(e.column, e.direction ?? "asc");
4897
4914
  if (t.paginate === !0) {
4898
- let { limit: e, offset: n } = vc(i, t.maxPageSize);
4915
+ let { limit: e, offset: n } = xc(i, t.maxPageSize);
4899
4916
  a = a.limit(e).offset(n);
4900
4917
  }
4901
- return hc(await a.all(), mc(e, t.redact));
4918
+ return vc(await a.all(), _c(e, t.redact));
4902
4919
  },
4903
4920
  getById: (e, t = {}) => async (n, r) => {
4904
4921
  let i = r.store.select(e).where("id", n.id);
4905
4922
  t.include !== void 0 && (i = i.with(t.include));
4906
4923
  let a = await i.first();
4907
- return a === null ? null : pc(a, mc(e, t.redact));
4924
+ return a === null ? null : gc(a, _c(e, t.redact));
4908
4925
  },
4909
- create: (e, t = {}) => async (n, r) => pc(await r.store.insert(e, n), mc(e, t.redact)),
4926
+ create: (e, t = {}) => async (n, r) => gc(await r.store.insert(e, n), _c(e, t.redact)),
4910
4927
  update: (e, t = {}) => async (n, r) => {
4911
4928
  let { id: i, ...a } = n, o = await r.store.update(e, i, a);
4912
- return o === null ? null : pc(o, mc(e, t.redact));
4929
+ return o === null ? null : gc(o, _c(e, t.redact));
4913
4930
  },
4914
- count: (e, t = {}) => async (n, r) => gc(r.store.select(e), t.filter, t.scope, n ?? {}, r).count(),
4931
+ count: (e, t = {}) => async (n, r) => yc(r.store.select(e), t.filter, t.scope, n ?? {}, r).count(),
4915
4932
  remove: (e) => async (t, n) => ({ deleted: await n.store.delete(e, t.id) })
4916
- }, bc = (e) => {
4933
+ }, Cc = (e) => {
4917
4934
  let t = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Set(), r = (e) => {
4918
4935
  if (!n.has(e)) switch (n.add(e), e._tag) {
4919
4936
  case "TypeLiteral":
@@ -4940,7 +4957,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4940
4957
  }
4941
4958
  };
4942
4959
  return r(e.ast), t;
4943
- }, xc = (e) => {
4960
+ }, wc = (e) => {
4944
4961
  let t = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Set(), r = (e) => {
4945
4962
  switch (e._tag) {
4946
4963
  case "Literal": return e.literal === null;
@@ -4975,38 +4992,38 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
4975
4992
  }
4976
4993
  };
4977
4994
  return i(e.ast), t;
4978
- }, Sc = (e, t) => {
4995
+ }, Tc = (e, t) => {
4979
4996
  let n = e.source === void 0 ? [] : Array.isArray(e.source) ? e.source : [e.source];
4980
4997
  if (n.length === 0) return [];
4981
- let r = bc(e.output), i = xc(e.output), a = [];
4998
+ let r = Cc(e.output), i = wc(e.output), a = [];
4982
4999
  for (let o of n) for (let n of t.get(o) ?? []) r.has(n) && !i.has(n) && a.push({
4983
5000
  query: e.name,
4984
5001
  table: o,
4985
5002
  column: n
4986
5003
  });
4987
5004
  return a;
4988
- }, Cc = (e) => {
5005
+ }, Ec = (e) => {
4989
5006
  if (e.length !== 0) return `A wire-reachable query exposes a server-only column:\n${e.map((e) => ` • query '${e.query}' output declares '${e.column}' — a .serverOnly() column of '${e.table}'`).join("\n")}\nThree ways out, in order of preference:\n 1. Omit the column from the query's output schema. The crud.* read helpers strip these automatically.\n 2. Keep the KEY but type it \`Schema.Null\` — for a view that must stay wire-compatible (an importer that breaks if the key vanishes) while never sending a value. The audit accepts that, because the schema then PROVES no value can flow instead of promising it. Pair it with a \`hasX\` boolean.\n 3. Drop the .serverOnly() marker, if the column may in fact reach a client.\nNote the audit reads the DECLARED shape, not what your handler emits: a field typed \`string\` that you always set to null still fails, and should — the next edit to that handler is one line away from sending it.`;
4990
- }, wc = class extends R.TaggedError()("CircuitOpen", {
5007
+ }, Dc = class extends R.TaggedError()("CircuitOpen", {
4991
5008
  name: R.String,
4992
5009
  retryAfterMs: R.Number
4993
- }) {}, Tc = {
5010
+ }) {}, Oc = {
4994
5011
  tag: "closed",
4995
5012
  failureCount: 0,
4996
5013
  halfOpenSuccesses: 0,
4997
5014
  openedAt: 0
4998
- }, Ec = { make: (e) => P.gen(function* () {
4999
- let t = e.name ?? "circuit", n = Je.toMillis(Je.decode(e.resetTimeout)), r = e.halfOpenSuccessThreshold ?? 1, i = e.isFailure ?? (() => !0), a = yield* L.make(Tc), o = P.gen(function* () {
5015
+ }, kc = { make: (e) => P.gen(function* () {
5016
+ let t = e.name ?? "circuit", n = Je.toMillis(Je.decode(e.resetTimeout)), r = e.halfOpenSuccessThreshold ?? 1, i = e.isFailure ?? (() => !0), a = yield* L.make(Oc), o = P.gen(function* () {
5000
5017
  let e = yield* L.get(a);
5001
5018
  if (e.tag === "half-open") {
5002
5019
  let t = e.halfOpenSuccesses + 1;
5003
- yield* L.set(a, t >= r ? Tc : {
5020
+ yield* L.set(a, t >= r ? Oc : {
5004
5021
  ...e,
5005
5022
  halfOpenSuccesses: t
5006
5023
  });
5007
5024
  return;
5008
5025
  }
5009
- e.failureCount !== 0 && (yield* L.set(a, Tc));
5026
+ e.failureCount !== 0 && (yield* L.set(a, Oc));
5010
5027
  }), s = P.gen(function* () {
5011
5028
  let t = yield* We.currentTimeMillis, n = yield* L.get(a);
5012
5029
  if (n.tag === "half-open" || n.tag === "open") {
@@ -5044,7 +5061,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5044
5061
  if (N.isInterruptedOnly(e)) return P.void;
5045
5062
  let t = N.failureOption(e), n = t._tag === "Some" ? t.value : void 0;
5046
5063
  return i(n) ? s : P.void;
5047
- })) : yield* P.fail(new wc({
5064
+ })) : yield* P.fail(new Dc({
5048
5065
  name: t,
5049
5066
  retryAfterMs: n
5050
5067
  }));
@@ -5053,25 +5070,25 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5053
5070
  value: L.get(a).pipe(P.map((e) => e.tag)),
5054
5071
  enumerable: !0
5055
5072
  }), Object.defineProperty(u, "reset", {
5056
- value: L.set(a, Tc),
5073
+ value: L.set(a, Oc),
5057
5074
  enumerable: !0
5058
5075
  }), u;
5059
- }) }, Dc, Oc = (e) => {
5060
- Dc = e;
5061
- }, kc = () => {
5062
- Dc = void 0;
5063
- }, Ac = () => Dc, jc = async (e, t = {}) => {
5064
- let n = t.scopes === void 0 ? He(t.id ?? "system") : He(t.id ?? "system", t.scopes), r = t.store ?? Dc?.dataStore, i = t.schemaRegistry ?? Dc?.schemaRegistry, a = t.dialect ?? Dc?.dialect;
5076
+ }) }, Ac, jc = (e) => {
5077
+ Ac = e;
5078
+ }, Mc = () => {
5079
+ Ac = void 0;
5080
+ }, Nc = () => Ac, Pc = async (e, t = {}) => {
5081
+ let n = t.scopes === void 0 ? He(t.id ?? "system") : He(t.id ?? "system", t.scopes), r = t.store ?? Ac?.dataStore, i = t.schemaRegistry ?? Ac?.schemaRegistry, a = t.dialect ?? Ac?.dialect;
5065
5082
  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.");
5066
5083
  return e({
5067
5084
  subject: n,
5068
- store: fc(r, {
5085
+ store: hc(r, {
5069
5086
  subject: n,
5070
5087
  schemaRegistry: i,
5071
5088
  ...a === void 0 ? {} : { dialect: a }
5072
5089
  })
5073
5090
  });
5074
- }, Mc = (e) => {
5091
+ }, Fc = (e) => {
5075
5092
  let { currentRegion: t, replicaRegions: n, inner: r } = e, i = (e) => {
5076
5093
  if (t === void 0) return {
5077
5094
  sameRegion: [],
@@ -5099,7 +5116,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5099
5116
  return r.loadSnapshot();
5100
5117
  }
5101
5118
  };
5102
- }, Nc = (e = process.env) => {
5119
+ }, Ic = (e = process.env) => {
5103
5120
  for (let t of [
5104
5121
  "VOLTRO_REGION",
5105
5122
  "AWS_REGION",
@@ -5111,7 +5128,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5111
5128
  let n = e[t];
5112
5129
  if (typeof n == "string" && n.length > 0) return n;
5113
5130
  }
5114
- }, Pc = () => {
5131
+ }, Lc = () => {
5115
5132
  let e = {
5116
5133
  primary: 0,
5117
5134
  lagByReplica: /* @__PURE__ */ new Map()
@@ -5136,7 +5153,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5136
5153
  e.lagByReplica.set(t, n);
5137
5154
  }
5138
5155
  };
5139
- }, Fc = Symbol.for("@voltro/ScheduleDefinition"), Ic = (e) => typeof e == "object" && !!e && Fc in e, Lc = 30 * 6e4, Rc = (e) => {
5156
+ }, Rc = Symbol.for("@voltro/ScheduleDefinition"), zc = (e) => typeof e == "object" && !!e && Rc in e, Bc = 30 * 6e4, Vc = (e) => {
5140
5157
  let t = Ke.parse(e.cron, e.timezone);
5141
5158
  if (Ye.isLeft(t)) throw Error(`defineSchedule("${e.name}"): invalid cron expression "${e.cron}" (tz="${e.timezone}") — ${String(t.left)}`);
5142
5159
  if (!e.timezone || e.timezone.trim() === "") throw Error(`defineSchedule("${e.name}"): timezone is required (e.g. "UTC", "Europe/Berlin")`);
@@ -5145,18 +5162,18 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5145
5162
  ...e,
5146
5163
  onOverlap: e.onOverlap ?? "skip",
5147
5164
  backfill: e.backfill ?? "skip",
5148
- maxRuntimeMs: e.maxRuntimeMs ?? Lc,
5149
- [Fc]: !0
5165
+ maxRuntimeMs: e.maxRuntimeMs ?? Bc,
5166
+ [Rc]: !0
5150
5167
  };
5151
- }, zc = (e) => Ke.unsafeParse(e.cron, e.timezone), Bc = (e, t = /* @__PURE__ */ new Date()) => Ke.next(zc(e), t), Z = "_voltro_wakeups", Vc = (e) => `${e.tenantId}:${e.kind}:${e.refId}`, Hc = (e) => ({
5168
+ }, Hc = (e) => Ke.unsafeParse(e.cron, e.timezone), Uc = (e, t = /* @__PURE__ */ new Date()) => Ke.next(Hc(e), t), Z = "_voltro_wakeups", Wc = (e) => `${e.tenantId}:${e.kind}:${e.refId}`, Gc = (e) => ({
5152
5169
  tenantId: String(e.tenantId),
5153
5170
  kind: String(e.kind),
5154
5171
  refId: String(e.refId),
5155
5172
  wakeAt: e.wakeAt instanceof Date ? e.wakeAt : new Date(String(e.wakeAt)),
5156
5173
  status: e.status === "fired" ? "fired" : "pending"
5157
- }), Uc = async (e, t) => {
5174
+ }), Kc = async (e, t) => {
5158
5175
  await e.upsert(Z, {
5159
- id: Vc(t),
5176
+ id: Wc(t),
5160
5177
  tenantId: t.tenantId,
5161
5178
  kind: t.kind,
5162
5179
  refId: t.refId,
@@ -5166,7 +5183,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5166
5183
  conflictColumns: ["id"],
5167
5184
  update: ["wakeAt", "status"]
5168
5185
  });
5169
- }, Wc = async (e, t) => e.delete(Z, Vc(t)), Gc = async (e, t) => await e.update(Z, Vc(t), { status: "fired" }) !== null, Kc = (e, t) => ({ and: [{
5186
+ }, qc = async (e, t) => e.delete(Z, Wc(t)), Jc = async (e, t) => await e.update(Z, Wc(t), { status: "fired" }) !== null, Yc = (e, t) => ({ and: [{
5170
5187
  column: "id",
5171
5188
  op: "eq",
5172
5189
  value: e
@@ -5174,16 +5191,16 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5174
5191
  column: "status",
5175
5192
  op: "eq",
5176
5193
  value: t
5177
- }] }), qc = async (e, t) => await e.updateMany(Z, { status: "fired" }, { where: Kc(Vc(t), "pending") }) > 0, Jc = async (e, t) => {
5178
- await e.updateMany(Z, { status: "pending" }, { where: Kc(Vc(t), "fired") });
5179
- }, Yc = {
5194
+ }] }), Xc = async (e, t) => await e.updateMany(Z, { status: "fired" }, { where: Yc(Wc(t), "pending") }) > 0, Zc = async (e, t) => {
5195
+ await e.updateMany(Z, { status: "pending" }, { where: Yc(Wc(t), "fired") });
5196
+ }, Qc = {
5180
5197
  column: "status",
5181
5198
  op: "eq",
5182
5199
  value: "pending"
5183
- }, Xc = async (e, t) => {
5200
+ }, $c = async (e, t) => {
5184
5201
  let n = {
5185
5202
  table: Z,
5186
- predicate: Yc,
5203
+ predicate: Qc,
5187
5204
  order: [{
5188
5205
  column: "wakeAt",
5189
5206
  direction: "asc"
@@ -5192,18 +5209,18 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5192
5209
  skip: void 0,
5193
5210
  projection: void 0
5194
5211
  };
5195
- return (await e.query(n)).map(Hc);
5196
- }, Zc = async (e, t, n = 500) => {
5197
- let r = await Xc(e, n), i = t.getTime();
5212
+ return (await e.query(n)).map(Gc);
5213
+ }, el = async (e, t, n = 500) => {
5214
+ let r = await $c(e, n), i = t.getTime();
5198
5215
  return r.filter((e) => e.wakeAt.getTime() <= i);
5199
- }, Qc = async (e) => (await Xc(e, 1))[0] ?? null, $c = {
5216
+ }, tl = async (e) => (await $c(e, 1))[0] ?? null, nl = {
5200
5217
  column: "status",
5201
5218
  op: "eq",
5202
5219
  value: "fired"
5203
- }, el = async (e, t = {}) => {
5220
+ }, rl = async (e, t = {}) => {
5204
5221
  let n = {
5205
5222
  table: Z,
5206
- predicate: $c,
5223
+ predicate: nl,
5207
5224
  order: [{
5208
5225
  column: "wakeAt",
5209
5226
  direction: "asc"
@@ -5214,12 +5231,12 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5214
5231
  }, r = await e.query(n), i = t.firedOlderThan?.getTime(), a = 0;
5215
5232
  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++;
5216
5233
  return a;
5217
- }, tl = _a, nl = "default", rl = {
5234
+ }, il = ba, al = "default", ol = {
5218
5235
  kind: "single",
5219
5236
  tryClaim: async () => !0
5220
- }, il = "_voltro_schedule_claims", al = (e, t, n) => {
5237
+ }, sl = "_voltro_schedule_claims", cl = (e, t, n) => {
5221
5238
  let r = async (t) => (await e.query({
5222
- table: il,
5239
+ table: sl,
5223
5240
  order: [],
5224
5241
  predicate: void 0,
5225
5242
  projection: ["id"],
@@ -5234,7 +5251,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5234
5251
  if (await r(s)) return !1;
5235
5252
  } catch {}
5236
5253
  try {
5237
- return await e.insert(il, {
5254
+ return await e.insert(sl, {
5238
5255
  id: s,
5239
5256
  scheduleName: i,
5240
5257
  bucket: o,
@@ -5252,12 +5269,12 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5252
5269
  }
5253
5270
  }
5254
5271
  };
5255
- }, ol = "_voltro_schedule_runs", sl = async (e, t) => {
5272
+ }, ll = "_voltro_schedule_runs", ul = async (e, t) => {
5256
5273
  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) => {
5257
- s?.(e, ll(t));
5274
+ s?.(e, fl(t));
5258
5275
  }, _ = async (e, t, r, i, s, c) => {
5259
5276
  try {
5260
- let o = `sr_${_e()}`, l = await n.insert(ol, {
5277
+ let o = `sr_${_e()}`, l = await n.insert(ll, {
5261
5278
  id: o,
5262
5279
  name: e.name,
5263
5280
  status: i,
@@ -5282,7 +5299,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5282
5299
  }
5283
5300
  }, v = async (e, t) => {
5284
5301
  try {
5285
- let r = await n.update(ol, e, t);
5302
+ let r = await n.update(ll, e, t);
5286
5303
  r && g("update", r);
5287
5304
  } catch (t) {
5288
5305
  o.warn("schedule: failed to record run finish", {
@@ -5293,7 +5310,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5293
5310
  }, y = async (e) => {
5294
5311
  try {
5295
5312
  let t = await n.query({
5296
- table: ol,
5313
+ table: ll,
5297
5314
  predicate: {
5298
5315
  _tag: "leaf",
5299
5316
  column: "status",
@@ -5328,7 +5345,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5328
5345
  scheduleName: e.name,
5329
5346
  trigger: n,
5330
5347
  runId: s,
5331
- subject: tl
5348
+ subject: il
5332
5349
  })
5333
5350
  };
5334
5351
  try {
@@ -5359,7 +5376,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5359
5376
  let n = Q(t).includes("exceeded maxRuntimeMs"), r = en(t).dbMessage, i = typeof r == "string" && r !== "" ? `${Q(t)} — ${r}` : Q(t);
5360
5377
  s && await v(s, {
5361
5378
  status: "failed",
5362
- errorTag: n ? "timeout" : cl(t),
5379
+ errorTag: n ? "timeout" : dl(t),
5363
5380
  errorMessage: i,
5364
5381
  completedAt: /* @__PURE__ */ new Date(),
5365
5382
  durationMs: Date.now() - l
@@ -5419,8 +5436,8 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5419
5436
  }
5420
5437
  }, C = async (e) => {
5421
5438
  try {
5422
- let t = Ke.next(zc(e), /* @__PURE__ */ new Date());
5423
- await Uc(n, {
5439
+ let t = Ke.next(Hc(e), /* @__PURE__ */ new Date());
5440
+ await Kc(n, {
5424
5441
  tenantId: u,
5425
5442
  kind: "schedule",
5426
5443
  refId: e.name,
@@ -5434,7 +5451,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5434
5451
  }
5435
5452
  }, w = 2147483647, T = (e) => {
5436
5453
  if (m) return;
5437
- let n = zc(e), r = Ke.next(n, /* @__PURE__ */ new Date()), i = () => {
5454
+ let n = Hc(e), r = Ke.next(n, /* @__PURE__ */ new Date()), i = () => {
5438
5455
  if (m) return;
5439
5456
  let n = r.getTime() - Date.now();
5440
5457
  if (n > w) {
@@ -5456,7 +5473,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5456
5473
  let r;
5457
5474
  try {
5458
5475
  let t = (await n.query({
5459
- table: ol,
5476
+ table: ll,
5460
5477
  order: [{
5461
5478
  column: "scheduledAt",
5462
5479
  direction: "desc"
@@ -5475,7 +5492,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5475
5492
  return;
5476
5493
  }
5477
5494
  if (!r) return;
5478
- let i = zc(e), a = [], s = Ke.next(i, r), c = Date.now();
5495
+ let i = Hc(e), a = [], s = Ke.next(i, r), c = Date.now();
5479
5496
  for (; s.getTime() < c && a.length < 1e3;) a.push(s), s = Ke.next(i, s);
5480
5497
  if (a.length !== 0) if (o.info("schedule: backfill", {
5481
5498
  name: e.name,
@@ -5520,11 +5537,11 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5520
5537
  d.clear(), o.info("scheduler: stopped");
5521
5538
  }
5522
5539
  };
5523
- }, Q = (e) => e?.message ?? String(e), cl = (e) => e && typeof e == "object" && "_tag" in e ? String(e._tag) : null, ll = (e) => {
5540
+ }, Q = (e) => e?.message ?? String(e), dl = (e) => e && typeof e == "object" && "_tag" in e ? String(e._tag) : null, fl = (e) => {
5524
5541
  let t = {};
5525
5542
  for (let [n, r] of Object.entries(e)) t[n] = r instanceof Date ? r.toISOString() : r;
5526
5543
  return t;
5527
- }, ul = (e, t, n, r) => {
5544
+ }, pl = (e, t, n, r) => {
5528
5545
  let i = !1, a, o = async () => {
5529
5546
  if (i) return;
5530
5547
  let a = new Date(Math.floor(Date.now() / t) * t), o = !1;
@@ -5554,7 +5571,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5554
5571
  i || (i = !0, a && clearInterval(a), a = void 0);
5555
5572
  }
5556
5573
  };
5557
- }, dl = (e) => (t, n, r) => ul(t, n, r, e), fl = O("_voltro_schedule_runs", {
5574
+ }, ml = (e) => (t, n, r) => pl(t, n, r, e), hl = O("_voltro_schedule_runs", {
5558
5575
  id: v({ prefix: "schrun" }),
5559
5576
  name: k(),
5560
5577
  status: k().oneOf([
@@ -5584,13 +5601,13 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5584
5601
  ]).nullable(),
5585
5602
  replicaId: k().nullable(),
5586
5603
  result: C().nullable()
5587
- }).index(["name", "scheduledAt"]).index(["status"]), pl = O("_voltro_schedule_claims", {
5604
+ }).index(["name", "scheduledAt"]).index(["status"]), gl = O("_voltro_schedule_claims", {
5588
5605
  id: v({ prefix: "schclaim" }),
5589
5606
  scheduleName: k(),
5590
5607
  bucket: k(),
5591
5608
  claimedBy: k(),
5592
5609
  claimedAt: A()
5593
- }).index(["scheduleName", "bucket"]).index(["claimedAt"]), ml = O("_voltro_traces", {
5610
+ }).index(["scheduleName", "bucket"]).index(["claimedAt"]), _l = O("_voltro_traces", {
5594
5611
  id: v({ prefix: "span" }),
5595
5612
  traceId: k(),
5596
5613
  spanId: k(),
@@ -5614,7 +5631,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5614
5631
  durationMs: b(),
5615
5632
  attributes: C().nullable(),
5616
5633
  events: C().nullable()
5617
- }).index(["traceId", "startedAt"]).index(["startedAt"]).index(["status"]), hl = O("_voltro_undo_log", {
5634
+ }).index(["traceId", "startedAt"]).index(["startedAt"]).index(["status"]), vl = O("_voltro_undo_log", {
5618
5635
  id: v({ prefix: "undo" }),
5619
5636
  tag: k(),
5620
5637
  label: k().nullable(),
@@ -5625,25 +5642,25 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5625
5642
  crossesAction: r().default(!1),
5626
5643
  undone: r().default(!1),
5627
5644
  createdAt: A().default("now")
5628
- }).index(["subjectId", "createdAt"]).reactive(), gl = (e = process.env) => {
5645
+ }).index(["subjectId", "createdAt"]).reactive(), yl = (e = process.env) => {
5629
5646
  let t = (e.VOLTRO_UNDO ?? "").toLowerCase();
5630
5647
  return t === "on" || t === "1" || t === "true" ? !0 : t === "off" || t === "0" || t === "false" ? !1 : e.NODE_ENV !== "production";
5631
- }, _l = (e) => e.startsWith("_voltro"), vl = async (e, t, n) => (await e.query({
5648
+ }, bl = (e) => e.startsWith("_voltro"), xl = async (e, t, n) => (await e.query({
5632
5649
  table: t,
5633
5650
  predicate: u("id", n),
5634
5651
  order: []
5635
- }))[0] ?? null, yl = (e, t) => new Proxy(e, { get(e, n, r) {
5652
+ }))[0] ?? null, Sl = (e, t) => new Proxy(e, { get(e, n, r) {
5636
5653
  if (n === "insert") return async (n, r) => {
5637
5654
  let i = await e.insert(n, r);
5638
- return _l(n) || t({
5655
+ return bl(n) || t({
5639
5656
  table: n,
5640
5657
  op: "insert",
5641
5658
  next: i
5642
5659
  }), i;
5643
5660
  };
5644
5661
  if (n === "update") return async (n, r, i) => {
5645
- let a = _l(n) ? null : await vl(e, n, r), o = await e.update(n, r, i);
5646
- return _l(n) || t({
5662
+ let a = bl(n) ? null : await xl(e, n, r), o = await e.update(n, r, i);
5663
+ return bl(n) || t({
5647
5664
  table: n,
5648
5665
  op: "update",
5649
5666
  id: r,
@@ -5652,8 +5669,8 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5652
5669
  }), o;
5653
5670
  };
5654
5671
  if (n === "delete") return async (n, r) => {
5655
- let i = _l(n) ? null : await vl(e, n, r), a = await e.delete(n, r);
5656
- return !_l(n) && a && t({
5672
+ let i = bl(n) ? null : await xl(e, n, r), a = await e.delete(n, r);
5673
+ return !bl(n) && a && t({
5657
5674
  table: n,
5658
5675
  op: "delete",
5659
5676
  id: r,
@@ -5662,10 +5679,10 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5662
5679
  };
5663
5680
  let i = Reflect.get(e, n, r);
5664
5681
  return typeof i == "function" ? i.bind(e) : i;
5665
- } }), bl = (e) => {
5682
+ } }), Cl = (e) => {
5666
5683
  let t = [];
5667
5684
  return {
5668
- tx: yl(e, (e) => t.push(e)),
5685
+ tx: Sl(e, (e) => t.push(e)),
5669
5686
  persist: async (e, n) => {
5670
5687
  if (t.length === 0 || n.tag.startsWith("__voltro")) return;
5671
5688
  let r = n.subject;
@@ -5681,14 +5698,14 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5681
5698
  });
5682
5699
  }
5683
5700
  };
5684
- }, xl = (e) => {
5701
+ }, wl = (e) => {
5685
5702
  if (e.id !== void 0) return e.id;
5686
5703
  let t = e.next?.id;
5687
5704
  if (typeof t == "string") return t;
5688
5705
  let n = e.prev?.id;
5689
5706
  return typeof n == "string" ? n : void 0;
5690
- }, Sl = (e) => {
5691
- let t = xl(e);
5707
+ }, Tl = (e) => {
5708
+ let t = wl(e);
5692
5709
  switch (e.op) {
5693
5710
  case "insert": return t === void 0 ? null : {
5694
5711
  table: e.table,
@@ -5712,28 +5729,28 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5712
5729
  row: e.prev
5713
5730
  };
5714
5731
  }
5715
- }, Cl = (e) => {
5716
- if (e.crossesAction) throw new wl(e.invocationId, "action");
5732
+ }, El = (e) => {
5733
+ if (e.crossesAction) throw new Dl(e.invocationId, "action");
5717
5734
  let t = [];
5718
5735
  for (let n = e.changes.length - 1; n >= 0; --n) {
5719
- let r = Sl(e.changes[n]);
5736
+ let r = Tl(e.changes[n]);
5720
5737
  r !== null && t.push(r);
5721
5738
  }
5722
5739
  return t;
5723
- }, wl = class extends Error {
5740
+ }, Dl = class extends Error {
5724
5741
  invocationId;
5725
5742
  boundary;
5726
5743
  _tag = "UndoBoundaryError";
5727
5744
  constructor(e, t) {
5728
5745
  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";
5729
5746
  }
5730
- }, Tl = (e, t, n = ["updatedAt", "updatedBy"]) => {
5747
+ }, Ol = (e, t, n = ["updatedAt", "updatedBy"]) => {
5731
5748
  if (t == null) return e == null;
5732
5749
  if (e == null) return !1;
5733
5750
  let r = new Set(n);
5734
5751
  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;
5735
5752
  return !0;
5736
- }, El = class {
5753
+ }, kl = class {
5737
5754
  capacity;
5738
5755
  done = [];
5739
5756
  undone = [];
@@ -5769,7 +5786,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5769
5786
  redo: [...this.undone]
5770
5787
  };
5771
5788
  }
5772
- }, Dl = (e, t = /* @__PURE__ */ new Set()) => e.op === "insert" ? {
5789
+ }, Al = (e, t = /* @__PURE__ */ new Set()) => e.op === "insert" ? {
5773
5790
  table: e.table,
5774
5791
  op: "insert",
5775
5792
  next: e.new ?? null
@@ -5786,7 +5803,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5786
5803
  table: e.table,
5787
5804
  op: "delete",
5788
5805
  prev: e.old ?? null
5789
- }, Ol = async (e, t) => {
5806
+ }, jl = async (e, t) => {
5790
5807
  switch (t.op) {
5791
5808
  case "delete":
5792
5809
  await e.delete(t.table, t.id);
@@ -5804,21 +5821,21 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5804
5821
  await e.insert(t.table, t.row);
5805
5822
  return;
5806
5823
  }
5807
- }, kl = async (e, t) => {
5808
- for (let n of t) await Ol(e, n);
5809
- }, Al = (e) => e.request?.subject?.id ?? null, jl = (e) => e === !0 || e === 1, Ml = async (e, t, n) => (await e.query({
5824
+ }, Ml = async (e, t) => {
5825
+ for (let n of t) await jl(e, n);
5826
+ }, Nl = (e) => e.request?.subject?.id ?? null, Pl = (e) => e === !0 || e === 1, Fl = async (e, t, n) => (await e.query({
5810
5827
  table: t,
5811
5828
  predicate: u("id", n),
5812
5829
  order: []
5813
- }))[0] ?? null, Nl = (e) => {
5830
+ }))[0] ?? null, Il = (e) => {
5814
5831
  try {
5815
5832
  let t = JSON.parse(String(e ?? "[]"));
5816
5833
  return Array.isArray(t) ? t : [];
5817
5834
  } catch {
5818
5835
  return [];
5819
5836
  }
5820
- }, Pl = (e) => e.id ?? e.next?.id ?? e.prev?.id, Fl = async (e, t) => {
5821
- let n = Al(t);
5837
+ }, Ll = (e) => e.id ?? e.next?.id ?? e.prev?.id, Rl = async (e, t) => {
5838
+ let n = Nl(t);
5822
5839
  return [...await t.store.query({
5823
5840
  table: "_voltro_undo_log",
5824
5841
  predicate: u("subjectId", n),
@@ -5827,68 +5844,68 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5827
5844
  id: String(e.id),
5828
5845
  tag: String(e.tag ?? ""),
5829
5846
  label: e.label ?? null,
5830
- undone: jl(e.undone),
5831
- crossesAction: jl(e.crossesAction),
5847
+ undone: Pl(e.undone),
5848
+ crossesAction: Pl(e.crossesAction),
5832
5849
  createdAt: String(e.createdAt ?? "")
5833
5850
  }));
5834
- }, Il = async (e, t) => {
5835
- let n = await Ml(t.store, "_voltro_undo_log", e.invocationId);
5851
+ }, zl = async (e, t) => {
5852
+ let n = await Fl(t.store, "_voltro_undo_log", e.invocationId);
5836
5853
  if (!n) throw new Me({ invocationId: e.invocationId });
5837
- if ((n.subjectId ?? null) !== Al(t)) throw new je({ invocationId: e.invocationId });
5854
+ if ((n.subjectId ?? null) !== Nl(t)) throw new je({ invocationId: e.invocationId });
5838
5855
  return n;
5839
- }, Ll = async (e, t) => {
5840
- let n = await Il(e, t);
5841
- if (jl(n.undone)) return { ok: !0 };
5842
- if (jl(n.crossesAction)) throw new Ae({
5856
+ }, Bl = async (e, t) => {
5857
+ let n = await zl(e, t);
5858
+ if (Pl(n.undone)) return { ok: !0 };
5859
+ if (Pl(n.crossesAction)) throw new Ae({
5843
5860
  invocationId: e.invocationId,
5844
5861
  reason: "action"
5845
5862
  });
5846
- let r = Nl(n.changes);
5863
+ let r = Il(n.changes);
5847
5864
  for (let n of r) {
5848
- let r = Pl(n);
5849
- if (r !== void 0 && !Tl(await Ml(t.store, n.table, r), n.next ?? null)) throw new Ae({
5865
+ let r = Ll(n);
5866
+ if (r !== void 0 && !Ol(await Fl(t.store, n.table, r), n.next ?? null)) throw new Ae({
5850
5867
  invocationId: e.invocationId,
5851
5868
  reason: "conflict"
5852
5869
  });
5853
5870
  }
5854
5871
  let i = {
5855
5872
  invocationId: e.invocationId,
5856
- subject: Al(t),
5873
+ subject: Nl(t),
5857
5874
  changes: r,
5858
5875
  crossesAction: !1
5859
5876
  };
5860
- return await kl(t.store, Cl(i)), await t.store.update("_voltro_undo_log", e.invocationId, { undone: !0 }), { ok: !0 };
5861
- }, Rl = async (e, t) => {
5862
- let n = await Il(e, t);
5863
- if (!jl(n.undone)) return { ok: !0 };
5864
- for (let e of Nl(n.changes)) {
5865
- let n = Pl(e);
5877
+ return await Ml(t.store, El(i)), await t.store.update("_voltro_undo_log", e.invocationId, { undone: !0 }), { ok: !0 };
5878
+ }, Vl = async (e, t) => {
5879
+ let n = await zl(e, t);
5880
+ if (!Pl(n.undone)) return { ok: !0 };
5881
+ for (let e of Il(n.changes)) {
5882
+ let n = Ll(e);
5866
5883
  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);
5867
5884
  }
5868
5885
  return await t.store.update("_voltro_undo_log", e.invocationId, { undone: !1 }), { ok: !0 };
5869
- }, zl = (e = process.env) => {
5886
+ }, Hl = (e = process.env) => {
5870
5887
  let t = (e.VOLTRO_TIMELINE ?? "").toLowerCase();
5871
5888
  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";
5872
- }, Bl = /pass(word)?|secret|token|api[_-]?key|authorization|cookie|ssn|credit[_-]?card|card[_-]?number|cvv|encrypted/i, Vl = "«redacted»", Hl = (e) => {
5889
+ }, Ul = /pass(word)?|secret|token|api[_-]?key|authorization|cookie|ssn|credit[_-]?card|card[_-]?number|cvv|encrypted/i, Wl = "«redacted»", Gl = (e) => {
5873
5890
  if (e == null) return null;
5874
5891
  let t = {};
5875
- for (let [n, r] of Object.entries(e)) t[n] = Bl.test(n) ? Vl : r;
5892
+ for (let [n, r] of Object.entries(e)) t[n] = Ul.test(n) ? Wl : r;
5876
5893
  return t;
5877
- }, Ul = (e) => {
5894
+ }, Kl = (e) => {
5878
5895
  let t = e?.id;
5879
5896
  return typeof t == "string" ? t : void 0;
5880
- }, Wl = (e, t) => {
5897
+ }, ql = (e, t) => {
5881
5898
  if (t.op === "insert") {
5882
- let n = Ul(t.new);
5899
+ let n = Kl(t.new);
5883
5900
  return n === void 0 ? e : e.filter((e) => e.id !== n);
5884
5901
  }
5885
5902
  if (t.op === "update") {
5886
5903
  if (t.old == null) return e;
5887
- let n = Ul(t.new) ?? Ul(t.old);
5904
+ let n = Kl(t.new) ?? Kl(t.old);
5888
5905
  return e.map((e) => e.id === n ? t.old : e);
5889
5906
  }
5890
5907
  return t.old == null ? e : [...e, t.old];
5891
- }, Gl = class {
5908
+ }, Jl = class {
5892
5909
  mode;
5893
5910
  capacity;
5894
5911
  now;
@@ -5908,8 +5925,8 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5908
5925
  ts: this.now(),
5909
5926
  table: e.table,
5910
5927
  op: e.op,
5911
- old: Hl(e.old),
5912
- new: Hl(e.new),
5928
+ old: Gl(e.old),
5929
+ new: Gl(e.new),
5913
5930
  tenantId: n
5914
5931
  }), this.ring.length > this.capacity && this.ring.shift(), t;
5915
5932
  }
@@ -5922,23 +5939,23 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5922
5939
  }
5923
5940
  replay(e, t, n) {
5924
5941
  let r = this.ring.filter((n) => n.table === e && n.seq > t).sort((e, t) => t.seq - e.seq), i = n;
5925
- for (let e of r) i = Wl(i, e);
5942
+ for (let e of r) i = ql(i, e);
5926
5943
  return i;
5927
5944
  }
5928
- }, Kl, ql = () => (Kl === void 0 && (Kl = new Gl(zl())), Kl), Jl = (e) => {
5929
- Kl = e;
5930
- }, Yl = (e) => {
5931
- let t = ql();
5945
+ }, Yl, Xl = () => (Yl === void 0 && (Yl = new Jl(Hl())), Yl), Zl = (e) => {
5946
+ Yl = e;
5947
+ }, Ql = (e) => {
5948
+ let t = Xl();
5932
5949
  if (t.enabled) try {
5933
5950
  t.record(e);
5934
5951
  } catch {}
5935
- }, Xl = /* @__PURE__ */ new Set([
5952
+ }, $l = /* @__PURE__ */ new Set([
5936
5953
  "count",
5937
5954
  "sum",
5938
5955
  "avg",
5939
5956
  "min",
5940
5957
  "max"
5941
- ]), Zl = (e) => {
5958
+ ]), eu = (e) => {
5942
5959
  if (e.joins !== void 0 && e.joins.length > 0) return {
5943
5960
  maintainable: !1,
5944
5961
  reason: "joins are not maintainable in v1"
@@ -5960,7 +5977,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5960
5977
  reason: "v1 maintains exactly one aggregation"
5961
5978
  };
5962
5979
  let t = e.aggregations[0];
5963
- return Xl.has(t.op) ? t.op !== "count" && (t.column === void 0 || t.column.length === 0) ? {
5980
+ return $l.has(t.op) ? t.op !== "count" && (t.column === void 0 || t.column.length === 0) ? {
5964
5981
  maintainable: !1,
5965
5982
  reason: `op '${t.op}' requires a column`
5966
5983
  } : {
@@ -5974,7 +5991,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5974
5991
  maintainable: !1,
5975
5992
  reason: `op '${t.op}' is not maintainable`
5976
5993
  };
5977
- }, Ql = "\0", $ = (e, t) => t === void 0 || t.length === 0 ? "" : t.map((t) => JSON.stringify(e[t] ?? null)).join(Ql), $l = (e, t) => t === void 0 ? 0 : Number(e[t] ?? 0), eu = (e, t) => {
5994
+ }, tu = "\0", $ = (e, t) => t === void 0 || t.length === 0 ? "" : t.map((t) => JSON.stringify(e[t] ?? null)).join(tu), nu = (e, t) => t === void 0 ? 0 : Number(e[t] ?? 0), ru = (e, t) => {
5978
5995
  switch (e.op) {
5979
5996
  case "count": return t.count;
5980
5997
  case "sum": return t.sum ?? 0;
@@ -5982,10 +5999,10 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
5982
5999
  case "min":
5983
6000
  case "max": return t.count > 0 ? t.extreme ?? null : null;
5984
6001
  }
5985
- }, tu = (e, t) => {
6002
+ }, iu = (e, t) => {
5986
6003
  let n = /* @__PURE__ */ new Map();
5987
6004
  for (let r of t) {
5988
- let t = $(r, e.groupBy), i = n.get(t), a = $l(r, e.column);
6005
+ let t = $(r, e.groupBy), i = n.get(t), a = nu(r, e.column);
5989
6006
  if (i === void 0) n.set(t, {
5990
6007
  count: 1,
5991
6008
  ...e.op === "sum" || e.op === "avg" ? { sum: a } : {},
@@ -6001,10 +6018,10 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6001
6018
  }
6002
6019
  }
6003
6020
  return n;
6004
- }, nu = (e, t) => [...t.entries()].map(([t, n]) => ({
6021
+ }, au = (e, t) => [...t.entries()].map(([t, n]) => ({
6005
6022
  groupKey: t,
6006
- value: eu(e, n)
6007
- })), ru = (e, t, n) => {
6023
+ value: ru(e, n)
6024
+ })), ou = (e, t, n) => {
6008
6025
  let r = new Map(t), i = /* @__PURE__ */ new Set(), a = (t) => {
6009
6026
  let n = $(t, e.groupBy), a = r.get(n);
6010
6027
  if (a === void 0) return;
@@ -6013,7 +6030,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6013
6030
  r.delete(n);
6014
6031
  return;
6015
6032
  }
6016
- let s = $l(t, e.column);
6033
+ let s = nu(t, e.column);
6017
6034
  e.op === "min" || e.op === "max" ? (a.extreme !== void 0 && s === a.extreme && i.add(n), r.set(n, {
6018
6035
  count: o,
6019
6036
  ...a.extreme === void 0 ? {} : { extreme: a.extreme }
@@ -6022,7 +6039,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6022
6039
  ...e.op === "sum" || e.op === "avg" ? { sum: (a.sum ?? 0) - s } : {}
6023
6040
  });
6024
6041
  }, o = (t) => {
6025
- let n = $(t, e.groupBy), i = r.get(n), a = $l(t, e.column);
6042
+ let n = $(t, e.groupBy), i = r.get(n), a = nu(t, e.column);
6026
6043
  if (i === void 0) {
6027
6044
  r.set(n, {
6028
6045
  count: 1,
@@ -6042,15 +6059,15 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6042
6059
  state: r,
6043
6060
  rescanGroups: [...i]
6044
6061
  };
6045
- }, iu = (e, t, n, r) => {
6062
+ }, su = (e, t, n, r) => {
6046
6063
  if (n.length === 0) return t;
6047
- let i = new Set(n), a = tu(e, r.filter((t) => i.has($(t, e.groupBy)))), o = new Map(t);
6064
+ let i = new Set(n), a = iu(e, r.filter((t) => i.has($(t, e.groupBy)))), o = new Map(t);
6048
6065
  for (let e of i) {
6049
6066
  let t = a.get(e);
6050
6067
  t === void 0 ? o.delete(e) : o.set(e, t);
6051
6068
  }
6052
6069
  return o;
6053
- }, au = class {
6070
+ }, cu = class {
6054
6071
  shape;
6055
6072
  state = /* @__PURE__ */ new Map();
6056
6073
  groups = /* @__PURE__ */ new Map();
@@ -6058,7 +6075,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6058
6075
  this.shape = e;
6059
6076
  }
6060
6077
  seed(e) {
6061
- this.state = tu(this.shape, e), this.groups.clear();
6078
+ this.state = iu(this.shape, e), this.groups.clear();
6062
6079
  for (let t of e) {
6063
6080
  let e = $(t, this.shape.groupBy);
6064
6081
  this.groups.has(e) || this.groups.set(e, this.groupValues(t));
@@ -6070,14 +6087,14 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6070
6087
  let e = $(t, this.shape.groupBy);
6071
6088
  this.groups.has(e) || this.groups.set(e, this.groupValues(t));
6072
6089
  }
6073
- let n = ru(this.shape, this.state, e);
6090
+ let n = ou(this.shape, this.state, e);
6074
6091
  this.state = n.state;
6075
6092
  for (let e of this.groups.keys()) this.state.has(e) || this.groups.delete(e);
6076
6093
  return n.rescanGroups;
6077
6094
  }
6078
6095
  resolveRescan(e, t) {
6079
6096
  if (e.length === 0) return;
6080
- this.state = iu(this.shape, this.state, e, t);
6097
+ this.state = su(this.shape, this.state, e, t);
6081
6098
  let n = new Set(e);
6082
6099
  for (let e of t) {
6083
6100
  let t = $(e, this.shape.groupBy);
@@ -6086,7 +6103,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6086
6103
  for (let e of n) this.state.has(e) || this.groups.delete(e);
6087
6104
  }
6088
6105
  materialize() {
6089
- return nu(this.shape, this.state).map((e) => ({
6106
+ return au(this.shape, this.state).map((e) => ({
6090
6107
  groupKey: e.groupKey,
6091
6108
  group: this.groups.get(e.groupKey) ?? {},
6092
6109
  value: e.value
@@ -6099,7 +6116,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6099
6116
  for (let r of t) n[r] = e[r];
6100
6117
  return n;
6101
6118
  }
6102
- }, ou = O("_voltro_rebac_tuples", {
6119
+ }, lu = O("_voltro_rebac_tuples", {
6103
6120
  id: v({ prefix: "rbct" }),
6104
6121
  subjectId: k(),
6105
6122
  relation: k(),
@@ -6111,7 +6128,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6111
6128
  "subjectId",
6112
6129
  "resourceType",
6113
6130
  "resourceId"
6114
- ]).reactive(), su = async (e, n, r, i) => n === null ? [] : (await e.query({
6131
+ ]).reactive(), uu = async (e, n, r, i) => n === null ? [] : (await e.query({
6115
6132
  table: "_voltro_rebac_tuples",
6116
6133
  predicate: t(u("subjectId", n), u("resourceType", r), u("resourceId", i)),
6117
6134
  order: [],
@@ -6123,16 +6140,16 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6123
6140
  relation: e.relation,
6124
6141
  resourceType: e.resourceType,
6125
6142
  resourceId: e.resourceId
6126
- })), cu = (e) => ({
6143
+ })), du = (e) => ({
6127
6144
  id: e.id,
6128
6145
  tenantId: e.tenantId,
6129
6146
  ...e.scopes === void 0 ? {} : { scopes: e.scopes }
6130
- }), lu = (e, t) => {
6131
- let n = t.getPolicy ?? vs;
6147
+ }), fu = (e, t) => {
6148
+ let n = t.getPolicy ?? xs;
6132
6149
  return (r, i) => {
6133
6150
  let a = e[i.tag];
6134
6151
  if (a === void 0) return r;
6135
- let o = n(a.resourceType), s = (e) => P.fail(new hs({
6152
+ let o = n(a.resourceType), s = (e) => P.fail(new vs({
6136
6153
  action: a.action,
6137
6154
  resourceType: a.resourceType,
6138
6155
  resourceId: e
@@ -6140,17 +6157,17 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6140
6157
  if (o === void 0) return s("");
6141
6158
  let c = a.resourceId(i.input);
6142
6159
  if (c === null || c === "") return s("");
6143
- let l = cu(i.subject), u = {
6160
+ let l = du(i.subject), u = {
6144
6161
  type: a.resourceType,
6145
6162
  id: c,
6146
6163
  tenantId: i.subject.tenantId
6147
6164
  };
6148
- return P.flatMap(P.promise(async () => t.loadTuples(l.id, a.resourceType, c)), (e) => ws(l, a.action, u, {
6165
+ return P.flatMap(P.promise(async () => t.loadTuples(l.id, a.resourceType, c)), (e) => Ds(l, a.action, u, {
6149
6166
  policy: o,
6150
6167
  tuples: e
6151
6168
  }) ? r : s(c));
6152
6169
  };
6153
- }, uu = async (e, n, r) => n === null ? [] : (await e.query({
6170
+ }, pu = async (e, n, r) => n === null ? [] : (await e.query({
6154
6171
  table: "_voltro_rebac_tuples",
6155
6172
  predicate: t(u("subjectId", n), u("resourceType", r)),
6156
6173
  order: [],
@@ -6162,18 +6179,18 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6162
6179
  relation: e.relation,
6163
6180
  resourceType: e.resourceType,
6164
6181
  resourceId: e.resourceId
6165
- })), du = (e) => {
6166
- let t = e.getPolicy ?? vs;
6182
+ })), mu = (e) => {
6183
+ let t = e.getPolicy ?? xs;
6167
6184
  return async (n, r, i, a) => {
6168
6185
  let o = t(r);
6169
6186
  if (o === void 0) return [];
6170
- let s = cu(n);
6171
- return Es(s, i, r, a, {
6187
+ let s = du(n);
6188
+ return ks(s, i, r, a, {
6172
6189
  policy: o,
6173
6190
  tuples: await e.loadSubjectTuples(s.id, r)
6174
6191
  });
6175
6192
  };
6176
- }, fu = (e) => {
6193
+ }, hu = (e) => {
6177
6194
  if (typeof e.name != "string" || e.name.length === 0) throw Error("defineReaction: a non-empty `name` is required");
6178
6195
  if (e.watch === void 0 || typeof e.watch.table != "string" || e.watch.table.length === 0) throw Error(`reaction '${e.name}': watch.table is required`);
6179
6196
  if (e.act === void 0 || e.act.kind !== "agent" && e.act.kind !== "workflow") throw Error(`reaction '${e.name}': act must be { kind: 'agent' | 'workflow', … }`);
@@ -6181,14 +6198,14 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6181
6198
  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`);
6182
6199
  if (e.guards.costBudgetUsd !== void 0 && e.guards.costBudgetUsd < 0) throw Error(`reaction '${e.name}': guards.costBudgetUsd must be >= 0`);
6183
6200
  return e;
6184
- }, pu = (e, t) => e === void 0 ? !0 : Array.isArray(e) ? e.includes(t) : e === t, mu = (e) => e.new?.tenantId ?? e.old?.tenantId ?? null, hu = class {
6201
+ }, gu = (e, t) => e === void 0 ? !0 : Array.isArray(e) ? e.includes(t) : e === t, _u = (e) => e.new?.tenantId ?? e.old?.tenantId ?? null, vu = class {
6185
6202
  hits = /* @__PURE__ */ new Map();
6186
6203
  allow(e, t, n, r) {
6187
6204
  let i = r - n, a = (this.hits.get(e) ?? []).filter((e) => e > i);
6188
6205
  return a.length >= t ? (this.hits.set(e, a), !1) : (a.push(r), this.hits.set(e, a), !0);
6189
6206
  }
6190
- }, gu = async (e, t, n) => {
6191
- if (t.table !== e.watch.table || !pu(e.watch.on, t.op)) return "skipped-op";
6207
+ }, yu = async (e, t, n) => {
6208
+ if (t.table !== e.watch.table || !gu(e.watch.on, t.op)) return "skipped-op";
6192
6209
  if (e.when !== void 0 && !e.when(t)) return "skipped-when";
6193
6210
  let r = `${e.name}:${e.guards.dedupeKey(t)}`;
6194
6211
  if (await n.dedupe.has(r)) return "skipped-dedupe";
@@ -6197,26 +6214,26 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6197
6214
  let t = n.now?.() ?? Date.now();
6198
6215
  if (!n.rateLimiter.allow(e.name, i.limit, i.windowMs, t)) return "skipped-ratelimit";
6199
6216
  }
6200
- let a = mu(t);
6217
+ let a = _u(t);
6201
6218
  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, {
6202
6219
  id: a,
6203
6220
  via: "agent"
6204
6221
  }), await n.dedupe.add(r), "acted");
6205
- }, _u = O("_voltro_wakeups", {
6222
+ }, bu = O("_voltro_wakeups", {
6206
6223
  id: v({ prefix: "wakeup" }),
6207
6224
  tenantId: k(),
6208
6225
  kind: k(),
6209
6226
  refId: k(),
6210
6227
  wakeAt: A(),
6211
6228
  status: k()
6212
- }).index(["status", "wakeAt"]).index(["tenantId"]), vu = async (e) => {
6213
- let t = e.now?.() ?? /* @__PURE__ */ new Date(), n = await Zc(e.store, t, e.batchLimit ?? 100);
6229
+ }).index(["status", "wakeAt"]).index(["tenantId"]), xu = async (e) => {
6230
+ let t = e.now?.() ?? /* @__PURE__ */ new Date(), n = await el(e.store, t, e.batchLimit ?? 100);
6214
6231
  if (n.length === 0) return 0;
6215
6232
  let r = 0;
6216
- for (let t of n) if (await qc(e.store, t)) try {
6233
+ for (let t of n) if (await Xc(e.store, t)) try {
6217
6234
  await e.adapter.wake(t), r++;
6218
6235
  } catch (n) {
6219
- await Jc(e.store, t), e.log?.warn("wake: adapter failed — released for retry", {
6236
+ await Zc(e.store, t), e.log?.warn("wake: adapter failed — released for retry", {
6220
6237
  tenantId: t.tenantId,
6221
6238
  kind: t.kind,
6222
6239
  refId: t.refId,
@@ -6224,11 +6241,11 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6224
6241
  });
6225
6242
  }
6226
6243
  return r > 0 && e.log?.info("wake: woke due deployments", { count: r }), r;
6227
- }, yu = (e, t = 1e3) => {
6244
+ }, Su = (e, t = 1e3) => {
6228
6245
  let n = !1, r, i = async () => {
6229
6246
  if (!n) {
6230
6247
  try {
6231
- await vu(e);
6248
+ await xu(e);
6232
6249
  } catch (t) {
6233
6250
  e.log?.warn("wake: tick failed", { reason: t instanceof Error ? t.message : String(t) });
6234
6251
  }
@@ -6238,10 +6255,10 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6238
6255
  return i(), { stop: () => {
6239
6256
  n = !0, r !== void 0 && clearTimeout(r);
6240
6257
  } };
6241
- }, bu = (e) => ({ wake: async () => {
6258
+ }, Cu = (e) => ({ wake: async () => {
6242
6259
  await e.start();
6243
- } }), xu = (e) => new Promise((t) => setTimeout(t, e)), Su = (e) => {
6244
- let t = e.fetchImpl ?? fetch, n = e.now ?? Date.now, r = e.sleep ?? xu, i = e.spawnImpl ?? Mt, 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 () => {
6260
+ } }), wu = (e) => new Promise((t) => setTimeout(t, e)), Tu = (e) => {
6261
+ let t = e.fetchImpl ?? fetch, n = e.now ?? Date.now, r = e.sleep ?? wu, i = e.spawnImpl ?? Mt, 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 () => {
6245
6262
  try {
6246
6263
  let n = await t(e.healthUrl);
6247
6264
  return d(n);
@@ -6295,11 +6312,11 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6295
6312
  },
6296
6313
  stop: m
6297
6314
  };
6298
- }, Cu = async (e) => {
6315
+ }, Eu = async (e) => {
6299
6316
  if (e.signals.connectedClients() > 0 || e.signals.inFlightRequests() > 0 || e.signals.activeWorkflowExecutions() > 0) return !1;
6300
- let t = (e.now?.() ?? /* @__PURE__ */ new Date()).getTime() + (e.wakeLookaheadMs ?? 3e4), n = await Qc(e.store);
6317
+ let t = (e.now?.() ?? /* @__PURE__ */ new Date()).getTime() + (e.wakeLookaheadMs ?? 3e4), n = await tl(e.store);
6301
6318
  return !(n !== null && n.wakeAt.getTime() <= t);
6302
- }, wu = (e, t = Date.now) => {
6319
+ }, Du = (e, t = Date.now) => {
6303
6320
  let n;
6304
6321
  return {
6305
6322
  update: (r) => {
@@ -6311,7 +6328,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6311
6328
  n = void 0;
6312
6329
  }
6313
6330
  };
6314
- }, Tu = () => {
6331
+ }, Ou = () => {
6315
6332
  let e = 0, t = 0;
6316
6333
  return {
6317
6334
  onRequestStart: () => {
@@ -6329,7 +6346,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6329
6346
  inFlightRequests: () => e,
6330
6347
  openConnections: () => t
6331
6348
  };
6332
- }, Eu = (e) => ({ run: async (t) => (e.onActivity?.(), await e.ensureAwake(), t()) }), Du = (e, t, n, r) => new Promise((i, a) => {
6349
+ }, ku = (e) => ({ run: async (t) => (e.onActivity?.(), await e.ensureAwake(), t()) }), Au = (e, t, n, r) => new Promise((i, a) => {
6333
6350
  let o = it.request({
6334
6351
  host: n,
6335
6352
  port: r,
@@ -6340,7 +6357,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6340
6357
  t.writeHead(e.statusCode ?? 502, e.headers), e.pipe(t), e.on("end", i), e.on("error", a);
6341
6358
  });
6342
6359
  o.on("error", a), e.pipe(o);
6343
- }), Ou = (e, t, n, r, i) => new Promise((a, o) => {
6360
+ }), ju = (e, t, n, r, i) => new Promise((a, o) => {
6344
6361
  let s = it.request({
6345
6362
  host: r,
6346
6363
  port: i,
@@ -6355,21 +6372,21 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6355
6372
  };
6356
6373
  t.on("close", s), r.on("close", s), r.on("error", o);
6357
6374
  }), s.on("error", o), s.end();
6358
- }), ku = (e) => {
6359
- let t = Eu({
6375
+ }), Mu = (e) => {
6376
+ let t = ku({
6360
6377
  ensureAwake: () => e.supervisor.start(),
6361
6378
  ...e.onActivity === void 0 ? {} : { onActivity: e.onActivity }
6362
6379
  }), n = e.activity, r = it.createServer((r, i) => {
6363
- n?.onRequestStart(), i.on("close", () => n?.onRequestEnd()), t.run(() => Du(r, i, e.targetHost, e.targetPort)).catch((t) => {
6380
+ n?.onRequestStart(), i.on("close", () => n?.onRequestEnd()), t.run(() => Au(r, i, e.targetHost, e.targetPort)).catch((t) => {
6364
6381
  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");
6365
6382
  });
6366
6383
  });
6367
6384
  return r.on("upgrade", (r, i, a) => {
6368
- n?.onConnect(), i.on("close", () => n?.onDisconnect()), t.run(() => Ou(r, i, a, e.targetHost, e.targetPort)).catch((t) => {
6385
+ n?.onConnect(), i.on("close", () => n?.onDisconnect()), t.run(() => ju(r, i, a, e.targetHost, e.targetPort)).catch((t) => {
6369
6386
  e.log?.warn("wake-router: upgrade proxy failed", { reason: t instanceof Error ? t.message : String(t) }), i.destroy();
6370
6387
  });
6371
6388
  }), r;
6372
- }, Au = async (e) => {
6389
+ }, Nu = async (e) => {
6373
6390
  try {
6374
6391
  return (await e.query({
6375
6392
  table: "_voltro_workflow_runs",
@@ -6386,15 +6403,15 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6386
6403
  } catch {
6387
6404
  return 0;
6388
6405
  }
6389
- }, ju = async (e) => {
6390
- let t = bu(e.supervisor), n = await vu({
6406
+ }, Pu = async (e) => {
6407
+ let t = Cu(e.supervisor), n = await xu({
6391
6408
  store: e.store,
6392
6409
  adapter: t,
6393
6410
  ...e.now === void 0 ? {} : { now: e.now },
6394
6411
  ...e.log === void 0 ? {} : { log: e.log }
6395
6412
  });
6396
6413
  n > 0 && e.idleGate.reset();
6397
- let r = await Cu({
6414
+ let r = await Eu({
6398
6415
  store: e.store,
6399
6416
  signals: e.signals,
6400
6417
  ...e.wakeLookaheadMs === void 0 ? {} : { wakeLookaheadMs: e.wakeLookaheadMs },
@@ -6404,12 +6421,12 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6404
6421
  woke: n,
6405
6422
  stopped: i
6406
6423
  };
6407
- }, Mu = async (e) => {
6408
- let t = wu(e.idleGraceMs ?? 6e4), n = e.tickMs ?? 1e3, r = Tu(), i = 0, a = e.signals === void 0, o = e.signals ?? {
6424
+ }, Fu = async (e) => {
6425
+ let t = Du(e.idleGraceMs ?? 6e4), n = e.tickMs ?? 1e3, r = Ou(), i = 0, a = e.signals === void 0, o = e.signals ?? {
6409
6426
  connectedClients: () => r.openConnections(),
6410
6427
  inFlightRequests: () => r.inFlightRequests(),
6411
6428
  activeWorkflowExecutions: () => i
6412
- }, s = ku({
6429
+ }, s = Mu({
6413
6430
  supervisor: e.supervisor,
6414
6431
  targetHost: e.targetHost,
6415
6432
  targetPort: e.targetPort,
@@ -6428,7 +6445,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6428
6445
  let l = !1, u, d = e.firedRetentionMs ?? 10 * 6e4, f = 0, p = async () => {
6429
6446
  if (!l) {
6430
6447
  try {
6431
- if (a && (i = await Au(e.store)), await ju({
6448
+ if (a && (i = await Nu(e.store)), await Pu({
6432
6449
  store: e.store,
6433
6450
  supervisor: e.supervisor,
6434
6451
  signals: o,
@@ -6436,7 +6453,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6436
6453
  ...e.wakeLookaheadMs === void 0 ? {} : { wakeLookaheadMs: e.wakeLookaheadMs },
6437
6454
  ...e.log === void 0 ? {} : { log: e.log }
6438
6455
  }), f++ % 60 == 0) {
6439
- let t = await el(e.store, { firedOlderThan: new Date(Date.now() - d) });
6456
+ let t = await rl(e.store, { firedOlderThan: new Date(Date.now() - d) });
6440
6457
  t > 0 && e.log?.info("orchestrator: pruned fired wakeups", { count: t });
6441
6458
  }
6442
6459
  } catch (t) {
@@ -6451,14 +6468,14 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6451
6468
  l = !0, u !== void 0 && clearTimeout(u), await new Promise((e) => s.close(() => e()));
6452
6469
  }
6453
6470
  };
6454
- }, Nu = (e) => e, Pu = class extends R.TaggedError()("AnalyticsError", {
6471
+ }, Iu = (e) => e, Lu = class extends R.TaggedError()("AnalyticsError", {
6455
6472
  provider: R.String,
6456
6473
  operation: R.String,
6457
6474
  cause: R.String
6458
- }) {}, Fu = class extends R.TaggedError()("AnalyticsCapabilityNotSupported", {
6475
+ }) {}, Ru = class extends R.TaggedError()("AnalyticsCapabilityNotSupported", {
6459
6476
  provider: R.String,
6460
6477
  capability: R.String
6461
- }) {}, Iu = class extends Ge.Tag("@voltro/AnalyticsSink")() {}, Lu = (e, t) => ({
6478
+ }) {}, zu = class extends Ge.Tag("@voltro/AnalyticsSink")() {}, Bu = (e, t) => ({
6462
6479
  info: e.info,
6463
6480
  track: (n) => e.track(n.tenantId === void 0 ? {
6464
6481
  ...n,
@@ -6477,20 +6494,20 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6477
6494
  tenantId: t
6478
6495
  } : n),
6479
6496
  ...e.mirror === void 0 ? {} : { mirror: e.mirror }
6480
- }), Ru = () => P.gen(function* () {
6481
- let e = yield* Iu, t = yield* P.serviceOption(ke), n = tt.match(t, {
6497
+ }), Vu = () => P.gen(function* () {
6498
+ let e = yield* zu, t = yield* P.serviceOption(ke), n = tt.match(t, {
6482
6499
  onNone: () => null,
6483
6500
  onSome: (e) => e.tenantId ?? null
6484
6501
  });
6485
- return n === null ? e : Lu(e, n);
6486
- }), zu = "noop", Bu = () => {
6487
- let e = (e) => P.fail(new Fu({
6488
- provider: zu,
6502
+ return n === null ? e : Bu(e, n);
6503
+ }), Hu = "noop", Uu = () => {
6504
+ let e = (e) => P.fail(new Ru({
6505
+ provider: Hu,
6489
6506
  capability: e
6490
6507
  }));
6491
6508
  return {
6492
6509
  info: {
6493
- provider: zu,
6510
+ provider: Hu,
6494
6511
  capabilities: {
6495
6512
  track: !0,
6496
6513
  aggregate: !1,
@@ -6504,8 +6521,8 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6504
6521
  timeseries: () => e("timeseries"),
6505
6522
  topN: () => e("topN")
6506
6523
  };
6507
- }, Vu = (e) => {
6508
- if (e.length === 0) return Bu();
6524
+ }, Wu = (e) => {
6525
+ if (e.length === 0) return Uu();
6509
6526
  if (e.length === 1) return e[0];
6510
6527
  let t = {
6511
6528
  provider: "compose",
@@ -6522,7 +6539,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6522
6539
  discard: !0
6523
6540
  }), r = (t, n) => {
6524
6541
  let r = e.find((e) => e.info.capabilities[t]);
6525
- return r === void 0 ? P.fail(new Fu({
6542
+ return r === void 0 ? P.fail(new Ru({
6526
6543
  provider: "compose",
6527
6544
  capability: t
6528
6545
  })) : n(r);
@@ -6545,11 +6562,11 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6545
6562
  topN: (e) => r("topN", (t) => t.topN(e)),
6546
6563
  ...a === void 0 ? {} : { mirror: a }
6547
6564
  };
6548
- }, Hu = (e) => {
6565
+ }, Gu = (e) => {
6549
6566
  let t = e.filter((e) => e.dispose !== void 0);
6550
6567
  return {
6551
6568
  kind: "compose",
6552
- build: (t) => Vu(e.map((e) => e.build(t))),
6569
+ build: (t) => Wu(e.map((e) => e.build(t))),
6553
6570
  tables: e.flatMap((e) => e.tables ?? []),
6554
6571
  initialize: (t) => P.forEach(e, (e) => e.initialize ? e.initialize(t) : P.void, {
6555
6572
  concurrency: 1,
@@ -6560,15 +6577,15 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6560
6577
  discard: !0
6561
6578
  }) } : {}
6562
6579
  };
6563
- }, Uu = {
6580
+ }, Ku = {
6564
6581
  kind: "noop",
6565
- build: () => Bu()
6566
- }, Wu = {
6582
+ build: () => Uu()
6583
+ }, qu = {
6567
6584
  tables: [],
6568
6585
  detach: () => {}
6569
- }, Gu = (e) => {
6586
+ }, Ju = (e) => {
6570
6587
  let { store: t, sink: n, log: r } = e, i = n.mirror;
6571
- if (i === void 0 || i.tables.length === 0) return Wu;
6588
+ if (i === void 0 || i.tables.length === 0) return qu;
6572
6589
  let a = e.run ?? ((e) => P.runPromise(e)), o = i.primaryKey ?? "id", s = new Set(i.tables), c = (e) => {
6573
6590
  if (e.op === "delete") {
6574
6591
  let t = e.old;
@@ -6592,11 +6609,11 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6592
6609
  tables: i.tables,
6593
6610
  detach: l
6594
6611
  };
6595
- }, Ku = (e) => {
6612
+ }, Yu = (e) => {
6596
6613
  let t = typeof e.refresh == "string" ? { interval: e.refresh } : e.refresh, n = e.strategy ?? "replace";
6597
6614
  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`);
6598
6615
  if (e.incremental !== void 0) {
6599
- let t = Zl({
6616
+ let t = eu({
6600
6617
  aggregations: [{
6601
6618
  op: e.incremental.op,
6602
6619
  ...e.incremental.column === void 0 ? {} : { column: e.incremental.column }
@@ -6618,47 +6635,47 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6618
6635
  build: e.build,
6619
6636
  ...e.incremental === void 0 ? {} : { incremental: e.incremental }
6620
6637
  };
6621
- }, qu = (e) => typeof e == "object" && !!e && e._voltroAggregate === !0, Ju = class extends R.TaggedError()("AggregateStale", {
6638
+ }, Xu = (e) => typeof e == "object" && !!e && e._voltroAggregate === !0, Zu = class extends R.TaggedError()("AggregateStale", {
6622
6639
  name: R.String,
6623
6640
  ageMs: R.Number,
6624
6641
  maxAgeMs: R.Number
6625
- }) {}, Yu = class extends R.TaggedError()("AggregateNotFound", { name: R.String }) {}, Xu = class extends R.TaggedError()("AggregateError", {
6642
+ }) {}, Qu = class extends R.TaggedError()("AggregateNotFound", { name: R.String }) {}, $u = class extends R.TaggedError()("AggregateError", {
6626
6643
  name: R.String,
6627
6644
  operation: R.String,
6628
6645
  cause: R.String
6629
- }) {}, Zu = class extends Ge.Tag("@voltro/AggregateRegistry")() {}, Qu = (e) => P.gen(function* () {
6630
- return (yield* Zu).getHandle(e);
6631
- }), $u = (e, n, r) => {
6646
+ }) {}, ed = class extends Ge.Tag("@voltro/AggregateRegistry")() {}, td = (e) => P.gen(function* () {
6647
+ return (yield* ed).getHandle(e);
6648
+ }), nd = (e, n, r) => {
6632
6649
  if (e.crossTenant || !n.has(e.table) || r == null) return e;
6633
6650
  let i = u("tenantId", r);
6634
6651
  return {
6635
6652
  ...e,
6636
6653
  predicate: e.predicate ? t(e.predicate, i) : i
6637
6654
  };
6638
- }, ed = (e, t, n) => n === "" && !e.crossTenant && t.has(e.table), td = (e) => e?.type === "user" && e.tenantId === "", nd = (e, n) => {
6655
+ }, rd = (e, t, n) => n === "" && !e.crossTenant && t.has(e.table), id = (e) => e?.type === "user" && e.tenantId === "", ad = (e, n) => {
6639
6656
  if (e.includeDeleted || !n.has(e.table)) return e;
6640
6657
  let r = S("deletedAt");
6641
6658
  return {
6642
6659
  ...e,
6643
6660
  predicate: e.predicate ? t(e.predicate, r) : r
6644
6661
  };
6645
- }, rd = (e, t) => t, id = (e) => P.runPromiseExit(e).then((e) => {
6662
+ }, od = (e, t) => t, sd = (e) => P.runPromiseExit(e).then((e) => {
6646
6663
  if (Xe.isSuccess(e)) return e.value;
6647
6664
  let t = N.failureOption(e.cause);
6648
6665
  throw tt.isSome(t) ? t.value : N.squash(e.cause);
6649
- }), ad = (e, t) => e.pipe(P.provideService(ke, t)), od = async (e, t, n) => {
6666
+ }), cd = (e, t) => e.pipe(P.provideService(ke, t)), ld = async (e, t, n) => {
6650
6667
  let r = await P.runPromise(Pe(t, e.guards, n));
6651
6668
  if (r) throw r;
6652
- }, sd = async (e) => {
6669
+ }, ud = async (e) => {
6653
6670
  if (Bn() === void 0) return e;
6654
- let t = await id(Hn(e.subject, (e) => {
6671
+ let t = await sd(Hn(e.subject, (e) => {
6655
6672
  console.error("[voltro] row filter failed to load", e);
6656
6673
  }));
6657
6674
  return {
6658
6675
  ...e,
6659
6676
  rowFilter: t
6660
6677
  };
6661
- }, cd = async (e) => {
6678
+ }, dd = async (e) => {
6662
6679
  let t = `${e.kind}.${e.name}`, n = Date.now(), r = "ok";
6663
6680
  try {
6664
6681
  if (e.interceptor) {
@@ -6687,28 +6704,28 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6687
6704
  status: r
6688
6705
  });
6689
6706
  }
6690
- }, ld = /* @__PURE__ */ new Set([1213, 1205]), ud = /* @__PURE__ */ new Set([
6707
+ }, fd = /* @__PURE__ */ new Set([1213, 1205]), pd = /* @__PURE__ */ new Set([
6691
6708
  "ER_LOCK_DEADLOCK",
6692
6709
  "ER_LOCK_WAIT_TIMEOUT",
6693
6710
  "40001",
6694
6711
  "40P01"
6695
- ]), dd = (e) => {
6712
+ ]), md = (e) => {
6696
6713
  let t = e;
6697
6714
  for (let e = 0; e < 6 && typeof t == "object" && t; e++) {
6698
6715
  let e = t;
6699
- if (typeof e.errno == "number" && ld.has(e.errno) || typeof e.code == "string" && ud.has(e.code) || typeof e.sqlState == "string" && ud.has(e.sqlState)) return !0;
6716
+ if (typeof e.errno == "number" && fd.has(e.errno) || typeof e.code == "string" && pd.has(e.code) || typeof e.sqlState == "string" && pd.has(e.sqlState)) return !0;
6700
6717
  t = e.cause;
6701
6718
  }
6702
6719
  return !1;
6703
- }, fd = 3, pd = (e) => new Promise((t) => setTimeout(t, e)), md = async (e, t) => {
6704
- let n = t?.delay ?? ((e) => pd(e * 20 + Math.floor(Math.random() * 30)));
6720
+ }, hd = 3, gd = (e) => new Promise((t) => setTimeout(t, e)), _d = async (e, t) => {
6721
+ let n = t?.delay ?? ((e) => gd(e * 20 + Math.floor(Math.random() * 30)));
6705
6722
  for (let t = 1;; t++) try {
6706
6723
  return await e();
6707
6724
  } catch (e) {
6708
- if (t >= fd || !dd(e)) throw e;
6725
+ if (t >= hd || !md(e)) throw e;
6709
6726
  await n(t);
6710
6727
  }
6711
- }, hd = (e) => (t, n, r) => cd({
6728
+ }, vd = (e) => (t, n, r) => dd({
6712
6729
  name: t.descriptor.name,
6713
6730
  kind: "mutation",
6714
6731
  input: n,
@@ -6716,11 +6733,11 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6716
6733
  ...e.interceptor ? { interceptor: e.interceptor } : {},
6717
6734
  ...e.recordMetric ? { recordMetric: e.recordMetric } : {},
6718
6735
  runExecutor: async () => {
6719
- await od(t.descriptor, r.subject, n);
6720
- let i = await sd(r), a = [], o = await md(async () => (a.length = 0, e.store.transactional(async (o) => {
6736
+ await ld(t.descriptor, r.subject, n);
6737
+ let i = await ud(r), a = [], o = await _d(async () => (a.length = 0, e.store.transactional(async (o) => {
6721
6738
  let s = e.undoCapture?.(o), c = s ? s.tx : o, l = e.buildContext(i, c, { afterCommit: (e) => {
6722
6739
  a.push(e);
6723
- } }), u = t.executor(n, l), d = P.isEffect(u) ? await e.runEffect(ad(u, r.subject), l.store) : await u;
6740
+ } }), u = t.executor(n, l), d = P.isEffect(u) ? await e.runEffect(cd(u, r.subject), l.store) : await u;
6724
6741
  return s && await s.persist(l.store, {
6725
6742
  tag: t.descriptor.name,
6726
6743
  subject: r.subject,
@@ -6730,30 +6747,30 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6730
6747
  for (let e of a) await e();
6731
6748
  return o;
6732
6749
  }
6733
- }), gd = (e) => e && typeof e == "object" && "descriptor" in e ? e.descriptor : e, _d = (e) => typeof e == "object" && !!e && !Array.isArray(e) && "table" in e && "order" in e, vd = (e) => {
6750
+ }), yd = (e) => e && typeof e == "object" && "descriptor" in e ? e.descriptor : e, bd = (e) => typeof e == "object" && !!e && !Array.isArray(e) && "table" in e && "order" in e, xd = (e) => {
6734
6751
  let t = e.descriptor.source;
6735
6752
  return t == null ? [] : typeof t == "string" ? [t] : [...t];
6736
- }, yd = (e, t) => (n) => () => {
6753
+ }, Sd = (e, t) => (n) => () => {
6737
6754
  let r = e.descriptor.guards;
6738
6755
  return !r || r.length === 0 ? Promise.resolve(null) : P.runPromise(Pe(n, r, t));
6739
- }, bd = (e) => (t, n) => (r) => {
6740
- let i = e.buildContext(r), a = yd(t, n)(r.subject), o = async () => {
6756
+ }, Cd = (e) => (t, n) => (r) => {
6757
+ let i = e.buildContext(r), a = Sd(t, n)(r.subject), o = async () => {
6741
6758
  let i = await a();
6742
6759
  if (i) throw i;
6743
- let o = e.buildContext(await sd(r)), s = t.executor(n, o);
6744
- return P.isEffect(s) ? P.runPromise(e.provideEffect(ad(s, r.subject), o.store)) : gd(await Promise.resolve(s));
6760
+ let o = e.buildContext(await ud(r)), s = t.executor(n, o);
6761
+ return P.isEffect(s) ? P.runPromise(e.provideEffect(cd(s, r.subject), o.store)) : yd(await Promise.resolve(s));
6745
6762
  }, s = (n) => {
6746
- let i = gd(n);
6747
- return _d(i) ? e.finalize(i, r) : {
6763
+ let i = yd(n);
6764
+ return bd(i) ? e.finalize(i, r) : {
6748
6765
  __voltroComputed: !0,
6749
6766
  value: i,
6750
- dependentTables: vd(t),
6767
+ dependentTables: xd(t),
6751
6768
  tenantId: r.subject?.tenantId ?? null,
6752
6769
  recompute: o
6753
6770
  };
6754
6771
  }, c = () => {
6755
6772
  let a = t.executor(n, i);
6756
- return P.isEffect(a) ? e.provideEffect(ad(a, r.subject), i.store).pipe(P.map(s)) : a instanceof Promise ? P.promise(() => a).pipe(P.map(s)) : s(a);
6773
+ return P.isEffect(a) ? e.provideEffect(cd(a, r.subject), i.store).pipe(P.map(s)) : a instanceof Promise ? P.promise(() => a).pipe(P.map(s)) : s(a);
6757
6774
  }, l = () => {
6758
6775
  let e = t.descriptor.guards;
6759
6776
  return !e || e.length === 0 ? c() : Pe(r.subject, e, n).pipe(P.flatMap((e) => {
@@ -6775,14 +6792,14 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6775
6792
  traceId: r.traceId,
6776
6793
  ...r.spanId === void 0 ? {} : { spanId: r.spanId }
6777
6794
  });
6778
- }, xd = (e) => async (t, n, r) => {
6779
- let i = await sd(r), a = bd(e)(t, n)(i), o = P.isEffect(a) ? await id(a) : a;
6795
+ }, wd = (e) => async (t, n, r) => {
6796
+ let i = await ud(r), a = Cd(e)(t, n)(i), o = P.isEffect(a) ? await sd(a) : a;
6780
6797
  return Qn(o) ? o.value : e.queryRows(o);
6781
- }, Sd = (e) => (t, n, r, i) => {
6798
+ }, Td = (e) => (t, n, r, i) => {
6782
6799
  let a = !1, o;
6783
6800
  return (async () => {
6784
6801
  try {
6785
- let s = await sd(r), c = bd(e)(t, n)(s), l = P.isEffect(c) ? await id(c) : c, u = (e) => i(e), d = Qn(l) ? await e.subscribeComputed(l, u, s) : await e.subscribeDescriptor(l, u, s);
6802
+ let s = await ud(r), c = Cd(e)(t, n)(s), l = P.isEffect(c) ? await sd(c) : c, u = (e) => i(e), d = Qn(l) ? await e.subscribeComputed(l, u, s) : await e.subscribeDescriptor(l, u, s);
6786
6803
  a ? d() : o = d;
6787
6804
  } catch (e) {
6788
6805
  i({
@@ -6793,7 +6810,7 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6793
6810
  })(), () => {
6794
6811
  a = !0, o?.();
6795
6812
  };
6796
- }, Cd = (e) => (t, n, r) => cd({
6813
+ }, Ed = (e) => (t, n, r) => dd({
6797
6814
  name: t.descriptor.name,
6798
6815
  kind: "action",
6799
6816
  input: n,
@@ -6801,16 +6818,16 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6801
6818
  ...e.interceptor ? { interceptor: e.interceptor } : {},
6802
6819
  ...e.recordMetric ? { recordMetric: e.recordMetric } : {},
6803
6820
  runExecutor: async () => {
6804
- await od(t.descriptor, r.subject, n);
6805
- let i = e.buildContext(await sd(r)), a = t.executor(n, i);
6806
- return P.isEffect(a) ? e.runEffect(ad(a, r.subject), i.store) : a;
6821
+ await ld(t.descriptor, r.subject, n);
6822
+ let i = e.buildContext(await ud(r)), a = t.executor(n, i);
6823
+ return P.isEffect(a) ? e.runEffect(cd(a, r.subject), i.store) : a;
6807
6824
  }
6808
- }), wd = (e) => e instanceof Date ? e.toISOString() : typeof e == "string" && e.length > 0 ? e : null, Td = (e) => typeof e == "string" && e.length > 0 ? e : null, Ed = [
6825
+ }), Dd = (e) => e instanceof Date ? e.toISOString() : typeof e == "string" && e.length > 0 ? e : null, Od = (e) => typeof e == "string" && e.length > 0 ? e : null, kd = [
6809
6826
  "updatedAt",
6810
6827
  "createdAt",
6811
6828
  "updatedBy",
6812
6829
  "createdBy"
6813
- ], Dd = (e) => Ed.some((t) => t in e), Od = (e, t, n) => {
6830
+ ], Ad = (e) => kd.some((t) => t in e), jd = (e, t, n) => {
6814
6831
  let r = {
6815
6832
  table: t.table,
6816
6833
  id: t.id,
@@ -6825,14 +6842,14 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6825
6842
  found: !1
6826
6843
  };
6827
6844
  let i = t.column === void 0 ? void 0 : e[t.column];
6828
- if (!Dd(e)) return {
6845
+ if (!Ad(e)) return {
6829
6846
  ...r,
6830
6847
  value: i,
6831
6848
  lastWrite: null,
6832
6849
  attribution: "none",
6833
6850
  found: !0
6834
6851
  };
6835
- let a = Td(e.updatedBy) ?? Td(e.createdBy), o = wd(e.updatedAt) ?? wd(e.createdAt);
6852
+ let a = Od(e.updatedBy) ?? Od(e.createdBy), o = Dd(e.updatedAt) ?? Dd(e.createdAt);
6836
6853
  return {
6837
6854
  ...r,
6838
6855
  value: i,
@@ -6844,12 +6861,12 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6844
6861
  attribution: "audit",
6845
6862
  found: !0
6846
6863
  };
6847
- }, kd = (e, t) => {
6864
+ }, Md = (e, t) => {
6848
6865
  let n = e.map((e) => {
6849
6866
  let n = e.newValue ?? e.value, r = t.column !== void 0 && n && typeof n == "object" ? n[t.column] : e.newValue ?? e.value;
6850
6867
  return {
6851
- actor: { id: Td(e.actor) ?? Td(e.changedBy) },
6852
- at: wd(e.at) ?? wd(e.changedAt),
6868
+ actor: { id: Od(e.actor) ?? Od(e.changedBy) },
6869
+ at: Dd(e.at) ?? Dd(e.changedAt),
6853
6870
  ...e.traceId === void 0 ? {} : { traceId: e.traceId },
6854
6871
  value: r
6855
6872
  };
@@ -6864,12 +6881,12 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6864
6881
  history: n,
6865
6882
  found: n.length > 0
6866
6883
  };
6867
- }, Ad = (e) => {
6884
+ }, Nd = (e) => {
6868
6885
  let t = e.new?.id;
6869
6886
  if (typeof t == "string") return t;
6870
6887
  let n = e.old?.id;
6871
6888
  return typeof n == "string" ? n : void 0;
6872
- }, jd = (e) => {
6889
+ }, Pd = (e) => {
6873
6890
  let t = {};
6874
6891
  if (e.op === "insert") for (let [n, r] of Object.entries(e.new ?? {})) t[n] = {
6875
6892
  from: void 0,
@@ -6889,11 +6906,11 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6889
6906
  return {
6890
6907
  table: e.table,
6891
6908
  op: e.op,
6892
- id: Ad(e),
6909
+ id: Nd(e),
6893
6910
  fields: t
6894
6911
  };
6895
- }, Md = (e) => {
6896
- let t = e.map(jd);
6912
+ }, Fd = (e) => {
6913
+ let t = e.map(Pd);
6897
6914
  return {
6898
6915
  rows: t,
6899
6916
  summary: {
@@ -6902,21 +6919,21 @@ var q = /* @__PURE__ */ new Map(), cr = (e, t) => {
6902
6919
  deletes: t.filter((e) => e.op === "delete").length
6903
6920
  }
6904
6921
  };
6905
- }, Nd = class extends Error {
6922
+ }, Id = class extends Error {
6906
6923
  constructor() {
6907
6924
  super("voltro:preview-rollback"), this.name = "PreviewRollback";
6908
6925
  }
6909
- }, Pd = async (e, t) => {
6926
+ }, Ld = async (e, t) => {
6910
6927
  let n, r = !1;
6911
6928
  try {
6912
6929
  await e.transactional(async (e) => {
6913
- throw n = await t(e), r = !0, new Nd();
6930
+ throw n = await t(e), r = !0, new Id();
6914
6931
  });
6915
6932
  } catch (e) {
6916
- if (!(e instanceof Nd)) throw e;
6933
+ if (!(e instanceof Id)) throw e;
6917
6934
  }
6918
6935
  if (!r) throw Error("preview: handler did not complete");
6919
6936
  return n;
6920
- }, Fd = "framework-runtime";
6937
+ }, Rd = "framework-runtime";
6921
6938
  //#endregion
6922
- export { ra as API_KEYS_TABLE, hs as AccessDenied, Xu as AggregateError, au as AggregateMaintainer, Yu as AggregateNotFound, Zu as AggregateRegistry, Ju as AggregateStale, Fu as AnalyticsCapabilityNotSupported, Pu as AnalyticsError, Iu as AnalyticsSink, X as CONNECTIONS_TABLE, mo as CONNECTION_GRANTS_TABLE, Ec as CircuitBreaker, wc as CircuitOpen, Lo as ConnectionNotConnected, ci as DEFAULT_MAX_RPC_BODY_BYTES, Fo as DEFAULT_REFRESH_SKEW_MS, Ln as DEFAULT_ROW_FILTER_RETRY, nl as DORMANCY_WAKEUP_TENANT, ic as DeleteBuilder, Yn as Dispatcher, xa as EffectStore, Yo as GRANT_TTL_MS, Qt as InMemoryDataStore, Bt as IndexedMatcher, Nt as LinearScanMatcher, $e as MetricBoundaries, zu as NOOP_ANALYTICS_PROVIDER, Vn as NO_ROW_FILTER, Zs as NoRowFound, Qa as OUTBOX_ATTEMPTS_TABLE, ao as OUTBOX_ATTEMPT_LOG_CAP, Y as OUTBOX_TABLE, Qs as OptimisticLockError, ms as REBAC_ADMIN_SCOPE, Io as REFRESH_LEASE_MS, Fd as RUNTIME_NAME, hu as ReactionRateLimiter, kr as ReplicatedDataStore, In as RowFilterUnavailable, tl as SCHEDULE_SUBJECT, _a as SYSTEM_SUBJECT, nc as SelectBuilder, Is as SsrfBlockedError, ya as StoreOperationFailed, Ut as SubscriptionRegistry, ba as TableValidationFailed, va as TenantScopeViolation, Gl as TimelineRecorder, wl as UndoBoundaryError, El as UndoStack, rc as UpdateBuilder, Us as VOLTRO_AUDIT_MIXIN_ID, Ws as VOLTRO_SOFT_DELETE_MIXIN_ID, Gs as VOLTRO_TENANT_MIXIN_ID, ja as WorkflowPayloadError, ur as _connectionStreamCount, dr as _resetConnectionSubjectsForTest, go as _voltroConnectionGrantsTable, po as _voltroConnectionsTable, ou as _voltroRebacTuplesTable, pl as _voltroScheduleClaimsTable, fl as _voltroScheduleRunsTable, ml as _voltroTracesTable, hl as _voltroUndoLogTable, _u as _voltroWakeupsTable, qa as _voltroWorkflowEventDeliveriesTable, Ka as _voltroWorkflowEventsTable, ga as apiKeyManagementRoutes, cc as applyDefined, ru as applyDelta, Ol as applyInverse, kl as applyInverses, Gn as applyRowFilter, Kn as applyRowFilterToDescriptor, nd as applySoftDeleteScope, $u as applyTenantScope, Ll as applyUndoInvocation, Ts as assertCan, bo as assertConnectionCipherConfigured, Gu as attachAnalyticsMirror, pi as awaitServerListening, io as backoffMs, $o as beginOAuthConnect, rr as bindConnectionSubject, si as bindMutation, $r as bindStream, Qr as bindSubscription, Xr as bindSubscriptionUntyped, tu as buildIvmState, Md as buildPreview, lu as buildRebacInterceptor, du as buildRebacReadFilter, Cr as buildSubjectKey, vi as buildTracingLayer, Ni as cachedBackend, ws as can, Wc as cancelWakeup, Zl as classifyShape, Vo as clearConnectionRefreshFlights, bs as clearResourcePolicies, i as clearRetentions, kc as clearSystemStoreHandle, zc as compileCron, es as completeOAuthConnect, Hu as composeAnalytics, Vu as composeAnalyticsSinks, Xo as connectionCallbackPath, yo as connectionLabel, fr as connectionSubjectsSnapshot, Au as countRunningWorkflows, An as counter, yc as crud, Or as currentRoutingContext, yr as currentTraceContext, pa as dataStoreApiKeyStore, Yi as dataStoreIdempotencyStore, ea as dataStoreKvStore, Wi as decryptField, Ku as defineAggregate, vo as defineConnection, Va as defineEventTrigger, rd as defineExecutor, to as defineOutboxHandler, fu as defineReaction, _s as defineResourcePolicy, Rc as defineSchedule, Nu as defineSubscriber, qn as deliveredRowCount, Ii as deriveKey, jd as diffChange, lo as drainOutbox, Zc as dueWakeups, Cs as effectiveRelations, Xs as emptySchemaRegistry, Ir as enableGraphObservation, Ui as encryptField, Di as envSecretsBackend, No as exchangeAuthorizationCode, gr as externalSpanFromTraceparent, en as extractDbCause, Ht as fingerprintFor, ko as forgetCredential, Cc as formatServerOnlyLeaks, mr as formatTraceparent, Dl as forwardChangeFromCdc, ma as frameworkApiKeyStrategy, jn as gauge, aa as generateApiKeyToken, is as getConnectionResolver, ir as getConnectionSubject, Vi as getFieldCipher, vs as getResourcePolicy, Bn as getRowFilter, Ac as getSystemStoreHandle, ql as getTimelineRecorder, js as getTupleSource, $ as groupKeyOf, Mn as histogramMetric, kd as historyProvenance, Pi as httpSecretsBackend, jt as inspectWorkflow, Ms as installPolicyGuardResolver, lr as interruptConnectionStreams, Sl as invertChange, qu as isAggregateDefinition, ed as isEmptyTenantScopedRead, tn as isForeignKeyViolation, Cu as isIdleNow, ii as isInfraError, Lr as isObservingGraph, td as isOrglessUserSubject, Tl as isSafeToApply, Ic as isScheduleDefinition, Ha as isWorkflowEventTriggerDefinition, eu as ivmValue, Od as lastWriteProvenance, Ao as listConnectionStates, ys as listResourcePolicies, w as listRetentions, su as loadResourceTuples, uu as loadSubjectTuples, Mc as localityAwareSelector, Cd as makeActionRunner, al as makeAdvisoryLockCoordinator, Li as makeAesCipher, ca as makeApiKeyService, Hs as makeApiKeyUsageBuffer, fa as makeApiKeyUsageFlusher, nn as makeAppAccess, ta as makeAsyncKv, Ei as makeBufferingSpanProcessor, xo as makeConnectionRegistry, os as makeConnectionResolver, ss as makeConnectionsFacade, dl as makeCoordinatedScheduler, Ps as makeDataLoader, ps as makeDisconnectConnectionExecutor, wa as makeEffectStoreLayer, Ja as makeEventsFacade, Ri as makeFieldCipher, ac as makeFluentStore, wu as makeIdleGate, La as makeLazyWorkflowFacade, us as makeListConnectionsExecutor, hd as makeMutationRunner, xd as makeOneShotQueryRunner, ro as makeOutboxFacade, Fa as makePostCommitWorkflowFacade, bu as makeProcessAdapter, bd as makeQueryDescriptorProducer, yd as makeQueryReauthorizer, Sd as makeQuerySubscriber, Tu as makeRouterActivity, Ks as makeSchemaRegistry, ds as makeStartConnectionExecutor, fs as makeSubmitTokenExecutor, bl as makeUndoCapture, Eu as makeWakeGate, ku as makeWakeProxyServer, Pa as makeWorkflowFacade, Ia as makeWorkflowFacadeWithCallerContext, Ra as makeWorkflowHandlers, za as makeWorkflowLayers, Da as makeWorkflowRunHandle, Gc as markWakeupFired, nu as materializeIvm, la as memoryApiKeyStore, Pc as memoryReplicationAdapter, Sr as memoryRywPositionStore, Bc as nextFiring, Qc as nextWakeup, Su as nodeProcessSupervisor, Bu as noopAnalytics, Uu as noopAnalyticsSpec, na as noopKv, Hr as observeStore, Br as observedGraph, or as onBindConnectionSubject, eo as outboxAttemptsTable, Za as outboxTable, hr as parseTraceparent, Ma as payloadPropertyNames, br as powerOfTwoSelector, Pd as previewInRollback, To as projectConnectionState, el as pruneWakeups, xs as rebacPolicyGraph, En as recordSample, G as recordSubscriptionActive, On as recordSubscriptionDelivery, zr as recordTableAccess, Yl as recordTimelineEvent, hc as redactColumns, Hl as redactRow, wr as redisRywPositionStore, Rl as redoUndoInvocation, Po as refreshAccessToken, cr as registerConnectionStream, oe as registerRetention, Uc as registerWakeup, Jc as releaseWakeup, xr as replicaHealth, Vr as resetObservedGraph, Ai as resetSecretsBackend, Wo as resolveConnection, as as resolveConnectionForSubject, Nc as resolveCurrentRegion, rn as resolveDependentTables, Qo as resolveRedirectUri, iu as resolveRescan, Hn as resolveRowFilterScope, Un as resolveRowFilterScopeFor, ji as resolveSecret, Mi as resolveSecretSync, Fi as resolveSecretsBackend, zl as resolveTimelineMode, se as retentionTtlMsFromEnv, Wl as reverseEventOverRows, Ds as revokedIds, jc as runAsSystem, ju as runOrchestratorTick, id as runProvidedEffect, gu as runReaction, Mu as runSingleNodeOrchestrator, yu as runWakeLoop, md as runWithDeadlockRetry, Rr as runWithObservedProcedure, Dr as runWithRoutingContext, vr as runWithTraceContext, Zo as sanitizeRedirectTo, ul as scheduleCoordinated, bc as schemaPropertyNames, Sc as serverOnlyLeaks, rs as setConnectionResolver, Bi as setFieldCipher, zn as setRowFilter, ki as setSecretsBackend, Oc as setSystemStoreHandle, Jl as setTimelineRecorderForTest, As as setTupleSource, ia as sha256Hex, rl as singleCoordinator, Pn as snapshotMetrics, Fn as snapshotMetricsSync, Vs as ssrfGuardHttpClientLayer, Bs as ssrfReason, li as startRpcServer, sl as startScheduler, Do as storeCredential, ts as sweepExpiredGrants, de as sweepRetention, Cl as synthesizeInverse, Fs as tracingHttpClientLayer, Ba as triggerWorkflow, qc as tryClaimWakeup, ar as unbindConnectionSubject, gl as undoCaptureEnabled, Fl as undoLogExecutor, Qu as useAggregate, Ru as useAnalytics, Es as visibleRows, vu as wakeDueOnce, sd as withRowFilter, Ta as workflowToRpc, yl as wrapCaptureStore, fc as wrapStoreWithMixinBehaviour };
6939
+ export { oa as API_KEYS_TABLE, vs as AccessDenied, $u as AggregateError, cu as AggregateMaintainer, Qu as AggregateNotFound, ed as AggregateRegistry, Zu as AggregateStale, Ru as AnalyticsCapabilityNotSupported, Lu as AnalyticsError, zu as AnalyticsSink, X as CONNECTIONS_TABLE, _o as CONNECTION_GRANTS_TABLE, kc as CircuitBreaker, Dc as CircuitOpen, Bo as ConnectionNotConnected, di as DEFAULT_MAX_RPC_BODY_BYTES, Ro as DEFAULT_REFRESH_SKEW_MS, Ln as DEFAULT_ROW_FILTER_RETRY, al as DORMANCY_WAKEUP_TENANT, sc as DeleteBuilder, Yn as Dispatcher, wa as EffectStore, Qo as GRANT_TTL_MS, Qt as InMemoryDataStore, Bt as IndexedMatcher, Nt as LinearScanMatcher, $e as MetricBoundaries, Hu as NOOP_ANALYTICS_PROVIDER, Vn as NO_ROW_FILTER, ec as NoRowFound, to as OUTBOX_ATTEMPTS_TABLE, co as OUTBOX_ATTEMPT_LOG_CAP, Y as OUTBOX_TABLE, tc as OptimisticLockError, _s as REBAC_ADMIN_SCOPE, zo as REFRESH_LEASE_MS, Rd as RUNTIME_NAME, vu as ReactionRateLimiter, kr as ReplicatedDataStore, In as RowFilterUnavailable, il as SCHEDULE_SUBJECT, ba as SYSTEM_SUBJECT, ac as SelectBuilder, zs as SsrfBlockedError, Sa as StoreOperationFailed, Ut as SubscriptionRegistry, Ca as TableValidationFailed, xa as TenantScopeViolation, Jl as TimelineRecorder, Dl as UndoBoundaryError, kl as UndoStack, oc as UpdateBuilder, Ks as VOLTRO_AUDIT_MIXIN_ID, qs as VOLTRO_SOFT_DELETE_MIXIN_ID, Js as VOLTRO_TENANT_MIXIN_ID, Pa as WorkflowPayloadError, ur as _connectionStreamCount, dr as _resetConnectionSubjectsForTest, yo as _voltroConnectionGrantsTable, go as _voltroConnectionsTable, lu as _voltroRebacTuplesTable, gl as _voltroScheduleClaimsTable, hl as _voltroScheduleRunsTable, _l as _voltroTracesTable, vl as _voltroUndoLogTable, bu as _voltroWakeupsTable, Xa as _voltroWorkflowEventDeliveriesTable, Ya as _voltroWorkflowEventsTable, ya as apiKeyManagementRoutes, dc as applyDefined, ou as applyDelta, jl as applyInverse, Ml as applyInverses, Gn as applyRowFilter, Kn as applyRowFilterToDescriptor, ad as applySoftDeleteScope, nd as applyTenantScope, Bl as applyUndoInvocation, Os as assertCan, Co as assertConnectionCipherConfigured, Ju as attachAnalyticsMirror, gi as awaitServerListening, so as backoffMs, ns as beginOAuthConnect, rr as bindConnectionSubject, ui as bindMutation, ni as bindStream, ti as bindSubscription, Xr as bindSubscriptionUntyped, iu as buildIvmState, Fd as buildPreview, fu as buildRebacInterceptor, mu as buildRebacReadFilter, Cr as buildSubjectKey, xi as buildTracingLayer, Ii as cachedBackend, Ds as can, qc as cancelWakeup, eu as classifyShape, Wo as clearConnectionRefreshFlights, Cs as clearResourcePolicies, i as clearRetentions, Mc as clearSystemStoreHandle, Hc as compileCron, rs as completeOAuthConnect, Gu as composeAnalytics, Wu as composeAnalyticsSinks, $o as connectionCallbackPath, So as connectionLabel, fr as connectionSubjectsSnapshot, Nu as countRunningWorkflows, An as counter, Sc as crud, Or as currentRoutingContext, yr as currentTraceContext, ga as dataStoreApiKeyStore, Qi as dataStoreIdempotencyStore, ra as dataStoreKvStore, qi as decryptField, Yu as defineAggregate, xo as defineConnection, Wa as defineEventTrigger, od as defineExecutor, io as defineOutboxHandler, hu as defineReaction, bs as defineResourcePolicy, Vc as defineSchedule, Iu as defineSubscriber, qn as deliveredRowCount, zi as deriveKey, Pd as diffChange, po as drainOutbox, el as dueWakeups, Es as effectiveRelations, $s as emptySchemaRegistry, Ir as enableGraphObservation, Ki as encryptField, Ai as envSecretsBackend, Io as exchangeAuthorizationCode, gr as externalSpanFromTraceparent, en as extractDbCause, Ht as fingerprintFor, Mo as forgetCredential, Ec as formatServerOnlyLeaks, mr as formatTraceparent, Al as forwardChangeFromCdc, _a as frameworkApiKeyStrategy, jn as gauge, ca as generateApiKeyToken, ss as getConnectionResolver, ir as getConnectionSubject, Wi as getFieldCipher, xs as getResourcePolicy, Bn as getRowFilter, Nc as getSystemStoreHandle, Xl as getTimelineRecorder, Ps as getTupleSource, $ as groupKeyOf, Mn as histogramMetric, Md as historyProvenance, Li as httpSecretsBackend, jt as inspectWorkflow, Fs as installPolicyGuardResolver, lr as interruptConnectionStreams, Tl as invertChange, Xu as isAggregateDefinition, rd as isEmptyTenantScopedRead, tn as isForeignKeyViolation, Eu as isIdleNow, si as isInfraError, Lr as isObservingGraph, id as isOrglessUserSubject, Ol as isSafeToApply, zc as isScheduleDefinition, Ga as isWorkflowEventTriggerDefinition, ru as ivmValue, jd as lastWriteProvenance, No as listConnectionStates, Ss as listResourcePolicies, w as listRetentions, uu as loadResourceTuples, pu as loadSubjectTuples, Fc as localityAwareSelector, Ed as makeActionRunner, cl as makeAdvisoryLockCoordinator, Bi as makeAesCipher, da as makeApiKeyService, Gs as makeApiKeyUsageBuffer, ha as makeApiKeyUsageFlusher, nn as makeAppAccess, ia as makeAsyncKv, ki as makeBufferingSpanProcessor, wo as makeConnectionRegistry, ls as makeConnectionResolver, us as makeConnectionsFacade, ml as makeCoordinatedScheduler, Ls as makeDataLoader, gs as makeDisconnectConnectionExecutor, Da as makeEffectStoreLayer, Za as makeEventsFacade, Vi as makeFieldCipher, cc as makeFluentStore, Du as makeIdleGate, Ba as makeLazyWorkflowFacade, ps as makeListConnectionsExecutor, vd as makeMutationRunner, wd as makeOneShotQueryRunner, oo as makeOutboxFacade, Ra as makePostCommitWorkflowFacade, Cu as makeProcessAdapter, Cd as makeQueryDescriptorProducer, Sd as makeQueryReauthorizer, Td as makeQuerySubscriber, Ou as makeRouterActivity, Ys as makeSchemaRegistry, ms as makeStartConnectionExecutor, hs as makeSubmitTokenExecutor, Cl as makeUndoCapture, ku as makeWakeGate, Mu as makeWakeProxyServer, La as makeWorkflowFacade, za as makeWorkflowFacadeWithCallerContext, Va as makeWorkflowHandlers, Ha as makeWorkflowLayers, Aa as makeWorkflowRunHandle, Jc as markWakeupFired, au as materializeIvm, fa as memoryApiKeyStore, Lc as memoryReplicationAdapter, Sr as memoryRywPositionStore, Uc as nextFiring, tl as nextWakeup, Tu as nodeProcessSupervisor, Uu as noopAnalytics, Ku as noopAnalyticsSpec, aa as noopKv, Hr as observeStore, Br as observedGraph, or as onBindConnectionSubject, ro as outboxAttemptsTable, eo as outboxTable, hr as parseTraceparent, Fa as payloadPropertyNames, br as powerOfTwoSelector, Ld as previewInRollback, Oo as projectConnectionState, rl as pruneWakeups, ws as rebacPolicyGraph, En as recordSample, G as recordSubscriptionActive, On as recordSubscriptionDelivery, zr as recordTableAccess, Ql as recordTimelineEvent, vc as redactColumns, Gl as redactRow, wr as redisRywPositionStore, Vl as redoUndoInvocation, Lo as refreshAccessToken, cr as registerConnectionStream, oe as registerRetention, Kc as registerWakeup, Zc as releaseWakeup, xr as replicaHealth, Qr as resetComputedQueryCacheWarnings, Vr as resetObservedGraph, Ni as resetSecretsBackend, qo as resolveConnection, cs as resolveConnectionForSubject, Ic as resolveCurrentRegion, rn as resolveDependentTables, ts as resolveRedirectUri, su as resolveRescan, Hn as resolveRowFilterScope, Un as resolveRowFilterScopeFor, Pi as resolveSecret, Fi as resolveSecretSync, Ri as resolveSecretsBackend, Hl as resolveTimelineMode, se as retentionTtlMsFromEnv, ql as reverseEventOverRows, As as revokedIds, Pc as runAsSystem, Pu as runOrchestratorTick, sd as runProvidedEffect, yu as runReaction, Fu as runSingleNodeOrchestrator, Su as runWakeLoop, _d as runWithDeadlockRetry, Rr as runWithObservedProcedure, Dr as runWithRoutingContext, vr as runWithTraceContext, es as sanitizeRedirectTo, pl as scheduleCoordinated, Cc as schemaPropertyNames, Tc as serverOnlyLeaks, os as setConnectionResolver, Ui as setFieldCipher, zn as setRowFilter, Mi as setSecretsBackend, jc as setSystemStoreHandle, Zl as setTimelineRecorderForTest, Ns as setTupleSource, sa as sha256Hex, ol as singleCoordinator, Pn as snapshotMetrics, Fn as snapshotMetricsSync, Ws as ssrfGuardHttpClientLayer, Us as ssrfReason, fi as startRpcServer, ul as startScheduler, Ao as storeCredential, is as sweepExpiredGrants, de as sweepRetention, El as synthesizeInverse, Rs as tracingHttpClientLayer, Ua as triggerWorkflow, Xc as tryClaimWakeup, ar as unbindConnectionSubject, yl as undoCaptureEnabled, Rl as undoLogExecutor, td as useAggregate, Vu as useAnalytics, ks as visibleRows, xu as wakeDueOnce, ud as withRowFilter, Oa as workflowToRpc, Sl as wrapCaptureStore, hc as wrapStoreWithMixinBehaviour };