@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/CHANGELOG.md +93 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.js +696 -679
- package/package.json +6 -6
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) => (
|
|
1886
|
+
onFailure: (e) => (ai(`subscription.${i}`, n.traceId, e), {
|
|
1887
1887
|
ok: !1,
|
|
1888
|
-
error:
|
|
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 =
|
|
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) => (
|
|
1920
|
+
onFailure: (e) => (ai(`subscription.${r}`, n.traceId, e), {
|
|
1917
1921
|
ok: !1,
|
|
1918
|
-
error:
|
|
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
|
-
})),
|
|
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) => (
|
|
1950
|
+
onFailure: (e) => (ai(`subscription.${n}`, u.traceId, e), {
|
|
1947
1951
|
ok: !1,
|
|
1948
|
-
error:
|
|
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
|
|
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" } }))),
|
|
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" } }))),
|
|
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 ?
|
|
1990
|
-
},
|
|
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
|
-
]),
|
|
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
|
-
}),
|
|
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),
|
|
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
|
-
},
|
|
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(() =>
|
|
2023
|
-
}).pipe(P.withSpan(n, { attributes: { "framework.kind": "mutation" } })),
|
|
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 &&
|
|
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(() =>
|
|
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
|
|
2233
|
+
return pi.add(T), hi(), {
|
|
2230
2234
|
server: r,
|
|
2231
2235
|
shutdown: async () => {
|
|
2232
|
-
|
|
2236
|
+
pi.delete(T), await P.runPromise(Ze.interrupt(T)).then(() => void 0, () => void 0);
|
|
2233
2237
|
}
|
|
2234
2238
|
};
|
|
2235
|
-
},
|
|
2236
|
-
if (
|
|
2237
|
-
|
|
2239
|
+
}, pi = /* @__PURE__ */ new Set(), mi = !1, hi = () => {
|
|
2240
|
+
if (mi) return;
|
|
2241
|
+
mi = !0;
|
|
2238
2242
|
let e = () => {
|
|
2239
|
-
let e = [...
|
|
2240
|
-
|
|
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
|
-
},
|
|
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
|
-
}),
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
2304
|
-
let t = e.mode ??
|
|
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
|
|
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: _ } =
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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 >=
|
|
2350
|
+
if (n >= Ti) break;
|
|
2347
2351
|
let i = e[r];
|
|
2348
|
-
if (typeof i == "string") t[r] = i.length >
|
|
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 >
|
|
2361
|
+
t[r] = e.length > wi ? `${e.slice(0, wi)}…` : e;
|
|
2358
2362
|
}
|
|
2359
2363
|
n++;
|
|
2360
2364
|
}
|
|
2361
2365
|
return t;
|
|
2362
|
-
},
|
|
2366
|
+
}, Di = {
|
|
2363
2367
|
[bt.UNSET]: "unset",
|
|
2364
2368
|
[bt.OK]: "ok",
|
|
2365
2369
|
[bt.ERROR]: "error"
|
|
2366
|
-
},
|
|
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:
|
|
2370
|
-
...e.attributes ? { 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:
|
|
2378
|
-
attributes:
|
|
2379
|
-
startMs:
|
|
2380
|
-
endMs:
|
|
2381
|
-
durationMs:
|
|
2382
|
-
status:
|
|
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
|
-
},
|
|
2390
|
+
}, ki = (e) => ({
|
|
2387
2391
|
onStart: () => {},
|
|
2388
2392
|
onEnd: (t) => {
|
|
2389
2393
|
try {
|
|
2390
|
-
e(
|
|
2394
|
+
e(Oi(t));
|
|
2391
2395
|
} catch {}
|
|
2392
2396
|
},
|
|
2393
2397
|
forceFlush: () => Promise.resolve(),
|
|
2394
2398
|
shutdown: () => Promise.resolve()
|
|
2395
|
-
}),
|
|
2396
|
-
|
|
2397
|
-
},
|
|
2398
|
-
|
|
2399
|
-
},
|
|
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
|
-
},
|
|
2414
|
+
}, Li = (e) => {
|
|
2411
2415
|
let t = {
|
|
2412
2416
|
accept: "application/json",
|
|
2413
2417
|
...e.headers ?? {}
|
|
2414
2418
|
};
|
|
2415
|
-
if (e.perKey) return
|
|
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
|
-
},
|
|
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
|
-
},
|
|
2441
|
-
|
|
2442
|
-
},
|
|
2443
|
-
let t =
|
|
2444
|
-
if (!t) throw Error(`encryptField: ${
|
|
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
|
-
},
|
|
2450
|
+
}, qi = (e) => {
|
|
2447
2451
|
if (!x(e)) return e;
|
|
2448
|
-
let t =
|
|
2449
|
-
if (!t) throw Error(`decryptField: ${
|
|
2452
|
+
let t = Wi();
|
|
2453
|
+
if (!t) throw Error(`decryptField: ${Gi}`);
|
|
2450
2454
|
return t.decrypt(e);
|
|
2451
|
-
},
|
|
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
|
-
},
|
|
2459
|
+
}, Xi = (e) => ({
|
|
2456
2460
|
scope: e.scope,
|
|
2457
2461
|
key: e.key,
|
|
2458
2462
|
status: e.status === "completed" ? "completed" : "in_flight",
|
|
2459
|
-
response:
|
|
2463
|
+
response: Yi(e.response),
|
|
2460
2464
|
createdAt: Ue(e.createdAt)
|
|
2461
|
-
}),
|
|
2462
|
-
table:
|
|
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,
|
|
2472
|
+
}))[0] ?? null, Qi = (e) => ({
|
|
2469
2473
|
get: async (t, n) => {
|
|
2470
|
-
let r = await
|
|
2471
|
-
return r ?
|
|
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
|
-
},
|
|
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
|
|
2488
|
-
await e.delete(
|
|
2491
|
+
if (r - Ue(o.createdAt) < i) return Xi(o);
|
|
2492
|
+
await e.delete(Ji, o.id);
|
|
2489
2493
|
}
|
|
2490
|
-
let a = await
|
|
2491
|
-
return 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
|
|
2501
|
-
a && await e.update(
|
|
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
|
|
2508
|
-
r && await e.delete(
|
|
2511
|
+
let r = await Zi(e, t, n);
|
|
2512
|
+
r && await e.delete(Ji, r.id);
|
|
2509
2513
|
}
|
|
2510
|
-
}), J = "_voltro_kv",
|
|
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
|
-
},
|
|
2517
|
-
let n =
|
|
2520
|
+
}, ea = (e, t) => {
|
|
2521
|
+
let n = $i(e.expiresAt);
|
|
2518
2522
|
return n !== null && n <= t;
|
|
2519
|
-
},
|
|
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,
|
|
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
|
|
2538
|
-
return n === null ? tt.none() :
|
|
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
|
|
2565
|
+
let n = await na(e, t);
|
|
2562
2566
|
if (n === null) return !1;
|
|
2563
|
-
let r = !
|
|
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
|
|
2568
|
-
return n === null ? !1 :
|
|
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)
|
|
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
|
-
},
|
|
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(
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
|
|
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 =
|
|
2632
|
+
let r = ca(n), i = f({
|
|
2626
2633
|
kind: "typeid",
|
|
2627
2634
|
prefix: "apikey"
|
|
2628
|
-
},
|
|
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:
|
|
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 || !
|
|
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(
|
|
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(
|
|
2688
|
+
list: async (t) => (await e.listByTenant(t)).map(la)
|
|
2679
2689
|
};
|
|
2680
|
-
},
|
|
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
|
-
},
|
|
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:
|
|
2705
|
-
expiresAt:
|
|
2706
|
-
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:
|
|
2710
|
-
|
|
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
|
-
},
|
|
2729
|
+
}, ga = (e) => {
|
|
2719
2730
|
let t = async (t) => await e.query({
|
|
2720
|
-
table:
|
|
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(
|
|
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] ?
|
|
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] ?
|
|
2757
|
+
return n[0] ? ma(n[0]) : null;
|
|
2747
2758
|
},
|
|
2748
|
-
listByTenant: async (e) => (await t(e === null ? void 0 : u("tenantId", e))).map(
|
|
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(
|
|
2761
|
+
await e.update(oa, t, n(r));
|
|
2751
2762
|
}
|
|
2752
2763
|
};
|
|
2753
|
-
},
|
|
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
|
-
}),
|
|
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
|
-
},
|
|
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 =
|
|
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(
|
|
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,
|
|
2870
|
+
handler: async (t, n) => ({ ok: await e.revoke(t.body.id, va(n).tenantId) })
|
|
2854
2871
|
})
|
|
2855
2872
|
];
|
|
2856
|
-
},
|
|
2873
|
+
}, ba = {
|
|
2857
2874
|
type: "anonymous",
|
|
2858
2875
|
id: null,
|
|
2859
2876
|
tenantId: null
|
|
2860
|
-
},
|
|
2877
|
+
}, xa = class extends R.TaggedError()("TenantScopeViolation", {
|
|
2861
2878
|
table: R.String,
|
|
2862
2879
|
reason: R.String
|
|
2863
|
-
}) {},
|
|
2880
|
+
}) {}, Sa = class extends R.TaggedError()("StoreOperationFailed", {
|
|
2864
2881
|
operation: R.String,
|
|
2865
2882
|
table: R.String,
|
|
2866
2883
|
cause: R.String
|
|
2867
|
-
}) {},
|
|
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
|
-
}) {},
|
|
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
|
-
}),
|
|
2895
|
+
}), Ea = (e, t, n) => P.tryPromise({
|
|
2879
2896
|
try: n,
|
|
2880
|
-
catch:
|
|
2881
|
-
}),
|
|
2882
|
-
query: ((t) =>
|
|
2883
|
-
insert: (t, n) =>
|
|
2884
|
-
update: (t, n, r) =>
|
|
2885
|
-
delete: (t, n) =>
|
|
2886
|
-
hardDelete: (t, n) =>
|
|
2887
|
-
}),
|
|
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
|
-
}),
|
|
2908
|
+
}), ka = (e, t) => ({
|
|
2892
2909
|
id: t,
|
|
2893
2910
|
workflowName: e,
|
|
2894
2911
|
executionId: t,
|
|
2895
2912
|
status: "running"
|
|
2896
|
-
}),
|
|
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
|
-
},
|
|
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:
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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 =
|
|
2972
|
-
throw new
|
|
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
|
|
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)),
|
|
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
|
|
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
|
-
},
|
|
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)),
|
|
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)),
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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
|
-
},
|
|
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) =>
|
|
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
|
-
},
|
|
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 ??
|
|
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,
|
|
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
|
-
}))),
|
|
3143
|
+
}))), Ua = (e) => ({
|
|
3127
3144
|
_tag: "workflowEventTrigger",
|
|
3128
3145
|
...e
|
|
3129
|
-
}),
|
|
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
|
-
},
|
|
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(),
|
|
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(),
|
|
3159
|
-
let t = e.makeId ??
|
|
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 =
|
|
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
|
-
},
|
|
3320
|
+
}, Qa = M({ scope: "voltro:outbox" }), Y = "_voltro_outbox", $a = {
|
|
3304
3321
|
kind: "typeid",
|
|
3305
3322
|
prefix: "obx"
|
|
3306
|
-
},
|
|
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
|
-
}),
|
|
3341
|
+
}), to = "_voltro_outbox_attempts", no = {
|
|
3325
3342
|
kind: "typeid",
|
|
3326
3343
|
prefix: "obxa"
|
|
3327
|
-
},
|
|
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"]),
|
|
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
|
-
},
|
|
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(
|
|
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 ??
|
|
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
|
-
}),
|
|
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:
|
|
3446
|
+
preview: lo(n, 8192)
|
|
3430
3447
|
} : t;
|
|
3431
|
-
},
|
|
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(
|
|
3435
|
-
id: f(
|
|
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 :
|
|
3447
|
-
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
|
-
|
|
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:
|
|
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(
|
|
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
|
-
|
|
3490
|
+
Qa.warn("outbox: attempt-log trim failed; the log may exceed its cap", { outboxId: i }, e);
|
|
3474
3491
|
}
|
|
3475
|
-
},
|
|
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 ??
|
|
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
|
|
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
|
|
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() +
|
|
3549
|
+
nextAttemptAt: new Date(n.getTime() + so(u)),
|
|
3533
3550
|
resendRequestedBy: null,
|
|
3534
3551
|
resendReason: null
|
|
3535
|
-
}), l ? (o++,
|
|
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++,
|
|
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:
|
|
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
|
-
},
|
|
3572
|
+
}, mo = M({ scope: "voltro:connections" }), X = "_voltro_connections", ho = {
|
|
3556
3573
|
kind: "typeid",
|
|
3557
3574
|
prefix: "conn"
|
|
3558
|
-
},
|
|
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(),
|
|
3598
|
+
}).unique("bySubject", ["connectionId", "subjectId"]).index(["subjectId"]).reactive(), _o = "_voltro_connection_grants", vo = {
|
|
3582
3599
|
kind: "typeid",
|
|
3583
3600
|
prefix: "cgrant"
|
|
3584
|
-
},
|
|
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"]),
|
|
3595
|
-
if (!
|
|
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
|
-
},
|
|
3606
|
-
if (e.length !== 0 &&
|
|
3607
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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:
|
|
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:
|
|
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:
|
|
3640
|
-
expiresAt:
|
|
3656
|
+
scopes: Do(t.scopes),
|
|
3657
|
+
expiresAt: Eo(t.expiresAt),
|
|
3641
3658
|
lastError: t.lastError ?? null,
|
|
3642
|
-
connectedAt:
|
|
3643
|
-
},
|
|
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],
|
|
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(
|
|
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:
|
|
3659
|
-
refreshToken: e.tokens.refreshToken === void 0 ? null :
|
|
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
|
|
3671
|
-
},
|
|
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
|
-
}),
|
|
3688
|
-
let r = await
|
|
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
|
-
},
|
|
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) =>
|
|
3700
|
-
},
|
|
3701
|
-
let r = e.fetchImpl ??
|
|
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
|
-
},
|
|
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),
|
|
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),
|
|
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
|
-
},
|
|
3777
|
+
}, Vo = (e) => new Promise((t) => {
|
|
3761
3778
|
setTimeout(t, e);
|
|
3762
|
-
}),
|
|
3763
|
-
|
|
3764
|
-
},
|
|
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:
|
|
3768
|
-
expiresAt:
|
|
3769
|
-
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
|
-
}),
|
|
3773
|
-
let r =
|
|
3789
|
+
}), Ko = (e, t, n) => {
|
|
3790
|
+
let r = To(e.expiresAt);
|
|
3774
3791
|
return r !== null && r.getTime() - n < t;
|
|
3775
|
-
},
|
|
3776
|
-
let t = e.now ?? Date.now, { store: n, definition: r, subjectId: i } = e, a = await
|
|
3777
|
-
if (a === void 0) throw new
|
|
3778
|
-
if (r.kind === "pat" || !
|
|
3779
|
-
let 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 =
|
|
3798
|
+
let c = Jo({
|
|
3782
3799
|
...e,
|
|
3783
3800
|
now: t,
|
|
3784
3801
|
row: a
|
|
3785
3802
|
}).finally(() => {
|
|
3786
|
-
|
|
3803
|
+
Ho.delete(o);
|
|
3787
3804
|
});
|
|
3788
|
-
return
|
|
3789
|
-
},
|
|
3790
|
-
let { store: n, subjectId: r, now: i } = e, a = e.definition, o = e.sleep ??
|
|
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
|
|
3795
|
-
if (e === void 0) throw new
|
|
3796
|
-
if (!
|
|
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
|
|
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:
|
|
3847
|
+
accessToken: Ki(""),
|
|
3831
3848
|
refreshToken: null,
|
|
3832
3849
|
expiresAt: null
|
|
3833
3850
|
}
|
|
3834
|
-
}),
|
|
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:
|
|
3843
|
-
...d.refreshToken === void 0 ? {} : { 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
|
|
3867
|
+
return Go(a, await n.update(X, c, f) ?? {
|
|
3851
3868
|
...e.row,
|
|
3852
3869
|
...f
|
|
3853
3870
|
});
|
|
3854
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
3878
|
+
}, Zo = async (e) => {
|
|
3862
3879
|
let t = await globalThis.crypto.subtle.digest("SHA-256", new TextEncoder().encode(e));
|
|
3863
|
-
return
|
|
3864
|
-
},
|
|
3865
|
-
let t = (e.now ?? (() => /* @__PURE__ */ new Date()))(), { definition: n } = e, r =
|
|
3866
|
-
await e.store.insert(
|
|
3867
|
-
id: f(
|
|
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 :
|
|
3873
|
-
redirectTo:
|
|
3889
|
+
codeVerifier: i === null ? null : Ki(i),
|
|
3890
|
+
redirectTo: es(e.redirectTo),
|
|
3874
3891
|
createdAt: t,
|
|
3875
|
-
expiresAt: new Date(t.getTime() +
|
|
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
|
|
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
|
-
},
|
|
3908
|
+
}, rs = async (e) => {
|
|
3892
3909
|
let t = (e.now ?? (() => /* @__PURE__ */ new Date()))(), n = (await e.store.query({
|
|
3893
|
-
table:
|
|
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(
|
|
3906
|
-
let r = String(n.connectionId), i =
|
|
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 :
|
|
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:
|
|
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
|
-
|
|
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
|
|
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:
|
|
3955
|
+
redirectTo: es(String(n.redirectTo ?? "/"))
|
|
3939
3956
|
};
|
|
3940
|
-
},
|
|
3957
|
+
}, is = async (e, t = /* @__PURE__ */ new Date()) => {
|
|
3941
3958
|
let n = await e.query({
|
|
3942
|
-
table:
|
|
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
|
-
},
|
|
3952
|
-
|
|
3953
|
-
},
|
|
3954
|
-
let n =
|
|
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
|
-
},
|
|
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
|
|
3961
|
-
return
|
|
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
|
-
},
|
|
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
|
|
3971
|
-
return
|
|
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
|
|
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
|
-
})) :
|
|
4015
|
+
})) : No(e.store, e.registry, t)
|
|
3999
4016
|
};
|
|
4000
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
})) :
|
|
4022
|
-
},
|
|
4023
|
-
let r =
|
|
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
|
|
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
|
-
},
|
|
4038
|
-
let r =
|
|
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
|
|
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
|
-
},
|
|
4072
|
-
|
|
4073
|
-
let r =
|
|
4074
|
-
return { ok: await
|
|
4075
|
-
},
|
|
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
|
-
}) {},
|
|
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 (
|
|
4083
|
-
return
|
|
4084
|
-
},
|
|
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
|
-
}),
|
|
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
|
-
},
|
|
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 =
|
|
4128
|
+
let a = Es(e, n, r.tuples, r.policy);
|
|
4112
4129
|
return i.some((e) => a.has(e));
|
|
4113
|
-
},
|
|
4114
|
-
if (!
|
|
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
|
-
},
|
|
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)),
|
|
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
|
-
},
|
|
4127
|
-
|
|
4128
|
-
},
|
|
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 =
|
|
4131
|
-
if (t === void 0) return
|
|
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 =
|
|
4136
|
-
if (n === void 0) return
|
|
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) => (
|
|
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
|
|
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
|
-
},
|
|
4181
|
+
}, Is = (e) => {
|
|
4165
4182
|
Promise.resolve().then(e);
|
|
4166
|
-
},
|
|
4167
|
-
let t = e.schedule ??
|
|
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
|
-
},
|
|
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))))))),
|
|
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
|
-
},
|
|
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
|
-
}),
|
|
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 (
|
|
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" :
|
|
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 ?
|
|
4264
|
+
return e ? Us(`${n.protocol}//${e[1]}`, t) : Vs(r) ? `blocked private/reserved address ${r}` : null;
|
|
4248
4265
|
}
|
|
4249
4266
|
return null;
|
|
4250
|
-
},
|
|
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 =
|
|
4253
|
-
return r === null ? t : P.die(new
|
|
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
|
-
})),
|
|
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
|
-
},
|
|
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 ??
|
|
4330
|
-
computedFields: (e) => t.get(e)?.computedFields ??
|
|
4331
|
-
generatedColumns: (e) => t.get(e)?.generatedColumns ??
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
4350
|
-
if (e.length === 1 &&
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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(
|
|
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
|
|
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
|
|
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
|
-
},
|
|
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 =
|
|
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
|
|
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
|
-
},
|
|
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 =
|
|
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
|
-
},
|
|
4531
|
-
select: (n) => new
|
|
4532
|
-
updateWhere: (n) => new
|
|
4533
|
-
deleteWhere: (n) => new
|
|
4534
|
-
}),
|
|
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
|
-
},
|
|
4539
|
-
throw new
|
|
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:
|
|
4558
|
+
reason: fc
|
|
4542
4559
|
});
|
|
4543
|
-
},
|
|
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
|
-
},
|
|
4548
|
-
let r = Hr(e), i =
|
|
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[
|
|
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[
|
|
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 &&
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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,
|
|
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:
|
|
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 =
|
|
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 =
|
|
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
|
|
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
|
|
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
|
-
...
|
|
4770
|
+
...uc(e),
|
|
4754
4771
|
take: 1
|
|
4755
4772
|
}))[0] ?? null),
|
|
4756
4773
|
maybeOne: (async (e) => (await D({
|
|
4757
|
-
...
|
|
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:
|
|
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(
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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(
|
|
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 =
|
|
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 } =
|
|
4915
|
+
let { limit: e, offset: n } = xc(i, t.maxPageSize);
|
|
4899
4916
|
a = a.limit(e).offset(n);
|
|
4900
4917
|
}
|
|
4901
|
-
return
|
|
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 :
|
|
4924
|
+
return a === null ? null : gc(a, _c(e, t.redact));
|
|
4908
4925
|
},
|
|
4909
|
-
create: (e, t = {}) => async (n, r) =>
|
|
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 :
|
|
4929
|
+
return o === null ? null : gc(o, _c(e, t.redact));
|
|
4913
4930
|
},
|
|
4914
|
-
count: (e, t = {}) => async (n, r) =>
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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 =
|
|
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
|
-
},
|
|
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
|
-
},
|
|
5007
|
+
}, Dc = class extends R.TaggedError()("CircuitOpen", {
|
|
4991
5008
|
name: R.String,
|
|
4992
5009
|
retryAfterMs: R.Number
|
|
4993
|
-
}) {},
|
|
5010
|
+
}) {}, Oc = {
|
|
4994
5011
|
tag: "closed",
|
|
4995
5012
|
failureCount: 0,
|
|
4996
5013
|
halfOpenSuccesses: 0,
|
|
4997
5014
|
openedAt: 0
|
|
4998
|
-
},
|
|
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(
|
|
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 ?
|
|
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,
|
|
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
|
|
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,
|
|
5073
|
+
value: L.set(a, Oc),
|
|
5057
5074
|
enumerable: !0
|
|
5058
5075
|
}), u;
|
|
5059
|
-
}) },
|
|
5060
|
-
|
|
5061
|
-
},
|
|
5062
|
-
|
|
5063
|
-
},
|
|
5064
|
-
let n = t.scopes === void 0 ? He(t.id ?? "system") : He(t.id ?? "system", t.scopes), r = t.store ??
|
|
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:
|
|
5085
|
+
store: hc(r, {
|
|
5069
5086
|
subject: n,
|
|
5070
5087
|
schemaRegistry: i,
|
|
5071
5088
|
...a === void 0 ? {} : { dialect: a }
|
|
5072
5089
|
})
|
|
5073
5090
|
});
|
|
5074
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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 ??
|
|
5149
|
-
[
|
|
5165
|
+
maxRuntimeMs: e.maxRuntimeMs ?? Bc,
|
|
5166
|
+
[Rc]: !0
|
|
5150
5167
|
};
|
|
5151
|
-
},
|
|
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
|
-
}),
|
|
5174
|
+
}), Kc = async (e, t) => {
|
|
5158
5175
|
await e.upsert(Z, {
|
|
5159
|
-
id:
|
|
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
|
-
},
|
|
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
|
-
}] }),
|
|
5178
|
-
await e.updateMany(Z, { status: "pending" }, { where:
|
|
5179
|
-
},
|
|
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
|
-
},
|
|
5200
|
+
}, $c = async (e, t) => {
|
|
5184
5201
|
let n = {
|
|
5185
5202
|
table: Z,
|
|
5186
|
-
predicate:
|
|
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(
|
|
5196
|
-
},
|
|
5197
|
-
let r = await
|
|
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
|
-
},
|
|
5216
|
+
}, tl = async (e) => (await $c(e, 1))[0] ?? null, nl = {
|
|
5200
5217
|
column: "status",
|
|
5201
5218
|
op: "eq",
|
|
5202
5219
|
value: "fired"
|
|
5203
|
-
},
|
|
5220
|
+
}, rl = async (e, t = {}) => {
|
|
5204
5221
|
let n = {
|
|
5205
5222
|
table: Z,
|
|
5206
|
-
predicate:
|
|
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
|
-
},
|
|
5234
|
+
}, il = ba, al = "default", ol = {
|
|
5218
5235
|
kind: "single",
|
|
5219
5236
|
tryClaim: async () => !0
|
|
5220
|
-
},
|
|
5237
|
+
}, sl = "_voltro_schedule_claims", cl = (e, t, n) => {
|
|
5221
5238
|
let r = async (t) => (await e.query({
|
|
5222
|
-
table:
|
|
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(
|
|
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
|
-
},
|
|
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,
|
|
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(
|
|
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(
|
|
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:
|
|
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:
|
|
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" :
|
|
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(
|
|
5423
|
-
await
|
|
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 =
|
|
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:
|
|
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 =
|
|
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),
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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"]),
|
|
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"]),
|
|
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"]),
|
|
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(),
|
|
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
|
-
},
|
|
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,
|
|
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
|
|
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 =
|
|
5646
|
-
return
|
|
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 =
|
|
5656
|
-
return !
|
|
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
|
-
} }),
|
|
5682
|
+
} }), Cl = (e) => {
|
|
5666
5683
|
let t = [];
|
|
5667
5684
|
return {
|
|
5668
|
-
tx:
|
|
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
|
-
},
|
|
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
|
-
},
|
|
5691
|
-
let t =
|
|
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
|
-
},
|
|
5716
|
-
if (e.crossesAction) throw new
|
|
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 =
|
|
5736
|
+
let r = Tl(e.changes[n]);
|
|
5720
5737
|
r !== null && t.push(r);
|
|
5721
5738
|
}
|
|
5722
5739
|
return t;
|
|
5723
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
5808
|
-
for (let n of t) await
|
|
5809
|
-
},
|
|
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,
|
|
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
|
-
},
|
|
5821
|
-
let n =
|
|
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:
|
|
5831
|
-
crossesAction:
|
|
5847
|
+
undone: Pl(e.undone),
|
|
5848
|
+
crossesAction: Pl(e.crossesAction),
|
|
5832
5849
|
createdAt: String(e.createdAt ?? "")
|
|
5833
5850
|
}));
|
|
5834
|
-
},
|
|
5835
|
-
let n = await
|
|
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) !==
|
|
5854
|
+
if ((n.subjectId ?? null) !== Nl(t)) throw new je({ invocationId: e.invocationId });
|
|
5838
5855
|
return n;
|
|
5839
|
-
},
|
|
5840
|
-
let n = await
|
|
5841
|
-
if (
|
|
5842
|
-
if (
|
|
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 =
|
|
5863
|
+
let r = Il(n.changes);
|
|
5847
5864
|
for (let n of r) {
|
|
5848
|
-
let r =
|
|
5849
|
-
if (r !== void 0 && !
|
|
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:
|
|
5873
|
+
subject: Nl(t),
|
|
5857
5874
|
changes: r,
|
|
5858
5875
|
crossesAction: !1
|
|
5859
5876
|
};
|
|
5860
|
-
return await
|
|
5861
|
-
},
|
|
5862
|
-
let n = await
|
|
5863
|
-
if (!
|
|
5864
|
-
for (let e of
|
|
5865
|
-
let n =
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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] =
|
|
5892
|
+
for (let [n, r] of Object.entries(e)) t[n] = Ul.test(n) ? Wl : r;
|
|
5876
5893
|
return t;
|
|
5877
|
-
},
|
|
5894
|
+
}, Kl = (e) => {
|
|
5878
5895
|
let t = e?.id;
|
|
5879
5896
|
return typeof t == "string" ? t : void 0;
|
|
5880
|
-
},
|
|
5897
|
+
}, ql = (e, t) => {
|
|
5881
5898
|
if (t.op === "insert") {
|
|
5882
|
-
let n =
|
|
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 =
|
|
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
|
-
},
|
|
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:
|
|
5912
|
-
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 =
|
|
5942
|
+
for (let e of r) i = ql(i, e);
|
|
5926
5943
|
return i;
|
|
5927
5944
|
}
|
|
5928
|
-
},
|
|
5929
|
-
|
|
5930
|
-
},
|
|
5931
|
-
let t =
|
|
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
|
-
},
|
|
5952
|
+
}, $l = /* @__PURE__ */ new Set([
|
|
5936
5953
|
"count",
|
|
5937
5954
|
"sum",
|
|
5938
5955
|
"avg",
|
|
5939
5956
|
"min",
|
|
5940
5957
|
"max"
|
|
5941
|
-
]),
|
|
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
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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 =
|
|
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
|
-
},
|
|
6021
|
+
}, au = (e, t) => [...t.entries()].map(([t, n]) => ({
|
|
6005
6022
|
groupKey: t,
|
|
6006
|
-
value:
|
|
6007
|
-
})),
|
|
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 =
|
|
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 =
|
|
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
|
-
},
|
|
6062
|
+
}, su = (e, t, n, r) => {
|
|
6046
6063
|
if (n.length === 0) return t;
|
|
6047
|
-
let i = new Set(n), a =
|
|
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
|
-
},
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
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
|
-
},
|
|
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(),
|
|
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
|
-
})),
|
|
6143
|
+
})), du = (e) => ({
|
|
6127
6144
|
id: e.id,
|
|
6128
6145
|
tenantId: e.tenantId,
|
|
6129
6146
|
...e.scopes === void 0 ? {} : { scopes: e.scopes }
|
|
6130
|
-
}),
|
|
6131
|
-
let n = t.getPolicy ??
|
|
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
|
|
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 =
|
|
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) =>
|
|
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
|
-
},
|
|
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
|
-
})),
|
|
6166
|
-
let t = e.getPolicy ??
|
|
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 =
|
|
6171
|
-
return
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
6191
|
-
if (t.table !== e.watch.table || !
|
|
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 =
|
|
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
|
-
},
|
|
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"]),
|
|
6213
|
-
let t = e.now?.() ?? /* @__PURE__ */ new Date(), n = await
|
|
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
|
|
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
|
|
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
|
-
},
|
|
6244
|
+
}, Su = (e, t = 1e3) => {
|
|
6228
6245
|
let n = !1, r, i = async () => {
|
|
6229
6246
|
if (!n) {
|
|
6230
6247
|
try {
|
|
6231
|
-
await
|
|
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
|
-
},
|
|
6258
|
+
}, Cu = (e) => ({ wake: async () => {
|
|
6242
6259
|
await e.start();
|
|
6243
|
-
} }),
|
|
6244
|
-
let t = e.fetchImpl ?? fetch, n = e.now ?? Date.now, r = e.sleep ??
|
|
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
|
-
},
|
|
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
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
6359
|
-
let t =
|
|
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(() =>
|
|
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(() =>
|
|
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
|
-
},
|
|
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
|
-
},
|
|
6390
|
-
let t =
|
|
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
|
|
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
|
-
},
|
|
6408
|
-
let t =
|
|
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 =
|
|
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
|
|
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
|
|
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
|
-
},
|
|
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
|
-
}) {},
|
|
6475
|
+
}) {}, Ru = class extends R.TaggedError()("AnalyticsCapabilityNotSupported", {
|
|
6459
6476
|
provider: R.String,
|
|
6460
6477
|
capability: R.String
|
|
6461
|
-
}) {},
|
|
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
|
-
}),
|
|
6481
|
-
let e = yield*
|
|
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 :
|
|
6486
|
-
}),
|
|
6487
|
-
let e = (e) => P.fail(new
|
|
6488
|
-
provider:
|
|
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:
|
|
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
|
-
},
|
|
6508
|
-
if (e.length === 0) return
|
|
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
|
|
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
|
-
},
|
|
6565
|
+
}, Gu = (e) => {
|
|
6549
6566
|
let t = e.filter((e) => e.dispose !== void 0);
|
|
6550
6567
|
return {
|
|
6551
6568
|
kind: "compose",
|
|
6552
|
-
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
|
-
},
|
|
6580
|
+
}, Ku = {
|
|
6564
6581
|
kind: "noop",
|
|
6565
|
-
build: () =>
|
|
6566
|
-
},
|
|
6582
|
+
build: () => Uu()
|
|
6583
|
+
}, qu = {
|
|
6567
6584
|
tables: [],
|
|
6568
6585
|
detach: () => {}
|
|
6569
|
-
},
|
|
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
|
|
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
|
-
},
|
|
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 =
|
|
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
|
-
},
|
|
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
|
-
}) {},
|
|
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
|
-
}) {},
|
|
6630
|
-
return (yield*
|
|
6631
|
-
}),
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
}),
|
|
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
|
-
},
|
|
6669
|
+
}, ud = async (e) => {
|
|
6653
6670
|
if (Bn() === void 0) return e;
|
|
6654
|
-
let t = await
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
]),
|
|
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" &&
|
|
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
|
-
},
|
|
6704
|
-
let n = t?.delay ?? ((e) =>
|
|
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 >=
|
|
6725
|
+
if (t >= hd || !md(e)) throw e;
|
|
6709
6726
|
await n(t);
|
|
6710
6727
|
}
|
|
6711
|
-
},
|
|
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
|
|
6720
|
-
let i = await
|
|
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(
|
|
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
|
-
}),
|
|
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
|
-
},
|
|
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
|
-
},
|
|
6740
|
-
let i = e.buildContext(r), a =
|
|
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
|
|
6744
|
-
return P.isEffect(s) ? P.runPromise(e.provideEffect(
|
|
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 =
|
|
6747
|
-
return
|
|
6763
|
+
let i = yd(n);
|
|
6764
|
+
return bd(i) ? e.finalize(i, r) : {
|
|
6748
6765
|
__voltroComputed: !0,
|
|
6749
6766
|
value: i,
|
|
6750
|
-
dependentTables:
|
|
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(
|
|
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
|
-
},
|
|
6779
|
-
let i = await
|
|
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
|
-
},
|
|
6798
|
+
}, Td = (e) => (t, n, r, i) => {
|
|
6782
6799
|
let a = !1, o;
|
|
6783
6800
|
return (async () => {
|
|
6784
6801
|
try {
|
|
6785
|
-
let s = await
|
|
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
|
-
},
|
|
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
|
|
6805
|
-
let i = e.buildContext(await
|
|
6806
|
-
return P.isEffect(a) ? e.runEffect(
|
|
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
|
-
}),
|
|
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
|
-
],
|
|
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 (!
|
|
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 =
|
|
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
|
-
},
|
|
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:
|
|
6852
|
-
at:
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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:
|
|
6909
|
+
id: Nd(e),
|
|
6893
6910
|
fields: t
|
|
6894
6911
|
};
|
|
6895
|
-
},
|
|
6896
|
-
let t = e.map(
|
|
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
|
-
},
|
|
6922
|
+
}, Id = class extends Error {
|
|
6906
6923
|
constructor() {
|
|
6907
6924
|
super("voltro:preview-rollback"), this.name = "PreviewRollback";
|
|
6908
6925
|
}
|
|
6909
|
-
},
|
|
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
|
|
6930
|
+
throw n = await t(e), r = !0, new Id();
|
|
6914
6931
|
});
|
|
6915
6932
|
} catch (e) {
|
|
6916
|
-
if (!(e instanceof
|
|
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
|
-
},
|
|
6937
|
+
}, Rd = "framework-runtime";
|
|
6921
6938
|
//#endregion
|
|
6922
|
-
export {
|
|
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 };
|