@voltro/runtime 0.9.0 → 0.11.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 +394 -7
- package/dist/index.d.ts +96 -5
- package/dist/index.js +1048 -1037
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { ENCRYPTED_PREFIX as e, and as t, attachEagerLoads as n, boolean as r, clearRetentions as i, collectSubqueries as a, contains as o, decryptFieldsOnRead as s, deserializeArraysOnRead as c, encryptFieldsForWrite as l, eq as u, evaluatePredicate as d, generateId as f, getRelations as p, getTable as m, gt as h, gte as g, hasEagerLoads as _, id as v, inSet as y, integer as b, isEncrypted as x, isNull as S, json as C, listRetentions as ee, lt as
|
|
2
|
-
import { createCipheriv as
|
|
3
|
-
import { EventEmitter as
|
|
4
|
-
import { ADMIN_SCOPE as
|
|
5
|
-
import { createLogger as
|
|
6
|
-
import { Cause 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
|
|
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, raiseChangeListenerCeiling as ae, registerRetention as oe, requireTable as se, retentionTtlMsFromEnv as ce, serializeArraysForWrite as le, stampGeneratedId as ue, sweepRetention as de, table as T, text as E, timestamp as D, walkLeaves as fe } from "@voltro/database";
|
|
2
|
+
import { createCipheriv as pe, createDecipheriv as me, createHash as he, randomBytes as ge, randomUUID as _e, scryptSync as ve } from "node:crypto";
|
|
3
|
+
import { EventEmitter as ye } from "node:events";
|
|
4
|
+
import { ADMIN_SCOPE as be, ConnectionHandshakeFailed as O, ConnectionInfo as xe, ConnectionKindMismatch as Se, ConnectionNotDeclared as Ce, ConnectionSubjectRequired as we, SubjectService as Te, UndoConflict as Ee, UndoForbidden as De, UndoNotFound as Oe, WorkflowRunHandleSchema as ke, checkGuardsEffect as Ae, diffRows as je, effectiveScopes as Me, hasEffectiveScope as Ne, isIdKeyed as Pe, publishServerError as Fe, requireScope as Ie, setPolicyGuardResolver as Le, systemSubject as Re, tsMs as ze } from "@voltro/protocol";
|
|
5
|
+
import { createLogger as k } from "@voltro/logger";
|
|
6
|
+
import { Cause as A, Clock as Be, Context as Ve, Cron as j, Deferred as He, Duration as Ue, Effect as M, Either as We, Exit as Ge, Layer as N, ManagedRuntime as Ke, Metric as P, MetricBoundaries as qe, MetricState as Je, Option as F, Ref as I, Schedule as Ye, Schema as L, Stream as R, Tracer as Xe } from "effect";
|
|
7
|
+
import * as Ze from "node:http";
|
|
8
|
+
import { createServer as Qe } from "node:http";
|
|
9
|
+
import { HttpClient as $e, HttpClientRequest as et, HttpLayerRouter as z, HttpServer as tt, HttpServerRequest as nt, HttpServerResponse as B } from "@effect/platform";
|
|
10
|
+
import { NodeContext as rt, NodeHttpServer as it, NodeRuntime as at } from "@effect/platform-node";
|
|
11
|
+
import { Rpc as ot, RpcSerialization as st, RpcServer as ct } from "@effect/rpc";
|
|
12
|
+
import { defineRestRoute as lt, dispatchSharedPath as ut, requireScope as dt } from "@voltro/protocol/rest";
|
|
13
|
+
import { AsyncLocalStorage as ft } from "node:async_hooks";
|
|
14
|
+
import { SpanKind as pt, SpanStatusCode as mt } from "@opentelemetry/api";
|
|
15
|
+
import { Kv as ht, KvError as gt, KvStore as _t, layerConnections as vt, layerMemory as yt, layerRedis as bt } from "@voltro/kv";
|
|
16
|
+
import { apiKeyStrategy as xt } from "@voltro/protocol/apikey";
|
|
17
|
+
import { getCurrentWorkflowExecutionId as St, inspectWorkflow as Ct } from "@voltro/workflow";
|
|
18
|
+
import { ArrayFormatter as wt } from "effect/ParseResult";
|
|
19
|
+
import { spawn as Tt } from "node:child_process";
|
|
20
20
|
//#region src/matcher.ts
|
|
21
|
-
var
|
|
21
|
+
var Et = class {
|
|
22
22
|
byTable = /* @__PURE__ */ new Map();
|
|
23
23
|
register(e) {
|
|
24
24
|
let t = this.byTable.get(e.table);
|
|
@@ -59,9 +59,9 @@ var wt = class {
|
|
|
59
59
|
});
|
|
60
60
|
return { perTable: e };
|
|
61
61
|
}
|
|
62
|
-
},
|
|
62
|
+
}, Dt = (e) => {
|
|
63
63
|
let t = [];
|
|
64
|
-
for (let n of
|
|
64
|
+
for (let n of fe(e)) n.conjunctive && n.path === void 0 && (n.op === "eq" && t.push({
|
|
65
65
|
column: n.column,
|
|
66
66
|
values: [n.value]
|
|
67
67
|
}), n.op === "in" && t.push({
|
|
@@ -69,18 +69,18 @@ var wt = class {
|
|
|
69
69
|
values: n.value
|
|
70
70
|
}));
|
|
71
71
|
return t;
|
|
72
|
-
},
|
|
72
|
+
}, Ot = (e) => {
|
|
73
73
|
let t = [];
|
|
74
|
-
for (let n of
|
|
74
|
+
for (let n of fe(e)) n.conjunctive && n.path === void 0 && (n.op === "gt" || n.op === "gte" || n.op === "lt" || n.op === "lte") && t.push({
|
|
75
75
|
column: n.column,
|
|
76
76
|
op: n.op,
|
|
77
77
|
threshold: n.value
|
|
78
78
|
});
|
|
79
79
|
return t;
|
|
80
|
-
},
|
|
81
|
-
for (let n of
|
|
80
|
+
}, kt = (e, t) => {
|
|
81
|
+
for (let n of fe(e)) if (n.conjunctive && n.path === void 0 && n.op === "eq" && n.column === t) return n.value;
|
|
82
82
|
return null;
|
|
83
|
-
},
|
|
83
|
+
}, At = (e, t) => {
|
|
84
84
|
let n = [];
|
|
85
85
|
for (let r of e) {
|
|
86
86
|
let e = t(r);
|
|
@@ -88,8 +88,8 @@ var wt = class {
|
|
|
88
88
|
n.push(`${typeof e}:${String(e)}`);
|
|
89
89
|
}
|
|
90
90
|
return n.join("|");
|
|
91
|
-
},
|
|
92
|
-
let r =
|
|
91
|
+
}, jt = (e, t) => e === null || t === null ? null : e === t ? 0 : typeof e == typeof t ? e > t ? 1 : -1 : null, Mt = (e, t, n) => {
|
|
92
|
+
let r = jt(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 wt = class {
|
|
|
97
97
|
case "lt": return r < 0;
|
|
98
98
|
case "lte": return r <= 0;
|
|
99
99
|
}
|
|
100
|
-
},
|
|
100
|
+
}, Nt = class {
|
|
101
101
|
columnByTable = /* @__PURE__ */ new Map();
|
|
102
102
|
rangeByTable = /* @__PURE__ */ new Map();
|
|
103
103
|
tupleByTable = /* @__PURE__ */ new Map();
|
|
@@ -105,9 +105,9 @@ var wt = 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 = Dt(e.predicate), n = Ot(e.predicate);
|
|
109
109
|
if (e.usingIndex !== void 0) {
|
|
110
|
-
let r = e.usingIndex, i =
|
|
110
|
+
let r = e.usingIndex, i = At(r.fields, (t) => kt(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 wt = class {
|
|
|
252
252
|
}
|
|
253
253
|
}
|
|
254
254
|
for (let [e, a] of i) {
|
|
255
|
-
let i =
|
|
255
|
+
let i = At(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 wt = 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) Mt(i, e, r.threshold) && n.add(r.subId);
|
|
270
270
|
}
|
|
271
271
|
return n;
|
|
272
272
|
}
|
|
@@ -275,7 +275,7 @@ var wt = 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 (!Mt(e, n.op, n.threshold)) return !1;
|
|
279
279
|
}
|
|
280
280
|
return !0;
|
|
281
281
|
}
|
|
@@ -297,23 +297,23 @@ var wt = class {
|
|
|
297
297
|
}
|
|
298
298
|
return i;
|
|
299
299
|
}
|
|
300
|
-
},
|
|
300
|
+
}, Pt = (e) => {
|
|
301
301
|
if (e == null) return null;
|
|
302
|
-
if (Array.isArray(e)) return e.map(
|
|
302
|
+
if (Array.isArray(e)) return e.map(Pt);
|
|
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] = Pt(t[e]);
|
|
306
306
|
return r;
|
|
307
307
|
}
|
|
308
308
|
return e;
|
|
309
|
-
},
|
|
310
|
-
let r =
|
|
309
|
+
}, Ft = (e, t, n) => {
|
|
310
|
+
let r = Pt({
|
|
311
311
|
table: e,
|
|
312
312
|
predicate: t,
|
|
313
313
|
indexHint: n ?? null
|
|
314
314
|
});
|
|
315
|
-
return
|
|
316
|
-
},
|
|
315
|
+
return he("sha256").update(JSON.stringify(r)).digest("hex").slice(0, 16);
|
|
316
|
+
}, It = class {
|
|
317
317
|
matcher;
|
|
318
318
|
byFingerprint = /* @__PURE__ */ new Map();
|
|
319
319
|
byClient = /* @__PURE__ */ new Map();
|
|
@@ -332,7 +332,7 @@ var wt = class {
|
|
|
332
332
|
} catch {}
|
|
333
333
|
}
|
|
334
334
|
subscribe(e, t, n, r) {
|
|
335
|
-
let i =
|
|
335
|
+
let i = Ft(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 wt = class {
|
|
|
390
390
|
});
|
|
391
391
|
return e;
|
|
392
392
|
}
|
|
393
|
-
},
|
|
393
|
+
}, Lt = (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 wt = class {
|
|
|
400
400
|
return r.direction === "asc" ? a : -a;
|
|
401
401
|
}
|
|
402
402
|
return 0;
|
|
403
|
-
}),
|
|
403
|
+
}), Rt = (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 wt = class {
|
|
|
418
418
|
...e,
|
|
419
419
|
[i]: c
|
|
420
420
|
};
|
|
421
|
-
},
|
|
421
|
+
}, zt = (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 = Bt(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 wt = class {
|
|
|
437
437
|
}
|
|
438
438
|
}
|
|
439
439
|
return n;
|
|
440
|
-
},
|
|
441
|
-
let i = r ?? V(e.predicate, n), a = [...t.values()].filter((t) =>
|
|
440
|
+
}, Bt = (e, t, n = /* @__PURE__ */ new Map(), r = null) => {
|
|
441
|
+
let i = r ?? V(e.predicate, n), a = [...t.values()].filter((t) => zt(e.predicate, t, i));
|
|
442
442
|
if (e.aggregations && e.aggregations.length > 0) {
|
|
443
|
-
let t =
|
|
443
|
+
let t = Vt(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) => zt(e.having, t, r));
|
|
447
447
|
}
|
|
448
|
-
let o =
|
|
448
|
+
let o = Lt(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 wt = class {
|
|
|
453
453
|
for (let n of l) t[n] = e[n];
|
|
454
454
|
return t;
|
|
455
455
|
});
|
|
456
|
-
},
|
|
456
|
+
}, Vt = (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 wt = 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] = Ht(r, e.rows);
|
|
475
475
|
i.push(n);
|
|
476
476
|
}
|
|
477
477
|
return i;
|
|
478
|
-
},
|
|
478
|
+
}, Ht = (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 wt = class {
|
|
|
519
519
|
}
|
|
520
520
|
default: throw Error(`computeAggregates: unknown op '${e.op}'`);
|
|
521
521
|
}
|
|
522
|
-
},
|
|
522
|
+
}, Ut = "\0", Wt = (e, t) => e === null ? t : `${e}${Ut}${t}`, Gt = class e {
|
|
523
523
|
#e;
|
|
524
524
|
#t;
|
|
525
525
|
#n;
|
|
@@ -529,13 +529,13 @@ var wt = class {
|
|
|
529
529
|
return r.#e = t.tables, r.#t = t.emitter, r.#n = t.numericCounters, r;
|
|
530
530
|
}
|
|
531
531
|
constructor(e, t = null) {
|
|
532
|
-
if (this.#r = t, this.#e = /* @__PURE__ */ new Map(), this.#t = new
|
|
532
|
+
if (this.#r = t, this.#e = /* @__PURE__ */ new Map(), this.#t = new ye(), ae(this.#t), this.#n = /* @__PURE__ */ new Map(), e) for (let [n, r] of Object.entries(e)) {
|
|
533
533
|
let e = /* @__PURE__ */ new Map();
|
|
534
534
|
for (let t of r) {
|
|
535
535
|
let n = t.id;
|
|
536
536
|
n && e.set(n, t);
|
|
537
537
|
}
|
|
538
|
-
this.#e.set(
|
|
538
|
+
this.#e.set(Wt(t, n), e);
|
|
539
539
|
}
|
|
540
540
|
}
|
|
541
541
|
withNamespace(t) {
|
|
@@ -546,11 +546,11 @@ var wt = class {
|
|
|
546
546
|
}, t);
|
|
547
547
|
}
|
|
548
548
|
#a(e) {
|
|
549
|
-
return
|
|
549
|
+
return Wt(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}${Ut}`;
|
|
553
|
+
for (let [n, r] of this.#e) t === null ? n.includes(Ut) || 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,10 +558,11 @@ var wt = 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 =
|
|
562
|
-
return _(e) ? n(t, e.eager,
|
|
561
|
+
let t = Bt(e, this.#e.get(this.#a(e.table)) ?? /* @__PURE__ */ new Map(), this.#o());
|
|
562
|
+
return _(e) ? n(t, e.eager, se(e.table), (e) => this.query(e)) : t;
|
|
563
563
|
}
|
|
564
564
|
async insert(e, t) {
|
|
565
|
+
t = ue(e, t);
|
|
565
566
|
let n = t;
|
|
566
567
|
if (n.id === void 0) {
|
|
567
568
|
let r = this.#c(e);
|
|
@@ -588,7 +589,7 @@ var wt = class {
|
|
|
588
589
|
if (!i) return null;
|
|
589
590
|
let a = i.get(t);
|
|
590
591
|
if (!a) return null;
|
|
591
|
-
let o =
|
|
592
|
+
let o = Rt(a, n, r);
|
|
592
593
|
return i.set(t, o), this.#t.emit("change", {
|
|
593
594
|
table: e,
|
|
594
595
|
op: "update",
|
|
@@ -688,7 +689,7 @@ var wt = class {
|
|
|
688
689
|
}
|
|
689
690
|
}
|
|
690
691
|
async transactional(e) {
|
|
691
|
-
let t = new
|
|
692
|
+
let t = new Kt(this.#u());
|
|
692
693
|
try {
|
|
693
694
|
let n = await e(t);
|
|
694
695
|
return t.commit(), n;
|
|
@@ -724,7 +725,7 @@ var wt = class {
|
|
|
724
725
|
allocateNumericId: (e) => this.#c(e)
|
|
725
726
|
};
|
|
726
727
|
}
|
|
727
|
-
},
|
|
728
|
+
}, Kt = class {
|
|
728
729
|
parent;
|
|
729
730
|
overlay = /* @__PURE__ */ new Map();
|
|
730
731
|
tombstones = /* @__PURE__ */ new Map();
|
|
@@ -754,10 +755,11 @@ var wt = class {
|
|
|
754
755
|
return t || (t = /* @__PURE__ */ new Map(), this.overlay.set(e, t)), t;
|
|
755
756
|
}
|
|
756
757
|
async query(e) {
|
|
757
|
-
let t = this.buildTablesView(e), r =
|
|
758
|
-
return _(e) ? n(r, e.eager,
|
|
758
|
+
let t = this.buildTablesView(e), r = Bt(e, this.materialise(e.table), t);
|
|
759
|
+
return _(e) ? n(r, e.eager, se(e.table), (e) => this.query(e)) : r;
|
|
759
760
|
}
|
|
760
761
|
async insert(e, t) {
|
|
762
|
+
t = ue(e, t);
|
|
761
763
|
let n = t;
|
|
762
764
|
n.id === void 0 && (n = {
|
|
763
765
|
...t,
|
|
@@ -793,7 +795,7 @@ var wt = class {
|
|
|
793
795
|
async patchJson(e, t, n, r) {
|
|
794
796
|
let i = this.materialise(e).get(t);
|
|
795
797
|
if (!i) return null;
|
|
796
|
-
let a =
|
|
798
|
+
let a = Rt(i, n, r);
|
|
797
799
|
return this.getOrCreateOverlay(e).set(t, a), this.events.push({
|
|
798
800
|
table: e,
|
|
799
801
|
op: "update",
|
|
@@ -894,7 +896,7 @@ var wt = class {
|
|
|
894
896
|
discard() {
|
|
895
897
|
this.settled || (this.settled = !0, this.overlay.clear(), this.tombstones.clear(), this.events.length = 0);
|
|
896
898
|
}
|
|
897
|
-
},
|
|
899
|
+
}, qt = (e) => {
|
|
898
900
|
let t = {}, n = [], r = e;
|
|
899
901
|
for (let e = 0; e < 8 && typeof r == "object" && r; e++) {
|
|
900
902
|
let e = r;
|
|
@@ -905,23 +907,23 @@ var wt = class {
|
|
|
905
907
|
(o || s) && n.push(`${o || "Error"}${s ? `: ${s.slice(0, 200)}` : ""}`), r = e.cause;
|
|
906
908
|
}
|
|
907
909
|
return n.length > 0 && (t.dbCauseChain = n.join(" ← "), t.dbMessage === void 0 && (t.dbMessage = n[n.length - 1])), t;
|
|
908
|
-
},
|
|
910
|
+
}, Jt = (e) => {
|
|
909
911
|
let t = e.dbCode;
|
|
910
912
|
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) =>
|
|
913
|
+
}, Yt = (e) => ({
|
|
914
|
+
has: (t) => Ne(e, t),
|
|
915
|
+
hasAny: (t) => t.some((t) => Ne(e, t)),
|
|
916
|
+
require: (t) => Ie(e, t),
|
|
915
917
|
get scopes() {
|
|
916
|
-
return
|
|
918
|
+
return Me(e);
|
|
917
919
|
}
|
|
918
|
-
}),
|
|
920
|
+
}), Xt = (e) => {
|
|
919
921
|
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
|
-
},
|
|
922
|
+
return Zt(e, t), t;
|
|
923
|
+
}, Zt = (e, t) => {
|
|
924
|
+
if (t.add(e.table), e.eager !== void 0 && Qt(e.table, e.eager, t), e.setOp !== void 0) for (let n of e.setOp.queries) Zt(n, t);
|
|
925
|
+
if (e.ctes !== void 0) for (let n of e.ctes) Zt(n.descriptor, t);
|
|
926
|
+
}, Qt = (e, t, n) => {
|
|
925
927
|
let r = p(e);
|
|
926
928
|
if (r !== void 0) for (let [e, i] of Object.entries(t)) {
|
|
927
929
|
let t = r[e];
|
|
@@ -929,24 +931,24 @@ var wt = class {
|
|
|
929
931
|
let a = i === !0 ? {} : i;
|
|
930
932
|
if (t.kind === "manyToMany") {
|
|
931
933
|
let e = t.through().tableName, r = t.target().tableName;
|
|
932
|
-
n.add(e), n.add(r), a.with !== void 0 &&
|
|
934
|
+
n.add(e), n.add(r), a.with !== void 0 && Qt(r, a.with, n);
|
|
933
935
|
} else {
|
|
934
936
|
let e = t.target().tableName;
|
|
935
|
-
n.add(e), a.with !== void 0 &&
|
|
937
|
+
n.add(e), a.with !== void 0 && Qt(e, a.with, n);
|
|
936
938
|
}
|
|
937
939
|
}
|
|
938
|
-
},
|
|
940
|
+
}, $t = (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-")), en = /* @__PURE__ */ new Set(["*"]), tn = (e, t) => {
|
|
939
941
|
if (e !== void 0) {
|
|
940
942
|
if ("not" in e) {
|
|
941
|
-
|
|
943
|
+
tn(e.not, t);
|
|
942
944
|
return;
|
|
943
945
|
}
|
|
944
946
|
if ("and" in e) {
|
|
945
|
-
for (let n of e.and)
|
|
947
|
+
for (let n of e.and) tn(n, t);
|
|
946
948
|
return;
|
|
947
949
|
}
|
|
948
950
|
if ("or" in e) {
|
|
949
|
-
for (let n of e.or)
|
|
951
|
+
for (let n of e.or) tn(n, t);
|
|
950
952
|
return;
|
|
951
953
|
}
|
|
952
954
|
if (e.op === "subquery-in" || e.op === "subquery-not-in") {
|
|
@@ -959,7 +961,7 @@ var wt = class {
|
|
|
959
961
|
let r = e.get(t);
|
|
960
962
|
r === void 0 && (r = /* @__PURE__ */ new Set(), e.set(t, r));
|
|
961
963
|
for (let e of n) r.add(e);
|
|
962
|
-
},
|
|
964
|
+
}, nn = (e, t, n) => {
|
|
963
965
|
let r = p(e);
|
|
964
966
|
if (r !== void 0) for (let [i, a] of Object.entries(t)) {
|
|
965
967
|
let t = r[i];
|
|
@@ -967,65 +969,65 @@ var wt = class {
|
|
|
967
969
|
let o = a === !0 ? {} : a;
|
|
968
970
|
if (t.kind === "manyToMany") {
|
|
969
971
|
let r = t.through(), i = t.target();
|
|
970
|
-
H(n, r.tableName, [t.sourceKey, t.targetKey]), H(n, e, ["id"]), H(n, i.tableName, ["id"]),
|
|
972
|
+
H(n, r.tableName, [t.sourceKey, t.targetKey]), H(n, e, ["id"]), H(n, i.tableName, ["id"]), rn(i.tableName, o, n), o.with !== void 0 && nn(i.tableName, o.with, n);
|
|
971
973
|
continue;
|
|
972
974
|
}
|
|
973
975
|
let s = t.target();
|
|
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"]),
|
|
976
|
+
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"]), rn(s.tableName, o, n), o.with !== void 0 && nn(s.tableName, o.with, n);
|
|
975
977
|
}
|
|
976
|
-
},
|
|
978
|
+
}, rn = (e, t, n) => {
|
|
977
979
|
if (t.where !== void 0) {
|
|
978
980
|
let r = /* @__PURE__ */ new Set();
|
|
979
|
-
|
|
981
|
+
tn(t.where, r), H(n, e, r);
|
|
980
982
|
}
|
|
981
983
|
t.orderBy !== void 0 && H(n, e, t.orderBy.map((e) => e.column));
|
|
982
984
|
let r = m(e);
|
|
983
985
|
r === void 0 ? H(n, e, ["*"]) : H(n, e, Object.keys(r.fields));
|
|
984
|
-
},
|
|
986
|
+
}, an = (e) => {
|
|
985
987
|
let t = /* @__PURE__ */ new Map();
|
|
986
|
-
if (
|
|
987
|
-
for (let n of
|
|
988
|
+
if ($t(e)) {
|
|
989
|
+
for (let n of Xt(e)) H(t, n, ["*"]);
|
|
988
990
|
return t;
|
|
989
991
|
}
|
|
990
992
|
let n = /* @__PURE__ */ new Set();
|
|
991
993
|
if (e.projection !== void 0) for (let t of e.projection) n.add(t);
|
|
992
994
|
else n.add("*");
|
|
993
|
-
|
|
995
|
+
tn(e.predicate, n);
|
|
994
996
|
for (let t of e.order) n.add(t.column);
|
|
995
|
-
return H(t, e.table, n), e.eager !== void 0 &&
|
|
996
|
-
},
|
|
997
|
-
if (e.op === "insert" || e.op === "delete" || e.old === null || e.new === null) return
|
|
997
|
+
return H(t, e.table, n), e.eager !== void 0 && nn(e.table, e.eager, t), t;
|
|
998
|
+
}, on = (e) => {
|
|
999
|
+
if (e.op === "insert" || e.op === "delete" || e.old === null || e.new === null) return en;
|
|
998
1000
|
let t = /* @__PURE__ */ new Set(), n = e.old, r = e.new, i = /* @__PURE__ */ new Set([...Object.keys(n), ...Object.keys(r)]);
|
|
999
1001
|
for (let e of i) Object.is(n[e], r[e]) || t.add(e);
|
|
1000
1002
|
return t;
|
|
1001
|
-
},
|
|
1003
|
+
}, sn = (e, t) => {
|
|
1002
1004
|
let n = t.get(e.table);
|
|
1003
1005
|
if (n === void 0) return !1;
|
|
1004
1006
|
if (n.has("*")) return !0;
|
|
1005
|
-
let r =
|
|
1007
|
+
let r = on(e);
|
|
1006
1008
|
if (r.has("*")) return !0;
|
|
1007
1009
|
for (let e of r) if (n.has(e)) return !0;
|
|
1008
1010
|
return !1;
|
|
1009
|
-
},
|
|
1011
|
+
}, cn = qe.exponential({
|
|
1010
1012
|
start: .001,
|
|
1011
1013
|
factor: 2,
|
|
1012
1014
|
count: 16
|
|
1013
|
-
}),
|
|
1014
|
-
let t = e.durationMs / 1e3, n = e.kind === "rpc" ? M.zipRight(P.increment(
|
|
1015
|
+
}), ln = P.counter("voltro_rpc_requests_total", { description: "Total RPC handler invocations." }), un = P.counter("voltro_rpc_errors_total", { description: "RPC handler invocations that errored." }), dn = P.histogram("voltro_rpc_duration_seconds", cn, "RPC handler duration in seconds."), fn = P.counter("voltro_http_requests_total", { description: "Total HTTP route invocations." }), pn = P.histogram("voltro_http_duration_seconds", cn, "HTTP route duration in seconds."), mn = P.histogram("voltro_plugin_hook_duration_seconds", cn, "Plugin interceptor duration in seconds."), hn = P.counter("voltro_plugin_hook_errors_total", { description: "Plugin interceptor invocations that errored." }), gn = P.counter("voltro_subscription_deliveries_total", { description: "Total subscription deliveries (snapshot + delta)." }), _n = P.histogram("voltro_subscription_delivery_seconds", cn, "Subscription delivery produce→push latency in seconds."), vn = P.gauge("voltro_subscriptions_active", { description: "Currently-open subscriptions." }), yn = (e) => {
|
|
1016
|
+
let t = e.durationMs / 1e3, n = e.kind === "rpc" ? M.zipRight(P.increment(ln).pipe(M.tagMetrics("tag", e.tag), M.tagMetrics("status", e.status)), M.zipRight(P.update(dn, t).pipe(M.tagMetrics("tag", e.tag)), e.status === "error" ? P.increment(un).pipe(M.tagMetrics("tag", e.tag)) : M.void)) : e.kind === "request" ? M.zipRight(P.increment(fn).pipe(M.tagMetrics("route", e.tag), M.tagMetrics("status", e.status)), P.update(pn, t).pipe(M.tagMetrics("route", e.tag))) : M.zipRight(P.update(mn, t).pipe(M.tagMetrics("hook", e.tag)), e.status === "error" ? P.increment(hn).pipe(M.tagMetrics("hook", e.tag)) : M.void);
|
|
1015
1017
|
M.runSync(n);
|
|
1016
|
-
},
|
|
1017
|
-
let t =
|
|
1018
|
-
M.runSync(M.zipRight(P.increment(
|
|
1019
|
-
},
|
|
1020
|
-
let n =
|
|
1021
|
-
r === 0 ?
|
|
1022
|
-
},
|
|
1018
|
+
}, bn = (e) => e.startsWith("subscription.") ? e.slice(13) : e, xn = (e) => {
|
|
1019
|
+
let t = bn(e.label);
|
|
1020
|
+
M.runSync(M.zipRight(P.increment(gn).pipe(M.tagMetrics("tag", t), M.tagMetrics("kind", e.kind)), P.update(_n, e.durationMs / 1e3).pipe(M.tagMetrics("tag", t), M.tagMetrics("kind", e.kind))));
|
|
1021
|
+
}, Sn = /* @__PURE__ */ new Map(), U = (e, t) => {
|
|
1022
|
+
let n = bn(e), r = Math.max(0, (Sn.get(n) ?? 0) + t);
|
|
1023
|
+
r === 0 ? Sn.delete(n) : Sn.set(n, r), M.runSync(P.set(vn, r).pipe(M.tagMetrics("tag", n)));
|
|
1024
|
+
}, Cn = (e, t) => P.counter(e, t === void 0 ? {} : { description: t }), wn = (e, t) => P.gauge(e, t === void 0 ? {} : { description: t }), Tn = (e, t = cn, n) => P.histogram(e, t, n), En = (e) => {
|
|
1023
1025
|
let t = {};
|
|
1024
1026
|
for (let n of e) t[n.key] = n.value;
|
|
1025
1027
|
return t;
|
|
1026
|
-
},
|
|
1027
|
-
let t = e.metricKey.name, n =
|
|
1028
|
-
if (
|
|
1028
|
+
}, Dn = P.snapshot.pipe(M.map((e) => e.map((e) => {
|
|
1029
|
+
let t = e.metricKey.name, n = En(e.metricKey.tags), r = F.getOrUndefined(e.metricKey.description), i = r === void 0 ? {} : { description: r }, a = e.metricState;
|
|
1030
|
+
if (Je.isHistogramState(a)) return {
|
|
1029
1031
|
name: t,
|
|
1030
1032
|
labels: n,
|
|
1031
1033
|
...i,
|
|
@@ -1037,14 +1039,14 @@ var wt = class {
|
|
|
1037
1039
|
sum: a.sum,
|
|
1038
1040
|
count: a.count
|
|
1039
1041
|
};
|
|
1040
|
-
if (
|
|
1042
|
+
if (Je.isGaugeState(a)) return {
|
|
1041
1043
|
name: t,
|
|
1042
1044
|
labels: n,
|
|
1043
1045
|
...i,
|
|
1044
1046
|
type: "gauge",
|
|
1045
1047
|
value: Number(a.value)
|
|
1046
1048
|
};
|
|
1047
|
-
if (
|
|
1049
|
+
if (Je.isSummaryState(a)) return {
|
|
1048
1050
|
name: t,
|
|
1049
1051
|
labels: n,
|
|
1050
1052
|
...i,
|
|
@@ -1056,7 +1058,7 @@ var wt = class {
|
|
|
1056
1058
|
value: t.value
|
|
1057
1059
|
}] : [])
|
|
1058
1060
|
};
|
|
1059
|
-
if (
|
|
1061
|
+
if (Je.isFrequencyState(a)) {
|
|
1060
1062
|
let e = {};
|
|
1061
1063
|
for (let [t, n] of a.occurrences) e[t] = n;
|
|
1062
1064
|
return {
|
|
@@ -1074,25 +1076,25 @@ var wt = class {
|
|
|
1074
1076
|
type: "counter",
|
|
1075
1077
|
value: Number(a.count)
|
|
1076
1078
|
};
|
|
1077
|
-
}))),
|
|
1078
|
-
|
|
1079
|
-
},
|
|
1080
|
-
if (e === void 0 || t.type === "system") return M.succeed(
|
|
1081
|
-
let r = e.retry ??
|
|
1082
|
-
return (r === !1 ? i : M.retry(i, r)).pipe(M.map((t) => (n) => e.predicate(t, n)), M.catchAll((t) => M.suspend(() => (n?.(t), e.onLoadError === "deny" ? M.succeed(
|
|
1083
|
-
},
|
|
1079
|
+
}))), On = () => M.runSync(Dn), kn = class extends L.TaggedError()("RowFilterUnavailable", { cause: L.String }) {}, An = Ye.exponential("20 millis").pipe(Ye.intersect(Ye.recurs(2))), jn, Mn = (e) => {
|
|
1080
|
+
jn = e;
|
|
1081
|
+
}, Nn = () => jn, Pn = () => void 0, Fn = (e, t) => In(jn, e, t), In = (e, t, n) => {
|
|
1082
|
+
if (e === void 0 || t.type === "system") return M.succeed(Pn);
|
|
1083
|
+
let r = e.retry ?? An, i = e.load(t);
|
|
1084
|
+
return (r === !1 ? i : M.retry(i, r)).pipe(M.map((t) => (n) => e.predicate(t, n)), M.catchAll((t) => M.suspend(() => (n?.(t), e.onLoadError === "deny" ? M.succeed(Ln) : M.fail(new kn({ cause: String(t) }))))));
|
|
1085
|
+
}, Ln = () => ({
|
|
1084
1086
|
column: "id",
|
|
1085
1087
|
op: "isNull"
|
|
1086
|
-
}),
|
|
1088
|
+
}), Rn = (e, n, r) => {
|
|
1087
1089
|
let i = e(n);
|
|
1088
1090
|
return i === void 0 ? r : r ? t(r, i) : i;
|
|
1089
|
-
},
|
|
1090
|
-
let n =
|
|
1091
|
+
}, zn = (e, t) => {
|
|
1092
|
+
let n = Rn(e, t.table, t.predicate);
|
|
1091
1093
|
return n === t.predicate ? t : {
|
|
1092
1094
|
...t,
|
|
1093
1095
|
predicate: n
|
|
1094
1096
|
};
|
|
1095
|
-
}, W =
|
|
1097
|
+
}, W = k({ scope: "voltro:dispatcher" }), Bn = (e) => Array.isArray(e) ? e.length : e == null ? 0 : 1, Vn = (e) => typeof e == "object" && !!e && e._tag === "ScopeError", Hn = class {
|
|
1096
1098
|
deps;
|
|
1097
1099
|
subscriptionRegistry;
|
|
1098
1100
|
matcher;
|
|
@@ -1102,12 +1104,12 @@ var wt = class {
|
|
|
1102
1104
|
computedSubs = /* @__PURE__ */ new Map();
|
|
1103
1105
|
computedByTable = /* @__PURE__ */ new Map();
|
|
1104
1106
|
constructor(e) {
|
|
1105
|
-
this.deps = e, this.matcher = new
|
|
1107
|
+
this.deps = e, this.matcher = new Nt(), this.subscriptionRegistry = new It(this.matcher), this.unsubscribeChange = e.store.onChange((e) => {
|
|
1106
1108
|
this.handleChange(e);
|
|
1107
1109
|
});
|
|
1108
1110
|
}
|
|
1109
1111
|
async subscribe(e, t, n, r, i, a, o, s) {
|
|
1110
|
-
let c = `sub_${
|
|
1112
|
+
let c = `sub_${_e()}`, l = i ?? `subscription.${e.table}`, u = Xt(e), d = an(e);
|
|
1111
1113
|
e.predicate !== void 0 && this.subscriptionRegistry.subscribe(c, e.table, e.predicate, r);
|
|
1112
1114
|
for (let e of u) {
|
|
1113
1115
|
let t = this.dependentByTable.get(e);
|
|
@@ -1121,7 +1123,7 @@ var wt = class {
|
|
|
1121
1123
|
}
|
|
1122
1124
|
}, h, g;
|
|
1123
1125
|
try {
|
|
1124
|
-
h = s === void 0 ? e :
|
|
1126
|
+
h = s === void 0 ? e : zn(await s(), e), g = this.deps.cache !== void 0 && a !== void 0 ? await this.deps.cache.wrap(a, p, () => this.deps.store.query(h)) : await this.deps.store.query(h);
|
|
1125
1127
|
} catch (e) {
|
|
1126
1128
|
throw m(), e;
|
|
1127
1129
|
}
|
|
@@ -1188,7 +1190,7 @@ var wt = class {
|
|
|
1188
1190
|
});
|
|
1189
1191
|
}
|
|
1190
1192
|
async subscribeComputed(e, t, n, r) {
|
|
1191
|
-
let i = `csub_${
|
|
1193
|
+
let i = `csub_${_e()}`, a = e.dependentTables, o = {
|
|
1192
1194
|
id: i,
|
|
1193
1195
|
recompute: e.recompute,
|
|
1194
1196
|
tenantId: e.tenantId,
|
|
@@ -1196,7 +1198,7 @@ var wt = class {
|
|
|
1196
1198
|
context: n,
|
|
1197
1199
|
label: r ?? "subscription.computed",
|
|
1198
1200
|
tables: a,
|
|
1199
|
-
lastJson:
|
|
1201
|
+
lastJson: Un(e.value),
|
|
1200
1202
|
revision: 0
|
|
1201
1203
|
};
|
|
1202
1204
|
this.computedSubs.set(i, o), U(o.label, 1);
|
|
@@ -1217,7 +1219,7 @@ var wt = class {
|
|
|
1217
1219
|
startMs: s,
|
|
1218
1220
|
endMs: Date.now(),
|
|
1219
1221
|
durationMs: Date.now() - s,
|
|
1220
|
-
rowCount:
|
|
1222
|
+
rowCount: Bn(e.value)
|
|
1221
1223
|
}), () => {
|
|
1222
1224
|
this.computedSubs.delete(i), U(o.label, -1);
|
|
1223
1225
|
for (let e of a) {
|
|
@@ -1229,7 +1231,7 @@ var wt = class {
|
|
|
1229
1231
|
async recomputeComputed(e) {
|
|
1230
1232
|
let t = Date.now();
|
|
1231
1233
|
try {
|
|
1232
|
-
let n = await e.recompute(), r =
|
|
1234
|
+
let n = await e.recompute(), r = Un(n);
|
|
1233
1235
|
if (r === e.lastJson) return;
|
|
1234
1236
|
e.lastJson = r, e.revision += 1;
|
|
1235
1237
|
let i = Date.now();
|
|
@@ -1245,10 +1247,10 @@ var wt = class {
|
|
|
1245
1247
|
startMs: t,
|
|
1246
1248
|
endMs: i,
|
|
1247
1249
|
durationMs: i - t,
|
|
1248
|
-
rowCount:
|
|
1250
|
+
rowCount: Bn(n)
|
|
1249
1251
|
});
|
|
1250
1252
|
} catch (t) {
|
|
1251
|
-
if (
|
|
1253
|
+
if (Vn(t)) {
|
|
1252
1254
|
this.revokeComputed(e, t);
|
|
1253
1255
|
return;
|
|
1254
1256
|
}
|
|
@@ -1301,7 +1303,7 @@ var wt = class {
|
|
|
1301
1303
|
W.trace("missing subscription", { subscriberId: t });
|
|
1302
1304
|
continue;
|
|
1303
1305
|
}
|
|
1304
|
-
if (!
|
|
1306
|
+
if (!sn(e, n.relevantFields)) {
|
|
1305
1307
|
o++;
|
|
1306
1308
|
continue;
|
|
1307
1309
|
}
|
|
@@ -1324,21 +1326,21 @@ var wt = class {
|
|
|
1324
1326
|
this.revokeSubscription(n, e, "row filter unavailable");
|
|
1325
1327
|
continue;
|
|
1326
1328
|
}
|
|
1327
|
-
i =
|
|
1329
|
+
i = zn(e, n.baseDescriptor);
|
|
1328
1330
|
}
|
|
1329
1331
|
let o = await this.deps.store.query(i), s = n.lastDelivered;
|
|
1330
|
-
if (
|
|
1332
|
+
if (Wn(o, s)) {
|
|
1331
1333
|
W.trace("suppressed no-op delta", {
|
|
1332
1334
|
subscriberId: t,
|
|
1333
1335
|
table: e.table
|
|
1334
1336
|
});
|
|
1335
1337
|
continue;
|
|
1336
1338
|
}
|
|
1337
|
-
n.lastDelivered = o, this.deps.cache !== void 0 && n.cacheBinding !== void 0 && this.deps.cache.put(n.cacheBinding, Array.from(n.dependentTables), o),
|
|
1339
|
+
n.lastDelivered = o, this.deps.cache !== void 0 && n.cacheBinding !== void 0 && this.deps.cache.put(n.cacheBinding, Array.from(n.dependentTables), o), Pe(s) && Pe(o) ? n.emit({
|
|
1338
1340
|
_tag: "delta",
|
|
1339
1341
|
revision: a,
|
|
1340
1342
|
emittedAt: a,
|
|
1341
|
-
patch:
|
|
1343
|
+
patch: je(s, o)
|
|
1342
1344
|
}) : n.emit({
|
|
1343
1345
|
_tag: "snapshot",
|
|
1344
1346
|
revision: a,
|
|
@@ -1370,44 +1372,44 @@ var wt = class {
|
|
|
1370
1372
|
skipped: o
|
|
1371
1373
|
});
|
|
1372
1374
|
}
|
|
1373
|
-
},
|
|
1375
|
+
}, Un = (e) => {
|
|
1374
1376
|
try {
|
|
1375
1377
|
return JSON.stringify(e) ?? "null";
|
|
1376
1378
|
} catch {
|
|
1377
1379
|
return String(e);
|
|
1378
1380
|
}
|
|
1379
|
-
},
|
|
1381
|
+
}, Wn = (e, t) => {
|
|
1380
1382
|
if (e === t) return !0;
|
|
1381
1383
|
if (e.length !== t.length) return !1;
|
|
1382
1384
|
for (let n = 0; n < e.length; n++) if (JSON.stringify(e[n]) !== JSON.stringify(t[n])) return !1;
|
|
1383
1385
|
return !0;
|
|
1384
|
-
},
|
|
1386
|
+
}, Gn = (e) => typeof e == "object" && !!e && e.__voltroComputed === !0, Kn = 1440 * 60 * 1e3, qn = 3600 * 1e3, G = /* @__PURE__ */ new Map(), Jn = /* @__PURE__ */ new Set(), Yn = (e, t) => {
|
|
1385
1387
|
G.set(e, {
|
|
1386
1388
|
subject: t,
|
|
1387
1389
|
touchedAt: Date.now()
|
|
1388
1390
|
});
|
|
1389
|
-
for (let n of
|
|
1391
|
+
for (let n of Jn) try {
|
|
1390
1392
|
n(e, t);
|
|
1391
1393
|
} catch {}
|
|
1392
|
-
},
|
|
1394
|
+
}, Xn = (e) => {
|
|
1393
1395
|
let t = G.get(e);
|
|
1394
1396
|
if (t) return t.touchedAt = Date.now(), t.subject;
|
|
1395
|
-
},
|
|
1397
|
+
}, Zn = (e) => {
|
|
1396
1398
|
G.delete(e);
|
|
1397
|
-
},
|
|
1398
|
-
|
|
1399
|
-
}),
|
|
1400
|
-
let e = Date.now() -
|
|
1399
|
+
}, Qn = (e) => (Jn.add(e), () => {
|
|
1400
|
+
Jn.delete(e);
|
|
1401
|
+
}), $n = setInterval(() => {
|
|
1402
|
+
let e = Date.now() - Kn;
|
|
1401
1403
|
for (let [t, n] of G) n.touchedAt < e && G.delete(t);
|
|
1402
|
-
},
|
|
1403
|
-
typeof
|
|
1404
|
-
var K = /* @__PURE__ */ new Map(),
|
|
1404
|
+
}, qn);
|
|
1405
|
+
typeof $n == "object" && $n && "unref" in $n && $n.unref();
|
|
1406
|
+
var K = /* @__PURE__ */ new Map(), er = (e, t) => {
|
|
1405
1407
|
let n = K.get(e);
|
|
1406
1408
|
return n || (n = /* @__PURE__ */ new Set(), K.set(e, n)), n.add(t), () => {
|
|
1407
1409
|
let n = K.get(e);
|
|
1408
1410
|
n && (n.delete(t), n.size === 0 && K.delete(e));
|
|
1409
1411
|
};
|
|
1410
|
-
},
|
|
1412
|
+
}, tr = (e) => {
|
|
1411
1413
|
let t = K.get(e);
|
|
1412
1414
|
if (t) {
|
|
1413
1415
|
for (let e of [...t]) try {
|
|
@@ -1415,15 +1417,15 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
1415
1417
|
} catch {}
|
|
1416
1418
|
K.delete(e);
|
|
1417
1419
|
}
|
|
1418
|
-
},
|
|
1420
|
+
}, nr = (e) => K.get(e)?.size ?? 0, rr = () => {
|
|
1419
1421
|
G.clear(), K.clear();
|
|
1420
|
-
},
|
|
1422
|
+
}, ir = () => [...G.entries()].map(([e, t]) => ({
|
|
1421
1423
|
clientId: e,
|
|
1422
1424
|
subjectType: t.subject.type,
|
|
1423
1425
|
tenantId: t.subject.tenantId
|
|
1424
|
-
})),
|
|
1426
|
+
})), ar = /^00-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/, or = (e) => `00-${e.traceId}-${e.spanId}-${e.sampled ? "01" : "00"}`, sr = (e) => {
|
|
1425
1427
|
if (typeof e != "string") return null;
|
|
1426
|
-
let t =
|
|
1428
|
+
let t = ar.exec(e.trim().toLowerCase());
|
|
1427
1429
|
if (t === null) return null;
|
|
1428
1430
|
let [, n, r, i] = t;
|
|
1429
1431
|
return n === "0".repeat(32) || r === "0".repeat(16) ? null : {
|
|
@@ -1431,14 +1433,14 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
1431
1433
|
spanId: r,
|
|
1432
1434
|
sampled: (parseInt(i, 16) & 1) == 1
|
|
1433
1435
|
};
|
|
1434
|
-
},
|
|
1435
|
-
let t =
|
|
1436
|
-
if (t !== null) return
|
|
1436
|
+
}, cr = (e) => {
|
|
1437
|
+
let t = sr(e);
|
|
1438
|
+
if (t !== null) return Xe.externalSpan({
|
|
1437
1439
|
traceId: t.traceId,
|
|
1438
1440
|
spanId: t.spanId,
|
|
1439
1441
|
sampled: t.sampled
|
|
1440
1442
|
});
|
|
1441
|
-
},
|
|
1443
|
+
}, lr = new ft(), ur = (e, t) => lr.run(e, t), dr = () => lr.getStore(), fr = (e = {}) => {
|
|
1442
1444
|
let t = e.random ?? Math.random, n = /* @__PURE__ */ new Map(), r = (e) => n.get(e) ?? 0;
|
|
1443
1445
|
return {
|
|
1444
1446
|
pick(e) {
|
|
@@ -1463,7 +1465,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
1463
1465
|
}));
|
|
1464
1466
|
}
|
|
1465
1467
|
};
|
|
1466
|
-
},
|
|
1468
|
+
}, pr = (e = {}) => {
|
|
1467
1469
|
let t = e.thresholdFailures ?? 3, n = e.windowMs ?? 1e4, r = e.blackoutMs ?? 6e4, i = e.now ?? Date.now, a = /* @__PURE__ */ new Map(), o = (e) => {
|
|
1468
1470
|
let t = a.get(e);
|
|
1469
1471
|
return t === void 0 && (t = {
|
|
@@ -1497,7 +1499,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
1497
1499
|
}));
|
|
1498
1500
|
}
|
|
1499
1501
|
};
|
|
1500
|
-
},
|
|
1502
|
+
}, mr = (e = {}) => {
|
|
1501
1503
|
let t = e.now ?? Date.now, n = /* @__PURE__ */ new Map();
|
|
1502
1504
|
return {
|
|
1503
1505
|
get(e) {
|
|
@@ -1520,7 +1522,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
1520
1522
|
return n.size;
|
|
1521
1523
|
}
|
|
1522
1524
|
};
|
|
1523
|
-
},
|
|
1525
|
+
}, hr = (e, t) => e === null ? t === void 0 ? "anon:bg" : `anon:${t}` : `subject:${e}`, gr = (e) => {
|
|
1524
1526
|
let t = e.now ?? Date.now, n = e.keyPrefix ?? "voltro:ryw", r = e.channel ?? `${n}:bus`, i = e.onError ?? ((e, t) => {
|
|
1525
1527
|
process.stderr.write(`[voltro:ryw] redis ${t} failed: ${String(e)}\n`);
|
|
1526
1528
|
}), a = `${process.pid ?? 0}:${Math.random() * 1e9 | 0}:${t()}`, o = /* @__PURE__ */ new Map(), s = (e) => {
|
|
@@ -1579,7 +1581,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
1579
1581
|
return o.size;
|
|
1580
1582
|
}
|
|
1581
1583
|
};
|
|
1582
|
-
},
|
|
1584
|
+
}, _r = k({ scope: "voltro:replication" }), vr = new ft(), yr = (e, t) => vr.run(e, t), br = () => vr.getStore(), xr = class {
|
|
1583
1585
|
primary;
|
|
1584
1586
|
replicas;
|
|
1585
1587
|
adapter;
|
|
@@ -1592,10 +1594,10 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
1592
1594
|
recordRouting;
|
|
1593
1595
|
now;
|
|
1594
1596
|
constructor(e) {
|
|
1595
|
-
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 ??
|
|
1597
|
+
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 ?? mr({ now: this.now }), this.selector = e.replicaSelector ?? fr(), this.health = e.replicaHealth ?? pr({ now: this.now }), e.recordRouting !== void 0 && (this.recordRouting = e.recordRouting);
|
|
1596
1598
|
}
|
|
1597
1599
|
async query(e) {
|
|
1598
|
-
let t =
|
|
1600
|
+
let t = vr.getStore(), n = t?.subjectKey ?? "anon:bg";
|
|
1599
1601
|
if (t?.forcePrimary === !0) return this.emitRouting({
|
|
1600
1602
|
target: "primary",
|
|
1601
1603
|
replicaIndex: null,
|
|
@@ -1659,7 +1661,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
1659
1661
|
waitMs: 0
|
|
1660
1662
|
}), r;
|
|
1661
1663
|
} catch (r) {
|
|
1662
|
-
return this.health.reportFailure(i, String(r)),
|
|
1664
|
+
return this.health.reportFailure(i, String(r)), _r.warn("replica query failed; falling back to primary", {
|
|
1663
1665
|
idx: a,
|
|
1664
1666
|
err: r
|
|
1665
1667
|
}), this.emitRouting({
|
|
@@ -1728,7 +1730,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
1728
1730
|
fallbackReason: "wait-timeout"
|
|
1729
1731
|
}), this.primary.query(e);
|
|
1730
1732
|
}
|
|
1731
|
-
await
|
|
1733
|
+
await Sr(10);
|
|
1732
1734
|
}
|
|
1733
1735
|
}
|
|
1734
1736
|
async insert(e, t) {
|
|
@@ -1768,8 +1770,8 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
1768
1770
|
return await this.stampPostWrite(), r;
|
|
1769
1771
|
}
|
|
1770
1772
|
async transactional(e) {
|
|
1771
|
-
let t = await
|
|
1772
|
-
subjectKey:
|
|
1773
|
+
let t = await yr({
|
|
1774
|
+
subjectKey: vr.getStore()?.subjectKey ?? "anon:bg",
|
|
1773
1775
|
forcePrimary: !0
|
|
1774
1776
|
}, () => this.primary.transactional(e));
|
|
1775
1777
|
return await this.stampPostWrite(), t;
|
|
@@ -1785,7 +1787,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
1785
1787
|
}
|
|
1786
1788
|
async stampPostWrite() {
|
|
1787
1789
|
if (this.replicas.length === 0) return;
|
|
1788
|
-
let e =
|
|
1790
|
+
let e = vr.getStore()?.subjectKey ?? "anon:bg";
|
|
1789
1791
|
try {
|
|
1790
1792
|
let t = await this.adapter.capturePrimaryPosition(this.primary);
|
|
1791
1793
|
this.rywStore.set(e, {
|
|
@@ -1793,37 +1795,37 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
1793
1795
|
expiresAt: this.now() + this.rywTtlMs
|
|
1794
1796
|
});
|
|
1795
1797
|
} catch (e) {
|
|
1796
|
-
|
|
1798
|
+
_r.warn("failed to capture primary position; RYW skipped", { err: e });
|
|
1797
1799
|
}
|
|
1798
1800
|
}
|
|
1799
1801
|
emitRouting(e) {
|
|
1800
1802
|
this.recordRouting?.(e);
|
|
1801
1803
|
}
|
|
1802
|
-
},
|
|
1804
|
+
}, Sr = (e) => new Promise((t) => setTimeout(t, e)), Cr = (e, t, n) => ({
|
|
1803
1805
|
subject: e,
|
|
1804
|
-
traceId: t?.traceId ??
|
|
1806
|
+
traceId: t?.traceId ?? _e(),
|
|
1805
1807
|
...t?.spanId === void 0 ? {} : { spanId: t.spanId },
|
|
1806
1808
|
...n === void 0 ? {} : { clientId: n }
|
|
1807
|
-
}),
|
|
1809
|
+
}), wr = M.currentSpan.pipe(M.catchAll(() => M.succeed(void 0))), Tr = (e) => ({
|
|
1808
1810
|
traceId: e.traceId,
|
|
1809
1811
|
...e.spanId === void 0 ? {} : { spanId: e.spanId }
|
|
1810
|
-
}),
|
|
1812
|
+
}), Er = (e, t, n) => {
|
|
1811
1813
|
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));
|
|
1812
|
-
},
|
|
1813
|
-
if (
|
|
1814
|
-
let t = await M.runPromise(M.either(
|
|
1814
|
+
}, Dr = (e) => {
|
|
1815
|
+
if (Nn() !== void 0) return async () => {
|
|
1816
|
+
let t = await M.runPromise(M.either(Fn(e, (e) => {
|
|
1815
1817
|
console.error("[voltro] row filter failed to load — subscription", e);
|
|
1816
1818
|
})));
|
|
1817
1819
|
if (t._tag === "Left") throw t.left;
|
|
1818
1820
|
return t.right;
|
|
1819
1821
|
};
|
|
1820
|
-
},
|
|
1822
|
+
}, Or = (e, t, n, r, i, a, o, s) => R.asyncScoped((c) => M.gen(function* () {
|
|
1821
1823
|
let l = yield* M.tryPromise(() => t.subscribe(e, (e) => {
|
|
1822
1824
|
c.single(e);
|
|
1823
1825
|
}, n, r, i, a, o, s)).pipe(M.matchCause({
|
|
1824
|
-
onFailure: (e) => (
|
|
1826
|
+
onFailure: (e) => (Pr(`subscription.${i}`, n.traceId, e), {
|
|
1825
1827
|
ok: !1,
|
|
1826
|
-
error:
|
|
1828
|
+
error: Rr(e)
|
|
1827
1829
|
}),
|
|
1828
1830
|
onSuccess: (e) => ({
|
|
1829
1831
|
ok: !0,
|
|
@@ -1839,21 +1841,21 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
1839
1841
|
}
|
|
1840
1842
|
let u = l.unsubscribe;
|
|
1841
1843
|
if (yield* M.addFinalizer(() => M.sync(() => u())), n.clientId !== void 0) {
|
|
1842
|
-
let e =
|
|
1844
|
+
let e = er(n.clientId, () => {
|
|
1843
1845
|
c.end();
|
|
1844
1846
|
});
|
|
1845
1847
|
yield* M.addFinalizer(() => M.sync(() => e()));
|
|
1846
1848
|
}
|
|
1847
|
-
})),
|
|
1849
|
+
})), kr = (e, t, n, r) => R.asyncScoped((i) => M.gen(function* () {
|
|
1848
1850
|
let a = yield* M.tryPromise(() => t.subscribeComputed(e, (e) => {
|
|
1849
1851
|
i.single(e._tag === "snapshot" ? {
|
|
1850
1852
|
...e,
|
|
1851
1853
|
computed: !0
|
|
1852
1854
|
} : e);
|
|
1853
1855
|
}, n, r)).pipe(M.matchCause({
|
|
1854
|
-
onFailure: (e) => (
|
|
1856
|
+
onFailure: (e) => (Pr(`subscription.${r}`, n.traceId, e), {
|
|
1855
1857
|
ok: !1,
|
|
1856
|
-
error:
|
|
1858
|
+
error: Rr(e)
|
|
1857
1859
|
}),
|
|
1858
1860
|
onSuccess: (e) => ({
|
|
1859
1861
|
ok: !0,
|
|
@@ -1869,21 +1871,21 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
1869
1871
|
}
|
|
1870
1872
|
let o = a.unsubscribe;
|
|
1871
1873
|
if (yield* M.addFinalizer(() => M.sync(() => o())), n.clientId !== void 0) {
|
|
1872
|
-
let e =
|
|
1874
|
+
let e = er(n.clientId, () => {
|
|
1873
1875
|
i.end();
|
|
1874
1876
|
});
|
|
1875
1877
|
yield* M.addFinalizer(() => M.sync(() => e()));
|
|
1876
1878
|
}
|
|
1877
|
-
})),
|
|
1878
|
-
let s = yield*
|
|
1879
|
-
|
|
1880
|
-
let u =
|
|
1879
|
+
})), Ar = (e, t, n = "rpc.subscription", r, i, a, o) => R.unwrap(M.gen(function* () {
|
|
1880
|
+
let s = yield* Te, c = yield* xe, l = yield* wr;
|
|
1881
|
+
Er(l, n, s);
|
|
1882
|
+
let u = Cr(s, l, c.clientId), d = hr(s.id, c.clientId), f = yr({ subjectKey: d }, () => ur({
|
|
1881
1883
|
traceId: u.traceId,
|
|
1882
1884
|
...u.spanId === void 0 ? {} : { spanId: u.spanId }
|
|
1883
1885
|
}, () => e(u))), p = M.isEffect(f) ? yield* f.pipe(M.matchCause({
|
|
1884
|
-
onFailure: (e) => (
|
|
1886
|
+
onFailure: (e) => (Pr(`subscription.${n}`, u.traceId, e), {
|
|
1885
1887
|
ok: !1,
|
|
1886
|
-
error:
|
|
1888
|
+
error: Rr(e)
|
|
1887
1889
|
}),
|
|
1888
1890
|
onSuccess: (e) => ({
|
|
1889
1891
|
ok: !0,
|
|
@@ -1898,39 +1900,39 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
1898
1900
|
error: p.error
|
|
1899
1901
|
});
|
|
1900
1902
|
let m = p.value;
|
|
1901
|
-
if (
|
|
1903
|
+
if (Gn(m)) return kr(m, t, u, n);
|
|
1902
1904
|
let h = m, g = r?.(h);
|
|
1903
|
-
return
|
|
1905
|
+
return Or(h, t, u, g, n, i === void 0 ? void 0 : {
|
|
1904
1906
|
key: i.scope === "subject" ? `${i.baseKey}:s:${d}` : `${i.baseKey}:global`,
|
|
1905
1907
|
ttlMs: i.ttlMs,
|
|
1906
1908
|
swrMs: i.swrMs
|
|
1907
|
-
}, a?.(s), o?.(s) ??
|
|
1908
|
-
}).pipe(M.withSpan(n, { attributes: { "framework.kind": "subscription" } }))),
|
|
1909
|
-
let n = yield*
|
|
1910
|
-
|
|
1911
|
-
let a =
|
|
1909
|
+
}, a?.(s), o?.(s) ?? Dr(s));
|
|
1910
|
+
}).pipe(M.withSpan(n, { attributes: { "framework.kind": "subscription" } }))), jr = (e, t = "rpc.stream") => R.unwrap(M.gen(function* () {
|
|
1911
|
+
let n = yield* Te, r = yield* xe, i = yield* wr;
|
|
1912
|
+
Er(i, t, n);
|
|
1913
|
+
let a = Cr(n, i, r.clientId), o = e(a), s = M.isEffect(o) ? yield* o.pipe(M.orDie) : o;
|
|
1912
1914
|
if (a.clientId === void 0) return s;
|
|
1913
1915
|
let c = a.clientId;
|
|
1914
1916
|
return R.unwrapScoped(M.gen(function* () {
|
|
1915
|
-
let e = yield*
|
|
1916
|
-
|
|
1917
|
+
let e = yield* He.make(), t = er(c, () => {
|
|
1918
|
+
He.unsafeDone(e, M.void);
|
|
1917
1919
|
});
|
|
1918
|
-
return yield* M.addFinalizer(() => M.sync(() => t())), s.pipe(R.interruptWhen(
|
|
1920
|
+
return yield* M.addFinalizer(() => M.sync(() => t())), s.pipe(R.interruptWhen(He.await(e)));
|
|
1919
1921
|
}));
|
|
1920
|
-
}).pipe(M.withSpan(t, { attributes: { "framework.kind": "stream" } }))),
|
|
1921
|
-
if (
|
|
1922
|
-
let r =
|
|
1922
|
+
}).pipe(M.withSpan(t, { attributes: { "framework.kind": "stream" } }))), Mr = k({ scope: "voltro:rpc" }), Nr = k({ scope: "voltro:http" }), Pr = (e, t, n) => {
|
|
1923
|
+
if (A.isInterruptedOnly(n)) return;
|
|
1924
|
+
let r = A.squash(n), i = r?._tag, a = r instanceof Error ? r.message : r?.message ?? String(r), o = A.dieOption(n)._tag === "Some", s = qt(r), c = {
|
|
1923
1925
|
traceId: t,
|
|
1924
1926
|
...i === void 0 ? {} : { errorTag: i },
|
|
1925
1927
|
...s
|
|
1926
1928
|
}, l = a === "Failed to execute statement" && typeof s.dbMessage == "string" ? s.dbMessage : a;
|
|
1927
|
-
o ?
|
|
1928
|
-
},
|
|
1929
|
+
o ? Mr.error(`${e} failed: ${l}`, c) : Mr.warn(`${e} failed: ${l}`, c);
|
|
1930
|
+
}, Fr = /* @__PURE__ */ new Set(["SqlError", "ResultLengthMismatch"]), Ir = (e) => typeof e == "object" && !!e && typeof e._tag == "string" && Fr.has(e._tag), Lr = (e) => ({
|
|
1929
1931
|
_tag: "InternalError",
|
|
1930
1932
|
message: "internal server error",
|
|
1931
1933
|
traceId: e
|
|
1932
|
-
}),
|
|
1933
|
-
let t =
|
|
1934
|
+
}), Rr = (e) => {
|
|
1935
|
+
let t = A.squash(e);
|
|
1934
1936
|
t && typeof t == "object" && t._tag === "UnknownException" && (t = t.error ?? t.cause ?? t);
|
|
1935
1937
|
let n = t && typeof t == "object" ? t : {}, r = {};
|
|
1936
1938
|
for (let [e, t] of Object.entries(n)) e === "cause" || e === "stack" || e === "message" || (t === null || typeof t == "string" || typeof t == "number" || typeof t == "boolean") && (r[e] = t);
|
|
@@ -1940,19 +1942,19 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
1940
1942
|
...typeof i == "string" ? { _tag: i } : {},
|
|
1941
1943
|
message: typeof a == "string" ? a : String(t)
|
|
1942
1944
|
};
|
|
1943
|
-
},
|
|
1944
|
-
let r = yield*
|
|
1945
|
-
|
|
1946
|
-
let o =
|
|
1945
|
+
}, zr = (e, t, n = "rpc.mutation") => M.gen(function* () {
|
|
1946
|
+
let r = yield* Te, i = yield* xe, a = yield* wr;
|
|
1947
|
+
Er(a, n, r);
|
|
1948
|
+
let o = Cr(r, a, i.clientId), s = yr({ subjectKey: hr(r.id, i.clientId) }, () => ur({
|
|
1947
1949
|
traceId: o.traceId,
|
|
1948
1950
|
...o.spanId === void 0 ? {} : { spanId: o.spanId }
|
|
1949
1951
|
}, () => e(t, o)));
|
|
1950
1952
|
return yield* (M.isEffect(s) ? s : M.tryPromise({
|
|
1951
1953
|
try: () => Promise.resolve(s),
|
|
1952
1954
|
catch: (e) => e
|
|
1953
|
-
})).pipe(M.tapErrorCause((e) => M.sync(() =>
|
|
1954
|
-
}).pipe(M.withSpan(n, { attributes: { "framework.kind": "mutation" } })),
|
|
1955
|
-
let t = e.port ?? 4e3, n = e.path ?? "/ws", r =
|
|
1955
|
+
})).pipe(M.tapErrorCause((e) => M.sync(() => Pr(n, o.traceId, e))), M.catchIf(Ir, () => M.die(Lr(o.traceId))), M.annotateLogs(Tr(o)));
|
|
1956
|
+
}).pipe(M.withSpan(n, { attributes: { "framework.kind": "mutation" } })), Br = 8 * 1024 * 1024, Vr = (e) => {
|
|
1957
|
+
let t = e.port ?? 4e3, n = e.path ?? "/ws", r = Qe(), i = (t) => nt.HttpServerRequest.pipe(M.flatMap((t) => M.gen(function* () {
|
|
1956
1958
|
if (!e.inspectRoute) return B.text("inspect route not configured", { status: 404 });
|
|
1957
1959
|
let n = {};
|
|
1958
1960
|
for (let [e, r] of Object.entries(t.headers)) r !== void 0 && (n[e.toLowerCase()] = Array.isArray(r) ? r.join(", ") : r);
|
|
@@ -1964,7 +1966,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
1964
1966
|
contentType: a.contentType,
|
|
1965
1967
|
headers: a.headers ?? {}
|
|
1966
1968
|
});
|
|
1967
|
-
}))), a = () =>
|
|
1969
|
+
}))), a = () => nt.HttpServerRequest.pipe(M.flatMap((t) => {
|
|
1968
1970
|
let n = e.inspectStream;
|
|
1969
1971
|
if (!n) return M.succeed(B.text("inspect stream not configured", { status: 404 }));
|
|
1970
1972
|
let r = {};
|
|
@@ -2009,7 +2011,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2009
2011
|
...i
|
|
2010
2012
|
}
|
|
2011
2013
|
}));
|
|
2012
|
-
})), o = z.add("*", "/_voltro/inspect/*",
|
|
2014
|
+
})), o = z.add("*", "/_voltro/inspect/*", nt.HttpServerRequest.pipe(M.flatMap((t) => M.gen(function* () {
|
|
2013
2015
|
if (!e.inspectRoute) return B.text("inspect route not configured", { status: 404 });
|
|
2014
2016
|
let n = {};
|
|
2015
2017
|
for (let [e, r] of Object.entries(t.headers)) r !== void 0 && (n[e.toLowerCase()] = Array.isArray(r) ? r.join(", ") : r);
|
|
@@ -2025,10 +2027,10 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2025
2027
|
e.inspectRoute !== void 0 && (s = e.inspectStream === void 0 ? N.mergeAll(z.add("*", "/_voltro/inspect", i(!0)), o) : N.mergeAll(z.add("GET", "/_voltro/inspect/stream", a()), z.add("*", "/_voltro/inspect", i(!0)), o));
|
|
2026
2028
|
let c = N.empty;
|
|
2027
2029
|
if (e.webhookRoutes !== void 0 && e.webhookRoutes.size > 0) {
|
|
2028
|
-
let t = (e) =>
|
|
2030
|
+
let t = (e) => nt.HttpServerRequest.pipe(M.flatMap((t) => M.gen(function* () {
|
|
2029
2031
|
let n = {};
|
|
2030
2032
|
for (let [e, r] of Object.entries(t.headers)) r !== void 0 && (n[e.toLowerCase()] = Array.isArray(r) ? r.join(", ") : r);
|
|
2031
|
-
let r = t.method !== "GET" && t.method !== "HEAD" ? yield* t.text.pipe(M.orElseSucceed(() => "")) : "", i = new TextEncoder().encode(r), a = t.url.split("?")[0], o =
|
|
2033
|
+
let r = t.method !== "GET" && t.method !== "HEAD" ? yield* t.text.pipe(M.orElseSucceed(() => "")) : "", i = new TextEncoder().encode(r), a = t.url.split("?")[0], o = cr(n.traceparent), s = yield* M.promise(() => e.handle({
|
|
2032
2034
|
method: t.method,
|
|
2033
2035
|
path: a,
|
|
2034
2036
|
headers: n,
|
|
@@ -2049,7 +2051,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2049
2051
|
}
|
|
2050
2052
|
let l = N.empty;
|
|
2051
2053
|
if (e.httpRoutes !== void 0 && e.httpRoutes.length > 0) {
|
|
2052
|
-
let t = (e) =>
|
|
2054
|
+
let t = (e) => nt.HttpServerRequest.pipe(M.flatMap((t) => M.gen(function* () {
|
|
2053
2055
|
let n = {};
|
|
2054
2056
|
for (let [e, r] of Object.entries(t.headers)) r !== void 0 && (n[e.toLowerCase()] = Array.isArray(r) ? r.join(", ") : r);
|
|
2055
2057
|
let r = t.url.indexOf("?"), i = r >= 0 ? t.url.slice(0, r) : t.url, a = r >= 0 ? t.url.slice(r + 1) : "", o = t.method !== "GET" && t.method !== "HEAD" ? new Uint8Array(yield* t.arrayBuffer.pipe(M.orElseSucceed(() => /* @__PURE__ */ new ArrayBuffer(0)))) : /* @__PURE__ */ new Uint8Array(), s = {
|
|
@@ -2058,8 +2060,8 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2058
2060
|
query: a,
|
|
2059
2061
|
headers: n,
|
|
2060
2062
|
rawBody: o
|
|
2061
|
-
}, c = yield* M.promise(() =>
|
|
2062
|
-
c.status >= 500 &&
|
|
2063
|
+
}, c = yield* M.promise(() => ut(e, s));
|
|
2064
|
+
c.status >= 500 && Nr.warn(`${t.method} ${i} → ${c.status}`, {
|
|
2063
2065
|
method: t.method,
|
|
2064
2066
|
path: i,
|
|
2065
2067
|
status: c.status,
|
|
@@ -2071,7 +2073,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2071
2073
|
headers: l
|
|
2072
2074
|
};
|
|
2073
2075
|
return c.body instanceof Uint8Array ? B.uint8Array(c.body, u) : B.text(c.body ?? "", u);
|
|
2074
|
-
})), M.tapErrorCause((t) =>
|
|
2076
|
+
})), M.tapErrorCause((t) => A.isInterruptedOnly(t) ? M.void : M.sync(() => Nr.error(`${e.map((e) => e.method).join("|")} ${e[0].path} threw`, { path: e[0].path }, A.squash(t))))), n = /* @__PURE__ */ new Map();
|
|
2075
2077
|
for (let t of e.httpRoutes) {
|
|
2076
2078
|
let e = n.get(t.path);
|
|
2077
2079
|
e ? e.push(t) : n.set(t.path, [t]);
|
|
@@ -2082,14 +2084,14 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2082
2084
|
});
|
|
2083
2085
|
l = N.mergeAll(...r);
|
|
2084
2086
|
}
|
|
2085
|
-
let u =
|
|
2086
|
-
let e = yield*
|
|
2087
|
+
let u = ct.layerProtocolWebsocketRouter({ path: n }), d = ct.layer(e.group), f = ct.layer(e.group).pipe(N.provide(ct.layerProtocolHttpRouter({ path: "/rpc" })), N.provide(st.layerJson), N.provide(e.httpHandlersLayer ?? e.handlersLayer)), p = N.scopedDiscard(M.gen(function* () {
|
|
2088
|
+
let e = yield* ct.Protocol;
|
|
2087
2089
|
yield* M.forkScoped(M.gen(function* () {
|
|
2088
2090
|
let t = yield* e.disconnects.take;
|
|
2089
|
-
|
|
2091
|
+
Zn(t), tr(t);
|
|
2090
2092
|
}).pipe(M.forever));
|
|
2091
|
-
})), m = N.mergeAll(d, p).pipe(N.provide(u), N.provide(
|
|
2092
|
-
let t = yield*
|
|
2093
|
+
})), m = N.mergeAll(d, p).pipe(N.provide(u), N.provide(st.layerJson), N.provide(e.handlersLayer)), h = N.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) => M.gen(function* () {
|
|
2094
|
+
let t = yield* nt.HttpServerRequest, n = {};
|
|
2093
2095
|
for (let [e, r] of Object.entries(t.headers)) r !== void 0 && (n[e.toLowerCase()] = Array.isArray(r) ? r.join(", ") : r);
|
|
2094
2096
|
let r = t.url.indexOf("?"), i = r === -1 ? t.url : t.url.slice(0, r);
|
|
2095
2097
|
if (t.method === "POST" && i === "/rpc") {
|
|
@@ -2129,13 +2131,13 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2129
2131
|
status: l.status,
|
|
2130
2132
|
...l.headers ? { headers: l.headers } : {}
|
|
2131
2133
|
});
|
|
2132
|
-
}), S = N.unwrapEffect(z.toHttpEffect(h).pipe(M.map((e) =>
|
|
2134
|
+
}), S = N.unwrapEffect(z.toHttpEffect(h).pipe(M.map((e) => tt.serve(x(e))))).pipe(N.provide(it.layer(() => r, { port: t })), N.provide(rt.layer));
|
|
2133
2135
|
e.tracerLayer && (S = S.pipe(N.provide(e.tracerLayer)));
|
|
2134
|
-
let C =
|
|
2135
|
-
C.error("rpc server crashed", {},
|
|
2136
|
+
let C = k({ scope: "voltro:rpc" }), ee = N.launch(S).pipe(M.catchAllCause((e) => M.sync(() => {
|
|
2137
|
+
C.error("rpc server crashed", {}, A.squash(e)), process.exit(1);
|
|
2136
2138
|
})));
|
|
2137
|
-
return
|
|
2138
|
-
},
|
|
2139
|
+
return at.runMain(ee, { disableErrorReporting: !0 }), r;
|
|
2140
|
+
}, Hr = (e, t = 1e4) => new Promise((n, r) => {
|
|
2139
2141
|
if (e.listening) {
|
|
2140
2142
|
n();
|
|
2141
2143
|
return;
|
|
@@ -2151,13 +2153,13 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2151
2153
|
o(e);
|
|
2152
2154
|
}
|
|
2153
2155
|
a = setTimeout(() => o(/* @__PURE__ */ Error(`rpc server did not bind within ${t}ms`)), t), e.on("listening", s), e.on("error", c);
|
|
2154
|
-
}),
|
|
2156
|
+
}), Ur = () => {
|
|
2155
2157
|
let e = process.env.FRAMEWORK_TRACING?.toLowerCase();
|
|
2156
2158
|
return e === "console" || e === "otlp" || e === "off" ? e : process.env.OTEL_EXPORTER_OTLP_ENDPOINT || process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT ? "otlp" : "off";
|
|
2157
|
-
},
|
|
2159
|
+
}, Wr = () => {
|
|
2158
2160
|
let e = process.env.FRAMEWORK_METRICS?.toLowerCase();
|
|
2159
2161
|
return e === "console" || e === "otlp" || e === "off" ? e : process.env.OTEL_EXPORTER_OTLP_ENDPOINT || process.env.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT ? "otlp" : "off";
|
|
2160
|
-
},
|
|
2162
|
+
}, Gr = async () => {
|
|
2161
2163
|
let [e, t, n, r, i] = await Promise.all([
|
|
2162
2164
|
import("@opentelemetry/sdk-trace-base"),
|
|
2163
2165
|
import("@opentelemetry/sdk-metrics"),
|
|
@@ -2172,7 +2174,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2172
2174
|
otlpMetrics: r,
|
|
2173
2175
|
nodeSdk: i
|
|
2174
2176
|
};
|
|
2175
|
-
},
|
|
2177
|
+
}, Kr = (e, t, n) => {
|
|
2176
2178
|
let { PeriodicExportingMetricReader: r, ConsoleMetricExporter: i, InMemoryMetricExporter: a, AggregationTemporality: o } = e.sdkMetrics;
|
|
2177
2179
|
if (t === "off") return {
|
|
2178
2180
|
reader: void 0,
|
|
@@ -2195,8 +2197,8 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2195
2197
|
}),
|
|
2196
2198
|
inMemory: void 0
|
|
2197
2199
|
};
|
|
2198
|
-
},
|
|
2199
|
-
let t = e.mode ??
|
|
2200
|
+
}, qr = async (e = {}) => {
|
|
2201
|
+
let t = e.mode ?? Ur(), n = e.metricsMode ?? Wr(), r = e.extraSpanProcessors ?? [], i = e.extraMetricReaders ?? [];
|
|
2200
2202
|
if (t === "off" && e.traceSink === void 0 && n === "off" && r.length === 0 && i.length === 0) return {
|
|
2201
2203
|
layer: N.empty,
|
|
2202
2204
|
mode: t,
|
|
@@ -2205,13 +2207,13 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2205
2207
|
metricsMode: n,
|
|
2206
2208
|
inMemoryMetricExporter: void 0
|
|
2207
2209
|
};
|
|
2208
|
-
let a = await
|
|
2210
|
+
let a = await Gr(), { 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;
|
|
2209
2211
|
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());
|
|
2210
2212
|
let m = [
|
|
2211
2213
|
...e.traceSink ? [e.traceSink] : [],
|
|
2212
2214
|
...p ? [p] : [],
|
|
2213
2215
|
...r
|
|
2214
|
-
], h = m.length === 1 ? m[0] : m, { reader: g, inMemory: _ } =
|
|
2216
|
+
], h = m.length === 1 ? m[0] : m, { reader: g, inMemory: _ } = Kr(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 = {
|
|
2215
2217
|
serviceName: d,
|
|
2216
2218
|
...e.serviceVersion ? { serviceVersion: e.serviceVersion } : {},
|
|
2217
2219
|
...e.resourceAttributes ? { attributes: e.resourceAttributes } : {}
|
|
@@ -2229,18 +2231,18 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2229
2231
|
metricsMode: n,
|
|
2230
2232
|
inMemoryMetricExporter: _
|
|
2231
2233
|
};
|
|
2232
|
-
},
|
|
2233
|
-
[
|
|
2234
|
-
[
|
|
2235
|
-
[
|
|
2236
|
-
[
|
|
2237
|
-
[
|
|
2238
|
-
},
|
|
2234
|
+
}, Jr = {
|
|
2235
|
+
[pt.INTERNAL]: "internal",
|
|
2236
|
+
[pt.SERVER]: "server",
|
|
2237
|
+
[pt.CLIENT]: "client",
|
|
2238
|
+
[pt.PRODUCER]: "producer",
|
|
2239
|
+
[pt.CONSUMER]: "consumer"
|
|
2240
|
+
}, Yr = (e) => e[0] * 1e3 + e[1] / 1e6, Xr = 512, Zr = 48, Qr = (e) => {
|
|
2239
2241
|
let t = {}, n = 0;
|
|
2240
2242
|
for (let r in e) {
|
|
2241
|
-
if (n >=
|
|
2243
|
+
if (n >= Zr) break;
|
|
2242
2244
|
let i = e[r];
|
|
2243
|
-
if (typeof i == "string") t[r] = i.length >
|
|
2245
|
+
if (typeof i == "string") t[r] = i.length > Xr ? `${i.slice(0, Xr)}…` : i;
|
|
2244
2246
|
else if (typeof i == "number" || typeof i == "boolean" || i == null) t[r] = i;
|
|
2245
2247
|
else {
|
|
2246
2248
|
let e;
|
|
@@ -2249,49 +2251,49 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2249
2251
|
} catch {
|
|
2250
2252
|
e = String(i);
|
|
2251
2253
|
}
|
|
2252
|
-
t[r] = e.length >
|
|
2254
|
+
t[r] = e.length > Xr ? `${e.slice(0, Xr)}…` : e;
|
|
2253
2255
|
}
|
|
2254
2256
|
n++;
|
|
2255
2257
|
}
|
|
2256
2258
|
return t;
|
|
2257
|
-
},
|
|
2258
|
-
[
|
|
2259
|
-
[
|
|
2260
|
-
[
|
|
2261
|
-
},
|
|
2259
|
+
}, $r = {
|
|
2260
|
+
[mt.UNSET]: "unset",
|
|
2261
|
+
[mt.OK]: "ok",
|
|
2262
|
+
[mt.ERROR]: "error"
|
|
2263
|
+
}, ei = (e) => {
|
|
2262
2264
|
let t = e.spanContext(), n = e.events.length > 0 ? e.events.slice(0, 16).map((e) => ({
|
|
2263
2265
|
name: e.name,
|
|
2264
|
-
tsMs:
|
|
2265
|
-
...e.attributes ? { attributes:
|
|
2266
|
+
tsMs: Yr(e.time),
|
|
2267
|
+
...e.attributes ? { attributes: Qr(e.attributes) } : {}
|
|
2266
2268
|
})) : void 0;
|
|
2267
2269
|
return {
|
|
2268
2270
|
traceId: t.traceId,
|
|
2269
2271
|
spanId: t.spanId,
|
|
2270
2272
|
parentSpanId: e.parentSpanContext?.spanId ?? null,
|
|
2271
2273
|
name: e.name,
|
|
2272
|
-
kind:
|
|
2273
|
-
attributes:
|
|
2274
|
-
startMs:
|
|
2275
|
-
endMs:
|
|
2276
|
-
durationMs:
|
|
2277
|
-
status:
|
|
2274
|
+
kind: Jr[e.kind] ?? "internal",
|
|
2275
|
+
attributes: Qr(e.attributes),
|
|
2276
|
+
startMs: Yr(e.startTime),
|
|
2277
|
+
endMs: Yr(e.endTime),
|
|
2278
|
+
durationMs: Yr(e.duration),
|
|
2279
|
+
status: $r[e.status.code] ?? "unset",
|
|
2278
2280
|
...e.status.message ? { statusMessage: e.status.message } : {},
|
|
2279
2281
|
...n ? { events: n } : {}
|
|
2280
2282
|
};
|
|
2281
|
-
},
|
|
2283
|
+
}, ti = (e) => ({
|
|
2282
2284
|
onStart: () => {},
|
|
2283
2285
|
onEnd: (t) => {
|
|
2284
2286
|
try {
|
|
2285
|
-
e(
|
|
2287
|
+
e(ei(t));
|
|
2286
2288
|
} catch {}
|
|
2287
2289
|
},
|
|
2288
2290
|
forceFlush: () => Promise.resolve(),
|
|
2289
2291
|
shutdown: () => Promise.resolve()
|
|
2290
|
-
}),
|
|
2291
|
-
|
|
2292
|
-
},
|
|
2293
|
-
|
|
2294
|
-
},
|
|
2292
|
+
}), ni = { get: (e) => Promise.resolve(process.env[e]) }, ri = ni, ii = (e) => {
|
|
2293
|
+
ri = e;
|
|
2294
|
+
}, ai = () => {
|
|
2295
|
+
ri = ni;
|
|
2296
|
+
}, oi = async (e) => await ri.get(e) ?? process.env[e], si = (e) => process.env[e], ci = (e, t = 6e4, n = () => Date.now()) => {
|
|
2295
2297
|
let r = /* @__PURE__ */ new Map();
|
|
2296
2298
|
return { get: async (i) => {
|
|
2297
2299
|
let a = r.get(i);
|
|
@@ -2302,12 +2304,12 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2302
2304
|
at: n()
|
|
2303
2305
|
}), o;
|
|
2304
2306
|
} };
|
|
2305
|
-
},
|
|
2307
|
+
}, li = (e) => {
|
|
2306
2308
|
let t = {
|
|
2307
2309
|
accept: "application/json",
|
|
2308
2310
|
...e.headers ?? {}
|
|
2309
2311
|
};
|
|
2310
|
-
if (e.perKey) return
|
|
2312
|
+
if (e.perKey) return ci({ get: async (n) => {
|
|
2311
2313
|
let r = await fetch(`${e.url.replace(/\/$/, "")}/${encodeURIComponent(n)}`, { headers: t });
|
|
2312
2314
|
if (!r.ok) return;
|
|
2313
2315
|
let i = await r.json();
|
|
@@ -2318,59 +2320,59 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2318
2320
|
let t = (await a())[e];
|
|
2319
2321
|
return typeof t == "string" ? t : void 0;
|
|
2320
2322
|
} };
|
|
2321
|
-
},
|
|
2323
|
+
}, ui = (e) => e === void 0 || e === "env" || typeof e == "object" && e.kind === "env" ? ni : e.kind === "custom" ? e.backend : e.kind === "http" ? li(e) : ni, di = (e) => /^[0-9a-f]{64}$/i.test(e) ? Buffer.from(e, "hex") : ve(e, "voltro:field-encryption:v1", 32), fi = (t) => {
|
|
2322
2324
|
if (t.length !== 32) throw Error(`field cipher key must be 32 bytes, got ${t.length}`);
|
|
2323
2325
|
return {
|
|
2324
2326
|
encrypt: (n) => {
|
|
2325
|
-
let r =
|
|
2327
|
+
let r = ge(12), i = pe("aes-256-gcm", t, r), a = Buffer.concat([i.update(n, "utf8"), i.final()]), o = i.getAuthTag();
|
|
2326
2328
|
return `${e}${r.toString("base64")}:${o.toString("base64")}:${a.toString("base64")}`;
|
|
2327
2329
|
},
|
|
2328
2330
|
decrypt: (n) => {
|
|
2329
2331
|
let [r, i, a] = n.slice(e.length).split(":");
|
|
2330
2332
|
if (!r || !i || a === void 0) throw Error("field cipher: malformed ciphertext");
|
|
2331
|
-
let o =
|
|
2333
|
+
let o = me("aes-256-gcm", t, Buffer.from(r, "base64"));
|
|
2332
2334
|
return o.setAuthTag(Buffer.from(i, "base64")), Buffer.concat([o.update(Buffer.from(a, "base64")), o.final()]).toString("utf8");
|
|
2333
2335
|
}
|
|
2334
2336
|
};
|
|
2335
|
-
},
|
|
2336
|
-
|
|
2337
|
-
},
|
|
2338
|
-
let t =
|
|
2339
|
-
if (!t) throw Error(`encryptField: ${
|
|
2337
|
+
}, pi = (e) => fi(di(e)), mi, hi = (e) => {
|
|
2338
|
+
mi = e;
|
|
2339
|
+
}, gi = () => mi, _i = "no field cipher registered — enable `@voltro/plugin-governance` `governancePlugin({ fieldEncryption: { key } })` (or call setFieldCipher) so a key is available.", q = (e) => {
|
|
2340
|
+
let t = gi();
|
|
2341
|
+
if (!t) throw Error(`encryptField: ${_i}`);
|
|
2340
2342
|
return t.encrypt(e);
|
|
2341
|
-
},
|
|
2343
|
+
}, vi = (e) => {
|
|
2342
2344
|
if (!x(e)) return e;
|
|
2343
|
-
let t =
|
|
2344
|
-
if (!t) throw Error(`decryptField: ${
|
|
2345
|
+
let t = gi();
|
|
2346
|
+
if (!t) throw Error(`decryptField: ${_i}`);
|
|
2345
2347
|
return t.decrypt(e);
|
|
2346
|
-
},
|
|
2348
|
+
}, yi = "_voltro_idempotency", bi = (e) => {
|
|
2347
2349
|
if (e == null) return null;
|
|
2348
2350
|
let t = typeof e == "string" ? JSON.parse(e) : e;
|
|
2349
2351
|
return t && typeof t == "object" && "status" in t ? t : null;
|
|
2350
|
-
},
|
|
2352
|
+
}, xi = (e) => ({
|
|
2351
2353
|
scope: e.scope,
|
|
2352
2354
|
key: e.key,
|
|
2353
2355
|
status: e.status === "completed" ? "completed" : "in_flight",
|
|
2354
|
-
response:
|
|
2355
|
-
createdAt:
|
|
2356
|
-
}),
|
|
2357
|
-
table:
|
|
2356
|
+
response: bi(e.response),
|
|
2357
|
+
createdAt: ze(e.createdAt)
|
|
2358
|
+
}), Si = async (e, n, r) => (await e.query({
|
|
2359
|
+
table: yi,
|
|
2358
2360
|
predicate: t(u("scope", n), u("key", r)),
|
|
2359
2361
|
order: [],
|
|
2360
2362
|
take: 1,
|
|
2361
2363
|
skip: void 0,
|
|
2362
2364
|
projection: void 0
|
|
2363
|
-
}))[0] ?? null,
|
|
2365
|
+
}))[0] ?? null, Ci = (e) => ({
|
|
2364
2366
|
get: async (t, n) => {
|
|
2365
|
-
let r = await
|
|
2366
|
-
return r ?
|
|
2367
|
+
let r = await Si(e, t, n);
|
|
2368
|
+
return r ? xi(r) : null;
|
|
2367
2369
|
},
|
|
2368
2370
|
claim: async (t, n, r, i) => {
|
|
2369
2371
|
for (let a = 0; a < 2; a++) {
|
|
2370
2372
|
let a = f({
|
|
2371
2373
|
kind: "typeid",
|
|
2372
2374
|
prefix: "idem"
|
|
2373
|
-
},
|
|
2375
|
+
}, yi), o = await e.insertIgnore(yi, {
|
|
2374
2376
|
id: a,
|
|
2375
2377
|
scope: t,
|
|
2376
2378
|
key: n,
|
|
@@ -2379,11 +2381,11 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2379
2381
|
createdAt: new Date(r)
|
|
2380
2382
|
}, { conflictColumns: ["scope", "key"] });
|
|
2381
2383
|
if (o.id === a) return "claimed";
|
|
2382
|
-
if (r -
|
|
2383
|
-
await e.delete(
|
|
2384
|
+
if (r - ze(o.createdAt) < i) return xi(o);
|
|
2385
|
+
await e.delete(yi, o.id);
|
|
2384
2386
|
}
|
|
2385
|
-
let a = await
|
|
2386
|
-
return a ?
|
|
2387
|
+
let a = await Si(e, t, n);
|
|
2388
|
+
return a ? xi(a) : {
|
|
2387
2389
|
scope: t,
|
|
2388
2390
|
key: n,
|
|
2389
2391
|
status: "in_flight",
|
|
@@ -2392,36 +2394,36 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2392
2394
|
};
|
|
2393
2395
|
},
|
|
2394
2396
|
complete: async (t, n, r, i) => {
|
|
2395
|
-
let a = await
|
|
2396
|
-
a && await e.update(
|
|
2397
|
+
let a = await Si(e, t, n);
|
|
2398
|
+
a && await e.update(yi, a.id, {
|
|
2397
2399
|
status: "completed",
|
|
2398
2400
|
response: r
|
|
2399
2401
|
});
|
|
2400
2402
|
},
|
|
2401
2403
|
release: async (t, n) => {
|
|
2402
|
-
let r = await
|
|
2403
|
-
r && await e.delete(
|
|
2404
|
+
let r = await Si(e, t, n);
|
|
2405
|
+
r && await e.delete(yi, r.id);
|
|
2404
2406
|
}
|
|
2405
|
-
}), J = "_voltro_kv",
|
|
2407
|
+
}), J = "_voltro_kv", wi = (e) => {
|
|
2406
2408
|
if (e == null) return null;
|
|
2407
2409
|
if (e instanceof Date) return e.getTime();
|
|
2408
2410
|
if (typeof e == "number") return e;
|
|
2409
2411
|
let t = Date.parse(String(e));
|
|
2410
2412
|
return Number.isNaN(t) ? null : t;
|
|
2411
|
-
},
|
|
2412
|
-
let n =
|
|
2413
|
+
}, Ti = (e, t) => {
|
|
2414
|
+
let n = wi(e.expiresAt);
|
|
2413
2415
|
return n !== null && n <= t;
|
|
2414
|
-
},
|
|
2416
|
+
}, Ei = (e) => e === null ? null : JSON.parse(e), Di = async (e, t) => (await e.query({
|
|
2415
2417
|
table: J,
|
|
2416
2418
|
predicate: u("key", t),
|
|
2417
2419
|
order: [],
|
|
2418
2420
|
take: 1,
|
|
2419
2421
|
skip: void 0,
|
|
2420
2422
|
projection: void 0
|
|
2421
|
-
}))[0] ?? null,
|
|
2423
|
+
}))[0] ?? null, Oi = (e) => {
|
|
2422
2424
|
let n = (e, t, n) => M.tryPromise({
|
|
2423
2425
|
try: n,
|
|
2424
|
-
catch: (n) => new
|
|
2426
|
+
catch: (n) => new gt({
|
|
2425
2427
|
operation: e,
|
|
2426
2428
|
key: t,
|
|
2427
2429
|
cause: String(n)
|
|
@@ -2429,8 +2431,8 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2429
2431
|
});
|
|
2430
2432
|
return {
|
|
2431
2433
|
get: (t) => n("get", t, async () => {
|
|
2432
|
-
let n = await
|
|
2433
|
-
return n === null ? F.none() :
|
|
2434
|
+
let n = await Di(e, t);
|
|
2435
|
+
return n === null ? F.none() : Ti(n, Date.now()) ? (await e.delete(J, n.id), F.none()) : F.some(Ei(n.value));
|
|
2434
2436
|
}),
|
|
2435
2437
|
set: (t, r, i) => n("set", t, async () => {
|
|
2436
2438
|
let n = Date.now(), a = i?.ttlMs !== void 0 && i.ttlMs > 0 ? new Date(n + i.ttlMs) : null, o = f({
|
|
@@ -2453,17 +2455,17 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2453
2455
|
});
|
|
2454
2456
|
}),
|
|
2455
2457
|
delete: (t) => n("delete", t, async () => {
|
|
2456
|
-
let n = await
|
|
2458
|
+
let n = await Di(e, t);
|
|
2457
2459
|
if (n === null) return !1;
|
|
2458
|
-
let r = !
|
|
2460
|
+
let r = !Ti(n, Date.now());
|
|
2459
2461
|
return await e.delete(J, n.id), r;
|
|
2460
2462
|
}),
|
|
2461
2463
|
has: (t) => n("has", t, async () => {
|
|
2462
|
-
let n = await
|
|
2463
|
-
return n === null ? !1 :
|
|
2464
|
+
let n = await Di(e, t);
|
|
2465
|
+
return n === null ? !1 : Ti(n, Date.now()) ? (await e.delete(J, n.id), !1) : !0;
|
|
2464
2466
|
}),
|
|
2465
2467
|
list: (r) => n("list", "", async () => {
|
|
2466
|
-
let n = Date.now(), i =
|
|
2468
|
+
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({
|
|
2467
2469
|
table: J,
|
|
2468
2470
|
predicate: a,
|
|
2469
2471
|
order: [],
|
|
@@ -2471,7 +2473,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2471
2473
|
skip: void 0,
|
|
2472
2474
|
projection: void 0
|
|
2473
2475
|
}), c = [];
|
|
2474
|
-
for (let e of s)
|
|
2476
|
+
for (let e of s) Ti(e, n) || (r === "" || e.key.startsWith(r)) && c.push(e.key);
|
|
2475
2477
|
return c;
|
|
2476
2478
|
}),
|
|
2477
2479
|
clear: () => n("clear", "", async () => {
|
|
@@ -2481,8 +2483,8 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2481
2483
|
} });
|
|
2482
2484
|
})
|
|
2483
2485
|
};
|
|
2484
|
-
},
|
|
2485
|
-
let n = (t.KV_BACKEND ?? "database").toLowerCase(), r = n === "redis" ? "redis" : n === "memory" ? "memory" : "database", i = r === "redis" ?
|
|
2486
|
+
}, ki = async ({ store: e, env: t = process.env }) => {
|
|
2487
|
+
let n = (t.KV_BACKEND ?? "database").toLowerCase(), r = n === "redis" ? "redis" : n === "memory" ? "memory" : "database", i = r === "redis" ? bt(t.KV_KEY_PREFIX ? { keyPrefix: t.KV_KEY_PREFIX } : {}).pipe(N.provide(vt)) : r === "memory" ? yt() : N.succeed(_t, _t.of(Oi(e))), a = Ke.make(ht.Default.pipe(N.provide(i))), o = await a.runPromise(ht);
|
|
2486
2488
|
return {
|
|
2487
2489
|
kv: {
|
|
2488
2490
|
get: (e) => a.runPromise(o.get(e)).then((e) => F.getOrUndefined(e)),
|
|
@@ -2497,7 +2499,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2497
2499
|
backend: r,
|
|
2498
2500
|
dispose: () => a.dispose()
|
|
2499
2501
|
};
|
|
2500
|
-
},
|
|
2502
|
+
}, Ai = {
|
|
2501
2503
|
get: () => Promise.resolve(void 0),
|
|
2502
2504
|
getOrElse: (e, t) => Promise.resolve(t()),
|
|
2503
2505
|
set: () => Promise.resolve(),
|
|
@@ -2505,7 +2507,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2505
2507
|
has: () => Promise.resolve(!1),
|
|
2506
2508
|
list: () => Promise.resolve([]),
|
|
2507
2509
|
clear: () => Promise.resolve()
|
|
2508
|
-
},
|
|
2510
|
+
}, ji = "_voltro_api_keys", Mi = (e) => he("sha256").update(e, "utf8").digest("hex"), Ni = (e = "voltro_") => `${e}${ge(30).toString("base64url")}`, Pi = (e) => ({
|
|
2509
2511
|
id: e.id,
|
|
2510
2512
|
name: e.name,
|
|
2511
2513
|
keyPrefix: e.keyPrefix,
|
|
@@ -2515,17 +2517,17 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2515
2517
|
expiresAt: e.expiresAt,
|
|
2516
2518
|
revokedAt: e.revokedAt,
|
|
2517
2519
|
createdAt: e.createdAt
|
|
2518
|
-
}),
|
|
2520
|
+
}), Fi = (e, t) => e.revokedAt === null && (e.expiresAt === null || e.expiresAt > t), Ii = (e, t = {}) => {
|
|
2519
2521
|
let n = t.prefix ?? "voltro_", r = async (t) => {
|
|
2520
|
-
let r =
|
|
2522
|
+
let r = Ni(n), i = f({
|
|
2521
2523
|
kind: "typeid",
|
|
2522
2524
|
prefix: "apikey"
|
|
2523
|
-
},
|
|
2525
|
+
}, ji), a = t.scopes ?? [], o = t.expiresAt == null ? null : t.expiresAt instanceof Date ? t.expiresAt.getTime() : t.expiresAt;
|
|
2524
2526
|
return await e.insert({
|
|
2525
2527
|
id: i,
|
|
2526
2528
|
tenantId: t.tenantId ?? null,
|
|
2527
2529
|
name: t.name,
|
|
2528
|
-
hashedKey:
|
|
2530
|
+
hashedKey: Mi(r),
|
|
2529
2531
|
keyPrefix: r.slice(0, n.length + 6),
|
|
2530
2532
|
scopes: a,
|
|
2531
2533
|
lastUsedAt: null,
|
|
@@ -2543,7 +2545,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2543
2545
|
};
|
|
2544
2546
|
}, i = async (t, n = Date.now()) => {
|
|
2545
2547
|
let r = await e.findByHash(t);
|
|
2546
|
-
return !r || !
|
|
2548
|
+
return !r || !Fi(r, n) ? null : (await e.patch(r.id, { lastUsedAt: n }), {
|
|
2547
2549
|
id: r.id,
|
|
2548
2550
|
tenantId: r.tenantId ?? "",
|
|
2549
2551
|
createdBy: r.createdBy ?? null,
|
|
@@ -2553,7 +2555,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2553
2555
|
return {
|
|
2554
2556
|
issue: r,
|
|
2555
2557
|
resolveByHash: i,
|
|
2556
|
-
verify: (e, t) => i(
|
|
2558
|
+
verify: (e, t) => i(Mi(e), t),
|
|
2557
2559
|
revoke: async (t, n = Date.now()) => await e.findById(t) ? (await e.patch(t, { revokedAt: n }), !0) : !1,
|
|
2558
2560
|
rotate: async (t, n = Date.now()) => {
|
|
2559
2561
|
let i = await e.findById(t);
|
|
@@ -2564,9 +2566,9 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2564
2566
|
createdBy: i.createdBy
|
|
2565
2567
|
})) : null;
|
|
2566
2568
|
},
|
|
2567
|
-
list: async (t) => (await e.listByTenant(t)).map(
|
|
2569
|
+
list: async (t) => (await e.listByTenant(t)).map(Pi)
|
|
2568
2570
|
};
|
|
2569
|
-
},
|
|
2571
|
+
}, Li = () => {
|
|
2570
2572
|
let e = /* @__PURE__ */ new Map();
|
|
2571
2573
|
return {
|
|
2572
2574
|
insert: async (t) => {
|
|
@@ -2583,21 +2585,21 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2583
2585
|
});
|
|
2584
2586
|
}
|
|
2585
2587
|
};
|
|
2586
|
-
},
|
|
2588
|
+
}, Ri = (e) => e == null ? null : e instanceof Date ? e.getTime() : typeof e == "number" ? e : typeof e == "string" ? new Date(e).getTime() : null, zi = (e) => ({
|
|
2587
2589
|
id: String(e.id),
|
|
2588
2590
|
tenantId: e.tenantId ?? null,
|
|
2589
2591
|
name: String(e.name),
|
|
2590
2592
|
hashedKey: String(e.hashedKey),
|
|
2591
2593
|
keyPrefix: String(e.keyPrefix),
|
|
2592
2594
|
scopes: e.scopes ?? null,
|
|
2593
|
-
lastUsedAt:
|
|
2594
|
-
expiresAt:
|
|
2595
|
-
revokedAt:
|
|
2595
|
+
lastUsedAt: Ri(e.lastUsedAt),
|
|
2596
|
+
expiresAt: Ri(e.expiresAt),
|
|
2597
|
+
revokedAt: Ri(e.revokedAt),
|
|
2596
2598
|
createdBy: e.createdBy ?? null,
|
|
2597
|
-
createdAt:
|
|
2598
|
-
}),
|
|
2599
|
+
createdAt: Ri(e.createdAt) ?? 0
|
|
2600
|
+
}), Bi = (e) => {
|
|
2599
2601
|
let t = async (t) => await e.query({
|
|
2600
|
-
table:
|
|
2602
|
+
table: ji,
|
|
2601
2603
|
predicate: t,
|
|
2602
2604
|
order: [],
|
|
2603
2605
|
take: void 0,
|
|
@@ -2615,32 +2617,32 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2615
2617
|
};
|
|
2616
2618
|
return {
|
|
2617
2619
|
insert: async (t) => {
|
|
2618
|
-
await e.insert(
|
|
2620
|
+
await e.insert(ji, n(t));
|
|
2619
2621
|
},
|
|
2620
2622
|
findByHash: async (e) => {
|
|
2621
2623
|
let n = await t(u("hashedKey", e));
|
|
2622
|
-
return n[0] ?
|
|
2624
|
+
return n[0] ? zi(n[0]) : null;
|
|
2623
2625
|
},
|
|
2624
2626
|
findById: async (e) => {
|
|
2625
2627
|
let n = await t(u("id", e));
|
|
2626
|
-
return n[0] ?
|
|
2628
|
+
return n[0] ? zi(n[0]) : null;
|
|
2627
2629
|
},
|
|
2628
|
-
listByTenant: async (e) => (await t(e === null ? void 0 : u("tenantId", e))).map(
|
|
2630
|
+
listByTenant: async (e) => (await t(e === null ? void 0 : u("tenantId", e))).map(zi).filter((t) => e === null || t.tenantId === e),
|
|
2629
2631
|
patch: async (t, r) => {
|
|
2630
|
-
await e.update(
|
|
2632
|
+
await e.update(ji, t, n(r));
|
|
2631
2633
|
}
|
|
2632
2634
|
};
|
|
2633
|
-
},
|
|
2635
|
+
}, Vi = (e, t = {}) => xt({
|
|
2634
2636
|
id: "voltro-apikey",
|
|
2635
2637
|
...t.prefix ? { prefix: t.prefix } : {},
|
|
2636
2638
|
resolveKey: (t) => e.resolveByHash(t)
|
|
2637
|
-
}),
|
|
2639
|
+
}), Hi = (e) => {
|
|
2638
2640
|
let t = e.subject;
|
|
2639
2641
|
return {
|
|
2640
2642
|
id: t.id ?? null,
|
|
2641
2643
|
tenantId: t.tenantId ?? null
|
|
2642
2644
|
};
|
|
2643
|
-
},
|
|
2645
|
+
}, Ui = (e, t = "/v1/api-keys") => {
|
|
2644
2646
|
let n = L.Struct({
|
|
2645
2647
|
id: L.String,
|
|
2646
2648
|
name: L.String,
|
|
@@ -2653,11 +2655,11 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2653
2655
|
createdAt: L.Number
|
|
2654
2656
|
});
|
|
2655
2657
|
return [
|
|
2656
|
-
|
|
2658
|
+
lt({
|
|
2657
2659
|
method: "POST",
|
|
2658
2660
|
path: `${t}/issue`,
|
|
2659
2661
|
summary: "Issue an API key (the token is returned ONCE).",
|
|
2660
|
-
guards: [
|
|
2662
|
+
guards: [dt(be)],
|
|
2661
2663
|
input: L.Struct({ body: L.Struct({
|
|
2662
2664
|
name: L.String,
|
|
2663
2665
|
scopes: L.optional(L.Array(L.String)),
|
|
@@ -2669,7 +2671,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2669
2671
|
keyPrefix: L.String
|
|
2670
2672
|
}),
|
|
2671
2673
|
handler: async (t, n) => {
|
|
2672
|
-
let r = t.body, i =
|
|
2674
|
+
let r = t.body, i = Hi(n), a = await e.issue({
|
|
2673
2675
|
tenantId: i.tenantId,
|
|
2674
2676
|
name: r.name,
|
|
2675
2677
|
...r.scopes ? { scopes: r.scopes } : {},
|
|
@@ -2683,68 +2685,72 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2683
2685
|
};
|
|
2684
2686
|
}
|
|
2685
2687
|
}),
|
|
2686
|
-
|
|
2688
|
+
lt({
|
|
2687
2689
|
method: "GET",
|
|
2688
2690
|
path: t,
|
|
2689
2691
|
summary: "List the caller tenant's API keys (no secrets).",
|
|
2690
|
-
guards: [
|
|
2692
|
+
guards: [dt(be)],
|
|
2691
2693
|
input: L.Struct({}),
|
|
2692
2694
|
output: L.Struct({ keys: L.Array(n) }),
|
|
2693
|
-
handler: async (t, n) => ({ keys: [...await e.list(
|
|
2695
|
+
handler: async (t, n) => ({ keys: [...await e.list(Hi(n).tenantId)] })
|
|
2694
2696
|
}),
|
|
2695
|
-
|
|
2697
|
+
lt({
|
|
2696
2698
|
method: "POST",
|
|
2697
2699
|
path: `${t}/revoke`,
|
|
2698
2700
|
summary: "Revoke an API key by id.",
|
|
2699
|
-
guards: [
|
|
2701
|
+
guards: [dt(be)],
|
|
2700
2702
|
input: L.Struct({ body: L.Struct({ id: L.String }) }),
|
|
2701
2703
|
output: L.Struct({ ok: L.Boolean }),
|
|
2702
2704
|
handler: async (t, n) => ({ ok: await e.revoke(t.body.id) })
|
|
2703
2705
|
})
|
|
2704
2706
|
];
|
|
2705
|
-
},
|
|
2707
|
+
}, Wi = {
|
|
2708
|
+
type: "anonymous",
|
|
2709
|
+
id: null,
|
|
2710
|
+
tenantId: null
|
|
2711
|
+
}, Gi = class extends L.TaggedError()("TenantScopeViolation", {
|
|
2706
2712
|
table: L.String,
|
|
2707
2713
|
reason: L.String
|
|
2708
|
-
}) {},
|
|
2714
|
+
}) {}, Ki = class extends L.TaggedError()("StoreOperationFailed", {
|
|
2709
2715
|
operation: L.String,
|
|
2710
2716
|
table: L.String,
|
|
2711
2717
|
cause: L.String
|
|
2712
|
-
}) {},
|
|
2718
|
+
}) {}, qi = class extends L.TaggedError()("TableValidationFailed", {
|
|
2713
2719
|
table: L.String,
|
|
2714
2720
|
summary: L.String,
|
|
2715
2721
|
issues: L.Array(L.Struct({
|
|
2716
2722
|
path: L.String,
|
|
2717
2723
|
message: L.String
|
|
2718
2724
|
}))
|
|
2719
|
-
}) {},
|
|
2725
|
+
}) {}, Ji = class extends Ve.Tag("@voltro/EffectStore")() {}, Yi = (e, t) => (n) => n instanceof Gi ? n : new Ki({
|
|
2720
2726
|
operation: e,
|
|
2721
2727
|
table: t,
|
|
2722
2728
|
cause: String(n)
|
|
2723
|
-
}),
|
|
2729
|
+
}), Xi = (e, t, n) => M.tryPromise({
|
|
2724
2730
|
try: n,
|
|
2725
|
-
catch:
|
|
2726
|
-
}),
|
|
2727
|
-
query: ((t) =>
|
|
2728
|
-
insert: (t, n) =>
|
|
2729
|
-
update: (t, n, r) =>
|
|
2730
|
-
delete: (t, n) =>
|
|
2731
|
-
hardDelete: (t, n) =>
|
|
2732
|
-
}),
|
|
2731
|
+
catch: Yi(e, t)
|
|
2732
|
+
}), Zi = (e) => N.succeed(Ji, {
|
|
2733
|
+
query: ((t) => Xi("query", t.table, () => e.query(t))),
|
|
2734
|
+
insert: (t, n) => Xi("insert", t, () => e.insert(t, n)),
|
|
2735
|
+
update: (t, n, r) => Xi("update", t, () => e.update(t, n, r)),
|
|
2736
|
+
delete: (t, n) => Xi("delete", t, () => e.delete(t, n)),
|
|
2737
|
+
hardDelete: (t, n) => Xi("hardDelete", t, () => e.hardDelete(t, n))
|
|
2738
|
+
}), Qi = (e) => ot.make(e.name, {
|
|
2733
2739
|
payload: e.payloadSchema,
|
|
2734
|
-
success:
|
|
2740
|
+
success: ke,
|
|
2735
2741
|
error: e.errorSchema
|
|
2736
|
-
}),
|
|
2742
|
+
}), $i = (e, t) => ({
|
|
2737
2743
|
id: t,
|
|
2738
2744
|
workflowName: e,
|
|
2739
2745
|
executionId: t,
|
|
2740
2746
|
status: "running"
|
|
2741
|
-
}),
|
|
2742
|
-
let t =
|
|
2747
|
+
}), ea = $i, ta = (e) => {
|
|
2748
|
+
let t = A.failureOption(e), n = t._tag === "Some" ? t.value : A.squash(e);
|
|
2743
2749
|
return {
|
|
2744
2750
|
tag: n && typeof n == "object" && "_tag" in n ? String(n._tag) : null,
|
|
2745
2751
|
message: n?.message ?? String(n)
|
|
2746
2752
|
};
|
|
2747
|
-
},
|
|
2753
|
+
}, na = (e, t, n) => {
|
|
2748
2754
|
if (n === void 0) return {
|
|
2749
2755
|
id: t,
|
|
2750
2756
|
workflowName: e,
|
|
@@ -2759,7 +2765,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2759
2765
|
};
|
|
2760
2766
|
if (typeof n == "object" && n && n._tag === "Complete") {
|
|
2761
2767
|
let r = n.exit;
|
|
2762
|
-
return
|
|
2768
|
+
return Ge.isSuccess(r) ? {
|
|
2763
2769
|
id: t,
|
|
2764
2770
|
workflowName: e,
|
|
2765
2771
|
executionId: t,
|
|
@@ -2770,7 +2776,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2770
2776
|
workflowName: e,
|
|
2771
2777
|
executionId: t,
|
|
2772
2778
|
status: "failed",
|
|
2773
|
-
error:
|
|
2779
|
+
error: ta(r.cause)
|
|
2774
2780
|
};
|
|
2775
2781
|
}
|
|
2776
2782
|
return {
|
|
@@ -2779,17 +2785,17 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2779
2785
|
executionId: t,
|
|
2780
2786
|
status: "running"
|
|
2781
2787
|
};
|
|
2782
|
-
},
|
|
2788
|
+
}, ra = (e) => new Promise((t) => setTimeout(t, e)), ia = (e) => {
|
|
2783
2789
|
let t = new Map(e.workflows.map((e) => [e.definition.name, e.definition])), n = (e) => {
|
|
2784
2790
|
let n = t.get(e);
|
|
2785
2791
|
if (!n) throw Error(`Unknown workflow: ${e}`);
|
|
2786
2792
|
return n;
|
|
2787
2793
|
}, r = async (t, r) => {
|
|
2788
2794
|
let i = n(t);
|
|
2789
|
-
return
|
|
2790
|
-
}, i = async () => e.runEffect(
|
|
2795
|
+
return na(t, r, await e.runEffect(i.poll(r)));
|
|
2796
|
+
}, i = async () => e.runEffect(St()), a = async (t, r, i) => {
|
|
2791
2797
|
let a = n(t), o;
|
|
2792
|
-
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)),
|
|
2798
|
+
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)), $i(t, o ?? await e.runEffect(a.executionId(r)))) : $i(t, await e.runEffect(a.execute(r, { discard: !0 })));
|
|
2793
2799
|
};
|
|
2794
2800
|
return {
|
|
2795
2801
|
start: a,
|
|
@@ -2827,7 +2833,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2827
2833
|
let e = await r(i, a);
|
|
2828
2834
|
if (e.status === "succeeded" || e.status === "failed" || e.status === "cancelled") return e;
|
|
2829
2835
|
if (o?.timeoutMs !== void 0 && Date.now() - s >= o.timeoutMs) throw Error(`Timed out waiting for workflow '${i}' run '${a}'`);
|
|
2830
|
-
await
|
|
2836
|
+
await ra(c);
|
|
2831
2837
|
}
|
|
2832
2838
|
}),
|
|
2833
2839
|
cancel: async (t, r) => {
|
|
@@ -2865,22 +2871,22 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2865
2871
|
return e.retry(t, n);
|
|
2866
2872
|
}
|
|
2867
2873
|
};
|
|
2868
|
-
},
|
|
2874
|
+
}, aa = (e, t) => ({
|
|
2869
2875
|
...e,
|
|
2870
2876
|
start: async (n, r, i) => {
|
|
2871
2877
|
if (i?.wait) throw Error("ctx.workflows.start(..., { wait: true }) is not allowed inside a mutation transaction; start the workflow and wait after commit.");
|
|
2872
2878
|
let a = await e.executionId(n, r);
|
|
2873
|
-
return t(() => e.start(n, r)),
|
|
2879
|
+
return t(() => e.start(n, r)), $i(n, a);
|
|
2874
2880
|
},
|
|
2875
2881
|
child: async (n, r, i) => {
|
|
2876
2882
|
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.");
|
|
2877
2883
|
let a = await e.executionId(n, r);
|
|
2878
|
-
return t(() => e.child(n, r, i)),
|
|
2884
|
+
return t(() => e.child(n, r, i)), $i(n, a);
|
|
2879
2885
|
},
|
|
2880
2886
|
run: async () => {
|
|
2881
2887
|
throw Error("ctx.workflows.run(...) is not allowed inside a mutation transaction; use ctx.workflows.start(...) so the workflow starts after commit.");
|
|
2882
2888
|
}
|
|
2883
|
-
}),
|
|
2889
|
+
}), oa = (e, t) => ({
|
|
2884
2890
|
...e,
|
|
2885
2891
|
start: (n, r, i) => e.start(n, r, {
|
|
2886
2892
|
...i,
|
|
@@ -2894,7 +2900,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2894
2900
|
...i,
|
|
2895
2901
|
callerContext: t
|
|
2896
2902
|
})
|
|
2897
|
-
}),
|
|
2903
|
+
}), sa = (e) => {
|
|
2898
2904
|
let t = () => {
|
|
2899
2905
|
let t = e();
|
|
2900
2906
|
if (!t) throw Error("Workflow runtime is not ready yet");
|
|
@@ -2915,55 +2921,59 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
2915
2921
|
listRuns: ((e) => t().listRuns(e)),
|
|
2916
2922
|
retry: (e, n) => t().retry(e, n)
|
|
2917
2923
|
};
|
|
2918
|
-
},
|
|
2924
|
+
}, ca = (e, t) => {
|
|
2919
2925
|
let n = {};
|
|
2920
|
-
for (let r of e) n[r.definition.name] = (e) => (t ? M.promise(() => t.start(r.definition.name, e)) : r.definition.execute(e, { discard: !0 }).pipe(M.map((e) =>
|
|
2926
|
+
for (let r of e) n[r.definition.name] = (e) => (t ? M.promise(() => t.start(r.definition.name, e)) : r.definition.execute(e, { discard: !0 }).pipe(M.map((e) => $i(r.definition.name, e)))).pipe(M.withSpan(`workflow.${r.definition.name}`, { attributes: { "framework.kind": "workflow" } }));
|
|
2921
2927
|
return n;
|
|
2922
|
-
},
|
|
2928
|
+
}, la = (e, t, n) => e.map((e) => e.definition.toLayer(((r, i) => {
|
|
2923
2929
|
let a = t.resolveStartContext?.(e.definition.name, i);
|
|
2924
2930
|
return (a === void 0 ? M.succeed(void 0) : M.promise(() => Promise.resolve(a))).pipe(M.flatMap((a) => {
|
|
2925
|
-
let o =
|
|
2931
|
+
let o = {
|
|
2932
|
+
...a,
|
|
2933
|
+
subject: a?.subject ?? Wi,
|
|
2934
|
+
traceId: a?.traceId ?? "workflow-bootstrap"
|
|
2935
|
+
}, s = t.buildContext(o, {
|
|
2926
2936
|
workflowName: e.definition.name,
|
|
2927
2937
|
executionId: i,
|
|
2928
2938
|
parentExecutionId: a?.parentExecutionId ?? null,
|
|
2929
2939
|
parentClosePolicy: a?.parentClosePolicy ?? null
|
|
2930
|
-
}),
|
|
2931
|
-
return
|
|
2940
|
+
}), c = e.buildExecute(s), l = (n?.(e, c, o) ?? c)(r, i), u = s?.store;
|
|
2941
|
+
return u === void 0 ? l : M.provide(l, Zi(u));
|
|
2932
2942
|
}));
|
|
2933
|
-
}))),
|
|
2943
|
+
}))), ua = (e) => ({
|
|
2934
2944
|
_tag: "workflowEventTrigger",
|
|
2935
2945
|
...e
|
|
2936
|
-
}),
|
|
2946
|
+
}), da = ua, fa = (e) => typeof e == "object" && !!e && e._tag === "workflowEventTrigger", pa = () => {
|
|
2937
2947
|
let e = globalThis.crypto;
|
|
2938
2948
|
return typeof e?.randomUUID == "function" ? e.randomUUID() : `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`;
|
|
2939
|
-
},
|
|
2949
|
+
}, ma = (e) => `${e}_${pa()}`, ha = (e) => e.id ?? `${e.event}->${e.workflow}`, ga = T("_voltro_workflow_events", {
|
|
2940
2950
|
id: v({ prefix: "wfe" }),
|
|
2941
|
-
name:
|
|
2951
|
+
name: E(),
|
|
2942
2952
|
payload: C(),
|
|
2943
|
-
source:
|
|
2953
|
+
source: E(),
|
|
2944
2954
|
subject: C().nullable(),
|
|
2945
|
-
traceId:
|
|
2946
|
-
occurredAt:
|
|
2947
|
-
}).index(["name"]).index(["source"]).index(["occurredAt"]).reactive(),
|
|
2955
|
+
traceId: E().nullable(),
|
|
2956
|
+
occurredAt: D().default("now")
|
|
2957
|
+
}).index(["name"]).index(["source"]).index(["occurredAt"]).reactive(), _a = T("_voltro_workflow_event_deliveries", {
|
|
2948
2958
|
id: v({ prefix: "wfed" }),
|
|
2949
|
-
eventId:
|
|
2950
|
-
eventName:
|
|
2951
|
-
triggerId:
|
|
2952
|
-
workflowName:
|
|
2953
|
-
executionId:
|
|
2954
|
-
status:
|
|
2959
|
+
eventId: E(),
|
|
2960
|
+
eventName: E(),
|
|
2961
|
+
triggerId: E(),
|
|
2962
|
+
workflowName: E(),
|
|
2963
|
+
executionId: E().nullable(),
|
|
2964
|
+
status: E().oneOf([
|
|
2955
2965
|
"starting",
|
|
2956
2966
|
"started",
|
|
2957
2967
|
"skipped",
|
|
2958
2968
|
"failed"
|
|
2959
2969
|
]).default("starting"),
|
|
2960
|
-
idempotencyKey:
|
|
2970
|
+
idempotencyKey: E().unique(),
|
|
2961
2971
|
skipped: r().default(!1),
|
|
2962
|
-
errorMessage:
|
|
2963
|
-
createdAt:
|
|
2964
|
-
completedAt:
|
|
2965
|
-
}).index(["eventId"]).index(["eventName"]).index(["triggerId"]).index(["workflowName"]).index(["status"]).reactive(),
|
|
2966
|
-
let t = e.makeId ??
|
|
2972
|
+
errorMessage: E().nullable(),
|
|
2973
|
+
createdAt: D().default("now"),
|
|
2974
|
+
completedAt: D().nullable()
|
|
2975
|
+
}).index(["eventId"]).index(["eventName"]).index(["triggerId"]).index(["workflowName"]).index(["status"]).reactive(), va = (e) => {
|
|
2976
|
+
let t = e.makeId ?? ma, n = /* @__PURE__ */ new Map();
|
|
2967
2977
|
for (let t of e.triggers) {
|
|
2968
2978
|
let e = n.get(t.event);
|
|
2969
2979
|
e ? e.push(t) : n.set(t.event, [t]);
|
|
@@ -3004,7 +3014,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3004
3014
|
});
|
|
3005
3015
|
let p = o(n), m = [];
|
|
3006
3016
|
for (let o of p) {
|
|
3007
|
-
let s =
|
|
3017
|
+
let s = ha(o), l = o.workflow, d;
|
|
3008
3018
|
try {
|
|
3009
3019
|
let p = o.idempotencyKey?.(f) ?? `${c}:${s}`;
|
|
3010
3020
|
if (o.filter && !await o.filter(f)) {
|
|
@@ -3107,56 +3117,56 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3107
3117
|
triggered: m
|
|
3108
3118
|
};
|
|
3109
3119
|
} };
|
|
3110
|
-
},
|
|
3120
|
+
}, ya = k({ scope: "voltro:outbox" }), Y = "_voltro_outbox", ba = {
|
|
3111
3121
|
kind: "typeid",
|
|
3112
3122
|
prefix: "obx"
|
|
3113
|
-
},
|
|
3123
|
+
}, xa = T(Y, {
|
|
3114
3124
|
id: v({ prefix: "obx" }),
|
|
3115
|
-
effect:
|
|
3125
|
+
effect: E(),
|
|
3116
3126
|
payload: C(),
|
|
3117
|
-
status:
|
|
3127
|
+
status: E(),
|
|
3118
3128
|
attempts: b(),
|
|
3119
3129
|
maxAttempts: b(),
|
|
3120
|
-
nextAttemptAt:
|
|
3121
|
-
idempotencyKey:
|
|
3122
|
-
lastError:
|
|
3123
|
-
subjectId:
|
|
3124
|
-
tenantId:
|
|
3125
|
-
traceId:
|
|
3126
|
-
createdAt:
|
|
3127
|
-
deliveredAt:
|
|
3128
|
-
resendRequestedBy:
|
|
3129
|
-
resendReason:
|
|
3130
|
+
nextAttemptAt: D(),
|
|
3131
|
+
idempotencyKey: E().nullable(),
|
|
3132
|
+
lastError: E().nullable(),
|
|
3133
|
+
subjectId: E().nullable(),
|
|
3134
|
+
tenantId: E().nullable(),
|
|
3135
|
+
traceId: E().nullable(),
|
|
3136
|
+
createdAt: D(),
|
|
3137
|
+
deliveredAt: D().nullable(),
|
|
3138
|
+
resendRequestedBy: E().nullable(),
|
|
3139
|
+
resendReason: E().nullable(),
|
|
3130
3140
|
resendCount: b()
|
|
3131
|
-
}),
|
|
3141
|
+
}), Sa = "_voltro_outbox_attempts", Ca = {
|
|
3132
3142
|
kind: "typeid",
|
|
3133
3143
|
prefix: "obxa"
|
|
3134
|
-
},
|
|
3144
|
+
}, wa = T(Sa, {
|
|
3135
3145
|
id: v({ prefix: "obxa" }),
|
|
3136
|
-
outboxId:
|
|
3137
|
-
effect:
|
|
3146
|
+
outboxId: E(),
|
|
3147
|
+
effect: E(),
|
|
3138
3148
|
attempt: b(),
|
|
3139
|
-
trigger:
|
|
3140
|
-
triggeredBy:
|
|
3141
|
-
reason:
|
|
3142
|
-
outcome:
|
|
3149
|
+
trigger: E().oneOf(["automatic", "manual"]),
|
|
3150
|
+
triggeredBy: E().nullable(),
|
|
3151
|
+
reason: E().nullable(),
|
|
3152
|
+
outcome: E().oneOf([
|
|
3143
3153
|
"delivered",
|
|
3144
3154
|
"failed",
|
|
3145
3155
|
"dead"
|
|
3146
3156
|
]),
|
|
3147
|
-
startedAt:
|
|
3148
|
-
finishedAt:
|
|
3157
|
+
startedAt: D(),
|
|
3158
|
+
finishedAt: D(),
|
|
3149
3159
|
durationMs: b(),
|
|
3150
|
-
error:
|
|
3160
|
+
error: E().nullable(),
|
|
3151
3161
|
response: C().nullable(),
|
|
3152
|
-
subjectId:
|
|
3153
|
-
tenantId:
|
|
3154
|
-
traceId:
|
|
3155
|
-
}).index(["outboxId", "attempt"]).index(["startedAt"]).index(["outcome"]),
|
|
3162
|
+
subjectId: E().nullable(),
|
|
3163
|
+
tenantId: E().nullable(),
|
|
3164
|
+
traceId: E().nullable()
|
|
3165
|
+
}).index(["outboxId", "attempt"]).index(["startedAt"]).index(["outcome"]), Ta = (e) => {
|
|
3156
3166
|
if (e.effect.trim() === "") throw Error("defineOutboxHandler: `effect` must be a non-empty name");
|
|
3157
3167
|
if (e.maxAttempts !== void 0 && e.maxAttempts < 1) throw Error(`defineOutboxHandler("${e.effect}"): maxAttempts must be >= 1`);
|
|
3158
3168
|
return e;
|
|
3159
|
-
},
|
|
3169
|
+
}, Ea = 8, Da = (e) => ({
|
|
3160
3170
|
enqueue: async (n, r, i) => {
|
|
3161
3171
|
let a = (e.now ?? (() => /* @__PURE__ */ new Date()))(), o = i?.idempotencyKey;
|
|
3162
3172
|
if (o !== void 0) {
|
|
@@ -3171,12 +3181,12 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3171
3181
|
if (n !== void 0) return n.id;
|
|
3172
3182
|
}
|
|
3173
3183
|
let s = {
|
|
3174
|
-
id: f(
|
|
3184
|
+
id: f(ba, Y),
|
|
3175
3185
|
effect: n,
|
|
3176
3186
|
payload: r,
|
|
3177
3187
|
status: "pending",
|
|
3178
3188
|
attempts: 0,
|
|
3179
|
-
maxAttempts: i?.maxAttempts ??
|
|
3189
|
+
maxAttempts: i?.maxAttempts ?? Ea,
|
|
3180
3190
|
nextAttemptAt: new Date(a.getTime() + (i?.delayMs ?? 0)),
|
|
3181
3191
|
idempotencyKey: o ?? null,
|
|
3182
3192
|
lastError: null,
|
|
@@ -3223,7 +3233,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3223
3233
|
});
|
|
3224
3234
|
} else e.nudge?.();
|
|
3225
3235
|
}
|
|
3226
|
-
}),
|
|
3236
|
+
}), Oa = (e) => Math.min(1e3 * 2 ** Math.max(0, e - 1), 5 * 6e4), ka = 50, Aa = (e, t) => e.length <= t ? e : `${e.slice(0, t)}… [clipped]`, ja = (e) => {
|
|
3227
3237
|
if (e == null) return null;
|
|
3228
3238
|
let t = typeof e == "object" && !Array.isArray(e) ? e : { value: e }, n;
|
|
3229
3239
|
try {
|
|
@@ -3233,13 +3243,13 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3233
3243
|
}
|
|
3234
3244
|
return n.length > 8192 ? {
|
|
3235
3245
|
truncated: !0,
|
|
3236
|
-
preview:
|
|
3246
|
+
preview: Aa(n, 8192)
|
|
3237
3247
|
} : t;
|
|
3238
|
-
},
|
|
3248
|
+
}, Ma = async (e, t, n) => {
|
|
3239
3249
|
let r = t.outboxRow, i = r.id, a = r.resendRequestedBy ?? null;
|
|
3240
3250
|
try {
|
|
3241
|
-
await e.insert(
|
|
3242
|
-
id: f(
|
|
3251
|
+
await e.insert(Sa, {
|
|
3252
|
+
id: f(Ca, Sa),
|
|
3243
3253
|
outboxId: i,
|
|
3244
3254
|
effect: r.effect,
|
|
3245
3255
|
attempt: t.attempt,
|
|
@@ -3250,14 +3260,14 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3250
3260
|
startedAt: t.startedAt,
|
|
3251
3261
|
finishedAt: t.finishedAt,
|
|
3252
3262
|
durationMs: Math.max(0, t.finishedAt.getTime() - t.startedAt.getTime()),
|
|
3253
|
-
error: t.error === null ? null :
|
|
3254
|
-
response:
|
|
3263
|
+
error: t.error === null ? null : Aa(t.error, 4e3),
|
|
3264
|
+
response: ja(t.response),
|
|
3255
3265
|
subjectId: r.subjectId ?? null,
|
|
3256
3266
|
tenantId: r.tenantId ?? null,
|
|
3257
3267
|
traceId: r.traceId ?? null
|
|
3258
3268
|
});
|
|
3259
3269
|
} catch (e) {
|
|
3260
|
-
|
|
3270
|
+
ya.warn("outbox: could not record delivery attempt (delivery itself is unaffected)", {
|
|
3261
3271
|
outboxId: i,
|
|
3262
3272
|
attempt: t.attempt
|
|
3263
3273
|
}, e);
|
|
@@ -3265,7 +3275,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3265
3275
|
}
|
|
3266
3276
|
if (!(t.attempt <= n)) try {
|
|
3267
3277
|
let t = await e.query({
|
|
3268
|
-
table:
|
|
3278
|
+
table: Sa,
|
|
3269
3279
|
predicate: u("outboxId", i),
|
|
3270
3280
|
order: [{
|
|
3271
3281
|
column: "attempt",
|
|
@@ -3275,14 +3285,14 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3275
3285
|
skip: void 0,
|
|
3276
3286
|
projection: ["id"]
|
|
3277
3287
|
});
|
|
3278
|
-
for (let r of t.slice(0, Math.max(0, t.length - n))) await e.delete(
|
|
3288
|
+
for (let r of t.slice(0, Math.max(0, t.length - n))) await e.delete(Sa, r.id);
|
|
3279
3289
|
} catch (e) {
|
|
3280
|
-
|
|
3290
|
+
ya.warn("outbox: attempt-log trim failed; the log may exceed its cap", { outboxId: i }, e);
|
|
3281
3291
|
}
|
|
3282
|
-
},
|
|
3292
|
+
}, Na = async (e) => {
|
|
3283
3293
|
let n = (e.now ?? (() => /* @__PURE__ */ new Date()))(), r = await e.store.query({
|
|
3284
3294
|
table: Y,
|
|
3285
|
-
predicate: t(u("status", "pending"),
|
|
3295
|
+
predicate: t(u("status", "pending"), ne("nextAttemptAt", n)),
|
|
3286
3296
|
order: [{
|
|
3287
3297
|
column: "nextAttemptAt",
|
|
3288
3298
|
direction: "asc"
|
|
@@ -3297,7 +3307,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3297
3307
|
s++;
|
|
3298
3308
|
continue;
|
|
3299
3309
|
}
|
|
3300
|
-
let u = t.attempts + 1, d = t.maxAttempts ??
|
|
3310
|
+
let u = t.attempts + 1, d = t.maxAttempts ?? Ea, f = /* @__PURE__ */ new Date(), p = e.attemptLogCap ?? 50;
|
|
3301
3311
|
try {
|
|
3302
3312
|
let n = await l.handler({
|
|
3303
3313
|
payload: t.payload ?? {},
|
|
@@ -3306,7 +3316,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3306
3316
|
tenantId: t.tenantId ?? null,
|
|
3307
3317
|
traceId: t.traceId ?? null
|
|
3308
3318
|
});
|
|
3309
|
-
await
|
|
3319
|
+
await Ma(e.store, {
|
|
3310
3320
|
outboxRow: t,
|
|
3311
3321
|
attempt: u,
|
|
3312
3322
|
outcome: "delivered",
|
|
@@ -3324,7 +3334,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3324
3334
|
}), i++;
|
|
3325
3335
|
} catch (i) {
|
|
3326
3336
|
let s = i instanceof Error ? i.message : String(i), l = u >= d;
|
|
3327
|
-
await
|
|
3337
|
+
await Ma(e.store, {
|
|
3328
3338
|
outboxRow: t,
|
|
3329
3339
|
attempt: u,
|
|
3330
3340
|
outcome: l ? "dead" : "failed",
|
|
@@ -3336,20 +3346,20 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3336
3346
|
status: l ? "dead" : "pending",
|
|
3337
3347
|
attempts: u,
|
|
3338
3348
|
lastError: s,
|
|
3339
|
-
nextAttemptAt: new Date(n.getTime() +
|
|
3349
|
+
nextAttemptAt: new Date(n.getTime() + Oa(u)),
|
|
3340
3350
|
resendRequestedBy: null,
|
|
3341
3351
|
resendReason: null
|
|
3342
|
-
}), l ? (o++,
|
|
3352
|
+
}), l ? (o++, ya.error("outbox effect dead-lettered after exhausting attempts", {
|
|
3343
3353
|
id: r,
|
|
3344
3354
|
effect: c,
|
|
3345
3355
|
attempts: u,
|
|
3346
3356
|
maxAttempts: d
|
|
3347
|
-
}, i)) : (a++,
|
|
3357
|
+
}, i)) : (a++, ya.warn("outbox delivery failed; will retry", {
|
|
3348
3358
|
id: r,
|
|
3349
3359
|
effect: c,
|
|
3350
3360
|
attempt: u,
|
|
3351
3361
|
maxAttempts: d,
|
|
3352
|
-
retryInMs:
|
|
3362
|
+
retryInMs: Oa(u)
|
|
3353
3363
|
}));
|
|
3354
3364
|
}
|
|
3355
3365
|
}
|
|
@@ -3359,47 +3369,47 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3359
3369
|
dead: o,
|
|
3360
3370
|
skipped: s
|
|
3361
3371
|
};
|
|
3362
|
-
},
|
|
3372
|
+
}, Pa = k({ scope: "voltro:connections" }), X = "_voltro_connections", Fa = {
|
|
3363
3373
|
kind: "typeid",
|
|
3364
3374
|
prefix: "conn"
|
|
3365
|
-
},
|
|
3375
|
+
}, Ia = T(X, {
|
|
3366
3376
|
id: v({ prefix: "conn" }),
|
|
3367
|
-
connectionId:
|
|
3368
|
-
subjectId:
|
|
3369
|
-
tenantId:
|
|
3370
|
-
kind:
|
|
3371
|
-
status:
|
|
3377
|
+
connectionId: E(),
|
|
3378
|
+
subjectId: E(),
|
|
3379
|
+
tenantId: E().nullable(),
|
|
3380
|
+
kind: E().oneOf(["oauth2", "pat"]),
|
|
3381
|
+
status: E().oneOf([
|
|
3372
3382
|
"connected",
|
|
3373
3383
|
"expired",
|
|
3374
3384
|
"revoked",
|
|
3375
3385
|
"error"
|
|
3376
3386
|
]),
|
|
3377
|
-
accessToken:
|
|
3378
|
-
refreshToken:
|
|
3379
|
-
expiresAt:
|
|
3380
|
-
scopes:
|
|
3381
|
-
accountId:
|
|
3382
|
-
accountLabel:
|
|
3383
|
-
lastError:
|
|
3384
|
-
refreshLockedUntil:
|
|
3387
|
+
accessToken: E(),
|
|
3388
|
+
refreshToken: E().nullable(),
|
|
3389
|
+
expiresAt: D().nullable(),
|
|
3390
|
+
scopes: E().nullable(),
|
|
3391
|
+
accountId: E().nullable(),
|
|
3392
|
+
accountLabel: E().nullable(),
|
|
3393
|
+
lastError: E().nullable(),
|
|
3394
|
+
refreshLockedUntil: D(),
|
|
3385
3395
|
metadata: C().nullable(),
|
|
3386
|
-
connectedAt:
|
|
3387
|
-
updatedAt:
|
|
3388
|
-
}).unique("bySubject", ["connectionId", "subjectId"]).index(["subjectId"]).reactive(),
|
|
3396
|
+
connectedAt: D(),
|
|
3397
|
+
updatedAt: D()
|
|
3398
|
+
}).unique("bySubject", ["connectionId", "subjectId"]).index(["subjectId"]).reactive(), La = "_voltro_connection_grants", Ra = {
|
|
3389
3399
|
kind: "typeid",
|
|
3390
3400
|
prefix: "cgrant"
|
|
3391
|
-
},
|
|
3401
|
+
}, za = T(La, {
|
|
3392
3402
|
id: v({ prefix: "cgrant" }),
|
|
3393
|
-
state:
|
|
3394
|
-
connectionId:
|
|
3395
|
-
subjectId:
|
|
3396
|
-
tenantId:
|
|
3397
|
-
codeVerifier:
|
|
3398
|
-
redirectTo:
|
|
3399
|
-
createdAt:
|
|
3400
|
-
expiresAt:
|
|
3401
|
-
}).index(["expiresAt"]),
|
|
3402
|
-
if (!
|
|
3403
|
+
state: E().unique(),
|
|
3404
|
+
connectionId: E(),
|
|
3405
|
+
subjectId: E(),
|
|
3406
|
+
tenantId: E().nullable(),
|
|
3407
|
+
codeVerifier: E().nullable(),
|
|
3408
|
+
redirectTo: E(),
|
|
3409
|
+
createdAt: D(),
|
|
3410
|
+
expiresAt: D()
|
|
3411
|
+
}).index(["expiresAt"]), Ba = /^[a-z][a-z0-9-]*$/, Va = (e) => {
|
|
3412
|
+
if (!Ba.test(e.id)) throw Error(`defineConnection: id "${e.id}" must be lowercase kebab-case (it becomes a URL path segment).`);
|
|
3403
3413
|
if (e.kind === "oauth2") {
|
|
3404
3414
|
for (let t of [
|
|
3405
3415
|
"authorizeUrl",
|
|
@@ -3409,9 +3419,9 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3409
3419
|
]) if (typeof e[t] != "string" || e[t].length === 0) throw Error(`defineConnection("${e.id}"): \`${t}\` is required for kind 'oauth2'.`);
|
|
3410
3420
|
}
|
|
3411
3421
|
return e;
|
|
3412
|
-
},
|
|
3413
|
-
if (e.length !== 0 &&
|
|
3414
|
-
},
|
|
3422
|
+
}, Ha = (e) => e.label ?? e.id, Ua = (e) => {
|
|
3423
|
+
if (e.length !== 0 && gi() === void 0) throw Error(`connections: ${e.length} connection(s) declared (${e.map((e) => e.id).join(", ")}) but no field cipher is registered. Connection tokens are stored encrypted and there is no plaintext fallback. Enable \`@voltro/plugin-governance\` with \`governancePlugin({ fieldEncryption: { key: env.FIELD_ENCRYPTION_KEY } })\` (or call setFieldCipher at boot).`);
|
|
3424
|
+
}, Wa = (e) => {
|
|
3415
3425
|
let t = /* @__PURE__ */ new Map();
|
|
3416
3426
|
for (let n of e) {
|
|
3417
3427
|
if (t.has(n.id)) throw Error(`connections: duplicate connection id "${n.id}" — each *.connection.ts must declare a distinct id.`);
|
|
@@ -3421,14 +3431,14 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3421
3431
|
get: (e) => t.get(e),
|
|
3422
3432
|
list: () => [...t.values()]
|
|
3423
3433
|
};
|
|
3424
|
-
},
|
|
3434
|
+
}, Ga = (e) => {
|
|
3425
3435
|
if (e == null) return null;
|
|
3426
3436
|
let t = e instanceof Date ? e : new Date(String(e));
|
|
3427
3437
|
return Number.isNaN(t.getTime()) ? null : t;
|
|
3428
|
-
},
|
|
3438
|
+
}, Ka = (e) => Ga(e)?.toISOString() ?? null, qa = (e) => String(e ?? "").split(" ").filter((e) => e.length > 0), Ja = (e, t) => t === void 0 ? {
|
|
3429
3439
|
connectionId: e.id,
|
|
3430
3440
|
kind: e.kind,
|
|
3431
|
-
label:
|
|
3441
|
+
label: Ha(e),
|
|
3432
3442
|
status: "disconnected",
|
|
3433
3443
|
accountId: null,
|
|
3434
3444
|
accountLabel: null,
|
|
@@ -3439,24 +3449,24 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3439
3449
|
} : {
|
|
3440
3450
|
connectionId: e.id,
|
|
3441
3451
|
kind: e.kind,
|
|
3442
|
-
label:
|
|
3452
|
+
label: Ha(e),
|
|
3443
3453
|
status: String(t.status ?? "connected"),
|
|
3444
3454
|
accountId: t.accountId ?? null,
|
|
3445
3455
|
accountLabel: t.accountLabel ?? null,
|
|
3446
|
-
scopes:
|
|
3447
|
-
expiresAt:
|
|
3456
|
+
scopes: qa(t.scopes),
|
|
3457
|
+
expiresAt: Ka(t.expiresAt),
|
|
3448
3458
|
lastError: t.lastError ?? null,
|
|
3449
|
-
connectedAt:
|
|
3450
|
-
},
|
|
3459
|
+
connectedAt: Ka(t.connectedAt)
|
|
3460
|
+
}, Ya = async (e, n, r) => (await e.query({
|
|
3451
3461
|
table: X,
|
|
3452
3462
|
predicate: t(u("connectionId", n), u("subjectId", r)),
|
|
3453
3463
|
order: [],
|
|
3454
3464
|
take: 1,
|
|
3455
3465
|
skip: void 0,
|
|
3456
3466
|
projection: void 0
|
|
3457
|
-
}))[0],
|
|
3467
|
+
}))[0], Xa = async (e) => {
|
|
3458
3468
|
let t = (e.now ?? (() => /* @__PURE__ */ new Date()))(), n = e.tokens.expiresAt === void 0 ? null : new Date(e.tokens.expiresAt), r = {
|
|
3459
|
-
id: f(
|
|
3469
|
+
id: f(Fa, X),
|
|
3460
3470
|
connectionId: e.definition.id,
|
|
3461
3471
|
subjectId: e.subjectId,
|
|
3462
3472
|
tenantId: e.tenantId,
|
|
@@ -3474,8 +3484,8 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3474
3484
|
connectedAt: t,
|
|
3475
3485
|
updatedAt: t
|
|
3476
3486
|
};
|
|
3477
|
-
return
|
|
3478
|
-
},
|
|
3487
|
+
return Za(e.store, r);
|
|
3488
|
+
}, Za = (e, t) => e.upsert(X, t, {
|
|
3479
3489
|
conflictColumns: ["connectionId", "subjectId"],
|
|
3480
3490
|
update: [
|
|
3481
3491
|
"kind",
|
|
@@ -3491,10 +3501,10 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3491
3501
|
"metadata",
|
|
3492
3502
|
"updatedAt"
|
|
3493
3503
|
]
|
|
3494
|
-
}),
|
|
3495
|
-
let r = await
|
|
3504
|
+
}), Qa = async (e, t, n) => {
|
|
3505
|
+
let r = await Ya(e, t, n);
|
|
3496
3506
|
return r !== void 0 && e.delete(X, r.id);
|
|
3497
|
-
},
|
|
3507
|
+
}, $a = async (e, t, n) => {
|
|
3498
3508
|
let r = await e.query({
|
|
3499
3509
|
table: X,
|
|
3500
3510
|
predicate: u("subjectId", n),
|
|
@@ -3503,9 +3513,9 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3503
3513
|
skip: void 0,
|
|
3504
3514
|
projection: void 0
|
|
3505
3515
|
}), i = new Map(r.map((e) => [String(e.connectionId), e]));
|
|
3506
|
-
return t.list().map((e) =>
|
|
3507
|
-
},
|
|
3508
|
-
let r = e.fetchImpl ??
|
|
3516
|
+
return t.list().map((e) => Ja(e, i.get(e.id)));
|
|
3517
|
+
}, eo = (e, t) => globalThis.fetch(e, t), to = async (e, t, n) => {
|
|
3518
|
+
let r = e.fetchImpl ?? eo, i, a;
|
|
3509
3519
|
try {
|
|
3510
3520
|
let n = await r(e.tokenUrl, {
|
|
3511
3521
|
method: "POST",
|
|
@@ -3517,7 +3527,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3517
3527
|
});
|
|
3518
3528
|
i = n.status, a = await n.text();
|
|
3519
3529
|
} catch (t) {
|
|
3520
|
-
throw new
|
|
3530
|
+
throw new O({
|
|
3521
3531
|
connectionId: e.id,
|
|
3522
3532
|
reason: `token endpoint unreachable: ${String(t)}`,
|
|
3523
3533
|
transient: !0
|
|
@@ -3529,12 +3539,12 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3529
3539
|
} catch {
|
|
3530
3540
|
o = {};
|
|
3531
3541
|
}
|
|
3532
|
-
if (i < 200 || i >= 300) throw new
|
|
3542
|
+
if (i < 200 || i >= 300) throw new O({
|
|
3533
3543
|
connectionId: e.id,
|
|
3534
3544
|
reason: `token endpoint ${i}: ${o.error ?? ""} ${o.error_description ?? a.slice(0, 200)}`.trim(),
|
|
3535
3545
|
transient: i >= 500
|
|
3536
3546
|
});
|
|
3537
|
-
if (typeof o.access_token != "string" || o.access_token.length === 0) throw new
|
|
3547
|
+
if (typeof o.access_token != "string" || o.access_token.length === 0) throw new O({
|
|
3538
3548
|
connectionId: e.id,
|
|
3539
3549
|
reason: "token response carried no access_token",
|
|
3540
3550
|
transient: !1
|
|
@@ -3545,64 +3555,64 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3545
3555
|
...Number.isFinite(o.expires_in) ? { expiresAt: n() + o.expires_in * 1e3 } : {},
|
|
3546
3556
|
scopes: (o.scope ?? e.scopes?.join(" ") ?? "").split(" ").filter(Boolean)
|
|
3547
3557
|
};
|
|
3548
|
-
},
|
|
3558
|
+
}, no = (e, t, n = Date.now) => to(e, {
|
|
3549
3559
|
grant_type: "authorization_code",
|
|
3550
3560
|
client_id: e.clientId,
|
|
3551
3561
|
client_secret: e.clientSecret,
|
|
3552
3562
|
code: t.code,
|
|
3553
3563
|
redirect_uri: t.redirectUri,
|
|
3554
3564
|
...t.codeVerifier ? { code_verifier: t.codeVerifier } : {}
|
|
3555
|
-
}, n),
|
|
3565
|
+
}, n), ro = (e, t, n = Date.now) => to(e, {
|
|
3556
3566
|
grant_type: "refresh_token",
|
|
3557
3567
|
client_id: e.clientId,
|
|
3558
3568
|
client_secret: e.clientSecret,
|
|
3559
3569
|
refresh_token: t
|
|
3560
|
-
}, n),
|
|
3570
|
+
}, n), io = 6e4, ao = 3e4, oo = class extends Error {
|
|
3561
3571
|
connectionId;
|
|
3562
3572
|
subjectId;
|
|
3563
3573
|
_tag = "ConnectionNotConnected";
|
|
3564
3574
|
constructor(e, t) {
|
|
3565
3575
|
super(`connection "${e}" is not connected for this subject`), this.connectionId = e, this.subjectId = t, this.name = "ConnectionNotConnected";
|
|
3566
3576
|
}
|
|
3567
|
-
},
|
|
3577
|
+
}, so = (e) => new Promise((t) => {
|
|
3568
3578
|
setTimeout(t, e);
|
|
3569
|
-
}),
|
|
3570
|
-
|
|
3571
|
-
},
|
|
3579
|
+
}), co = /* @__PURE__ */ new Map(), lo = (e, t) => `${e}${t}`, uo = () => {
|
|
3580
|
+
co.clear();
|
|
3581
|
+
}, fo = (e, t) => ({
|
|
3572
3582
|
connectionId: e.id,
|
|
3573
3583
|
kind: e.kind,
|
|
3574
|
-
accessToken:
|
|
3575
|
-
expiresAt:
|
|
3576
|
-
scopes:
|
|
3584
|
+
accessToken: vi(String(t.accessToken)),
|
|
3585
|
+
expiresAt: Ga(t.expiresAt),
|
|
3586
|
+
scopes: qa(t.scopes),
|
|
3577
3587
|
accountId: t.accountId ?? null,
|
|
3578
3588
|
accountLabel: t.accountLabel ?? null
|
|
3579
|
-
}),
|
|
3580
|
-
let r =
|
|
3589
|
+
}), po = (e, t, n) => {
|
|
3590
|
+
let r = Ga(e.expiresAt);
|
|
3581
3591
|
return r !== null && r.getTime() - n < t;
|
|
3582
|
-
},
|
|
3583
|
-
let t = e.now ?? Date.now, { store: n, definition: r, subjectId: i } = e, a = await
|
|
3584
|
-
if (a === void 0) throw new
|
|
3585
|
-
if (r.kind === "pat" || !
|
|
3586
|
-
let o =
|
|
3592
|
+
}, mo = async (e) => {
|
|
3593
|
+
let t = e.now ?? Date.now, { store: n, definition: r, subjectId: i } = e, a = await Ya(n, r.id, i);
|
|
3594
|
+
if (a === void 0) throw new oo(r.id, i);
|
|
3595
|
+
if (r.kind === "pat" || !po(a, r.refreshSkewMs ?? 6e4, t())) return fo(r, a);
|
|
3596
|
+
let o = lo(r.id, i), s = co.get(o);
|
|
3587
3597
|
if (s !== void 0) return s;
|
|
3588
|
-
let c =
|
|
3598
|
+
let c = ho({
|
|
3589
3599
|
...e,
|
|
3590
3600
|
now: t,
|
|
3591
3601
|
row: a
|
|
3592
3602
|
}).finally(() => {
|
|
3593
|
-
|
|
3603
|
+
co.delete(o);
|
|
3594
3604
|
});
|
|
3595
|
-
return
|
|
3596
|
-
},
|
|
3597
|
-
let { store: n, subjectId: r, now: i } = e, a = e.definition, o = e.sleep ??
|
|
3598
|
-
if (await n.updateMany("_voltro_connections", { refreshLockedUntil: new Date(i() + 3e4) }, { where: t(u("id", c),
|
|
3605
|
+
return co.set(o, c), c;
|
|
3606
|
+
}, ho = async (e) => {
|
|
3607
|
+
let { store: n, subjectId: r, now: i } = e, a = e.definition, o = e.sleep ?? so, s = a.refreshSkewMs ?? 6e4, c = e.row.id;
|
|
3608
|
+
if (await n.updateMany("_voltro_connections", { refreshLockedUntil: new Date(i() + 3e4) }, { where: t(u("id", c), ne("refreshLockedUntil", new Date(i()))) }) === 0) {
|
|
3599
3609
|
for (let e = 0; e < 10; e++) {
|
|
3600
3610
|
await o(200);
|
|
3601
|
-
let e = await
|
|
3602
|
-
if (e === void 0) throw new
|
|
3603
|
-
if (!
|
|
3611
|
+
let e = await Ya(n, a.id, r);
|
|
3612
|
+
if (e === void 0) throw new oo(a.id, r);
|
|
3613
|
+
if (!po(e, s, i())) return fo(a, e);
|
|
3604
3614
|
}
|
|
3605
|
-
throw new
|
|
3615
|
+
throw new O({
|
|
3606
3616
|
connectionId: a.id,
|
|
3607
3617
|
reason: "another replica held the refresh lease and did not publish a fresh token in time",
|
|
3608
3618
|
transient: !0
|
|
@@ -3614,16 +3624,16 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3614
3624
|
lastError: "access token expired and no refresh token is on file — reconnect required",
|
|
3615
3625
|
refreshLockedUntil: /* @__PURE__ */ new Date(0),
|
|
3616
3626
|
updatedAt: new Date(i())
|
|
3617
|
-
}), new
|
|
3627
|
+
}), new O({
|
|
3618
3628
|
connectionId: a.id,
|
|
3619
3629
|
reason: "access token expired and no refresh token is on file — reconnect required",
|
|
3620
3630
|
transient: !1
|
|
3621
3631
|
});
|
|
3622
3632
|
let d;
|
|
3623
3633
|
try {
|
|
3624
|
-
d = await
|
|
3634
|
+
d = await ro(a, vi(String(l)), i);
|
|
3625
3635
|
} catch (e) {
|
|
3626
|
-
let t = e instanceof
|
|
3636
|
+
let t = e instanceof O ? e : new O({
|
|
3627
3637
|
connectionId: a.id,
|
|
3628
3638
|
reason: String(e),
|
|
3629
3639
|
transient: !0
|
|
@@ -3638,7 +3648,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3638
3648
|
refreshToken: null,
|
|
3639
3649
|
expiresAt: null
|
|
3640
3650
|
}
|
|
3641
|
-
}),
|
|
3651
|
+
}), Pa.warn("connection refresh failed", {
|
|
3642
3652
|
connectionId: a.id,
|
|
3643
3653
|
transient: t.transient,
|
|
3644
3654
|
reason: t.reason
|
|
@@ -3654,32 +3664,32 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3654
3664
|
refreshLockedUntil: /* @__PURE__ */ new Date(0),
|
|
3655
3665
|
updatedAt: new Date(i())
|
|
3656
3666
|
};
|
|
3657
|
-
return
|
|
3667
|
+
return fo(a, await n.update(X, c, f) ?? {
|
|
3658
3668
|
...e.row,
|
|
3659
3669
|
...f
|
|
3660
3670
|
});
|
|
3661
|
-
},
|
|
3671
|
+
}, go = (e = 32) => {
|
|
3662
3672
|
let t = new Uint8Array(e);
|
|
3663
3673
|
return globalThis.crypto.getRandomValues(t), Array.from(t, (e) => e.toString(16).padStart(2, "0")).join("");
|
|
3664
|
-
},
|
|
3674
|
+
}, _o = (e) => {
|
|
3665
3675
|
let t = "";
|
|
3666
3676
|
for (let n of e) t += String.fromCharCode(n);
|
|
3667
3677
|
return btoa(t).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
3668
|
-
},
|
|
3678
|
+
}, vo = async (e) => {
|
|
3669
3679
|
let t = await globalThis.crypto.subtle.digest("SHA-256", new TextEncoder().encode(e));
|
|
3670
|
-
return
|
|
3671
|
-
},
|
|
3672
|
-
let t = (e.now ?? (() => /* @__PURE__ */ new Date()))(), { definition: n } = e, r =
|
|
3673
|
-
await e.store.insert(
|
|
3674
|
-
id: f(
|
|
3680
|
+
return _o(new Uint8Array(t));
|
|
3681
|
+
}, yo = 10 * 6e4, bo = (e) => `/_voltro/connections/${e}/callback`, xo = (e) => e === void 0 || e.length === 0 || !e.startsWith("/") || e.startsWith("//") || e.startsWith("/\\") ? "/" : e, So = (e, t) => e.redirectUri ?? `${t.replace(/\/+$/, "")}${bo(e.id)}`, Co = async (e) => {
|
|
3682
|
+
let t = (e.now ?? (() => /* @__PURE__ */ new Date()))(), { definition: n } = e, r = go(), i = n.pkce === !1 ? null : go(48), a = So(n, e.publicUrl);
|
|
3683
|
+
await e.store.insert(La, {
|
|
3684
|
+
id: f(Ra, La),
|
|
3675
3685
|
state: r,
|
|
3676
3686
|
connectionId: n.id,
|
|
3677
3687
|
subjectId: e.subjectId,
|
|
3678
3688
|
tenantId: e.tenantId,
|
|
3679
3689
|
codeVerifier: i === null ? null : q(i),
|
|
3680
|
-
redirectTo:
|
|
3690
|
+
redirectTo: xo(e.redirectTo),
|
|
3681
3691
|
createdAt: t,
|
|
3682
|
-
expiresAt: new Date(t.getTime() +
|
|
3692
|
+
expiresAt: new Date(t.getTime() + yo)
|
|
3683
3693
|
});
|
|
3684
3694
|
let o = new URLSearchParams({
|
|
3685
3695
|
response_type: "code",
|
|
@@ -3689,50 +3699,50 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3689
3699
|
...n.scopes && n.scopes.length > 0 ? { scope: n.scopes.join(" ") } : {},
|
|
3690
3700
|
...n.authorizeParams ?? {}
|
|
3691
3701
|
});
|
|
3692
|
-
i !== null && (o.set("code_challenge", await
|
|
3702
|
+
i !== null && (o.set("code_challenge", await vo(i)), o.set("code_challenge_method", "S256"));
|
|
3693
3703
|
let s = n.authorizeUrl.includes("?") ? "&" : "?";
|
|
3694
3704
|
return {
|
|
3695
3705
|
authorizeUrl: `${n.authorizeUrl}${s}${o.toString()}`,
|
|
3696
3706
|
state: r
|
|
3697
3707
|
};
|
|
3698
|
-
},
|
|
3708
|
+
}, wo = async (e) => {
|
|
3699
3709
|
let t = (e.now ?? (() => /* @__PURE__ */ new Date()))(), n = (await e.store.query({
|
|
3700
|
-
table:
|
|
3710
|
+
table: La,
|
|
3701
3711
|
predicate: u("state", e.state),
|
|
3702
3712
|
order: [],
|
|
3703
3713
|
take: 1,
|
|
3704
3714
|
skip: void 0,
|
|
3705
3715
|
projection: void 0
|
|
3706
3716
|
}))[0];
|
|
3707
|
-
if (n === void 0) throw new
|
|
3717
|
+
if (n === void 0) throw new O({
|
|
3708
3718
|
connectionId: "unknown",
|
|
3709
3719
|
reason: "unknown or already-used handshake state",
|
|
3710
3720
|
transient: !1
|
|
3711
3721
|
});
|
|
3712
|
-
await e.store.delete(
|
|
3713
|
-
let r = String(n.connectionId), i =
|
|
3714
|
-
if (i !== null && i.getTime() < t.getTime()) throw new
|
|
3722
|
+
await e.store.delete(La, n.id);
|
|
3723
|
+
let r = String(n.connectionId), i = Ga(n.expiresAt);
|
|
3724
|
+
if (i !== null && i.getTime() < t.getTime()) throw new O({
|
|
3715
3725
|
connectionId: r,
|
|
3716
3726
|
reason: "handshake expired — start again",
|
|
3717
3727
|
transient: !1
|
|
3718
3728
|
});
|
|
3719
3729
|
let a = e.registry.get(r);
|
|
3720
|
-
if (a === void 0 || a.kind !== "oauth2") throw new
|
|
3730
|
+
if (a === void 0 || a.kind !== "oauth2") throw new O({
|
|
3721
3731
|
connectionId: r,
|
|
3722
3732
|
reason: "no oauth2 connection is declared under that id",
|
|
3723
3733
|
transient: !1
|
|
3724
3734
|
});
|
|
3725
|
-
let o = n.codeVerifier === null || n.codeVerifier === void 0 ? null :
|
|
3735
|
+
let o = n.codeVerifier === null || n.codeVerifier === void 0 ? null : vi(String(n.codeVerifier)), s = await no(a, {
|
|
3726
3736
|
code: e.code,
|
|
3727
|
-
redirectUri:
|
|
3737
|
+
redirectUri: So(a, e.publicUrl),
|
|
3728
3738
|
codeVerifier: o
|
|
3729
3739
|
}, () => t.getTime()), c = a.identify === void 0 ? void 0 : await a.identify(s).catch((e) => {
|
|
3730
|
-
|
|
3740
|
+
Pa.warn("connection identify failed; storing without account details", {
|
|
3731
3741
|
connectionId: r,
|
|
3732
3742
|
reason: String(e)
|
|
3733
3743
|
});
|
|
3734
3744
|
});
|
|
3735
|
-
return await
|
|
3745
|
+
return await Xa({
|
|
3736
3746
|
store: e.store,
|
|
3737
3747
|
definition: a,
|
|
3738
3748
|
subjectId: String(n.subjectId),
|
|
@@ -3742,12 +3752,12 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3742
3752
|
now: () => t
|
|
3743
3753
|
}), {
|
|
3744
3754
|
connectionId: r,
|
|
3745
|
-
redirectTo:
|
|
3755
|
+
redirectTo: xo(String(n.redirectTo ?? "/"))
|
|
3746
3756
|
};
|
|
3747
|
-
},
|
|
3757
|
+
}, To = async (e, t = /* @__PURE__ */ new Date()) => {
|
|
3748
3758
|
let n = await e.query({
|
|
3749
|
-
table:
|
|
3750
|
-
predicate:
|
|
3759
|
+
table: La,
|
|
3760
|
+
predicate: ne("expiresAt", t),
|
|
3751
3761
|
order: [],
|
|
3752
3762
|
take: void 0,
|
|
3753
3763
|
skip: void 0,
|
|
@@ -3755,27 +3765,27 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3755
3765
|
}), r = 0;
|
|
3756
3766
|
for (let t of n) await e.delete("_voltro_connection_grants", t.id) && r++;
|
|
3757
3767
|
return r;
|
|
3758
|
-
},
|
|
3759
|
-
|
|
3760
|
-
},
|
|
3761
|
-
let n =
|
|
3768
|
+
}, Eo, Do = (e) => {
|
|
3769
|
+
Eo = e;
|
|
3770
|
+
}, Oo = () => Eo, ko = (e, t) => {
|
|
3771
|
+
let n = Eo;
|
|
3762
3772
|
return n === void 0 ? Promise.reject(/* @__PURE__ */ Error(`resolveConnectionForSubject("${t}"): no connection vault is registered — the app declares no \`*.connection.ts\`, or this call ran before boot completed.`)) : n(e, t);
|
|
3763
|
-
},
|
|
3773
|
+
}, Ao = (e) => async (t, n) => {
|
|
3764
3774
|
let r = e.registry.get(n);
|
|
3765
3775
|
if (r === void 0) throw Error(`connection "${n}" is not declared. Declared: ${e.registry.list().map((e) => e.id).join(", ") || "(none)"}.`);
|
|
3766
3776
|
let i = t.id ?? null;
|
|
3767
|
-
if (i === null || i === "") throw new
|
|
3768
|
-
return
|
|
3777
|
+
if (i === null || i === "") throw new oo(n, "<anonymous>");
|
|
3778
|
+
return mo({
|
|
3769
3779
|
store: e.store,
|
|
3770
3780
|
definition: r,
|
|
3771
3781
|
subjectId: i
|
|
3772
3782
|
});
|
|
3773
|
-
},
|
|
3783
|
+
}, jo = (e) => {
|
|
3774
3784
|
let t = e.subject.id ?? null, n = async (n) => {
|
|
3775
3785
|
let r = e.registry.get(n);
|
|
3776
3786
|
if (r === void 0) throw Error(`ctx.connections.get("${n}"): no such connection is declared. Declared: ${e.registry.list().map((e) => e.id).join(", ") || "(none)"}.`);
|
|
3777
|
-
if (t === null || t === "") throw new
|
|
3778
|
-
return
|
|
3787
|
+
if (t === null || t === "") throw new oo(n, "<anonymous>");
|
|
3788
|
+
return mo({
|
|
3779
3789
|
store: e.store,
|
|
3780
3790
|
definition: r,
|
|
3781
3791
|
subjectId: t
|
|
@@ -3787,7 +3797,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3787
3797
|
try {
|
|
3788
3798
|
return await n(e);
|
|
3789
3799
|
} catch (e) {
|
|
3790
|
-
if (e instanceof
|
|
3800
|
+
if (e instanceof oo) return null;
|
|
3791
3801
|
throw e;
|
|
3792
3802
|
}
|
|
3793
3803
|
},
|
|
@@ -3802,17 +3812,17 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3802
3812
|
expiresAt: null,
|
|
3803
3813
|
lastError: null,
|
|
3804
3814
|
connectedAt: null
|
|
3805
|
-
})) :
|
|
3815
|
+
})) : $a(e.store, e.registry, t)
|
|
3806
3816
|
};
|
|
3807
|
-
},
|
|
3817
|
+
}, Mo = (e, t) => {
|
|
3808
3818
|
let n = e.request?.subject?.id ?? null;
|
|
3809
|
-
if (n === null || n === "") throw new
|
|
3819
|
+
if (n === null || n === "") throw new we({ connectionId: t });
|
|
3810
3820
|
return n;
|
|
3811
|
-
},
|
|
3821
|
+
}, No = (e, t) => {
|
|
3812
3822
|
let n = e.registry.get(t);
|
|
3813
|
-
if (n === void 0) throw new
|
|
3823
|
+
if (n === void 0) throw new Ce({ connectionId: t });
|
|
3814
3824
|
return n;
|
|
3815
|
-
},
|
|
3825
|
+
}, Po = (e) => async (t, n) => {
|
|
3816
3826
|
let r = n.request?.subject?.id ?? null;
|
|
3817
3827
|
return r === null || r === "" ? e.registry.list().map((e) => ({
|
|
3818
3828
|
connectionId: e.id,
|
|
@@ -3825,15 +3835,15 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3825
3835
|
expiresAt: null,
|
|
3826
3836
|
lastError: null,
|
|
3827
3837
|
connectedAt: null
|
|
3828
|
-
})) :
|
|
3829
|
-
},
|
|
3830
|
-
let r =
|
|
3831
|
-
if (r.kind !== "oauth2") throw new
|
|
3838
|
+
})) : $a(n.store, e.registry, r);
|
|
3839
|
+
}, Fo = (e) => async (t, n) => {
|
|
3840
|
+
let r = No(e, t.connectionId), i = Mo(n, t.connectionId);
|
|
3841
|
+
if (r.kind !== "oauth2") throw new Se({
|
|
3832
3842
|
connectionId: t.connectionId,
|
|
3833
3843
|
expected: "oauth2",
|
|
3834
3844
|
actual: r.kind
|
|
3835
3845
|
});
|
|
3836
|
-
return
|
|
3846
|
+
return Co({
|
|
3837
3847
|
store: n.store,
|
|
3838
3848
|
definition: r,
|
|
3839
3849
|
subjectId: i,
|
|
@@ -3841,15 +3851,15 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3841
3851
|
publicUrl: e.publicUrl,
|
|
3842
3852
|
...t.redirectTo === void 0 ? {} : { redirectTo: t.redirectTo }
|
|
3843
3853
|
});
|
|
3844
|
-
},
|
|
3845
|
-
let r =
|
|
3846
|
-
if (r.kind !== "pat") throw new
|
|
3854
|
+
}, Io = (e) => async (t, n) => {
|
|
3855
|
+
let r = No(e, t.connectionId), i = Mo(n, t.connectionId);
|
|
3856
|
+
if (r.kind !== "pat") throw new Se({
|
|
3847
3857
|
connectionId: t.connectionId,
|
|
3848
3858
|
expected: "pat",
|
|
3849
3859
|
actual: r.kind
|
|
3850
3860
|
});
|
|
3851
3861
|
let a = t.token.trim();
|
|
3852
|
-
if (a.length === 0) throw new
|
|
3862
|
+
if (a.length === 0) throw new O({
|
|
3853
3863
|
connectionId: t.connectionId,
|
|
3854
3864
|
reason: "token is empty",
|
|
3855
3865
|
transient: !1
|
|
@@ -3858,13 +3868,13 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3858
3868
|
if (r.validate !== void 0) try {
|
|
3859
3869
|
o = await r.validate(a);
|
|
3860
3870
|
} catch (e) {
|
|
3861
|
-
throw new
|
|
3871
|
+
throw new O({
|
|
3862
3872
|
connectionId: t.connectionId,
|
|
3863
3873
|
reason: `the provider rejected that token: ${e instanceof Error ? e.message : String(e)}`,
|
|
3864
3874
|
transient: !1
|
|
3865
3875
|
});
|
|
3866
3876
|
}
|
|
3867
|
-
return await
|
|
3877
|
+
return await Xa({
|
|
3868
3878
|
store: n.store,
|
|
3869
3879
|
definition: r,
|
|
3870
3880
|
subjectId: i,
|
|
@@ -3875,20 +3885,20 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3875
3885
|
},
|
|
3876
3886
|
...o === void 0 ? {} : { account: o }
|
|
3877
3887
|
}), { ok: !0 };
|
|
3878
|
-
},
|
|
3879
|
-
|
|
3880
|
-
let r =
|
|
3881
|
-
return { ok: await
|
|
3882
|
-
},
|
|
3888
|
+
}, Lo = (e) => async (t, n) => {
|
|
3889
|
+
No(e, t.connectionId);
|
|
3890
|
+
let r = Mo(n, t.connectionId);
|
|
3891
|
+
return { ok: await Qa(n.store, t.connectionId, r) };
|
|
3892
|
+
}, Ro = "admin:full", zo = class extends L.TaggedError()("AccessDenied", {
|
|
3883
3893
|
action: L.String,
|
|
3884
3894
|
resourceType: L.String,
|
|
3885
3895
|
resourceId: L.String
|
|
3886
|
-
}) {},
|
|
3896
|
+
}) {}, Bo = /* @__PURE__ */ new Map(), Vo = (e) => {
|
|
3887
3897
|
if (typeof e.resourceType != "string" || e.resourceType.length === 0) throw Error("defineResourcePolicy: a non-empty `resourceType` is required");
|
|
3888
3898
|
if (e.actions === void 0 || Object.keys(e.actions).length === 0) throw Error(`resource policy '${e.resourceType}': at least one action is required`);
|
|
3889
|
-
if (
|
|
3890
|
-
return
|
|
3891
|
-
},
|
|
3899
|
+
if (Bo.has(e.resourceType)) throw Error(`resource policy '${e.resourceType}' is already registered — types must be unique`);
|
|
3900
|
+
return Bo.set(e.resourceType, e), e;
|
|
3901
|
+
}, Ho = (e) => Bo.get(e), Uo = () => [...Bo.values()], Wo = () => Bo.clear(), Go = () => Uo().map((e) => {
|
|
3892
3902
|
let t = /* @__PURE__ */ new Set();
|
|
3893
3903
|
for (let n of Object.values(e.actions)) for (let e of n) t.add(e);
|
|
3894
3904
|
for (let [n, r] of Object.entries(e.implies ?? {})) {
|
|
@@ -3901,7 +3911,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3901
3911
|
relations: [...t],
|
|
3902
3912
|
implies: e.implies ?? {}
|
|
3903
3913
|
};
|
|
3904
|
-
}),
|
|
3914
|
+
}), Ko = (e, t) => {
|
|
3905
3915
|
let n = new Set(e);
|
|
3906
3916
|
if (t === void 0) return n;
|
|
3907
3917
|
let r = [...e];
|
|
@@ -3910,37 +3920,37 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3910
3920
|
for (let i of t[e] ?? []) n.has(i) || (n.add(i), r.push(i));
|
|
3911
3921
|
}
|
|
3912
3922
|
return n;
|
|
3913
|
-
},
|
|
3923
|
+
}, qo = (e, t, n, r) => e.id === null ? /* @__PURE__ */ new Set() : Ko(n.filter((n) => n.subjectId === e.id && n.resourceType === t.type && n.resourceId === t.id).map((e) => e.relation), r.implies), Jo = (e, t, n, r) => {
|
|
3914
3924
|
if (e.scopes?.includes("admin:full")) return !0;
|
|
3915
3925
|
if (e.id === null || n.tenantId != null && e.tenantId !== n.tenantId) return !1;
|
|
3916
3926
|
let i = r.policy.actions[t];
|
|
3917
3927
|
if (i === void 0 || i.length === 0) return !1;
|
|
3918
|
-
let a =
|
|
3928
|
+
let a = qo(e, n, r.tuples, r.policy);
|
|
3919
3929
|
return i.some((e) => a.has(e));
|
|
3920
|
-
},
|
|
3921
|
-
if (!
|
|
3930
|
+
}, Yo = (e, t, n, r) => {
|
|
3931
|
+
if (!Jo(e, t, n, r)) throw new zo({
|
|
3922
3932
|
action: t,
|
|
3923
3933
|
resourceType: n.type,
|
|
3924
3934
|
resourceId: n.id
|
|
3925
3935
|
});
|
|
3926
|
-
},
|
|
3936
|
+
}, Xo = (e, t, n, r, i) => r.filter((r) => Jo(e, t, {
|
|
3927
3937
|
type: n,
|
|
3928
3938
|
id: r.id,
|
|
3929
3939
|
...r.tenantId === void 0 ? {} : { tenantId: r.tenantId }
|
|
3930
|
-
}, i)),
|
|
3940
|
+
}, i)), Zo = (e, t) => {
|
|
3931
3941
|
let n = new Set(t.map((e) => e.id));
|
|
3932
3942
|
return e.filter((e) => !n.has(e.id)).map((e) => e.id);
|
|
3933
|
-
},
|
|
3934
|
-
|
|
3935
|
-
},
|
|
3936
|
-
|
|
3937
|
-
let t =
|
|
3938
|
-
if (t === void 0) return
|
|
3943
|
+
}, Qo = k({ scope: "voltro:policy" }), $o, es = (e) => {
|
|
3944
|
+
$o = e;
|
|
3945
|
+
}, ts = () => $o, ns = () => {
|
|
3946
|
+
Le((e) => M.gen(function* () {
|
|
3947
|
+
let t = Ho(e.resourceType);
|
|
3948
|
+
if (t === void 0) return Qo.warn("policy guard denied — no resource policy registered for this type", {
|
|
3939
3949
|
resourceType: e.resourceType,
|
|
3940
3950
|
action: e.action
|
|
3941
3951
|
}), !1;
|
|
3942
|
-
let n =
|
|
3943
|
-
if (n === void 0) return
|
|
3952
|
+
let n = $o;
|
|
3953
|
+
if (n === void 0) return Qo.warn("policy guard denied — no tuple source registered (call setTupleSource at boot)", {
|
|
3944
3954
|
resourceType: e.resourceType,
|
|
3945
3955
|
action: e.action
|
|
3946
3956
|
}), !1;
|
|
@@ -3951,11 +3961,11 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3951
3961
|
resourceId: e.resourceId
|
|
3952
3962
|
}),
|
|
3953
3963
|
catch: (e) => e
|
|
3954
|
-
}).pipe(M.catchAll((t) => (
|
|
3964
|
+
}).pipe(M.catchAll((t) => (Qo.error("policy guard denied — tuple source failed", {
|
|
3955
3965
|
resourceType: e.resourceType,
|
|
3956
3966
|
resourceId: e.resourceId
|
|
3957
3967
|
}, t), M.succeed([])))), i = e.subject;
|
|
3958
|
-
return
|
|
3968
|
+
return Jo({
|
|
3959
3969
|
id: e.subject.id,
|
|
3960
3970
|
tenantId: i.tenantId ?? null,
|
|
3961
3971
|
...i.scopes === void 0 ? {} : { scopes: i.scopes }
|
|
@@ -3968,10 +3978,10 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
3968
3978
|
tuples: r
|
|
3969
3979
|
});
|
|
3970
3980
|
}));
|
|
3971
|
-
},
|
|
3981
|
+
}, rs = (e) => {
|
|
3972
3982
|
Promise.resolve().then(e);
|
|
3973
|
-
},
|
|
3974
|
-
let t = e.schedule ??
|
|
3983
|
+
}, is = (e) => {
|
|
3984
|
+
let t = e.schedule ?? rs, n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map(), i = (e, t) => `${e}${t}`, a = async (t) => {
|
|
3975
3985
|
let a = r.get(t);
|
|
3976
3986
|
if (a === void 0) return;
|
|
3977
3987
|
r.delete(t);
|
|
@@ -4017,11 +4027,11 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4017
4027
|
load: async (e, t) => (await o(e, [t]))[0] ?? null,
|
|
4018
4028
|
loadMany: (e, t) => o(e, t)
|
|
4019
4029
|
};
|
|
4020
|
-
},
|
|
4030
|
+
}, as = N.effect($e.HttpClient, M.map($e.HttpClient, (e) => e.pipe($e.mapRequestEffect((e) => M.currentSpan.pipe(M.map((t) => e.headers.traceparent === void 0 ? et.setHeader(e, "traceparent", or({
|
|
4021
4031
|
traceId: t.traceId,
|
|
4022
4032
|
spanId: t.spanId,
|
|
4023
4033
|
sampled: t.sampled
|
|
4024
|
-
})) : e), M.catchAll(() => M.succeed(e))))))),
|
|
4034
|
+
})) : e), M.catchAll(() => M.succeed(e))))))), os = "voltro/audit", ss = "voltro/softDelete", cs = "voltro/tenant", ls = (e) => {
|
|
4025
4035
|
let t = /* @__PURE__ */ new Map();
|
|
4026
4036
|
for (let n of e) {
|
|
4027
4037
|
let e = /* @__PURE__ */ new Set();
|
|
@@ -4064,49 +4074,49 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4064
4074
|
return !1;
|
|
4065
4075
|
},
|
|
4066
4076
|
idScheme: (e) => t.get(e)?.idScheme,
|
|
4067
|
-
defaultFactories: (e) => t.get(e)?.defaultFactories ??
|
|
4068
|
-
computedFields: (e) => t.get(e)?.computedFields ??
|
|
4077
|
+
defaultFactories: (e) => t.get(e)?.defaultFactories ?? us,
|
|
4078
|
+
computedFields: (e) => t.get(e)?.computedFields ?? ds,
|
|
4069
4079
|
insertSchema: (e) => t.get(e)?.insertSchema,
|
|
4070
4080
|
validatePatchSchema: (e) => t.get(e)?.validatePatchSchema
|
|
4071
4081
|
};
|
|
4072
|
-
},
|
|
4082
|
+
}, us = /* @__PURE__ */ new Map(), ds = /* @__PURE__ */ new Map(), fs = ls([]), ps = class extends L.TaggedError()("NoRowFound", {
|
|
4073
4083
|
table: L.String,
|
|
4074
4084
|
found: L.Number
|
|
4075
4085
|
}) {
|
|
4076
4086
|
get message() {
|
|
4077
4087
|
return this.found === 0 ? `expected exactly one row in '${this.table}', found none` : `expected exactly one row in '${this.table}', found more than one`;
|
|
4078
4088
|
}
|
|
4079
|
-
},
|
|
4089
|
+
}, ms = class extends L.TaggedError()("OptimisticLockError", {
|
|
4080
4090
|
table: L.String,
|
|
4081
4091
|
expected: L.Number
|
|
4082
4092
|
}) {
|
|
4083
4093
|
get message() {
|
|
4084
4094
|
return `optimistic lock failed on '${this.table}': expected version ${this.expected}`;
|
|
4085
4095
|
}
|
|
4086
|
-
},
|
|
4087
|
-
if (e.length === 1 &&
|
|
4096
|
+
}, hs = (e) => typeof e == "object" && !!e && ("and" in e || "or" in e || "not" in e || "op" in e || "subquery" in e), gs = (e) => {
|
|
4097
|
+
if (e.length === 1 && hs(e[0])) return e[0];
|
|
4088
4098
|
let t = e[0];
|
|
4089
4099
|
if (e.length === 2) return u(t, e[1]);
|
|
4090
4100
|
let n = e[1], r = e[2];
|
|
4091
4101
|
switch (n) {
|
|
4092
4102
|
case "=": return u(t, r);
|
|
4093
4103
|
case "!=":
|
|
4094
|
-
case "<>": return
|
|
4104
|
+
case "<>": return w(t, r);
|
|
4095
4105
|
case ">": return h(t, r);
|
|
4096
4106
|
case ">=": return g(t, r);
|
|
4097
|
-
case "<": return
|
|
4098
|
-
case "<=": return
|
|
4107
|
+
case "<": return te(t, r);
|
|
4108
|
+
case "<=": return ne(t, r);
|
|
4099
4109
|
case "in": return y(t, r);
|
|
4100
4110
|
case "like":
|
|
4101
4111
|
case "contains":
|
|
4102
4112
|
case "fts": return o(t, r);
|
|
4103
4113
|
default: return u(t, r);
|
|
4104
4114
|
}
|
|
4105
|
-
},
|
|
4115
|
+
}, _s = (e) => {
|
|
4106
4116
|
let t = m(e);
|
|
4107
4117
|
if (t === void 0) throw Error(`unknown table '${e}' — is it declared with table()?`);
|
|
4108
|
-
return
|
|
4109
|
-
},
|
|
4118
|
+
return ie(t);
|
|
4119
|
+
}, vs = class e {
|
|
4110
4120
|
backend;
|
|
4111
4121
|
scope;
|
|
4112
4122
|
table;
|
|
@@ -4120,7 +4130,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4120
4130
|
return new e(this.backend, this.scope, this.table, t, this.skipTenant, this.skipSoftDelete);
|
|
4121
4131
|
}
|
|
4122
4132
|
where(...e) {
|
|
4123
|
-
return this.clone(this.query.where(
|
|
4133
|
+
return this.clone(this.query.where(gs(e)));
|
|
4124
4134
|
}
|
|
4125
4135
|
orderBy(e, t = "asc") {
|
|
4126
4136
|
return this.clone(this.query.orderBy(e, t));
|
|
@@ -4155,7 +4165,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4155
4165
|
scopedQuery() {
|
|
4156
4166
|
let e = this.query, { subject: t, schemaRegistry: n } = this.scope;
|
|
4157
4167
|
!this.skipTenant && n.hasTenant(this.table) && t.tenantId != null && (e = e.where(u("tenantId", t.tenantId))), !this.skipSoftDelete && n.hasSoftDelete(this.table) && (e = e.where(S("deletedAt")));
|
|
4158
|
-
let r = (this.scope.rowFilter ??
|
|
4168
|
+
let r = (this.scope.rowFilter ?? Pn)(this.table);
|
|
4159
4169
|
return r !== void 0 && (e = e.where(r)), e;
|
|
4160
4170
|
}
|
|
4161
4171
|
async all() {
|
|
@@ -4169,11 +4179,11 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4169
4179
|
}
|
|
4170
4180
|
async one() {
|
|
4171
4181
|
let e = await this.backend.query(this.scopedQuery().limit(2).descriptor), t = e[0];
|
|
4172
|
-
if (t === void 0) throw new
|
|
4182
|
+
if (t === void 0) throw new ps({
|
|
4173
4183
|
table: this.table,
|
|
4174
4184
|
found: 0
|
|
4175
4185
|
});
|
|
4176
|
-
if (e.length > 1) throw new
|
|
4186
|
+
if (e.length > 1) throw new ps({
|
|
4177
4187
|
table: this.table,
|
|
4178
4188
|
found: e.length
|
|
4179
4189
|
});
|
|
@@ -4189,7 +4199,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4189
4199
|
get descriptor() {
|
|
4190
4200
|
return this.scopedQuery().descriptor;
|
|
4191
4201
|
}
|
|
4192
|
-
},
|
|
4202
|
+
}, ys = class {
|
|
4193
4203
|
backend;
|
|
4194
4204
|
scope;
|
|
4195
4205
|
table;
|
|
@@ -4200,7 +4210,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4200
4210
|
this.backend = e, this.scope = t, this.table = n;
|
|
4201
4211
|
}
|
|
4202
4212
|
where(...e) {
|
|
4203
|
-
let n =
|
|
4213
|
+
let n = gs(e);
|
|
4204
4214
|
return this.predicate = this.predicate ? t(this.predicate, n) : n, this;
|
|
4205
4215
|
}
|
|
4206
4216
|
unscoped() {
|
|
@@ -4224,7 +4234,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4224
4234
|
}
|
|
4225
4235
|
async set(e) {
|
|
4226
4236
|
let t = await this.backend.updateMany(this.table, e, { where: this.scopedWhere() });
|
|
4227
|
-
if (this.expectedVersion !== void 0 && t === 0) throw new
|
|
4237
|
+
if (this.expectedVersion !== void 0 && t === 0) throw new ms({
|
|
4228
4238
|
table: this.table,
|
|
4229
4239
|
expected: this.expectedVersion
|
|
4230
4240
|
});
|
|
@@ -4233,7 +4243,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4233
4243
|
async restore() {
|
|
4234
4244
|
return this.backend.updateMany(this.table, { deletedAt: null }, { where: this.scopedWhere() });
|
|
4235
4245
|
}
|
|
4236
|
-
},
|
|
4246
|
+
}, bs = class {
|
|
4237
4247
|
backend;
|
|
4238
4248
|
scope;
|
|
4239
4249
|
table;
|
|
@@ -4243,7 +4253,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4243
4253
|
this.backend = e, this.scope = t, this.table = n;
|
|
4244
4254
|
}
|
|
4245
4255
|
where(...e) {
|
|
4246
|
-
let n =
|
|
4256
|
+
let n = gs(e);
|
|
4247
4257
|
return this.predicate = this.predicate ? t(this.predicate, n) : n, this;
|
|
4248
4258
|
}
|
|
4249
4259
|
unscoped() {
|
|
@@ -4264,32 +4274,32 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4264
4274
|
async hard() {
|
|
4265
4275
|
return this.backend.deleteMany(this.table, { where: this.scopedWhere() });
|
|
4266
4276
|
}
|
|
4267
|
-
},
|
|
4268
|
-
select: (n) => new
|
|
4269
|
-
updateWhere: (n) => new
|
|
4270
|
-
deleteWhere: (n) => new
|
|
4271
|
-
}),
|
|
4277
|
+
}, xs = (e, t) => ({
|
|
4278
|
+
select: (n) => new vs(e, t, n, _s(n)),
|
|
4279
|
+
updateWhere: (n) => new ys(e, t, n),
|
|
4280
|
+
deleteWhere: (n) => new bs(e, t, n)
|
|
4281
|
+
}), Ss = "id", Cs = (e) => "descriptor" in e ? e.descriptor : e, ws = (e, t) => {
|
|
4272
4282
|
let n = {};
|
|
4273
4283
|
for (let r of t) e[r] !== void 0 && (n[r] = e[r]);
|
|
4274
4284
|
return n;
|
|
4275
|
-
},
|
|
4276
|
-
throw new
|
|
4285
|
+
}, Ts = "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).", Es = (e) => {
|
|
4286
|
+
throw new Gi({
|
|
4277
4287
|
table: e,
|
|
4278
|
-
reason:
|
|
4288
|
+
reason: Ts
|
|
4279
4289
|
});
|
|
4280
|
-
},
|
|
4281
|
-
let r = n.subject.id, i = n.subject.tenantId, a = n.rowFilter ??
|
|
4290
|
+
}, Ds = (e, n) => {
|
|
4291
|
+
let r = n.subject.id, i = n.subject.tenantId, a = n.rowFilter ?? Pn, o = (e, t) => {
|
|
4282
4292
|
let a = { ...t }, o = n.schemaRegistry, s = o.idScheme(e);
|
|
4283
|
-
if (s !== void 0 && a[
|
|
4293
|
+
if (s !== void 0 && a[Ss] == null) if (s.kind === "numeric") delete a[Ss];
|
|
4284
4294
|
else {
|
|
4285
4295
|
let t = f(s, e);
|
|
4286
|
-
t !== null && (a[
|
|
4296
|
+
t !== null && (a[Ss] = t);
|
|
4287
4297
|
}
|
|
4288
4298
|
if (o.hasAudit(e)) {
|
|
4289
4299
|
let e = /* @__PURE__ */ new Date();
|
|
4290
4300
|
"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));
|
|
4291
4301
|
}
|
|
4292
|
-
o.hasTenant(e) && ("tenantId" in a || (i === null &&
|
|
4302
|
+
o.hasTenant(e) && ("tenantId" in a || (i === null && Es(e), a.tenantId = i));
|
|
4293
4303
|
let c = o.defaultFactories(e);
|
|
4294
4304
|
if (c.size > 0) for (let [e, t] of c) (!(e in a) || a[e] === void 0) && (a[e] = t());
|
|
4295
4305
|
let l = o.computedFields(e);
|
|
@@ -4304,10 +4314,10 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4304
4314
|
try {
|
|
4305
4315
|
return await r();
|
|
4306
4316
|
} catch (n) {
|
|
4307
|
-
let r =
|
|
4308
|
-
if (
|
|
4317
|
+
let r = qt(n);
|
|
4318
|
+
if (Jt(r)) {
|
|
4309
4319
|
let n = t.tenantId, i = `${r.dbConstraint ?? ""} ${r.dbColumn ?? ""} ${r.dbMessage ?? ""} ${r.dbCauseChain ?? ""}`.toLowerCase();
|
|
4310
|
-
if (i.includes("tenantid") || /\btenants\b/.test(i) || n != null && i.includes(String(n).toLowerCase())) throw new
|
|
4320
|
+
if (i.includes("tenantid") || /\btenants\b/.test(i) || n != null && i.includes(String(n).toLowerCase())) throw new Gi({
|
|
4311
4321
|
table: e,
|
|
4312
4322
|
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)`
|
|
4313
4323
|
});
|
|
@@ -4328,11 +4338,11 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4328
4338
|
if (r === void 0) return t;
|
|
4329
4339
|
let i = L.decodeUnknownEither(r)(t);
|
|
4330
4340
|
if (i._tag === "Right") return t;
|
|
4331
|
-
let a =
|
|
4341
|
+
let a = wt.formatErrorSync(i.left).map((e) => ({
|
|
4332
4342
|
path: e.path.length === 0 ? "<root>" : e.path.join("."),
|
|
4333
4343
|
message: e.message
|
|
4334
4344
|
})), o = a[0];
|
|
4335
|
-
throw new
|
|
4345
|
+
throw new qi({
|
|
4336
4346
|
table: e,
|
|
4337
4347
|
summary: o === void 0 ? "patch validation failed" : `${o.path}: ${o.message}`,
|
|
4338
4348
|
issues: a
|
|
@@ -4345,20 +4355,20 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4345
4355
|
if (r === void 0) return t;
|
|
4346
4356
|
let i = L.decodeUnknownEither(r)(t);
|
|
4347
4357
|
if (i._tag === "Right") return t;
|
|
4348
|
-
let a =
|
|
4358
|
+
let a = wt.formatErrorSync(i.left).map((e) => ({
|
|
4349
4359
|
path: e.path.length === 0 ? "<root>" : e.path.join("."),
|
|
4350
4360
|
message: e.message
|
|
4351
4361
|
})), o = a[0];
|
|
4352
|
-
throw new
|
|
4362
|
+
throw new qi({
|
|
4353
4363
|
table: e,
|
|
4354
4364
|
summary: o === void 0 ? "row validation failed" : `${o.path}: ${o.message}`,
|
|
4355
4365
|
issues: a
|
|
4356
4366
|
});
|
|
4357
4367
|
}, y = n.dialect, b = (e, t) => {
|
|
4358
4368
|
let n = m(e);
|
|
4359
|
-
return l(y ?
|
|
4369
|
+
return l(y ? le(t, n, y) : t, n, gi());
|
|
4360
4370
|
}, x = (e, t) => {
|
|
4361
|
-
let n = m(e), r = s(t, n,
|
|
4371
|
+
let n = m(e), r = s(t, n, gi());
|
|
4362
4372
|
return y ? c(r, n, y) : r;
|
|
4363
4373
|
}, C = (e) => {
|
|
4364
4374
|
let r = e.table, o = e.predicate;
|
|
@@ -4370,20 +4380,20 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4370
4380
|
let e = S("deletedAt");
|
|
4371
4381
|
o = o ? t(o, e) : e;
|
|
4372
4382
|
}
|
|
4373
|
-
return o =
|
|
4383
|
+
return o = Rn(a, r, o), o === e.predicate ? e : {
|
|
4374
4384
|
...e,
|
|
4375
4385
|
predicate: o
|
|
4376
4386
|
};
|
|
4377
4387
|
}, ee = async (t) => {
|
|
4378
4388
|
let n = await e.query(t);
|
|
4379
4389
|
return x(t.table, n);
|
|
4380
|
-
},
|
|
4390
|
+
}, te = async (e) => ee(C(e)), ne = async (t, r, i) => {
|
|
4381
4391
|
let a = d(t, i);
|
|
4382
4392
|
if (n.schemaRegistry.computedFields(t).size > 0) {
|
|
4383
4393
|
let n = (await e.query({
|
|
4384
4394
|
table: t,
|
|
4385
4395
|
predicate: {
|
|
4386
|
-
column:
|
|
4396
|
+
column: Ss,
|
|
4387
4397
|
op: "eq",
|
|
4388
4398
|
value: r
|
|
4389
4399
|
},
|
|
@@ -4398,16 +4408,16 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4398
4408
|
a = g(t, a);
|
|
4399
4409
|
let o = await e.update(t, r, b(t, a));
|
|
4400
4410
|
return o === null ? null : x(t, [o])[0];
|
|
4401
|
-
},
|
|
4411
|
+
}, w = async (t, r) => n.schemaRegistry.hasSoftDelete(t) ? await e.update(t, r, _()) !== null : e.delete(t, r), re = async (t, n, r) => e.updateMany(t, b(t, d(t, n)), r), ie = async (t, n) => e.deleteMany(t, n), ae = (e, r) => i != null && n.schemaRegistry.hasTenant(e) ? t(r, u("tenantId", i)) : r, oe = async (e, t, n) => re(e, t, {
|
|
4402
4412
|
...n,
|
|
4403
|
-
where:
|
|
4404
|
-
}),
|
|
4413
|
+
where: ae(e, n.where)
|
|
4414
|
+
}), se = async (e, t) => ie(e, {
|
|
4405
4415
|
...t,
|
|
4406
|
-
where:
|
|
4407
|
-
}), ce =
|
|
4416
|
+
where: ae(e, t.where)
|
|
4417
|
+
}), ce = xs({
|
|
4408
4418
|
query: ee,
|
|
4409
|
-
updateMany:
|
|
4410
|
-
deleteMany:
|
|
4419
|
+
updateMany: re,
|
|
4420
|
+
deleteMany: ie,
|
|
4411
4421
|
delete: (t, n) => e.delete(t, n)
|
|
4412
4422
|
}, {
|
|
4413
4423
|
subject: n.subject,
|
|
@@ -4415,28 +4425,28 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4415
4425
|
rowFilter: a
|
|
4416
4426
|
});
|
|
4417
4427
|
return {
|
|
4418
|
-
query:
|
|
4428
|
+
query: te,
|
|
4419
4429
|
one: (async (e) => {
|
|
4420
|
-
let t =
|
|
4430
|
+
let t = Cs(e), n = await te({
|
|
4421
4431
|
...t,
|
|
4422
4432
|
take: 2
|
|
4423
4433
|
}), r = n[0];
|
|
4424
|
-
if (r === void 0) throw new
|
|
4434
|
+
if (r === void 0) throw new ps({
|
|
4425
4435
|
table: t.table,
|
|
4426
4436
|
found: 0
|
|
4427
4437
|
});
|
|
4428
|
-
if (n.length > 1) throw new
|
|
4438
|
+
if (n.length > 1) throw new ps({
|
|
4429
4439
|
table: t.table,
|
|
4430
4440
|
found: n.length
|
|
4431
4441
|
});
|
|
4432
4442
|
return r;
|
|
4433
4443
|
}),
|
|
4434
|
-
first: (async (e) => (await
|
|
4435
|
-
...
|
|
4444
|
+
first: (async (e) => (await te({
|
|
4445
|
+
...Cs(e),
|
|
4436
4446
|
take: 1
|
|
4437
4447
|
}))[0] ?? null),
|
|
4438
|
-
maybeOne: (async (e) => (await
|
|
4439
|
-
...
|
|
4448
|
+
maybeOne: (async (e) => (await te({
|
|
4449
|
+
...Cs(e),
|
|
4440
4450
|
take: 1
|
|
4441
4451
|
}))[0] ?? null),
|
|
4442
4452
|
insert: async (t, n) => {
|
|
@@ -4452,12 +4462,12 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4452
4462
|
return a === null ? null : x(t, [a])[0];
|
|
4453
4463
|
},
|
|
4454
4464
|
select: ce.select,
|
|
4455
|
-
update: ((e, t, n) => t === void 0 ? ce.updateWhere(e) :
|
|
4456
|
-
delete: ((e, t) => t === void 0 ? ce.deleteWhere(e) :
|
|
4457
|
-
applyDefined:
|
|
4465
|
+
update: ((e, t, n) => t === void 0 ? ce.updateWhere(e) : ne(e, t, n)),
|
|
4466
|
+
delete: ((e, t) => t === void 0 ? ce.deleteWhere(e) : w(e, t)),
|
|
4467
|
+
applyDefined: ws,
|
|
4458
4468
|
hardDelete: async (t, n) => e.delete(t, n),
|
|
4459
|
-
updateMany:
|
|
4460
|
-
deleteMany:
|
|
4469
|
+
updateMany: oe,
|
|
4470
|
+
deleteMany: se,
|
|
4461
4471
|
upsert: async (t, n, r) => {
|
|
4462
4472
|
let i = o(t, n), a = await p(t, i, () => e.upsert(t, b(t, v(t, i)), r));
|
|
4463
4473
|
return x(t, [a])[0];
|
|
@@ -4466,34 +4476,34 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4466
4476
|
let i = o(t, n), a = await p(t, i, () => e.insertIgnore(t, b(t, v(t, i)), r));
|
|
4467
4477
|
return x(t, [a])[0];
|
|
4468
4478
|
},
|
|
4469
|
-
transactional: (t) => e.transactional(async (e) => t(
|
|
4479
|
+
transactional: (t) => e.transactional(async (e) => t(Ds(e, n))),
|
|
4470
4480
|
...e.raw ? { raw: e.raw.bind(e) } : {},
|
|
4471
4481
|
onChange: (t) => e.onChange(t),
|
|
4472
4482
|
injectExternalChange: (t) => e.injectExternalChange(t),
|
|
4473
4483
|
...e.changeScope === void 0 ? {} : { changeScope: e.changeScope }
|
|
4474
4484
|
};
|
|
4475
|
-
},
|
|
4485
|
+
}, Os = class extends L.TaggedError()("CircuitOpen", {
|
|
4476
4486
|
name: L.String,
|
|
4477
4487
|
retryAfterMs: L.Number
|
|
4478
|
-
}) {},
|
|
4488
|
+
}) {}, ks = {
|
|
4479
4489
|
tag: "closed",
|
|
4480
4490
|
failureCount: 0,
|
|
4481
4491
|
halfOpenSuccesses: 0,
|
|
4482
4492
|
openedAt: 0
|
|
4483
|
-
},
|
|
4484
|
-
let t = e.name ?? "circuit", n =
|
|
4493
|
+
}, As = { make: (e) => M.gen(function* () {
|
|
4494
|
+
let t = e.name ?? "circuit", n = Ue.toMillis(Ue.decode(e.resetTimeout)), r = e.halfOpenSuccessThreshold ?? 1, i = e.isFailure ?? (() => !0), a = yield* I.make(ks), o = M.gen(function* () {
|
|
4485
4495
|
let e = yield* I.get(a);
|
|
4486
4496
|
if (e.tag === "half-open") {
|
|
4487
4497
|
let t = e.halfOpenSuccesses + 1;
|
|
4488
|
-
yield* I.set(a, t >= r ?
|
|
4498
|
+
yield* I.set(a, t >= r ? ks : {
|
|
4489
4499
|
...e,
|
|
4490
4500
|
halfOpenSuccesses: t
|
|
4491
4501
|
});
|
|
4492
4502
|
return;
|
|
4493
4503
|
}
|
|
4494
|
-
e.failureCount !== 0 && (yield* I.set(a,
|
|
4504
|
+
e.failureCount !== 0 && (yield* I.set(a, ks));
|
|
4495
4505
|
}), s = M.gen(function* () {
|
|
4496
|
-
let t = yield*
|
|
4506
|
+
let t = yield* Be.currentTimeMillis, n = yield* I.get(a);
|
|
4497
4507
|
if (n.tag === "half-open" || n.tag === "open") {
|
|
4498
4508
|
yield* I.set(a, {
|
|
4499
4509
|
tag: "open",
|
|
@@ -4516,7 +4526,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4516
4526
|
}), c = M.gen(function* () {
|
|
4517
4527
|
let e = yield* I.get(a);
|
|
4518
4528
|
if (e.tag !== "open") return null;
|
|
4519
|
-
let t = (yield*
|
|
4529
|
+
let t = (yield* Be.currentTimeMillis) - e.openedAt;
|
|
4520
4530
|
return t >= n ? (yield* I.set(a, {
|
|
4521
4531
|
tag: "half-open",
|
|
4522
4532
|
failureCount: 0,
|
|
@@ -4526,10 +4536,10 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4526
4536
|
}), l = (e) => M.gen(function* () {
|
|
4527
4537
|
let n = yield* c;
|
|
4528
4538
|
return n === null ? yield* e.pipe(M.tap(() => o), M.tapErrorCause((e) => {
|
|
4529
|
-
if (
|
|
4530
|
-
let t =
|
|
4539
|
+
if (A.isInterruptedOnly(e)) return M.void;
|
|
4540
|
+
let t = A.failureOption(e), n = t._tag === "Some" ? t.value : void 0;
|
|
4531
4541
|
return i(n) ? s : M.void;
|
|
4532
|
-
})) : yield* M.fail(new
|
|
4542
|
+
})) : yield* M.fail(new Os({
|
|
4533
4543
|
name: t,
|
|
4534
4544
|
retryAfterMs: n
|
|
4535
4545
|
}));
|
|
@@ -4538,25 +4548,25 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4538
4548
|
value: I.get(a).pipe(M.map((e) => e.tag)),
|
|
4539
4549
|
enumerable: !0
|
|
4540
4550
|
}), Object.defineProperty(u, "reset", {
|
|
4541
|
-
value: I.set(a,
|
|
4551
|
+
value: I.set(a, ks),
|
|
4542
4552
|
enumerable: !0
|
|
4543
4553
|
}), u;
|
|
4544
|
-
}) },
|
|
4545
|
-
|
|
4546
|
-
},
|
|
4547
|
-
|
|
4548
|
-
},
|
|
4549
|
-
let n = t.scopes === void 0 ?
|
|
4554
|
+
}) }, js, Ms = (e) => {
|
|
4555
|
+
js = e;
|
|
4556
|
+
}, Ns = () => {
|
|
4557
|
+
js = void 0;
|
|
4558
|
+
}, Ps = () => js, Fs = async (e, t = {}) => {
|
|
4559
|
+
let n = t.scopes === void 0 ? Re(t.id ?? "system") : Re(t.id ?? "system", t.scopes), r = t.store ?? js?.dataStore, i = t.schemaRegistry ?? js?.schemaRegistry, a = t.dialect ?? js?.dialect;
|
|
4550
4560
|
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.");
|
|
4551
4561
|
return e({
|
|
4552
4562
|
subject: n,
|
|
4553
|
-
store:
|
|
4563
|
+
store: Ds(r, {
|
|
4554
4564
|
subject: n,
|
|
4555
4565
|
schemaRegistry: i,
|
|
4556
4566
|
...a === void 0 ? {} : { dialect: a }
|
|
4557
4567
|
})
|
|
4558
4568
|
});
|
|
4559
|
-
},
|
|
4569
|
+
}, Is = (e) => {
|
|
4560
4570
|
let { currentRegion: t, replicaRegions: n, inner: r } = e, i = (e) => {
|
|
4561
4571
|
if (t === void 0) return {
|
|
4562
4572
|
sameRegion: [],
|
|
@@ -4584,7 +4594,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4584
4594
|
return r.loadSnapshot();
|
|
4585
4595
|
}
|
|
4586
4596
|
};
|
|
4587
|
-
},
|
|
4597
|
+
}, Ls = (e = process.env) => {
|
|
4588
4598
|
for (let t of [
|
|
4589
4599
|
"VOLTRO_REGION",
|
|
4590
4600
|
"AWS_REGION",
|
|
@@ -4596,7 +4606,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4596
4606
|
let n = e[t];
|
|
4597
4607
|
if (typeof n == "string" && n.length > 0) return n;
|
|
4598
4608
|
}
|
|
4599
|
-
},
|
|
4609
|
+
}, Rs = () => {
|
|
4600
4610
|
let e = {
|
|
4601
4611
|
primary: 0,
|
|
4602
4612
|
lagByReplica: /* @__PURE__ */ new Map()
|
|
@@ -4621,27 +4631,27 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4621
4631
|
e.lagByReplica.set(t, n);
|
|
4622
4632
|
}
|
|
4623
4633
|
};
|
|
4624
|
-
},
|
|
4625
|
-
let t =
|
|
4626
|
-
if (
|
|
4634
|
+
}, zs = Symbol.for("@voltro/ScheduleDefinition"), Bs = (e) => typeof e == "object" && !!e && zs in e, Vs = 30 * 6e4, Hs = (e) => {
|
|
4635
|
+
let t = j.parse(e.cron, e.timezone);
|
|
4636
|
+
if (We.isLeft(t)) throw Error(`defineSchedule("${e.name}"): invalid cron expression "${e.cron}" (tz="${e.timezone}") — ${String(t.left)}`);
|
|
4627
4637
|
if (!e.timezone || e.timezone.trim() === "") throw Error(`defineSchedule("${e.name}"): timezone is required (e.g. "UTC", "Europe/Berlin")`);
|
|
4628
4638
|
if (e.handler === void 0 && e.workflow === void 0) throw Error(`defineSchedule("${e.name}"): define either handler or workflow`);
|
|
4629
4639
|
return {
|
|
4630
4640
|
...e,
|
|
4631
4641
|
onOverlap: e.onOverlap ?? "skip",
|
|
4632
4642
|
backfill: e.backfill ?? "skip",
|
|
4633
|
-
maxRuntimeMs: e.maxRuntimeMs ??
|
|
4634
|
-
[
|
|
4643
|
+
maxRuntimeMs: e.maxRuntimeMs ?? Vs,
|
|
4644
|
+
[zs]: !0
|
|
4635
4645
|
};
|
|
4636
|
-
},
|
|
4646
|
+
}, Us = (e) => j.unsafeParse(e.cron, e.timezone), Ws = (e, t = /* @__PURE__ */ new Date()) => j.next(Us(e), t), Z = "_voltro_wakeups", Gs = (e) => `${e.tenantId}:${e.kind}:${e.refId}`, Ks = (e) => ({
|
|
4637
4647
|
tenantId: String(e.tenantId),
|
|
4638
4648
|
kind: String(e.kind),
|
|
4639
4649
|
refId: String(e.refId),
|
|
4640
4650
|
wakeAt: e.wakeAt instanceof Date ? e.wakeAt : new Date(String(e.wakeAt)),
|
|
4641
4651
|
status: e.status === "fired" ? "fired" : "pending"
|
|
4642
|
-
}),
|
|
4652
|
+
}), qs = async (e, t) => {
|
|
4643
4653
|
await e.upsert(Z, {
|
|
4644
|
-
id:
|
|
4654
|
+
id: Gs(t),
|
|
4645
4655
|
tenantId: t.tenantId,
|
|
4646
4656
|
kind: t.kind,
|
|
4647
4657
|
refId: t.refId,
|
|
@@ -4651,7 +4661,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4651
4661
|
conflictColumns: ["id"],
|
|
4652
4662
|
update: ["wakeAt", "status"]
|
|
4653
4663
|
});
|
|
4654
|
-
},
|
|
4664
|
+
}, Js = async (e, t) => e.delete(Z, Gs(t)), Ys = async (e, t) => await e.update(Z, Gs(t), { status: "fired" }) !== null, Xs = (e, t) => ({ and: [{
|
|
4655
4665
|
column: "id",
|
|
4656
4666
|
op: "eq",
|
|
4657
4667
|
value: e
|
|
@@ -4659,16 +4669,16 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4659
4669
|
column: "status",
|
|
4660
4670
|
op: "eq",
|
|
4661
4671
|
value: t
|
|
4662
|
-
}] }),
|
|
4663
|
-
await e.updateMany(Z, { status: "pending" }, { where:
|
|
4664
|
-
},
|
|
4672
|
+
}] }), Zs = async (e, t) => await e.updateMany(Z, { status: "fired" }, { where: Xs(Gs(t), "pending") }) > 0, Qs = async (e, t) => {
|
|
4673
|
+
await e.updateMany(Z, { status: "pending" }, { where: Xs(Gs(t), "fired") });
|
|
4674
|
+
}, $s = {
|
|
4665
4675
|
column: "status",
|
|
4666
4676
|
op: "eq",
|
|
4667
4677
|
value: "pending"
|
|
4668
|
-
},
|
|
4678
|
+
}, ec = async (e, t) => {
|
|
4669
4679
|
let n = {
|
|
4670
4680
|
table: Z,
|
|
4671
|
-
predicate:
|
|
4681
|
+
predicate: $s,
|
|
4672
4682
|
order: [{
|
|
4673
4683
|
column: "wakeAt",
|
|
4674
4684
|
direction: "asc"
|
|
@@ -4677,18 +4687,18 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4677
4687
|
skip: void 0,
|
|
4678
4688
|
projection: void 0
|
|
4679
4689
|
};
|
|
4680
|
-
return (await e.query(n)).map(
|
|
4681
|
-
},
|
|
4682
|
-
let r = await
|
|
4690
|
+
return (await e.query(n)).map(Ks);
|
|
4691
|
+
}, tc = async (e, t, n = 500) => {
|
|
4692
|
+
let r = await ec(e, n), i = t.getTime();
|
|
4683
4693
|
return r.filter((e) => e.wakeAt.getTime() <= i);
|
|
4684
|
-
},
|
|
4694
|
+
}, nc = async (e) => (await ec(e, 1))[0] ?? null, rc = {
|
|
4685
4695
|
column: "status",
|
|
4686
4696
|
op: "eq",
|
|
4687
4697
|
value: "fired"
|
|
4688
|
-
},
|
|
4698
|
+
}, ic = async (e, t = {}) => {
|
|
4689
4699
|
let n = {
|
|
4690
4700
|
table: Z,
|
|
4691
|
-
predicate:
|
|
4701
|
+
predicate: rc,
|
|
4692
4702
|
order: [{
|
|
4693
4703
|
column: "wakeAt",
|
|
4694
4704
|
direction: "asc"
|
|
@@ -4699,12 +4709,12 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4699
4709
|
}, r = await e.query(n), i = t.firedOlderThan?.getTime(), a = 0;
|
|
4700
4710
|
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++;
|
|
4701
4711
|
return a;
|
|
4702
|
-
},
|
|
4712
|
+
}, ac = Wi, oc = "default", sc = {
|
|
4703
4713
|
kind: "single",
|
|
4704
4714
|
tryClaim: async () => !0
|
|
4705
|
-
},
|
|
4715
|
+
}, cc = "_voltro_schedule_claims", lc = (e, t, n) => {
|
|
4706
4716
|
let r = async (t) => (await e.query({
|
|
4707
|
-
table:
|
|
4717
|
+
table: cc,
|
|
4708
4718
|
order: [],
|
|
4709
4719
|
predicate: void 0,
|
|
4710
4720
|
projection: ["id"],
|
|
@@ -4719,7 +4729,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4719
4729
|
if (await r(s)) return !1;
|
|
4720
4730
|
} catch {}
|
|
4721
4731
|
try {
|
|
4722
|
-
return await e.insert(
|
|
4732
|
+
return await e.insert(cc, {
|
|
4723
4733
|
id: s,
|
|
4724
4734
|
scheduleName: i,
|
|
4725
4735
|
bucket: o,
|
|
@@ -4737,12 +4747,12 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4737
4747
|
}
|
|
4738
4748
|
}
|
|
4739
4749
|
};
|
|
4740
|
-
},
|
|
4750
|
+
}, uc = "_voltro_schedule_runs", dc = async (e, t) => {
|
|
4741
4751
|
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) => {
|
|
4742
|
-
s?.(e,
|
|
4752
|
+
s?.(e, pc(t));
|
|
4743
4753
|
}, _ = async (e, t, r, i, s, c) => {
|
|
4744
4754
|
try {
|
|
4745
|
-
let o = `sr_${
|
|
4755
|
+
let o = `sr_${_e()}`, l = await n.insert(uc, {
|
|
4746
4756
|
id: o,
|
|
4747
4757
|
name: e.name,
|
|
4748
4758
|
status: i,
|
|
@@ -4767,7 +4777,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4767
4777
|
}
|
|
4768
4778
|
}, v = async (e, t) => {
|
|
4769
4779
|
try {
|
|
4770
|
-
let r = await n.update(
|
|
4780
|
+
let r = await n.update(uc, e, t);
|
|
4771
4781
|
r && g("update", r);
|
|
4772
4782
|
} catch (t) {
|
|
4773
4783
|
o.warn("schedule: failed to record run finish", {
|
|
@@ -4778,7 +4788,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4778
4788
|
}, y = async (e) => {
|
|
4779
4789
|
try {
|
|
4780
4790
|
let t = await n.query({
|
|
4781
|
-
table:
|
|
4791
|
+
table: uc,
|
|
4782
4792
|
predicate: {
|
|
4783
4793
|
_tag: "leaf",
|
|
4784
4794
|
column: "status",
|
|
@@ -4812,7 +4822,8 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4812
4822
|
traceId: `schedule-${e.name}-${a.getTime()}`,
|
|
4813
4823
|
scheduleName: e.name,
|
|
4814
4824
|
trigger: n,
|
|
4815
|
-
runId: s
|
|
4825
|
+
runId: s,
|
|
4826
|
+
subject: ac
|
|
4816
4827
|
})
|
|
4817
4828
|
};
|
|
4818
4829
|
try {
|
|
@@ -4843,7 +4854,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4843
4854
|
let n = Q(t).includes("exceeded maxRuntimeMs");
|
|
4844
4855
|
s && await v(s, {
|
|
4845
4856
|
status: "failed",
|
|
4846
|
-
errorTag: n ? "timeout" :
|
|
4857
|
+
errorTag: n ? "timeout" : fc(t),
|
|
4847
4858
|
errorMessage: Q(t),
|
|
4848
4859
|
completedAt: /* @__PURE__ */ new Date(),
|
|
4849
4860
|
durationMs: Date.now() - l
|
|
@@ -4851,7 +4862,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4851
4862
|
name: e.name,
|
|
4852
4863
|
reason: Q(t),
|
|
4853
4864
|
timeout: n
|
|
4854
|
-
}),
|
|
4865
|
+
}), Fe({
|
|
4855
4866
|
error: t,
|
|
4856
4867
|
source: "schedule",
|
|
4857
4868
|
name: e.name,
|
|
@@ -4900,8 +4911,8 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4900
4911
|
}
|
|
4901
4912
|
}, C = async (e) => {
|
|
4902
4913
|
try {
|
|
4903
|
-
let t =
|
|
4904
|
-
await
|
|
4914
|
+
let t = j.next(Us(e), /* @__PURE__ */ new Date());
|
|
4915
|
+
await qs(n, {
|
|
4905
4916
|
tenantId: u,
|
|
4906
4917
|
kind: "schedule",
|
|
4907
4918
|
refId: e.name,
|
|
@@ -4913,9 +4924,9 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4913
4924
|
reason: Q(t)
|
|
4914
4925
|
});
|
|
4915
4926
|
}
|
|
4916
|
-
}, ee = 2147483647,
|
|
4927
|
+
}, ee = 2147483647, te = (e) => {
|
|
4917
4928
|
if (m) return;
|
|
4918
|
-
let n =
|
|
4929
|
+
let n = Us(e), r = j.next(n, /* @__PURE__ */ new Date()), i = () => {
|
|
4919
4930
|
if (m) return;
|
|
4920
4931
|
let n = r.getTime() - Date.now();
|
|
4921
4932
|
if (n > ee) {
|
|
@@ -4927,17 +4938,17 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4927
4938
|
x(e, r, e.trigger ?? t.defaultTrigger).catch((t) => o.warn("schedule: fire rejected", {
|
|
4928
4939
|
name: e.name,
|
|
4929
4940
|
reason: Q(t)
|
|
4930
|
-
})).finally(() =>
|
|
4941
|
+
})).finally(() => te(e));
|
|
4931
4942
|
}, Math.max(0, n));
|
|
4932
4943
|
d.set(e.name, a);
|
|
4933
4944
|
};
|
|
4934
4945
|
i();
|
|
4935
|
-
},
|
|
4946
|
+
}, ne = async (e) => {
|
|
4936
4947
|
if (e.backfill === "skip") return;
|
|
4937
4948
|
let r;
|
|
4938
4949
|
try {
|
|
4939
4950
|
let t = (await n.query({
|
|
4940
|
-
table:
|
|
4951
|
+
table: uc,
|
|
4941
4952
|
order: [{
|
|
4942
4953
|
column: "scheduledAt",
|
|
4943
4954
|
direction: "desc"
|
|
@@ -4956,8 +4967,8 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4956
4967
|
return;
|
|
4957
4968
|
}
|
|
4958
4969
|
if (!r) return;
|
|
4959
|
-
let i =
|
|
4960
|
-
for (; s.getTime() < c && a.length < 1e3;) a.push(s), s =
|
|
4970
|
+
let i = Us(e), a = [], s = j.next(i, r), c = Date.now();
|
|
4971
|
+
for (; s.getTime() < c && a.length < 1e3;) a.push(s), s = j.next(i, s);
|
|
4961
4972
|
if (a.length !== 0) if (o.info("schedule: backfill", {
|
|
4962
4973
|
name: e.name,
|
|
4963
4974
|
missed: a.length,
|
|
@@ -4967,20 +4978,20 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
4967
4978
|
let n = a[a.length - 1];
|
|
4968
4979
|
await x(e, n, e.trigger ?? t.defaultTrigger);
|
|
4969
4980
|
} else for (let n of a) await x(e, n, e.trigger ?? t.defaultTrigger);
|
|
4970
|
-
},
|
|
4981
|
+
}, w = e.filter((e) => (e.trigger ?? t.defaultTrigger) === "self");
|
|
4971
4982
|
o.info("scheduler: starting", {
|
|
4972
4983
|
total: e.length,
|
|
4973
|
-
self:
|
|
4974
|
-
external: e.length -
|
|
4984
|
+
self: w.length,
|
|
4985
|
+
external: e.length - w.length,
|
|
4975
4986
|
coordinator: r.kind
|
|
4976
4987
|
});
|
|
4977
|
-
let
|
|
4988
|
+
let re = (t.armSelf ?? !0) && !l;
|
|
4978
4989
|
if (l) {
|
|
4979
|
-
o.info("scheduler: sleep mode — registering wakeups, not arming timers", { count:
|
|
4980
|
-
for (let e of
|
|
4981
|
-
} else if (
|
|
4982
|
-
for (let e of
|
|
4983
|
-
for (let e of
|
|
4990
|
+
o.info("scheduler: sleep mode — registering wakeups, not arming timers", { count: w.length });
|
|
4991
|
+
for (let e of w) await C(e);
|
|
4992
|
+
} else if (re) {
|
|
4993
|
+
for (let e of w) await ne(e);
|
|
4994
|
+
for (let e of w) te(e);
|
|
4984
4995
|
}
|
|
4985
4996
|
return {
|
|
4986
4997
|
fireNow: async (e, t) => {
|
|
@@ -5001,11 +5012,11 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5001
5012
|
d.clear(), o.info("scheduler: stopped");
|
|
5002
5013
|
}
|
|
5003
5014
|
};
|
|
5004
|
-
}, Q = (e) => e?.message ?? String(e),
|
|
5015
|
+
}, Q = (e) => e?.message ?? String(e), fc = (e) => e && typeof e == "object" && "_tag" in e ? String(e._tag) : null, pc = (e) => {
|
|
5005
5016
|
let t = {};
|
|
5006
5017
|
for (let [n, r] of Object.entries(e)) t[n] = r instanceof Date ? r.toISOString() : r;
|
|
5007
5018
|
return t;
|
|
5008
|
-
},
|
|
5019
|
+
}, mc = (e, t, n, r) => {
|
|
5009
5020
|
let i = !1, a, o = async () => {
|
|
5010
5021
|
if (i) return;
|
|
5011
5022
|
let a = new Date(Math.floor(Date.now() / t) * t), o = !1;
|
|
@@ -5035,96 +5046,96 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5035
5046
|
i || (i = !0, a && clearInterval(a), a = void 0);
|
|
5036
5047
|
}
|
|
5037
5048
|
};
|
|
5038
|
-
},
|
|
5049
|
+
}, hc = (e) => (t, n, r) => mc(t, n, r, e), gc = T("_voltro_schedule_runs", {
|
|
5039
5050
|
id: v({ prefix: "schrun" }),
|
|
5040
|
-
name:
|
|
5041
|
-
status:
|
|
5051
|
+
name: E(),
|
|
5052
|
+
status: E().oneOf([
|
|
5042
5053
|
"running",
|
|
5043
5054
|
"succeeded",
|
|
5044
5055
|
"failed",
|
|
5045
5056
|
"skipped",
|
|
5046
5057
|
"missed"
|
|
5047
5058
|
]).default("running"),
|
|
5048
|
-
trigger:
|
|
5059
|
+
trigger: E().oneOf([
|
|
5049
5060
|
"self",
|
|
5050
5061
|
"external",
|
|
5051
5062
|
"manual"
|
|
5052
5063
|
]).default("self"),
|
|
5053
|
-
scheduledAt:
|
|
5054
|
-
firedAt:
|
|
5055
|
-
completedAt:
|
|
5064
|
+
scheduledAt: D(),
|
|
5065
|
+
firedAt: D().nullable(),
|
|
5066
|
+
completedAt: D().nullable(),
|
|
5056
5067
|
durationMs: b().nullable(),
|
|
5057
|
-
errorTag:
|
|
5058
|
-
errorMessage:
|
|
5059
|
-
coordinationOutcome:
|
|
5068
|
+
errorTag: E().nullable(),
|
|
5069
|
+
errorMessage: E().nullable(),
|
|
5070
|
+
coordinationOutcome: E().oneOf([
|
|
5060
5071
|
"single",
|
|
5061
5072
|
"wonLock",
|
|
5062
5073
|
"lostLock",
|
|
5063
5074
|
"external",
|
|
5064
5075
|
"cluster"
|
|
5065
5076
|
]).nullable(),
|
|
5066
|
-
replicaId:
|
|
5077
|
+
replicaId: E().nullable(),
|
|
5067
5078
|
result: C().nullable()
|
|
5068
|
-
}).index(["name", "scheduledAt"]).index(["status"]),
|
|
5079
|
+
}).index(["name", "scheduledAt"]).index(["status"]), _c = T("_voltro_schedule_claims", {
|
|
5069
5080
|
id: v({ prefix: "schclaim" }),
|
|
5070
|
-
scheduleName:
|
|
5071
|
-
bucket:
|
|
5072
|
-
claimedBy:
|
|
5073
|
-
claimedAt:
|
|
5074
|
-
}).index(["scheduleName", "bucket"]).index(["claimedAt"]),
|
|
5081
|
+
scheduleName: E(),
|
|
5082
|
+
bucket: E(),
|
|
5083
|
+
claimedBy: E(),
|
|
5084
|
+
claimedAt: D()
|
|
5085
|
+
}).index(["scheduleName", "bucket"]).index(["claimedAt"]), vc = T("_voltro_traces", {
|
|
5075
5086
|
id: v({ prefix: "span" }),
|
|
5076
|
-
traceId:
|
|
5077
|
-
spanId:
|
|
5078
|
-
parentSpanId:
|
|
5079
|
-
name:
|
|
5080
|
-
kind:
|
|
5087
|
+
traceId: E(),
|
|
5088
|
+
spanId: E(),
|
|
5089
|
+
parentSpanId: E().nullable(),
|
|
5090
|
+
name: E(),
|
|
5091
|
+
kind: E().oneOf([
|
|
5081
5092
|
"internal",
|
|
5082
5093
|
"server",
|
|
5083
5094
|
"client",
|
|
5084
5095
|
"producer",
|
|
5085
5096
|
"consumer"
|
|
5086
5097
|
]).default("internal"),
|
|
5087
|
-
status:
|
|
5098
|
+
status: E().oneOf([
|
|
5088
5099
|
"ok",
|
|
5089
5100
|
"error",
|
|
5090
5101
|
"unset"
|
|
5091
5102
|
]).default("unset"),
|
|
5092
|
-
statusMessage:
|
|
5093
|
-
startedAt:
|
|
5094
|
-
endedAt:
|
|
5103
|
+
statusMessage: E().nullable(),
|
|
5104
|
+
startedAt: D(),
|
|
5105
|
+
endedAt: D(),
|
|
5095
5106
|
durationMs: b(),
|
|
5096
5107
|
attributes: C().nullable(),
|
|
5097
5108
|
events: C().nullable()
|
|
5098
|
-
}).index(["traceId", "startedAt"]).index(["startedAt"]).index(["status"]),
|
|
5109
|
+
}).index(["traceId", "startedAt"]).index(["startedAt"]).index(["status"]), yc = T("_voltro_undo_log", {
|
|
5099
5110
|
id: v({ prefix: "undo" }),
|
|
5100
|
-
tag:
|
|
5101
|
-
label:
|
|
5102
|
-
subjectId:
|
|
5103
|
-
tenantId:
|
|
5104
|
-
traceId:
|
|
5105
|
-
changes:
|
|
5111
|
+
tag: E(),
|
|
5112
|
+
label: E().nullable(),
|
|
5113
|
+
subjectId: E().nullable(),
|
|
5114
|
+
tenantId: E().nullable(),
|
|
5115
|
+
traceId: E().nullable(),
|
|
5116
|
+
changes: E(),
|
|
5106
5117
|
crossesAction: r().default(!1),
|
|
5107
5118
|
undone: r().default(!1),
|
|
5108
|
-
createdAt:
|
|
5109
|
-
}).index(["subjectId", "createdAt"]).reactive(),
|
|
5119
|
+
createdAt: D().default("now")
|
|
5120
|
+
}).index(["subjectId", "createdAt"]).reactive(), bc = (e = process.env) => {
|
|
5110
5121
|
let t = (e.VOLTRO_UNDO ?? "").toLowerCase();
|
|
5111
5122
|
return t === "on" || t === "1" || t === "true" ? !0 : t === "off" || t === "0" || t === "false" ? !1 : e.NODE_ENV !== "production";
|
|
5112
|
-
},
|
|
5123
|
+
}, xc = (e) => e.startsWith("_voltro"), Sc = async (e, t, n) => (await e.query({
|
|
5113
5124
|
table: t,
|
|
5114
5125
|
predicate: u("id", n),
|
|
5115
5126
|
order: []
|
|
5116
|
-
}))[0] ?? null,
|
|
5127
|
+
}))[0] ?? null, Cc = (e, t) => new Proxy(e, { get(e, n, r) {
|
|
5117
5128
|
if (n === "insert") return async (n, r) => {
|
|
5118
5129
|
let i = await e.insert(n, r);
|
|
5119
|
-
return
|
|
5130
|
+
return xc(n) || t({
|
|
5120
5131
|
table: n,
|
|
5121
5132
|
op: "insert",
|
|
5122
5133
|
next: i
|
|
5123
5134
|
}), i;
|
|
5124
5135
|
};
|
|
5125
5136
|
if (n === "update") return async (n, r, i) => {
|
|
5126
|
-
let a =
|
|
5127
|
-
return
|
|
5137
|
+
let a = xc(n) ? null : await Sc(e, n, r), o = await e.update(n, r, i);
|
|
5138
|
+
return xc(n) || t({
|
|
5128
5139
|
table: n,
|
|
5129
5140
|
op: "update",
|
|
5130
5141
|
id: r,
|
|
@@ -5133,8 +5144,8 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5133
5144
|
}), o;
|
|
5134
5145
|
};
|
|
5135
5146
|
if (n === "delete") return async (n, r) => {
|
|
5136
|
-
let i =
|
|
5137
|
-
return !
|
|
5147
|
+
let i = xc(n) ? null : await Sc(e, n, r), a = await e.delete(n, r);
|
|
5148
|
+
return !xc(n) && a && t({
|
|
5138
5149
|
table: n,
|
|
5139
5150
|
op: "delete",
|
|
5140
5151
|
id: r,
|
|
@@ -5143,10 +5154,10 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5143
5154
|
};
|
|
5144
5155
|
let i = Reflect.get(e, n, r);
|
|
5145
5156
|
return typeof i == "function" ? i.bind(e) : i;
|
|
5146
|
-
} }),
|
|
5157
|
+
} }), wc = (e) => {
|
|
5147
5158
|
let t = [];
|
|
5148
5159
|
return {
|
|
5149
|
-
tx:
|
|
5160
|
+
tx: Cc(e, (e) => t.push(e)),
|
|
5150
5161
|
persist: async (e, n) => {
|
|
5151
5162
|
if (t.length === 0 || n.tag.startsWith("__voltro")) return;
|
|
5152
5163
|
let r = n.subject;
|
|
@@ -5162,14 +5173,14 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5162
5173
|
});
|
|
5163
5174
|
}
|
|
5164
5175
|
};
|
|
5165
|
-
},
|
|
5176
|
+
}, Tc = (e) => {
|
|
5166
5177
|
if (e.id !== void 0) return e.id;
|
|
5167
5178
|
let t = e.next?.id;
|
|
5168
5179
|
if (typeof t == "string") return t;
|
|
5169
5180
|
let n = e.prev?.id;
|
|
5170
5181
|
return typeof n == "string" ? n : void 0;
|
|
5171
|
-
},
|
|
5172
|
-
let t =
|
|
5182
|
+
}, Ec = (e) => {
|
|
5183
|
+
let t = Tc(e);
|
|
5173
5184
|
switch (e.op) {
|
|
5174
5185
|
case "insert": return t === void 0 ? null : {
|
|
5175
5186
|
table: e.table,
|
|
@@ -5193,28 +5204,28 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5193
5204
|
row: e.prev
|
|
5194
5205
|
};
|
|
5195
5206
|
}
|
|
5196
|
-
},
|
|
5197
|
-
if (e.crossesAction) throw new
|
|
5207
|
+
}, Dc = (e) => {
|
|
5208
|
+
if (e.crossesAction) throw new Oc(e.invocationId, "action");
|
|
5198
5209
|
let t = [];
|
|
5199
5210
|
for (let n = e.changes.length - 1; n >= 0; --n) {
|
|
5200
|
-
let r =
|
|
5211
|
+
let r = Ec(e.changes[n]);
|
|
5201
5212
|
r !== null && t.push(r);
|
|
5202
5213
|
}
|
|
5203
5214
|
return t;
|
|
5204
|
-
},
|
|
5215
|
+
}, Oc = class extends Error {
|
|
5205
5216
|
invocationId;
|
|
5206
5217
|
boundary;
|
|
5207
5218
|
_tag = "UndoBoundaryError";
|
|
5208
5219
|
constructor(e, t) {
|
|
5209
5220
|
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";
|
|
5210
5221
|
}
|
|
5211
|
-
},
|
|
5222
|
+
}, kc = (e, t, n = ["updatedAt", "updatedBy"]) => {
|
|
5212
5223
|
if (t == null) return e == null;
|
|
5213
5224
|
if (e == null) return !1;
|
|
5214
5225
|
let r = new Set(n);
|
|
5215
5226
|
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;
|
|
5216
5227
|
return !0;
|
|
5217
|
-
},
|
|
5228
|
+
}, Ac = class {
|
|
5218
5229
|
capacity;
|
|
5219
5230
|
done = [];
|
|
5220
5231
|
undone = [];
|
|
@@ -5250,7 +5261,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5250
5261
|
redo: [...this.undone]
|
|
5251
5262
|
};
|
|
5252
5263
|
}
|
|
5253
|
-
},
|
|
5264
|
+
}, jc = (e, t = /* @__PURE__ */ new Set()) => e.op === "insert" ? {
|
|
5254
5265
|
table: e.table,
|
|
5255
5266
|
op: "insert",
|
|
5256
5267
|
next: e.new ?? null
|
|
@@ -5267,7 +5278,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5267
5278
|
table: e.table,
|
|
5268
5279
|
op: "delete",
|
|
5269
5280
|
prev: e.old ?? null
|
|
5270
|
-
},
|
|
5281
|
+
}, Mc = async (e, t) => {
|
|
5271
5282
|
switch (t.op) {
|
|
5272
5283
|
case "delete":
|
|
5273
5284
|
await e.delete(t.table, t.id);
|
|
@@ -5285,21 +5296,21 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5285
5296
|
await e.insert(t.table, t.row);
|
|
5286
5297
|
return;
|
|
5287
5298
|
}
|
|
5288
|
-
},
|
|
5289
|
-
for (let n of t) await
|
|
5290
|
-
},
|
|
5299
|
+
}, Nc = async (e, t) => {
|
|
5300
|
+
for (let n of t) await Mc(e, n);
|
|
5301
|
+
}, Pc = (e) => e.request?.subject?.id ?? null, Fc = (e) => e === !0 || e === 1, Ic = async (e, t, n) => (await e.query({
|
|
5291
5302
|
table: t,
|
|
5292
5303
|
predicate: u("id", n),
|
|
5293
5304
|
order: []
|
|
5294
|
-
}))[0] ?? null,
|
|
5305
|
+
}))[0] ?? null, Lc = (e) => {
|
|
5295
5306
|
try {
|
|
5296
5307
|
let t = JSON.parse(String(e ?? "[]"));
|
|
5297
5308
|
return Array.isArray(t) ? t : [];
|
|
5298
5309
|
} catch {
|
|
5299
5310
|
return [];
|
|
5300
5311
|
}
|
|
5301
|
-
},
|
|
5302
|
-
let n =
|
|
5312
|
+
}, Rc = (e) => e.id ?? e.next?.id ?? e.prev?.id, zc = async (e, t) => {
|
|
5313
|
+
let n = Pc(t);
|
|
5303
5314
|
return [...await t.store.query({
|
|
5304
5315
|
table: "_voltro_undo_log",
|
|
5305
5316
|
predicate: u("subjectId", n),
|
|
@@ -5308,68 +5319,68 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5308
5319
|
id: String(e.id),
|
|
5309
5320
|
tag: String(e.tag ?? ""),
|
|
5310
5321
|
label: e.label ?? null,
|
|
5311
|
-
undone:
|
|
5312
|
-
crossesAction:
|
|
5322
|
+
undone: Fc(e.undone),
|
|
5323
|
+
crossesAction: Fc(e.crossesAction),
|
|
5313
5324
|
createdAt: String(e.createdAt ?? "")
|
|
5314
5325
|
}));
|
|
5315
|
-
},
|
|
5316
|
-
let n = await
|
|
5317
|
-
if (!n) throw new
|
|
5318
|
-
if ((n.subjectId ?? null) !==
|
|
5326
|
+
}, Bc = async (e, t) => {
|
|
5327
|
+
let n = await Ic(t.store, "_voltro_undo_log", e.invocationId);
|
|
5328
|
+
if (!n) throw new Oe({ invocationId: e.invocationId });
|
|
5329
|
+
if ((n.subjectId ?? null) !== Pc(t)) throw new De({ invocationId: e.invocationId });
|
|
5319
5330
|
return n;
|
|
5320
|
-
},
|
|
5321
|
-
let n = await
|
|
5322
|
-
if (
|
|
5323
|
-
if (
|
|
5331
|
+
}, Vc = async (e, t) => {
|
|
5332
|
+
let n = await Bc(e, t);
|
|
5333
|
+
if (Fc(n.undone)) return { ok: !0 };
|
|
5334
|
+
if (Fc(n.crossesAction)) throw new Ee({
|
|
5324
5335
|
invocationId: e.invocationId,
|
|
5325
5336
|
reason: "action"
|
|
5326
5337
|
});
|
|
5327
|
-
let r =
|
|
5338
|
+
let r = Lc(n.changes);
|
|
5328
5339
|
for (let n of r) {
|
|
5329
|
-
let r =
|
|
5330
|
-
if (r !== void 0 && !
|
|
5340
|
+
let r = Rc(n);
|
|
5341
|
+
if (r !== void 0 && !kc(await Ic(t.store, n.table, r), n.next ?? null)) throw new Ee({
|
|
5331
5342
|
invocationId: e.invocationId,
|
|
5332
5343
|
reason: "conflict"
|
|
5333
5344
|
});
|
|
5334
5345
|
}
|
|
5335
5346
|
let i = {
|
|
5336
5347
|
invocationId: e.invocationId,
|
|
5337
|
-
subject:
|
|
5348
|
+
subject: Pc(t),
|
|
5338
5349
|
changes: r,
|
|
5339
5350
|
crossesAction: !1
|
|
5340
5351
|
};
|
|
5341
|
-
return await
|
|
5342
|
-
},
|
|
5343
|
-
let n = await
|
|
5344
|
-
if (!
|
|
5345
|
-
for (let e of
|
|
5346
|
-
let n =
|
|
5352
|
+
return await Nc(t.store, Dc(i)), await t.store.update("_voltro_undo_log", e.invocationId, { undone: !0 }), { ok: !0 };
|
|
5353
|
+
}, Hc = async (e, t) => {
|
|
5354
|
+
let n = await Bc(e, t);
|
|
5355
|
+
if (!Fc(n.undone)) return { ok: !0 };
|
|
5356
|
+
for (let e of Lc(n.changes)) {
|
|
5357
|
+
let n = Rc(e);
|
|
5347
5358
|
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);
|
|
5348
5359
|
}
|
|
5349
5360
|
return await t.store.update("_voltro_undo_log", e.invocationId, { undone: !1 }), { ok: !0 };
|
|
5350
|
-
},
|
|
5361
|
+
}, Uc = (e = process.env) => {
|
|
5351
5362
|
let t = (e.VOLTRO_TIMELINE ?? "").toLowerCase();
|
|
5352
5363
|
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";
|
|
5353
|
-
},
|
|
5364
|
+
}, Wc = /pass(word)?|secret|token|api[_-]?key|authorization|cookie|ssn|credit[_-]?card|card[_-]?number|cvv|encrypted/i, Gc = "«redacted»", Kc = (e) => {
|
|
5354
5365
|
if (e == null) return null;
|
|
5355
5366
|
let t = {};
|
|
5356
|
-
for (let [n, r] of Object.entries(e)) t[n] =
|
|
5367
|
+
for (let [n, r] of Object.entries(e)) t[n] = Wc.test(n) ? Gc : r;
|
|
5357
5368
|
return t;
|
|
5358
|
-
},
|
|
5369
|
+
}, qc = (e) => {
|
|
5359
5370
|
let t = e?.id;
|
|
5360
5371
|
return typeof t == "string" ? t : void 0;
|
|
5361
|
-
},
|
|
5372
|
+
}, Jc = (e, t) => {
|
|
5362
5373
|
if (t.op === "insert") {
|
|
5363
|
-
let n =
|
|
5374
|
+
let n = qc(t.new);
|
|
5364
5375
|
return n === void 0 ? e : e.filter((e) => e.id !== n);
|
|
5365
5376
|
}
|
|
5366
5377
|
if (t.op === "update") {
|
|
5367
5378
|
if (t.old == null) return e;
|
|
5368
|
-
let n =
|
|
5379
|
+
let n = qc(t.new) ?? qc(t.old);
|
|
5369
5380
|
return e.map((e) => e.id === n ? t.old : e);
|
|
5370
5381
|
}
|
|
5371
5382
|
return t.old == null ? e : [...e, t.old];
|
|
5372
|
-
},
|
|
5383
|
+
}, Yc = class {
|
|
5373
5384
|
mode;
|
|
5374
5385
|
capacity;
|
|
5375
5386
|
now;
|
|
@@ -5389,8 +5400,8 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5389
5400
|
ts: this.now(),
|
|
5390
5401
|
table: e.table,
|
|
5391
5402
|
op: e.op,
|
|
5392
|
-
old:
|
|
5393
|
-
new:
|
|
5403
|
+
old: Kc(e.old),
|
|
5404
|
+
new: Kc(e.new),
|
|
5394
5405
|
tenantId: n
|
|
5395
5406
|
}), this.ring.length > this.capacity && this.ring.shift(), t;
|
|
5396
5407
|
}
|
|
@@ -5403,23 +5414,23 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5403
5414
|
}
|
|
5404
5415
|
replay(e, t, n) {
|
|
5405
5416
|
let r = this.ring.filter((n) => n.table === e && n.seq > t).sort((e, t) => t.seq - e.seq), i = n;
|
|
5406
|
-
for (let e of r) i =
|
|
5417
|
+
for (let e of r) i = Jc(i, e);
|
|
5407
5418
|
return i;
|
|
5408
5419
|
}
|
|
5409
|
-
},
|
|
5410
|
-
|
|
5411
|
-
},
|
|
5412
|
-
let t =
|
|
5420
|
+
}, Xc, Zc = () => (Xc === void 0 && (Xc = new Yc(Uc())), Xc), Qc = (e) => {
|
|
5421
|
+
Xc = e;
|
|
5422
|
+
}, $c = (e) => {
|
|
5423
|
+
let t = Zc();
|
|
5413
5424
|
if (t.enabled) try {
|
|
5414
5425
|
t.record(e);
|
|
5415
5426
|
} catch {}
|
|
5416
|
-
},
|
|
5427
|
+
}, el = /* @__PURE__ */ new Set([
|
|
5417
5428
|
"count",
|
|
5418
5429
|
"sum",
|
|
5419
5430
|
"avg",
|
|
5420
5431
|
"min",
|
|
5421
5432
|
"max"
|
|
5422
|
-
]),
|
|
5433
|
+
]), tl = (e) => {
|
|
5423
5434
|
if (e.joins !== void 0 && e.joins.length > 0) return {
|
|
5424
5435
|
maintainable: !1,
|
|
5425
5436
|
reason: "joins are not maintainable in v1"
|
|
@@ -5441,7 +5452,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5441
5452
|
reason: "v1 maintains exactly one aggregation"
|
|
5442
5453
|
};
|
|
5443
5454
|
let t = e.aggregations[0];
|
|
5444
|
-
return
|
|
5455
|
+
return el.has(t.op) ? t.op !== "count" && (t.column === void 0 || t.column.length === 0) ? {
|
|
5445
5456
|
maintainable: !1,
|
|
5446
5457
|
reason: `op '${t.op}' requires a column`
|
|
5447
5458
|
} : {
|
|
@@ -5455,7 +5466,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5455
5466
|
maintainable: !1,
|
|
5456
5467
|
reason: `op '${t.op}' is not maintainable`
|
|
5457
5468
|
};
|
|
5458
|
-
},
|
|
5469
|
+
}, nl = "\0", $ = (e, t) => t === void 0 || t.length === 0 ? "" : t.map((t) => JSON.stringify(e[t] ?? null)).join(nl), rl = (e, t) => t === void 0 ? 0 : Number(e[t] ?? 0), il = (e, t) => {
|
|
5459
5470
|
switch (e.op) {
|
|
5460
5471
|
case "count": return t.count;
|
|
5461
5472
|
case "sum": return t.sum ?? 0;
|
|
@@ -5463,10 +5474,10 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5463
5474
|
case "min":
|
|
5464
5475
|
case "max": return t.count > 0 ? t.extreme ?? null : null;
|
|
5465
5476
|
}
|
|
5466
|
-
},
|
|
5477
|
+
}, al = (e, t) => {
|
|
5467
5478
|
let n = /* @__PURE__ */ new Map();
|
|
5468
5479
|
for (let r of t) {
|
|
5469
|
-
let t = $(r, e.groupBy), i = n.get(t), a =
|
|
5480
|
+
let t = $(r, e.groupBy), i = n.get(t), a = rl(r, e.column);
|
|
5470
5481
|
if (i === void 0) n.set(t, {
|
|
5471
5482
|
count: 1,
|
|
5472
5483
|
...e.op === "sum" || e.op === "avg" ? { sum: a } : {},
|
|
@@ -5482,10 +5493,10 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5482
5493
|
}
|
|
5483
5494
|
}
|
|
5484
5495
|
return n;
|
|
5485
|
-
},
|
|
5496
|
+
}, ol = (e, t) => [...t.entries()].map(([t, n]) => ({
|
|
5486
5497
|
groupKey: t,
|
|
5487
|
-
value:
|
|
5488
|
-
})),
|
|
5498
|
+
value: il(e, n)
|
|
5499
|
+
})), sl = (e, t, n) => {
|
|
5489
5500
|
let r = new Map(t), i = /* @__PURE__ */ new Set(), a = (t) => {
|
|
5490
5501
|
let n = $(t, e.groupBy), a = r.get(n);
|
|
5491
5502
|
if (a === void 0) return;
|
|
@@ -5494,7 +5505,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5494
5505
|
r.delete(n);
|
|
5495
5506
|
return;
|
|
5496
5507
|
}
|
|
5497
|
-
let s =
|
|
5508
|
+
let s = rl(t, e.column);
|
|
5498
5509
|
e.op === "min" || e.op === "max" ? (a.extreme !== void 0 && s === a.extreme && i.add(n), r.set(n, {
|
|
5499
5510
|
count: o,
|
|
5500
5511
|
...a.extreme === void 0 ? {} : { extreme: a.extreme }
|
|
@@ -5503,7 +5514,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5503
5514
|
...e.op === "sum" || e.op === "avg" ? { sum: (a.sum ?? 0) - s } : {}
|
|
5504
5515
|
});
|
|
5505
5516
|
}, o = (t) => {
|
|
5506
|
-
let n = $(t, e.groupBy), i = r.get(n), a =
|
|
5517
|
+
let n = $(t, e.groupBy), i = r.get(n), a = rl(t, e.column);
|
|
5507
5518
|
if (i === void 0) {
|
|
5508
5519
|
r.set(n, {
|
|
5509
5520
|
count: 1,
|
|
@@ -5523,15 +5534,15 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5523
5534
|
state: r,
|
|
5524
5535
|
rescanGroups: [...i]
|
|
5525
5536
|
};
|
|
5526
|
-
},
|
|
5537
|
+
}, cl = (e, t, n, r) => {
|
|
5527
5538
|
if (n.length === 0) return t;
|
|
5528
|
-
let i = new Set(n), a =
|
|
5539
|
+
let i = new Set(n), a = al(e, r.filter((t) => i.has($(t, e.groupBy)))), o = new Map(t);
|
|
5529
5540
|
for (let e of i) {
|
|
5530
5541
|
let t = a.get(e);
|
|
5531
5542
|
t === void 0 ? o.delete(e) : o.set(e, t);
|
|
5532
5543
|
}
|
|
5533
5544
|
return o;
|
|
5534
|
-
},
|
|
5545
|
+
}, ll = class {
|
|
5535
5546
|
shape;
|
|
5536
5547
|
state = /* @__PURE__ */ new Map();
|
|
5537
5548
|
groups = /* @__PURE__ */ new Map();
|
|
@@ -5539,7 +5550,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5539
5550
|
this.shape = e;
|
|
5540
5551
|
}
|
|
5541
5552
|
seed(e) {
|
|
5542
|
-
this.state =
|
|
5553
|
+
this.state = al(this.shape, e), this.groups.clear();
|
|
5543
5554
|
for (let t of e) {
|
|
5544
5555
|
let e = $(t, this.shape.groupBy);
|
|
5545
5556
|
this.groups.has(e) || this.groups.set(e, this.groupValues(t));
|
|
@@ -5551,14 +5562,14 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5551
5562
|
let e = $(t, this.shape.groupBy);
|
|
5552
5563
|
this.groups.has(e) || this.groups.set(e, this.groupValues(t));
|
|
5553
5564
|
}
|
|
5554
|
-
let n =
|
|
5565
|
+
let n = sl(this.shape, this.state, e);
|
|
5555
5566
|
this.state = n.state;
|
|
5556
5567
|
for (let e of this.groups.keys()) this.state.has(e) || this.groups.delete(e);
|
|
5557
5568
|
return n.rescanGroups;
|
|
5558
5569
|
}
|
|
5559
5570
|
resolveRescan(e, t) {
|
|
5560
5571
|
if (e.length === 0) return;
|
|
5561
|
-
this.state =
|
|
5572
|
+
this.state = cl(this.shape, this.state, e, t);
|
|
5562
5573
|
let n = new Set(e);
|
|
5563
5574
|
for (let e of t) {
|
|
5564
5575
|
let t = $(e, this.shape.groupBy);
|
|
@@ -5567,7 +5578,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5567
5578
|
for (let e of n) this.state.has(e) || this.groups.delete(e);
|
|
5568
5579
|
}
|
|
5569
5580
|
materialize() {
|
|
5570
|
-
return
|
|
5581
|
+
return ol(this.shape, this.state).map((e) => ({
|
|
5571
5582
|
groupKey: e.groupKey,
|
|
5572
5583
|
group: this.groups.get(e.groupKey) ?? {},
|
|
5573
5584
|
value: e.value
|
|
@@ -5580,19 +5591,19 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5580
5591
|
for (let r of t) n[r] = e[r];
|
|
5581
5592
|
return n;
|
|
5582
5593
|
}
|
|
5583
|
-
},
|
|
5594
|
+
}, ul = T("_voltro_rebac_tuples", {
|
|
5584
5595
|
id: v({ prefix: "rbct" }),
|
|
5585
|
-
subjectId:
|
|
5586
|
-
relation:
|
|
5587
|
-
resourceType:
|
|
5588
|
-
resourceId:
|
|
5589
|
-
tenantId:
|
|
5590
|
-
createdAt:
|
|
5596
|
+
subjectId: E(),
|
|
5597
|
+
relation: E(),
|
|
5598
|
+
resourceType: E(),
|
|
5599
|
+
resourceId: E(),
|
|
5600
|
+
tenantId: E().nullable(),
|
|
5601
|
+
createdAt: D().default("now")
|
|
5591
5602
|
}).index([
|
|
5592
5603
|
"subjectId",
|
|
5593
5604
|
"resourceType",
|
|
5594
5605
|
"resourceId"
|
|
5595
|
-
]).reactive(),
|
|
5606
|
+
]).reactive(), dl = async (e, n, r, i) => n === null ? [] : (await e.query({
|
|
5596
5607
|
table: "_voltro_rebac_tuples",
|
|
5597
5608
|
predicate: t(u("subjectId", n), u("resourceType", r), u("resourceId", i)),
|
|
5598
5609
|
order: [],
|
|
@@ -5604,16 +5615,16 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5604
5615
|
relation: e.relation,
|
|
5605
5616
|
resourceType: e.resourceType,
|
|
5606
5617
|
resourceId: e.resourceId
|
|
5607
|
-
})),
|
|
5618
|
+
})), fl = (e) => ({
|
|
5608
5619
|
id: e.id,
|
|
5609
5620
|
tenantId: e.tenantId,
|
|
5610
5621
|
...e.scopes === void 0 ? {} : { scopes: e.scopes }
|
|
5611
|
-
}),
|
|
5612
|
-
let n = t.getPolicy ??
|
|
5622
|
+
}), pl = (e, t) => {
|
|
5623
|
+
let n = t.getPolicy ?? Ho;
|
|
5613
5624
|
return (r, i) => {
|
|
5614
5625
|
let a = e[i.tag];
|
|
5615
5626
|
if (a === void 0) return r;
|
|
5616
|
-
let o = n(a.resourceType), s = (e) => M.fail(new
|
|
5627
|
+
let o = n(a.resourceType), s = (e) => M.fail(new zo({
|
|
5617
5628
|
action: a.action,
|
|
5618
5629
|
resourceType: a.resourceType,
|
|
5619
5630
|
resourceId: e
|
|
@@ -5621,17 +5632,17 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5621
5632
|
if (o === void 0) return s("");
|
|
5622
5633
|
let c = a.resourceId(i.input);
|
|
5623
5634
|
if (c === null || c === "") return s("");
|
|
5624
|
-
let l =
|
|
5635
|
+
let l = fl(i.subject), u = {
|
|
5625
5636
|
type: a.resourceType,
|
|
5626
5637
|
id: c,
|
|
5627
5638
|
tenantId: i.subject.tenantId
|
|
5628
5639
|
};
|
|
5629
|
-
return M.flatMap(M.promise(async () => t.loadTuples(l.id, a.resourceType, c)), (e) =>
|
|
5640
|
+
return M.flatMap(M.promise(async () => t.loadTuples(l.id, a.resourceType, c)), (e) => Jo(l, a.action, u, {
|
|
5630
5641
|
policy: o,
|
|
5631
5642
|
tuples: e
|
|
5632
5643
|
}) ? r : s(c));
|
|
5633
5644
|
};
|
|
5634
|
-
},
|
|
5645
|
+
}, ml = async (e, n, r) => n === null ? [] : (await e.query({
|
|
5635
5646
|
table: "_voltro_rebac_tuples",
|
|
5636
5647
|
predicate: t(u("subjectId", n), u("resourceType", r)),
|
|
5637
5648
|
order: [],
|
|
@@ -5643,18 +5654,18 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5643
5654
|
relation: e.relation,
|
|
5644
5655
|
resourceType: e.resourceType,
|
|
5645
5656
|
resourceId: e.resourceId
|
|
5646
|
-
})),
|
|
5647
|
-
let t = e.getPolicy ??
|
|
5657
|
+
})), hl = (e) => {
|
|
5658
|
+
let t = e.getPolicy ?? Ho;
|
|
5648
5659
|
return async (n, r, i, a) => {
|
|
5649
5660
|
let o = t(r);
|
|
5650
5661
|
if (o === void 0) return [];
|
|
5651
|
-
let s =
|
|
5652
|
-
return
|
|
5662
|
+
let s = fl(n);
|
|
5663
|
+
return Xo(s, i, r, a, {
|
|
5653
5664
|
policy: o,
|
|
5654
5665
|
tuples: await e.loadSubjectTuples(s.id, r)
|
|
5655
5666
|
});
|
|
5656
5667
|
};
|
|
5657
|
-
},
|
|
5668
|
+
}, gl = (e) => {
|
|
5658
5669
|
if (typeof e.name != "string" || e.name.length === 0) throw Error("defineReaction: a non-empty `name` is required");
|
|
5659
5670
|
if (e.watch === void 0 || typeof e.watch.table != "string" || e.watch.table.length === 0) throw Error(`reaction '${e.name}': watch.table is required`);
|
|
5660
5671
|
if (e.act === void 0 || e.act.kind !== "agent" && e.act.kind !== "workflow") throw Error(`reaction '${e.name}': act must be { kind: 'agent' | 'workflow', … }`);
|
|
@@ -5662,14 +5673,14 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5662
5673
|
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`);
|
|
5663
5674
|
if (e.guards.costBudgetUsd !== void 0 && e.guards.costBudgetUsd < 0) throw Error(`reaction '${e.name}': guards.costBudgetUsd must be >= 0`);
|
|
5664
5675
|
return e;
|
|
5665
|
-
},
|
|
5676
|
+
}, _l = (e, t) => e === void 0 ? !0 : Array.isArray(e) ? e.includes(t) : e === t, vl = (e) => e.new?.tenantId ?? e.old?.tenantId ?? null, yl = class {
|
|
5666
5677
|
hits = /* @__PURE__ */ new Map();
|
|
5667
5678
|
allow(e, t, n, r) {
|
|
5668
5679
|
let i = r - n, a = (this.hits.get(e) ?? []).filter((e) => e > i);
|
|
5669
5680
|
return a.length >= t ? (this.hits.set(e, a), !1) : (a.push(r), this.hits.set(e, a), !0);
|
|
5670
5681
|
}
|
|
5671
|
-
},
|
|
5672
|
-
if (t.table !== e.watch.table || !
|
|
5682
|
+
}, bl = async (e, t, n) => {
|
|
5683
|
+
if (t.table !== e.watch.table || !_l(e.watch.on, t.op)) return "skipped-op";
|
|
5673
5684
|
if (e.when !== void 0 && !e.when(t)) return "skipped-when";
|
|
5674
5685
|
let r = `${e.name}:${e.guards.dedupeKey(t)}`;
|
|
5675
5686
|
if (await n.dedupe.has(r)) return "skipped-dedupe";
|
|
@@ -5678,26 +5689,26 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5678
5689
|
let t = n.now?.() ?? Date.now();
|
|
5679
5690
|
if (!n.rateLimiter.allow(e.name, i.limit, i.windowMs, t)) return "skipped-ratelimit";
|
|
5680
5691
|
}
|
|
5681
|
-
let a =
|
|
5692
|
+
let a = vl(t);
|
|
5682
5693
|
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, {
|
|
5683
5694
|
id: a,
|
|
5684
5695
|
via: "agent"
|
|
5685
5696
|
}), await n.dedupe.add(r), "acted");
|
|
5686
|
-
},
|
|
5697
|
+
}, xl = T("_voltro_wakeups", {
|
|
5687
5698
|
id: v({ prefix: "wakeup" }),
|
|
5688
|
-
tenantId:
|
|
5689
|
-
kind:
|
|
5690
|
-
refId:
|
|
5691
|
-
wakeAt:
|
|
5692
|
-
status:
|
|
5693
|
-
}).index(["status", "wakeAt"]).index(["tenantId"]),
|
|
5694
|
-
let t = e.now?.() ?? /* @__PURE__ */ new Date(), n = await
|
|
5699
|
+
tenantId: E(),
|
|
5700
|
+
kind: E(),
|
|
5701
|
+
refId: E(),
|
|
5702
|
+
wakeAt: D(),
|
|
5703
|
+
status: E()
|
|
5704
|
+
}).index(["status", "wakeAt"]).index(["tenantId"]), Sl = async (e) => {
|
|
5705
|
+
let t = e.now?.() ?? /* @__PURE__ */ new Date(), n = await tc(e.store, t, e.batchLimit ?? 100);
|
|
5695
5706
|
if (n.length === 0) return 0;
|
|
5696
5707
|
let r = 0;
|
|
5697
|
-
for (let t of n) if (await
|
|
5708
|
+
for (let t of n) if (await Zs(e.store, t)) try {
|
|
5698
5709
|
await e.adapter.wake(t), r++;
|
|
5699
5710
|
} catch (n) {
|
|
5700
|
-
await
|
|
5711
|
+
await Qs(e.store, t), e.log?.warn("wake: adapter failed — released for retry", {
|
|
5701
5712
|
tenantId: t.tenantId,
|
|
5702
5713
|
kind: t.kind,
|
|
5703
5714
|
refId: t.refId,
|
|
@@ -5705,11 +5716,11 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5705
5716
|
});
|
|
5706
5717
|
}
|
|
5707
5718
|
return r > 0 && e.log?.info("wake: woke due deployments", { count: r }), r;
|
|
5708
|
-
},
|
|
5719
|
+
}, Cl = (e, t = 1e3) => {
|
|
5709
5720
|
let n = !1, r, i = async () => {
|
|
5710
5721
|
if (!n) {
|
|
5711
5722
|
try {
|
|
5712
|
-
await
|
|
5723
|
+
await Sl(e);
|
|
5713
5724
|
} catch (t) {
|
|
5714
5725
|
e.log?.warn("wake: tick failed", { reason: t instanceof Error ? t.message : String(t) });
|
|
5715
5726
|
}
|
|
@@ -5719,10 +5730,10 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5719
5730
|
return i(), { stop: () => {
|
|
5720
5731
|
n = !0, r !== void 0 && clearTimeout(r);
|
|
5721
5732
|
} };
|
|
5722
|
-
},
|
|
5733
|
+
}, wl = (e) => ({ wake: async () => {
|
|
5723
5734
|
await e.start();
|
|
5724
|
-
} }),
|
|
5725
|
-
let t = e.fetchImpl ?? fetch, n = e.now ?? Date.now, r = e.sleep ??
|
|
5735
|
+
} }), Tl = (e) => new Promise((t) => setTimeout(t, e)), El = (e) => {
|
|
5736
|
+
let t = e.fetchImpl ?? fetch, n = e.now ?? Date.now, r = e.sleep ?? Tl, i = e.spawnImpl ?? Tt, 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 () => {
|
|
5726
5737
|
try {
|
|
5727
5738
|
let n = await t(e.healthUrl);
|
|
5728
5739
|
return d(n);
|
|
@@ -5776,11 +5787,11 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5776
5787
|
},
|
|
5777
5788
|
stop: m
|
|
5778
5789
|
};
|
|
5779
|
-
},
|
|
5790
|
+
}, Dl = async (e) => {
|
|
5780
5791
|
if (e.signals.connectedClients() > 0 || e.signals.inFlightRequests() > 0 || e.signals.activeWorkflowExecutions() > 0) return !1;
|
|
5781
|
-
let t = (e.now?.() ?? /* @__PURE__ */ new Date()).getTime() + (e.wakeLookaheadMs ?? 3e4), n = await
|
|
5792
|
+
let t = (e.now?.() ?? /* @__PURE__ */ new Date()).getTime() + (e.wakeLookaheadMs ?? 3e4), n = await nc(e.store);
|
|
5782
5793
|
return !(n !== null && n.wakeAt.getTime() <= t);
|
|
5783
|
-
},
|
|
5794
|
+
}, Ol = (e, t = Date.now) => {
|
|
5784
5795
|
let n;
|
|
5785
5796
|
return {
|
|
5786
5797
|
update: (r) => {
|
|
@@ -5792,7 +5803,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5792
5803
|
n = void 0;
|
|
5793
5804
|
}
|
|
5794
5805
|
};
|
|
5795
|
-
},
|
|
5806
|
+
}, kl = () => {
|
|
5796
5807
|
let e = 0, t = 0;
|
|
5797
5808
|
return {
|
|
5798
5809
|
onRequestStart: () => {
|
|
@@ -5810,8 +5821,8 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5810
5821
|
inFlightRequests: () => e,
|
|
5811
5822
|
openConnections: () => t
|
|
5812
5823
|
};
|
|
5813
|
-
},
|
|
5814
|
-
let o =
|
|
5824
|
+
}, Al = (e) => ({ run: async (t) => (e.onActivity?.(), await e.ensureAwake(), t()) }), jl = (e, t, n, r) => new Promise((i, a) => {
|
|
5825
|
+
let o = Ze.request({
|
|
5815
5826
|
host: n,
|
|
5816
5827
|
port: r,
|
|
5817
5828
|
method: e.method,
|
|
@@ -5821,8 +5832,8 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5821
5832
|
t.writeHead(e.statusCode ?? 502, e.headers), e.pipe(t), e.on("end", i), e.on("error", a);
|
|
5822
5833
|
});
|
|
5823
5834
|
o.on("error", a), e.pipe(o);
|
|
5824
|
-
}),
|
|
5825
|
-
let s =
|
|
5835
|
+
}), Ml = (e, t, n, r, i) => new Promise((a, o) => {
|
|
5836
|
+
let s = Ze.request({
|
|
5826
5837
|
host: r,
|
|
5827
5838
|
port: i,
|
|
5828
5839
|
method: e.method,
|
|
@@ -5836,21 +5847,21 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5836
5847
|
};
|
|
5837
5848
|
t.on("close", s), r.on("close", s), r.on("error", o);
|
|
5838
5849
|
}), s.on("error", o), s.end();
|
|
5839
|
-
}),
|
|
5840
|
-
let t =
|
|
5850
|
+
}), Nl = (e) => {
|
|
5851
|
+
let t = Al({
|
|
5841
5852
|
ensureAwake: () => e.supervisor.start(),
|
|
5842
5853
|
...e.onActivity === void 0 ? {} : { onActivity: e.onActivity }
|
|
5843
|
-
}), n = e.activity, r =
|
|
5844
|
-
n?.onRequestStart(), i.on("close", () => n?.onRequestEnd()), t.run(() =>
|
|
5854
|
+
}), n = e.activity, r = Ze.createServer((r, i) => {
|
|
5855
|
+
n?.onRequestStart(), i.on("close", () => n?.onRequestEnd()), t.run(() => jl(r, i, e.targetHost, e.targetPort)).catch((t) => {
|
|
5845
5856
|
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");
|
|
5846
5857
|
});
|
|
5847
5858
|
});
|
|
5848
5859
|
return r.on("upgrade", (r, i, a) => {
|
|
5849
|
-
n?.onConnect(), i.on("close", () => n?.onDisconnect()), t.run(() =>
|
|
5860
|
+
n?.onConnect(), i.on("close", () => n?.onDisconnect()), t.run(() => Ml(r, i, a, e.targetHost, e.targetPort)).catch((t) => {
|
|
5850
5861
|
e.log?.warn("wake-router: upgrade proxy failed", { reason: t instanceof Error ? t.message : String(t) }), i.destroy();
|
|
5851
5862
|
});
|
|
5852
5863
|
}), r;
|
|
5853
|
-
},
|
|
5864
|
+
}, Pl = async (e) => {
|
|
5854
5865
|
try {
|
|
5855
5866
|
return (await e.query({
|
|
5856
5867
|
table: "_voltro_workflow_runs",
|
|
@@ -5867,15 +5878,15 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5867
5878
|
} catch {
|
|
5868
5879
|
return 0;
|
|
5869
5880
|
}
|
|
5870
|
-
},
|
|
5871
|
-
let t =
|
|
5881
|
+
}, Fl = async (e) => {
|
|
5882
|
+
let t = wl(e.supervisor), n = await Sl({
|
|
5872
5883
|
store: e.store,
|
|
5873
5884
|
adapter: t,
|
|
5874
5885
|
...e.now === void 0 ? {} : { now: e.now },
|
|
5875
5886
|
...e.log === void 0 ? {} : { log: e.log }
|
|
5876
5887
|
});
|
|
5877
5888
|
n > 0 && e.idleGate.reset();
|
|
5878
|
-
let r = await
|
|
5889
|
+
let r = await Dl({
|
|
5879
5890
|
store: e.store,
|
|
5880
5891
|
signals: e.signals,
|
|
5881
5892
|
...e.wakeLookaheadMs === void 0 ? {} : { wakeLookaheadMs: e.wakeLookaheadMs },
|
|
@@ -5885,12 +5896,12 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5885
5896
|
woke: n,
|
|
5886
5897
|
stopped: i
|
|
5887
5898
|
};
|
|
5888
|
-
},
|
|
5889
|
-
let t =
|
|
5899
|
+
}, Il = async (e) => {
|
|
5900
|
+
let t = Ol(e.idleGraceMs ?? 6e4), n = e.tickMs ?? 1e3, r = kl(), i = 0, a = e.signals === void 0, o = e.signals ?? {
|
|
5890
5901
|
connectedClients: () => r.openConnections(),
|
|
5891
5902
|
inFlightRequests: () => r.inFlightRequests(),
|
|
5892
5903
|
activeWorkflowExecutions: () => i
|
|
5893
|
-
}, s =
|
|
5904
|
+
}, s = Nl({
|
|
5894
5905
|
supervisor: e.supervisor,
|
|
5895
5906
|
targetHost: e.targetHost,
|
|
5896
5907
|
targetPort: e.targetPort,
|
|
@@ -5909,7 +5920,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5909
5920
|
let l = !1, u, d = e.firedRetentionMs ?? 10 * 6e4, f = 0, p = async () => {
|
|
5910
5921
|
if (!l) {
|
|
5911
5922
|
try {
|
|
5912
|
-
if (a && (i = await
|
|
5923
|
+
if (a && (i = await Pl(e.store)), await Fl({
|
|
5913
5924
|
store: e.store,
|
|
5914
5925
|
supervisor: e.supervisor,
|
|
5915
5926
|
signals: o,
|
|
@@ -5917,7 +5928,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5917
5928
|
...e.wakeLookaheadMs === void 0 ? {} : { wakeLookaheadMs: e.wakeLookaheadMs },
|
|
5918
5929
|
...e.log === void 0 ? {} : { log: e.log }
|
|
5919
5930
|
}), f++ % 60 == 0) {
|
|
5920
|
-
let t = await
|
|
5931
|
+
let t = await ic(e.store, { firedOlderThan: new Date(Date.now() - d) });
|
|
5921
5932
|
t > 0 && e.log?.info("orchestrator: pruned fired wakeups", { count: t });
|
|
5922
5933
|
}
|
|
5923
5934
|
} catch (t) {
|
|
@@ -5932,14 +5943,14 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5932
5943
|
l = !0, u !== void 0 && clearTimeout(u), await new Promise((e) => s.close(() => e()));
|
|
5933
5944
|
}
|
|
5934
5945
|
};
|
|
5935
|
-
},
|
|
5946
|
+
}, Ll = (e) => e, Rl = class extends L.TaggedError()("AnalyticsError", {
|
|
5936
5947
|
provider: L.String,
|
|
5937
5948
|
operation: L.String,
|
|
5938
5949
|
cause: L.String
|
|
5939
|
-
}) {},
|
|
5950
|
+
}) {}, zl = class extends L.TaggedError()("AnalyticsCapabilityNotSupported", {
|
|
5940
5951
|
provider: L.String,
|
|
5941
5952
|
capability: L.String
|
|
5942
|
-
}) {},
|
|
5953
|
+
}) {}, Bl = class extends Ve.Tag("@voltro/AnalyticsSink")() {}, Vl = (e, t) => ({
|
|
5943
5954
|
info: e.info,
|
|
5944
5955
|
track: (n) => e.track(n.tenantId === void 0 ? {
|
|
5945
5956
|
...n,
|
|
@@ -5958,20 +5969,20 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5958
5969
|
tenantId: t
|
|
5959
5970
|
} : n),
|
|
5960
5971
|
...e.mirror === void 0 ? {} : { mirror: e.mirror }
|
|
5961
|
-
}),
|
|
5962
|
-
let e = yield*
|
|
5972
|
+
}), Hl = () => M.gen(function* () {
|
|
5973
|
+
let e = yield* Bl, t = yield* M.serviceOption(Te), n = F.match(t, {
|
|
5963
5974
|
onNone: () => null,
|
|
5964
5975
|
onSome: (e) => e.tenantId ?? null
|
|
5965
5976
|
});
|
|
5966
|
-
return n === null ? e :
|
|
5967
|
-
}),
|
|
5968
|
-
let e = (e) => M.fail(new
|
|
5969
|
-
provider:
|
|
5977
|
+
return n === null ? e : Vl(e, n);
|
|
5978
|
+
}), Ul = "noop", Wl = () => {
|
|
5979
|
+
let e = (e) => M.fail(new zl({
|
|
5980
|
+
provider: Ul,
|
|
5970
5981
|
capability: e
|
|
5971
5982
|
}));
|
|
5972
5983
|
return {
|
|
5973
5984
|
info: {
|
|
5974
|
-
provider:
|
|
5985
|
+
provider: Ul,
|
|
5975
5986
|
capabilities: {
|
|
5976
5987
|
track: !0,
|
|
5977
5988
|
aggregate: !1,
|
|
@@ -5985,8 +5996,8 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
5985
5996
|
timeseries: () => e("timeseries"),
|
|
5986
5997
|
topN: () => e("topN")
|
|
5987
5998
|
};
|
|
5988
|
-
},
|
|
5989
|
-
if (e.length === 0) return
|
|
5999
|
+
}, Gl = (e) => {
|
|
6000
|
+
if (e.length === 0) return Wl();
|
|
5990
6001
|
if (e.length === 1) return e[0];
|
|
5991
6002
|
let t = {
|
|
5992
6003
|
provider: "compose",
|
|
@@ -6003,7 +6014,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
6003
6014
|
discard: !0
|
|
6004
6015
|
}), r = (t, n) => {
|
|
6005
6016
|
let r = e.find((e) => e.info.capabilities[t]);
|
|
6006
|
-
return r === void 0 ? M.fail(new
|
|
6017
|
+
return r === void 0 ? M.fail(new zl({
|
|
6007
6018
|
provider: "compose",
|
|
6008
6019
|
capability: t
|
|
6009
6020
|
})) : n(r);
|
|
@@ -6026,11 +6037,11 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
6026
6037
|
topN: (e) => r("topN", (t) => t.topN(e)),
|
|
6027
6038
|
...a === void 0 ? {} : { mirror: a }
|
|
6028
6039
|
};
|
|
6029
|
-
},
|
|
6040
|
+
}, Kl = (e) => {
|
|
6030
6041
|
let t = e.filter((e) => e.dispose !== void 0);
|
|
6031
6042
|
return {
|
|
6032
6043
|
kind: "compose",
|
|
6033
|
-
build: (t) =>
|
|
6044
|
+
build: (t) => Gl(e.map((e) => e.build(t))),
|
|
6034
6045
|
tables: e.flatMap((e) => e.tables ?? []),
|
|
6035
6046
|
initialize: (t) => M.forEach(e, (e) => e.initialize ? e.initialize(t) : M.void, {
|
|
6036
6047
|
concurrency: 1,
|
|
@@ -6041,15 +6052,15 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
6041
6052
|
discard: !0
|
|
6042
6053
|
}) } : {}
|
|
6043
6054
|
};
|
|
6044
|
-
},
|
|
6055
|
+
}, ql = {
|
|
6045
6056
|
kind: "noop",
|
|
6046
|
-
build: () =>
|
|
6047
|
-
},
|
|
6057
|
+
build: () => Wl()
|
|
6058
|
+
}, Jl = {
|
|
6048
6059
|
tables: [],
|
|
6049
6060
|
detach: () => {}
|
|
6050
|
-
},
|
|
6061
|
+
}, Yl = (e) => {
|
|
6051
6062
|
let { store: t, sink: n, log: r } = e, i = n.mirror;
|
|
6052
|
-
if (i === void 0 || i.tables.length === 0) return
|
|
6063
|
+
if (i === void 0 || i.tables.length === 0) return Jl;
|
|
6053
6064
|
let a = e.run ?? ((e) => M.runPromise(e)), o = i.primaryKey ?? "id", s = new Set(i.tables), c = (e) => {
|
|
6054
6065
|
if (e.op === "delete") {
|
|
6055
6066
|
let t = e.old;
|
|
@@ -6073,11 +6084,11 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
6073
6084
|
tables: i.tables,
|
|
6074
6085
|
detach: l
|
|
6075
6086
|
};
|
|
6076
|
-
},
|
|
6087
|
+
}, Xl = (e) => {
|
|
6077
6088
|
let t = typeof e.refresh == "string" ? { interval: e.refresh } : e.refresh, n = e.strategy ?? "replace";
|
|
6078
6089
|
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`);
|
|
6079
6090
|
if (e.incremental !== void 0) {
|
|
6080
|
-
let t =
|
|
6091
|
+
let t = tl({
|
|
6081
6092
|
aggregations: [{
|
|
6082
6093
|
op: e.incremental.op,
|
|
6083
6094
|
...e.incremental.column === void 0 ? {} : { column: e.incremental.column }
|
|
@@ -6099,47 +6110,47 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
6099
6110
|
build: e.build,
|
|
6100
6111
|
...e.incremental === void 0 ? {} : { incremental: e.incremental }
|
|
6101
6112
|
};
|
|
6102
|
-
},
|
|
6113
|
+
}, Zl = (e) => typeof e == "object" && !!e && e._voltroAggregate === !0, Ql = class extends L.TaggedError()("AggregateStale", {
|
|
6103
6114
|
name: L.String,
|
|
6104
6115
|
ageMs: L.Number,
|
|
6105
6116
|
maxAgeMs: L.Number
|
|
6106
|
-
}) {},
|
|
6117
|
+
}) {}, $l = class extends L.TaggedError()("AggregateNotFound", { name: L.String }) {}, eu = class extends L.TaggedError()("AggregateError", {
|
|
6107
6118
|
name: L.String,
|
|
6108
6119
|
operation: L.String,
|
|
6109
6120
|
cause: L.String
|
|
6110
|
-
}) {},
|
|
6111
|
-
return (yield*
|
|
6112
|
-
}),
|
|
6121
|
+
}) {}, tu = class extends Ve.Tag("@voltro/AggregateRegistry")() {}, nu = (e) => M.gen(function* () {
|
|
6122
|
+
return (yield* tu).getHandle(e);
|
|
6123
|
+
}), ru = (e, n, r) => {
|
|
6113
6124
|
if (e.crossTenant || !n.has(e.table) || r == null) return e;
|
|
6114
6125
|
let i = u("tenantId", r);
|
|
6115
6126
|
return {
|
|
6116
6127
|
...e,
|
|
6117
6128
|
predicate: e.predicate ? t(e.predicate, i) : i
|
|
6118
6129
|
};
|
|
6119
|
-
},
|
|
6130
|
+
}, iu = (e, n) => {
|
|
6120
6131
|
if (e.includeDeleted || !n.has(e.table)) return e;
|
|
6121
6132
|
let r = S("deletedAt");
|
|
6122
6133
|
return {
|
|
6123
6134
|
...e,
|
|
6124
6135
|
predicate: e.predicate ? t(e.predicate, r) : r
|
|
6125
6136
|
};
|
|
6126
|
-
},
|
|
6127
|
-
if (
|
|
6128
|
-
let t =
|
|
6129
|
-
throw F.isSome(t) ? t.value :
|
|
6130
|
-
}),
|
|
6131
|
-
let r = await M.runPromise(
|
|
6137
|
+
}, au = (e) => M.runPromiseExit(e).then((e) => {
|
|
6138
|
+
if (Ge.isSuccess(e)) return e.value;
|
|
6139
|
+
let t = A.failureOption(e.cause);
|
|
6140
|
+
throw F.isSome(t) ? t.value : A.squash(e.cause);
|
|
6141
|
+
}), ou = (e, t) => e.pipe(M.provideService(Te, t)), su = async (e, t, n) => {
|
|
6142
|
+
let r = await M.runPromise(Ae(t, e.guards, n));
|
|
6132
6143
|
if (r) throw r;
|
|
6133
|
-
},
|
|
6134
|
-
if (
|
|
6135
|
-
let t = await
|
|
6144
|
+
}, cu = async (e) => {
|
|
6145
|
+
if (Nn() === void 0) return e;
|
|
6146
|
+
let t = await au(Fn(e.subject, (e) => {
|
|
6136
6147
|
console.error("[voltro] row filter failed to load", e);
|
|
6137
6148
|
}));
|
|
6138
6149
|
return {
|
|
6139
6150
|
...e,
|
|
6140
6151
|
rowFilter: t
|
|
6141
6152
|
};
|
|
6142
|
-
},
|
|
6153
|
+
}, lu = async (e) => {
|
|
6143
6154
|
let t = `${e.kind}.${e.name}`, n = Date.now(), r = "ok";
|
|
6144
6155
|
try {
|
|
6145
6156
|
if (e.interceptor) {
|
|
@@ -6154,8 +6165,8 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
6154
6165
|
traceId: e.requestContext.traceId,
|
|
6155
6166
|
...e.requestContext.spanId === void 0 ? {} : { spanId: e.requestContext.spanId }
|
|
6156
6167
|
}), r = await M.runPromiseExit(n);
|
|
6157
|
-
if (
|
|
6158
|
-
throw
|
|
6168
|
+
if (Ge.isSuccess(r)) return r.value;
|
|
6169
|
+
throw A.squash(r.cause);
|
|
6159
6170
|
}
|
|
6160
6171
|
return await e.runExecutor();
|
|
6161
6172
|
} catch (e) {
|
|
@@ -6168,28 +6179,28 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
6168
6179
|
status: r
|
|
6169
6180
|
});
|
|
6170
6181
|
}
|
|
6171
|
-
},
|
|
6182
|
+
}, uu = /* @__PURE__ */ new Set([1213, 1205]), du = /* @__PURE__ */ new Set([
|
|
6172
6183
|
"ER_LOCK_DEADLOCK",
|
|
6173
6184
|
"ER_LOCK_WAIT_TIMEOUT",
|
|
6174
6185
|
"40001",
|
|
6175
6186
|
"40P01"
|
|
6176
|
-
]),
|
|
6187
|
+
]), fu = (e) => {
|
|
6177
6188
|
let t = e;
|
|
6178
6189
|
for (let e = 0; e < 6 && typeof t == "object" && t; e++) {
|
|
6179
6190
|
let e = t;
|
|
6180
|
-
if (typeof e.errno == "number" &&
|
|
6191
|
+
if (typeof e.errno == "number" && uu.has(e.errno) || typeof e.code == "string" && du.has(e.code) || typeof e.sqlState == "string" && du.has(e.sqlState)) return !0;
|
|
6181
6192
|
t = e.cause;
|
|
6182
6193
|
}
|
|
6183
6194
|
return !1;
|
|
6184
|
-
},
|
|
6185
|
-
let n = t?.delay ?? ((e) =>
|
|
6195
|
+
}, pu = 3, mu = (e) => new Promise((t) => setTimeout(t, e)), hu = async (e, t) => {
|
|
6196
|
+
let n = t?.delay ?? ((e) => mu(e * 20 + Math.floor(Math.random() * 30)));
|
|
6186
6197
|
for (let t = 1;; t++) try {
|
|
6187
6198
|
return await e();
|
|
6188
6199
|
} catch (e) {
|
|
6189
|
-
if (t >=
|
|
6200
|
+
if (t >= pu || !fu(e)) throw e;
|
|
6190
6201
|
await n(t);
|
|
6191
6202
|
}
|
|
6192
|
-
},
|
|
6203
|
+
}, gu = (e) => (t, n, r) => lu({
|
|
6193
6204
|
name: t.descriptor.name,
|
|
6194
6205
|
kind: "mutation",
|
|
6195
6206
|
input: n,
|
|
@@ -6197,11 +6208,11 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
6197
6208
|
...e.interceptor ? { interceptor: e.interceptor } : {},
|
|
6198
6209
|
...e.recordMetric ? { recordMetric: e.recordMetric } : {},
|
|
6199
6210
|
runExecutor: async () => {
|
|
6200
|
-
await
|
|
6201
|
-
let i = await
|
|
6211
|
+
await su(t.descriptor, r.subject, n);
|
|
6212
|
+
let i = await cu(r), a = [], o = await hu(async () => (a.length = 0, e.store.transactional(async (o) => {
|
|
6202
6213
|
let s = e.undoCapture?.(o), c = s ? s.tx : o, l = e.buildContext(i, c, { afterCommit: (e) => {
|
|
6203
6214
|
a.push(e);
|
|
6204
|
-
} }), u = t.executor(n, l), d = M.isEffect(u) ? await e.runEffect(
|
|
6215
|
+
} }), u = t.executor(n, l), d = M.isEffect(u) ? await e.runEffect(ou(u, r.subject), l.store) : await u;
|
|
6205
6216
|
return s && await s.persist(l.store, {
|
|
6206
6217
|
tag: t.descriptor.name,
|
|
6207
6218
|
subject: r.subject,
|
|
@@ -6211,33 +6222,33 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
6211
6222
|
for (let e of a) await e();
|
|
6212
6223
|
return o;
|
|
6213
6224
|
}
|
|
6214
|
-
}),
|
|
6225
|
+
}), _u = (e) => e && typeof e == "object" && "descriptor" in e ? e.descriptor : e, vu = (e) => typeof e == "object" && !!e && !Array.isArray(e) && "table" in e && "order" in e, yu = (e) => {
|
|
6215
6226
|
let t = e.descriptor.source;
|
|
6216
6227
|
return t == null ? [] : typeof t == "string" ? [t] : [...t];
|
|
6217
|
-
},
|
|
6228
|
+
}, bu = (e, t) => (n) => () => {
|
|
6218
6229
|
let r = e.descriptor.guards;
|
|
6219
|
-
return !r || r.length === 0 ? Promise.resolve(null) : M.runPromise(
|
|
6220
|
-
},
|
|
6221
|
-
let i = e.buildContext(r), a =
|
|
6230
|
+
return !r || r.length === 0 ? Promise.resolve(null) : M.runPromise(Ae(n, r, t));
|
|
6231
|
+
}, xu = (e) => (t, n) => (r) => {
|
|
6232
|
+
let i = e.buildContext(r), a = bu(t, n)(r.subject), o = async () => {
|
|
6222
6233
|
let i = await a();
|
|
6223
6234
|
if (i) throw i;
|
|
6224
|
-
let o = e.buildContext(await
|
|
6225
|
-
return M.isEffect(s) ? M.runPromise(e.provideEffect(
|
|
6235
|
+
let o = e.buildContext(await cu(r)), s = t.executor(n, o);
|
|
6236
|
+
return M.isEffect(s) ? M.runPromise(e.provideEffect(ou(s, r.subject), o.store)) : _u(await Promise.resolve(s));
|
|
6226
6237
|
}, s = (n) => {
|
|
6227
|
-
let i =
|
|
6228
|
-
return
|
|
6238
|
+
let i = _u(n);
|
|
6239
|
+
return vu(i) ? e.finalize(i, r) : {
|
|
6229
6240
|
__voltroComputed: !0,
|
|
6230
6241
|
value: i,
|
|
6231
|
-
dependentTables:
|
|
6242
|
+
dependentTables: yu(t),
|
|
6232
6243
|
tenantId: r.subject?.tenantId ?? null,
|
|
6233
6244
|
recompute: o
|
|
6234
6245
|
};
|
|
6235
6246
|
}, c = () => {
|
|
6236
6247
|
let a = t.executor(n, i);
|
|
6237
|
-
return M.isEffect(a) ? e.provideEffect(
|
|
6248
|
+
return M.isEffect(a) ? e.provideEffect(ou(a, r.subject), i.store).pipe(M.map(s)) : a instanceof Promise ? M.promise(() => a).pipe(M.map(s)) : s(a);
|
|
6238
6249
|
}, l = () => {
|
|
6239
6250
|
let e = t.descriptor.guards;
|
|
6240
|
-
return !e || e.length === 0 ? c() :
|
|
6251
|
+
return !e || e.length === 0 ? c() : Ae(r.subject, e, n).pipe(M.flatMap((e) => {
|
|
6241
6252
|
if (e) return M.fail(e);
|
|
6242
6253
|
let t = c();
|
|
6243
6254
|
return M.isEffect(t) ? t : M.succeed(t);
|
|
@@ -6256,7 +6267,7 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
6256
6267
|
traceId: r.traceId,
|
|
6257
6268
|
...r.spanId === void 0 ? {} : { spanId: r.spanId }
|
|
6258
6269
|
});
|
|
6259
|
-
},
|
|
6270
|
+
}, Su = (e) => (t, n, r) => lu({
|
|
6260
6271
|
name: t.descriptor.name,
|
|
6261
6272
|
kind: "action",
|
|
6262
6273
|
input: n,
|
|
@@ -6264,16 +6275,16 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
6264
6275
|
...e.interceptor ? { interceptor: e.interceptor } : {},
|
|
6265
6276
|
...e.recordMetric ? { recordMetric: e.recordMetric } : {},
|
|
6266
6277
|
runExecutor: async () => {
|
|
6267
|
-
await
|
|
6268
|
-
let i = e.buildContext(await
|
|
6269
|
-
return M.isEffect(a) ? e.runEffect(
|
|
6278
|
+
await su(t.descriptor, r.subject, n);
|
|
6279
|
+
let i = e.buildContext(await cu(r)), a = t.executor(n, i);
|
|
6280
|
+
return M.isEffect(a) ? e.runEffect(ou(a, r.subject), i.store) : a;
|
|
6270
6281
|
}
|
|
6271
|
-
}),
|
|
6282
|
+
}), Cu = (e) => e instanceof Date ? e.toISOString() : typeof e == "string" && e.length > 0 ? e : null, wu = (e) => typeof e == "string" && e.length > 0 ? e : null, Tu = [
|
|
6272
6283
|
"updatedAt",
|
|
6273
6284
|
"createdAt",
|
|
6274
6285
|
"updatedBy",
|
|
6275
6286
|
"createdBy"
|
|
6276
|
-
],
|
|
6287
|
+
], Eu = (e) => Tu.some((t) => t in e), Du = (e, t, n) => {
|
|
6277
6288
|
let r = {
|
|
6278
6289
|
table: t.table,
|
|
6279
6290
|
id: t.id,
|
|
@@ -6288,14 +6299,14 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
6288
6299
|
found: !1
|
|
6289
6300
|
};
|
|
6290
6301
|
let i = t.column === void 0 ? void 0 : e[t.column];
|
|
6291
|
-
if (!
|
|
6302
|
+
if (!Eu(e)) return {
|
|
6292
6303
|
...r,
|
|
6293
6304
|
value: i,
|
|
6294
6305
|
lastWrite: null,
|
|
6295
6306
|
attribution: "none",
|
|
6296
6307
|
found: !0
|
|
6297
6308
|
};
|
|
6298
|
-
let a =
|
|
6309
|
+
let a = wu(e.updatedBy) ?? wu(e.createdBy), o = Cu(e.updatedAt) ?? Cu(e.createdAt);
|
|
6299
6310
|
return {
|
|
6300
6311
|
...r,
|
|
6301
6312
|
value: i,
|
|
@@ -6307,12 +6318,12 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
6307
6318
|
attribution: "audit",
|
|
6308
6319
|
found: !0
|
|
6309
6320
|
};
|
|
6310
|
-
},
|
|
6321
|
+
}, Ou = (e, t) => {
|
|
6311
6322
|
let n = e.map((e) => {
|
|
6312
6323
|
let n = e.newValue ?? e.value, r = t.column !== void 0 && n && typeof n == "object" ? n[t.column] : e.newValue ?? e.value;
|
|
6313
6324
|
return {
|
|
6314
|
-
actor: { id:
|
|
6315
|
-
at:
|
|
6325
|
+
actor: { id: wu(e.actor) ?? wu(e.changedBy) },
|
|
6326
|
+
at: Cu(e.at) ?? Cu(e.changedAt),
|
|
6316
6327
|
...e.traceId === void 0 ? {} : { traceId: e.traceId },
|
|
6317
6328
|
value: r
|
|
6318
6329
|
};
|
|
@@ -6327,12 +6338,12 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
6327
6338
|
history: n,
|
|
6328
6339
|
found: n.length > 0
|
|
6329
6340
|
};
|
|
6330
|
-
},
|
|
6341
|
+
}, ku = (e) => {
|
|
6331
6342
|
let t = e.new?.id;
|
|
6332
6343
|
if (typeof t == "string") return t;
|
|
6333
6344
|
let n = e.old?.id;
|
|
6334
6345
|
return typeof n == "string" ? n : void 0;
|
|
6335
|
-
},
|
|
6346
|
+
}, Au = (e) => {
|
|
6336
6347
|
let t = {};
|
|
6337
6348
|
if (e.op === "insert") for (let [n, r] of Object.entries(e.new ?? {})) t[n] = {
|
|
6338
6349
|
from: void 0,
|
|
@@ -6352,11 +6363,11 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
6352
6363
|
return {
|
|
6353
6364
|
table: e.table,
|
|
6354
6365
|
op: e.op,
|
|
6355
|
-
id:
|
|
6366
|
+
id: ku(e),
|
|
6356
6367
|
fields: t
|
|
6357
6368
|
};
|
|
6358
|
-
},
|
|
6359
|
-
let t = e.map(
|
|
6369
|
+
}, ju = (e) => {
|
|
6370
|
+
let t = e.map(Au);
|
|
6360
6371
|
return {
|
|
6361
6372
|
rows: t,
|
|
6362
6373
|
summary: {
|
|
@@ -6365,21 +6376,21 @@ var K = /* @__PURE__ */ new Map(), Zn = (e, t) => {
|
|
|
6365
6376
|
deletes: t.filter((e) => e.op === "delete").length
|
|
6366
6377
|
}
|
|
6367
6378
|
};
|
|
6368
|
-
},
|
|
6379
|
+
}, Mu = class extends Error {
|
|
6369
6380
|
constructor() {
|
|
6370
6381
|
super("voltro:preview-rollback"), this.name = "PreviewRollback";
|
|
6371
6382
|
}
|
|
6372
|
-
},
|
|
6383
|
+
}, Nu = async (e, t) => {
|
|
6373
6384
|
let n, r = !1;
|
|
6374
6385
|
try {
|
|
6375
6386
|
await e.transactional(async (e) => {
|
|
6376
|
-
throw n = await t(e), r = !0, new
|
|
6387
|
+
throw n = await t(e), r = !0, new Mu();
|
|
6377
6388
|
});
|
|
6378
6389
|
} catch (e) {
|
|
6379
|
-
if (!(e instanceof
|
|
6390
|
+
if (!(e instanceof Mu)) throw e;
|
|
6380
6391
|
}
|
|
6381
6392
|
if (!r) throw Error("preview: handler did not complete");
|
|
6382
6393
|
return n;
|
|
6383
|
-
},
|
|
6394
|
+
}, Pu = "framework-runtime";
|
|
6384
6395
|
//#endregion
|
|
6385
|
-
export {
|
|
6396
|
+
export { ji as API_KEYS_TABLE, zo as AccessDenied, eu as AggregateError, ll as AggregateMaintainer, $l as AggregateNotFound, tu as AggregateRegistry, Ql as AggregateStale, zl as AnalyticsCapabilityNotSupported, Rl as AnalyticsError, Bl as AnalyticsSink, X as CONNECTIONS_TABLE, La as CONNECTION_GRANTS_TABLE, As as CircuitBreaker, Os as CircuitOpen, oo as ConnectionNotConnected, Br as DEFAULT_MAX_RPC_BODY_BYTES, io as DEFAULT_REFRESH_SKEW_MS, An as DEFAULT_ROW_FILTER_RETRY, oc as DORMANCY_WAKEUP_TENANT, bs as DeleteBuilder, Hn as Dispatcher, Ji as EffectStore, yo as GRANT_TTL_MS, Gt as InMemoryDataStore, Nt as IndexedMatcher, Et as LinearScanMatcher, qe as MetricBoundaries, Ul as NOOP_ANALYTICS_PROVIDER, Pn as NO_ROW_FILTER, ps as NoRowFound, Sa as OUTBOX_ATTEMPTS_TABLE, ka as OUTBOX_ATTEMPT_LOG_CAP, Y as OUTBOX_TABLE, ms as OptimisticLockError, Ro as REBAC_ADMIN_SCOPE, ao as REFRESH_LEASE_MS, Pu as RUNTIME_NAME, yl as ReactionRateLimiter, xr as ReplicatedDataStore, kn as RowFilterUnavailable, ac as SCHEDULE_SUBJECT, Wi as SYSTEM_SUBJECT, vs as SelectBuilder, Ki as StoreOperationFailed, It as SubscriptionRegistry, qi as TableValidationFailed, Gi as TenantScopeViolation, Yc as TimelineRecorder, Oc as UndoBoundaryError, Ac as UndoStack, ys as UpdateBuilder, os as VOLTRO_AUDIT_MIXIN_ID, ss as VOLTRO_SOFT_DELETE_MIXIN_ID, cs as VOLTRO_TENANT_MIXIN_ID, nr as _connectionStreamCount, rr as _resetConnectionSubjectsForTest, za as _voltroConnectionGrantsTable, Ia as _voltroConnectionsTable, ul as _voltroRebacTuplesTable, _c as _voltroScheduleClaimsTable, gc as _voltroScheduleRunsTable, vc as _voltroTracesTable, yc as _voltroUndoLogTable, xl as _voltroWakeupsTable, _a as _voltroWorkflowEventDeliveriesTable, ga as _voltroWorkflowEventsTable, Ui as apiKeyManagementRoutes, ws as applyDefined, sl as applyDelta, Mc as applyInverse, Nc as applyInverses, Rn as applyRowFilter, zn as applyRowFilterToDescriptor, iu as applySoftDeleteScope, ru as applyTenantScope, Vc as applyUndoInvocation, Yo as assertCan, Ua as assertConnectionCipherConfigured, Yl as attachAnalyticsMirror, Hr as awaitServerListening, Oa as backoffMs, Co as beginOAuthConnect, Yn as bindConnectionSubject, zr as bindMutation, jr as bindStream, Ar as bindSubscription, Or as bindSubscriptionUntyped, al as buildIvmState, ju as buildPreview, pl as buildRebacInterceptor, hl as buildRebacReadFilter, hr as buildSubjectKey, qr as buildTracingLayer, ci as cachedBackend, Jo as can, Js as cancelWakeup, tl as classifyShape, uo as clearConnectionRefreshFlights, Wo as clearResourcePolicies, i as clearRetentions, Ns as clearSystemStoreHandle, Us as compileCron, wo as completeOAuthConnect, Kl as composeAnalytics, Gl as composeAnalyticsSinks, bo as connectionCallbackPath, Ha as connectionLabel, ir as connectionSubjectsSnapshot, Pl as countRunningWorkflows, Cn as counter, br as currentRoutingContext, dr as currentTraceContext, Bi as dataStoreApiKeyStore, Ci as dataStoreIdempotencyStore, Oi as dataStoreKvStore, vi as decryptField, Xl as defineAggregate, Va as defineConnection, da as defineEventTrigger, Ta as defineOutboxHandler, gl as defineReaction, Vo as defineResourcePolicy, Hs as defineSchedule, Ll as defineSubscriber, Bn as deliveredRowCount, di as deriveKey, Au as diffChange, Na as drainOutbox, tc as dueWakeups, qo as effectiveRelations, fs as emptySchemaRegistry, q as encryptField, ni as envSecretsBackend, no as exchangeAuthorizationCode, cr as externalSpanFromTraceparent, qt as extractDbCause, Ft as fingerprintFor, Qa as forgetCredential, or as formatTraceparent, jc as forwardChangeFromCdc, Vi as frameworkApiKeyStrategy, wn as gauge, Ni as generateApiKeyToken, Oo as getConnectionResolver, Xn as getConnectionSubject, gi as getFieldCipher, Ho as getResourcePolicy, Nn as getRowFilter, Ps as getSystemStoreHandle, Zc as getTimelineRecorder, ts as getTupleSource, $ as groupKeyOf, Tn as histogramMetric, Ou as historyProvenance, li as httpSecretsBackend, Ct as inspectWorkflow, ns as installPolicyGuardResolver, tr as interruptConnectionStreams, Ec as invertChange, Zl as isAggregateDefinition, Jt as isForeignKeyViolation, Dl as isIdleNow, Ir as isInfraError, kc as isSafeToApply, Bs as isScheduleDefinition, fa as isWorkflowEventTriggerDefinition, il as ivmValue, Du as lastWriteProvenance, $a as listConnectionStates, Uo as listResourcePolicies, ee as listRetentions, dl as loadResourceTuples, ml as loadSubjectTuples, Is as localityAwareSelector, Su as makeActionRunner, lc as makeAdvisoryLockCoordinator, fi as makeAesCipher, Ii as makeApiKeyService, Yt as makeAppAccess, ki as makeAsyncKv, ti as makeBufferingSpanProcessor, Wa as makeConnectionRegistry, Ao as makeConnectionResolver, jo as makeConnectionsFacade, hc as makeCoordinatedScheduler, is as makeDataLoader, Lo as makeDisconnectConnectionExecutor, Zi as makeEffectStoreLayer, va as makeEventsFacade, pi as makeFieldCipher, xs as makeFluentStore, Ol as makeIdleGate, sa as makeLazyWorkflowFacade, Po as makeListConnectionsExecutor, gu as makeMutationRunner, Da as makeOutboxFacade, aa as makePostCommitWorkflowFacade, wl as makeProcessAdapter, xu as makeQueryDescriptorProducer, bu as makeQueryReauthorizer, kl as makeRouterActivity, ls as makeSchemaRegistry, Fo as makeStartConnectionExecutor, Io as makeSubmitTokenExecutor, wc as makeUndoCapture, Al as makeWakeGate, Nl as makeWakeProxyServer, ia as makeWorkflowFacade, oa as makeWorkflowFacadeWithCallerContext, ca as makeWorkflowHandlers, la as makeWorkflowLayers, ea as makeWorkflowRunHandle, Ys as markWakeupFired, ol as materializeIvm, Li as memoryApiKeyStore, Rs as memoryReplicationAdapter, mr as memoryRywPositionStore, Ws as nextFiring, nc as nextWakeup, El as nodeProcessSupervisor, Wl as noopAnalytics, ql as noopAnalyticsSpec, Ai as noopKv, Qn as onBindConnectionSubject, wa as outboxAttemptsTable, xa as outboxTable, sr as parseTraceparent, fr as powerOfTwoSelector, Nu as previewInRollback, Ja as projectConnectionState, ic as pruneWakeups, Go as rebacPolicyGraph, yn as recordSample, U as recordSubscriptionActive, xn as recordSubscriptionDelivery, $c as recordTimelineEvent, Kc as redactRow, gr as redisRywPositionStore, Hc as redoUndoInvocation, ro as refreshAccessToken, er as registerConnectionStream, oe as registerRetention, qs as registerWakeup, Qs as releaseWakeup, pr as replicaHealth, ai as resetSecretsBackend, mo as resolveConnection, ko as resolveConnectionForSubject, Ls as resolveCurrentRegion, Xt as resolveDependentTables, So as resolveRedirectUri, cl as resolveRescan, Fn as resolveRowFilterScope, In as resolveRowFilterScopeFor, oi as resolveSecret, si as resolveSecretSync, ui as resolveSecretsBackend, Uc as resolveTimelineMode, ce as retentionTtlMsFromEnv, Jc as reverseEventOverRows, Zo as revokedIds, Fs as runAsSystem, Fl as runOrchestratorTick, au as runProvidedEffect, bl as runReaction, Il as runSingleNodeOrchestrator, Cl as runWakeLoop, hu as runWithDeadlockRetry, yr as runWithRoutingContext, ur as runWithTraceContext, xo as sanitizeRedirectTo, mc as scheduleCoordinated, Do as setConnectionResolver, hi as setFieldCipher, Mn as setRowFilter, ii as setSecretsBackend, Ms as setSystemStoreHandle, Qc as setTimelineRecorderForTest, es as setTupleSource, Mi as sha256Hex, sc as singleCoordinator, Dn as snapshotMetrics, On as snapshotMetricsSync, Vr as startRpcServer, dc as startScheduler, Xa as storeCredential, To as sweepExpiredGrants, de as sweepRetention, Dc as synthesizeInverse, as as tracingHttpClientLayer, ua as triggerWorkflow, Zs as tryClaimWakeup, Zn as unbindConnectionSubject, bc as undoCaptureEnabled, zc as undoLogExecutor, nu as useAggregate, Hl as useAnalytics, Xo as visibleRows, Sl as wakeDueOnce, cu as withRowFilter, Qi as workflowToRpc, Cc as wrapCaptureStore, Ds as wrapStoreWithMixinBehaviour };
|