@voltro/runtime 0.19.0 → 0.20.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 +87 -0
- package/dist/index.js +644 -639
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -2431,17 +2431,22 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
2431
2431
|
}, Si = (e, t) => {
|
|
2432
2432
|
let n = xi(e);
|
|
2433
2433
|
return n === void 0 ? t() : Br(n, t);
|
|
2434
|
-
}, Ci = (e, t
|
|
2434
|
+
}, Ci = (e, t) => F.async((n) => {
|
|
2435
|
+
let r = ue(t, () => F.runFork(e));
|
|
2436
|
+
return r.addObserver((e) => {
|
|
2437
|
+
n(e);
|
|
2438
|
+
}), F.asVoid(et.interrupt(r));
|
|
2439
|
+
}), wi = (e, t, n) => ({
|
|
2435
2440
|
subject: e,
|
|
2436
2441
|
traceId: t?.traceId ?? xe(),
|
|
2437
2442
|
...t?.spanId === void 0 ? {} : { spanId: t.spanId },
|
|
2438
2443
|
...n === void 0 ? {} : { clientId: n }
|
|
2439
|
-
}),
|
|
2444
|
+
}), Ti = F.currentSpan.pipe(F.catchAll(() => F.succeed(void 0))), Ei = (e) => ({
|
|
2440
2445
|
traceId: e.traceId,
|
|
2441
2446
|
...e.spanId === void 0 ? {} : { spanId: e.spanId }
|
|
2442
|
-
}),
|
|
2447
|
+
}), Di = (e, t, n) => {
|
|
2443
2448
|
e !== void 0 && (e.attribute("rpc.tag", t), e.attribute("subject.type", n.type), n.tenantId !== void 0 && n.tenantId !== null && e.attribute("tenant.id", n.tenantId));
|
|
2444
|
-
},
|
|
2449
|
+
}, Oi = (e) => {
|
|
2445
2450
|
if (Gn() !== void 0) return async () => {
|
|
2446
2451
|
let t = await F.runPromise(F.either(qn(e, (e) => {
|
|
2447
2452
|
console.error("[voltro] row filter failed to load — subscription", e);
|
|
@@ -2449,13 +2454,13 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
2449
2454
|
if (t._tag === "Left") throw t.left;
|
|
2450
2455
|
return t.right;
|
|
2451
2456
|
};
|
|
2452
|
-
},
|
|
2457
|
+
}, ki = (e, t, n, r, i, a, o, s) => B.asyncScoped((c) => F.gen(function* () {
|
|
2453
2458
|
let l = yield* F.tryPromise(() => t.subscribe(e, (e) => {
|
|
2454
2459
|
c.single(e);
|
|
2455
2460
|
}, n, r, i, a, o, s)).pipe(F.matchCause({
|
|
2456
|
-
onFailure: (e) => (
|
|
2461
|
+
onFailure: (e) => (Ri(`subscription.${i}`, n.traceId, e), {
|
|
2457
2462
|
ok: !1,
|
|
2458
|
-
error:
|
|
2463
|
+
error: Hi(e)
|
|
2459
2464
|
}),
|
|
2460
2465
|
onSuccess: (e) => ({
|
|
2461
2466
|
ok: !0,
|
|
@@ -2476,20 +2481,20 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
2476
2481
|
});
|
|
2477
2482
|
yield* F.addFinalizer(() => F.sync(() => e()));
|
|
2478
2483
|
}
|
|
2479
|
-
})),
|
|
2480
|
-
|
|
2481
|
-
},
|
|
2482
|
-
|
|
2483
|
-
},
|
|
2484
|
+
})), Ai = /* @__PURE__ */ new Set(), ji = () => {
|
|
2485
|
+
Ai.clear();
|
|
2486
|
+
}, Mi = (e) => {
|
|
2487
|
+
Ai.has(e) || (Ai.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`));
|
|
2488
|
+
}, Ni = (e, t, n, r) => B.asyncScoped((i) => F.gen(function* () {
|
|
2484
2489
|
let a = yield* F.tryPromise(() => t.subscribeComputed(e, (e) => {
|
|
2485
2490
|
i.single(e._tag === "snapshot" ? {
|
|
2486
2491
|
...e,
|
|
2487
2492
|
computed: !0
|
|
2488
2493
|
} : e);
|
|
2489
2494
|
}, n, r)).pipe(F.matchCause({
|
|
2490
|
-
onFailure: (e) => (
|
|
2495
|
+
onFailure: (e) => (Ri(`subscription.${r}`, n.traceId, e), {
|
|
2491
2496
|
ok: !1,
|
|
2492
|
-
error:
|
|
2497
|
+
error: Hi(e)
|
|
2493
2498
|
}),
|
|
2494
2499
|
onSuccess: (e) => ({
|
|
2495
2500
|
ok: !0,
|
|
@@ -2510,16 +2515,16 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
2510
2515
|
});
|
|
2511
2516
|
yield* F.addFinalizer(() => F.sync(() => e()));
|
|
2512
2517
|
}
|
|
2513
|
-
})),
|
|
2514
|
-
let s = yield* Ne, c = yield* Oe, l = yield*
|
|
2515
|
-
|
|
2516
|
-
let u =
|
|
2518
|
+
})), Pi = (e, t, n = "rpc.subscription", r, i, a, o) => B.unwrap(F.gen(function* () {
|
|
2519
|
+
let s = yield* Ne, c = yield* Oe, l = yield* Ti;
|
|
2520
|
+
Di(l, n, s);
|
|
2521
|
+
let u = wi(s, l, c.clientId), d = pi(s.id, c.clientId), f = _i({ subjectKey: d }, () => Cr({
|
|
2517
2522
|
traceId: u.traceId,
|
|
2518
2523
|
...u.spanId === void 0 ? {} : { spanId: u.spanId }
|
|
2519
2524
|
}, () => Si(n, () => e(u)))), p = F.isEffect(f) ? yield* f.pipe(F.matchCause({
|
|
2520
|
-
onFailure: (e) => (
|
|
2525
|
+
onFailure: (e) => (Ri(`subscription.${n}`, u.traceId, e), {
|
|
2521
2526
|
ok: !1,
|
|
2522
|
-
error:
|
|
2527
|
+
error: Hi(e)
|
|
2523
2528
|
}),
|
|
2524
2529
|
onSuccess: (e) => ({
|
|
2525
2530
|
ok: !0,
|
|
@@ -2534,17 +2539,17 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
2534
2539
|
error: p.error
|
|
2535
2540
|
});
|
|
2536
2541
|
let m = p.value;
|
|
2537
|
-
if (rr(m)) return i !== void 0 &&
|
|
2542
|
+
if (rr(m)) return i !== void 0 && Mi(n), Ni(m, t, u, n);
|
|
2538
2543
|
let h = m, g = r?.(h);
|
|
2539
|
-
return
|
|
2544
|
+
return ki(h, t, u, g, n, i === void 0 ? void 0 : {
|
|
2540
2545
|
key: i.scope === "subject" ? `${i.baseKey}:s:${d}` : `${i.baseKey}:global`,
|
|
2541
2546
|
ttlMs: i.ttlMs,
|
|
2542
2547
|
swrMs: i.swrMs
|
|
2543
|
-
}, a?.(s), o?.(s) ??
|
|
2544
|
-
}).pipe(F.withSpan(n, { attributes: { "framework.kind": "subscription" } }))),
|
|
2545
|
-
let n = yield* Ne, r = yield* Oe, i = yield*
|
|
2546
|
-
|
|
2547
|
-
let a =
|
|
2548
|
+
}, a?.(s), o?.(s) ?? Oi(s));
|
|
2549
|
+
}).pipe(F.withSpan(n, { attributes: { "framework.kind": "subscription" } }))), Fi = (e, t = "rpc.stream") => B.unwrap(F.gen(function* () {
|
|
2550
|
+
let n = yield* Ne, r = yield* Oe, i = yield* Ti;
|
|
2551
|
+
Di(i, t, n);
|
|
2552
|
+
let a = wi(n, i, r.clientId), o = Si(t, () => e(a)), s = F.isEffect(o) ? yield* o.pipe(F.orDie) : o;
|
|
2548
2553
|
if (a.clientId === void 0) return s;
|
|
2549
2554
|
let c = a.clientId;
|
|
2550
2555
|
return B.unwrapScoped(F.gen(function* () {
|
|
@@ -2553,25 +2558,25 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
2553
2558
|
});
|
|
2554
2559
|
return yield* F.addFinalizer(() => F.sync(() => t())), s.pipe(B.interruptWhen(Xe.await(e)));
|
|
2555
2560
|
}));
|
|
2556
|
-
}).pipe(F.withSpan(t, { attributes: { "framework.kind": "stream" } }))),
|
|
2561
|
+
}).pipe(F.withSpan(t, { attributes: { "framework.kind": "stream" } }))), Ii = M({ scope: "voltro:rpc" }), Li = M({ scope: "voltro:http" }), Ri = (e, t, n) => {
|
|
2557
2562
|
if (N.isInterruptedOnly(n)) return;
|
|
2558
2563
|
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 = an(r), c = {
|
|
2559
2564
|
traceId: t,
|
|
2560
2565
|
...i === void 0 ? {} : { errorTag: i },
|
|
2561
2566
|
...s
|
|
2562
2567
|
}, l = a === "Failed to execute statement" && typeof s.dbMessage == "string" ? s.dbMessage : a;
|
|
2563
|
-
o ?
|
|
2564
|
-
},
|
|
2568
|
+
o ? Ii.error(`${e} failed: ${l}`, c) : Ii.warn(`${e} failed: ${l}`, c);
|
|
2569
|
+
}, zi = /* @__PURE__ */ new Set([
|
|
2565
2570
|
"SqlError",
|
|
2566
2571
|
"ResultLengthMismatch",
|
|
2567
2572
|
"FieldDecryptionError"
|
|
2568
|
-
]),
|
|
2573
|
+
]), Bi = (e) => typeof e == "object" && !!e && typeof e._tag == "string" && zi.has(e._tag), Vi = (e) => ({
|
|
2569
2574
|
_tag: "InternalError",
|
|
2570
2575
|
message: "internal server error",
|
|
2571
2576
|
traceId: e
|
|
2572
|
-
}),
|
|
2577
|
+
}), Hi = (e) => {
|
|
2573
2578
|
let t = N.squash(e);
|
|
2574
|
-
if (t && typeof t == "object" && t._tag === "UnknownException" && (t = t.error ?? t.cause ?? t),
|
|
2579
|
+
if (t && typeof t == "object" && t._tag === "UnknownException" && (t = t.error ?? t.cause ?? t), Bi(t)) return {
|
|
2575
2580
|
_tag: "InternalError",
|
|
2576
2581
|
message: "internal server error"
|
|
2577
2582
|
};
|
|
@@ -2583,21 +2588,21 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
2583
2588
|
...typeof i == "string" ? { _tag: i } : {},
|
|
2584
2589
|
message: typeof a == "string" ? a : String(t)
|
|
2585
2590
|
};
|
|
2586
|
-
},
|
|
2587
|
-
let r = yield* Ne, i = yield* Oe, a = yield*
|
|
2588
|
-
|
|
2589
|
-
let o =
|
|
2590
|
-
traceId: o.traceId,
|
|
2591
|
-
...o.spanId === void 0 ? {} : { spanId: o.spanId }
|
|
2592
|
-
}, () => ue({
|
|
2591
|
+
}, Ui = (e, t, n = "rpc.mutation") => F.gen(function* () {
|
|
2592
|
+
let r = yield* Ne, i = yield* Oe, a = yield* Ti;
|
|
2593
|
+
Di(a, n, r);
|
|
2594
|
+
let o = wi(r, a, i.clientId), s = pi(r.id, i.clientId), c = {
|
|
2593
2595
|
traceId: o.traceId,
|
|
2594
2596
|
subjectId: ci(r)
|
|
2595
|
-
}, (
|
|
2596
|
-
|
|
2597
|
-
|
|
2597
|
+
}, l = _i({ subjectKey: s }, () => Cr({
|
|
2598
|
+
traceId: o.traceId,
|
|
2599
|
+
...o.spanId === void 0 ? {} : { spanId: o.spanId }
|
|
2600
|
+
}, () => ue(c, () => Si(n, () => e(t, o)))));
|
|
2601
|
+
return yield* (F.isEffect(l) ? Ci(l, c) : F.tryPromise({
|
|
2602
|
+
try: () => Promise.resolve(l),
|
|
2598
2603
|
catch: (e) => e
|
|
2599
|
-
})).pipe(F.tapErrorCause((e) => F.sync(() =>
|
|
2600
|
-
}).pipe(F.withSpan(n, { attributes: { "framework.kind": "mutation" } })),
|
|
2604
|
+
})).pipe(F.tapErrorCause((e) => F.sync(() => Ri(n, o.traceId, e))), F.catchIf(Bi, () => F.die(Vi(o.traceId))), F.annotateLogs(Ei(o)));
|
|
2605
|
+
}).pipe(F.withSpan(n, { attributes: { "framework.kind": "mutation" } })), Wi = 8 * 1024 * 1024, Gi = (e) => {
|
|
2601
2606
|
let t = e.port ?? 4e3, n = e.path ?? "/ws", r = ct(), i = (t) => ft.HttpServerRequest.pipe(F.flatMap((t) => F.gen(function* () {
|
|
2602
2607
|
if (!e.inspectRoute) return H.text("inspect route not configured", { status: 404 });
|
|
2603
2608
|
let n = {};
|
|
@@ -2706,7 +2711,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
2706
2711
|
rawBody: s,
|
|
2707
2712
|
...c === void 0 ? {} : { store: c }
|
|
2708
2713
|
}, u = yield* F.promise(() => yt(t, l));
|
|
2709
|
-
u.status >= 500 &&
|
|
2714
|
+
u.status >= 500 && Li.warn(`${n.method} ${a} → ${u.status}`, {
|
|
2710
2715
|
method: n.method,
|
|
2711
2716
|
path: a,
|
|
2712
2717
|
status: u.status,
|
|
@@ -2741,7 +2746,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
2741
2746
|
});
|
|
2742
2747
|
}
|
|
2743
2748
|
return u.body instanceof Uint8Array ? H.uint8Array(u.body, f) : H.text(u.body ?? "", f);
|
|
2744
|
-
})), F.tapErrorCause((e) => N.isInterruptedOnly(e) ? F.void : F.sync(() =>
|
|
2749
|
+
})), F.tapErrorCause((e) => N.isInterruptedOnly(e) ? F.void : F.sync(() => Li.error(`${t.map((e) => e.method).join("|")} ${t[0].path} threw`, { path: t[0].path }, N.squash(e))))), n = /* @__PURE__ */ new Map();
|
|
2745
2750
|
for (let t of e.httpRoutes) {
|
|
2746
2751
|
let e = n.get(t.path);
|
|
2747
2752
|
e ? e.push(t) : n.set(t.path, [t]);
|
|
@@ -2804,21 +2809,21 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
2804
2809
|
let C = M({ scope: "voltro:rpc" }), w = I.launch(S).pipe(F.catchAllCause((e) => F.sync(() => {
|
|
2805
2810
|
C.error("rpc server crashed", {}, N.squash(e)), process.exit(1);
|
|
2806
2811
|
}))), T = F.runFork(w);
|
|
2807
|
-
return
|
|
2812
|
+
return Ki.add(T), Ji(), {
|
|
2808
2813
|
server: r,
|
|
2809
2814
|
shutdown: async () => {
|
|
2810
|
-
|
|
2815
|
+
Ki.delete(T), await F.runPromise(et.interrupt(T)).then(() => void 0, () => void 0);
|
|
2811
2816
|
}
|
|
2812
2817
|
};
|
|
2813
|
-
},
|
|
2814
|
-
if (
|
|
2815
|
-
|
|
2818
|
+
}, Ki = /* @__PURE__ */ new Set(), qi = !1, Ji = () => {
|
|
2819
|
+
if (qi) return;
|
|
2820
|
+
qi = !0;
|
|
2816
2821
|
let e = () => {
|
|
2817
|
-
let e = [...
|
|
2818
|
-
|
|
2822
|
+
let e = [...Ki];
|
|
2823
|
+
Ki.clear(), Promise.all(e.map((e) => F.runPromise(et.interrupt(e)).then(() => void 0, () => void 0))).then(() => process.exit(0), () => process.exit(0));
|
|
2819
2824
|
};
|
|
2820
2825
|
process.once("SIGINT", e), process.once("SIGTERM", e);
|
|
2821
|
-
},
|
|
2826
|
+
}, Yi = (e, t = 1e4) => new Promise((n, r) => {
|
|
2822
2827
|
if (e.listening) {
|
|
2823
2828
|
n();
|
|
2824
2829
|
return;
|
|
@@ -2834,13 +2839,13 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
2834
2839
|
o(e);
|
|
2835
2840
|
}
|
|
2836
2841
|
a = setTimeout(() => o(/* @__PURE__ */ Error(`rpc server did not bind within ${t}ms`)), t), e.on("listening", s), e.on("error", c);
|
|
2837
|
-
}),
|
|
2842
|
+
}), Xi = () => {
|
|
2838
2843
|
let e = process.env.FRAMEWORK_TRACING?.toLowerCase();
|
|
2839
2844
|
return e === "console" || e === "otlp" || e === "off" ? e : process.env.OTEL_EXPORTER_OTLP_ENDPOINT || process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT ? "otlp" : "off";
|
|
2840
|
-
},
|
|
2845
|
+
}, Zi = () => {
|
|
2841
2846
|
let e = process.env.FRAMEWORK_METRICS?.toLowerCase();
|
|
2842
2847
|
return e === "console" || e === "otlp" || e === "off" ? e : process.env.OTEL_EXPORTER_OTLP_ENDPOINT || process.env.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT ? "otlp" : "off";
|
|
2843
|
-
},
|
|
2848
|
+
}, Qi = async () => {
|
|
2844
2849
|
let [e, t, n, r, i] = await Promise.all([
|
|
2845
2850
|
import("@opentelemetry/sdk-trace-base"),
|
|
2846
2851
|
import("@opentelemetry/sdk-metrics"),
|
|
@@ -2855,7 +2860,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
2855
2860
|
otlpMetrics: r,
|
|
2856
2861
|
nodeSdk: i
|
|
2857
2862
|
};
|
|
2858
|
-
},
|
|
2863
|
+
}, $i = (e, t, n) => {
|
|
2859
2864
|
let { PeriodicExportingMetricReader: r, ConsoleMetricExporter: i, InMemoryMetricExporter: a, AggregationTemporality: o } = e.sdkMetrics;
|
|
2860
2865
|
if (t === "off") return {
|
|
2861
2866
|
reader: void 0,
|
|
@@ -2878,8 +2883,8 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
2878
2883
|
}),
|
|
2879
2884
|
inMemory: void 0
|
|
2880
2885
|
};
|
|
2881
|
-
},
|
|
2882
|
-
let t = e.mode ??
|
|
2886
|
+
}, ea = async (e = {}) => {
|
|
2887
|
+
let t = e.mode ?? Xi(), n = e.metricsMode ?? Zi(), r = e.extraSpanProcessors ?? [], i = e.extraMetricReaders ?? [];
|
|
2883
2888
|
if (t === "off" && e.traceSink === void 0 && n === "off" && r.length === 0 && i.length === 0) return {
|
|
2884
2889
|
layer: I.empty,
|
|
2885
2890
|
mode: t,
|
|
@@ -2888,13 +2893,13 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
2888
2893
|
metricsMode: n,
|
|
2889
2894
|
inMemoryMetricExporter: void 0
|
|
2890
2895
|
};
|
|
2891
|
-
let a = await
|
|
2896
|
+
let a = await Qi(), { 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;
|
|
2892
2897
|
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());
|
|
2893
2898
|
let m = [
|
|
2894
2899
|
...e.traceSink ? [e.traceSink] : [],
|
|
2895
2900
|
...p ? [p] : [],
|
|
2896
2901
|
...r
|
|
2897
|
-
], h = m.length === 1 ? m[0] : m, { reader: g, inMemory: _ } =
|
|
2902
|
+
], h = m.length === 1 ? m[0] : m, { reader: g, inMemory: _ } = $i(a, n, e.metricExportIntervalMillis ?? (process.env.OTEL_METRIC_EXPORT_INTERVAL ? Number(process.env.OTEL_METRIC_EXPORT_INTERVAL) : 6e4)), v = [...g ? [g] : [], ...i], y = v.length === 0 ? void 0 : v.length === 1 ? v[0] : v, b = {
|
|
2898
2903
|
serviceName: d,
|
|
2899
2904
|
...e.serviceVersion ? { serviceVersion: e.serviceVersion } : {},
|
|
2900
2905
|
...e.resourceAttributes ? { attributes: e.resourceAttributes } : {}
|
|
@@ -2912,18 +2917,18 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
2912
2917
|
metricsMode: n,
|
|
2913
2918
|
inMemoryMetricExporter: _
|
|
2914
2919
|
};
|
|
2915
|
-
},
|
|
2920
|
+
}, ta = {
|
|
2916
2921
|
[Tt.INTERNAL]: "internal",
|
|
2917
2922
|
[Tt.SERVER]: "server",
|
|
2918
2923
|
[Tt.CLIENT]: "client",
|
|
2919
2924
|
[Tt.PRODUCER]: "producer",
|
|
2920
2925
|
[Tt.CONSUMER]: "consumer"
|
|
2921
|
-
},
|
|
2926
|
+
}, na = (e) => e[0] * 1e3 + e[1] / 1e6, ra = 512, ia = 48, aa = (e) => {
|
|
2922
2927
|
let t = {}, n = 0;
|
|
2923
2928
|
for (let r in e) {
|
|
2924
|
-
if (n >=
|
|
2929
|
+
if (n >= ia) break;
|
|
2925
2930
|
let i = e[r];
|
|
2926
|
-
if (typeof i == "string") t[r] = i.length >
|
|
2931
|
+
if (typeof i == "string") t[r] = i.length > ra ? `${i.slice(0, ra)}…` : i;
|
|
2927
2932
|
else if (typeof i == "number" || typeof i == "boolean" || i == null) t[r] = i;
|
|
2928
2933
|
else {
|
|
2929
2934
|
let e;
|
|
@@ -2932,49 +2937,49 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
2932
2937
|
} catch {
|
|
2933
2938
|
e = String(i);
|
|
2934
2939
|
}
|
|
2935
|
-
t[r] = e.length >
|
|
2940
|
+
t[r] = e.length > ra ? `${e.slice(0, ra)}…` : e;
|
|
2936
2941
|
}
|
|
2937
2942
|
n++;
|
|
2938
2943
|
}
|
|
2939
2944
|
return t;
|
|
2940
|
-
},
|
|
2945
|
+
}, oa = {
|
|
2941
2946
|
[Et.UNSET]: "unset",
|
|
2942
2947
|
[Et.OK]: "ok",
|
|
2943
2948
|
[Et.ERROR]: "error"
|
|
2944
|
-
},
|
|
2949
|
+
}, sa = (e) => {
|
|
2945
2950
|
let t = e.spanContext(), n = e.events.length > 0 ? e.events.slice(0, 16).map((e) => ({
|
|
2946
2951
|
name: e.name,
|
|
2947
|
-
tsMs:
|
|
2948
|
-
...e.attributes ? { attributes:
|
|
2952
|
+
tsMs: na(e.time),
|
|
2953
|
+
...e.attributes ? { attributes: aa(e.attributes) } : {}
|
|
2949
2954
|
})) : void 0;
|
|
2950
2955
|
return {
|
|
2951
2956
|
traceId: t.traceId,
|
|
2952
2957
|
spanId: t.spanId,
|
|
2953
2958
|
parentSpanId: e.parentSpanContext?.spanId ?? null,
|
|
2954
2959
|
name: e.name,
|
|
2955
|
-
kind:
|
|
2956
|
-
attributes:
|
|
2957
|
-
startMs:
|
|
2958
|
-
endMs:
|
|
2959
|
-
durationMs:
|
|
2960
|
-
status:
|
|
2960
|
+
kind: ta[e.kind] ?? "internal",
|
|
2961
|
+
attributes: aa(e.attributes),
|
|
2962
|
+
startMs: na(e.startTime),
|
|
2963
|
+
endMs: na(e.endTime),
|
|
2964
|
+
durationMs: na(e.duration),
|
|
2965
|
+
status: oa[e.status.code] ?? "unset",
|
|
2961
2966
|
...e.status.message ? { statusMessage: e.status.message } : {},
|
|
2962
2967
|
...n ? { events: n } : {}
|
|
2963
2968
|
};
|
|
2964
|
-
},
|
|
2969
|
+
}, ca = (e) => ({
|
|
2965
2970
|
onStart: () => {},
|
|
2966
2971
|
onEnd: (t) => {
|
|
2967
2972
|
try {
|
|
2968
|
-
e(
|
|
2973
|
+
e(sa(t));
|
|
2969
2974
|
} catch {}
|
|
2970
2975
|
},
|
|
2971
2976
|
forceFlush: () => Promise.resolve(),
|
|
2972
2977
|
shutdown: () => Promise.resolve()
|
|
2973
|
-
}),
|
|
2974
|
-
|
|
2975
|
-
},
|
|
2976
|
-
|
|
2977
|
-
},
|
|
2978
|
+
}), la = { get: (e) => Promise.resolve(process.env[e]) }, ua = la, da = (e) => {
|
|
2979
|
+
ua = e;
|
|
2980
|
+
}, fa = () => {
|
|
2981
|
+
ua = la;
|
|
2982
|
+
}, pa = async (e) => await ua.get(e) ?? process.env[e], ma = (e) => process.env[e], ha = (e, t = 6e4, n = () => Date.now()) => {
|
|
2978
2983
|
let r = /* @__PURE__ */ new Map();
|
|
2979
2984
|
return { get: async (i) => {
|
|
2980
2985
|
let a = r.get(i);
|
|
@@ -2985,12 +2990,12 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
2985
2990
|
at: n()
|
|
2986
2991
|
}), o;
|
|
2987
2992
|
} };
|
|
2988
|
-
},
|
|
2993
|
+
}, ga = (e) => {
|
|
2989
2994
|
let t = {
|
|
2990
2995
|
accept: "application/json",
|
|
2991
2996
|
...e.headers ?? {}
|
|
2992
2997
|
};
|
|
2993
|
-
if (e.perKey) return
|
|
2998
|
+
if (e.perKey) return ha({ get: async (n) => {
|
|
2994
2999
|
let r = await fetch(`${e.url.replace(/\/$/, "")}/${encodeURIComponent(n)}`, { headers: t });
|
|
2995
3000
|
if (!r.ok) return;
|
|
2996
3001
|
let i = await r.json();
|
|
@@ -3001,34 +3006,34 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3001
3006
|
let t = (await a())[e];
|
|
3002
3007
|
return typeof t == "string" ? t : void 0;
|
|
3003
3008
|
} };
|
|
3004
|
-
},
|
|
3009
|
+
}, _a = (e) => e === void 0 || e === "env" || typeof e == "object" && e.kind === "env" ? la : e.kind === "custom" ? e.backend : e.kind === "http" ? ga(e) : la, va = "_voltro_idempotency", ya = (e) => {
|
|
3005
3010
|
if (e == null) return null;
|
|
3006
3011
|
let t = typeof e == "string" ? JSON.parse(e) : e;
|
|
3007
3012
|
return t && typeof t == "object" && "status" in t ? t : null;
|
|
3008
|
-
},
|
|
3013
|
+
}, ba = (e) => ({
|
|
3009
3014
|
scope: e.scope,
|
|
3010
3015
|
key: e.key,
|
|
3011
3016
|
status: e.status === "completed" ? "completed" : "in_flight",
|
|
3012
|
-
response:
|
|
3017
|
+
response: ya(e.response),
|
|
3013
3018
|
createdAt: qe(e.createdAt)
|
|
3014
|
-
}),
|
|
3015
|
-
table:
|
|
3019
|
+
}), xa = async (e, n, r) => (await e.query({
|
|
3020
|
+
table: va,
|
|
3016
3021
|
predicate: t(d("scope", n), d("key", r)),
|
|
3017
3022
|
order: [],
|
|
3018
3023
|
take: 1,
|
|
3019
3024
|
skip: void 0,
|
|
3020
3025
|
projection: void 0
|
|
3021
|
-
}))[0] ?? null,
|
|
3026
|
+
}))[0] ?? null, Sa = (e) => ({
|
|
3022
3027
|
get: async (t, n) => {
|
|
3023
|
-
let r = await
|
|
3024
|
-
return r ?
|
|
3028
|
+
let r = await xa(e, t, n);
|
|
3029
|
+
return r ? ba(r) : null;
|
|
3025
3030
|
},
|
|
3026
3031
|
claim: async (t, n, r, i) => {
|
|
3027
3032
|
for (let a = 0; a < 2; a++) {
|
|
3028
3033
|
let a = p({
|
|
3029
3034
|
kind: "typeid",
|
|
3030
3035
|
prefix: "idem"
|
|
3031
|
-
},
|
|
3036
|
+
}, va), o = await e.insertIgnore(va, {
|
|
3032
3037
|
id: a,
|
|
3033
3038
|
scope: t,
|
|
3034
3039
|
key: n,
|
|
@@ -3037,11 +3042,11 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3037
3042
|
createdAt: new Date(r)
|
|
3038
3043
|
}, { conflictColumns: ["scope", "key"] });
|
|
3039
3044
|
if (o.id === a) return "claimed";
|
|
3040
|
-
if (r - qe(o.createdAt) < i) return
|
|
3041
|
-
await e.delete(
|
|
3045
|
+
if (r - qe(o.createdAt) < i) return ba(o);
|
|
3046
|
+
await e.delete(va, o.id);
|
|
3042
3047
|
}
|
|
3043
|
-
let a = await
|
|
3044
|
-
return a ?
|
|
3048
|
+
let a = await xa(e, t, n);
|
|
3049
|
+
return a ? ba(a) : {
|
|
3045
3050
|
scope: t,
|
|
3046
3051
|
key: n,
|
|
3047
3052
|
status: "in_flight",
|
|
@@ -3050,33 +3055,33 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3050
3055
|
};
|
|
3051
3056
|
},
|
|
3052
3057
|
complete: async (t, n, r, i) => {
|
|
3053
|
-
let a = await
|
|
3054
|
-
a && await e.update(
|
|
3058
|
+
let a = await xa(e, t, n);
|
|
3059
|
+
a && await e.update(va, a.id, {
|
|
3055
3060
|
status: "completed",
|
|
3056
3061
|
response: r
|
|
3057
3062
|
});
|
|
3058
3063
|
},
|
|
3059
3064
|
release: async (t, n) => {
|
|
3060
|
-
let r = await
|
|
3061
|
-
r && await e.delete(
|
|
3065
|
+
let r = await xa(e, t, n);
|
|
3066
|
+
r && await e.delete(va, r.id);
|
|
3062
3067
|
}
|
|
3063
|
-
}), J = "_voltro_kv",
|
|
3068
|
+
}), J = "_voltro_kv", Ca = (e) => {
|
|
3064
3069
|
if (e == null) return null;
|
|
3065
3070
|
if (e instanceof Date) return e.getTime();
|
|
3066
3071
|
if (typeof e == "number") return e;
|
|
3067
3072
|
let t = Date.parse(String(e));
|
|
3068
3073
|
return Number.isNaN(t) ? null : t;
|
|
3069
|
-
},
|
|
3070
|
-
let n =
|
|
3074
|
+
}, wa = (e, t) => {
|
|
3075
|
+
let n = Ca(e.expiresAt);
|
|
3071
3076
|
return n !== null && n <= t;
|
|
3072
|
-
},
|
|
3077
|
+
}, Ta = (e) => e === null ? null : JSON.parse(e), Ea = async (e, t) => (await e.query({
|
|
3073
3078
|
table: J,
|
|
3074
3079
|
predicate: d("key", t),
|
|
3075
3080
|
order: [],
|
|
3076
3081
|
take: 1,
|
|
3077
3082
|
skip: void 0,
|
|
3078
3083
|
projection: void 0
|
|
3079
|
-
}))[0] ?? null,
|
|
3084
|
+
}))[0] ?? null, Da = (e) => {
|
|
3080
3085
|
let n = (e, t, n) => F.tryPromise({
|
|
3081
3086
|
try: n,
|
|
3082
3087
|
catch: (n) => new Ot({
|
|
@@ -3087,8 +3092,8 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3087
3092
|
});
|
|
3088
3093
|
return {
|
|
3089
3094
|
get: (t) => n("get", t, async () => {
|
|
3090
|
-
let n = await
|
|
3091
|
-
return n === null ? it.none() :
|
|
3095
|
+
let n = await Ea(e, t);
|
|
3096
|
+
return n === null ? it.none() : wa(n, Date.now()) ? (await e.delete(J, n.id), it.none()) : it.some(Ta(n.value));
|
|
3092
3097
|
}),
|
|
3093
3098
|
set: (t, r, i) => n("set", t, async () => {
|
|
3094
3099
|
let n = Date.now(), a = i?.ttlMs !== void 0 && i.ttlMs > 0 ? new Date(n + i.ttlMs) : null, o = p({
|
|
@@ -3111,14 +3116,14 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3111
3116
|
});
|
|
3112
3117
|
}),
|
|
3113
3118
|
delete: (t) => n("delete", t, async () => {
|
|
3114
|
-
let n = await
|
|
3119
|
+
let n = await Ea(e, t);
|
|
3115
3120
|
if (n === null) return !1;
|
|
3116
|
-
let r = !
|
|
3121
|
+
let r = !wa(n, Date.now());
|
|
3117
3122
|
return await e.delete(J, n.id), r;
|
|
3118
3123
|
}),
|
|
3119
3124
|
has: (t) => n("has", t, async () => {
|
|
3120
|
-
let n = await
|
|
3121
|
-
return n === null ? !1 :
|
|
3125
|
+
let n = await Ea(e, t);
|
|
3126
|
+
return n === null ? !1 : wa(n, Date.now()) ? (await e.delete(J, n.id), !1) : !0;
|
|
3122
3127
|
}),
|
|
3123
3128
|
list: (r) => n("list", "", async () => {
|
|
3124
3129
|
let n = Date.now(), i = ie(C("expiresAt"), g("expiresAt", new Date(n))), a = r === "" ? i : t(s("key", r), i), o = await e.query({
|
|
@@ -3129,7 +3134,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3129
3134
|
skip: void 0,
|
|
3130
3135
|
projection: void 0
|
|
3131
3136
|
}), c = [];
|
|
3132
|
-
for (let e of o)
|
|
3137
|
+
for (let e of o) wa(e, n) || (r === "" || e.key.startsWith(r)) && c.push(e.key);
|
|
3133
3138
|
return c;
|
|
3134
3139
|
}),
|
|
3135
3140
|
clear: () => n("clear", "", async () => {
|
|
@@ -3139,8 +3144,8 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3139
3144
|
} });
|
|
3140
3145
|
})
|
|
3141
3146
|
};
|
|
3142
|
-
},
|
|
3143
|
-
let n = (t.KV_BACKEND ?? "database").toLowerCase(), r = n === "redis" ? "redis" : n === "memory" ? "memory" : "database", i = r === "redis" ? Mt(t.KV_KEY_PREFIX ? { keyPrefix: t.KV_KEY_PREFIX } : {}).pipe(I.provide(At)) : r === "memory" ? jt() : I.succeed(kt, kt.of(
|
|
3147
|
+
}, Oa = async ({ store: e, env: t = process.env }) => {
|
|
3148
|
+
let n = (t.KV_BACKEND ?? "database").toLowerCase(), r = n === "redis" ? "redis" : n === "memory" ? "memory" : "database", i = r === "redis" ? Mt(t.KV_KEY_PREFIX ? { keyPrefix: t.KV_KEY_PREFIX } : {}).pipe(I.provide(At)) : r === "memory" ? jt() : I.succeed(kt, kt.of(Da(e))), a = tt.make(Dt.Default.pipe(I.provide(i))), o = await a.runPromise(Dt);
|
|
3144
3149
|
return {
|
|
3145
3150
|
kv: {
|
|
3146
3151
|
get: (e) => a.runPromise(o.get(e)).then((e) => it.getOrUndefined(e)),
|
|
@@ -3155,7 +3160,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3155
3160
|
backend: r,
|
|
3156
3161
|
dispose: () => a.dispose()
|
|
3157
3162
|
};
|
|
3158
|
-
},
|
|
3163
|
+
}, ka = {
|
|
3159
3164
|
get: () => Promise.resolve(void 0),
|
|
3160
3165
|
getOrElse: (e, t) => Promise.resolve(t()),
|
|
3161
3166
|
set: () => Promise.resolve(),
|
|
@@ -3163,7 +3168,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3163
3168
|
has: () => Promise.resolve(!1),
|
|
3164
3169
|
list: () => Promise.resolve([]),
|
|
3165
3170
|
clear: () => Promise.resolve()
|
|
3166
|
-
},
|
|
3171
|
+
}, Aa = "_voltro_api_keys", ja = (e) => ye("sha256").update(e, "utf8").digest("hex"), Ma = (e = "voltro_") => `${e}${be(30).toString("base64url")}`, Na = (e) => ({
|
|
3167
3172
|
id: e.id,
|
|
3168
3173
|
name: e.name,
|
|
3169
3174
|
keyPrefix: e.keyPrefix,
|
|
@@ -3176,18 +3181,18 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3176
3181
|
createdBy: e.createdBy ?? null,
|
|
3177
3182
|
onBehalfOf: e.onBehalfOf ?? null,
|
|
3178
3183
|
...e.metadata == null ? {} : { metadata: e.metadata }
|
|
3179
|
-
}),
|
|
3184
|
+
}), Pa = (e, t) => e.revokedAt === null && (e.expiresAt === null || e.expiresAt > t), Fa = (e, t = {}) => {
|
|
3180
3185
|
let n = t.prefix ?? "voltro_", r = t.usage, i = async (t) => {
|
|
3181
|
-
let r =
|
|
3186
|
+
let r = Ma(n), i = p({
|
|
3182
3187
|
kind: "typeid",
|
|
3183
3188
|
prefix: "apikey"
|
|
3184
|
-
},
|
|
3189
|
+
}, Aa), a = t.scopes ?? [], o = t.expiresAt == null ? null : t.expiresAt instanceof Date ? t.expiresAt.getTime() : t.expiresAt;
|
|
3185
3190
|
return await e.insert({
|
|
3186
3191
|
id: i,
|
|
3187
3192
|
tenantId: t.tenantId ?? null,
|
|
3188
3193
|
name: t.name,
|
|
3189
3194
|
onBehalfOf: t.onBehalfOf ?? null,
|
|
3190
|
-
hashedKey:
|
|
3195
|
+
hashedKey: ja(r),
|
|
3191
3196
|
keyPrefix: r.slice(0, n.length + 6),
|
|
3192
3197
|
scopes: a,
|
|
3193
3198
|
lastUsedAt: null,
|
|
@@ -3206,7 +3211,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3206
3211
|
};
|
|
3207
3212
|
}, a = async (t, n = Date.now()) => {
|
|
3208
3213
|
let i = await e.findByHash(t);
|
|
3209
|
-
return !i || !
|
|
3214
|
+
return !i || !Pa(i, n) ? null : (r === void 0 ? await e.patch(i.id, { lastUsedAt: n }) : r.touch(i.id, n), {
|
|
3210
3215
|
id: i.id,
|
|
3211
3216
|
tenantId: i.tenantId ?? "",
|
|
3212
3217
|
createdBy: i.createdBy ?? null,
|
|
@@ -3218,7 +3223,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3218
3223
|
return {
|
|
3219
3224
|
issue: i,
|
|
3220
3225
|
resolveByHash: a,
|
|
3221
|
-
verify: (e, t) => a(
|
|
3226
|
+
verify: (e, t) => a(ja(e), t),
|
|
3222
3227
|
revoke: async (t, n, r = Date.now()) => {
|
|
3223
3228
|
let i = await e.findById(t);
|
|
3224
3229
|
return !i || (i.tenantId ?? null) !== n ? !1 : (await e.patch(t, { revokedAt: r }), !0);
|
|
@@ -3234,9 +3239,9 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3234
3239
|
...a.metadata == null ? {} : { metadata: a.metadata }
|
|
3235
3240
|
}));
|
|
3236
3241
|
},
|
|
3237
|
-
list: async (t) => (await e.listByTenant(t)).map(
|
|
3242
|
+
list: async (t) => (await e.listByTenant(t)).map(Na)
|
|
3238
3243
|
};
|
|
3239
|
-
},
|
|
3244
|
+
}, Ia = () => {
|
|
3240
3245
|
let e = /* @__PURE__ */ new Map();
|
|
3241
3246
|
return {
|
|
3242
3247
|
insert: async (t) => {
|
|
@@ -3253,21 +3258,21 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3253
3258
|
});
|
|
3254
3259
|
}
|
|
3255
3260
|
};
|
|
3256
|
-
},
|
|
3261
|
+
}, La = (e) => e == null ? null : e instanceof Date ? e.getTime() : typeof e == "number" ? e : typeof e == "string" ? new Date(e).getTime() : null, Ra = (e) => ({
|
|
3257
3262
|
id: String(e.id),
|
|
3258
3263
|
tenantId: e.tenantId ?? null,
|
|
3259
3264
|
name: String(e.name),
|
|
3260
3265
|
hashedKey: String(e.hashedKey),
|
|
3261
3266
|
keyPrefix: String(e.keyPrefix),
|
|
3262
3267
|
scopes: e.scopes ?? null,
|
|
3263
|
-
lastUsedAt:
|
|
3264
|
-
expiresAt:
|
|
3265
|
-
revokedAt:
|
|
3268
|
+
lastUsedAt: La(e.lastUsedAt),
|
|
3269
|
+
expiresAt: La(e.expiresAt),
|
|
3270
|
+
revokedAt: La(e.revokedAt),
|
|
3266
3271
|
createdBy: e.createdBy ?? null,
|
|
3267
3272
|
onBehalfOf: e.onBehalfOf ?? null,
|
|
3268
|
-
createdAt:
|
|
3273
|
+
createdAt: La(e.createdAt) ?? 0,
|
|
3269
3274
|
...e.metadata == null ? {} : { metadata: e.metadata }
|
|
3270
|
-
}),
|
|
3275
|
+
}), za = (e) => async (t, n) => {
|
|
3271
3276
|
let r = await e.findById(t);
|
|
3272
3277
|
if (r === null) return;
|
|
3273
3278
|
let i = r.requestCount ?? 0, a = r.lastUsedAt ?? 0;
|
|
@@ -3275,9 +3280,9 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3275
3280
|
requestCount: i + n.requests,
|
|
3276
3281
|
lastUsedAt: Math.max(a, n.lastUsedAt)
|
|
3277
3282
|
});
|
|
3278
|
-
},
|
|
3283
|
+
}, Ba = (e) => {
|
|
3279
3284
|
let t = async (t) => await e.query({
|
|
3280
|
-
table:
|
|
3285
|
+
table: Aa,
|
|
3281
3286
|
predicate: t,
|
|
3282
3287
|
order: [],
|
|
3283
3288
|
take: void 0,
|
|
@@ -3295,33 +3300,33 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3295
3300
|
};
|
|
3296
3301
|
return {
|
|
3297
3302
|
insert: async (t) => {
|
|
3298
|
-
await e.insert(
|
|
3303
|
+
await e.insert(Aa, n(t));
|
|
3299
3304
|
},
|
|
3300
3305
|
findByHash: async (e) => {
|
|
3301
3306
|
let n = await t(d("hashedKey", e));
|
|
3302
|
-
return n[0] ?
|
|
3307
|
+
return n[0] ? Ra(n[0]) : null;
|
|
3303
3308
|
},
|
|
3304
3309
|
findById: async (e) => {
|
|
3305
3310
|
let n = await t(d("id", e));
|
|
3306
|
-
return n[0] ?
|
|
3311
|
+
return n[0] ? Ra(n[0]) : null;
|
|
3307
3312
|
},
|
|
3308
|
-
listByTenant: async (e) => (await t(e === null ? void 0 : d("tenantId", e))).map(
|
|
3313
|
+
listByTenant: async (e) => (await t(e === null ? void 0 : d("tenantId", e))).map(Ra).filter((t) => e === null || t.tenantId === e),
|
|
3309
3314
|
patch: async (t, r) => {
|
|
3310
|
-
await e.update(
|
|
3315
|
+
await e.update(Aa, t, n(r));
|
|
3311
3316
|
}
|
|
3312
3317
|
};
|
|
3313
|
-
},
|
|
3318
|
+
}, Va = (e, t = {}) => Nt({
|
|
3314
3319
|
id: "voltro-apikey",
|
|
3315
3320
|
...t.prefix ? { prefix: t.prefix } : {},
|
|
3316
3321
|
resolveKey: (t) => e.resolveByHash(t)
|
|
3317
|
-
}),
|
|
3322
|
+
}), Ha = (e) => {
|
|
3318
3323
|
let t = e.subject;
|
|
3319
3324
|
return {
|
|
3320
3325
|
id: t.id ?? null,
|
|
3321
3326
|
tenantId: t.tenantId ?? null,
|
|
3322
3327
|
scopes: t.scopes ?? []
|
|
3323
3328
|
};
|
|
3324
|
-
},
|
|
3329
|
+
}, Ua = (e, t = "/v1/api-keys") => {
|
|
3325
3330
|
let n = z.Struct({
|
|
3326
3331
|
id: z.String,
|
|
3327
3332
|
name: z.String,
|
|
@@ -3362,7 +3367,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3362
3367
|
keyPrefix: z.String
|
|
3363
3368
|
}),
|
|
3364
3369
|
handler: async (t, n) => {
|
|
3365
|
-
let r = t.body, i =
|
|
3370
|
+
let r = t.body, i = Ha(n), a = new Set(i.scopes), o = (e) => a.has(we) || a.has(e), s = r.onBehalfOf === void 0 ? i.id : r.onBehalfOf;
|
|
3366
3371
|
if (s === null) {
|
|
3367
3372
|
if (!o(Te)) throw new Me({
|
|
3368
3373
|
required: Te,
|
|
@@ -3407,7 +3412,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3407
3412
|
guards: [xt(we)],
|
|
3408
3413
|
input: z.Struct({}),
|
|
3409
3414
|
output: z.Struct({ keys: z.Array(n) }),
|
|
3410
|
-
handler: async (t, n) => ({ keys: [...await e.list(
|
|
3415
|
+
handler: async (t, n) => ({ keys: [...await e.list(Ha(n).tenantId)] })
|
|
3411
3416
|
}),
|
|
3412
3417
|
vt({
|
|
3413
3418
|
method: "POST",
|
|
@@ -3416,42 +3421,42 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3416
3421
|
guards: [xt(we)],
|
|
3417
3422
|
input: z.Struct({ body: z.Struct({ id: z.String }) }),
|
|
3418
3423
|
output: z.Struct({ ok: z.Boolean }),
|
|
3419
|
-
handler: async (t, n) => ({ ok: await e.revoke(t.body.id,
|
|
3424
|
+
handler: async (t, n) => ({ ok: await e.revoke(t.body.id, Ha(n).tenantId) })
|
|
3420
3425
|
})
|
|
3421
3426
|
];
|
|
3422
|
-
},
|
|
3427
|
+
}, Wa = {
|
|
3423
3428
|
type: "anonymous",
|
|
3424
3429
|
id: null,
|
|
3425
3430
|
tenantId: null
|
|
3426
|
-
},
|
|
3431
|
+
}, Ga = class extends Ye.Tag("@voltro/EffectStore")() {}, Ka = (e, t) => (n) => n instanceof ei ? n : new ti({
|
|
3427
3432
|
operation: e,
|
|
3428
3433
|
table: t,
|
|
3429
3434
|
cause: String(n)
|
|
3430
|
-
}),
|
|
3435
|
+
}), qa = (e, t, n) => F.tryPromise({
|
|
3431
3436
|
try: n,
|
|
3432
|
-
catch:
|
|
3433
|
-
}),
|
|
3434
|
-
query: ((t) =>
|
|
3435
|
-
insert: (t, n) =>
|
|
3436
|
-
update: (t, n, r) =>
|
|
3437
|
-
delete: (t, n) =>
|
|
3438
|
-
hardDelete: (t, n) =>
|
|
3439
|
-
}),
|
|
3437
|
+
catch: Ka(e, t)
|
|
3438
|
+
}), Ja = (e) => I.succeed(Ga, {
|
|
3439
|
+
query: ((t) => qa("query", t.table, () => e.query(t))),
|
|
3440
|
+
insert: (t, n) => qa("insert", t, () => e.insert(t, n)),
|
|
3441
|
+
update: (t, n, r) => qa("update", t, () => e.update(t, n, r)),
|
|
3442
|
+
delete: (t, n) => qa("delete", t, () => e.delete(t, n)),
|
|
3443
|
+
hardDelete: (t, n) => qa("hardDelete", t, () => e.hardDelete(t, n))
|
|
3444
|
+
}), Ya = (e) => ht.make(e.name, {
|
|
3440
3445
|
payload: e.payloadSchema,
|
|
3441
3446
|
success: Le,
|
|
3442
3447
|
error: e.errorSchema
|
|
3443
|
-
}),
|
|
3448
|
+
}), Xa = (e, t) => ({
|
|
3444
3449
|
id: t,
|
|
3445
3450
|
workflowName: e,
|
|
3446
3451
|
executionId: t,
|
|
3447
3452
|
status: "running"
|
|
3448
|
-
}),
|
|
3453
|
+
}), Za = Xa, Qa = (e) => {
|
|
3449
3454
|
let t = N.failureOption(e), n = t._tag === "Some" ? t.value : N.squash(e);
|
|
3450
3455
|
return {
|
|
3451
3456
|
tag: n && typeof n == "object" && "_tag" in n ? String(n._tag) : null,
|
|
3452
3457
|
message: n?.message ?? String(n)
|
|
3453
3458
|
};
|
|
3454
|
-
},
|
|
3459
|
+
}, $a = (e, t, n) => {
|
|
3455
3460
|
if (n === void 0) return {
|
|
3456
3461
|
id: t,
|
|
3457
3462
|
workflowName: e,
|
|
@@ -3477,7 +3482,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3477
3482
|
workflowName: e,
|
|
3478
3483
|
executionId: t,
|
|
3479
3484
|
status: "failed",
|
|
3480
|
-
error:
|
|
3485
|
+
error: Qa(r.cause)
|
|
3481
3486
|
};
|
|
3482
3487
|
}
|
|
3483
3488
|
return {
|
|
@@ -3486,7 +3491,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3486
3491
|
executionId: t,
|
|
3487
3492
|
status: "running"
|
|
3488
3493
|
};
|
|
3489
|
-
},
|
|
3494
|
+
}, eo = (e) => new Promise((t) => setTimeout(t, e)), to = class extends Error {
|
|
3490
3495
|
workflowName;
|
|
3491
3496
|
missingFields;
|
|
3492
3497
|
detail;
|
|
@@ -3495,7 +3500,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3495
3500
|
let r = t.length > 0 ? ` missing required field(s): ${t.join(", ")}.` : "";
|
|
3496
3501
|
super(`Workflow "${e}" was started with an invalid payload.${r} ${n}`), this.workflowName = e, this.missingFields = t, this.detail = n, this.name = "WorkflowPayloadError";
|
|
3497
3502
|
}
|
|
3498
|
-
},
|
|
3503
|
+
}, no = (e) => {
|
|
3499
3504
|
let t = e.ast;
|
|
3500
3505
|
if (!Array.isArray(t.propertySignatures)) return {
|
|
3501
3506
|
required: [],
|
|
@@ -3506,10 +3511,10 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3506
3511
|
required: n.filter((e) => !e.isOptional).map((e) => String(e.name)),
|
|
3507
3512
|
optional: n.filter((e) => e.isOptional).map((e) => String(e.name))
|
|
3508
3513
|
};
|
|
3509
|
-
},
|
|
3514
|
+
}, ro = (e) => {
|
|
3510
3515
|
let t = e.ast;
|
|
3511
3516
|
return Array.isArray(t.propertySignatures) ? t.propertySignatures.filter((e) => !e.isOptional && typeof e.name == "string").map((e) => String(e.name)) : [];
|
|
3512
|
-
},
|
|
3517
|
+
}, io = (e) => {
|
|
3513
3518
|
let t = new Map(e.workflows.map((e) => [e.definition.name, e.definition])), n = (e) => {
|
|
3514
3519
|
let n = t.get(e);
|
|
3515
3520
|
if (!n) {
|
|
@@ -3520,17 +3525,17 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3520
3525
|
}, r = (e, t) => {
|
|
3521
3526
|
let n = z.validateEither(e.payloadSchema)(t);
|
|
3522
3527
|
if (n._tag === "Right") return;
|
|
3523
|
-
let r = typeof t == "object" && t ? Object.keys(t) : [], i =
|
|
3524
|
-
throw new
|
|
3528
|
+
let r = typeof t == "object" && t ? Object.keys(t) : [], i = ro(e.payloadSchema).filter((e) => !r.includes(e));
|
|
3529
|
+
throw new to(e.name, i, wt.formatErrorSync(n.left));
|
|
3525
3530
|
}, i = (e, t) => {
|
|
3526
3531
|
let i = n(e);
|
|
3527
3532
|
return r(i, t), i;
|
|
3528
3533
|
}, a = async (t, r) => {
|
|
3529
3534
|
let i = n(t);
|
|
3530
|
-
return
|
|
3535
|
+
return $a(t, r, await e.runEffect(i.poll(r)));
|
|
3531
3536
|
}, o = async () => e.runEffect(Pt()), s = async (t, n, r) => {
|
|
3532
3537
|
let a = i(t, n), o;
|
|
3533
|
-
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)),
|
|
3538
|
+
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)), Xa(t, o ?? await e.runEffect(a.executionId(n)))) : Xa(t, await e.runEffect(a.execute(n, { discard: !0 })));
|
|
3534
3539
|
};
|
|
3535
3540
|
return {
|
|
3536
3541
|
start: s,
|
|
@@ -3568,7 +3573,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3568
3573
|
let e = await a(r, i);
|
|
3569
3574
|
if (e.status === "succeeded" || e.status === "failed" || e.status === "cancelled") return e;
|
|
3570
3575
|
if (o?.timeoutMs !== void 0 && Date.now() - s >= o.timeoutMs) throw Error(`Timed out waiting for workflow '${r}' run '${i}'`);
|
|
3571
|
-
await
|
|
3576
|
+
await eo(c);
|
|
3572
3577
|
}
|
|
3573
3578
|
}),
|
|
3574
3579
|
cancel: async (t, r) => {
|
|
@@ -3606,22 +3611,22 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3606
3611
|
return e.retry(t, n);
|
|
3607
3612
|
}
|
|
3608
3613
|
};
|
|
3609
|
-
},
|
|
3614
|
+
}, ao = (e, t) => ({
|
|
3610
3615
|
...e,
|
|
3611
3616
|
start: async (n, r, i) => {
|
|
3612
3617
|
if (i?.wait) throw Error("ctx.workflows.start(..., { wait: true }) is not allowed inside a mutation transaction; start the workflow and wait after commit.");
|
|
3613
3618
|
let a = await e.executionId(n, r);
|
|
3614
|
-
return t(() => e.start(n, r)),
|
|
3619
|
+
return t(() => e.start(n, r)), Xa(n, a);
|
|
3615
3620
|
},
|
|
3616
3621
|
child: async (n, r, i) => {
|
|
3617
3622
|
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.");
|
|
3618
3623
|
let a = await e.executionId(n, r);
|
|
3619
|
-
return t(() => e.child(n, r, i)),
|
|
3624
|
+
return t(() => e.child(n, r, i)), Xa(n, a);
|
|
3620
3625
|
},
|
|
3621
3626
|
run: async () => {
|
|
3622
3627
|
throw Error("ctx.workflows.run(...) is not allowed inside a mutation transaction; use ctx.workflows.start(...) so the workflow starts after commit.");
|
|
3623
3628
|
}
|
|
3624
|
-
}),
|
|
3629
|
+
}), oo = (e, t) => ({
|
|
3625
3630
|
...e,
|
|
3626
3631
|
start: (n, r, i) => e.start(n, r, {
|
|
3627
3632
|
...i,
|
|
@@ -3635,7 +3640,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3635
3640
|
...i,
|
|
3636
3641
|
callerContext: t
|
|
3637
3642
|
})
|
|
3638
|
-
}),
|
|
3643
|
+
}), so = (e) => {
|
|
3639
3644
|
let t = () => {
|
|
3640
3645
|
let t = e();
|
|
3641
3646
|
if (!t) throw Error("Workflow runtime is not ready yet");
|
|
@@ -3656,32 +3661,32 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3656
3661
|
listRuns: ((e) => t().listRuns(e)),
|
|
3657
3662
|
retry: (e, n) => t().retry(e, n)
|
|
3658
3663
|
};
|
|
3659
|
-
},
|
|
3664
|
+
}, co = (e, t) => {
|
|
3660
3665
|
let n = {};
|
|
3661
|
-
for (let r of e) n[r.definition.name] = (e) => (t ? F.promise(() => t.start(r.definition.name, e)) : r.definition.execute(e, { discard: !0 }).pipe(F.map((e) =>
|
|
3666
|
+
for (let r of e) n[r.definition.name] = (e) => (t ? F.promise(() => t.start(r.definition.name, e)) : r.definition.execute(e, { discard: !0 }).pipe(F.map((e) => Xa(r.definition.name, e)))).pipe(F.withSpan(`workflow.${r.definition.name}`, { attributes: { "framework.kind": "workflow" } }));
|
|
3662
3667
|
return n;
|
|
3663
|
-
},
|
|
3668
|
+
}, lo = (e, t, n) => e.map((e) => e.definition.toLayer(((r, i) => {
|
|
3664
3669
|
let a = t.resolveStartContext?.(e.definition.name, i);
|
|
3665
3670
|
return (a === void 0 ? F.succeed(void 0) : F.promise(() => Promise.resolve(a))).pipe(F.flatMap((a) => {
|
|
3666
3671
|
let o = {
|
|
3667
3672
|
...a,
|
|
3668
|
-
subject: a?.subject ??
|
|
3673
|
+
subject: a?.subject ?? Wa,
|
|
3669
3674
|
traceId: a?.traceId ?? "workflow-bootstrap"
|
|
3670
3675
|
}, s = t.buildContext(o, {
|
|
3671
3676
|
workflowName: e.definition.name,
|
|
3672
3677
|
executionId: i,
|
|
3673
3678
|
parentExecutionId: a?.parentExecutionId ?? null,
|
|
3674
3679
|
parentClosePolicy: a?.parentClosePolicy ?? null
|
|
3675
|
-
}), c = e.buildExecute(s), l = (n?.(e, c, o) ?? c)(r, i), u = I.succeed(Ne, o.subject), d = s?.store, f = d === void 0 ? l : F.provide(l,
|
|
3680
|
+
}), c = e.buildExecute(s), l = (n?.(e, c, o) ?? c)(r, i), u = I.succeed(Ne, o.subject), d = s?.store, f = d === void 0 ? l : F.provide(l, Ja(d));
|
|
3676
3681
|
return F.provide(f, u);
|
|
3677
3682
|
}));
|
|
3678
|
-
}))),
|
|
3683
|
+
}))), uo = (e) => ({
|
|
3679
3684
|
_tag: "workflowEventTrigger",
|
|
3680
3685
|
...e
|
|
3681
|
-
}),
|
|
3686
|
+
}), fo = uo, po = (e) => typeof e == "object" && !!e && e._tag === "workflowEventTrigger", mo = () => {
|
|
3682
3687
|
let e = globalThis.crypto;
|
|
3683
3688
|
return typeof e?.randomUUID == "function" ? e.randomUUID() : `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`;
|
|
3684
|
-
},
|
|
3689
|
+
}, ho = (e) => `${e}_${mo()}`, go = (e) => e.id ?? `${e.event}->${e.workflow}`, _o = O("_voltro_workflow_events", {
|
|
3685
3690
|
id: y({ prefix: "wfe" }),
|
|
3686
3691
|
name: k(),
|
|
3687
3692
|
payload: T(),
|
|
@@ -3689,7 +3694,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3689
3694
|
subject: T().nullable(),
|
|
3690
3695
|
traceId: k().nullable(),
|
|
3691
3696
|
occurredAt: A().default("now")
|
|
3692
|
-
}).index(["name"]).index(["source"]).index(["occurredAt"]),
|
|
3697
|
+
}).index(["name"]).index(["source"]).index(["occurredAt"]), vo = O("_voltro_workflow_event_deliveries", {
|
|
3693
3698
|
id: y({ prefix: "wfed" }),
|
|
3694
3699
|
eventId: k(),
|
|
3695
3700
|
eventName: k(),
|
|
@@ -3707,8 +3712,8 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3707
3712
|
errorMessage: k().nullable(),
|
|
3708
3713
|
createdAt: A().default("now"),
|
|
3709
3714
|
completedAt: A().nullable()
|
|
3710
|
-
}).index(["eventId"]).index(["eventName"]).index(["triggerId"]).index(["workflowName"]).index(["status"]),
|
|
3711
|
-
let t = e.makeId ??
|
|
3715
|
+
}).index(["eventId"]).index(["eventName"]).index(["triggerId"]).index(["workflowName"]).index(["status"]), yo = (e) => {
|
|
3716
|
+
let t = e.makeId ?? ho, n = /* @__PURE__ */ new Map();
|
|
3712
3717
|
for (let t of e.triggers) {
|
|
3713
3718
|
let e = n.get(t.event);
|
|
3714
3719
|
e ? e.push(t) : n.set(t.event, [t]);
|
|
@@ -3749,7 +3754,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3749
3754
|
});
|
|
3750
3755
|
let p = o(n), m = [];
|
|
3751
3756
|
for (let o of p) {
|
|
3752
|
-
let s =
|
|
3757
|
+
let s = go(o), l = o.workflow, u;
|
|
3753
3758
|
try {
|
|
3754
3759
|
let p = o.idempotencyKey?.(f) ?? `${c}:${s}`;
|
|
3755
3760
|
if (o.filter && !await o.filter(f)) {
|
|
@@ -3852,10 +3857,10 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3852
3857
|
triggered: m
|
|
3853
3858
|
};
|
|
3854
3859
|
} };
|
|
3855
|
-
},
|
|
3860
|
+
}, bo = M({ scope: "voltro:outbox" }), Y = "_voltro_outbox", xo = {
|
|
3856
3861
|
kind: "typeid",
|
|
3857
3862
|
prefix: "obx"
|
|
3858
|
-
},
|
|
3863
|
+
}, So = O(Y, {
|
|
3859
3864
|
id: y({ prefix: "obx" }),
|
|
3860
3865
|
effect: k(),
|
|
3861
3866
|
payload: T(),
|
|
@@ -3873,10 +3878,10 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3873
3878
|
resendRequestedBy: k().nullable(),
|
|
3874
3879
|
resendReason: k().nullable(),
|
|
3875
3880
|
resendCount: x()
|
|
3876
|
-
}),
|
|
3881
|
+
}), Co = "_voltro_outbox_attempts", wo = {
|
|
3877
3882
|
kind: "typeid",
|
|
3878
3883
|
prefix: "obxa"
|
|
3879
|
-
},
|
|
3884
|
+
}, To = O(Co, {
|
|
3880
3885
|
id: y({ prefix: "obxa" }),
|
|
3881
3886
|
outboxId: k(),
|
|
3882
3887
|
effect: k(),
|
|
@@ -3897,11 +3902,11 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3897
3902
|
subjectId: k().nullable(),
|
|
3898
3903
|
tenantId: k().nullable(),
|
|
3899
3904
|
traceId: k().nullable()
|
|
3900
|
-
}).index(["outboxId", "attempt"]).index(["startedAt"]).index(["outcome"]),
|
|
3905
|
+
}).index(["outboxId", "attempt"]).index(["startedAt"]).index(["outcome"]), Eo = (e) => {
|
|
3901
3906
|
if (e.effect.trim() === "") throw Error("defineOutboxHandler: `effect` must be a non-empty name");
|
|
3902
3907
|
if (e.maxAttempts !== void 0 && e.maxAttempts < 1) throw Error(`defineOutboxHandler("${e.effect}"): maxAttempts must be >= 1`);
|
|
3903
3908
|
return e;
|
|
3904
|
-
},
|
|
3909
|
+
}, Do = 8, Oo = (e) => ({
|
|
3905
3910
|
enqueue: async (n, r, i) => {
|
|
3906
3911
|
let a = (e.now ?? (() => /* @__PURE__ */ new Date()))(), o = i?.idempotencyKey;
|
|
3907
3912
|
if (o !== void 0) {
|
|
@@ -3916,12 +3921,12 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3916
3921
|
if (n !== void 0) return n.id;
|
|
3917
3922
|
}
|
|
3918
3923
|
let s = {
|
|
3919
|
-
id: p(
|
|
3924
|
+
id: p(xo, Y),
|
|
3920
3925
|
effect: n,
|
|
3921
3926
|
payload: r,
|
|
3922
3927
|
status: "pending",
|
|
3923
3928
|
attempts: 0,
|
|
3924
|
-
maxAttempts: i?.maxAttempts ??
|
|
3929
|
+
maxAttempts: i?.maxAttempts ?? Do,
|
|
3925
3930
|
nextAttemptAt: new Date(a.getTime() + (i?.delayMs ?? 0)),
|
|
3926
3931
|
idempotencyKey: o ?? null,
|
|
3927
3932
|
lastError: null,
|
|
@@ -3968,7 +3973,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3968
3973
|
});
|
|
3969
3974
|
} else e.nudge?.();
|
|
3970
3975
|
}
|
|
3971
|
-
}),
|
|
3976
|
+
}), ko = (e) => Math.min(1e3 * 2 ** Math.max(0, e - 1), 5 * 6e4), Ao = 50, jo = (e, t) => e.length <= t ? e : `${e.slice(0, t)}… [clipped]`, Mo = (e) => {
|
|
3972
3977
|
if (e == null) return null;
|
|
3973
3978
|
let t = typeof e == "object" && !Array.isArray(e) ? e : { value: e }, n;
|
|
3974
3979
|
try {
|
|
@@ -3978,13 +3983,13 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3978
3983
|
}
|
|
3979
3984
|
return n.length > 8192 ? {
|
|
3980
3985
|
truncated: !0,
|
|
3981
|
-
preview:
|
|
3986
|
+
preview: jo(n, 8192)
|
|
3982
3987
|
} : t;
|
|
3983
|
-
},
|
|
3988
|
+
}, No = async (e, t, n) => {
|
|
3984
3989
|
let r = t.outboxRow, i = r.id, a = r.resendRequestedBy ?? null;
|
|
3985
3990
|
try {
|
|
3986
|
-
await e.insert(
|
|
3987
|
-
id: p(
|
|
3991
|
+
await e.insert(Co, {
|
|
3992
|
+
id: p(wo, Co),
|
|
3988
3993
|
outboxId: i,
|
|
3989
3994
|
effect: r.effect,
|
|
3990
3995
|
attempt: t.attempt,
|
|
@@ -3995,14 +4000,14 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
3995
4000
|
startedAt: t.startedAt,
|
|
3996
4001
|
finishedAt: t.finishedAt,
|
|
3997
4002
|
durationMs: Math.max(0, t.finishedAt.getTime() - t.startedAt.getTime()),
|
|
3998
|
-
error: t.error === null ? null :
|
|
3999
|
-
response:
|
|
4003
|
+
error: t.error === null ? null : jo(t.error, 4e3),
|
|
4004
|
+
response: Mo(t.response),
|
|
4000
4005
|
subjectId: r.subjectId ?? null,
|
|
4001
4006
|
tenantId: r.tenantId ?? null,
|
|
4002
4007
|
traceId: r.traceId ?? null
|
|
4003
4008
|
});
|
|
4004
4009
|
} catch (e) {
|
|
4005
|
-
|
|
4010
|
+
bo.warn("outbox: could not record delivery attempt (delivery itself is unaffected)", {
|
|
4006
4011
|
outboxId: i,
|
|
4007
4012
|
attempt: t.attempt
|
|
4008
4013
|
}, e);
|
|
@@ -4010,7 +4015,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4010
4015
|
}
|
|
4011
4016
|
if (!(t.attempt <= n)) try {
|
|
4012
4017
|
let t = await e.query({
|
|
4013
|
-
table:
|
|
4018
|
+
table: Co,
|
|
4014
4019
|
predicate: d("outboxId", i),
|
|
4015
4020
|
order: [{
|
|
4016
4021
|
column: "attempt",
|
|
@@ -4020,11 +4025,11 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4020
4025
|
skip: void 0,
|
|
4021
4026
|
projection: ["id"]
|
|
4022
4027
|
});
|
|
4023
|
-
for (let r of t.slice(0, Math.max(0, t.length - n))) await e.delete(
|
|
4028
|
+
for (let r of t.slice(0, Math.max(0, t.length - n))) await e.delete(Co, r.id);
|
|
4024
4029
|
} catch (e) {
|
|
4025
|
-
|
|
4030
|
+
bo.warn("outbox: attempt-log trim failed; the log may exceed its cap", { outboxId: i }, e);
|
|
4026
4031
|
}
|
|
4027
|
-
},
|
|
4032
|
+
}, Po = async (e) => {
|
|
4028
4033
|
let n = (e.now ?? (() => /* @__PURE__ */ new Date()))(), r = await e.store.query({
|
|
4029
4034
|
table: Y,
|
|
4030
4035
|
predicate: t(d("status", "pending"), te("nextAttemptAt", n)),
|
|
@@ -4042,7 +4047,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4042
4047
|
s++;
|
|
4043
4048
|
continue;
|
|
4044
4049
|
}
|
|
4045
|
-
let u = t.attempts + 1, d = t.maxAttempts ??
|
|
4050
|
+
let u = t.attempts + 1, d = t.maxAttempts ?? Do, f = /* @__PURE__ */ new Date(), p = e.attemptLogCap ?? 50;
|
|
4046
4051
|
try {
|
|
4047
4052
|
let n = await l.handler({
|
|
4048
4053
|
payload: t.payload ?? {},
|
|
@@ -4051,7 +4056,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4051
4056
|
tenantId: t.tenantId ?? null,
|
|
4052
4057
|
traceId: t.traceId ?? null
|
|
4053
4058
|
});
|
|
4054
|
-
await
|
|
4059
|
+
await No(e.store, {
|
|
4055
4060
|
outboxRow: t,
|
|
4056
4061
|
attempt: u,
|
|
4057
4062
|
outcome: "delivered",
|
|
@@ -4069,7 +4074,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4069
4074
|
}), i++;
|
|
4070
4075
|
} catch (i) {
|
|
4071
4076
|
let s = i instanceof Error ? i.message : String(i), l = u >= d;
|
|
4072
|
-
await
|
|
4077
|
+
await No(e.store, {
|
|
4073
4078
|
outboxRow: t,
|
|
4074
4079
|
attempt: u,
|
|
4075
4080
|
outcome: l ? "dead" : "failed",
|
|
@@ -4081,20 +4086,20 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4081
4086
|
status: l ? "dead" : "pending",
|
|
4082
4087
|
attempts: u,
|
|
4083
4088
|
lastError: s,
|
|
4084
|
-
nextAttemptAt: new Date(n.getTime() +
|
|
4089
|
+
nextAttemptAt: new Date(n.getTime() + ko(u)),
|
|
4085
4090
|
resendRequestedBy: null,
|
|
4086
4091
|
resendReason: null
|
|
4087
|
-
}), l ? (o++,
|
|
4092
|
+
}), l ? (o++, bo.error("outbox effect dead-lettered after exhausting attempts", {
|
|
4088
4093
|
id: r,
|
|
4089
4094
|
effect: c,
|
|
4090
4095
|
attempts: u,
|
|
4091
4096
|
maxAttempts: d
|
|
4092
|
-
}, i)) : (a++,
|
|
4097
|
+
}, i)) : (a++, bo.warn("outbox delivery failed; will retry", {
|
|
4093
4098
|
id: r,
|
|
4094
4099
|
effect: c,
|
|
4095
4100
|
attempt: u,
|
|
4096
4101
|
maxAttempts: d,
|
|
4097
|
-
retryInMs:
|
|
4102
|
+
retryInMs: ko(u)
|
|
4098
4103
|
}));
|
|
4099
4104
|
}
|
|
4100
4105
|
}
|
|
@@ -4104,10 +4109,10 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4104
4109
|
dead: o,
|
|
4105
4110
|
skipped: s
|
|
4106
4111
|
};
|
|
4107
|
-
},
|
|
4112
|
+
}, Fo = M({ scope: "voltro:connections" }), X = "_voltro_connections", Io = {
|
|
4108
4113
|
kind: "typeid",
|
|
4109
4114
|
prefix: "conn"
|
|
4110
|
-
},
|
|
4115
|
+
}, Lo = O(X, {
|
|
4111
4116
|
id: y({ prefix: "conn" }),
|
|
4112
4117
|
connectionId: k(),
|
|
4113
4118
|
subjectId: k(),
|
|
@@ -4130,10 +4135,10 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4130
4135
|
metadata: T().nullable(),
|
|
4131
4136
|
connectedAt: A(),
|
|
4132
4137
|
updatedAt: A()
|
|
4133
|
-
}).unique("bySubject", ["connectionId", "subjectId"]).index(["subjectId"]),
|
|
4138
|
+
}).unique("bySubject", ["connectionId", "subjectId"]).index(["subjectId"]), Ro = "_voltro_connection_grants", zo = {
|
|
4134
4139
|
kind: "typeid",
|
|
4135
4140
|
prefix: "cgrant"
|
|
4136
|
-
},
|
|
4141
|
+
}, Bo = O(Ro, {
|
|
4137
4142
|
id: y({ prefix: "cgrant" }),
|
|
4138
4143
|
state: k().unique(),
|
|
4139
4144
|
connectionId: k(),
|
|
@@ -4143,8 +4148,8 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4143
4148
|
redirectTo: k(),
|
|
4144
4149
|
createdAt: A(),
|
|
4145
4150
|
expiresAt: A()
|
|
4146
|
-
}).index(["expiresAt"]),
|
|
4147
|
-
if (!
|
|
4151
|
+
}).index(["expiresAt"]), Vo = /^[a-z][a-z0-9-]*$/, Ho = (e) => {
|
|
4152
|
+
if (!Vo.test(e.id)) throw Error(`defineConnection: id "${e.id}" must be lowercase kebab-case (it becomes a URL path segment).`);
|
|
4148
4153
|
if (e.kind === "oauth2") {
|
|
4149
4154
|
for (let t of [
|
|
4150
4155
|
"authorizeUrl",
|
|
@@ -4154,9 +4159,9 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4154
4159
|
]) if (typeof e[t] != "string" || e[t].length === 0) throw Error(`defineConnection("${e.id}"): \`${t}\` is required for kind 'oauth2'.`);
|
|
4155
4160
|
}
|
|
4156
4161
|
return e;
|
|
4157
|
-
},
|
|
4162
|
+
}, Uo = (e) => e.label ?? e.id, Wo = (e) => {
|
|
4158
4163
|
if (e.length !== 0 && q() === 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).`);
|
|
4159
|
-
},
|
|
4164
|
+
}, Go = (e) => {
|
|
4160
4165
|
let t = /* @__PURE__ */ new Map();
|
|
4161
4166
|
for (let n of e) {
|
|
4162
4167
|
if (t.has(n.id)) throw Error(`connections: duplicate connection id "${n.id}" — each *.connection.ts must declare a distinct id.`);
|
|
@@ -4166,14 +4171,14 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4166
4171
|
get: (e) => t.get(e),
|
|
4167
4172
|
list: () => [...t.values()]
|
|
4168
4173
|
};
|
|
4169
|
-
},
|
|
4174
|
+
}, Ko = (e) => {
|
|
4170
4175
|
if (e == null) return null;
|
|
4171
4176
|
let t = e instanceof Date ? e : new Date(String(e));
|
|
4172
4177
|
return Number.isNaN(t.getTime()) ? null : t;
|
|
4173
|
-
},
|
|
4178
|
+
}, qo = (e) => Ko(e)?.toISOString() ?? null, Jo = (e) => String(e ?? "").split(" ").filter((e) => e.length > 0), Yo = (e, t) => t === void 0 ? {
|
|
4174
4179
|
connectionId: e.id,
|
|
4175
4180
|
kind: e.kind,
|
|
4176
|
-
label:
|
|
4181
|
+
label: Uo(e),
|
|
4177
4182
|
status: "disconnected",
|
|
4178
4183
|
accountId: null,
|
|
4179
4184
|
accountLabel: null,
|
|
@@ -4184,24 +4189,24 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4184
4189
|
} : {
|
|
4185
4190
|
connectionId: e.id,
|
|
4186
4191
|
kind: e.kind,
|
|
4187
|
-
label:
|
|
4192
|
+
label: Uo(e),
|
|
4188
4193
|
status: String(t.status ?? "connected"),
|
|
4189
4194
|
accountId: t.accountId ?? null,
|
|
4190
4195
|
accountLabel: t.accountLabel ?? null,
|
|
4191
|
-
scopes:
|
|
4192
|
-
expiresAt:
|
|
4196
|
+
scopes: Jo(t.scopes),
|
|
4197
|
+
expiresAt: qo(t.expiresAt),
|
|
4193
4198
|
lastError: t.lastError ?? null,
|
|
4194
|
-
connectedAt:
|
|
4195
|
-
},
|
|
4199
|
+
connectedAt: qo(t.connectedAt)
|
|
4200
|
+
}, Xo = async (e, n, r) => (await e.query({
|
|
4196
4201
|
table: X,
|
|
4197
4202
|
predicate: t(d("connectionId", n), d("subjectId", r)),
|
|
4198
4203
|
order: [],
|
|
4199
4204
|
take: 1,
|
|
4200
4205
|
skip: void 0,
|
|
4201
4206
|
projection: void 0
|
|
4202
|
-
}))[0],
|
|
4207
|
+
}))[0], Zo = async (e) => {
|
|
4203
4208
|
let t = (e.now ?? (() => /* @__PURE__ */ new Date()))(), n = e.tokens.expiresAt === void 0 ? null : new Date(e.tokens.expiresAt), r = {
|
|
4204
|
-
id: p(
|
|
4209
|
+
id: p(Io, X),
|
|
4205
4210
|
connectionId: e.definition.id,
|
|
4206
4211
|
subjectId: e.subjectId,
|
|
4207
4212
|
tenantId: e.tenantId,
|
|
@@ -4219,8 +4224,8 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4219
4224
|
connectedAt: t,
|
|
4220
4225
|
updatedAt: t
|
|
4221
4226
|
};
|
|
4222
|
-
return
|
|
4223
|
-
},
|
|
4227
|
+
return Qo(e.store, r);
|
|
4228
|
+
}, Qo = (e, t) => e.upsert(X, t, {
|
|
4224
4229
|
conflictColumns: ["connectionId", "subjectId"],
|
|
4225
4230
|
update: [
|
|
4226
4231
|
"kind",
|
|
@@ -4236,10 +4241,10 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4236
4241
|
"metadata",
|
|
4237
4242
|
"updatedAt"
|
|
4238
4243
|
]
|
|
4239
|
-
}),
|
|
4240
|
-
let r = await
|
|
4244
|
+
}), $o = async (e, t, n) => {
|
|
4245
|
+
let r = await Xo(e, t, n);
|
|
4241
4246
|
return r !== void 0 && e.delete(X, r.id);
|
|
4242
|
-
},
|
|
4247
|
+
}, es = async (e, t, n) => {
|
|
4243
4248
|
let r = await e.query({
|
|
4244
4249
|
table: X,
|
|
4245
4250
|
predicate: d("subjectId", n),
|
|
@@ -4248,9 +4253,9 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4248
4253
|
skip: void 0,
|
|
4249
4254
|
projection: void 0
|
|
4250
4255
|
}), i = new Map(r.map((e) => [String(e.connectionId), e]));
|
|
4251
|
-
return t.list().map((e) =>
|
|
4252
|
-
},
|
|
4253
|
-
let r = e.fetchImpl ??
|
|
4256
|
+
return t.list().map((e) => Yo(e, i.get(e.id)));
|
|
4257
|
+
}, ts = (e, t) => globalThis.fetch(e, t), ns = async (e, t, n) => {
|
|
4258
|
+
let r = e.fetchImpl ?? ts, i, a;
|
|
4254
4259
|
try {
|
|
4255
4260
|
let n = await r(e.tokenUrl, {
|
|
4256
4261
|
method: "POST",
|
|
@@ -4290,62 +4295,62 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4290
4295
|
...Number.isFinite(o.expires_in) ? { expiresAt: n() + o.expires_in * 1e3 } : {},
|
|
4291
4296
|
scopes: (o.scope ?? e.scopes?.join(" ") ?? "").split(" ").filter(Boolean)
|
|
4292
4297
|
};
|
|
4293
|
-
},
|
|
4298
|
+
}, rs = (e, t, n = Date.now) => ns(e, {
|
|
4294
4299
|
grant_type: "authorization_code",
|
|
4295
4300
|
client_id: e.clientId,
|
|
4296
4301
|
client_secret: e.clientSecret,
|
|
4297
4302
|
code: t.code,
|
|
4298
4303
|
redirect_uri: t.redirectUri,
|
|
4299
4304
|
...t.codeVerifier ? { code_verifier: t.codeVerifier } : {}
|
|
4300
|
-
}, n),
|
|
4305
|
+
}, n), is = (e, t, n = Date.now) => ns(e, {
|
|
4301
4306
|
grant_type: "refresh_token",
|
|
4302
4307
|
client_id: e.clientId,
|
|
4303
4308
|
client_secret: e.clientSecret,
|
|
4304
4309
|
refresh_token: t
|
|
4305
|
-
}, n),
|
|
4310
|
+
}, n), as = 6e4, os = 3e4, ss = class extends Error {
|
|
4306
4311
|
connectionId;
|
|
4307
4312
|
subjectId;
|
|
4308
4313
|
_tag = "ConnectionNotConnected";
|
|
4309
4314
|
constructor(e, t) {
|
|
4310
4315
|
super(`connection "${e}" is not connected for this subject`), this.connectionId = e, this.subjectId = t, this.name = "ConnectionNotConnected";
|
|
4311
4316
|
}
|
|
4312
|
-
},
|
|
4317
|
+
}, cs = (e) => new Promise((t) => {
|
|
4313
4318
|
setTimeout(t, e);
|
|
4314
|
-
}),
|
|
4315
|
-
|
|
4316
|
-
},
|
|
4319
|
+
}), ls = /* @__PURE__ */ new Map(), us = (e, t) => `${e}${t}`, ds = () => {
|
|
4320
|
+
ls.clear();
|
|
4321
|
+
}, fs = (e, t) => ({
|
|
4317
4322
|
connectionId: e.id,
|
|
4318
4323
|
kind: e.kind,
|
|
4319
4324
|
accessToken: Mr(String(t.accessToken)),
|
|
4320
|
-
expiresAt:
|
|
4321
|
-
scopes:
|
|
4325
|
+
expiresAt: Ko(t.expiresAt),
|
|
4326
|
+
scopes: Jo(t.scopes),
|
|
4322
4327
|
accountId: t.accountId ?? null,
|
|
4323
4328
|
accountLabel: t.accountLabel ?? null
|
|
4324
|
-
}),
|
|
4325
|
-
let r =
|
|
4329
|
+
}), ps = (e, t, n) => {
|
|
4330
|
+
let r = Ko(e.expiresAt);
|
|
4326
4331
|
return r !== null && r.getTime() - n < t;
|
|
4327
|
-
},
|
|
4328
|
-
let t = e.now ?? Date.now, { store: n, definition: r, subjectId: i } = e, a = await
|
|
4329
|
-
if (a === void 0) throw new
|
|
4330
|
-
if (r.kind === "pat" || !
|
|
4331
|
-
let o =
|
|
4332
|
+
}, ms = async (e) => {
|
|
4333
|
+
let t = e.now ?? Date.now, { store: n, definition: r, subjectId: i } = e, a = await Xo(n, r.id, i);
|
|
4334
|
+
if (a === void 0) throw new ss(r.id, i);
|
|
4335
|
+
if (r.kind === "pat" || !ps(a, r.refreshSkewMs ?? 6e4, t())) return fs(r, a);
|
|
4336
|
+
let o = us(r.id, i), s = ls.get(o);
|
|
4332
4337
|
if (s !== void 0) return s;
|
|
4333
|
-
let c =
|
|
4338
|
+
let c = hs({
|
|
4334
4339
|
...e,
|
|
4335
4340
|
now: t,
|
|
4336
4341
|
row: a
|
|
4337
4342
|
}).finally(() => {
|
|
4338
|
-
|
|
4343
|
+
ls.delete(o);
|
|
4339
4344
|
});
|
|
4340
|
-
return
|
|
4341
|
-
},
|
|
4342
|
-
let { store: n, subjectId: r, now: i } = e, a = e.definition, o = e.sleep ??
|
|
4345
|
+
return ls.set(o, c), c;
|
|
4346
|
+
}, hs = async (e) => {
|
|
4347
|
+
let { store: n, subjectId: r, now: i } = e, a = e.definition, o = e.sleep ?? cs, s = a.refreshSkewMs ?? 6e4, c = e.row.id;
|
|
4343
4348
|
if (await n.updateMany("_voltro_connections", { refreshLockedUntil: new Date(i() + 3e4) }, { where: t(d("id", c), te("refreshLockedUntil", new Date(i()))) }) === 0) {
|
|
4344
4349
|
for (let e = 0; e < 10; e++) {
|
|
4345
4350
|
await o(200);
|
|
4346
|
-
let e = await
|
|
4347
|
-
if (e === void 0) throw new
|
|
4348
|
-
if (!
|
|
4351
|
+
let e = await Xo(n, a.id, r);
|
|
4352
|
+
if (e === void 0) throw new ss(a.id, r);
|
|
4353
|
+
if (!ps(e, s, i())) return fs(a, e);
|
|
4349
4354
|
}
|
|
4350
4355
|
throw new j({
|
|
4351
4356
|
connectionId: a.id,
|
|
@@ -4366,7 +4371,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4366
4371
|
});
|
|
4367
4372
|
let u;
|
|
4368
4373
|
try {
|
|
4369
|
-
u = await
|
|
4374
|
+
u = await is(a, Mr(String(l)), i);
|
|
4370
4375
|
} catch (e) {
|
|
4371
4376
|
let t = e instanceof j ? e : new j({
|
|
4372
4377
|
connectionId: a.id,
|
|
@@ -4383,7 +4388,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4383
4388
|
refreshToken: null,
|
|
4384
4389
|
expiresAt: null
|
|
4385
4390
|
}
|
|
4386
|
-
}),
|
|
4391
|
+
}), Fo.warn("connection refresh failed", {
|
|
4387
4392
|
connectionId: a.id,
|
|
4388
4393
|
transient: t.transient,
|
|
4389
4394
|
reason: t.reason
|
|
@@ -4399,32 +4404,32 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4399
4404
|
refreshLockedUntil: /* @__PURE__ */ new Date(0),
|
|
4400
4405
|
updatedAt: new Date(i())
|
|
4401
4406
|
};
|
|
4402
|
-
return
|
|
4407
|
+
return fs(a, await n.update(X, c, f) ?? {
|
|
4403
4408
|
...e.row,
|
|
4404
4409
|
...f
|
|
4405
4410
|
});
|
|
4406
|
-
},
|
|
4411
|
+
}, gs = (e = 32) => {
|
|
4407
4412
|
let t = new Uint8Array(e);
|
|
4408
4413
|
return globalThis.crypto.getRandomValues(t), Array.from(t, (e) => e.toString(16).padStart(2, "0")).join("");
|
|
4409
|
-
},
|
|
4414
|
+
}, _s = (e) => {
|
|
4410
4415
|
let t = "";
|
|
4411
4416
|
for (let n of e) t += String.fromCharCode(n);
|
|
4412
4417
|
return btoa(t).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
4413
|
-
},
|
|
4418
|
+
}, vs = async (e) => {
|
|
4414
4419
|
let t = await globalThis.crypto.subtle.digest("SHA-256", new TextEncoder().encode(e));
|
|
4415
|
-
return
|
|
4416
|
-
},
|
|
4417
|
-
let t = (e.now ?? (() => /* @__PURE__ */ new Date()))(), { definition: n } = e, r =
|
|
4418
|
-
await e.store.insert(
|
|
4419
|
-
id: p(
|
|
4420
|
+
return _s(new Uint8Array(t));
|
|
4421
|
+
}, ys = 10 * 6e4, bs = (e) => `/_voltro/connections/${e}/callback`, xs = (e) => e === void 0 || e.length === 0 || !e.startsWith("/") || e.startsWith("//") || e.startsWith("/\\") ? "/" : e, Ss = (e, t) => e.redirectUri ?? `${t.replace(/\/+$/, "")}${bs(e.id)}`, Cs = async (e) => {
|
|
4422
|
+
let t = (e.now ?? (() => /* @__PURE__ */ new Date()))(), { definition: n } = e, r = gs(), i = n.pkce === !1 ? null : gs(48), a = Ss(n, e.publicUrl);
|
|
4423
|
+
await e.store.insert(Ro, {
|
|
4424
|
+
id: p(zo, Ro),
|
|
4420
4425
|
state: r,
|
|
4421
4426
|
connectionId: n.id,
|
|
4422
4427
|
subjectId: e.subjectId,
|
|
4423
4428
|
tenantId: e.tenantId,
|
|
4424
4429
|
codeVerifier: i === null ? null : jr(i),
|
|
4425
|
-
redirectTo:
|
|
4430
|
+
redirectTo: xs(e.redirectTo),
|
|
4426
4431
|
createdAt: t,
|
|
4427
|
-
expiresAt: new Date(t.getTime() +
|
|
4432
|
+
expiresAt: new Date(t.getTime() + ys)
|
|
4428
4433
|
});
|
|
4429
4434
|
let o = new URLSearchParams({
|
|
4430
4435
|
response_type: "code",
|
|
@@ -4434,15 +4439,15 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4434
4439
|
...n.scopes && n.scopes.length > 0 ? { scope: n.scopes.join(" ") } : {},
|
|
4435
4440
|
...n.authorizeParams ?? {}
|
|
4436
4441
|
});
|
|
4437
|
-
i !== null && (o.set("code_challenge", await
|
|
4442
|
+
i !== null && (o.set("code_challenge", await vs(i)), o.set("code_challenge_method", "S256"));
|
|
4438
4443
|
let s = n.authorizeUrl.includes("?") ? "&" : "?";
|
|
4439
4444
|
return {
|
|
4440
4445
|
authorizeUrl: `${n.authorizeUrl}${s}${o.toString()}`,
|
|
4441
4446
|
state: r
|
|
4442
4447
|
};
|
|
4443
|
-
},
|
|
4448
|
+
}, ws = async (e) => {
|
|
4444
4449
|
let t = (e.now ?? (() => /* @__PURE__ */ new Date()))(), n = (await e.store.query({
|
|
4445
|
-
table:
|
|
4450
|
+
table: Ro,
|
|
4446
4451
|
predicate: d("state", e.state),
|
|
4447
4452
|
order: [],
|
|
4448
4453
|
take: 1,
|
|
@@ -4454,8 +4459,8 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4454
4459
|
reason: "unknown or already-used handshake state",
|
|
4455
4460
|
transient: !1
|
|
4456
4461
|
});
|
|
4457
|
-
await e.store.delete(
|
|
4458
|
-
let r = String(n.connectionId), i =
|
|
4462
|
+
await e.store.delete(Ro, n.id);
|
|
4463
|
+
let r = String(n.connectionId), i = Ko(n.expiresAt);
|
|
4459
4464
|
if (i !== null && i.getTime() < t.getTime()) throw new j({
|
|
4460
4465
|
connectionId: r,
|
|
4461
4466
|
reason: "handshake expired — start again",
|
|
@@ -4467,17 +4472,17 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4467
4472
|
reason: "no oauth2 connection is declared under that id",
|
|
4468
4473
|
transient: !1
|
|
4469
4474
|
});
|
|
4470
|
-
let o = n.codeVerifier === null || n.codeVerifier === void 0 ? null : Mr(String(n.codeVerifier)), s = await
|
|
4475
|
+
let o = n.codeVerifier === null || n.codeVerifier === void 0 ? null : Mr(String(n.codeVerifier)), s = await rs(a, {
|
|
4471
4476
|
code: e.code,
|
|
4472
|
-
redirectUri:
|
|
4477
|
+
redirectUri: Ss(a, e.publicUrl),
|
|
4473
4478
|
codeVerifier: o
|
|
4474
4479
|
}, () => t.getTime()), c = a.identify === void 0 ? void 0 : await a.identify(s).catch((e) => {
|
|
4475
|
-
|
|
4480
|
+
Fo.warn("connection identify failed; storing without account details", {
|
|
4476
4481
|
connectionId: r,
|
|
4477
4482
|
reason: String(e)
|
|
4478
4483
|
});
|
|
4479
4484
|
});
|
|
4480
|
-
return await
|
|
4485
|
+
return await Zo({
|
|
4481
4486
|
store: e.store,
|
|
4482
4487
|
definition: a,
|
|
4483
4488
|
subjectId: String(n.subjectId),
|
|
@@ -4487,11 +4492,11 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4487
4492
|
now: () => t
|
|
4488
4493
|
}), {
|
|
4489
4494
|
connectionId: r,
|
|
4490
|
-
redirectTo:
|
|
4495
|
+
redirectTo: xs(String(n.redirectTo ?? "/"))
|
|
4491
4496
|
};
|
|
4492
|
-
},
|
|
4497
|
+
}, Ts = async (e, t = /* @__PURE__ */ new Date()) => {
|
|
4493
4498
|
let n = await e.query({
|
|
4494
|
-
table:
|
|
4499
|
+
table: Ro,
|
|
4495
4500
|
predicate: te("expiresAt", t),
|
|
4496
4501
|
order: [],
|
|
4497
4502
|
take: void 0,
|
|
@@ -4500,27 +4505,27 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4500
4505
|
}), r = 0;
|
|
4501
4506
|
for (let t of n) await e.delete("_voltro_connection_grants", t.id) && r++;
|
|
4502
4507
|
return r;
|
|
4503
|
-
},
|
|
4504
|
-
|
|
4505
|
-
},
|
|
4506
|
-
let n =
|
|
4508
|
+
}, Es, Ds = (e) => {
|
|
4509
|
+
Es = e;
|
|
4510
|
+
}, Os = () => Es, ks = (e, t) => {
|
|
4511
|
+
let n = Es;
|
|
4507
4512
|
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);
|
|
4508
|
-
},
|
|
4513
|
+
}, As = (e) => async (t, n) => {
|
|
4509
4514
|
let r = e.registry.get(n);
|
|
4510
4515
|
if (r === void 0) throw Error(`connection "${n}" is not declared. Declared: ${e.registry.list().map((e) => e.id).join(", ") || "(none)"}.`);
|
|
4511
4516
|
let i = t.id ?? null;
|
|
4512
|
-
if (i === null || i === "") throw new
|
|
4513
|
-
return
|
|
4517
|
+
if (i === null || i === "") throw new ss(n, "<anonymous>");
|
|
4518
|
+
return ms({
|
|
4514
4519
|
store: e.store,
|
|
4515
4520
|
definition: r,
|
|
4516
4521
|
subjectId: i
|
|
4517
4522
|
});
|
|
4518
|
-
},
|
|
4523
|
+
}, js = (e) => {
|
|
4519
4524
|
let t = e.subject.id ?? null, n = async (n) => {
|
|
4520
4525
|
let r = e.registry.get(n);
|
|
4521
4526
|
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)"}.`);
|
|
4522
|
-
if (t === null || t === "") throw new
|
|
4523
|
-
return
|
|
4527
|
+
if (t === null || t === "") throw new ss(n, "<anonymous>");
|
|
4528
|
+
return ms({
|
|
4524
4529
|
store: e.store,
|
|
4525
4530
|
definition: r,
|
|
4526
4531
|
subjectId: t
|
|
@@ -4532,7 +4537,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4532
4537
|
try {
|
|
4533
4538
|
return await n(e);
|
|
4534
4539
|
} catch (e) {
|
|
4535
|
-
if (e instanceof
|
|
4540
|
+
if (e instanceof ss) return null;
|
|
4536
4541
|
throw e;
|
|
4537
4542
|
}
|
|
4538
4543
|
},
|
|
@@ -4547,17 +4552,17 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4547
4552
|
expiresAt: null,
|
|
4548
4553
|
lastError: null,
|
|
4549
4554
|
connectedAt: null
|
|
4550
|
-
})) :
|
|
4555
|
+
})) : es(e.store, e.registry, t)
|
|
4551
4556
|
};
|
|
4552
|
-
},
|
|
4557
|
+
}, Ms = (e, t) => {
|
|
4553
4558
|
let n = e.request?.subject?.id ?? null;
|
|
4554
4559
|
if (n === null || n === "") throw new je({ connectionId: t });
|
|
4555
4560
|
return n;
|
|
4556
|
-
},
|
|
4561
|
+
}, Ns = (e, t) => {
|
|
4557
4562
|
let n = e.registry.get(t);
|
|
4558
4563
|
if (n === void 0) throw new Ae({ connectionId: t });
|
|
4559
4564
|
return n;
|
|
4560
|
-
},
|
|
4565
|
+
}, Ps = (e) => async (t, n) => {
|
|
4561
4566
|
let r = n.request?.subject?.id ?? null;
|
|
4562
4567
|
return r === null || r === "" ? e.registry.list().map((e) => ({
|
|
4563
4568
|
connectionId: e.id,
|
|
@@ -4570,15 +4575,15 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4570
4575
|
expiresAt: null,
|
|
4571
4576
|
lastError: null,
|
|
4572
4577
|
connectedAt: null
|
|
4573
|
-
})) :
|
|
4574
|
-
},
|
|
4575
|
-
let r =
|
|
4578
|
+
})) : es(n.store, e.registry, r);
|
|
4579
|
+
}, Fs = (e) => async (t, n) => {
|
|
4580
|
+
let r = Ns(e, t.connectionId), i = Ms(n, t.connectionId);
|
|
4576
4581
|
if (r.kind !== "oauth2") throw new ke({
|
|
4577
4582
|
connectionId: t.connectionId,
|
|
4578
4583
|
expected: "oauth2",
|
|
4579
4584
|
actual: r.kind
|
|
4580
4585
|
});
|
|
4581
|
-
return
|
|
4586
|
+
return Cs({
|
|
4582
4587
|
store: n.store,
|
|
4583
4588
|
definition: r,
|
|
4584
4589
|
subjectId: i,
|
|
@@ -4586,8 +4591,8 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4586
4591
|
publicUrl: e.publicUrl,
|
|
4587
4592
|
...t.redirectTo === void 0 ? {} : { redirectTo: t.redirectTo }
|
|
4588
4593
|
});
|
|
4589
|
-
},
|
|
4590
|
-
let r =
|
|
4594
|
+
}, Is = (e) => async (t, n) => {
|
|
4595
|
+
let r = Ns(e, t.connectionId), i = Ms(n, t.connectionId);
|
|
4591
4596
|
if (r.kind !== "pat") throw new ke({
|
|
4592
4597
|
connectionId: t.connectionId,
|
|
4593
4598
|
expected: "pat",
|
|
@@ -4609,7 +4614,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4609
4614
|
transient: !1
|
|
4610
4615
|
});
|
|
4611
4616
|
}
|
|
4612
|
-
return await
|
|
4617
|
+
return await Zo({
|
|
4613
4618
|
store: n.store,
|
|
4614
4619
|
definition: r,
|
|
4615
4620
|
subjectId: i,
|
|
@@ -4620,20 +4625,20 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4620
4625
|
},
|
|
4621
4626
|
...o === void 0 ? {} : { account: o }
|
|
4622
4627
|
}), { ok: !0 };
|
|
4623
|
-
},
|
|
4624
|
-
|
|
4625
|
-
let r =
|
|
4626
|
-
return { ok: await
|
|
4627
|
-
},
|
|
4628
|
+
}, Ls = (e) => async (t, n) => {
|
|
4629
|
+
Ns(e, t.connectionId);
|
|
4630
|
+
let r = Ms(n, t.connectionId);
|
|
4631
|
+
return { ok: await $o(n.store, t.connectionId, r) };
|
|
4632
|
+
}, Rs = "admin:full", zs = class extends z.TaggedError()("AccessDenied", {
|
|
4628
4633
|
action: z.String,
|
|
4629
4634
|
resourceType: z.String,
|
|
4630
4635
|
resourceId: z.String
|
|
4631
|
-
}) {},
|
|
4636
|
+
}) {}, Bs = /* @__PURE__ */ new Map(), Vs = (e) => {
|
|
4632
4637
|
if (typeof e.resourceType != "string" || e.resourceType.length === 0) throw Error("defineResourcePolicy: a non-empty `resourceType` is required");
|
|
4633
4638
|
if (e.actions === void 0 || Object.keys(e.actions).length === 0) throw Error(`resource policy '${e.resourceType}': at least one action is required`);
|
|
4634
|
-
if (
|
|
4635
|
-
return
|
|
4636
|
-
},
|
|
4639
|
+
if (Bs.has(e.resourceType)) throw Error(`resource policy '${e.resourceType}' is already registered — types must be unique`);
|
|
4640
|
+
return Bs.set(e.resourceType, e), e;
|
|
4641
|
+
}, Hs = (e) => Bs.get(e), Us = () => [...Bs.values()], Ws = () => Bs.clear(), Gs = () => Us().map((e) => {
|
|
4637
4642
|
let t = /* @__PURE__ */ new Set();
|
|
4638
4643
|
for (let n of Object.values(e.actions)) for (let e of n) t.add(e);
|
|
4639
4644
|
for (let [n, r] of Object.entries(e.implies ?? {})) {
|
|
@@ -4646,7 +4651,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4646
4651
|
relations: [...t],
|
|
4647
4652
|
implies: e.implies ?? {}
|
|
4648
4653
|
};
|
|
4649
|
-
}),
|
|
4654
|
+
}), Ks = (e, t) => {
|
|
4650
4655
|
let n = new Set(e);
|
|
4651
4656
|
if (t === void 0) return n;
|
|
4652
4657
|
let r = [...e];
|
|
@@ -4655,37 +4660,37 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4655
4660
|
for (let i of t[e] ?? []) n.has(i) || (n.add(i), r.push(i));
|
|
4656
4661
|
}
|
|
4657
4662
|
return n;
|
|
4658
|
-
},
|
|
4663
|
+
}, qs = (e, t, n, r) => e.id === null ? /* @__PURE__ */ new Set() : Ks(n.filter((n) => n.subjectId === e.id && n.resourceType === t.type && n.resourceId === t.id).map((e) => e.relation), r.implies), Js = (e, t, n, r) => {
|
|
4659
4664
|
if (e.scopes?.includes("admin:full")) return !0;
|
|
4660
4665
|
if (e.id === null || n.tenantId != null && e.tenantId !== n.tenantId) return !1;
|
|
4661
4666
|
let i = r.policy.actions[t];
|
|
4662
4667
|
if (i === void 0 || i.length === 0) return !1;
|
|
4663
|
-
let a =
|
|
4668
|
+
let a = qs(e, n, r.tuples, r.policy);
|
|
4664
4669
|
return i.some((e) => a.has(e));
|
|
4665
|
-
},
|
|
4666
|
-
if (!
|
|
4670
|
+
}, Ys = (e, t, n, r) => {
|
|
4671
|
+
if (!Js(e, t, n, r)) throw new zs({
|
|
4667
4672
|
action: t,
|
|
4668
4673
|
resourceType: n.type,
|
|
4669
4674
|
resourceId: n.id
|
|
4670
4675
|
});
|
|
4671
|
-
},
|
|
4676
|
+
}, Xs = (e, t, n, r, i) => r.filter((r) => Js(e, t, {
|
|
4672
4677
|
type: n,
|
|
4673
4678
|
id: r.id,
|
|
4674
4679
|
...r.tenantId === void 0 ? {} : { tenantId: r.tenantId }
|
|
4675
|
-
}, i)),
|
|
4680
|
+
}, i)), Zs = (e, t) => {
|
|
4676
4681
|
let n = new Set(t.map((e) => e.id));
|
|
4677
4682
|
return e.filter((e) => !n.has(e.id)).map((e) => e.id);
|
|
4678
|
-
},
|
|
4679
|
-
|
|
4680
|
-
},
|
|
4683
|
+
}, Qs = M({ scope: "voltro:policy" }), $s, ec = (e) => {
|
|
4684
|
+
$s = e;
|
|
4685
|
+
}, tc = () => $s, nc = () => {
|
|
4681
4686
|
Ge((e) => F.gen(function* () {
|
|
4682
|
-
let t =
|
|
4683
|
-
if (t === void 0) return
|
|
4687
|
+
let t = Hs(e.resourceType);
|
|
4688
|
+
if (t === void 0) return Qs.warn("policy guard denied — no resource policy registered for this type", {
|
|
4684
4689
|
resourceType: e.resourceType,
|
|
4685
4690
|
action: e.action
|
|
4686
4691
|
}), !1;
|
|
4687
|
-
let n =
|
|
4688
|
-
if (n === void 0) return
|
|
4692
|
+
let n = $s;
|
|
4693
|
+
if (n === void 0) return Qs.warn("policy guard denied — no tuple source registered (call setTupleSource at boot)", {
|
|
4689
4694
|
resourceType: e.resourceType,
|
|
4690
4695
|
action: e.action
|
|
4691
4696
|
}), !1;
|
|
@@ -4696,11 +4701,11 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4696
4701
|
resourceId: e.resourceId
|
|
4697
4702
|
}),
|
|
4698
4703
|
catch: (e) => e
|
|
4699
|
-
}).pipe(F.catchAll((t) => (
|
|
4704
|
+
}).pipe(F.catchAll((t) => (Qs.error("policy guard denied — tuple source failed", {
|
|
4700
4705
|
resourceType: e.resourceType,
|
|
4701
4706
|
resourceId: e.resourceId
|
|
4702
4707
|
}, t), F.succeed([])))), i = e.subject;
|
|
4703
|
-
return
|
|
4708
|
+
return Js({
|
|
4704
4709
|
id: e.subject.id,
|
|
4705
4710
|
tenantId: i.tenantId ?? null,
|
|
4706
4711
|
...i.scopes === void 0 ? {} : { scopes: i.scopes }
|
|
@@ -4713,10 +4718,10 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4713
4718
|
tuples: r
|
|
4714
4719
|
});
|
|
4715
4720
|
}));
|
|
4716
|
-
}, nc = (e) => {
|
|
4717
|
-
Promise.resolve().then(e);
|
|
4718
4721
|
}, rc = (e) => {
|
|
4719
|
-
|
|
4722
|
+
Promise.resolve().then(e);
|
|
4723
|
+
}, ic = (e) => {
|
|
4724
|
+
let t = e.schedule ?? rc, n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map(), i = (e, t) => `${e}${t}`, a = async (t) => {
|
|
4720
4725
|
let a = r.get(t);
|
|
4721
4726
|
if (a === void 0) return;
|
|
4722
4727
|
r.delete(t);
|
|
@@ -4762,23 +4767,23 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4762
4767
|
load: async (e, t) => (await o(e, [t]))[0] ?? null,
|
|
4763
4768
|
loadMany: (e, t) => o(e, t)
|
|
4764
4769
|
};
|
|
4765
|
-
},
|
|
4770
|
+
}, ac = I.effect(lt.HttpClient, F.map(lt.HttpClient, (e) => e.pipe(lt.mapRequestEffect((e) => F.currentSpan.pipe(F.map((t) => e.headers.traceparent === void 0 ? ut.setHeader(e, "traceparent", yr({
|
|
4766
4771
|
traceId: t.traceId,
|
|
4767
4772
|
spanId: t.spanId,
|
|
4768
4773
|
sampled: t.sampled
|
|
4769
|
-
})) : e), F.catchAll(() => F.succeed(e))))))),
|
|
4774
|
+
})) : e), F.catchAll(() => F.succeed(e))))))), oc = class extends Error {
|
|
4770
4775
|
url;
|
|
4771
4776
|
reason;
|
|
4772
4777
|
_tag = "SsrfBlockedError";
|
|
4773
4778
|
constructor(e, t) {
|
|
4774
4779
|
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";
|
|
4775
4780
|
}
|
|
4776
|
-
},
|
|
4781
|
+
}, sc = (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, cc = (e) => e === "::" || e === "::1" || e.startsWith("fc") || e.startsWith("fd") || e.startsWith("fe80") || e.startsWith("::ffff:"), lc = (e, t, n) => n.some((n) => {
|
|
4777
4782
|
let r = n.trim().toLowerCase();
|
|
4778
4783
|
if (r === "") return !1;
|
|
4779
4784
|
let i = t === "" ? e : `${e}:${t}`;
|
|
4780
4785
|
return r === e || r === i ? !0 : r.startsWith("*.") ? e.endsWith(r.slice(1)) : !1;
|
|
4781
|
-
}),
|
|
4786
|
+
}), uc = (e, t = {}) => {
|
|
4782
4787
|
let n;
|
|
4783
4788
|
try {
|
|
4784
4789
|
n = new URL(e);
|
|
@@ -4787,25 +4792,25 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4787
4792
|
}
|
|
4788
4793
|
if (n.protocol !== "http:" && n.protocol !== "https:") return `blocked scheme "${n.protocol}"`;
|
|
4789
4794
|
let r = n.hostname.replace(/^\[|\]$/g, "").toLowerCase();
|
|
4790
|
-
if (
|
|
4795
|
+
if (lc(r, n.port, t.allowHosts ?? [])) return null;
|
|
4791
4796
|
if (r === "localhost" || r.endsWith(".localhost") || r.endsWith(".internal") || r.endsWith(".local")) return `blocked host "${r}"`;
|
|
4792
4797
|
let i = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(r);
|
|
4793
4798
|
if (i) {
|
|
4794
4799
|
let e = Number(i[1]), t = Number(i[2]);
|
|
4795
|
-
return e > 255 || t > 255 || Number(i[3]) > 255 || Number(i[4]) > 255 ? "malformed ipv4 literal" :
|
|
4800
|
+
return e > 255 || t > 255 || Number(i[3]) > 255 || Number(i[4]) > 255 ? "malformed ipv4 literal" : sc(e, t) ? `blocked private/reserved address ${r}` : null;
|
|
4796
4801
|
}
|
|
4797
4802
|
if (r.includes(":")) {
|
|
4798
4803
|
let e = /^::ffff:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/.exec(r);
|
|
4799
|
-
return e ?
|
|
4804
|
+
return e ? uc(`${n.protocol}//${e[1]}`, t) : cc(r) ? `blocked private/reserved address ${r}` : null;
|
|
4800
4805
|
}
|
|
4801
4806
|
return null;
|
|
4802
|
-
},
|
|
4807
|
+
}, dc = (e = {}) => I.effect(lt.HttpClient, F.map(lt.HttpClient, (t) => {
|
|
4803
4808
|
let n = lt.transform(t, (t, n) => F.suspend(() => {
|
|
4804
|
-
let r =
|
|
4805
|
-
return r === null ? t : F.die(new
|
|
4809
|
+
let r = uc(n.url, e);
|
|
4810
|
+
return r === null ? t : F.die(new oc(n.url, r));
|
|
4806
4811
|
}));
|
|
4807
4812
|
return lt.followRedirects(n, e.maxRedirects ?? 5);
|
|
4808
|
-
})),
|
|
4813
|
+
})), fc = (e) => {
|
|
4809
4814
|
let t = e.now ?? Date.now, n = e.intervalMs ?? 3e4, r = e.maxPending ?? 500, i = /* @__PURE__ */ new Map(), a = !1, o = async () => {
|
|
4810
4815
|
if (i.size === 0) return;
|
|
4811
4816
|
let t = i;
|
|
@@ -4834,7 +4839,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4834
4839
|
},
|
|
4835
4840
|
pending: () => i.size
|
|
4836
4841
|
};
|
|
4837
|
-
},
|
|
4842
|
+
}, pc = "voltro/audit", mc = "voltro/softDelete", hc = "voltro/tenant", gc = (e) => {
|
|
4838
4843
|
let t = /* @__PURE__ */ new Map();
|
|
4839
4844
|
for (let n of e) {
|
|
4840
4845
|
let e = /* @__PURE__ */ new Set();
|
|
@@ -4878,16 +4883,16 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4878
4883
|
return !1;
|
|
4879
4884
|
},
|
|
4880
4885
|
idScheme: (e) => t.get(e)?.idScheme,
|
|
4881
|
-
defaultFactories: (e) => t.get(e)?.defaultFactories ??
|
|
4882
|
-
computedFields: (e) => t.get(e)?.computedFields ??
|
|
4883
|
-
generatedColumns: (e) => t.get(e)?.generatedColumns ??
|
|
4886
|
+
defaultFactories: (e) => t.get(e)?.defaultFactories ?? _c,
|
|
4887
|
+
computedFields: (e) => t.get(e)?.computedFields ?? vc,
|
|
4888
|
+
generatedColumns: (e) => t.get(e)?.generatedColumns ?? yc,
|
|
4884
4889
|
insertSchema: (e) => t.get(e)?.insertSchema,
|
|
4885
4890
|
validatePatchSchema: (e) => t.get(e)?.validatePatchSchema
|
|
4886
4891
|
};
|
|
4887
|
-
},
|
|
4892
|
+
}, _c = /* @__PURE__ */ new Map(), vc = /* @__PURE__ */ new Map(), yc = /* @__PURE__ */ new Set(), bc = gc([]), xc = M({ scope: "store.fieldEncryption" }), Sc = (e, t) => {
|
|
4888
4893
|
let n = t, r = process.env.VOLTRO_FIELD_DECRYPT_ON_ERROR === "null" ? "null" : "throw", i = /* @__PURE__ */ new Set(), a = (e) => {
|
|
4889
4894
|
let t = `${e.table}.${e.column}`;
|
|
4890
|
-
i.has(t) || (i.add(t),
|
|
4895
|
+
i.has(t) || (i.add(t), xc.warn("encrypted column degraded to null — could not decrypt with the active key", {
|
|
4891
4896
|
table: e.table,
|
|
4892
4897
|
column: e.column,
|
|
4893
4898
|
reason: e.reason,
|
|
@@ -4911,7 +4916,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4911
4916
|
e.injectExternalChange(t);
|
|
4912
4917
|
},
|
|
4913
4918
|
...e.changeScope === void 0 ? {} : { changeScope: e.changeScope },
|
|
4914
|
-
...e.withNamespace === void 0 ? {} : { withNamespace: (n) =>
|
|
4919
|
+
...e.withNamespace === void 0 ? {} : { withNamespace: (n) => Sc(e.withNamespace(n), t) },
|
|
4915
4920
|
...e.raw === void 0 ? {} : { raw: ((...t) => e.raw(...t)) },
|
|
4916
4921
|
...e.close === void 0 ? {} : { close: (t) => e.close(t) },
|
|
4917
4922
|
...e.ping === void 0 ? {} : { ping: () => e.ping() },
|
|
@@ -4923,24 +4928,24 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4923
4928
|
upsert: async (t, n, r) => d(t, await e.upsert(t, o(t, n), r)),
|
|
4924
4929
|
insertIgnore: async (t, n, r) => d(t, await e.insertIgnore(t, o(t, n), r)),
|
|
4925
4930
|
patchJson: async (t, n, r, i) => d(t, await e.patchJson(t, n, r, i)),
|
|
4926
|
-
transactional: (n) => e.transactional((e) => n(
|
|
4931
|
+
transactional: (n) => e.transactional((e) => n(Sc(e, t)))
|
|
4927
4932
|
};
|
|
4928
|
-
},
|
|
4933
|
+
}, Cc = (e, t) => {
|
|
4929
4934
|
if (t === void 0 || t.length === 0) return e;
|
|
4930
4935
|
let n = { ...e };
|
|
4931
4936
|
for (let e of t) delete n[e];
|
|
4932
4937
|
return n;
|
|
4933
|
-
},
|
|
4938
|
+
}, wc = (e, t) => {
|
|
4934
4939
|
let n = h(e), r = n === void 0 ? [] : fe(n);
|
|
4935
4940
|
return r.length === 0 ? t ?? [] : t === void 0 ? r : [...t, ...r];
|
|
4936
|
-
},
|
|
4941
|
+
}, Tc = (e, t) => t.length === 0 ? e : e.map((e) => Cc(e, t)), Ec = (e, t, n, r, i) => {
|
|
4937
4942
|
let a = {
|
|
4938
4943
|
...t?.(r) ?? {},
|
|
4939
4944
|
...n?.(i) ?? {}
|
|
4940
4945
|
}, o = e;
|
|
4941
4946
|
for (let [e, t] of Object.entries(a)) t !== void 0 && (o = o.where(e, t));
|
|
4942
4947
|
return o;
|
|
4943
|
-
},
|
|
4948
|
+
}, Dc = 1e3, Oc = (e, t = Dc) => {
|
|
4944
4949
|
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);
|
|
4945
4950
|
if (i !== void 0) {
|
|
4946
4951
|
let t = r(n(e.pageSize) ?? 100);
|
|
@@ -4953,35 +4958,35 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
4953
4958
|
limit: r(n(e.limit) ?? 100),
|
|
4954
4959
|
offset: Math.max(0, Math.floor(n(e.offset) ?? 0))
|
|
4955
4960
|
};
|
|
4956
|
-
},
|
|
4961
|
+
}, kc = {
|
|
4957
4962
|
list: (e, t = {}) => async (n, r) => {
|
|
4958
4963
|
let i = n ?? {}, a = r.store.select(e);
|
|
4959
4964
|
if (t.columns !== void 0 && t.columns.length > 0) {
|
|
4960
|
-
let n = new Set(
|
|
4965
|
+
let n = new Set(wc(e, void 0)), r = t.columns.filter((e) => !n.has(e));
|
|
4961
4966
|
r.length > 0 && (a = a.select(...r));
|
|
4962
4967
|
}
|
|
4963
|
-
t.include !== void 0 && (a = a.with(t.include)), a =
|
|
4968
|
+
t.include !== void 0 && (a = a.with(t.include)), a = Ec(a, t.filter, t.scope, i, r);
|
|
4964
4969
|
for (let e of t.sort ?? []) a = a.orderBy(e.column, e.direction ?? "asc");
|
|
4965
4970
|
if (t.paginate === !0) {
|
|
4966
|
-
let { limit: e, offset: n } =
|
|
4971
|
+
let { limit: e, offset: n } = Oc(i, t.maxPageSize);
|
|
4967
4972
|
a = a.limit(e).offset(n);
|
|
4968
4973
|
}
|
|
4969
|
-
return
|
|
4974
|
+
return Tc(await a.all(), wc(e, t.redact));
|
|
4970
4975
|
},
|
|
4971
4976
|
getById: (e, t = {}) => async (n, r) => {
|
|
4972
4977
|
let i = r.store.select(e).where("id", n.id);
|
|
4973
4978
|
t.include !== void 0 && (i = i.with(t.include));
|
|
4974
4979
|
let a = await i.first();
|
|
4975
|
-
return a === null ? null :
|
|
4980
|
+
return a === null ? null : Cc(a, wc(e, t.redact));
|
|
4976
4981
|
},
|
|
4977
|
-
create: (e, t = {}) => async (n, r) =>
|
|
4982
|
+
create: (e, t = {}) => async (n, r) => Cc(await r.store.insert(e, n), wc(e, t.redact)),
|
|
4978
4983
|
update: (e, t = {}) => async (n, r) => {
|
|
4979
4984
|
let { id: i, ...a } = n, o = await r.store.update(e, i, a);
|
|
4980
|
-
return o === null ? null :
|
|
4985
|
+
return o === null ? null : Cc(o, wc(e, t.redact));
|
|
4981
4986
|
},
|
|
4982
|
-
count: (e, t = {}) => async (n, r) =>
|
|
4987
|
+
count: (e, t = {}) => async (n, r) => Ec(r.store.select(e), t.filter, t.scope, n ?? {}, r).count(),
|
|
4983
4988
|
remove: (e) => async (t, n) => ({ deleted: await n.store.delete(e, t.id) })
|
|
4984
|
-
},
|
|
4989
|
+
}, Ac = (e) => {
|
|
4985
4990
|
let t = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Set(), r = (e) => {
|
|
4986
4991
|
if (!n.has(e)) switch (n.add(e), e._tag) {
|
|
4987
4992
|
case "TypeLiteral":
|
|
@@ -5008,7 +5013,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5008
5013
|
}
|
|
5009
5014
|
};
|
|
5010
5015
|
return r(e.ast), t;
|
|
5011
|
-
},
|
|
5016
|
+
}, jc = (e) => {
|
|
5012
5017
|
let t = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Set(), r = (e) => {
|
|
5013
5018
|
switch (e._tag) {
|
|
5014
5019
|
case "Literal": return e.literal === null;
|
|
@@ -5043,38 +5048,38 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5043
5048
|
}
|
|
5044
5049
|
};
|
|
5045
5050
|
return i(e.ast), t;
|
|
5046
|
-
},
|
|
5051
|
+
}, Mc = (e, t) => {
|
|
5047
5052
|
let n = e.source === void 0 ? [] : Array.isArray(e.source) ? e.source : [e.source];
|
|
5048
5053
|
if (n.length === 0) return [];
|
|
5049
|
-
let r =
|
|
5054
|
+
let r = Ac(e.output), i = jc(e.output), a = [];
|
|
5050
5055
|
for (let o of n) for (let n of t.get(o) ?? []) r.has(n) && !i.has(n) && a.push({
|
|
5051
5056
|
query: e.name,
|
|
5052
5057
|
table: o,
|
|
5053
5058
|
column: n
|
|
5054
5059
|
});
|
|
5055
5060
|
return a;
|
|
5056
|
-
},
|
|
5061
|
+
}, Nc = (e) => {
|
|
5057
5062
|
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.`;
|
|
5058
|
-
},
|
|
5063
|
+
}, Pc = class extends z.TaggedError()("CircuitOpen", {
|
|
5059
5064
|
name: z.String,
|
|
5060
5065
|
retryAfterMs: z.Number
|
|
5061
|
-
}) {},
|
|
5066
|
+
}) {}, Fc = {
|
|
5062
5067
|
tag: "closed",
|
|
5063
5068
|
failureCount: 0,
|
|
5064
5069
|
halfOpenSuccesses: 0,
|
|
5065
5070
|
openedAt: 0
|
|
5066
|
-
},
|
|
5067
|
-
let t = e.name ?? "circuit", n = Ze.toMillis(Ze.decode(e.resetTimeout)), r = e.halfOpenSuccessThreshold ?? 1, i = e.isFailure ?? (() => !0), a = yield* R.make(
|
|
5071
|
+
}, Ic = { make: (e) => F.gen(function* () {
|
|
5072
|
+
let t = e.name ?? "circuit", n = Ze.toMillis(Ze.decode(e.resetTimeout)), r = e.halfOpenSuccessThreshold ?? 1, i = e.isFailure ?? (() => !0), a = yield* R.make(Fc), o = F.gen(function* () {
|
|
5068
5073
|
let e = yield* R.get(a);
|
|
5069
5074
|
if (e.tag === "half-open") {
|
|
5070
5075
|
let t = e.halfOpenSuccesses + 1;
|
|
5071
|
-
yield* R.set(a, t >= r ?
|
|
5076
|
+
yield* R.set(a, t >= r ? Fc : {
|
|
5072
5077
|
...e,
|
|
5073
5078
|
halfOpenSuccesses: t
|
|
5074
5079
|
});
|
|
5075
5080
|
return;
|
|
5076
5081
|
}
|
|
5077
|
-
e.failureCount !== 0 && (yield* R.set(a,
|
|
5082
|
+
e.failureCount !== 0 && (yield* R.set(a, Fc));
|
|
5078
5083
|
}), s = F.gen(function* () {
|
|
5079
5084
|
let t = yield* Je.currentTimeMillis, n = yield* R.get(a);
|
|
5080
5085
|
if (n.tag === "half-open" || n.tag === "open") {
|
|
@@ -5112,7 +5117,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5112
5117
|
if (N.isInterruptedOnly(e)) return F.void;
|
|
5113
5118
|
let t = N.failureOption(e), n = t._tag === "Some" ? t.value : void 0;
|
|
5114
5119
|
return i(n) ? s : F.void;
|
|
5115
|
-
})) : yield* F.fail(new
|
|
5120
|
+
})) : yield* F.fail(new Pc({
|
|
5116
5121
|
name: t,
|
|
5117
5122
|
retryAfterMs: n
|
|
5118
5123
|
}));
|
|
@@ -5121,15 +5126,15 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5121
5126
|
value: R.get(a).pipe(F.map((e) => e.tag)),
|
|
5122
5127
|
enumerable: !0
|
|
5123
5128
|
}), Object.defineProperty(u, "reset", {
|
|
5124
|
-
value: R.set(a,
|
|
5129
|
+
value: R.set(a, Fc),
|
|
5125
5130
|
enumerable: !0
|
|
5126
5131
|
}), u;
|
|
5127
|
-
}) },
|
|
5128
|
-
|
|
5129
|
-
},
|
|
5130
|
-
|
|
5131
|
-
},
|
|
5132
|
-
let n = t.scopes === void 0 ? Ke(t.id ?? "system") : Ke(t.id ?? "system", t.scopes), r = t.store ??
|
|
5132
|
+
}) }, Lc, Rc = (e) => {
|
|
5133
|
+
Lc = e;
|
|
5134
|
+
}, zc = () => {
|
|
5135
|
+
Lc = void 0;
|
|
5136
|
+
}, Bc = () => Lc, Vc = async (e, t = {}) => {
|
|
5137
|
+
let n = t.scopes === void 0 ? Ke(t.id ?? "system") : Ke(t.id ?? "system", t.scopes), r = t.store ?? Lc?.dataStore, i = t.schemaRegistry ?? Lc?.schemaRegistry, a = t.dialect ?? Lc?.dialect;
|
|
5133
5138
|
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.");
|
|
5134
5139
|
return e({
|
|
5135
5140
|
subject: n,
|
|
@@ -5139,7 +5144,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5139
5144
|
...a === void 0 ? {} : { dialect: a }
|
|
5140
5145
|
})
|
|
5141
5146
|
});
|
|
5142
|
-
},
|
|
5147
|
+
}, Hc = (e) => {
|
|
5143
5148
|
let { currentRegion: t, replicaRegions: n, inner: r } = e, i = (e) => {
|
|
5144
5149
|
if (t === void 0) return {
|
|
5145
5150
|
sameRegion: [],
|
|
@@ -5167,7 +5172,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5167
5172
|
return r.loadSnapshot();
|
|
5168
5173
|
}
|
|
5169
5174
|
};
|
|
5170
|
-
},
|
|
5175
|
+
}, Uc = (e = process.env) => {
|
|
5171
5176
|
for (let t of [
|
|
5172
5177
|
"VOLTRO_REGION",
|
|
5173
5178
|
"AWS_REGION",
|
|
@@ -5179,7 +5184,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5179
5184
|
let n = e[t];
|
|
5180
5185
|
if (typeof n == "string" && n.length > 0) return n;
|
|
5181
5186
|
}
|
|
5182
|
-
},
|
|
5187
|
+
}, Wc = () => {
|
|
5183
5188
|
let e = {
|
|
5184
5189
|
primary: 0,
|
|
5185
5190
|
lagByReplica: /* @__PURE__ */ new Map()
|
|
@@ -5204,7 +5209,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5204
5209
|
e.lagByReplica.set(t, n);
|
|
5205
5210
|
}
|
|
5206
5211
|
};
|
|
5207
|
-
},
|
|
5212
|
+
}, Gc = Symbol.for("@voltro/ScheduleDefinition"), Kc = (e) => typeof e == "object" && !!e && Gc in e, qc = 30 * 6e4, Jc = (e) => {
|
|
5208
5213
|
let t = P.parse(e.cron, e.timezone);
|
|
5209
5214
|
if (Qe.isLeft(t)) throw Error(`defineSchedule("${e.name}"): invalid cron expression "${e.cron}" (tz="${e.timezone}") — ${String(t.left)}`);
|
|
5210
5215
|
if (!e.timezone || e.timezone.trim() === "") throw Error(`defineSchedule("${e.name}"): timezone is required (e.g. "UTC", "Europe/Berlin")`);
|
|
@@ -5213,18 +5218,18 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5213
5218
|
...e,
|
|
5214
5219
|
onOverlap: e.onOverlap ?? "skip",
|
|
5215
5220
|
backfill: e.backfill ?? "skip",
|
|
5216
|
-
maxRuntimeMs: e.maxRuntimeMs ??
|
|
5217
|
-
[
|
|
5221
|
+
maxRuntimeMs: e.maxRuntimeMs ?? qc,
|
|
5222
|
+
[Gc]: !0
|
|
5218
5223
|
};
|
|
5219
|
-
},
|
|
5224
|
+
}, Yc = (e) => P.unsafeParse(e.cron, e.timezone), Xc = (e, t = /* @__PURE__ */ new Date()) => P.next(Yc(e), t), Z = "_voltro_wakeups", Zc = (e) => `${e.tenantId}:${e.kind}:${e.refId}`, Qc = (e) => ({
|
|
5220
5225
|
tenantId: String(e.tenantId),
|
|
5221
5226
|
kind: String(e.kind),
|
|
5222
5227
|
refId: String(e.refId),
|
|
5223
5228
|
wakeAt: e.wakeAt instanceof Date ? e.wakeAt : new Date(String(e.wakeAt)),
|
|
5224
5229
|
status: e.status === "fired" ? "fired" : "pending"
|
|
5225
|
-
}),
|
|
5230
|
+
}), $c = async (e, t) => {
|
|
5226
5231
|
await e.upsert(Z, {
|
|
5227
|
-
id:
|
|
5232
|
+
id: Zc(t),
|
|
5228
5233
|
tenantId: t.tenantId,
|
|
5229
5234
|
kind: t.kind,
|
|
5230
5235
|
refId: t.refId,
|
|
@@ -5234,7 +5239,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5234
5239
|
conflictColumns: ["id"],
|
|
5235
5240
|
update: ["wakeAt", "status"]
|
|
5236
5241
|
});
|
|
5237
|
-
},
|
|
5242
|
+
}, el = async (e, t) => e.delete(Z, Zc(t)), tl = async (e, t) => await e.update(Z, Zc(t), { status: "fired" }) !== null, nl = (e, t) => ({ and: [{
|
|
5238
5243
|
column: "id",
|
|
5239
5244
|
op: "eq",
|
|
5240
5245
|
value: e
|
|
@@ -5242,16 +5247,16 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5242
5247
|
column: "status",
|
|
5243
5248
|
op: "eq",
|
|
5244
5249
|
value: t
|
|
5245
|
-
}] }),
|
|
5246
|
-
await e.updateMany(Z, { status: "pending" }, { where:
|
|
5247
|
-
},
|
|
5250
|
+
}] }), rl = async (e, t) => await e.updateMany(Z, { status: "fired" }, { where: nl(Zc(t), "pending") }) > 0, il = async (e, t) => {
|
|
5251
|
+
await e.updateMany(Z, { status: "pending" }, { where: nl(Zc(t), "fired") });
|
|
5252
|
+
}, al = {
|
|
5248
5253
|
column: "status",
|
|
5249
5254
|
op: "eq",
|
|
5250
5255
|
value: "pending"
|
|
5251
|
-
},
|
|
5256
|
+
}, ol = async (e, t) => {
|
|
5252
5257
|
let n = {
|
|
5253
5258
|
table: Z,
|
|
5254
|
-
predicate:
|
|
5259
|
+
predicate: al,
|
|
5255
5260
|
order: [{
|
|
5256
5261
|
column: "wakeAt",
|
|
5257
5262
|
direction: "asc"
|
|
@@ -5260,18 +5265,18 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5260
5265
|
skip: void 0,
|
|
5261
5266
|
projection: void 0
|
|
5262
5267
|
};
|
|
5263
|
-
return (await e.query(n)).map(
|
|
5264
|
-
},
|
|
5265
|
-
let r = await
|
|
5268
|
+
return (await e.query(n)).map(Qc);
|
|
5269
|
+
}, sl = async (e, t, n = 500) => {
|
|
5270
|
+
let r = await ol(e, n), i = t.getTime();
|
|
5266
5271
|
return r.filter((e) => e.wakeAt.getTime() <= i);
|
|
5267
|
-
},
|
|
5272
|
+
}, cl = async (e) => (await ol(e, 1))[0] ?? null, ll = {
|
|
5268
5273
|
column: "status",
|
|
5269
5274
|
op: "eq",
|
|
5270
5275
|
value: "fired"
|
|
5271
|
-
},
|
|
5276
|
+
}, ul = async (e, t = {}) => {
|
|
5272
5277
|
let n = {
|
|
5273
5278
|
table: Z,
|
|
5274
|
-
predicate:
|
|
5279
|
+
predicate: ll,
|
|
5275
5280
|
order: [{
|
|
5276
5281
|
column: "wakeAt",
|
|
5277
5282
|
direction: "asc"
|
|
@@ -5282,12 +5287,12 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5282
5287
|
}, r = await e.query(n), i = t.firedOlderThan?.getTime(), a = 0;
|
|
5283
5288
|
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++;
|
|
5284
5289
|
return a;
|
|
5285
|
-
},
|
|
5290
|
+
}, dl = Wa, fl = "default", pl = {
|
|
5286
5291
|
kind: "single",
|
|
5287
5292
|
tryClaim: async () => !0
|
|
5288
|
-
},
|
|
5293
|
+
}, ml = "_voltro_schedule_claims", hl = (e, t, n) => {
|
|
5289
5294
|
let r = async (t) => (await e.query({
|
|
5290
|
-
table:
|
|
5295
|
+
table: ml,
|
|
5291
5296
|
order: [],
|
|
5292
5297
|
predicate: void 0,
|
|
5293
5298
|
projection: ["id"],
|
|
@@ -5302,7 +5307,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5302
5307
|
if (await r(s)) return !1;
|
|
5303
5308
|
} catch {}
|
|
5304
5309
|
try {
|
|
5305
|
-
return await e.insert(
|
|
5310
|
+
return await e.insert(ml, {
|
|
5306
5311
|
id: s,
|
|
5307
5312
|
scheduleName: i,
|
|
5308
5313
|
bucket: o,
|
|
@@ -5320,12 +5325,12 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5320
5325
|
}
|
|
5321
5326
|
}
|
|
5322
5327
|
};
|
|
5323
|
-
},
|
|
5328
|
+
}, gl = "_voltro_schedule_runs", _l = async (e, t) => {
|
|
5324
5329
|
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) => {
|
|
5325
|
-
s?.(e,
|
|
5330
|
+
s?.(e, yl(t));
|
|
5326
5331
|
}, _ = async (e, t, r, i, s, c) => {
|
|
5327
5332
|
try {
|
|
5328
|
-
let o = `sr_${xe()}`, l = await n.insert(
|
|
5333
|
+
let o = `sr_${xe()}`, l = await n.insert(gl, {
|
|
5329
5334
|
id: o,
|
|
5330
5335
|
name: e.name,
|
|
5331
5336
|
status: i,
|
|
@@ -5350,7 +5355,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5350
5355
|
}
|
|
5351
5356
|
}, v = async (e, t) => {
|
|
5352
5357
|
try {
|
|
5353
|
-
let r = await n.update(
|
|
5358
|
+
let r = await n.update(gl, e, t);
|
|
5354
5359
|
r && g("update", r);
|
|
5355
5360
|
} catch (t) {
|
|
5356
5361
|
o.warn("schedule: failed to record run finish", {
|
|
@@ -5361,7 +5366,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5361
5366
|
}, y = async (e) => {
|
|
5362
5367
|
try {
|
|
5363
5368
|
let t = await n.query({
|
|
5364
|
-
table:
|
|
5369
|
+
table: gl,
|
|
5365
5370
|
predicate: {
|
|
5366
5371
|
_tag: "leaf",
|
|
5367
5372
|
column: "status",
|
|
@@ -5396,7 +5401,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5396
5401
|
scheduleName: e.name,
|
|
5397
5402
|
trigger: n,
|
|
5398
5403
|
runId: s,
|
|
5399
|
-
subject:
|
|
5404
|
+
subject: dl
|
|
5400
5405
|
})
|
|
5401
5406
|
};
|
|
5402
5407
|
try {
|
|
@@ -5427,7 +5432,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5427
5432
|
let n = Q(t).includes("exceeded maxRuntimeMs"), r = an(t).dbMessage, i = typeof r == "string" && r !== "" ? `${Q(t)} — ${r}` : Q(t);
|
|
5428
5433
|
s && await v(s, {
|
|
5429
5434
|
status: "failed",
|
|
5430
|
-
errorTag: n ? "timeout" :
|
|
5435
|
+
errorTag: n ? "timeout" : vl(t),
|
|
5431
5436
|
errorMessage: i,
|
|
5432
5437
|
completedAt: /* @__PURE__ */ new Date(),
|
|
5433
5438
|
durationMs: Date.now() - l
|
|
@@ -5487,8 +5492,8 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5487
5492
|
}
|
|
5488
5493
|
}, C = async (e) => {
|
|
5489
5494
|
try {
|
|
5490
|
-
let t = P.next(
|
|
5491
|
-
await
|
|
5495
|
+
let t = P.next(Yc(e), /* @__PURE__ */ new Date());
|
|
5496
|
+
await $c(n, {
|
|
5492
5497
|
tenantId: u,
|
|
5493
5498
|
kind: "schedule",
|
|
5494
5499
|
refId: e.name,
|
|
@@ -5502,7 +5507,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5502
5507
|
}
|
|
5503
5508
|
}, w = 2147483647, T = (e) => {
|
|
5504
5509
|
if (m) return;
|
|
5505
|
-
let n =
|
|
5510
|
+
let n = Yc(e), r = P.next(n, /* @__PURE__ */ new Date()), i = () => {
|
|
5506
5511
|
if (m) return;
|
|
5507
5512
|
let n = r.getTime() - Date.now();
|
|
5508
5513
|
if (n > w) {
|
|
@@ -5524,7 +5529,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5524
5529
|
let r;
|
|
5525
5530
|
try {
|
|
5526
5531
|
let t = (await n.query({
|
|
5527
|
-
table:
|
|
5532
|
+
table: gl,
|
|
5528
5533
|
order: [{
|
|
5529
5534
|
column: "scheduledAt",
|
|
5530
5535
|
direction: "desc"
|
|
@@ -5543,7 +5548,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5543
5548
|
return;
|
|
5544
5549
|
}
|
|
5545
5550
|
if (!r) return;
|
|
5546
|
-
let i =
|
|
5551
|
+
let i = Yc(e), a = [], s = P.next(i, r), c = Date.now();
|
|
5547
5552
|
for (; s.getTime() < c && a.length < 1e3;) a.push(s), s = P.next(i, s);
|
|
5548
5553
|
if (a.length !== 0) if (o.info("schedule: backfill", {
|
|
5549
5554
|
name: e.name,
|
|
@@ -5588,11 +5593,11 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5588
5593
|
d.clear(), o.info("scheduler: stopped");
|
|
5589
5594
|
}
|
|
5590
5595
|
};
|
|
5591
|
-
}, Q = (e) => e?.message ?? String(e),
|
|
5596
|
+
}, Q = (e) => e?.message ?? String(e), vl = (e) => e && typeof e == "object" && "_tag" in e ? String(e._tag) : null, yl = (e) => {
|
|
5592
5597
|
let t = {};
|
|
5593
5598
|
for (let [n, r] of Object.entries(e)) t[n] = r instanceof Date ? r.toISOString() : r;
|
|
5594
5599
|
return t;
|
|
5595
|
-
},
|
|
5600
|
+
}, bl = (e, t, n, r) => {
|
|
5596
5601
|
let i = !1, a, o = async () => {
|
|
5597
5602
|
if (i) return;
|
|
5598
5603
|
let a = new Date(Math.floor(Date.now() / t) * t), o = !1;
|
|
@@ -5622,7 +5627,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5622
5627
|
i || (i = !0, a && clearInterval(a), a = void 0);
|
|
5623
5628
|
}
|
|
5624
5629
|
};
|
|
5625
|
-
},
|
|
5630
|
+
}, xl = (e) => (t, n, r) => bl(t, n, r, e), Sl = O("_voltro_schedule_runs", {
|
|
5626
5631
|
id: y({ prefix: "schrun" }),
|
|
5627
5632
|
name: k(),
|
|
5628
5633
|
status: k().oneOf([
|
|
@@ -5652,13 +5657,13 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5652
5657
|
]).nullable(),
|
|
5653
5658
|
replicaId: k().nullable(),
|
|
5654
5659
|
result: T().nullable()
|
|
5655
|
-
}).index(["name", "scheduledAt"]).index(["status"]),
|
|
5660
|
+
}).index(["name", "scheduledAt"]).index(["status"]), Cl = O("_voltro_schedule_claims", {
|
|
5656
5661
|
id: y({ prefix: "schclaim" }),
|
|
5657
5662
|
scheduleName: k(),
|
|
5658
5663
|
bucket: k(),
|
|
5659
5664
|
claimedBy: k(),
|
|
5660
5665
|
claimedAt: A()
|
|
5661
|
-
}).index(["scheduleName", "bucket"]).index(["claimedAt"]),
|
|
5666
|
+
}).index(["scheduleName", "bucket"]).index(["claimedAt"]), wl = O("_voltro_traces", {
|
|
5662
5667
|
id: y({ prefix: "span" }),
|
|
5663
5668
|
traceId: k(),
|
|
5664
5669
|
spanId: k(),
|
|
@@ -5682,7 +5687,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5682
5687
|
durationMs: x(),
|
|
5683
5688
|
attributes: T().nullable(),
|
|
5684
5689
|
events: T().nullable()
|
|
5685
|
-
}).index(["traceId", "startedAt"]).index(["startedAt"]).index(["status"]),
|
|
5690
|
+
}).index(["traceId", "startedAt"]).index(["startedAt"]).index(["status"]), Tl = O("_voltro_undo_log", {
|
|
5686
5691
|
id: y({ prefix: "undo" }),
|
|
5687
5692
|
tag: k(),
|
|
5688
5693
|
label: k().nullable(),
|
|
@@ -5693,25 +5698,25 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5693
5698
|
crossesAction: i().default(!1),
|
|
5694
5699
|
undone: i().default(!1),
|
|
5695
5700
|
createdAt: A().default("now")
|
|
5696
|
-
}).index(["subjectId", "createdAt"]),
|
|
5701
|
+
}).index(["subjectId", "createdAt"]), El = (e = process.env) => {
|
|
5697
5702
|
let t = (e.VOLTRO_UNDO ?? "").toLowerCase();
|
|
5698
5703
|
return t === "on" || t === "1" || t === "true" ? !0 : t === "off" || t === "0" || t === "false" ? !1 : e.NODE_ENV !== "production";
|
|
5699
|
-
},
|
|
5704
|
+
}, Dl = (e) => e.startsWith("_voltro"), Ol = async (e, t, n) => (await e.query({
|
|
5700
5705
|
table: t,
|
|
5701
5706
|
predicate: d("id", n),
|
|
5702
5707
|
order: []
|
|
5703
|
-
}))[0] ?? null,
|
|
5708
|
+
}))[0] ?? null, kl = (e, t) => new Proxy(e, { get(e, n, r) {
|
|
5704
5709
|
if (n === "insert") return async (n, r) => {
|
|
5705
5710
|
let i = await e.insert(n, r);
|
|
5706
|
-
return
|
|
5711
|
+
return Dl(n) || t({
|
|
5707
5712
|
table: n,
|
|
5708
5713
|
op: "insert",
|
|
5709
5714
|
next: i
|
|
5710
5715
|
}), i;
|
|
5711
5716
|
};
|
|
5712
5717
|
if (n === "update") return async (n, r, i) => {
|
|
5713
|
-
let a =
|
|
5714
|
-
return
|
|
5718
|
+
let a = Dl(n) ? null : await Ol(e, n, r), o = await e.update(n, r, i);
|
|
5719
|
+
return Dl(n) || t({
|
|
5715
5720
|
table: n,
|
|
5716
5721
|
op: "update",
|
|
5717
5722
|
id: r,
|
|
@@ -5720,8 +5725,8 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5720
5725
|
}), o;
|
|
5721
5726
|
};
|
|
5722
5727
|
if (n === "delete") return async (n, r) => {
|
|
5723
|
-
let i =
|
|
5724
|
-
return !
|
|
5728
|
+
let i = Dl(n) ? null : await Ol(e, n, r), a = await e.delete(n, r);
|
|
5729
|
+
return !Dl(n) && a && t({
|
|
5725
5730
|
table: n,
|
|
5726
5731
|
op: "delete",
|
|
5727
5732
|
id: r,
|
|
@@ -5730,10 +5735,10 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5730
5735
|
};
|
|
5731
5736
|
let i = Reflect.get(e, n, r);
|
|
5732
5737
|
return typeof i == "function" ? i.bind(e) : i;
|
|
5733
|
-
} }),
|
|
5738
|
+
} }), Al = (e) => {
|
|
5734
5739
|
let t = [];
|
|
5735
5740
|
return {
|
|
5736
|
-
tx:
|
|
5741
|
+
tx: kl(e, (e) => t.push(e)),
|
|
5737
5742
|
persist: async (e, n) => {
|
|
5738
5743
|
if (t.length === 0 || n.tag.startsWith("__voltro")) return;
|
|
5739
5744
|
let r = n.subject;
|
|
@@ -5749,14 +5754,14 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5749
5754
|
});
|
|
5750
5755
|
}
|
|
5751
5756
|
};
|
|
5752
|
-
},
|
|
5757
|
+
}, jl = (e) => {
|
|
5753
5758
|
if (e.id !== void 0) return e.id;
|
|
5754
5759
|
let t = e.next?.id;
|
|
5755
5760
|
if (typeof t == "string") return t;
|
|
5756
5761
|
let n = e.prev?.id;
|
|
5757
5762
|
return typeof n == "string" ? n : void 0;
|
|
5758
|
-
},
|
|
5759
|
-
let t =
|
|
5763
|
+
}, Ml = (e) => {
|
|
5764
|
+
let t = jl(e);
|
|
5760
5765
|
switch (e.op) {
|
|
5761
5766
|
case "insert": return t === void 0 ? null : {
|
|
5762
5767
|
table: e.table,
|
|
@@ -5780,28 +5785,28 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5780
5785
|
row: e.prev
|
|
5781
5786
|
};
|
|
5782
5787
|
}
|
|
5783
|
-
},
|
|
5784
|
-
if (e.crossesAction) throw new
|
|
5788
|
+
}, Nl = (e) => {
|
|
5789
|
+
if (e.crossesAction) throw new Pl(e.invocationId, "action");
|
|
5785
5790
|
let t = [];
|
|
5786
5791
|
for (let n = e.changes.length - 1; n >= 0; --n) {
|
|
5787
|
-
let r =
|
|
5792
|
+
let r = Ml(e.changes[n]);
|
|
5788
5793
|
r !== null && t.push(r);
|
|
5789
5794
|
}
|
|
5790
5795
|
return t;
|
|
5791
|
-
},
|
|
5796
|
+
}, Pl = class extends Error {
|
|
5792
5797
|
invocationId;
|
|
5793
5798
|
boundary;
|
|
5794
5799
|
_tag = "UndoBoundaryError";
|
|
5795
5800
|
constructor(e, t) {
|
|
5796
5801
|
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";
|
|
5797
5802
|
}
|
|
5798
|
-
},
|
|
5803
|
+
}, Fl = (e, t, n = ["updatedAt", "updatedBy"]) => {
|
|
5799
5804
|
if (t == null) return e == null;
|
|
5800
5805
|
if (e == null) return !1;
|
|
5801
5806
|
let r = new Set(n);
|
|
5802
5807
|
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;
|
|
5803
5808
|
return !0;
|
|
5804
|
-
},
|
|
5809
|
+
}, Il = class {
|
|
5805
5810
|
capacity;
|
|
5806
5811
|
done = [];
|
|
5807
5812
|
undone = [];
|
|
@@ -5837,7 +5842,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5837
5842
|
redo: [...this.undone]
|
|
5838
5843
|
};
|
|
5839
5844
|
}
|
|
5840
|
-
},
|
|
5845
|
+
}, Ll = (e, t = /* @__PURE__ */ new Set()) => e.op === "insert" ? {
|
|
5841
5846
|
table: e.table,
|
|
5842
5847
|
op: "insert",
|
|
5843
5848
|
next: e.new ?? null
|
|
@@ -5854,7 +5859,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5854
5859
|
table: e.table,
|
|
5855
5860
|
op: "delete",
|
|
5856
5861
|
prev: e.old ?? null
|
|
5857
|
-
},
|
|
5862
|
+
}, Rl = async (e, t) => {
|
|
5858
5863
|
switch (t.op) {
|
|
5859
5864
|
case "delete":
|
|
5860
5865
|
await e.delete(t.table, t.id);
|
|
@@ -5872,21 +5877,21 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5872
5877
|
await e.insert(t.table, t.row);
|
|
5873
5878
|
return;
|
|
5874
5879
|
}
|
|
5875
|
-
},
|
|
5876
|
-
for (let n of t) await
|
|
5877
|
-
},
|
|
5880
|
+
}, zl = async (e, t) => {
|
|
5881
|
+
for (let n of t) await Rl(e, n);
|
|
5882
|
+
}, Bl = (e) => e.request?.subject?.id ?? null, Vl = (e) => e === !0 || e === 1, Hl = async (e, t, n) => (await e.query({
|
|
5878
5883
|
table: t,
|
|
5879
5884
|
predicate: d("id", n),
|
|
5880
5885
|
order: []
|
|
5881
|
-
}))[0] ?? null,
|
|
5886
|
+
}))[0] ?? null, Ul = (e) => {
|
|
5882
5887
|
try {
|
|
5883
5888
|
let t = JSON.parse(String(e ?? "[]"));
|
|
5884
5889
|
return Array.isArray(t) ? t : [];
|
|
5885
5890
|
} catch {
|
|
5886
5891
|
return [];
|
|
5887
5892
|
}
|
|
5888
|
-
},
|
|
5889
|
-
let n =
|
|
5893
|
+
}, Wl = (e) => e.id ?? e.next?.id ?? e.prev?.id, Gl = async (e, t) => {
|
|
5894
|
+
let n = Bl(t);
|
|
5890
5895
|
return [...await t.store.query({
|
|
5891
5896
|
table: "_voltro_undo_log",
|
|
5892
5897
|
predicate: d("subjectId", n),
|
|
@@ -5895,68 +5900,68 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5895
5900
|
id: String(e.id),
|
|
5896
5901
|
tag: String(e.tag ?? ""),
|
|
5897
5902
|
label: e.label ?? null,
|
|
5898
|
-
undone:
|
|
5899
|
-
crossesAction:
|
|
5903
|
+
undone: Vl(e.undone),
|
|
5904
|
+
crossesAction: Vl(e.crossesAction),
|
|
5900
5905
|
createdAt: String(e.createdAt ?? "")
|
|
5901
5906
|
}));
|
|
5902
|
-
},
|
|
5903
|
-
let n = await
|
|
5907
|
+
}, Kl = async (e, t) => {
|
|
5908
|
+
let n = await Hl(t.store, "_voltro_undo_log", e.invocationId);
|
|
5904
5909
|
if (!n) throw new Ie({ invocationId: e.invocationId });
|
|
5905
|
-
if ((n.subjectId ?? null) !==
|
|
5910
|
+
if ((n.subjectId ?? null) !== Bl(t)) throw new Fe({ invocationId: e.invocationId });
|
|
5906
5911
|
return n;
|
|
5907
|
-
},
|
|
5908
|
-
let n = await
|
|
5909
|
-
if (
|
|
5910
|
-
if (
|
|
5912
|
+
}, ql = async (e, t) => {
|
|
5913
|
+
let n = await Kl(e, t);
|
|
5914
|
+
if (Vl(n.undone)) return { ok: !0 };
|
|
5915
|
+
if (Vl(n.crossesAction)) throw new Pe({
|
|
5911
5916
|
invocationId: e.invocationId,
|
|
5912
5917
|
reason: "action"
|
|
5913
5918
|
});
|
|
5914
|
-
let r =
|
|
5919
|
+
let r = Ul(n.changes);
|
|
5915
5920
|
for (let n of r) {
|
|
5916
|
-
let r =
|
|
5917
|
-
if (r !== void 0 && !
|
|
5921
|
+
let r = Wl(n);
|
|
5922
|
+
if (r !== void 0 && !Fl(await Hl(t.store, n.table, r), n.next ?? null)) throw new Pe({
|
|
5918
5923
|
invocationId: e.invocationId,
|
|
5919
5924
|
reason: "conflict"
|
|
5920
5925
|
});
|
|
5921
5926
|
}
|
|
5922
5927
|
let i = {
|
|
5923
5928
|
invocationId: e.invocationId,
|
|
5924
|
-
subject:
|
|
5929
|
+
subject: Bl(t),
|
|
5925
5930
|
changes: r,
|
|
5926
5931
|
crossesAction: !1
|
|
5927
5932
|
};
|
|
5928
|
-
return await
|
|
5929
|
-
},
|
|
5930
|
-
let n = await
|
|
5931
|
-
if (!
|
|
5932
|
-
for (let e of
|
|
5933
|
-
let n =
|
|
5933
|
+
return await zl(t.store, Nl(i)), await t.store.update("_voltro_undo_log", e.invocationId, { undone: !0 }), { ok: !0 };
|
|
5934
|
+
}, Jl = async (e, t) => {
|
|
5935
|
+
let n = await Kl(e, t);
|
|
5936
|
+
if (!Vl(n.undone)) return { ok: !0 };
|
|
5937
|
+
for (let e of Ul(n.changes)) {
|
|
5938
|
+
let n = Wl(e);
|
|
5934
5939
|
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);
|
|
5935
5940
|
}
|
|
5936
5941
|
return await t.store.update("_voltro_undo_log", e.invocationId, { undone: !1 }), { ok: !0 };
|
|
5937
|
-
},
|
|
5942
|
+
}, Yl = (e = process.env) => {
|
|
5938
5943
|
let t = (e.VOLTRO_TIMELINE ?? "").toLowerCase();
|
|
5939
5944
|
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";
|
|
5940
|
-
},
|
|
5945
|
+
}, Xl = /pass(word)?|secret|token|api[_-]?key|authorization|cookie|ssn|credit[_-]?card|card[_-]?number|cvv|encrypted/i, Zl = "«redacted»", Ql = (e) => {
|
|
5941
5946
|
if (e == null) return null;
|
|
5942
5947
|
let t = {};
|
|
5943
|
-
for (let [n, r] of Object.entries(e)) t[n] =
|
|
5948
|
+
for (let [n, r] of Object.entries(e)) t[n] = Xl.test(n) ? Zl : r;
|
|
5944
5949
|
return t;
|
|
5945
|
-
},
|
|
5950
|
+
}, $l = (e) => {
|
|
5946
5951
|
let t = e?.id;
|
|
5947
5952
|
return typeof t == "string" ? t : void 0;
|
|
5948
|
-
},
|
|
5953
|
+
}, eu = (e, t) => {
|
|
5949
5954
|
if (t.op === "insert") {
|
|
5950
|
-
let n =
|
|
5955
|
+
let n = $l(t.new);
|
|
5951
5956
|
return n === void 0 ? e : e.filter((e) => e.id !== n);
|
|
5952
5957
|
}
|
|
5953
5958
|
if (t.op === "update") {
|
|
5954
5959
|
if (t.old == null) return e;
|
|
5955
|
-
let n =
|
|
5960
|
+
let n = $l(t.new) ?? $l(t.old);
|
|
5956
5961
|
return e.map((e) => e.id === n ? t.old : e);
|
|
5957
5962
|
}
|
|
5958
5963
|
return t.old == null ? e : [...e, t.old];
|
|
5959
|
-
},
|
|
5964
|
+
}, tu = class {
|
|
5960
5965
|
mode;
|
|
5961
5966
|
capacity;
|
|
5962
5967
|
now;
|
|
@@ -5976,8 +5981,8 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5976
5981
|
ts: this.now(),
|
|
5977
5982
|
table: e.table,
|
|
5978
5983
|
op: e.op,
|
|
5979
|
-
old:
|
|
5980
|
-
new:
|
|
5984
|
+
old: Ql(e.old),
|
|
5985
|
+
new: Ql(e.new),
|
|
5981
5986
|
tenantId: n
|
|
5982
5987
|
}), this.ring.length > this.capacity && this.ring.shift(), t;
|
|
5983
5988
|
}
|
|
@@ -5990,23 +5995,23 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
5990
5995
|
}
|
|
5991
5996
|
replay(e, t, n) {
|
|
5992
5997
|
let r = this.ring.filter((n) => n.table === e && n.seq > t).sort((e, t) => t.seq - e.seq), i = n;
|
|
5993
|
-
for (let e of r) i =
|
|
5998
|
+
for (let e of r) i = eu(i, e);
|
|
5994
5999
|
return i;
|
|
5995
6000
|
}
|
|
5996
|
-
},
|
|
5997
|
-
|
|
5998
|
-
},
|
|
5999
|
-
let t =
|
|
6001
|
+
}, nu, ru = () => (nu === void 0 && (nu = new tu(Yl())), nu), iu = (e) => {
|
|
6002
|
+
nu = e;
|
|
6003
|
+
}, au = (e) => {
|
|
6004
|
+
let t = ru();
|
|
6000
6005
|
if (t.enabled) try {
|
|
6001
6006
|
t.record(e);
|
|
6002
6007
|
} catch {}
|
|
6003
|
-
},
|
|
6008
|
+
}, ou = /* @__PURE__ */ new Set([
|
|
6004
6009
|
"count",
|
|
6005
6010
|
"sum",
|
|
6006
6011
|
"avg",
|
|
6007
6012
|
"min",
|
|
6008
6013
|
"max"
|
|
6009
|
-
]),
|
|
6014
|
+
]), su = (e) => {
|
|
6010
6015
|
if (e.joins !== void 0 && e.joins.length > 0) return {
|
|
6011
6016
|
maintainable: !1,
|
|
6012
6017
|
reason: "joins are not maintainable in v1"
|
|
@@ -6028,7 +6033,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6028
6033
|
reason: "v1 maintains exactly one aggregation"
|
|
6029
6034
|
};
|
|
6030
6035
|
let t = e.aggregations[0];
|
|
6031
|
-
return
|
|
6036
|
+
return ou.has(t.op) ? t.op !== "count" && (t.column === void 0 || t.column.length === 0) ? {
|
|
6032
6037
|
maintainable: !1,
|
|
6033
6038
|
reason: `op '${t.op}' requires a column`
|
|
6034
6039
|
} : {
|
|
@@ -6042,7 +6047,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6042
6047
|
maintainable: !1,
|
|
6043
6048
|
reason: `op '${t.op}' is not maintainable`
|
|
6044
6049
|
};
|
|
6045
|
-
},
|
|
6050
|
+
}, cu = "\0", $ = (e, t) => t === void 0 || t.length === 0 ? "" : t.map((t) => JSON.stringify(e[t] ?? null)).join(cu), lu = (e, t) => t === void 0 ? 0 : Number(e[t] ?? 0), uu = (e, t) => {
|
|
6046
6051
|
switch (e.op) {
|
|
6047
6052
|
case "count": return t.count;
|
|
6048
6053
|
case "sum": return t.sum ?? 0;
|
|
@@ -6050,10 +6055,10 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6050
6055
|
case "min":
|
|
6051
6056
|
case "max": return t.count > 0 ? t.extreme ?? null : null;
|
|
6052
6057
|
}
|
|
6053
|
-
},
|
|
6058
|
+
}, du = (e, t) => {
|
|
6054
6059
|
let n = /* @__PURE__ */ new Map();
|
|
6055
6060
|
for (let r of t) {
|
|
6056
|
-
let t = $(r, e.groupBy), i = n.get(t), a =
|
|
6061
|
+
let t = $(r, e.groupBy), i = n.get(t), a = lu(r, e.column);
|
|
6057
6062
|
if (i === void 0) n.set(t, {
|
|
6058
6063
|
count: 1,
|
|
6059
6064
|
...e.op === "sum" || e.op === "avg" ? { sum: a } : {},
|
|
@@ -6069,10 +6074,10 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6069
6074
|
}
|
|
6070
6075
|
}
|
|
6071
6076
|
return n;
|
|
6072
|
-
},
|
|
6077
|
+
}, fu = (e, t) => [...t.entries()].map(([t, n]) => ({
|
|
6073
6078
|
groupKey: t,
|
|
6074
|
-
value:
|
|
6075
|
-
})),
|
|
6079
|
+
value: uu(e, n)
|
|
6080
|
+
})), pu = (e, t, n) => {
|
|
6076
6081
|
let r = new Map(t), i = /* @__PURE__ */ new Set(), a = (t) => {
|
|
6077
6082
|
let n = $(t, e.groupBy), a = r.get(n);
|
|
6078
6083
|
if (a === void 0) return;
|
|
@@ -6081,7 +6086,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6081
6086
|
r.delete(n);
|
|
6082
6087
|
return;
|
|
6083
6088
|
}
|
|
6084
|
-
let s =
|
|
6089
|
+
let s = lu(t, e.column);
|
|
6085
6090
|
e.op === "min" || e.op === "max" ? (a.extreme !== void 0 && s === a.extreme && i.add(n), r.set(n, {
|
|
6086
6091
|
count: o,
|
|
6087
6092
|
...a.extreme === void 0 ? {} : { extreme: a.extreme }
|
|
@@ -6090,7 +6095,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6090
6095
|
...e.op === "sum" || e.op === "avg" ? { sum: (a.sum ?? 0) - s } : {}
|
|
6091
6096
|
});
|
|
6092
6097
|
}, o = (t) => {
|
|
6093
|
-
let n = $(t, e.groupBy), i = r.get(n), a =
|
|
6098
|
+
let n = $(t, e.groupBy), i = r.get(n), a = lu(t, e.column);
|
|
6094
6099
|
if (i === void 0) {
|
|
6095
6100
|
r.set(n, {
|
|
6096
6101
|
count: 1,
|
|
@@ -6110,15 +6115,15 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6110
6115
|
state: r,
|
|
6111
6116
|
rescanGroups: [...i]
|
|
6112
6117
|
};
|
|
6113
|
-
},
|
|
6118
|
+
}, mu = (e, t, n, r) => {
|
|
6114
6119
|
if (n.length === 0) return t;
|
|
6115
|
-
let i = new Set(n), a =
|
|
6120
|
+
let i = new Set(n), a = du(e, r.filter((t) => i.has($(t, e.groupBy)))), o = new Map(t);
|
|
6116
6121
|
for (let e of i) {
|
|
6117
6122
|
let t = a.get(e);
|
|
6118
6123
|
t === void 0 ? o.delete(e) : o.set(e, t);
|
|
6119
6124
|
}
|
|
6120
6125
|
return o;
|
|
6121
|
-
},
|
|
6126
|
+
}, hu = class {
|
|
6122
6127
|
shape;
|
|
6123
6128
|
state = /* @__PURE__ */ new Map();
|
|
6124
6129
|
groups = /* @__PURE__ */ new Map();
|
|
@@ -6126,7 +6131,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6126
6131
|
this.shape = e;
|
|
6127
6132
|
}
|
|
6128
6133
|
seed(e) {
|
|
6129
|
-
this.state =
|
|
6134
|
+
this.state = du(this.shape, e), this.groups.clear();
|
|
6130
6135
|
for (let t of e) {
|
|
6131
6136
|
let e = $(t, this.shape.groupBy);
|
|
6132
6137
|
this.groups.has(e) || this.groups.set(e, this.groupValues(t));
|
|
@@ -6138,14 +6143,14 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6138
6143
|
let e = $(t, this.shape.groupBy);
|
|
6139
6144
|
this.groups.has(e) || this.groups.set(e, this.groupValues(t));
|
|
6140
6145
|
}
|
|
6141
|
-
let n =
|
|
6146
|
+
let n = pu(this.shape, this.state, e);
|
|
6142
6147
|
this.state = n.state;
|
|
6143
6148
|
for (let e of this.groups.keys()) this.state.has(e) || this.groups.delete(e);
|
|
6144
6149
|
return n.rescanGroups;
|
|
6145
6150
|
}
|
|
6146
6151
|
resolveRescan(e, t) {
|
|
6147
6152
|
if (e.length === 0) return;
|
|
6148
|
-
this.state =
|
|
6153
|
+
this.state = mu(this.shape, this.state, e, t);
|
|
6149
6154
|
let n = new Set(e);
|
|
6150
6155
|
for (let e of t) {
|
|
6151
6156
|
let t = $(e, this.shape.groupBy);
|
|
@@ -6154,7 +6159,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6154
6159
|
for (let e of n) this.state.has(e) || this.groups.delete(e);
|
|
6155
6160
|
}
|
|
6156
6161
|
materialize() {
|
|
6157
|
-
return
|
|
6162
|
+
return fu(this.shape, this.state).map((e) => ({
|
|
6158
6163
|
groupKey: e.groupKey,
|
|
6159
6164
|
group: this.groups.get(e.groupKey) ?? {},
|
|
6160
6165
|
value: e.value
|
|
@@ -6167,7 +6172,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6167
6172
|
for (let r of t) n[r] = e[r];
|
|
6168
6173
|
return n;
|
|
6169
6174
|
}
|
|
6170
|
-
},
|
|
6175
|
+
}, gu = O("_voltro_rebac_tuples", {
|
|
6171
6176
|
id: y({ prefix: "rbct" }),
|
|
6172
6177
|
subjectId: k(),
|
|
6173
6178
|
relation: k(),
|
|
@@ -6179,7 +6184,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6179
6184
|
"subjectId",
|
|
6180
6185
|
"resourceType",
|
|
6181
6186
|
"resourceId"
|
|
6182
|
-
]),
|
|
6187
|
+
]), _u = async (e, n, r, i) => n === null ? [] : (await e.query({
|
|
6183
6188
|
table: "_voltro_rebac_tuples",
|
|
6184
6189
|
predicate: t(d("subjectId", n), d("resourceType", r), d("resourceId", i)),
|
|
6185
6190
|
order: [],
|
|
@@ -6191,16 +6196,16 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6191
6196
|
relation: e.relation,
|
|
6192
6197
|
resourceType: e.resourceType,
|
|
6193
6198
|
resourceId: e.resourceId
|
|
6194
|
-
})),
|
|
6199
|
+
})), vu = (e) => ({
|
|
6195
6200
|
id: e.id,
|
|
6196
6201
|
tenantId: e.tenantId,
|
|
6197
6202
|
...e.scopes === void 0 ? {} : { scopes: e.scopes }
|
|
6198
|
-
}),
|
|
6199
|
-
let n = t.getPolicy ??
|
|
6203
|
+
}), yu = (e, t) => {
|
|
6204
|
+
let n = t.getPolicy ?? Hs;
|
|
6200
6205
|
return (r, i) => {
|
|
6201
6206
|
let a = e[i.tag];
|
|
6202
6207
|
if (a === void 0) return r;
|
|
6203
|
-
let o = n(a.resourceType), s = (e) => F.fail(new
|
|
6208
|
+
let o = n(a.resourceType), s = (e) => F.fail(new zs({
|
|
6204
6209
|
action: a.action,
|
|
6205
6210
|
resourceType: a.resourceType,
|
|
6206
6211
|
resourceId: e
|
|
@@ -6208,17 +6213,17 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6208
6213
|
if (o === void 0) return s("");
|
|
6209
6214
|
let c = a.resourceId(i.input);
|
|
6210
6215
|
if (c === null || c === "") return s("");
|
|
6211
|
-
let l =
|
|
6216
|
+
let l = vu(i.subject), u = {
|
|
6212
6217
|
type: a.resourceType,
|
|
6213
6218
|
id: c,
|
|
6214
6219
|
tenantId: i.subject.tenantId
|
|
6215
6220
|
};
|
|
6216
|
-
return F.flatMap(F.promise(async () => t.loadTuples(l.id, a.resourceType, c)), (e) =>
|
|
6221
|
+
return F.flatMap(F.promise(async () => t.loadTuples(l.id, a.resourceType, c)), (e) => Js(l, a.action, u, {
|
|
6217
6222
|
policy: o,
|
|
6218
6223
|
tuples: e
|
|
6219
6224
|
}) ? r : s(c));
|
|
6220
6225
|
};
|
|
6221
|
-
},
|
|
6226
|
+
}, bu = async (e, n, r) => n === null ? [] : (await e.query({
|
|
6222
6227
|
table: "_voltro_rebac_tuples",
|
|
6223
6228
|
predicate: t(d("subjectId", n), d("resourceType", r)),
|
|
6224
6229
|
order: [],
|
|
@@ -6230,18 +6235,18 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6230
6235
|
relation: e.relation,
|
|
6231
6236
|
resourceType: e.resourceType,
|
|
6232
6237
|
resourceId: e.resourceId
|
|
6233
|
-
})),
|
|
6234
|
-
let t = e.getPolicy ??
|
|
6238
|
+
})), xu = (e) => {
|
|
6239
|
+
let t = e.getPolicy ?? Hs;
|
|
6235
6240
|
return async (n, r, i, a) => {
|
|
6236
6241
|
let o = t(r);
|
|
6237
6242
|
if (o === void 0) return [];
|
|
6238
|
-
let s =
|
|
6239
|
-
return
|
|
6243
|
+
let s = vu(n);
|
|
6244
|
+
return Xs(s, i, r, a, {
|
|
6240
6245
|
policy: o,
|
|
6241
6246
|
tuples: await e.loadSubjectTuples(s.id, r)
|
|
6242
6247
|
});
|
|
6243
6248
|
};
|
|
6244
|
-
},
|
|
6249
|
+
}, Su = (e) => {
|
|
6245
6250
|
if (typeof e.name != "string" || e.name.length === 0) throw Error("defineReaction: a non-empty `name` is required");
|
|
6246
6251
|
if (e.watch === void 0 || typeof e.watch.table != "string" || e.watch.table.length === 0) throw Error(`reaction '${e.name}': watch.table is required`);
|
|
6247
6252
|
if (e.act === void 0 || e.act.kind !== "agent" && e.act.kind !== "workflow") throw Error(`reaction '${e.name}': act must be { kind: 'agent' | 'workflow', … }`);
|
|
@@ -6249,14 +6254,14 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6249
6254
|
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`);
|
|
6250
6255
|
if (e.guards.costBudgetUsd !== void 0 && e.guards.costBudgetUsd < 0) throw Error(`reaction '${e.name}': guards.costBudgetUsd must be >= 0`);
|
|
6251
6256
|
return e;
|
|
6252
|
-
},
|
|
6257
|
+
}, Cu = (e, t) => e === void 0 ? !0 : Array.isArray(e) ? e.includes(t) : e === t, wu = (e) => e.new?.tenantId ?? e.old?.tenantId ?? null, Tu = class {
|
|
6253
6258
|
hits = /* @__PURE__ */ new Map();
|
|
6254
6259
|
allow(e, t, n, r) {
|
|
6255
6260
|
let i = r - n, a = (this.hits.get(e) ?? []).filter((e) => e > i);
|
|
6256
6261
|
return a.length >= t ? (this.hits.set(e, a), !1) : (a.push(r), this.hits.set(e, a), !0);
|
|
6257
6262
|
}
|
|
6258
|
-
},
|
|
6259
|
-
if (t.table !== e.watch.table || !
|
|
6263
|
+
}, Eu = async (e, t, n) => {
|
|
6264
|
+
if (t.table !== e.watch.table || !Cu(e.watch.on, t.op)) return "skipped-op";
|
|
6260
6265
|
if (e.when !== void 0 && !e.when(t)) return "skipped-when";
|
|
6261
6266
|
let r = `${e.name}:${e.guards.dedupeKey(t)}`;
|
|
6262
6267
|
if (await n.dedupe.has(r)) return "skipped-dedupe";
|
|
@@ -6265,26 +6270,26 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6265
6270
|
let t = n.now?.() ?? Date.now();
|
|
6266
6271
|
if (!n.rateLimiter.allow(e.name, i.limit, i.windowMs, t)) return "skipped-ratelimit";
|
|
6267
6272
|
}
|
|
6268
|
-
let a =
|
|
6273
|
+
let a = wu(t);
|
|
6269
6274
|
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, {
|
|
6270
6275
|
id: a,
|
|
6271
6276
|
via: "agent"
|
|
6272
6277
|
}), await n.dedupe.add(r), "acted");
|
|
6273
|
-
},
|
|
6278
|
+
}, Du = O("_voltro_wakeups", {
|
|
6274
6279
|
id: y({ prefix: "wakeup" }),
|
|
6275
6280
|
tenantId: k(),
|
|
6276
6281
|
kind: k(),
|
|
6277
6282
|
refId: k(),
|
|
6278
6283
|
wakeAt: A(),
|
|
6279
6284
|
status: k()
|
|
6280
|
-
}).index(["status", "wakeAt"]).index(["tenantId"]),
|
|
6281
|
-
let t = e.now?.() ?? /* @__PURE__ */ new Date(), n = await
|
|
6285
|
+
}).index(["status", "wakeAt"]).index(["tenantId"]), Ou = async (e) => {
|
|
6286
|
+
let t = e.now?.() ?? /* @__PURE__ */ new Date(), n = await sl(e.store, t, e.batchLimit ?? 100);
|
|
6282
6287
|
if (n.length === 0) return 0;
|
|
6283
6288
|
let r = 0;
|
|
6284
|
-
for (let t of n) if (await
|
|
6289
|
+
for (let t of n) if (await rl(e.store, t)) try {
|
|
6285
6290
|
await e.adapter.wake(t), r++;
|
|
6286
6291
|
} catch (n) {
|
|
6287
|
-
await
|
|
6292
|
+
await il(e.store, t), e.log?.warn("wake: adapter failed — released for retry", {
|
|
6288
6293
|
tenantId: t.tenantId,
|
|
6289
6294
|
kind: t.kind,
|
|
6290
6295
|
refId: t.refId,
|
|
@@ -6292,11 +6297,11 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6292
6297
|
});
|
|
6293
6298
|
}
|
|
6294
6299
|
return r > 0 && e.log?.info("wake: woke due deployments", { count: r }), r;
|
|
6295
|
-
},
|
|
6300
|
+
}, ku = (e, t = 1e3) => {
|
|
6296
6301
|
let n = !1, r, i = async () => {
|
|
6297
6302
|
if (!n) {
|
|
6298
6303
|
try {
|
|
6299
|
-
await
|
|
6304
|
+
await Ou(e);
|
|
6300
6305
|
} catch (t) {
|
|
6301
6306
|
e.log?.warn("wake: tick failed", { reason: t instanceof Error ? t.message : String(t) });
|
|
6302
6307
|
}
|
|
@@ -6306,10 +6311,10 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6306
6311
|
return i(), { stop: () => {
|
|
6307
6312
|
n = !0, r !== void 0 && clearTimeout(r);
|
|
6308
6313
|
} };
|
|
6309
|
-
},
|
|
6314
|
+
}, Au = (e) => ({ wake: async () => {
|
|
6310
6315
|
await e.start();
|
|
6311
|
-
} }),
|
|
6312
|
-
let t = e.fetchImpl ?? fetch, n = e.now ?? Date.now, r = e.sleep ??
|
|
6316
|
+
} }), ju = (e) => new Promise((t) => setTimeout(t, e)), Mu = (e) => {
|
|
6317
|
+
let t = e.fetchImpl ?? fetch, n = e.now ?? Date.now, r = e.sleep ?? ju, i = e.spawnImpl ?? It, 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 () => {
|
|
6313
6318
|
try {
|
|
6314
6319
|
let n = await t(e.healthUrl);
|
|
6315
6320
|
return d(n);
|
|
@@ -6363,11 +6368,11 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6363
6368
|
},
|
|
6364
6369
|
stop: m
|
|
6365
6370
|
};
|
|
6366
|
-
},
|
|
6371
|
+
}, Nu = async (e) => {
|
|
6367
6372
|
if (e.signals.connectedClients() > 0 || e.signals.inFlightRequests() > 0 || e.signals.activeWorkflowExecutions() > 0) return !1;
|
|
6368
|
-
let t = (e.now?.() ?? /* @__PURE__ */ new Date()).getTime() + (e.wakeLookaheadMs ?? 3e4), n = await
|
|
6373
|
+
let t = (e.now?.() ?? /* @__PURE__ */ new Date()).getTime() + (e.wakeLookaheadMs ?? 3e4), n = await cl(e.store);
|
|
6369
6374
|
return !(n !== null && n.wakeAt.getTime() <= t);
|
|
6370
|
-
},
|
|
6375
|
+
}, Pu = (e, t = Date.now) => {
|
|
6371
6376
|
let n;
|
|
6372
6377
|
return {
|
|
6373
6378
|
update: (r) => {
|
|
@@ -6379,7 +6384,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6379
6384
|
n = void 0;
|
|
6380
6385
|
}
|
|
6381
6386
|
};
|
|
6382
|
-
},
|
|
6387
|
+
}, Fu = () => {
|
|
6383
6388
|
let e = 0, t = 0;
|
|
6384
6389
|
return {
|
|
6385
6390
|
onRequestStart: () => {
|
|
@@ -6397,7 +6402,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6397
6402
|
inFlightRequests: () => e,
|
|
6398
6403
|
openConnections: () => t
|
|
6399
6404
|
};
|
|
6400
|
-
},
|
|
6405
|
+
}, Iu = (e) => ({ run: async (t) => (e.onActivity?.(), await e.ensureAwake(), t()) }), Lu = (e, t, n, r) => new Promise((i, a) => {
|
|
6401
6406
|
let o = st.request({
|
|
6402
6407
|
host: n,
|
|
6403
6408
|
port: r,
|
|
@@ -6408,7 +6413,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6408
6413
|
t.writeHead(e.statusCode ?? 502, e.headers), e.pipe(t), e.on("end", i), e.on("error", a);
|
|
6409
6414
|
});
|
|
6410
6415
|
o.on("error", a), e.pipe(o);
|
|
6411
|
-
}),
|
|
6416
|
+
}), Ru = (e, t, n, r, i) => new Promise((a, o) => {
|
|
6412
6417
|
let s = st.request({
|
|
6413
6418
|
host: r,
|
|
6414
6419
|
port: i,
|
|
@@ -6423,21 +6428,21 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6423
6428
|
};
|
|
6424
6429
|
t.on("close", s), r.on("close", s), r.on("error", o);
|
|
6425
6430
|
}), s.on("error", o), s.end();
|
|
6426
|
-
}),
|
|
6427
|
-
let t =
|
|
6431
|
+
}), zu = (e) => {
|
|
6432
|
+
let t = Iu({
|
|
6428
6433
|
ensureAwake: () => e.supervisor.start(),
|
|
6429
6434
|
...e.onActivity === void 0 ? {} : { onActivity: e.onActivity }
|
|
6430
6435
|
}), n = e.activity, r = st.createServer((r, i) => {
|
|
6431
|
-
n?.onRequestStart(), i.on("close", () => n?.onRequestEnd()), t.run(() =>
|
|
6436
|
+
n?.onRequestStart(), i.on("close", () => n?.onRequestEnd()), t.run(() => Lu(r, i, e.targetHost, e.targetPort)).catch((t) => {
|
|
6432
6437
|
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");
|
|
6433
6438
|
});
|
|
6434
6439
|
});
|
|
6435
6440
|
return r.on("upgrade", (r, i, a) => {
|
|
6436
|
-
n?.onConnect(), i.on("close", () => n?.onDisconnect()), t.run(() =>
|
|
6441
|
+
n?.onConnect(), i.on("close", () => n?.onDisconnect()), t.run(() => Ru(r, i, a, e.targetHost, e.targetPort)).catch((t) => {
|
|
6437
6442
|
e.log?.warn("wake-router: upgrade proxy failed", { reason: t instanceof Error ? t.message : String(t) }), i.destroy();
|
|
6438
6443
|
});
|
|
6439
6444
|
}), r;
|
|
6440
|
-
},
|
|
6445
|
+
}, Bu = async (e) => {
|
|
6441
6446
|
try {
|
|
6442
6447
|
return (await e.query({
|
|
6443
6448
|
table: "_voltro_workflow_runs",
|
|
@@ -6454,15 +6459,15 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6454
6459
|
} catch {
|
|
6455
6460
|
return 0;
|
|
6456
6461
|
}
|
|
6457
|
-
},
|
|
6458
|
-
let t =
|
|
6462
|
+
}, Vu = async (e) => {
|
|
6463
|
+
let t = Au(e.supervisor), n = await Ou({
|
|
6459
6464
|
store: e.store,
|
|
6460
6465
|
adapter: t,
|
|
6461
6466
|
...e.now === void 0 ? {} : { now: e.now },
|
|
6462
6467
|
...e.log === void 0 ? {} : { log: e.log }
|
|
6463
6468
|
});
|
|
6464
6469
|
n > 0 && e.idleGate.reset();
|
|
6465
|
-
let r = await
|
|
6470
|
+
let r = await Nu({
|
|
6466
6471
|
store: e.store,
|
|
6467
6472
|
signals: e.signals,
|
|
6468
6473
|
...e.wakeLookaheadMs === void 0 ? {} : { wakeLookaheadMs: e.wakeLookaheadMs },
|
|
@@ -6472,12 +6477,12 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6472
6477
|
woke: n,
|
|
6473
6478
|
stopped: i
|
|
6474
6479
|
};
|
|
6475
|
-
},
|
|
6476
|
-
let t =
|
|
6480
|
+
}, Hu = async (e) => {
|
|
6481
|
+
let t = Pu(e.idleGraceMs ?? 6e4), n = e.tickMs ?? 1e3, r = Fu(), i = 0, a = e.signals === void 0, o = e.signals ?? {
|
|
6477
6482
|
connectedClients: () => r.openConnections(),
|
|
6478
6483
|
inFlightRequests: () => r.inFlightRequests(),
|
|
6479
6484
|
activeWorkflowExecutions: () => i
|
|
6480
|
-
}, s =
|
|
6485
|
+
}, s = zu({
|
|
6481
6486
|
supervisor: e.supervisor,
|
|
6482
6487
|
targetHost: e.targetHost,
|
|
6483
6488
|
targetPort: e.targetPort,
|
|
@@ -6496,7 +6501,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6496
6501
|
let l = !1, u, d = e.firedRetentionMs ?? 10 * 6e4, f = 0, p = async () => {
|
|
6497
6502
|
if (!l) {
|
|
6498
6503
|
try {
|
|
6499
|
-
if (a && (i = await
|
|
6504
|
+
if (a && (i = await Bu(e.store)), await Vu({
|
|
6500
6505
|
store: e.store,
|
|
6501
6506
|
supervisor: e.supervisor,
|
|
6502
6507
|
signals: o,
|
|
@@ -6504,7 +6509,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6504
6509
|
...e.wakeLookaheadMs === void 0 ? {} : { wakeLookaheadMs: e.wakeLookaheadMs },
|
|
6505
6510
|
...e.log === void 0 ? {} : { log: e.log }
|
|
6506
6511
|
}), f++ % 60 == 0) {
|
|
6507
|
-
let t = await
|
|
6512
|
+
let t = await ul(e.store, { firedOlderThan: new Date(Date.now() - d) });
|
|
6508
6513
|
t > 0 && e.log?.info("orchestrator: pruned fired wakeups", { count: t });
|
|
6509
6514
|
}
|
|
6510
6515
|
} catch (t) {
|
|
@@ -6519,14 +6524,14 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6519
6524
|
l = !0, u !== void 0 && clearTimeout(u), await new Promise((e) => s.close(() => e()));
|
|
6520
6525
|
}
|
|
6521
6526
|
};
|
|
6522
|
-
},
|
|
6527
|
+
}, Uu = (e) => e, Wu = class extends z.TaggedError()("AnalyticsError", {
|
|
6523
6528
|
provider: z.String,
|
|
6524
6529
|
operation: z.String,
|
|
6525
6530
|
cause: z.String
|
|
6526
|
-
}) {},
|
|
6531
|
+
}) {}, Gu = class extends z.TaggedError()("AnalyticsCapabilityNotSupported", {
|
|
6527
6532
|
provider: z.String,
|
|
6528
6533
|
capability: z.String
|
|
6529
|
-
}) {},
|
|
6534
|
+
}) {}, Ku = class extends Ye.Tag("@voltro/AnalyticsSink")() {}, qu = (e, t) => ({
|
|
6530
6535
|
info: e.info,
|
|
6531
6536
|
track: (n) => e.track(n.tenantId === void 0 ? {
|
|
6532
6537
|
...n,
|
|
@@ -6545,20 +6550,20 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6545
6550
|
tenantId: t
|
|
6546
6551
|
} : n),
|
|
6547
6552
|
...e.mirror === void 0 ? {} : { mirror: e.mirror }
|
|
6548
|
-
}),
|
|
6549
|
-
let e = yield*
|
|
6553
|
+
}), Ju = () => F.gen(function* () {
|
|
6554
|
+
let e = yield* Ku, t = yield* F.serviceOption(Ne), n = it.match(t, {
|
|
6550
6555
|
onNone: () => null,
|
|
6551
6556
|
onSome: (e) => e.tenantId ?? null
|
|
6552
6557
|
});
|
|
6553
|
-
return n === null ? e :
|
|
6554
|
-
}),
|
|
6555
|
-
let e = (e) => F.fail(new
|
|
6556
|
-
provider:
|
|
6558
|
+
return n === null ? e : qu(e, n);
|
|
6559
|
+
}), Yu = "noop", Xu = () => {
|
|
6560
|
+
let e = (e) => F.fail(new Gu({
|
|
6561
|
+
provider: Yu,
|
|
6557
6562
|
capability: e
|
|
6558
6563
|
}));
|
|
6559
6564
|
return {
|
|
6560
6565
|
info: {
|
|
6561
|
-
provider:
|
|
6566
|
+
provider: Yu,
|
|
6562
6567
|
capabilities: {
|
|
6563
6568
|
track: !0,
|
|
6564
6569
|
aggregate: !1,
|
|
@@ -6572,8 +6577,8 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6572
6577
|
timeseries: () => e("timeseries"),
|
|
6573
6578
|
topN: () => e("topN")
|
|
6574
6579
|
};
|
|
6575
|
-
},
|
|
6576
|
-
if (e.length === 0) return
|
|
6580
|
+
}, Zu = (e) => {
|
|
6581
|
+
if (e.length === 0) return Xu();
|
|
6577
6582
|
if (e.length === 1) return e[0];
|
|
6578
6583
|
let t = {
|
|
6579
6584
|
provider: "compose",
|
|
@@ -6590,7 +6595,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6590
6595
|
discard: !0
|
|
6591
6596
|
}), r = (t, n) => {
|
|
6592
6597
|
let r = e.find((e) => e.info.capabilities[t]);
|
|
6593
|
-
return r === void 0 ? F.fail(new
|
|
6598
|
+
return r === void 0 ? F.fail(new Gu({
|
|
6594
6599
|
provider: "compose",
|
|
6595
6600
|
capability: t
|
|
6596
6601
|
})) : n(r);
|
|
@@ -6613,11 +6618,11 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6613
6618
|
topN: (e) => r("topN", (t) => t.topN(e)),
|
|
6614
6619
|
...a === void 0 ? {} : { mirror: a }
|
|
6615
6620
|
};
|
|
6616
|
-
},
|
|
6621
|
+
}, Qu = (e) => {
|
|
6617
6622
|
let t = e.filter((e) => e.dispose !== void 0);
|
|
6618
6623
|
return {
|
|
6619
6624
|
kind: "compose",
|
|
6620
|
-
build: (t) =>
|
|
6625
|
+
build: (t) => Zu(e.map((e) => e.build(t))),
|
|
6621
6626
|
tables: e.flatMap((e) => e.tables ?? []),
|
|
6622
6627
|
initialize: (t) => F.forEach(e, (e) => e.initialize ? e.initialize(t) : F.void, {
|
|
6623
6628
|
concurrency: 1,
|
|
@@ -6628,15 +6633,15 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6628
6633
|
discard: !0
|
|
6629
6634
|
}) } : {}
|
|
6630
6635
|
};
|
|
6631
|
-
}, Qu = {
|
|
6632
|
-
kind: "noop",
|
|
6633
|
-
build: () => Yu()
|
|
6634
6636
|
}, $u = {
|
|
6637
|
+
kind: "noop",
|
|
6638
|
+
build: () => Xu()
|
|
6639
|
+
}, ed = {
|
|
6635
6640
|
tables: [],
|
|
6636
6641
|
detach: () => {}
|
|
6637
|
-
},
|
|
6642
|
+
}, td = (e) => {
|
|
6638
6643
|
let { store: t, sink: n, log: r } = e, i = n.mirror;
|
|
6639
|
-
if (i === void 0 || i.tables.length === 0) return
|
|
6644
|
+
if (i === void 0 || i.tables.length === 0) return ed;
|
|
6640
6645
|
let a = e.run ?? ((e) => F.runPromise(e)), o = i.primaryKey ?? "id", s = new Set(i.tables), c = (e) => {
|
|
6641
6646
|
if (e.op === "delete") {
|
|
6642
6647
|
let t = e.old;
|
|
@@ -6660,11 +6665,11 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6660
6665
|
tables: i.tables,
|
|
6661
6666
|
detach: l
|
|
6662
6667
|
};
|
|
6663
|
-
},
|
|
6668
|
+
}, nd = (e) => {
|
|
6664
6669
|
let t = typeof e.refresh == "string" ? { interval: e.refresh } : e.refresh, n = e.strategy ?? "replace";
|
|
6665
6670
|
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`);
|
|
6666
6671
|
if (e.incremental !== void 0) {
|
|
6667
|
-
let t =
|
|
6672
|
+
let t = su({
|
|
6668
6673
|
aggregations: [{
|
|
6669
6674
|
op: e.incremental.op,
|
|
6670
6675
|
...e.incremental.column === void 0 ? {} : { column: e.incremental.column }
|
|
@@ -6686,47 +6691,47 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6686
6691
|
build: e.build,
|
|
6687
6692
|
...e.incremental === void 0 ? {} : { incremental: e.incremental }
|
|
6688
6693
|
};
|
|
6689
|
-
},
|
|
6694
|
+
}, rd = (e) => typeof e == "object" && !!e && e._voltroAggregate === !0, id = class extends z.TaggedError()("AggregateStale", {
|
|
6690
6695
|
name: z.String,
|
|
6691
6696
|
ageMs: z.Number,
|
|
6692
6697
|
maxAgeMs: z.Number
|
|
6693
|
-
}) {},
|
|
6698
|
+
}) {}, ad = class extends z.TaggedError()("AggregateNotFound", { name: z.String }) {}, od = class extends z.TaggedError()("AggregateError", {
|
|
6694
6699
|
name: z.String,
|
|
6695
6700
|
operation: z.String,
|
|
6696
6701
|
cause: z.String
|
|
6697
|
-
}) {},
|
|
6698
|
-
return (yield*
|
|
6699
|
-
}),
|
|
6702
|
+
}) {}, sd = class extends Ye.Tag("@voltro/AggregateRegistry")() {}, cd = (e) => F.gen(function* () {
|
|
6703
|
+
return (yield* sd).getHandle(e);
|
|
6704
|
+
}), ld = (e, n, r) => {
|
|
6700
6705
|
if (e.crossTenant || !n.has(e.table) || r == null) return e;
|
|
6701
6706
|
let i = d("tenantId", r);
|
|
6702
6707
|
return {
|
|
6703
6708
|
...e,
|
|
6704
6709
|
predicate: e.predicate ? t(e.predicate, i) : i
|
|
6705
6710
|
};
|
|
6706
|
-
},
|
|
6711
|
+
}, ud = (e, t, n) => n === "" && !e.crossTenant && t.has(e.table), dd = (e) => e?.type === "user" && e.tenantId === "", fd = (e, n) => {
|
|
6707
6712
|
if (e.includeDeleted || !n.has(e.table)) return e;
|
|
6708
6713
|
let r = C("deletedAt");
|
|
6709
6714
|
return {
|
|
6710
6715
|
...e,
|
|
6711
6716
|
predicate: e.predicate ? t(e.predicate, r) : r
|
|
6712
6717
|
};
|
|
6713
|
-
},
|
|
6718
|
+
}, pd = (e, t) => t, md = (e) => F.runPromiseExit(e).then((e) => {
|
|
6714
6719
|
if ($e.isSuccess(e)) return e.value;
|
|
6715
6720
|
let t = N.failureOption(e.cause);
|
|
6716
6721
|
throw it.isSome(t) ? t.value : N.squash(e.cause);
|
|
6717
|
-
}),
|
|
6722
|
+
}), hd = (e, t) => e.pipe(F.provideService(Ne, t)), gd = async (e, t, n) => {
|
|
6718
6723
|
let r = await F.runPromise(Re(t, e.guards, n));
|
|
6719
6724
|
if (r) throw r;
|
|
6720
|
-
},
|
|
6725
|
+
}, _d = async (e) => {
|
|
6721
6726
|
if (Gn() === void 0) return e;
|
|
6722
|
-
let t = await
|
|
6727
|
+
let t = await md(qn(e.subject, (e) => {
|
|
6723
6728
|
console.error("[voltro] row filter failed to load", e);
|
|
6724
6729
|
}));
|
|
6725
6730
|
return {
|
|
6726
6731
|
...e,
|
|
6727
6732
|
rowFilter: t
|
|
6728
6733
|
};
|
|
6729
|
-
},
|
|
6734
|
+
}, vd = async (e) => {
|
|
6730
6735
|
let t = `${e.kind}.${e.name}`, n = Date.now(), r = "ok";
|
|
6731
6736
|
try {
|
|
6732
6737
|
if (e.interceptor) {
|
|
@@ -6755,28 +6760,28 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6755
6760
|
status: r
|
|
6756
6761
|
});
|
|
6757
6762
|
}
|
|
6758
|
-
},
|
|
6763
|
+
}, yd = /* @__PURE__ */ new Set([1213, 1205]), bd = /* @__PURE__ */ new Set([
|
|
6759
6764
|
"ER_LOCK_DEADLOCK",
|
|
6760
6765
|
"ER_LOCK_WAIT_TIMEOUT",
|
|
6761
6766
|
"40001",
|
|
6762
6767
|
"40P01"
|
|
6763
|
-
]),
|
|
6768
|
+
]), xd = (e) => {
|
|
6764
6769
|
let t = e;
|
|
6765
6770
|
for (let e = 0; e < 6 && typeof t == "object" && t; e++) {
|
|
6766
6771
|
let e = t;
|
|
6767
|
-
if (typeof e.errno == "number" &&
|
|
6772
|
+
if (typeof e.errno == "number" && yd.has(e.errno) || typeof e.code == "string" && bd.has(e.code) || typeof e.sqlState == "string" && bd.has(e.sqlState)) return !0;
|
|
6768
6773
|
t = e.cause;
|
|
6769
6774
|
}
|
|
6770
6775
|
return !1;
|
|
6771
|
-
},
|
|
6772
|
-
let n = t?.delay ?? ((e) =>
|
|
6776
|
+
}, Sd = 3, Cd = (e) => new Promise((t) => setTimeout(t, e)), wd = async (e, t) => {
|
|
6777
|
+
let n = t?.delay ?? ((e) => Cd(e * 20 + Math.floor(Math.random() * 30)));
|
|
6773
6778
|
for (let t = 1;; t++) try {
|
|
6774
6779
|
return await e();
|
|
6775
6780
|
} catch (e) {
|
|
6776
|
-
if (t >=
|
|
6781
|
+
if (t >= Sd || !xd(e)) throw e;
|
|
6777
6782
|
await n(t);
|
|
6778
6783
|
}
|
|
6779
|
-
},
|
|
6784
|
+
}, Td = (e) => (t, n, r) => vd({
|
|
6780
6785
|
name: t.descriptor.name,
|
|
6781
6786
|
kind: "mutation",
|
|
6782
6787
|
input: n,
|
|
@@ -6784,11 +6789,11 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6784
6789
|
...e.interceptor ? { interceptor: e.interceptor } : {},
|
|
6785
6790
|
...e.recordMetric ? { recordMetric: e.recordMetric } : {},
|
|
6786
6791
|
runExecutor: async () => {
|
|
6787
|
-
await
|
|
6788
|
-
let i = await
|
|
6792
|
+
await gd(t.descriptor, r.subject, n);
|
|
6793
|
+
let i = await _d(r), a = [], o = await wd(async () => (a.length = 0, e.store.transactional(async (o) => {
|
|
6789
6794
|
let s = e.undoCapture?.(o), c = s ? s.tx : o, l = e.buildContext(i, c, { afterCommit: (e) => {
|
|
6790
6795
|
a.push(e);
|
|
6791
|
-
} }), u = t.executor(n, l), d = F.isEffect(u) ? await e.runEffect(
|
|
6796
|
+
} }), u = t.executor(n, l), d = F.isEffect(u) ? await e.runEffect(hd(u, r.subject), l.store) : await u;
|
|
6792
6797
|
return s && await s.persist(l.store, {
|
|
6793
6798
|
tag: t.descriptor.name,
|
|
6794
6799
|
subject: r.subject,
|
|
@@ -6798,30 +6803,30 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6798
6803
|
for (let e of a) await e();
|
|
6799
6804
|
return o;
|
|
6800
6805
|
}
|
|
6801
|
-
}),
|
|
6806
|
+
}), Ed = (e) => e && typeof e == "object" && "descriptor" in e ? e.descriptor : e, Dd = (e) => typeof e == "object" && !!e && !Array.isArray(e) && "table" in e && "order" in e, Od = (e) => {
|
|
6802
6807
|
let t = e.descriptor.source;
|
|
6803
6808
|
return t == null ? [] : typeof t == "string" ? [t] : [...t];
|
|
6804
|
-
},
|
|
6809
|
+
}, kd = (e, t) => (n) => () => {
|
|
6805
6810
|
let r = e.descriptor.guards;
|
|
6806
6811
|
return !r || r.length === 0 ? Promise.resolve(null) : F.runPromise(Re(n, r, t));
|
|
6807
|
-
},
|
|
6808
|
-
let i = e.buildContext(r), a =
|
|
6812
|
+
}, Ad = (e) => (t, n) => (r) => {
|
|
6813
|
+
let i = e.buildContext(r), a = kd(t, n)(r.subject), o = async () => {
|
|
6809
6814
|
let i = await a();
|
|
6810
6815
|
if (i) throw i;
|
|
6811
|
-
let o = e.buildContext(await
|
|
6812
|
-
return F.isEffect(s) ? F.runPromise(e.provideEffect(
|
|
6816
|
+
let o = e.buildContext(await _d(r)), s = t.executor(n, o);
|
|
6817
|
+
return F.isEffect(s) ? F.runPromise(e.provideEffect(hd(s, r.subject), o.store)) : Ed(await Promise.resolve(s));
|
|
6813
6818
|
}, s = (n) => {
|
|
6814
|
-
let i =
|
|
6815
|
-
return
|
|
6819
|
+
let i = Ed(n);
|
|
6820
|
+
return Dd(i) ? e.finalize(i, r) : {
|
|
6816
6821
|
__voltroComputed: !0,
|
|
6817
6822
|
value: i,
|
|
6818
|
-
dependentTables:
|
|
6823
|
+
dependentTables: Od(t),
|
|
6819
6824
|
tenantId: r.subject?.tenantId ?? null,
|
|
6820
6825
|
recompute: o
|
|
6821
6826
|
};
|
|
6822
6827
|
}, c = () => {
|
|
6823
6828
|
let a = t.executor(n, i);
|
|
6824
|
-
return F.isEffect(a) ? e.provideEffect(
|
|
6829
|
+
return F.isEffect(a) ? e.provideEffect(hd(a, r.subject), i.store).pipe(F.map(s)) : a instanceof Promise ? F.promise(() => a).pipe(F.map(s)) : s(a);
|
|
6825
6830
|
}, l = () => {
|
|
6826
6831
|
let e = t.descriptor.guards;
|
|
6827
6832
|
return !e || e.length === 0 ? c() : Re(r.subject, e, n).pipe(F.flatMap((e) => {
|
|
@@ -6843,14 +6848,14 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6843
6848
|
traceId: r.traceId,
|
|
6844
6849
|
...r.spanId === void 0 ? {} : { spanId: r.spanId }
|
|
6845
6850
|
});
|
|
6846
|
-
},
|
|
6847
|
-
let i = await
|
|
6851
|
+
}, jd = (e) => async (t, n, r) => {
|
|
6852
|
+
let i = await _d(r), a = Ad(e)(t, n)(i), o = F.isEffect(a) ? await md(a) : a;
|
|
6848
6853
|
return rr(o) ? o.value : e.queryRows(o);
|
|
6849
|
-
},
|
|
6854
|
+
}, Md = (e) => (t, n, r, i) => {
|
|
6850
6855
|
let a = !1, o;
|
|
6851
6856
|
return (async () => {
|
|
6852
6857
|
try {
|
|
6853
|
-
let s = await
|
|
6858
|
+
let s = await _d(r), c = Ad(e)(t, n)(s), l = F.isEffect(c) ? await md(c) : c, u = (e) => i(e), d = rr(l) ? await e.subscribeComputed(l, u, s) : await e.subscribeDescriptor(l, u, s);
|
|
6854
6859
|
a ? d() : o = d;
|
|
6855
6860
|
} catch (e) {
|
|
6856
6861
|
i({
|
|
@@ -6861,7 +6866,7 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6861
6866
|
})(), () => {
|
|
6862
6867
|
a = !0, o?.();
|
|
6863
6868
|
};
|
|
6864
|
-
},
|
|
6869
|
+
}, Nd = (e) => (t, n, r) => vd({
|
|
6865
6870
|
name: t.descriptor.name,
|
|
6866
6871
|
kind: "action",
|
|
6867
6872
|
input: n,
|
|
@@ -6869,16 +6874,16 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6869
6874
|
...e.interceptor ? { interceptor: e.interceptor } : {},
|
|
6870
6875
|
...e.recordMetric ? { recordMetric: e.recordMetric } : {},
|
|
6871
6876
|
runExecutor: async () => {
|
|
6872
|
-
await
|
|
6873
|
-
let i = e.buildContext(await
|
|
6874
|
-
return F.isEffect(a) ? e.runEffect(
|
|
6877
|
+
await gd(t.descriptor, r.subject, n);
|
|
6878
|
+
let i = e.buildContext(await _d(r)), a = t.executor(n, i);
|
|
6879
|
+
return F.isEffect(a) ? e.runEffect(hd(a, r.subject), i.store) : a;
|
|
6875
6880
|
}
|
|
6876
|
-
}),
|
|
6881
|
+
}), Pd = (e) => e instanceof Date ? e.toISOString() : typeof e == "string" && e.length > 0 ? e : null, Fd = (e) => typeof e == "string" && e.length > 0 ? e : null, Id = [
|
|
6877
6882
|
"updatedAt",
|
|
6878
6883
|
"createdAt",
|
|
6879
6884
|
"updatedBy",
|
|
6880
6885
|
"createdBy"
|
|
6881
|
-
],
|
|
6886
|
+
], Ld = (e) => Id.some((t) => t in e), Rd = (e, t, n) => {
|
|
6882
6887
|
let r = {
|
|
6883
6888
|
table: t.table,
|
|
6884
6889
|
id: t.id,
|
|
@@ -6893,14 +6898,14 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6893
6898
|
found: !1
|
|
6894
6899
|
};
|
|
6895
6900
|
let i = t.column === void 0 ? void 0 : e[t.column];
|
|
6896
|
-
if (!
|
|
6901
|
+
if (!Ld(e)) return {
|
|
6897
6902
|
...r,
|
|
6898
6903
|
value: i,
|
|
6899
6904
|
lastWrite: null,
|
|
6900
6905
|
attribution: "none",
|
|
6901
6906
|
found: !0
|
|
6902
6907
|
};
|
|
6903
|
-
let a =
|
|
6908
|
+
let a = Fd(e.updatedBy) ?? Fd(e.createdBy), o = Pd(e.updatedAt) ?? Pd(e.createdAt);
|
|
6904
6909
|
return {
|
|
6905
6910
|
...r,
|
|
6906
6911
|
value: i,
|
|
@@ -6912,12 +6917,12 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6912
6917
|
attribution: "audit",
|
|
6913
6918
|
found: !0
|
|
6914
6919
|
};
|
|
6915
|
-
},
|
|
6920
|
+
}, zd = (e, t) => {
|
|
6916
6921
|
let n = e.map((e) => {
|
|
6917
6922
|
let n = e.newValue ?? e.value, r = t.column !== void 0 && n && typeof n == "object" ? n[t.column] : e.newValue ?? e.value;
|
|
6918
6923
|
return {
|
|
6919
|
-
actor: { id:
|
|
6920
|
-
at:
|
|
6924
|
+
actor: { id: Fd(e.actor) ?? Fd(e.changedBy) },
|
|
6925
|
+
at: Pd(e.at) ?? Pd(e.changedAt),
|
|
6921
6926
|
...e.traceId === void 0 ? {} : { traceId: e.traceId },
|
|
6922
6927
|
value: r
|
|
6923
6928
|
};
|
|
@@ -6932,12 +6937,12 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6932
6937
|
history: n,
|
|
6933
6938
|
found: n.length > 0
|
|
6934
6939
|
};
|
|
6935
|
-
},
|
|
6940
|
+
}, Bd = (e) => {
|
|
6936
6941
|
let t = e.new?.id;
|
|
6937
6942
|
if (typeof t == "string") return t;
|
|
6938
6943
|
let n = e.old?.id;
|
|
6939
6944
|
return typeof n == "string" ? n : void 0;
|
|
6940
|
-
},
|
|
6945
|
+
}, Vd = (e) => {
|
|
6941
6946
|
let t = {};
|
|
6942
6947
|
if (e.op === "insert") for (let [n, r] of Object.entries(e.new ?? {})) t[n] = {
|
|
6943
6948
|
from: void 0,
|
|
@@ -6957,11 +6962,11 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6957
6962
|
return {
|
|
6958
6963
|
table: e.table,
|
|
6959
6964
|
op: e.op,
|
|
6960
|
-
id:
|
|
6965
|
+
id: Bd(e),
|
|
6961
6966
|
fields: t
|
|
6962
6967
|
};
|
|
6963
|
-
},
|
|
6964
|
-
let t = e.map(
|
|
6968
|
+
}, Hd = (e) => {
|
|
6969
|
+
let t = e.map(Vd);
|
|
6965
6970
|
return {
|
|
6966
6971
|
rows: t,
|
|
6967
6972
|
summary: {
|
|
@@ -6970,21 +6975,21 @@ var K = /* @__PURE__ */ new Map(), pr = (e, t) => {
|
|
|
6970
6975
|
deletes: t.filter((e) => e.op === "delete").length
|
|
6971
6976
|
}
|
|
6972
6977
|
};
|
|
6973
|
-
},
|
|
6978
|
+
}, Ud = class extends Error {
|
|
6974
6979
|
constructor() {
|
|
6975
6980
|
super("voltro:preview-rollback"), this.name = "PreviewRollback";
|
|
6976
6981
|
}
|
|
6977
|
-
},
|
|
6982
|
+
}, Wd = async (e, t) => {
|
|
6978
6983
|
let n, r = !1;
|
|
6979
6984
|
try {
|
|
6980
6985
|
await e.transactional(async (e) => {
|
|
6981
|
-
throw n = await t(e), r = !0, new
|
|
6986
|
+
throw n = await t(e), r = !0, new Ud();
|
|
6982
6987
|
});
|
|
6983
6988
|
} catch (e) {
|
|
6984
|
-
if (!(e instanceof
|
|
6989
|
+
if (!(e instanceof Ud)) throw e;
|
|
6985
6990
|
}
|
|
6986
6991
|
if (!r) throw Error("preview: handler did not complete");
|
|
6987
6992
|
return n;
|
|
6988
|
-
},
|
|
6993
|
+
}, Gd = "framework-runtime";
|
|
6989
6994
|
//#endregion
|
|
6990
|
-
export {
|
|
6995
|
+
export { Aa as API_KEYS_TABLE, zs as AccessDenied, od as AggregateError, hu as AggregateMaintainer, ad as AggregateNotFound, sd as AggregateRegistry, id as AggregateStale, Gu as AnalyticsCapabilityNotSupported, Wu as AnalyticsError, Ku as AnalyticsSink, X as CONNECTIONS_TABLE, Ro as CONNECTION_GRANTS_TABLE, Ic as CircuitBreaker, Pc as CircuitOpen, ss as ConnectionNotConnected, Wi as DEFAULT_MAX_RPC_BODY_BYTES, as as DEFAULT_REFRESH_SKEW_MS, Hn as DEFAULT_ROW_FILTER_RETRY, fl as DORMANCY_WAKEUP_TENANT, Qr as DeleteBuilder, er as Dispatcher, Ga as EffectStore, ys as GRANT_TTL_MS, nn as InMemoryDataStore, Wt as IndexedMatcher, Lt as LinearScanMatcher, nt as MetricBoundaries, Yu as NOOP_ANALYTICS_PROVIDER, Kn as NO_ROW_FILTER, Gr as NoRowFound, Co as OUTBOX_ATTEMPTS_TABLE, Ao as OUTBOX_ATTEMPT_LOG_CAP, Y as OUTBOX_TABLE, Kr as OptimisticLockError, Rs as REBAC_ADMIN_SCOPE, os as REFRESH_LEASE_MS, Gd as RUNTIME_NAME, Tu as ReactionRateLimiter, yi as ReplicatedDataStore, Vn as RowFilterUnavailable, dl as SCHEDULE_SUBJECT, Wa as SYSTEM_SUBJECT, Xr as SelectBuilder, oc as SsrfBlockedError, ti as StoreOperationFailed, qt as SubscriptionRegistry, ni as TableValidationFailed, ei as TenantScopeViolation, tu as TimelineRecorder, Pl as UndoBoundaryError, Il as UndoStack, Zr as UpdateBuilder, pc as VOLTRO_AUDIT_MIXIN_ID, mc as VOLTRO_SOFT_DELETE_MIXIN_ID, hc as VOLTRO_TENANT_MIXIN_ID, to as WorkflowPayloadError, hr as _connectionStreamCount, gr as _resetConnectionSubjectsForTest, Bo as _voltroConnectionGrantsTable, Lo as _voltroConnectionsTable, gu as _voltroRebacTuplesTable, Cl as _voltroScheduleClaimsTable, Sl as _voltroScheduleRunsTable, wl as _voltroTracesTable, Tl as _voltroUndoLogTable, Du as _voltroWakeupsTable, vo as _voltroWorkflowEventDeliveriesTable, _o as _voltroWorkflowEventsTable, ci as actingUserId, Ua as apiKeyManagementRoutes, ai as applyDefined, pu as applyDelta, Rl as applyInverse, zl as applyInverses, Xn as applyRowFilter, Zn as applyRowFilterToDescriptor, fd as applySoftDeleteScope, ld as applyTenantScope, ql as applyUndoInvocation, Ys as assertCan, Wo as assertConnectionCipherConfigured, td as attachAnalyticsMirror, Yi as awaitServerListening, ko as backoffMs, Cs as beginOAuthConnect, cr as bindConnectionSubject, Ui as bindMutation, Fi as bindStream, Pi as bindSubscription, ki as bindSubscriptionUntyped, du as buildIvmState, Hd as buildPreview, yu as buildRebacInterceptor, xu as buildRebacReadFilter, pi as buildSubjectKey, ea as buildTracingLayer, ha as cachedBackend, Js as can, el as cancelWakeup, su as classifyShape, ds as clearConnectionRefreshFlights, Ws as clearResourcePolicies, a as clearRetentions, zc as clearSystemStoreHandle, Yc as compileCron, ws as completeOAuthConnect, Qu as composeAnalytics, Zu as composeAnalyticsSinks, bs as connectionCallbackPath, Uo as connectionLabel, _r as connectionSubjectsSnapshot, Bu as countRunningWorkflows, Fn as counter, kc as crud, vi as currentRoutingContext, wr as currentTraceContext, Ba as dataStoreApiKeyStore, Sa as dataStoreIdempotencyStore, Da as dataStoreKvStore, Mr as decryptField, nd as defineAggregate, Ho as defineConnection, fo as defineEventTrigger, pd as defineExecutor, Eo as defineOutboxHandler, Su as defineReaction, Vs as defineResourcePolicy, Jc as defineSchedule, Uu as defineSubscriber, Qn as deliveredRowCount, Tr as deriveKey, Vd as diffChange, Po as drainOutbox, sl as dueWakeups, qs as effectiveRelations, bc as emptySchemaRegistry, Rr as enableGraphObservation, jr as encryptField, la as envSecretsBackend, rs as exchangeAuthorizationCode, xr as externalSpanFromTraceparent, an as extractDbCause, Kt as fingerprintFor, $o as forgetCredential, Nc as formatServerOnlyLeaks, yr as formatTraceparent, Ll as forwardChangeFromCdc, Va as frameworkApiKeyStrategy, In as gauge, Ma as generateApiKeyToken, Os as getConnectionResolver, lr as getConnectionSubject, q as getFieldCipher, Hs as getResourcePolicy, Gn as getRowFilter, Bc as getSystemStoreHandle, ru as getTimelineRecorder, tc as getTupleSource, $ as groupKeyOf, Ln as histogramMetric, zd as historyProvenance, ga as httpSecretsBackend, Ft as inspectWorkflow, nc as installPolicyGuardResolver, mr as interruptConnectionStreams, Ml as invertChange, rd as isAggregateDefinition, ud as isEmptyTenantScopedRead, on as isForeignKeyViolation, Nu as isIdleNow, Bi as isInfraError, zr as isObservingGraph, dd as isOrglessUserSubject, Fl as isSafeToApply, Kc as isScheduleDefinition, po as isWorkflowEventTriggerDefinition, uu as ivmValue, Rd as lastWriteProvenance, es as listConnectionStates, Us as listResourcePolicies, ee as listRetentions, _u as loadResourceTuples, bu as loadSubjectTuples, Hc as localityAwareSelector, Nd as makeActionRunner, hl as makeAdvisoryLockCoordinator, Er as makeAesCipher, Fa as makeApiKeyService, fc as makeApiKeyUsageBuffer, za as makeApiKeyUsageFlusher, sn as makeAppAccess, Oa as makeAsyncKv, ca as makeBufferingSpanProcessor, Go as makeConnectionRegistry, As as makeConnectionResolver, js as makeConnectionsFacade, xl as makeCoordinatedScheduler, ic as makeDataLoader, Ls as makeDisconnectConnectionExecutor, Ja as makeEffectStoreLayer, yo as makeEventsFacade, Dr as makeFieldCipher, $r as makeFluentStore, Pu as makeIdleGate, so as makeLazyWorkflowFacade, Ps as makeListConnectionsExecutor, Td as makeMutationRunner, jd as makeOneShotQueryRunner, Oo as makeOutboxFacade, ao as makePostCommitWorkflowFacade, Au as makeProcessAdapter, Ad as makeQueryDescriptorProducer, kd as makeQueryReauthorizer, Md as makeQuerySubscriber, Fu as makeRouterActivity, gc as makeSchemaRegistry, Fs as makeStartConnectionExecutor, Is as makeSubmitTokenExecutor, Al as makeUndoCapture, Iu as makeWakeGate, zu as makeWakeProxyServer, io as makeWorkflowFacade, oo as makeWorkflowFacadeWithCallerContext, co as makeWorkflowHandlers, lo as makeWorkflowLayers, Za as makeWorkflowRunHandle, tl as markWakeupFired, fu as materializeIvm, Ia as memoryApiKeyStore, Wc as memoryReplicationAdapter, fi as memoryRywPositionStore, Xc as nextFiring, cl as nextWakeup, Mu as nodeProcessSupervisor, Xu as noopAnalytics, $u as noopAnalyticsSpec, ka as noopKv, Wr as observeStore, Hr as observedGraph, dr as onBindConnectionSubject, To as outboxAttemptsTable, So as outboxTable, br as parseTraceparent, no as payloadPropertyNames, ui as powerOfTwoSelector, Wd as previewInRollback, Yo as projectConnectionState, ul as pruneWakeups, Gs as rebacPolicyGraph, An as recordSample, Pn as recordSubscriptionActive, Mn as recordSubscriptionDelivery, Vr as recordTableAccess, au as recordTimelineEvent, Tc as redactColumns, Ql as redactRow, mi as redisRywPositionStore, Jl as redoUndoInvocation, is as refreshAccessToken, pr as registerConnectionStream, se as registerRetention, $c as registerWakeup, il as releaseWakeup, di as replicaHealth, ji as resetComputedQueryCacheWarnings, Ur as resetObservedGraph, fa as resetSecretsBackend, ms as resolveConnection, ks as resolveConnectionForSubject, Uc as resolveCurrentRegion, cn as resolveDependentTables, Ss as resolveRedirectUri, mu as resolveRescan, qn as resolveRowFilterScope, Jn as resolveRowFilterScopeFor, pa as resolveSecret, ma as resolveSecretSync, _a as resolveSecretsBackend, Yl as resolveTimelineMode, le as retentionTtlMsFromEnv, eu as reverseEventOverRows, Zs as revokedIds, Vc as runAsSystem, Vu as runOrchestratorTick, md as runProvidedEffect, Eu as runReaction, Hu as runSingleNodeOrchestrator, ku as runWakeLoop, wd as runWithDeadlockRetry, Br as runWithObservedProcedure, _i as runWithRoutingContext, Cr as runWithTraceContext, xs as sanitizeRedirectTo, bl as scheduleCoordinated, Ac as schemaPropertyNames, Mc as serverOnlyLeaks, Ds as setConnectionResolver, kr as setFieldCipher, Wn as setRowFilter, da as setSecretsBackend, Rc as setSystemStoreHandle, iu as setTimelineRecorderForTest, ec as setTupleSource, ja as sha256Hex, pl as singleCoordinator, zn as snapshotMetrics, Bn as snapshotMetricsSync, dc as ssrfGuardHttpClientLayer, uc as ssrfReason, Gi as startRpcServer, _l as startScheduler, Zo as storeCredential, Ts as sweepExpiredGrants, he as sweepRetention, Nl as synthesizeInverse, ac as tracingHttpClientLayer, uo as triggerWorkflow, rl as tryClaimWakeup, ur as unbindConnectionSubject, El as undoCaptureEnabled, Gl as undoLogExecutor, cd as useAggregate, Ju as useAnalytics, Xs as visibleRows, Ou as wakeDueOnce, _d as withRowFilter, Ya as workflowToRpc, kl as wrapCaptureStore, Sc as wrapStoreWithBootCodec, li as wrapStoreWithMixinBehaviour };
|