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