@voltro/runtime 0.10.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 +84 -0
- package/dist/index.js +877 -875
- 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 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,
|
|
2
|
-
import { createCipheriv as
|
|
3
|
-
import { EventEmitter as
|
|
4
|
-
import { ADMIN_SCOPE 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
5
|
import { createLogger as k } from "@voltro/logger";
|
|
6
|
-
import { Cause as A, Clock as
|
|
7
|
-
import * as
|
|
8
|
-
import { createServer as
|
|
9
|
-
import { HttpClient as
|
|
10
|
-
import { NodeContext as
|
|
11
|
-
import { Rpc as
|
|
12
|
-
import { defineRestRoute as
|
|
13
|
-
import { AsyncLocalStorage as
|
|
14
|
-
import { SpanKind as
|
|
15
|
-
import { Kv as
|
|
16
|
-
import { apiKeyStrategy as
|
|
17
|
-
import { getCurrentWorkflowExecutionId as
|
|
18
|
-
import { ArrayFormatter as
|
|
19
|
-
import { spawn as
|
|
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 Tt = 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 Tt = 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
|
-
}, Ot = (e, t) => {
|
|
81
|
-
for (let n of de(e)) if (n.conjunctive && n.path === void 0 && n.op === "eq" && n.column === t) return n.value;
|
|
82
|
-
return null;
|
|
83
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
|
+
return null;
|
|
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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = class {
|
|
|
558
558
|
return n || (n = /* @__PURE__ */ new Map(), this.#e.set(t, n)), n;
|
|
559
559
|
}
|
|
560
560
|
async query(e) {
|
|
561
|
-
let t =
|
|
561
|
+
let t = Bt(e, this.#e.get(this.#a(e.table)) ?? /* @__PURE__ */ new Map(), this.#o());
|
|
562
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 Tt = 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 Tt = 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 Tt = 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 Tt = 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
|
+
let t = this.buildTablesView(e), r = Bt(e, this.materialise(e.table), t);
|
|
758
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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 = k({ scope: "voltro:dispatcher" }),
|
|
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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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 Tt = 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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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,38 +1900,38 @@ var K = /* @__PURE__ */ new Map(), $n = (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" } }))),
|
|
1922
|
+
}).pipe(M.withSpan(t, { attributes: { "framework.kind": "stream" } }))), Mr = k({ scope: "voltro:rpc" }), Nr = k({ scope: "voltro:http" }), Pr = (e, t, n) => {
|
|
1921
1923
|
if (A.isInterruptedOnly(n)) return;
|
|
1922
|
-
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 =
|
|
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
|
-
}),
|
|
1934
|
+
}), Rr = (e) => {
|
|
1933
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 = {};
|
|
@@ -1940,19 +1942,19 @@ var K = /* @__PURE__ */ new Map(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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) => A.isInterruptedOnly(t) ? M.void : M.sync(() =>
|
|
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(), $n = (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(), $n = (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
2136
|
let C = k({ scope: "voltro:rpc" }), ee = N.launch(S).pipe(M.catchAllCause((e) => M.sync(() => {
|
|
2135
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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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,14 +2455,14 @@ var K = /* @__PURE__ */ new Map(), $n = (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
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({
|
|
@@ -2471,7 +2473,7 @@ var K = /* @__PURE__ */ new Map(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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(), $n = (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,72 +2685,72 @@ var K = /* @__PURE__ */ new Map(), $n = (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 = {
|
|
2706
2708
|
type: "anonymous",
|
|
2707
2709
|
id: null,
|
|
2708
2710
|
tenantId: null
|
|
2709
|
-
},
|
|
2711
|
+
}, Gi = class extends L.TaggedError()("TenantScopeViolation", {
|
|
2710
2712
|
table: L.String,
|
|
2711
2713
|
reason: L.String
|
|
2712
|
-
}) {},
|
|
2714
|
+
}) {}, Ki = class extends L.TaggedError()("StoreOperationFailed", {
|
|
2713
2715
|
operation: L.String,
|
|
2714
2716
|
table: L.String,
|
|
2715
2717
|
cause: L.String
|
|
2716
|
-
}) {},
|
|
2718
|
+
}) {}, qi = class extends L.TaggedError()("TableValidationFailed", {
|
|
2717
2719
|
table: L.String,
|
|
2718
2720
|
summary: L.String,
|
|
2719
2721
|
issues: L.Array(L.Struct({
|
|
2720
2722
|
path: L.String,
|
|
2721
2723
|
message: L.String
|
|
2722
2724
|
}))
|
|
2723
|
-
}) {},
|
|
2725
|
+
}) {}, Ji = class extends Ve.Tag("@voltro/EffectStore")() {}, Yi = (e, t) => (n) => n instanceof Gi ? n : new Ki({
|
|
2724
2726
|
operation: e,
|
|
2725
2727
|
table: t,
|
|
2726
2728
|
cause: String(n)
|
|
2727
|
-
}),
|
|
2729
|
+
}), Xi = (e, t, n) => M.tryPromise({
|
|
2728
2730
|
try: n,
|
|
2729
|
-
catch:
|
|
2730
|
-
}),
|
|
2731
|
-
query: ((t) =>
|
|
2732
|
-
insert: (t, n) =>
|
|
2733
|
-
update: (t, n, r) =>
|
|
2734
|
-
delete: (t, n) =>
|
|
2735
|
-
hardDelete: (t, n) =>
|
|
2736
|
-
}),
|
|
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, {
|
|
2737
2739
|
payload: e.payloadSchema,
|
|
2738
|
-
success:
|
|
2740
|
+
success: ke,
|
|
2739
2741
|
error: e.errorSchema
|
|
2740
|
-
}),
|
|
2742
|
+
}), $i = (e, t) => ({
|
|
2741
2743
|
id: t,
|
|
2742
2744
|
workflowName: e,
|
|
2743
2745
|
executionId: t,
|
|
2744
2746
|
status: "running"
|
|
2745
|
-
}),
|
|
2747
|
+
}), ea = $i, ta = (e) => {
|
|
2746
2748
|
let t = A.failureOption(e), n = t._tag === "Some" ? t.value : A.squash(e);
|
|
2747
2749
|
return {
|
|
2748
2750
|
tag: n && typeof n == "object" && "_tag" in n ? String(n._tag) : null,
|
|
2749
2751
|
message: n?.message ?? String(n)
|
|
2750
2752
|
};
|
|
2751
|
-
},
|
|
2753
|
+
}, na = (e, t, n) => {
|
|
2752
2754
|
if (n === void 0) return {
|
|
2753
2755
|
id: t,
|
|
2754
2756
|
workflowName: e,
|
|
@@ -2763,7 +2765,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
2763
2765
|
};
|
|
2764
2766
|
if (typeof n == "object" && n && n._tag === "Complete") {
|
|
2765
2767
|
let r = n.exit;
|
|
2766
|
-
return
|
|
2768
|
+
return Ge.isSuccess(r) ? {
|
|
2767
2769
|
id: t,
|
|
2768
2770
|
workflowName: e,
|
|
2769
2771
|
executionId: t,
|
|
@@ -2774,7 +2776,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
2774
2776
|
workflowName: e,
|
|
2775
2777
|
executionId: t,
|
|
2776
2778
|
status: "failed",
|
|
2777
|
-
error:
|
|
2779
|
+
error: ta(r.cause)
|
|
2778
2780
|
};
|
|
2779
2781
|
}
|
|
2780
2782
|
return {
|
|
@@ -2783,17 +2785,17 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
2783
2785
|
executionId: t,
|
|
2784
2786
|
status: "running"
|
|
2785
2787
|
};
|
|
2786
|
-
},
|
|
2788
|
+
}, ra = (e) => new Promise((t) => setTimeout(t, e)), ia = (e) => {
|
|
2787
2789
|
let t = new Map(e.workflows.map((e) => [e.definition.name, e.definition])), n = (e) => {
|
|
2788
2790
|
let n = t.get(e);
|
|
2789
2791
|
if (!n) throw Error(`Unknown workflow: ${e}`);
|
|
2790
2792
|
return n;
|
|
2791
2793
|
}, r = async (t, r) => {
|
|
2792
2794
|
let i = n(t);
|
|
2793
|
-
return
|
|
2794
|
-
}, 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) => {
|
|
2795
2797
|
let a = n(t), o;
|
|
2796
|
-
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 })));
|
|
2797
2799
|
};
|
|
2798
2800
|
return {
|
|
2799
2801
|
start: a,
|
|
@@ -2831,7 +2833,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
2831
2833
|
let e = await r(i, a);
|
|
2832
2834
|
if (e.status === "succeeded" || e.status === "failed" || e.status === "cancelled") return e;
|
|
2833
2835
|
if (o?.timeoutMs !== void 0 && Date.now() - s >= o.timeoutMs) throw Error(`Timed out waiting for workflow '${i}' run '${a}'`);
|
|
2834
|
-
await
|
|
2836
|
+
await ra(c);
|
|
2835
2837
|
}
|
|
2836
2838
|
}),
|
|
2837
2839
|
cancel: async (t, r) => {
|
|
@@ -2869,22 +2871,22 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
2869
2871
|
return e.retry(t, n);
|
|
2870
2872
|
}
|
|
2871
2873
|
};
|
|
2872
|
-
},
|
|
2874
|
+
}, aa = (e, t) => ({
|
|
2873
2875
|
...e,
|
|
2874
2876
|
start: async (n, r, i) => {
|
|
2875
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.");
|
|
2876
2878
|
let a = await e.executionId(n, r);
|
|
2877
|
-
return t(() => e.start(n, r)),
|
|
2879
|
+
return t(() => e.start(n, r)), $i(n, a);
|
|
2878
2880
|
},
|
|
2879
2881
|
child: async (n, r, i) => {
|
|
2880
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.");
|
|
2881
2883
|
let a = await e.executionId(n, r);
|
|
2882
|
-
return t(() => e.child(n, r, i)),
|
|
2884
|
+
return t(() => e.child(n, r, i)), $i(n, a);
|
|
2883
2885
|
},
|
|
2884
2886
|
run: async () => {
|
|
2885
2887
|
throw Error("ctx.workflows.run(...) is not allowed inside a mutation transaction; use ctx.workflows.start(...) so the workflow starts after commit.");
|
|
2886
2888
|
}
|
|
2887
|
-
}),
|
|
2889
|
+
}), oa = (e, t) => ({
|
|
2888
2890
|
...e,
|
|
2889
2891
|
start: (n, r, i) => e.start(n, r, {
|
|
2890
2892
|
...i,
|
|
@@ -2898,7 +2900,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
2898
2900
|
...i,
|
|
2899
2901
|
callerContext: t
|
|
2900
2902
|
})
|
|
2901
|
-
}),
|
|
2903
|
+
}), sa = (e) => {
|
|
2902
2904
|
let t = () => {
|
|
2903
2905
|
let t = e();
|
|
2904
2906
|
if (!t) throw Error("Workflow runtime is not ready yet");
|
|
@@ -2919,16 +2921,16 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
2919
2921
|
listRuns: ((e) => t().listRuns(e)),
|
|
2920
2922
|
retry: (e, n) => t().retry(e, n)
|
|
2921
2923
|
};
|
|
2922
|
-
},
|
|
2924
|
+
}, ca = (e, t) => {
|
|
2923
2925
|
let n = {};
|
|
2924
|
-
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" } }));
|
|
2925
2927
|
return n;
|
|
2926
|
-
},
|
|
2928
|
+
}, la = (e, t, n) => e.map((e) => e.definition.toLayer(((r, i) => {
|
|
2927
2929
|
let a = t.resolveStartContext?.(e.definition.name, i);
|
|
2928
2930
|
return (a === void 0 ? M.succeed(void 0) : M.promise(() => Promise.resolve(a))).pipe(M.flatMap((a) => {
|
|
2929
2931
|
let o = {
|
|
2930
2932
|
...a,
|
|
2931
|
-
subject: a?.subject ??
|
|
2933
|
+
subject: a?.subject ?? Wi,
|
|
2932
2934
|
traceId: a?.traceId ?? "workflow-bootstrap"
|
|
2933
2935
|
}, s = t.buildContext(o, {
|
|
2934
2936
|
workflowName: e.definition.name,
|
|
@@ -2936,15 +2938,15 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
2936
2938
|
parentExecutionId: a?.parentExecutionId ?? null,
|
|
2937
2939
|
parentClosePolicy: a?.parentClosePolicy ?? null
|
|
2938
2940
|
}), c = e.buildExecute(s), l = (n?.(e, c, o) ?? c)(r, i), u = s?.store;
|
|
2939
|
-
return u === void 0 ? l : M.provide(l,
|
|
2941
|
+
return u === void 0 ? l : M.provide(l, Zi(u));
|
|
2940
2942
|
}));
|
|
2941
|
-
}))),
|
|
2943
|
+
}))), ua = (e) => ({
|
|
2942
2944
|
_tag: "workflowEventTrigger",
|
|
2943
2945
|
...e
|
|
2944
|
-
}),
|
|
2946
|
+
}), da = ua, fa = (e) => typeof e == "object" && !!e && e._tag === "workflowEventTrigger", pa = () => {
|
|
2945
2947
|
let e = globalThis.crypto;
|
|
2946
2948
|
return typeof e?.randomUUID == "function" ? e.randomUUID() : `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`;
|
|
2947
|
-
},
|
|
2949
|
+
}, ma = (e) => `${e}_${pa()}`, ha = (e) => e.id ?? `${e.event}->${e.workflow}`, ga = T("_voltro_workflow_events", {
|
|
2948
2950
|
id: v({ prefix: "wfe" }),
|
|
2949
2951
|
name: E(),
|
|
2950
2952
|
payload: C(),
|
|
@@ -2952,7 +2954,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
2952
2954
|
subject: C().nullable(),
|
|
2953
2955
|
traceId: E().nullable(),
|
|
2954
2956
|
occurredAt: D().default("now")
|
|
2955
|
-
}).index(["name"]).index(["source"]).index(["occurredAt"]).reactive(),
|
|
2957
|
+
}).index(["name"]).index(["source"]).index(["occurredAt"]).reactive(), _a = T("_voltro_workflow_event_deliveries", {
|
|
2956
2958
|
id: v({ prefix: "wfed" }),
|
|
2957
2959
|
eventId: E(),
|
|
2958
2960
|
eventName: E(),
|
|
@@ -2970,8 +2972,8 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
2970
2972
|
errorMessage: E().nullable(),
|
|
2971
2973
|
createdAt: D().default("now"),
|
|
2972
2974
|
completedAt: D().nullable()
|
|
2973
|
-
}).index(["eventId"]).index(["eventName"]).index(["triggerId"]).index(["workflowName"]).index(["status"]).reactive(),
|
|
2974
|
-
let t = e.makeId ??
|
|
2975
|
+
}).index(["eventId"]).index(["eventName"]).index(["triggerId"]).index(["workflowName"]).index(["status"]).reactive(), va = (e) => {
|
|
2976
|
+
let t = e.makeId ?? ma, n = /* @__PURE__ */ new Map();
|
|
2975
2977
|
for (let t of e.triggers) {
|
|
2976
2978
|
let e = n.get(t.event);
|
|
2977
2979
|
e ? e.push(t) : n.set(t.event, [t]);
|
|
@@ -3012,7 +3014,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3012
3014
|
});
|
|
3013
3015
|
let p = o(n), m = [];
|
|
3014
3016
|
for (let o of p) {
|
|
3015
|
-
let s =
|
|
3017
|
+
let s = ha(o), l = o.workflow, d;
|
|
3016
3018
|
try {
|
|
3017
3019
|
let p = o.idempotencyKey?.(f) ?? `${c}:${s}`;
|
|
3018
3020
|
if (o.filter && !await o.filter(f)) {
|
|
@@ -3115,10 +3117,10 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3115
3117
|
triggered: m
|
|
3116
3118
|
};
|
|
3117
3119
|
} };
|
|
3118
|
-
},
|
|
3120
|
+
}, ya = k({ scope: "voltro:outbox" }), Y = "_voltro_outbox", ba = {
|
|
3119
3121
|
kind: "typeid",
|
|
3120
3122
|
prefix: "obx"
|
|
3121
|
-
},
|
|
3123
|
+
}, xa = T(Y, {
|
|
3122
3124
|
id: v({ prefix: "obx" }),
|
|
3123
3125
|
effect: E(),
|
|
3124
3126
|
payload: C(),
|
|
@@ -3136,10 +3138,10 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3136
3138
|
resendRequestedBy: E().nullable(),
|
|
3137
3139
|
resendReason: E().nullable(),
|
|
3138
3140
|
resendCount: b()
|
|
3139
|
-
}),
|
|
3141
|
+
}), Sa = "_voltro_outbox_attempts", Ca = {
|
|
3140
3142
|
kind: "typeid",
|
|
3141
3143
|
prefix: "obxa"
|
|
3142
|
-
},
|
|
3144
|
+
}, wa = T(Sa, {
|
|
3143
3145
|
id: v({ prefix: "obxa" }),
|
|
3144
3146
|
outboxId: E(),
|
|
3145
3147
|
effect: E(),
|
|
@@ -3160,11 +3162,11 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3160
3162
|
subjectId: E().nullable(),
|
|
3161
3163
|
tenantId: E().nullable(),
|
|
3162
3164
|
traceId: E().nullable()
|
|
3163
|
-
}).index(["outboxId", "attempt"]).index(["startedAt"]).index(["outcome"]),
|
|
3165
|
+
}).index(["outboxId", "attempt"]).index(["startedAt"]).index(["outcome"]), Ta = (e) => {
|
|
3164
3166
|
if (e.effect.trim() === "") throw Error("defineOutboxHandler: `effect` must be a non-empty name");
|
|
3165
3167
|
if (e.maxAttempts !== void 0 && e.maxAttempts < 1) throw Error(`defineOutboxHandler("${e.effect}"): maxAttempts must be >= 1`);
|
|
3166
3168
|
return e;
|
|
3167
|
-
},
|
|
3169
|
+
}, Ea = 8, Da = (e) => ({
|
|
3168
3170
|
enqueue: async (n, r, i) => {
|
|
3169
3171
|
let a = (e.now ?? (() => /* @__PURE__ */ new Date()))(), o = i?.idempotencyKey;
|
|
3170
3172
|
if (o !== void 0) {
|
|
@@ -3179,12 +3181,12 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3179
3181
|
if (n !== void 0) return n.id;
|
|
3180
3182
|
}
|
|
3181
3183
|
let s = {
|
|
3182
|
-
id: f(
|
|
3184
|
+
id: f(ba, Y),
|
|
3183
3185
|
effect: n,
|
|
3184
3186
|
payload: r,
|
|
3185
3187
|
status: "pending",
|
|
3186
3188
|
attempts: 0,
|
|
3187
|
-
maxAttempts: i?.maxAttempts ??
|
|
3189
|
+
maxAttempts: i?.maxAttempts ?? Ea,
|
|
3188
3190
|
nextAttemptAt: new Date(a.getTime() + (i?.delayMs ?? 0)),
|
|
3189
3191
|
idempotencyKey: o ?? null,
|
|
3190
3192
|
lastError: null,
|
|
@@ -3231,7 +3233,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3231
3233
|
});
|
|
3232
3234
|
} else e.nudge?.();
|
|
3233
3235
|
}
|
|
3234
|
-
}),
|
|
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) => {
|
|
3235
3237
|
if (e == null) return null;
|
|
3236
3238
|
let t = typeof e == "object" && !Array.isArray(e) ? e : { value: e }, n;
|
|
3237
3239
|
try {
|
|
@@ -3241,13 +3243,13 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3241
3243
|
}
|
|
3242
3244
|
return n.length > 8192 ? {
|
|
3243
3245
|
truncated: !0,
|
|
3244
|
-
preview:
|
|
3246
|
+
preview: Aa(n, 8192)
|
|
3245
3247
|
} : t;
|
|
3246
|
-
},
|
|
3248
|
+
}, Ma = async (e, t, n) => {
|
|
3247
3249
|
let r = t.outboxRow, i = r.id, a = r.resendRequestedBy ?? null;
|
|
3248
3250
|
try {
|
|
3249
|
-
await e.insert(
|
|
3250
|
-
id: f(
|
|
3251
|
+
await e.insert(Sa, {
|
|
3252
|
+
id: f(Ca, Sa),
|
|
3251
3253
|
outboxId: i,
|
|
3252
3254
|
effect: r.effect,
|
|
3253
3255
|
attempt: t.attempt,
|
|
@@ -3258,14 +3260,14 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3258
3260
|
startedAt: t.startedAt,
|
|
3259
3261
|
finishedAt: t.finishedAt,
|
|
3260
3262
|
durationMs: Math.max(0, t.finishedAt.getTime() - t.startedAt.getTime()),
|
|
3261
|
-
error: t.error === null ? null :
|
|
3262
|
-
response:
|
|
3263
|
+
error: t.error === null ? null : Aa(t.error, 4e3),
|
|
3264
|
+
response: ja(t.response),
|
|
3263
3265
|
subjectId: r.subjectId ?? null,
|
|
3264
3266
|
tenantId: r.tenantId ?? null,
|
|
3265
3267
|
traceId: r.traceId ?? null
|
|
3266
3268
|
});
|
|
3267
3269
|
} catch (e) {
|
|
3268
|
-
|
|
3270
|
+
ya.warn("outbox: could not record delivery attempt (delivery itself is unaffected)", {
|
|
3269
3271
|
outboxId: i,
|
|
3270
3272
|
attempt: t.attempt
|
|
3271
3273
|
}, e);
|
|
@@ -3273,7 +3275,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3273
3275
|
}
|
|
3274
3276
|
if (!(t.attempt <= n)) try {
|
|
3275
3277
|
let t = await e.query({
|
|
3276
|
-
table:
|
|
3278
|
+
table: Sa,
|
|
3277
3279
|
predicate: u("outboxId", i),
|
|
3278
3280
|
order: [{
|
|
3279
3281
|
column: "attempt",
|
|
@@ -3283,11 +3285,11 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3283
3285
|
skip: void 0,
|
|
3284
3286
|
projection: ["id"]
|
|
3285
3287
|
});
|
|
3286
|
-
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);
|
|
3287
3289
|
} catch (e) {
|
|
3288
|
-
|
|
3290
|
+
ya.warn("outbox: attempt-log trim failed; the log may exceed its cap", { outboxId: i }, e);
|
|
3289
3291
|
}
|
|
3290
|
-
},
|
|
3292
|
+
}, Na = async (e) => {
|
|
3291
3293
|
let n = (e.now ?? (() => /* @__PURE__ */ new Date()))(), r = await e.store.query({
|
|
3292
3294
|
table: Y,
|
|
3293
3295
|
predicate: t(u("status", "pending"), ne("nextAttemptAt", n)),
|
|
@@ -3305,7 +3307,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3305
3307
|
s++;
|
|
3306
3308
|
continue;
|
|
3307
3309
|
}
|
|
3308
|
-
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;
|
|
3309
3311
|
try {
|
|
3310
3312
|
let n = await l.handler({
|
|
3311
3313
|
payload: t.payload ?? {},
|
|
@@ -3314,7 +3316,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3314
3316
|
tenantId: t.tenantId ?? null,
|
|
3315
3317
|
traceId: t.traceId ?? null
|
|
3316
3318
|
});
|
|
3317
|
-
await
|
|
3319
|
+
await Ma(e.store, {
|
|
3318
3320
|
outboxRow: t,
|
|
3319
3321
|
attempt: u,
|
|
3320
3322
|
outcome: "delivered",
|
|
@@ -3332,7 +3334,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3332
3334
|
}), i++;
|
|
3333
3335
|
} catch (i) {
|
|
3334
3336
|
let s = i instanceof Error ? i.message : String(i), l = u >= d;
|
|
3335
|
-
await
|
|
3337
|
+
await Ma(e.store, {
|
|
3336
3338
|
outboxRow: t,
|
|
3337
3339
|
attempt: u,
|
|
3338
3340
|
outcome: l ? "dead" : "failed",
|
|
@@ -3344,20 +3346,20 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3344
3346
|
status: l ? "dead" : "pending",
|
|
3345
3347
|
attempts: u,
|
|
3346
3348
|
lastError: s,
|
|
3347
|
-
nextAttemptAt: new Date(n.getTime() +
|
|
3349
|
+
nextAttemptAt: new Date(n.getTime() + Oa(u)),
|
|
3348
3350
|
resendRequestedBy: null,
|
|
3349
3351
|
resendReason: null
|
|
3350
|
-
}), l ? (o++,
|
|
3352
|
+
}), l ? (o++, ya.error("outbox effect dead-lettered after exhausting attempts", {
|
|
3351
3353
|
id: r,
|
|
3352
3354
|
effect: c,
|
|
3353
3355
|
attempts: u,
|
|
3354
3356
|
maxAttempts: d
|
|
3355
|
-
}, i)) : (a++,
|
|
3357
|
+
}, i)) : (a++, ya.warn("outbox delivery failed; will retry", {
|
|
3356
3358
|
id: r,
|
|
3357
3359
|
effect: c,
|
|
3358
3360
|
attempt: u,
|
|
3359
3361
|
maxAttempts: d,
|
|
3360
|
-
retryInMs:
|
|
3362
|
+
retryInMs: Oa(u)
|
|
3361
3363
|
}));
|
|
3362
3364
|
}
|
|
3363
3365
|
}
|
|
@@ -3367,10 +3369,10 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3367
3369
|
dead: o,
|
|
3368
3370
|
skipped: s
|
|
3369
3371
|
};
|
|
3370
|
-
},
|
|
3372
|
+
}, Pa = k({ scope: "voltro:connections" }), X = "_voltro_connections", Fa = {
|
|
3371
3373
|
kind: "typeid",
|
|
3372
3374
|
prefix: "conn"
|
|
3373
|
-
},
|
|
3375
|
+
}, Ia = T(X, {
|
|
3374
3376
|
id: v({ prefix: "conn" }),
|
|
3375
3377
|
connectionId: E(),
|
|
3376
3378
|
subjectId: E(),
|
|
@@ -3393,10 +3395,10 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3393
3395
|
metadata: C().nullable(),
|
|
3394
3396
|
connectedAt: D(),
|
|
3395
3397
|
updatedAt: D()
|
|
3396
|
-
}).unique("bySubject", ["connectionId", "subjectId"]).index(["subjectId"]).reactive(),
|
|
3398
|
+
}).unique("bySubject", ["connectionId", "subjectId"]).index(["subjectId"]).reactive(), La = "_voltro_connection_grants", Ra = {
|
|
3397
3399
|
kind: "typeid",
|
|
3398
3400
|
prefix: "cgrant"
|
|
3399
|
-
},
|
|
3401
|
+
}, za = T(La, {
|
|
3400
3402
|
id: v({ prefix: "cgrant" }),
|
|
3401
3403
|
state: E().unique(),
|
|
3402
3404
|
connectionId: E(),
|
|
@@ -3406,8 +3408,8 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3406
3408
|
redirectTo: E(),
|
|
3407
3409
|
createdAt: D(),
|
|
3408
3410
|
expiresAt: D()
|
|
3409
|
-
}).index(["expiresAt"]),
|
|
3410
|
-
if (!
|
|
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).`);
|
|
3411
3413
|
if (e.kind === "oauth2") {
|
|
3412
3414
|
for (let t of [
|
|
3413
3415
|
"authorizeUrl",
|
|
@@ -3417,9 +3419,9 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3417
3419
|
]) if (typeof e[t] != "string" || e[t].length === 0) throw Error(`defineConnection("${e.id}"): \`${t}\` is required for kind 'oauth2'.`);
|
|
3418
3420
|
}
|
|
3419
3421
|
return e;
|
|
3420
|
-
},
|
|
3421
|
-
if (e.length !== 0 &&
|
|
3422
|
-
},
|
|
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) => {
|
|
3423
3425
|
let t = /* @__PURE__ */ new Map();
|
|
3424
3426
|
for (let n of e) {
|
|
3425
3427
|
if (t.has(n.id)) throw Error(`connections: duplicate connection id "${n.id}" — each *.connection.ts must declare a distinct id.`);
|
|
@@ -3429,14 +3431,14 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3429
3431
|
get: (e) => t.get(e),
|
|
3430
3432
|
list: () => [...t.values()]
|
|
3431
3433
|
};
|
|
3432
|
-
},
|
|
3434
|
+
}, Ga = (e) => {
|
|
3433
3435
|
if (e == null) return null;
|
|
3434
3436
|
let t = e instanceof Date ? e : new Date(String(e));
|
|
3435
3437
|
return Number.isNaN(t.getTime()) ? null : t;
|
|
3436
|
-
},
|
|
3438
|
+
}, Ka = (e) => Ga(e)?.toISOString() ?? null, qa = (e) => String(e ?? "").split(" ").filter((e) => e.length > 0), Ja = (e, t) => t === void 0 ? {
|
|
3437
3439
|
connectionId: e.id,
|
|
3438
3440
|
kind: e.kind,
|
|
3439
|
-
label:
|
|
3441
|
+
label: Ha(e),
|
|
3440
3442
|
status: "disconnected",
|
|
3441
3443
|
accountId: null,
|
|
3442
3444
|
accountLabel: null,
|
|
@@ -3447,24 +3449,24 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3447
3449
|
} : {
|
|
3448
3450
|
connectionId: e.id,
|
|
3449
3451
|
kind: e.kind,
|
|
3450
|
-
label:
|
|
3452
|
+
label: Ha(e),
|
|
3451
3453
|
status: String(t.status ?? "connected"),
|
|
3452
3454
|
accountId: t.accountId ?? null,
|
|
3453
3455
|
accountLabel: t.accountLabel ?? null,
|
|
3454
|
-
scopes:
|
|
3455
|
-
expiresAt:
|
|
3456
|
+
scopes: qa(t.scopes),
|
|
3457
|
+
expiresAt: Ka(t.expiresAt),
|
|
3456
3458
|
lastError: t.lastError ?? null,
|
|
3457
|
-
connectedAt:
|
|
3458
|
-
},
|
|
3459
|
+
connectedAt: Ka(t.connectedAt)
|
|
3460
|
+
}, Ya = async (e, n, r) => (await e.query({
|
|
3459
3461
|
table: X,
|
|
3460
3462
|
predicate: t(u("connectionId", n), u("subjectId", r)),
|
|
3461
3463
|
order: [],
|
|
3462
3464
|
take: 1,
|
|
3463
3465
|
skip: void 0,
|
|
3464
3466
|
projection: void 0
|
|
3465
|
-
}))[0],
|
|
3467
|
+
}))[0], Xa = async (e) => {
|
|
3466
3468
|
let t = (e.now ?? (() => /* @__PURE__ */ new Date()))(), n = e.tokens.expiresAt === void 0 ? null : new Date(e.tokens.expiresAt), r = {
|
|
3467
|
-
id: f(
|
|
3469
|
+
id: f(Fa, X),
|
|
3468
3470
|
connectionId: e.definition.id,
|
|
3469
3471
|
subjectId: e.subjectId,
|
|
3470
3472
|
tenantId: e.tenantId,
|
|
@@ -3482,8 +3484,8 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3482
3484
|
connectedAt: t,
|
|
3483
3485
|
updatedAt: t
|
|
3484
3486
|
};
|
|
3485
|
-
return
|
|
3486
|
-
},
|
|
3487
|
+
return Za(e.store, r);
|
|
3488
|
+
}, Za = (e, t) => e.upsert(X, t, {
|
|
3487
3489
|
conflictColumns: ["connectionId", "subjectId"],
|
|
3488
3490
|
update: [
|
|
3489
3491
|
"kind",
|
|
@@ -3499,10 +3501,10 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3499
3501
|
"metadata",
|
|
3500
3502
|
"updatedAt"
|
|
3501
3503
|
]
|
|
3502
|
-
}),
|
|
3503
|
-
let r = await
|
|
3504
|
+
}), Qa = async (e, t, n) => {
|
|
3505
|
+
let r = await Ya(e, t, n);
|
|
3504
3506
|
return r !== void 0 && e.delete(X, r.id);
|
|
3505
|
-
},
|
|
3507
|
+
}, $a = async (e, t, n) => {
|
|
3506
3508
|
let r = await e.query({
|
|
3507
3509
|
table: X,
|
|
3508
3510
|
predicate: u("subjectId", n),
|
|
@@ -3511,9 +3513,9 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3511
3513
|
skip: void 0,
|
|
3512
3514
|
projection: void 0
|
|
3513
3515
|
}), i = new Map(r.map((e) => [String(e.connectionId), e]));
|
|
3514
|
-
return t.list().map((e) =>
|
|
3515
|
-
},
|
|
3516
|
-
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;
|
|
3517
3519
|
try {
|
|
3518
3520
|
let n = await r(e.tokenUrl, {
|
|
3519
3521
|
method: "POST",
|
|
@@ -3553,62 +3555,62 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3553
3555
|
...Number.isFinite(o.expires_in) ? { expiresAt: n() + o.expires_in * 1e3 } : {},
|
|
3554
3556
|
scopes: (o.scope ?? e.scopes?.join(" ") ?? "").split(" ").filter(Boolean)
|
|
3555
3557
|
};
|
|
3556
|
-
},
|
|
3558
|
+
}, no = (e, t, n = Date.now) => to(e, {
|
|
3557
3559
|
grant_type: "authorization_code",
|
|
3558
3560
|
client_id: e.clientId,
|
|
3559
3561
|
client_secret: e.clientSecret,
|
|
3560
3562
|
code: t.code,
|
|
3561
3563
|
redirect_uri: t.redirectUri,
|
|
3562
3564
|
...t.codeVerifier ? { code_verifier: t.codeVerifier } : {}
|
|
3563
|
-
}, n),
|
|
3565
|
+
}, n), ro = (e, t, n = Date.now) => to(e, {
|
|
3564
3566
|
grant_type: "refresh_token",
|
|
3565
3567
|
client_id: e.clientId,
|
|
3566
3568
|
client_secret: e.clientSecret,
|
|
3567
3569
|
refresh_token: t
|
|
3568
|
-
}, n),
|
|
3570
|
+
}, n), io = 6e4, ao = 3e4, oo = class extends Error {
|
|
3569
3571
|
connectionId;
|
|
3570
3572
|
subjectId;
|
|
3571
3573
|
_tag = "ConnectionNotConnected";
|
|
3572
3574
|
constructor(e, t) {
|
|
3573
3575
|
super(`connection "${e}" is not connected for this subject`), this.connectionId = e, this.subjectId = t, this.name = "ConnectionNotConnected";
|
|
3574
3576
|
}
|
|
3575
|
-
},
|
|
3577
|
+
}, so = (e) => new Promise((t) => {
|
|
3576
3578
|
setTimeout(t, e);
|
|
3577
|
-
}),
|
|
3578
|
-
|
|
3579
|
-
},
|
|
3579
|
+
}), co = /* @__PURE__ */ new Map(), lo = (e, t) => `${e}${t}`, uo = () => {
|
|
3580
|
+
co.clear();
|
|
3581
|
+
}, fo = (e, t) => ({
|
|
3580
3582
|
connectionId: e.id,
|
|
3581
3583
|
kind: e.kind,
|
|
3582
|
-
accessToken:
|
|
3583
|
-
expiresAt:
|
|
3584
|
-
scopes:
|
|
3584
|
+
accessToken: vi(String(t.accessToken)),
|
|
3585
|
+
expiresAt: Ga(t.expiresAt),
|
|
3586
|
+
scopes: qa(t.scopes),
|
|
3585
3587
|
accountId: t.accountId ?? null,
|
|
3586
3588
|
accountLabel: t.accountLabel ?? null
|
|
3587
|
-
}),
|
|
3588
|
-
let r =
|
|
3589
|
+
}), po = (e, t, n) => {
|
|
3590
|
+
let r = Ga(e.expiresAt);
|
|
3589
3591
|
return r !== null && r.getTime() - n < t;
|
|
3590
|
-
},
|
|
3591
|
-
let t = e.now ?? Date.now, { store: n, definition: r, subjectId: i } = e, a = await
|
|
3592
|
-
if (a === void 0) throw new
|
|
3593
|
-
if (r.kind === "pat" || !
|
|
3594
|
-
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);
|
|
3595
3597
|
if (s !== void 0) return s;
|
|
3596
|
-
let c =
|
|
3598
|
+
let c = ho({
|
|
3597
3599
|
...e,
|
|
3598
3600
|
now: t,
|
|
3599
3601
|
row: a
|
|
3600
3602
|
}).finally(() => {
|
|
3601
|
-
|
|
3603
|
+
co.delete(o);
|
|
3602
3604
|
});
|
|
3603
|
-
return
|
|
3604
|
-
},
|
|
3605
|
-
let { store: n, subjectId: r, now: i } = e, a = e.definition, o = e.sleep ??
|
|
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;
|
|
3606
3608
|
if (await n.updateMany("_voltro_connections", { refreshLockedUntil: new Date(i() + 3e4) }, { where: t(u("id", c), ne("refreshLockedUntil", new Date(i()))) }) === 0) {
|
|
3607
3609
|
for (let e = 0; e < 10; e++) {
|
|
3608
3610
|
await o(200);
|
|
3609
|
-
let e = await
|
|
3610
|
-
if (e === void 0) throw new
|
|
3611
|
-
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);
|
|
3612
3614
|
}
|
|
3613
3615
|
throw new O({
|
|
3614
3616
|
connectionId: a.id,
|
|
@@ -3629,7 +3631,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3629
3631
|
});
|
|
3630
3632
|
let d;
|
|
3631
3633
|
try {
|
|
3632
|
-
d = await
|
|
3634
|
+
d = await ro(a, vi(String(l)), i);
|
|
3633
3635
|
} catch (e) {
|
|
3634
3636
|
let t = e instanceof O ? e : new O({
|
|
3635
3637
|
connectionId: a.id,
|
|
@@ -3646,7 +3648,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3646
3648
|
refreshToken: null,
|
|
3647
3649
|
expiresAt: null
|
|
3648
3650
|
}
|
|
3649
|
-
}),
|
|
3651
|
+
}), Pa.warn("connection refresh failed", {
|
|
3650
3652
|
connectionId: a.id,
|
|
3651
3653
|
transient: t.transient,
|
|
3652
3654
|
reason: t.reason
|
|
@@ -3662,32 +3664,32 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3662
3664
|
refreshLockedUntil: /* @__PURE__ */ new Date(0),
|
|
3663
3665
|
updatedAt: new Date(i())
|
|
3664
3666
|
};
|
|
3665
|
-
return
|
|
3667
|
+
return fo(a, await n.update(X, c, f) ?? {
|
|
3666
3668
|
...e.row,
|
|
3667
3669
|
...f
|
|
3668
3670
|
});
|
|
3669
|
-
},
|
|
3671
|
+
}, go = (e = 32) => {
|
|
3670
3672
|
let t = new Uint8Array(e);
|
|
3671
3673
|
return globalThis.crypto.getRandomValues(t), Array.from(t, (e) => e.toString(16).padStart(2, "0")).join("");
|
|
3672
|
-
},
|
|
3674
|
+
}, _o = (e) => {
|
|
3673
3675
|
let t = "";
|
|
3674
3676
|
for (let n of e) t += String.fromCharCode(n);
|
|
3675
3677
|
return btoa(t).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
3676
|
-
},
|
|
3678
|
+
}, vo = async (e) => {
|
|
3677
3679
|
let t = await globalThis.crypto.subtle.digest("SHA-256", new TextEncoder().encode(e));
|
|
3678
|
-
return
|
|
3679
|
-
},
|
|
3680
|
-
let t = (e.now ?? (() => /* @__PURE__ */ new Date()))(), { definition: n } = e, r =
|
|
3681
|
-
await e.store.insert(
|
|
3682
|
-
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),
|
|
3683
3685
|
state: r,
|
|
3684
3686
|
connectionId: n.id,
|
|
3685
3687
|
subjectId: e.subjectId,
|
|
3686
3688
|
tenantId: e.tenantId,
|
|
3687
3689
|
codeVerifier: i === null ? null : q(i),
|
|
3688
|
-
redirectTo:
|
|
3690
|
+
redirectTo: xo(e.redirectTo),
|
|
3689
3691
|
createdAt: t,
|
|
3690
|
-
expiresAt: new Date(t.getTime() +
|
|
3692
|
+
expiresAt: new Date(t.getTime() + yo)
|
|
3691
3693
|
});
|
|
3692
3694
|
let o = new URLSearchParams({
|
|
3693
3695
|
response_type: "code",
|
|
@@ -3697,15 +3699,15 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3697
3699
|
...n.scopes && n.scopes.length > 0 ? { scope: n.scopes.join(" ") } : {},
|
|
3698
3700
|
...n.authorizeParams ?? {}
|
|
3699
3701
|
});
|
|
3700
|
-
i !== null && (o.set("code_challenge", await
|
|
3702
|
+
i !== null && (o.set("code_challenge", await vo(i)), o.set("code_challenge_method", "S256"));
|
|
3701
3703
|
let s = n.authorizeUrl.includes("?") ? "&" : "?";
|
|
3702
3704
|
return {
|
|
3703
3705
|
authorizeUrl: `${n.authorizeUrl}${s}${o.toString()}`,
|
|
3704
3706
|
state: r
|
|
3705
3707
|
};
|
|
3706
|
-
},
|
|
3708
|
+
}, wo = async (e) => {
|
|
3707
3709
|
let t = (e.now ?? (() => /* @__PURE__ */ new Date()))(), n = (await e.store.query({
|
|
3708
|
-
table:
|
|
3710
|
+
table: La,
|
|
3709
3711
|
predicate: u("state", e.state),
|
|
3710
3712
|
order: [],
|
|
3711
3713
|
take: 1,
|
|
@@ -3717,8 +3719,8 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3717
3719
|
reason: "unknown or already-used handshake state",
|
|
3718
3720
|
transient: !1
|
|
3719
3721
|
});
|
|
3720
|
-
await e.store.delete(
|
|
3721
|
-
let r = String(n.connectionId), i =
|
|
3722
|
+
await e.store.delete(La, n.id);
|
|
3723
|
+
let r = String(n.connectionId), i = Ga(n.expiresAt);
|
|
3722
3724
|
if (i !== null && i.getTime() < t.getTime()) throw new O({
|
|
3723
3725
|
connectionId: r,
|
|
3724
3726
|
reason: "handshake expired — start again",
|
|
@@ -3730,17 +3732,17 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3730
3732
|
reason: "no oauth2 connection is declared under that id",
|
|
3731
3733
|
transient: !1
|
|
3732
3734
|
});
|
|
3733
|
-
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, {
|
|
3734
3736
|
code: e.code,
|
|
3735
|
-
redirectUri:
|
|
3737
|
+
redirectUri: So(a, e.publicUrl),
|
|
3736
3738
|
codeVerifier: o
|
|
3737
3739
|
}, () => t.getTime()), c = a.identify === void 0 ? void 0 : await a.identify(s).catch((e) => {
|
|
3738
|
-
|
|
3740
|
+
Pa.warn("connection identify failed; storing without account details", {
|
|
3739
3741
|
connectionId: r,
|
|
3740
3742
|
reason: String(e)
|
|
3741
3743
|
});
|
|
3742
3744
|
});
|
|
3743
|
-
return await
|
|
3745
|
+
return await Xa({
|
|
3744
3746
|
store: e.store,
|
|
3745
3747
|
definition: a,
|
|
3746
3748
|
subjectId: String(n.subjectId),
|
|
@@ -3750,11 +3752,11 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3750
3752
|
now: () => t
|
|
3751
3753
|
}), {
|
|
3752
3754
|
connectionId: r,
|
|
3753
|
-
redirectTo:
|
|
3755
|
+
redirectTo: xo(String(n.redirectTo ?? "/"))
|
|
3754
3756
|
};
|
|
3755
|
-
},
|
|
3757
|
+
}, To = async (e, t = /* @__PURE__ */ new Date()) => {
|
|
3756
3758
|
let n = await e.query({
|
|
3757
|
-
table:
|
|
3759
|
+
table: La,
|
|
3758
3760
|
predicate: ne("expiresAt", t),
|
|
3759
3761
|
order: [],
|
|
3760
3762
|
take: void 0,
|
|
@@ -3763,27 +3765,27 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3763
3765
|
}), r = 0;
|
|
3764
3766
|
for (let t of n) await e.delete("_voltro_connection_grants", t.id) && r++;
|
|
3765
3767
|
return r;
|
|
3766
|
-
},
|
|
3767
|
-
|
|
3768
|
-
},
|
|
3769
|
-
let n =
|
|
3768
|
+
}, Eo, Do = (e) => {
|
|
3769
|
+
Eo = e;
|
|
3770
|
+
}, Oo = () => Eo, ko = (e, t) => {
|
|
3771
|
+
let n = Eo;
|
|
3770
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);
|
|
3771
|
-
},
|
|
3773
|
+
}, Ao = (e) => async (t, n) => {
|
|
3772
3774
|
let r = e.registry.get(n);
|
|
3773
3775
|
if (r === void 0) throw Error(`connection "${n}" is not declared. Declared: ${e.registry.list().map((e) => e.id).join(", ") || "(none)"}.`);
|
|
3774
3776
|
let i = t.id ?? null;
|
|
3775
|
-
if (i === null || i === "") throw new
|
|
3776
|
-
return
|
|
3777
|
+
if (i === null || i === "") throw new oo(n, "<anonymous>");
|
|
3778
|
+
return mo({
|
|
3777
3779
|
store: e.store,
|
|
3778
3780
|
definition: r,
|
|
3779
3781
|
subjectId: i
|
|
3780
3782
|
});
|
|
3781
|
-
},
|
|
3783
|
+
}, jo = (e) => {
|
|
3782
3784
|
let t = e.subject.id ?? null, n = async (n) => {
|
|
3783
3785
|
let r = e.registry.get(n);
|
|
3784
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)"}.`);
|
|
3785
|
-
if (t === null || t === "") throw new
|
|
3786
|
-
return
|
|
3787
|
+
if (t === null || t === "") throw new oo(n, "<anonymous>");
|
|
3788
|
+
return mo({
|
|
3787
3789
|
store: e.store,
|
|
3788
3790
|
definition: r,
|
|
3789
3791
|
subjectId: t
|
|
@@ -3795,7 +3797,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3795
3797
|
try {
|
|
3796
3798
|
return await n(e);
|
|
3797
3799
|
} catch (e) {
|
|
3798
|
-
if (e instanceof
|
|
3800
|
+
if (e instanceof oo) return null;
|
|
3799
3801
|
throw e;
|
|
3800
3802
|
}
|
|
3801
3803
|
},
|
|
@@ -3810,17 +3812,17 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3810
3812
|
expiresAt: null,
|
|
3811
3813
|
lastError: null,
|
|
3812
3814
|
connectedAt: null
|
|
3813
|
-
})) :
|
|
3815
|
+
})) : $a(e.store, e.registry, t)
|
|
3814
3816
|
};
|
|
3815
|
-
},
|
|
3817
|
+
}, Mo = (e, t) => {
|
|
3816
3818
|
let n = e.request?.subject?.id ?? null;
|
|
3817
|
-
if (n === null || n === "") throw new
|
|
3819
|
+
if (n === null || n === "") throw new we({ connectionId: t });
|
|
3818
3820
|
return n;
|
|
3819
|
-
},
|
|
3821
|
+
}, No = (e, t) => {
|
|
3820
3822
|
let n = e.registry.get(t);
|
|
3821
|
-
if (n === void 0) throw new
|
|
3823
|
+
if (n === void 0) throw new Ce({ connectionId: t });
|
|
3822
3824
|
return n;
|
|
3823
|
-
},
|
|
3825
|
+
}, Po = (e) => async (t, n) => {
|
|
3824
3826
|
let r = n.request?.subject?.id ?? null;
|
|
3825
3827
|
return r === null || r === "" ? e.registry.list().map((e) => ({
|
|
3826
3828
|
connectionId: e.id,
|
|
@@ -3833,15 +3835,15 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3833
3835
|
expiresAt: null,
|
|
3834
3836
|
lastError: null,
|
|
3835
3837
|
connectedAt: null
|
|
3836
|
-
})) :
|
|
3837
|
-
},
|
|
3838
|
-
let r =
|
|
3839
|
-
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({
|
|
3840
3842
|
connectionId: t.connectionId,
|
|
3841
3843
|
expected: "oauth2",
|
|
3842
3844
|
actual: r.kind
|
|
3843
3845
|
});
|
|
3844
|
-
return
|
|
3846
|
+
return Co({
|
|
3845
3847
|
store: n.store,
|
|
3846
3848
|
definition: r,
|
|
3847
3849
|
subjectId: i,
|
|
@@ -3849,9 +3851,9 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3849
3851
|
publicUrl: e.publicUrl,
|
|
3850
3852
|
...t.redirectTo === void 0 ? {} : { redirectTo: t.redirectTo }
|
|
3851
3853
|
});
|
|
3852
|
-
},
|
|
3853
|
-
let r =
|
|
3854
|
-
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({
|
|
3855
3857
|
connectionId: t.connectionId,
|
|
3856
3858
|
expected: "pat",
|
|
3857
3859
|
actual: r.kind
|
|
@@ -3872,7 +3874,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3872
3874
|
transient: !1
|
|
3873
3875
|
});
|
|
3874
3876
|
}
|
|
3875
|
-
return await
|
|
3877
|
+
return await Xa({
|
|
3876
3878
|
store: n.store,
|
|
3877
3879
|
definition: r,
|
|
3878
3880
|
subjectId: i,
|
|
@@ -3883,20 +3885,20 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3883
3885
|
},
|
|
3884
3886
|
...o === void 0 ? {} : { account: o }
|
|
3885
3887
|
}), { ok: !0 };
|
|
3886
|
-
},
|
|
3887
|
-
|
|
3888
|
-
let r =
|
|
3889
|
-
return { ok: await
|
|
3890
|
-
},
|
|
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", {
|
|
3891
3893
|
action: L.String,
|
|
3892
3894
|
resourceType: L.String,
|
|
3893
3895
|
resourceId: L.String
|
|
3894
|
-
}) {},
|
|
3896
|
+
}) {}, Bo = /* @__PURE__ */ new Map(), Vo = (e) => {
|
|
3895
3897
|
if (typeof e.resourceType != "string" || e.resourceType.length === 0) throw Error("defineResourcePolicy: a non-empty `resourceType` is required");
|
|
3896
3898
|
if (e.actions === void 0 || Object.keys(e.actions).length === 0) throw Error(`resource policy '${e.resourceType}': at least one action is required`);
|
|
3897
|
-
if (
|
|
3898
|
-
return
|
|
3899
|
-
},
|
|
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) => {
|
|
3900
3902
|
let t = /* @__PURE__ */ new Set();
|
|
3901
3903
|
for (let n of Object.values(e.actions)) for (let e of n) t.add(e);
|
|
3902
3904
|
for (let [n, r] of Object.entries(e.implies ?? {})) {
|
|
@@ -3909,7 +3911,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3909
3911
|
relations: [...t],
|
|
3910
3912
|
implies: e.implies ?? {}
|
|
3911
3913
|
};
|
|
3912
|
-
}),
|
|
3914
|
+
}), Ko = (e, t) => {
|
|
3913
3915
|
let n = new Set(e);
|
|
3914
3916
|
if (t === void 0) return n;
|
|
3915
3917
|
let r = [...e];
|
|
@@ -3918,37 +3920,37 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3918
3920
|
for (let i of t[e] ?? []) n.has(i) || (n.add(i), r.push(i));
|
|
3919
3921
|
}
|
|
3920
3922
|
return n;
|
|
3921
|
-
},
|
|
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) => {
|
|
3922
3924
|
if (e.scopes?.includes("admin:full")) return !0;
|
|
3923
3925
|
if (e.id === null || n.tenantId != null && e.tenantId !== n.tenantId) return !1;
|
|
3924
3926
|
let i = r.policy.actions[t];
|
|
3925
3927
|
if (i === void 0 || i.length === 0) return !1;
|
|
3926
|
-
let a =
|
|
3928
|
+
let a = qo(e, n, r.tuples, r.policy);
|
|
3927
3929
|
return i.some((e) => a.has(e));
|
|
3928
|
-
},
|
|
3929
|
-
if (!
|
|
3930
|
+
}, Yo = (e, t, n, r) => {
|
|
3931
|
+
if (!Jo(e, t, n, r)) throw new zo({
|
|
3930
3932
|
action: t,
|
|
3931
3933
|
resourceType: n.type,
|
|
3932
3934
|
resourceId: n.id
|
|
3933
3935
|
});
|
|
3934
|
-
},
|
|
3936
|
+
}, Xo = (e, t, n, r, i) => r.filter((r) => Jo(e, t, {
|
|
3935
3937
|
type: n,
|
|
3936
3938
|
id: r.id,
|
|
3937
3939
|
...r.tenantId === void 0 ? {} : { tenantId: r.tenantId }
|
|
3938
|
-
}, i)),
|
|
3940
|
+
}, i)), Zo = (e, t) => {
|
|
3939
3941
|
let n = new Set(t.map((e) => e.id));
|
|
3940
3942
|
return e.filter((e) => !n.has(e.id)).map((e) => e.id);
|
|
3941
|
-
},
|
|
3942
|
-
|
|
3943
|
-
},
|
|
3944
|
-
|
|
3945
|
-
let t =
|
|
3946
|
-
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", {
|
|
3947
3949
|
resourceType: e.resourceType,
|
|
3948
3950
|
action: e.action
|
|
3949
3951
|
}), !1;
|
|
3950
|
-
let n =
|
|
3951
|
-
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)", {
|
|
3952
3954
|
resourceType: e.resourceType,
|
|
3953
3955
|
action: e.action
|
|
3954
3956
|
}), !1;
|
|
@@ -3959,11 +3961,11 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3959
3961
|
resourceId: e.resourceId
|
|
3960
3962
|
}),
|
|
3961
3963
|
catch: (e) => e
|
|
3962
|
-
}).pipe(M.catchAll((t) => (
|
|
3964
|
+
}).pipe(M.catchAll((t) => (Qo.error("policy guard denied — tuple source failed", {
|
|
3963
3965
|
resourceType: e.resourceType,
|
|
3964
3966
|
resourceId: e.resourceId
|
|
3965
3967
|
}, t), M.succeed([])))), i = e.subject;
|
|
3966
|
-
return
|
|
3968
|
+
return Jo({
|
|
3967
3969
|
id: e.subject.id,
|
|
3968
3970
|
tenantId: i.tenantId ?? null,
|
|
3969
3971
|
...i.scopes === void 0 ? {} : { scopes: i.scopes }
|
|
@@ -3976,10 +3978,10 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
3976
3978
|
tuples: r
|
|
3977
3979
|
});
|
|
3978
3980
|
}));
|
|
3979
|
-
}, ns = (e) => {
|
|
3980
|
-
Promise.resolve().then(e);
|
|
3981
3981
|
}, rs = (e) => {
|
|
3982
|
-
|
|
3982
|
+
Promise.resolve().then(e);
|
|
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) => {
|
|
3983
3985
|
let a = r.get(t);
|
|
3984
3986
|
if (a === void 0) return;
|
|
3985
3987
|
r.delete(t);
|
|
@@ -4025,11 +4027,11 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4025
4027
|
load: async (e, t) => (await o(e, [t]))[0] ?? null,
|
|
4026
4028
|
loadMany: (e, t) => o(e, t)
|
|
4027
4029
|
};
|
|
4028
|
-
},
|
|
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({
|
|
4029
4031
|
traceId: t.traceId,
|
|
4030
4032
|
spanId: t.spanId,
|
|
4031
4033
|
sampled: t.sampled
|
|
4032
|
-
})) : e), M.catchAll(() => M.succeed(e))))))),
|
|
4034
|
+
})) : e), M.catchAll(() => M.succeed(e))))))), os = "voltro/audit", ss = "voltro/softDelete", cs = "voltro/tenant", ls = (e) => {
|
|
4033
4035
|
let t = /* @__PURE__ */ new Map();
|
|
4034
4036
|
for (let n of e) {
|
|
4035
4037
|
let e = /* @__PURE__ */ new Set();
|
|
@@ -4072,27 +4074,27 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4072
4074
|
return !1;
|
|
4073
4075
|
},
|
|
4074
4076
|
idScheme: (e) => t.get(e)?.idScheme,
|
|
4075
|
-
defaultFactories: (e) => t.get(e)?.defaultFactories ??
|
|
4076
|
-
computedFields: (e) => t.get(e)?.computedFields ??
|
|
4077
|
+
defaultFactories: (e) => t.get(e)?.defaultFactories ?? us,
|
|
4078
|
+
computedFields: (e) => t.get(e)?.computedFields ?? ds,
|
|
4077
4079
|
insertSchema: (e) => t.get(e)?.insertSchema,
|
|
4078
4080
|
validatePatchSchema: (e) => t.get(e)?.validatePatchSchema
|
|
4079
4081
|
};
|
|
4080
|
-
},
|
|
4082
|
+
}, us = /* @__PURE__ */ new Map(), ds = /* @__PURE__ */ new Map(), fs = ls([]), ps = class extends L.TaggedError()("NoRowFound", {
|
|
4081
4083
|
table: L.String,
|
|
4082
4084
|
found: L.Number
|
|
4083
4085
|
}) {
|
|
4084
4086
|
get message() {
|
|
4085
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`;
|
|
4086
4088
|
}
|
|
4087
|
-
},
|
|
4089
|
+
}, ms = class extends L.TaggedError()("OptimisticLockError", {
|
|
4088
4090
|
table: L.String,
|
|
4089
4091
|
expected: L.Number
|
|
4090
4092
|
}) {
|
|
4091
4093
|
get message() {
|
|
4092
4094
|
return `optimistic lock failed on '${this.table}': expected version ${this.expected}`;
|
|
4093
4095
|
}
|
|
4094
|
-
},
|
|
4095
|
-
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];
|
|
4096
4098
|
let t = e[0];
|
|
4097
4099
|
if (e.length === 2) return u(t, e[1]);
|
|
4098
4100
|
let n = e[1], r = e[2];
|
|
@@ -4110,11 +4112,11 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4110
4112
|
case "fts": return o(t, r);
|
|
4111
4113
|
default: return u(t, r);
|
|
4112
4114
|
}
|
|
4113
|
-
},
|
|
4115
|
+
}, _s = (e) => {
|
|
4114
4116
|
let t = m(e);
|
|
4115
4117
|
if (t === void 0) throw Error(`unknown table '${e}' — is it declared with table()?`);
|
|
4116
4118
|
return ie(t);
|
|
4117
|
-
},
|
|
4119
|
+
}, vs = class e {
|
|
4118
4120
|
backend;
|
|
4119
4121
|
scope;
|
|
4120
4122
|
table;
|
|
@@ -4128,7 +4130,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4128
4130
|
return new e(this.backend, this.scope, this.table, t, this.skipTenant, this.skipSoftDelete);
|
|
4129
4131
|
}
|
|
4130
4132
|
where(...e) {
|
|
4131
|
-
return this.clone(this.query.where(
|
|
4133
|
+
return this.clone(this.query.where(gs(e)));
|
|
4132
4134
|
}
|
|
4133
4135
|
orderBy(e, t = "asc") {
|
|
4134
4136
|
return this.clone(this.query.orderBy(e, t));
|
|
@@ -4163,7 +4165,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4163
4165
|
scopedQuery() {
|
|
4164
4166
|
let e = this.query, { subject: t, schemaRegistry: n } = this.scope;
|
|
4165
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")));
|
|
4166
|
-
let r = (this.scope.rowFilter ??
|
|
4168
|
+
let r = (this.scope.rowFilter ?? Pn)(this.table);
|
|
4167
4169
|
return r !== void 0 && (e = e.where(r)), e;
|
|
4168
4170
|
}
|
|
4169
4171
|
async all() {
|
|
@@ -4177,11 +4179,11 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4177
4179
|
}
|
|
4178
4180
|
async one() {
|
|
4179
4181
|
let e = await this.backend.query(this.scopedQuery().limit(2).descriptor), t = e[0];
|
|
4180
|
-
if (t === void 0) throw new
|
|
4182
|
+
if (t === void 0) throw new ps({
|
|
4181
4183
|
table: this.table,
|
|
4182
4184
|
found: 0
|
|
4183
4185
|
});
|
|
4184
|
-
if (e.length > 1) throw new
|
|
4186
|
+
if (e.length > 1) throw new ps({
|
|
4185
4187
|
table: this.table,
|
|
4186
4188
|
found: e.length
|
|
4187
4189
|
});
|
|
@@ -4197,7 +4199,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4197
4199
|
get descriptor() {
|
|
4198
4200
|
return this.scopedQuery().descriptor;
|
|
4199
4201
|
}
|
|
4200
|
-
},
|
|
4202
|
+
}, ys = class {
|
|
4201
4203
|
backend;
|
|
4202
4204
|
scope;
|
|
4203
4205
|
table;
|
|
@@ -4208,7 +4210,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4208
4210
|
this.backend = e, this.scope = t, this.table = n;
|
|
4209
4211
|
}
|
|
4210
4212
|
where(...e) {
|
|
4211
|
-
let n =
|
|
4213
|
+
let n = gs(e);
|
|
4212
4214
|
return this.predicate = this.predicate ? t(this.predicate, n) : n, this;
|
|
4213
4215
|
}
|
|
4214
4216
|
unscoped() {
|
|
@@ -4232,7 +4234,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4232
4234
|
}
|
|
4233
4235
|
async set(e) {
|
|
4234
4236
|
let t = await this.backend.updateMany(this.table, e, { where: this.scopedWhere() });
|
|
4235
|
-
if (this.expectedVersion !== void 0 && t === 0) throw new
|
|
4237
|
+
if (this.expectedVersion !== void 0 && t === 0) throw new ms({
|
|
4236
4238
|
table: this.table,
|
|
4237
4239
|
expected: this.expectedVersion
|
|
4238
4240
|
});
|
|
@@ -4241,7 +4243,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4241
4243
|
async restore() {
|
|
4242
4244
|
return this.backend.updateMany(this.table, { deletedAt: null }, { where: this.scopedWhere() });
|
|
4243
4245
|
}
|
|
4244
|
-
},
|
|
4246
|
+
}, bs = class {
|
|
4245
4247
|
backend;
|
|
4246
4248
|
scope;
|
|
4247
4249
|
table;
|
|
@@ -4251,7 +4253,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4251
4253
|
this.backend = e, this.scope = t, this.table = n;
|
|
4252
4254
|
}
|
|
4253
4255
|
where(...e) {
|
|
4254
|
-
let n =
|
|
4256
|
+
let n = gs(e);
|
|
4255
4257
|
return this.predicate = this.predicate ? t(this.predicate, n) : n, this;
|
|
4256
4258
|
}
|
|
4257
4259
|
unscoped() {
|
|
@@ -4272,32 +4274,32 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4272
4274
|
async hard() {
|
|
4273
4275
|
return this.backend.deleteMany(this.table, { where: this.scopedWhere() });
|
|
4274
4276
|
}
|
|
4275
|
-
},
|
|
4276
|
-
select: (n) => new
|
|
4277
|
-
updateWhere: (n) => new
|
|
4278
|
-
deleteWhere: (n) => new
|
|
4279
|
-
}),
|
|
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) => {
|
|
4280
4282
|
let n = {};
|
|
4281
4283
|
for (let r of t) e[r] !== void 0 && (n[r] = e[r]);
|
|
4282
4284
|
return n;
|
|
4283
|
-
},
|
|
4284
|
-
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({
|
|
4285
4287
|
table: e,
|
|
4286
|
-
reason:
|
|
4288
|
+
reason: Ts
|
|
4287
4289
|
});
|
|
4288
|
-
},
|
|
4289
|
-
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) => {
|
|
4290
4292
|
let a = { ...t }, o = n.schemaRegistry, s = o.idScheme(e);
|
|
4291
|
-
if (s !== void 0 && a[
|
|
4293
|
+
if (s !== void 0 && a[Ss] == null) if (s.kind === "numeric") delete a[Ss];
|
|
4292
4294
|
else {
|
|
4293
4295
|
let t = f(s, e);
|
|
4294
|
-
t !== null && (a[
|
|
4296
|
+
t !== null && (a[Ss] = t);
|
|
4295
4297
|
}
|
|
4296
4298
|
if (o.hasAudit(e)) {
|
|
4297
4299
|
let e = /* @__PURE__ */ new Date();
|
|
4298
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));
|
|
4299
4301
|
}
|
|
4300
|
-
o.hasTenant(e) && ("tenantId" in a || (i === null &&
|
|
4302
|
+
o.hasTenant(e) && ("tenantId" in a || (i === null && Es(e), a.tenantId = i));
|
|
4301
4303
|
let c = o.defaultFactories(e);
|
|
4302
4304
|
if (c.size > 0) for (let [e, t] of c) (!(e in a) || a[e] === void 0) && (a[e] = t());
|
|
4303
4305
|
let l = o.computedFields(e);
|
|
@@ -4312,10 +4314,10 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4312
4314
|
try {
|
|
4313
4315
|
return await r();
|
|
4314
4316
|
} catch (n) {
|
|
4315
|
-
let r =
|
|
4316
|
-
if (
|
|
4317
|
+
let r = qt(n);
|
|
4318
|
+
if (Jt(r)) {
|
|
4317
4319
|
let n = t.tenantId, i = `${r.dbConstraint ?? ""} ${r.dbColumn ?? ""} ${r.dbMessage ?? ""} ${r.dbCauseChain ?? ""}`.toLowerCase();
|
|
4318
|
-
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({
|
|
4319
4321
|
table: e,
|
|
4320
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)`
|
|
4321
4323
|
});
|
|
@@ -4336,11 +4338,11 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4336
4338
|
if (r === void 0) return t;
|
|
4337
4339
|
let i = L.decodeUnknownEither(r)(t);
|
|
4338
4340
|
if (i._tag === "Right") return t;
|
|
4339
|
-
let a =
|
|
4341
|
+
let a = wt.formatErrorSync(i.left).map((e) => ({
|
|
4340
4342
|
path: e.path.length === 0 ? "<root>" : e.path.join("."),
|
|
4341
4343
|
message: e.message
|
|
4342
4344
|
})), o = a[0];
|
|
4343
|
-
throw new
|
|
4345
|
+
throw new qi({
|
|
4344
4346
|
table: e,
|
|
4345
4347
|
summary: o === void 0 ? "patch validation failed" : `${o.path}: ${o.message}`,
|
|
4346
4348
|
issues: a
|
|
@@ -4353,20 +4355,20 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4353
4355
|
if (r === void 0) return t;
|
|
4354
4356
|
let i = L.decodeUnknownEither(r)(t);
|
|
4355
4357
|
if (i._tag === "Right") return t;
|
|
4356
|
-
let a =
|
|
4358
|
+
let a = wt.formatErrorSync(i.left).map((e) => ({
|
|
4357
4359
|
path: e.path.length === 0 ? "<root>" : e.path.join("."),
|
|
4358
4360
|
message: e.message
|
|
4359
4361
|
})), o = a[0];
|
|
4360
|
-
throw new
|
|
4362
|
+
throw new qi({
|
|
4361
4363
|
table: e,
|
|
4362
4364
|
summary: o === void 0 ? "row validation failed" : `${o.path}: ${o.message}`,
|
|
4363
4365
|
issues: a
|
|
4364
4366
|
});
|
|
4365
4367
|
}, y = n.dialect, b = (e, t) => {
|
|
4366
4368
|
let n = m(e);
|
|
4367
|
-
return l(y ? le(t, n, y) : t, n,
|
|
4369
|
+
return l(y ? le(t, n, y) : t, n, gi());
|
|
4368
4370
|
}, x = (e, t) => {
|
|
4369
|
-
let n = m(e), r = s(t, n,
|
|
4371
|
+
let n = m(e), r = s(t, n, gi());
|
|
4370
4372
|
return y ? c(r, n, y) : r;
|
|
4371
4373
|
}, C = (e) => {
|
|
4372
4374
|
let r = e.table, o = e.predicate;
|
|
@@ -4378,7 +4380,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4378
4380
|
let e = S("deletedAt");
|
|
4379
4381
|
o = o ? t(o, e) : e;
|
|
4380
4382
|
}
|
|
4381
|
-
return o =
|
|
4383
|
+
return o = Rn(a, r, o), o === e.predicate ? e : {
|
|
4382
4384
|
...e,
|
|
4383
4385
|
predicate: o
|
|
4384
4386
|
};
|
|
@@ -4391,7 +4393,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4391
4393
|
let n = (await e.query({
|
|
4392
4394
|
table: t,
|
|
4393
4395
|
predicate: {
|
|
4394
|
-
column:
|
|
4396
|
+
column: Ss,
|
|
4395
4397
|
op: "eq",
|
|
4396
4398
|
value: r
|
|
4397
4399
|
},
|
|
@@ -4412,7 +4414,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4412
4414
|
}), se = async (e, t) => ie(e, {
|
|
4413
4415
|
...t,
|
|
4414
4416
|
where: ae(e, t.where)
|
|
4415
|
-
}), ce =
|
|
4417
|
+
}), ce = xs({
|
|
4416
4418
|
query: ee,
|
|
4417
4419
|
updateMany: re,
|
|
4418
4420
|
deleteMany: ie,
|
|
@@ -4425,26 +4427,26 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4425
4427
|
return {
|
|
4426
4428
|
query: te,
|
|
4427
4429
|
one: (async (e) => {
|
|
4428
|
-
let t =
|
|
4430
|
+
let t = Cs(e), n = await te({
|
|
4429
4431
|
...t,
|
|
4430
4432
|
take: 2
|
|
4431
4433
|
}), r = n[0];
|
|
4432
|
-
if (r === void 0) throw new
|
|
4434
|
+
if (r === void 0) throw new ps({
|
|
4433
4435
|
table: t.table,
|
|
4434
4436
|
found: 0
|
|
4435
4437
|
});
|
|
4436
|
-
if (n.length > 1) throw new
|
|
4438
|
+
if (n.length > 1) throw new ps({
|
|
4437
4439
|
table: t.table,
|
|
4438
4440
|
found: n.length
|
|
4439
4441
|
});
|
|
4440
4442
|
return r;
|
|
4441
4443
|
}),
|
|
4442
4444
|
first: (async (e) => (await te({
|
|
4443
|
-
...
|
|
4445
|
+
...Cs(e),
|
|
4444
4446
|
take: 1
|
|
4445
4447
|
}))[0] ?? null),
|
|
4446
4448
|
maybeOne: (async (e) => (await te({
|
|
4447
|
-
...
|
|
4449
|
+
...Cs(e),
|
|
4448
4450
|
take: 1
|
|
4449
4451
|
}))[0] ?? null),
|
|
4450
4452
|
insert: async (t, n) => {
|
|
@@ -4462,7 +4464,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4462
4464
|
select: ce.select,
|
|
4463
4465
|
update: ((e, t, n) => t === void 0 ? ce.updateWhere(e) : ne(e, t, n)),
|
|
4464
4466
|
delete: ((e, t) => t === void 0 ? ce.deleteWhere(e) : w(e, t)),
|
|
4465
|
-
applyDefined:
|
|
4467
|
+
applyDefined: ws,
|
|
4466
4468
|
hardDelete: async (t, n) => e.delete(t, n),
|
|
4467
4469
|
updateMany: oe,
|
|
4468
4470
|
deleteMany: se,
|
|
@@ -4474,34 +4476,34 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4474
4476
|
let i = o(t, n), a = await p(t, i, () => e.insertIgnore(t, b(t, v(t, i)), r));
|
|
4475
4477
|
return x(t, [a])[0];
|
|
4476
4478
|
},
|
|
4477
|
-
transactional: (t) => e.transactional(async (e) => t(
|
|
4479
|
+
transactional: (t) => e.transactional(async (e) => t(Ds(e, n))),
|
|
4478
4480
|
...e.raw ? { raw: e.raw.bind(e) } : {},
|
|
4479
4481
|
onChange: (t) => e.onChange(t),
|
|
4480
4482
|
injectExternalChange: (t) => e.injectExternalChange(t),
|
|
4481
4483
|
...e.changeScope === void 0 ? {} : { changeScope: e.changeScope }
|
|
4482
4484
|
};
|
|
4483
|
-
},
|
|
4485
|
+
}, Os = class extends L.TaggedError()("CircuitOpen", {
|
|
4484
4486
|
name: L.String,
|
|
4485
4487
|
retryAfterMs: L.Number
|
|
4486
|
-
}) {},
|
|
4488
|
+
}) {}, ks = {
|
|
4487
4489
|
tag: "closed",
|
|
4488
4490
|
failureCount: 0,
|
|
4489
4491
|
halfOpenSuccesses: 0,
|
|
4490
4492
|
openedAt: 0
|
|
4491
|
-
},
|
|
4492
|
-
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* () {
|
|
4493
4495
|
let e = yield* I.get(a);
|
|
4494
4496
|
if (e.tag === "half-open") {
|
|
4495
4497
|
let t = e.halfOpenSuccesses + 1;
|
|
4496
|
-
yield* I.set(a, t >= r ?
|
|
4498
|
+
yield* I.set(a, t >= r ? ks : {
|
|
4497
4499
|
...e,
|
|
4498
4500
|
halfOpenSuccesses: t
|
|
4499
4501
|
});
|
|
4500
4502
|
return;
|
|
4501
4503
|
}
|
|
4502
|
-
e.failureCount !== 0 && (yield* I.set(a,
|
|
4504
|
+
e.failureCount !== 0 && (yield* I.set(a, ks));
|
|
4503
4505
|
}), s = M.gen(function* () {
|
|
4504
|
-
let t = yield*
|
|
4506
|
+
let t = yield* Be.currentTimeMillis, n = yield* I.get(a);
|
|
4505
4507
|
if (n.tag === "half-open" || n.tag === "open") {
|
|
4506
4508
|
yield* I.set(a, {
|
|
4507
4509
|
tag: "open",
|
|
@@ -4524,7 +4526,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4524
4526
|
}), c = M.gen(function* () {
|
|
4525
4527
|
let e = yield* I.get(a);
|
|
4526
4528
|
if (e.tag !== "open") return null;
|
|
4527
|
-
let t = (yield*
|
|
4529
|
+
let t = (yield* Be.currentTimeMillis) - e.openedAt;
|
|
4528
4530
|
return t >= n ? (yield* I.set(a, {
|
|
4529
4531
|
tag: "half-open",
|
|
4530
4532
|
failureCount: 0,
|
|
@@ -4537,7 +4539,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4537
4539
|
if (A.isInterruptedOnly(e)) return M.void;
|
|
4538
4540
|
let t = A.failureOption(e), n = t._tag === "Some" ? t.value : void 0;
|
|
4539
4541
|
return i(n) ? s : M.void;
|
|
4540
|
-
})) : yield* M.fail(new
|
|
4542
|
+
})) : yield* M.fail(new Os({
|
|
4541
4543
|
name: t,
|
|
4542
4544
|
retryAfterMs: n
|
|
4543
4545
|
}));
|
|
@@ -4546,25 +4548,25 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4546
4548
|
value: I.get(a).pipe(M.map((e) => e.tag)),
|
|
4547
4549
|
enumerable: !0
|
|
4548
4550
|
}), Object.defineProperty(u, "reset", {
|
|
4549
|
-
value: I.set(a,
|
|
4551
|
+
value: I.set(a, ks),
|
|
4550
4552
|
enumerable: !0
|
|
4551
4553
|
}), u;
|
|
4552
|
-
}) },
|
|
4553
|
-
|
|
4554
|
-
},
|
|
4555
|
-
|
|
4556
|
-
},
|
|
4557
|
-
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;
|
|
4558
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.");
|
|
4559
4561
|
return e({
|
|
4560
4562
|
subject: n,
|
|
4561
|
-
store:
|
|
4563
|
+
store: Ds(r, {
|
|
4562
4564
|
subject: n,
|
|
4563
4565
|
schemaRegistry: i,
|
|
4564
4566
|
...a === void 0 ? {} : { dialect: a }
|
|
4565
4567
|
})
|
|
4566
4568
|
});
|
|
4567
|
-
},
|
|
4569
|
+
}, Is = (e) => {
|
|
4568
4570
|
let { currentRegion: t, replicaRegions: n, inner: r } = e, i = (e) => {
|
|
4569
4571
|
if (t === void 0) return {
|
|
4570
4572
|
sameRegion: [],
|
|
@@ -4592,7 +4594,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4592
4594
|
return r.loadSnapshot();
|
|
4593
4595
|
}
|
|
4594
4596
|
};
|
|
4595
|
-
},
|
|
4597
|
+
}, Ls = (e = process.env) => {
|
|
4596
4598
|
for (let t of [
|
|
4597
4599
|
"VOLTRO_REGION",
|
|
4598
4600
|
"AWS_REGION",
|
|
@@ -4604,7 +4606,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4604
4606
|
let n = e[t];
|
|
4605
4607
|
if (typeof n == "string" && n.length > 0) return n;
|
|
4606
4608
|
}
|
|
4607
|
-
},
|
|
4609
|
+
}, Rs = () => {
|
|
4608
4610
|
let e = {
|
|
4609
4611
|
primary: 0,
|
|
4610
4612
|
lagByReplica: /* @__PURE__ */ new Map()
|
|
@@ -4629,27 +4631,27 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4629
4631
|
e.lagByReplica.set(t, n);
|
|
4630
4632
|
}
|
|
4631
4633
|
};
|
|
4632
|
-
},
|
|
4634
|
+
}, zs = Symbol.for("@voltro/ScheduleDefinition"), Bs = (e) => typeof e == "object" && !!e && zs in e, Vs = 30 * 6e4, Hs = (e) => {
|
|
4633
4635
|
let t = j.parse(e.cron, e.timezone);
|
|
4634
|
-
if (
|
|
4636
|
+
if (We.isLeft(t)) throw Error(`defineSchedule("${e.name}"): invalid cron expression "${e.cron}" (tz="${e.timezone}") — ${String(t.left)}`);
|
|
4635
4637
|
if (!e.timezone || e.timezone.trim() === "") throw Error(`defineSchedule("${e.name}"): timezone is required (e.g. "UTC", "Europe/Berlin")`);
|
|
4636
4638
|
if (e.handler === void 0 && e.workflow === void 0) throw Error(`defineSchedule("${e.name}"): define either handler or workflow`);
|
|
4637
4639
|
return {
|
|
4638
4640
|
...e,
|
|
4639
4641
|
onOverlap: e.onOverlap ?? "skip",
|
|
4640
4642
|
backfill: e.backfill ?? "skip",
|
|
4641
|
-
maxRuntimeMs: e.maxRuntimeMs ??
|
|
4642
|
-
[
|
|
4643
|
+
maxRuntimeMs: e.maxRuntimeMs ?? Vs,
|
|
4644
|
+
[zs]: !0
|
|
4643
4645
|
};
|
|
4644
|
-
},
|
|
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) => ({
|
|
4645
4647
|
tenantId: String(e.tenantId),
|
|
4646
4648
|
kind: String(e.kind),
|
|
4647
4649
|
refId: String(e.refId),
|
|
4648
4650
|
wakeAt: e.wakeAt instanceof Date ? e.wakeAt : new Date(String(e.wakeAt)),
|
|
4649
4651
|
status: e.status === "fired" ? "fired" : "pending"
|
|
4650
|
-
}),
|
|
4652
|
+
}), qs = async (e, t) => {
|
|
4651
4653
|
await e.upsert(Z, {
|
|
4652
|
-
id:
|
|
4654
|
+
id: Gs(t),
|
|
4653
4655
|
tenantId: t.tenantId,
|
|
4654
4656
|
kind: t.kind,
|
|
4655
4657
|
refId: t.refId,
|
|
@@ -4659,7 +4661,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4659
4661
|
conflictColumns: ["id"],
|
|
4660
4662
|
update: ["wakeAt", "status"]
|
|
4661
4663
|
});
|
|
4662
|
-
},
|
|
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: [{
|
|
4663
4665
|
column: "id",
|
|
4664
4666
|
op: "eq",
|
|
4665
4667
|
value: e
|
|
@@ -4667,16 +4669,16 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4667
4669
|
column: "status",
|
|
4668
4670
|
op: "eq",
|
|
4669
4671
|
value: t
|
|
4670
|
-
}] }),
|
|
4671
|
-
await e.updateMany(Z, { status: "pending" }, { where:
|
|
4672
|
-
},
|
|
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 = {
|
|
4673
4675
|
column: "status",
|
|
4674
4676
|
op: "eq",
|
|
4675
4677
|
value: "pending"
|
|
4676
|
-
},
|
|
4678
|
+
}, ec = async (e, t) => {
|
|
4677
4679
|
let n = {
|
|
4678
4680
|
table: Z,
|
|
4679
|
-
predicate:
|
|
4681
|
+
predicate: $s,
|
|
4680
4682
|
order: [{
|
|
4681
4683
|
column: "wakeAt",
|
|
4682
4684
|
direction: "asc"
|
|
@@ -4685,18 +4687,18 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4685
4687
|
skip: void 0,
|
|
4686
4688
|
projection: void 0
|
|
4687
4689
|
};
|
|
4688
|
-
return (await e.query(n)).map(
|
|
4689
|
-
},
|
|
4690
|
-
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();
|
|
4691
4693
|
return r.filter((e) => e.wakeAt.getTime() <= i);
|
|
4692
|
-
},
|
|
4694
|
+
}, nc = async (e) => (await ec(e, 1))[0] ?? null, rc = {
|
|
4693
4695
|
column: "status",
|
|
4694
4696
|
op: "eq",
|
|
4695
4697
|
value: "fired"
|
|
4696
|
-
},
|
|
4698
|
+
}, ic = async (e, t = {}) => {
|
|
4697
4699
|
let n = {
|
|
4698
4700
|
table: Z,
|
|
4699
|
-
predicate:
|
|
4701
|
+
predicate: rc,
|
|
4700
4702
|
order: [{
|
|
4701
4703
|
column: "wakeAt",
|
|
4702
4704
|
direction: "asc"
|
|
@@ -4707,12 +4709,12 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4707
4709
|
}, r = await e.query(n), i = t.firedOlderThan?.getTime(), a = 0;
|
|
4708
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++;
|
|
4709
4711
|
return a;
|
|
4710
|
-
},
|
|
4712
|
+
}, ac = Wi, oc = "default", sc = {
|
|
4711
4713
|
kind: "single",
|
|
4712
4714
|
tryClaim: async () => !0
|
|
4713
|
-
},
|
|
4715
|
+
}, cc = "_voltro_schedule_claims", lc = (e, t, n) => {
|
|
4714
4716
|
let r = async (t) => (await e.query({
|
|
4715
|
-
table:
|
|
4717
|
+
table: cc,
|
|
4716
4718
|
order: [],
|
|
4717
4719
|
predicate: void 0,
|
|
4718
4720
|
projection: ["id"],
|
|
@@ -4727,7 +4729,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4727
4729
|
if (await r(s)) return !1;
|
|
4728
4730
|
} catch {}
|
|
4729
4731
|
try {
|
|
4730
|
-
return await e.insert(
|
|
4732
|
+
return await e.insert(cc, {
|
|
4731
4733
|
id: s,
|
|
4732
4734
|
scheduleName: i,
|
|
4733
4735
|
bucket: o,
|
|
@@ -4745,12 +4747,12 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4745
4747
|
}
|
|
4746
4748
|
}
|
|
4747
4749
|
};
|
|
4748
|
-
},
|
|
4750
|
+
}, uc = "_voltro_schedule_runs", dc = async (e, t) => {
|
|
4749
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) => {
|
|
4750
|
-
s?.(e,
|
|
4752
|
+
s?.(e, pc(t));
|
|
4751
4753
|
}, _ = async (e, t, r, i, s, c) => {
|
|
4752
4754
|
try {
|
|
4753
|
-
let o = `sr_${
|
|
4755
|
+
let o = `sr_${_e()}`, l = await n.insert(uc, {
|
|
4754
4756
|
id: o,
|
|
4755
4757
|
name: e.name,
|
|
4756
4758
|
status: i,
|
|
@@ -4775,7 +4777,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4775
4777
|
}
|
|
4776
4778
|
}, v = async (e, t) => {
|
|
4777
4779
|
try {
|
|
4778
|
-
let r = await n.update(
|
|
4780
|
+
let r = await n.update(uc, e, t);
|
|
4779
4781
|
r && g("update", r);
|
|
4780
4782
|
} catch (t) {
|
|
4781
4783
|
o.warn("schedule: failed to record run finish", {
|
|
@@ -4786,7 +4788,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4786
4788
|
}, y = async (e) => {
|
|
4787
4789
|
try {
|
|
4788
4790
|
let t = await n.query({
|
|
4789
|
-
table:
|
|
4791
|
+
table: uc,
|
|
4790
4792
|
predicate: {
|
|
4791
4793
|
_tag: "leaf",
|
|
4792
4794
|
column: "status",
|
|
@@ -4821,7 +4823,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4821
4823
|
scheduleName: e.name,
|
|
4822
4824
|
trigger: n,
|
|
4823
4825
|
runId: s,
|
|
4824
|
-
subject:
|
|
4826
|
+
subject: ac
|
|
4825
4827
|
})
|
|
4826
4828
|
};
|
|
4827
4829
|
try {
|
|
@@ -4852,7 +4854,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4852
4854
|
let n = Q(t).includes("exceeded maxRuntimeMs");
|
|
4853
4855
|
s && await v(s, {
|
|
4854
4856
|
status: "failed",
|
|
4855
|
-
errorTag: n ? "timeout" :
|
|
4857
|
+
errorTag: n ? "timeout" : fc(t),
|
|
4856
4858
|
errorMessage: Q(t),
|
|
4857
4859
|
completedAt: /* @__PURE__ */ new Date(),
|
|
4858
4860
|
durationMs: Date.now() - l
|
|
@@ -4860,7 +4862,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4860
4862
|
name: e.name,
|
|
4861
4863
|
reason: Q(t),
|
|
4862
4864
|
timeout: n
|
|
4863
|
-
}),
|
|
4865
|
+
}), Fe({
|
|
4864
4866
|
error: t,
|
|
4865
4867
|
source: "schedule",
|
|
4866
4868
|
name: e.name,
|
|
@@ -4909,8 +4911,8 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4909
4911
|
}
|
|
4910
4912
|
}, C = async (e) => {
|
|
4911
4913
|
try {
|
|
4912
|
-
let t = j.next(
|
|
4913
|
-
await
|
|
4914
|
+
let t = j.next(Us(e), /* @__PURE__ */ new Date());
|
|
4915
|
+
await qs(n, {
|
|
4914
4916
|
tenantId: u,
|
|
4915
4917
|
kind: "schedule",
|
|
4916
4918
|
refId: e.name,
|
|
@@ -4924,7 +4926,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4924
4926
|
}
|
|
4925
4927
|
}, ee = 2147483647, te = (e) => {
|
|
4926
4928
|
if (m) return;
|
|
4927
|
-
let n =
|
|
4929
|
+
let n = Us(e), r = j.next(n, /* @__PURE__ */ new Date()), i = () => {
|
|
4928
4930
|
if (m) return;
|
|
4929
4931
|
let n = r.getTime() - Date.now();
|
|
4930
4932
|
if (n > ee) {
|
|
@@ -4946,7 +4948,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4946
4948
|
let r;
|
|
4947
4949
|
try {
|
|
4948
4950
|
let t = (await n.query({
|
|
4949
|
-
table:
|
|
4951
|
+
table: uc,
|
|
4950
4952
|
order: [{
|
|
4951
4953
|
column: "scheduledAt",
|
|
4952
4954
|
direction: "desc"
|
|
@@ -4965,7 +4967,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
4965
4967
|
return;
|
|
4966
4968
|
}
|
|
4967
4969
|
if (!r) return;
|
|
4968
|
-
let i =
|
|
4970
|
+
let i = Us(e), a = [], s = j.next(i, r), c = Date.now();
|
|
4969
4971
|
for (; s.getTime() < c && a.length < 1e3;) a.push(s), s = j.next(i, s);
|
|
4970
4972
|
if (a.length !== 0) if (o.info("schedule: backfill", {
|
|
4971
4973
|
name: e.name,
|
|
@@ -5010,11 +5012,11 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5010
5012
|
d.clear(), o.info("scheduler: stopped");
|
|
5011
5013
|
}
|
|
5012
5014
|
};
|
|
5013
|
-
}, 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) => {
|
|
5014
5016
|
let t = {};
|
|
5015
5017
|
for (let [n, r] of Object.entries(e)) t[n] = r instanceof Date ? r.toISOString() : r;
|
|
5016
5018
|
return t;
|
|
5017
|
-
},
|
|
5019
|
+
}, mc = (e, t, n, r) => {
|
|
5018
5020
|
let i = !1, a, o = async () => {
|
|
5019
5021
|
if (i) return;
|
|
5020
5022
|
let a = new Date(Math.floor(Date.now() / t) * t), o = !1;
|
|
@@ -5044,7 +5046,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5044
5046
|
i || (i = !0, a && clearInterval(a), a = void 0);
|
|
5045
5047
|
}
|
|
5046
5048
|
};
|
|
5047
|
-
},
|
|
5049
|
+
}, hc = (e) => (t, n, r) => mc(t, n, r, e), gc = T("_voltro_schedule_runs", {
|
|
5048
5050
|
id: v({ prefix: "schrun" }),
|
|
5049
5051
|
name: E(),
|
|
5050
5052
|
status: E().oneOf([
|
|
@@ -5074,13 +5076,13 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5074
5076
|
]).nullable(),
|
|
5075
5077
|
replicaId: E().nullable(),
|
|
5076
5078
|
result: C().nullable()
|
|
5077
|
-
}).index(["name", "scheduledAt"]).index(["status"]),
|
|
5079
|
+
}).index(["name", "scheduledAt"]).index(["status"]), _c = T("_voltro_schedule_claims", {
|
|
5078
5080
|
id: v({ prefix: "schclaim" }),
|
|
5079
5081
|
scheduleName: E(),
|
|
5080
5082
|
bucket: E(),
|
|
5081
5083
|
claimedBy: E(),
|
|
5082
5084
|
claimedAt: D()
|
|
5083
|
-
}).index(["scheduleName", "bucket"]).index(["claimedAt"]),
|
|
5085
|
+
}).index(["scheduleName", "bucket"]).index(["claimedAt"]), vc = T("_voltro_traces", {
|
|
5084
5086
|
id: v({ prefix: "span" }),
|
|
5085
5087
|
traceId: E(),
|
|
5086
5088
|
spanId: E(),
|
|
@@ -5104,7 +5106,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5104
5106
|
durationMs: b(),
|
|
5105
5107
|
attributes: C().nullable(),
|
|
5106
5108
|
events: C().nullable()
|
|
5107
|
-
}).index(["traceId", "startedAt"]).index(["startedAt"]).index(["status"]),
|
|
5109
|
+
}).index(["traceId", "startedAt"]).index(["startedAt"]).index(["status"]), yc = T("_voltro_undo_log", {
|
|
5108
5110
|
id: v({ prefix: "undo" }),
|
|
5109
5111
|
tag: E(),
|
|
5110
5112
|
label: E().nullable(),
|
|
@@ -5115,25 +5117,25 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5115
5117
|
crossesAction: r().default(!1),
|
|
5116
5118
|
undone: r().default(!1),
|
|
5117
5119
|
createdAt: D().default("now")
|
|
5118
|
-
}).index(["subjectId", "createdAt"]).reactive(),
|
|
5120
|
+
}).index(["subjectId", "createdAt"]).reactive(), bc = (e = process.env) => {
|
|
5119
5121
|
let t = (e.VOLTRO_UNDO ?? "").toLowerCase();
|
|
5120
5122
|
return t === "on" || t === "1" || t === "true" ? !0 : t === "off" || t === "0" || t === "false" ? !1 : e.NODE_ENV !== "production";
|
|
5121
|
-
},
|
|
5123
|
+
}, xc = (e) => e.startsWith("_voltro"), Sc = async (e, t, n) => (await e.query({
|
|
5122
5124
|
table: t,
|
|
5123
5125
|
predicate: u("id", n),
|
|
5124
5126
|
order: []
|
|
5125
|
-
}))[0] ?? null,
|
|
5127
|
+
}))[0] ?? null, Cc = (e, t) => new Proxy(e, { get(e, n, r) {
|
|
5126
5128
|
if (n === "insert") return async (n, r) => {
|
|
5127
5129
|
let i = await e.insert(n, r);
|
|
5128
|
-
return
|
|
5130
|
+
return xc(n) || t({
|
|
5129
5131
|
table: n,
|
|
5130
5132
|
op: "insert",
|
|
5131
5133
|
next: i
|
|
5132
5134
|
}), i;
|
|
5133
5135
|
};
|
|
5134
5136
|
if (n === "update") return async (n, r, i) => {
|
|
5135
|
-
let a =
|
|
5136
|
-
return
|
|
5137
|
+
let a = xc(n) ? null : await Sc(e, n, r), o = await e.update(n, r, i);
|
|
5138
|
+
return xc(n) || t({
|
|
5137
5139
|
table: n,
|
|
5138
5140
|
op: "update",
|
|
5139
5141
|
id: r,
|
|
@@ -5142,8 +5144,8 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5142
5144
|
}), o;
|
|
5143
5145
|
};
|
|
5144
5146
|
if (n === "delete") return async (n, r) => {
|
|
5145
|
-
let i =
|
|
5146
|
-
return !
|
|
5147
|
+
let i = xc(n) ? null : await Sc(e, n, r), a = await e.delete(n, r);
|
|
5148
|
+
return !xc(n) && a && t({
|
|
5147
5149
|
table: n,
|
|
5148
5150
|
op: "delete",
|
|
5149
5151
|
id: r,
|
|
@@ -5152,10 +5154,10 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5152
5154
|
};
|
|
5153
5155
|
let i = Reflect.get(e, n, r);
|
|
5154
5156
|
return typeof i == "function" ? i.bind(e) : i;
|
|
5155
|
-
} }),
|
|
5157
|
+
} }), wc = (e) => {
|
|
5156
5158
|
let t = [];
|
|
5157
5159
|
return {
|
|
5158
|
-
tx:
|
|
5160
|
+
tx: Cc(e, (e) => t.push(e)),
|
|
5159
5161
|
persist: async (e, n) => {
|
|
5160
5162
|
if (t.length === 0 || n.tag.startsWith("__voltro")) return;
|
|
5161
5163
|
let r = n.subject;
|
|
@@ -5171,14 +5173,14 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5171
5173
|
});
|
|
5172
5174
|
}
|
|
5173
5175
|
};
|
|
5174
|
-
},
|
|
5176
|
+
}, Tc = (e) => {
|
|
5175
5177
|
if (e.id !== void 0) return e.id;
|
|
5176
5178
|
let t = e.next?.id;
|
|
5177
5179
|
if (typeof t == "string") return t;
|
|
5178
5180
|
let n = e.prev?.id;
|
|
5179
5181
|
return typeof n == "string" ? n : void 0;
|
|
5180
|
-
},
|
|
5181
|
-
let t =
|
|
5182
|
+
}, Ec = (e) => {
|
|
5183
|
+
let t = Tc(e);
|
|
5182
5184
|
switch (e.op) {
|
|
5183
5185
|
case "insert": return t === void 0 ? null : {
|
|
5184
5186
|
table: e.table,
|
|
@@ -5202,28 +5204,28 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5202
5204
|
row: e.prev
|
|
5203
5205
|
};
|
|
5204
5206
|
}
|
|
5205
|
-
},
|
|
5206
|
-
if (e.crossesAction) throw new
|
|
5207
|
+
}, Dc = (e) => {
|
|
5208
|
+
if (e.crossesAction) throw new Oc(e.invocationId, "action");
|
|
5207
5209
|
let t = [];
|
|
5208
5210
|
for (let n = e.changes.length - 1; n >= 0; --n) {
|
|
5209
|
-
let r =
|
|
5211
|
+
let r = Ec(e.changes[n]);
|
|
5210
5212
|
r !== null && t.push(r);
|
|
5211
5213
|
}
|
|
5212
5214
|
return t;
|
|
5213
|
-
},
|
|
5215
|
+
}, Oc = class extends Error {
|
|
5214
5216
|
invocationId;
|
|
5215
5217
|
boundary;
|
|
5216
5218
|
_tag = "UndoBoundaryError";
|
|
5217
5219
|
constructor(e, t) {
|
|
5218
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";
|
|
5219
5221
|
}
|
|
5220
|
-
},
|
|
5222
|
+
}, kc = (e, t, n = ["updatedAt", "updatedBy"]) => {
|
|
5221
5223
|
if (t == null) return e == null;
|
|
5222
5224
|
if (e == null) return !1;
|
|
5223
5225
|
let r = new Set(n);
|
|
5224
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;
|
|
5225
5227
|
return !0;
|
|
5226
|
-
},
|
|
5228
|
+
}, Ac = class {
|
|
5227
5229
|
capacity;
|
|
5228
5230
|
done = [];
|
|
5229
5231
|
undone = [];
|
|
@@ -5259,7 +5261,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5259
5261
|
redo: [...this.undone]
|
|
5260
5262
|
};
|
|
5261
5263
|
}
|
|
5262
|
-
},
|
|
5264
|
+
}, jc = (e, t = /* @__PURE__ */ new Set()) => e.op === "insert" ? {
|
|
5263
5265
|
table: e.table,
|
|
5264
5266
|
op: "insert",
|
|
5265
5267
|
next: e.new ?? null
|
|
@@ -5276,7 +5278,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5276
5278
|
table: e.table,
|
|
5277
5279
|
op: "delete",
|
|
5278
5280
|
prev: e.old ?? null
|
|
5279
|
-
},
|
|
5281
|
+
}, Mc = async (e, t) => {
|
|
5280
5282
|
switch (t.op) {
|
|
5281
5283
|
case "delete":
|
|
5282
5284
|
await e.delete(t.table, t.id);
|
|
@@ -5294,21 +5296,21 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5294
5296
|
await e.insert(t.table, t.row);
|
|
5295
5297
|
return;
|
|
5296
5298
|
}
|
|
5297
|
-
},
|
|
5298
|
-
for (let n of t) await
|
|
5299
|
-
},
|
|
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({
|
|
5300
5302
|
table: t,
|
|
5301
5303
|
predicate: u("id", n),
|
|
5302
5304
|
order: []
|
|
5303
|
-
}))[0] ?? null,
|
|
5305
|
+
}))[0] ?? null, Lc = (e) => {
|
|
5304
5306
|
try {
|
|
5305
5307
|
let t = JSON.parse(String(e ?? "[]"));
|
|
5306
5308
|
return Array.isArray(t) ? t : [];
|
|
5307
5309
|
} catch {
|
|
5308
5310
|
return [];
|
|
5309
5311
|
}
|
|
5310
|
-
},
|
|
5311
|
-
let n =
|
|
5312
|
+
}, Rc = (e) => e.id ?? e.next?.id ?? e.prev?.id, zc = async (e, t) => {
|
|
5313
|
+
let n = Pc(t);
|
|
5312
5314
|
return [...await t.store.query({
|
|
5313
5315
|
table: "_voltro_undo_log",
|
|
5314
5316
|
predicate: u("subjectId", n),
|
|
@@ -5317,68 +5319,68 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5317
5319
|
id: String(e.id),
|
|
5318
5320
|
tag: String(e.tag ?? ""),
|
|
5319
5321
|
label: e.label ?? null,
|
|
5320
|
-
undone:
|
|
5321
|
-
crossesAction:
|
|
5322
|
+
undone: Fc(e.undone),
|
|
5323
|
+
crossesAction: Fc(e.crossesAction),
|
|
5322
5324
|
createdAt: String(e.createdAt ?? "")
|
|
5323
5325
|
}));
|
|
5324
|
-
}, zc = async (e, t) => {
|
|
5325
|
-
let n = await Fc(t.store, "_voltro_undo_log", e.invocationId);
|
|
5326
|
-
if (!n) throw new De({ invocationId: e.invocationId });
|
|
5327
|
-
if ((n.subjectId ?? null) !== Nc(t)) throw new Ee({ invocationId: e.invocationId });
|
|
5328
|
-
return n;
|
|
5329
5326
|
}, Bc = async (e, t) => {
|
|
5330
|
-
let n = await
|
|
5331
|
-
if (
|
|
5332
|
-
if (
|
|
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 });
|
|
5330
|
+
return n;
|
|
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({
|
|
5333
5335
|
invocationId: e.invocationId,
|
|
5334
5336
|
reason: "action"
|
|
5335
5337
|
});
|
|
5336
|
-
let r =
|
|
5338
|
+
let r = Lc(n.changes);
|
|
5337
5339
|
for (let n of r) {
|
|
5338
|
-
let r =
|
|
5339
|
-
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({
|
|
5340
5342
|
invocationId: e.invocationId,
|
|
5341
5343
|
reason: "conflict"
|
|
5342
5344
|
});
|
|
5343
5345
|
}
|
|
5344
5346
|
let i = {
|
|
5345
5347
|
invocationId: e.invocationId,
|
|
5346
|
-
subject:
|
|
5348
|
+
subject: Pc(t),
|
|
5347
5349
|
changes: r,
|
|
5348
5350
|
crossesAction: !1
|
|
5349
5351
|
};
|
|
5350
|
-
return await
|
|
5351
|
-
},
|
|
5352
|
-
let n = await
|
|
5353
|
-
if (!
|
|
5354
|
-
for (let e of
|
|
5355
|
-
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);
|
|
5356
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);
|
|
5357
5359
|
}
|
|
5358
5360
|
return await t.store.update("_voltro_undo_log", e.invocationId, { undone: !1 }), { ok: !0 };
|
|
5359
|
-
},
|
|
5361
|
+
}, Uc = (e = process.env) => {
|
|
5360
5362
|
let t = (e.VOLTRO_TIMELINE ?? "").toLowerCase();
|
|
5361
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";
|
|
5362
|
-
},
|
|
5364
|
+
}, Wc = /pass(word)?|secret|token|api[_-]?key|authorization|cookie|ssn|credit[_-]?card|card[_-]?number|cvv|encrypted/i, Gc = "«redacted»", Kc = (e) => {
|
|
5363
5365
|
if (e == null) return null;
|
|
5364
5366
|
let t = {};
|
|
5365
|
-
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;
|
|
5366
5368
|
return t;
|
|
5367
|
-
},
|
|
5369
|
+
}, qc = (e) => {
|
|
5368
5370
|
let t = e?.id;
|
|
5369
5371
|
return typeof t == "string" ? t : void 0;
|
|
5370
|
-
},
|
|
5372
|
+
}, Jc = (e, t) => {
|
|
5371
5373
|
if (t.op === "insert") {
|
|
5372
|
-
let n =
|
|
5374
|
+
let n = qc(t.new);
|
|
5373
5375
|
return n === void 0 ? e : e.filter((e) => e.id !== n);
|
|
5374
5376
|
}
|
|
5375
5377
|
if (t.op === "update") {
|
|
5376
5378
|
if (t.old == null) return e;
|
|
5377
|
-
let n =
|
|
5379
|
+
let n = qc(t.new) ?? qc(t.old);
|
|
5378
5380
|
return e.map((e) => e.id === n ? t.old : e);
|
|
5379
5381
|
}
|
|
5380
5382
|
return t.old == null ? e : [...e, t.old];
|
|
5381
|
-
},
|
|
5383
|
+
}, Yc = class {
|
|
5382
5384
|
mode;
|
|
5383
5385
|
capacity;
|
|
5384
5386
|
now;
|
|
@@ -5398,8 +5400,8 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5398
5400
|
ts: this.now(),
|
|
5399
5401
|
table: e.table,
|
|
5400
5402
|
op: e.op,
|
|
5401
|
-
old:
|
|
5402
|
-
new:
|
|
5403
|
+
old: Kc(e.old),
|
|
5404
|
+
new: Kc(e.new),
|
|
5403
5405
|
tenantId: n
|
|
5404
5406
|
}), this.ring.length > this.capacity && this.ring.shift(), t;
|
|
5405
5407
|
}
|
|
@@ -5412,23 +5414,23 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5412
5414
|
}
|
|
5413
5415
|
replay(e, t, n) {
|
|
5414
5416
|
let r = this.ring.filter((n) => n.table === e && n.seq > t).sort((e, t) => t.seq - e.seq), i = n;
|
|
5415
|
-
for (let e of r) i =
|
|
5417
|
+
for (let e of r) i = Jc(i, e);
|
|
5416
5418
|
return i;
|
|
5417
5419
|
}
|
|
5418
|
-
},
|
|
5419
|
-
|
|
5420
|
-
},
|
|
5421
|
-
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();
|
|
5422
5424
|
if (t.enabled) try {
|
|
5423
5425
|
t.record(e);
|
|
5424
5426
|
} catch {}
|
|
5425
|
-
},
|
|
5427
|
+
}, el = /* @__PURE__ */ new Set([
|
|
5426
5428
|
"count",
|
|
5427
5429
|
"sum",
|
|
5428
5430
|
"avg",
|
|
5429
5431
|
"min",
|
|
5430
5432
|
"max"
|
|
5431
|
-
]),
|
|
5433
|
+
]), tl = (e) => {
|
|
5432
5434
|
if (e.joins !== void 0 && e.joins.length > 0) return {
|
|
5433
5435
|
maintainable: !1,
|
|
5434
5436
|
reason: "joins are not maintainable in v1"
|
|
@@ -5450,7 +5452,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5450
5452
|
reason: "v1 maintains exactly one aggregation"
|
|
5451
5453
|
};
|
|
5452
5454
|
let t = e.aggregations[0];
|
|
5453
|
-
return
|
|
5455
|
+
return el.has(t.op) ? t.op !== "count" && (t.column === void 0 || t.column.length === 0) ? {
|
|
5454
5456
|
maintainable: !1,
|
|
5455
5457
|
reason: `op '${t.op}' requires a column`
|
|
5456
5458
|
} : {
|
|
@@ -5464,7 +5466,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5464
5466
|
maintainable: !1,
|
|
5465
5467
|
reason: `op '${t.op}' is not maintainable`
|
|
5466
5468
|
};
|
|
5467
|
-
},
|
|
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) => {
|
|
5468
5470
|
switch (e.op) {
|
|
5469
5471
|
case "count": return t.count;
|
|
5470
5472
|
case "sum": return t.sum ?? 0;
|
|
@@ -5472,10 +5474,10 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5472
5474
|
case "min":
|
|
5473
5475
|
case "max": return t.count > 0 ? t.extreme ?? null : null;
|
|
5474
5476
|
}
|
|
5475
|
-
},
|
|
5477
|
+
}, al = (e, t) => {
|
|
5476
5478
|
let n = /* @__PURE__ */ new Map();
|
|
5477
5479
|
for (let r of t) {
|
|
5478
|
-
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);
|
|
5479
5481
|
if (i === void 0) n.set(t, {
|
|
5480
5482
|
count: 1,
|
|
5481
5483
|
...e.op === "sum" || e.op === "avg" ? { sum: a } : {},
|
|
@@ -5491,10 +5493,10 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5491
5493
|
}
|
|
5492
5494
|
}
|
|
5493
5495
|
return n;
|
|
5494
|
-
},
|
|
5496
|
+
}, ol = (e, t) => [...t.entries()].map(([t, n]) => ({
|
|
5495
5497
|
groupKey: t,
|
|
5496
|
-
value:
|
|
5497
|
-
})),
|
|
5498
|
+
value: il(e, n)
|
|
5499
|
+
})), sl = (e, t, n) => {
|
|
5498
5500
|
let r = new Map(t), i = /* @__PURE__ */ new Set(), a = (t) => {
|
|
5499
5501
|
let n = $(t, e.groupBy), a = r.get(n);
|
|
5500
5502
|
if (a === void 0) return;
|
|
@@ -5503,7 +5505,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5503
5505
|
r.delete(n);
|
|
5504
5506
|
return;
|
|
5505
5507
|
}
|
|
5506
|
-
let s =
|
|
5508
|
+
let s = rl(t, e.column);
|
|
5507
5509
|
e.op === "min" || e.op === "max" ? (a.extreme !== void 0 && s === a.extreme && i.add(n), r.set(n, {
|
|
5508
5510
|
count: o,
|
|
5509
5511
|
...a.extreme === void 0 ? {} : { extreme: a.extreme }
|
|
@@ -5512,7 +5514,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5512
5514
|
...e.op === "sum" || e.op === "avg" ? { sum: (a.sum ?? 0) - s } : {}
|
|
5513
5515
|
});
|
|
5514
5516
|
}, o = (t) => {
|
|
5515
|
-
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);
|
|
5516
5518
|
if (i === void 0) {
|
|
5517
5519
|
r.set(n, {
|
|
5518
5520
|
count: 1,
|
|
@@ -5532,15 +5534,15 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5532
5534
|
state: r,
|
|
5533
5535
|
rescanGroups: [...i]
|
|
5534
5536
|
};
|
|
5535
|
-
},
|
|
5537
|
+
}, cl = (e, t, n, r) => {
|
|
5536
5538
|
if (n.length === 0) return t;
|
|
5537
|
-
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);
|
|
5538
5540
|
for (let e of i) {
|
|
5539
5541
|
let t = a.get(e);
|
|
5540
5542
|
t === void 0 ? o.delete(e) : o.set(e, t);
|
|
5541
5543
|
}
|
|
5542
5544
|
return o;
|
|
5543
|
-
},
|
|
5545
|
+
}, ll = class {
|
|
5544
5546
|
shape;
|
|
5545
5547
|
state = /* @__PURE__ */ new Map();
|
|
5546
5548
|
groups = /* @__PURE__ */ new Map();
|
|
@@ -5548,7 +5550,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5548
5550
|
this.shape = e;
|
|
5549
5551
|
}
|
|
5550
5552
|
seed(e) {
|
|
5551
|
-
this.state =
|
|
5553
|
+
this.state = al(this.shape, e), this.groups.clear();
|
|
5552
5554
|
for (let t of e) {
|
|
5553
5555
|
let e = $(t, this.shape.groupBy);
|
|
5554
5556
|
this.groups.has(e) || this.groups.set(e, this.groupValues(t));
|
|
@@ -5560,14 +5562,14 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5560
5562
|
let e = $(t, this.shape.groupBy);
|
|
5561
5563
|
this.groups.has(e) || this.groups.set(e, this.groupValues(t));
|
|
5562
5564
|
}
|
|
5563
|
-
let n =
|
|
5565
|
+
let n = sl(this.shape, this.state, e);
|
|
5564
5566
|
this.state = n.state;
|
|
5565
5567
|
for (let e of this.groups.keys()) this.state.has(e) || this.groups.delete(e);
|
|
5566
5568
|
return n.rescanGroups;
|
|
5567
5569
|
}
|
|
5568
5570
|
resolveRescan(e, t) {
|
|
5569
5571
|
if (e.length === 0) return;
|
|
5570
|
-
this.state =
|
|
5572
|
+
this.state = cl(this.shape, this.state, e, t);
|
|
5571
5573
|
let n = new Set(e);
|
|
5572
5574
|
for (let e of t) {
|
|
5573
5575
|
let t = $(e, this.shape.groupBy);
|
|
@@ -5576,7 +5578,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5576
5578
|
for (let e of n) this.state.has(e) || this.groups.delete(e);
|
|
5577
5579
|
}
|
|
5578
5580
|
materialize() {
|
|
5579
|
-
return
|
|
5581
|
+
return ol(this.shape, this.state).map((e) => ({
|
|
5580
5582
|
groupKey: e.groupKey,
|
|
5581
5583
|
group: this.groups.get(e.groupKey) ?? {},
|
|
5582
5584
|
value: e.value
|
|
@@ -5589,7 +5591,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5589
5591
|
for (let r of t) n[r] = e[r];
|
|
5590
5592
|
return n;
|
|
5591
5593
|
}
|
|
5592
|
-
},
|
|
5594
|
+
}, ul = T("_voltro_rebac_tuples", {
|
|
5593
5595
|
id: v({ prefix: "rbct" }),
|
|
5594
5596
|
subjectId: E(),
|
|
5595
5597
|
relation: E(),
|
|
@@ -5601,7 +5603,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5601
5603
|
"subjectId",
|
|
5602
5604
|
"resourceType",
|
|
5603
5605
|
"resourceId"
|
|
5604
|
-
]).reactive(),
|
|
5606
|
+
]).reactive(), dl = async (e, n, r, i) => n === null ? [] : (await e.query({
|
|
5605
5607
|
table: "_voltro_rebac_tuples",
|
|
5606
5608
|
predicate: t(u("subjectId", n), u("resourceType", r), u("resourceId", i)),
|
|
5607
5609
|
order: [],
|
|
@@ -5613,16 +5615,16 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5613
5615
|
relation: e.relation,
|
|
5614
5616
|
resourceType: e.resourceType,
|
|
5615
5617
|
resourceId: e.resourceId
|
|
5616
|
-
})),
|
|
5618
|
+
})), fl = (e) => ({
|
|
5617
5619
|
id: e.id,
|
|
5618
5620
|
tenantId: e.tenantId,
|
|
5619
5621
|
...e.scopes === void 0 ? {} : { scopes: e.scopes }
|
|
5620
|
-
}),
|
|
5621
|
-
let n = t.getPolicy ??
|
|
5622
|
+
}), pl = (e, t) => {
|
|
5623
|
+
let n = t.getPolicy ?? Ho;
|
|
5622
5624
|
return (r, i) => {
|
|
5623
5625
|
let a = e[i.tag];
|
|
5624
5626
|
if (a === void 0) return r;
|
|
5625
|
-
let o = n(a.resourceType), s = (e) => M.fail(new
|
|
5627
|
+
let o = n(a.resourceType), s = (e) => M.fail(new zo({
|
|
5626
5628
|
action: a.action,
|
|
5627
5629
|
resourceType: a.resourceType,
|
|
5628
5630
|
resourceId: e
|
|
@@ -5630,17 +5632,17 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5630
5632
|
if (o === void 0) return s("");
|
|
5631
5633
|
let c = a.resourceId(i.input);
|
|
5632
5634
|
if (c === null || c === "") return s("");
|
|
5633
|
-
let l =
|
|
5635
|
+
let l = fl(i.subject), u = {
|
|
5634
5636
|
type: a.resourceType,
|
|
5635
5637
|
id: c,
|
|
5636
5638
|
tenantId: i.subject.tenantId
|
|
5637
5639
|
};
|
|
5638
|
-
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, {
|
|
5639
5641
|
policy: o,
|
|
5640
5642
|
tuples: e
|
|
5641
5643
|
}) ? r : s(c));
|
|
5642
5644
|
};
|
|
5643
|
-
},
|
|
5645
|
+
}, ml = async (e, n, r) => n === null ? [] : (await e.query({
|
|
5644
5646
|
table: "_voltro_rebac_tuples",
|
|
5645
5647
|
predicate: t(u("subjectId", n), u("resourceType", r)),
|
|
5646
5648
|
order: [],
|
|
@@ -5652,18 +5654,18 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5652
5654
|
relation: e.relation,
|
|
5653
5655
|
resourceType: e.resourceType,
|
|
5654
5656
|
resourceId: e.resourceId
|
|
5655
|
-
})),
|
|
5656
|
-
let t = e.getPolicy ??
|
|
5657
|
+
})), hl = (e) => {
|
|
5658
|
+
let t = e.getPolicy ?? Ho;
|
|
5657
5659
|
return async (n, r, i, a) => {
|
|
5658
5660
|
let o = t(r);
|
|
5659
5661
|
if (o === void 0) return [];
|
|
5660
|
-
let s =
|
|
5661
|
-
return
|
|
5662
|
+
let s = fl(n);
|
|
5663
|
+
return Xo(s, i, r, a, {
|
|
5662
5664
|
policy: o,
|
|
5663
5665
|
tuples: await e.loadSubjectTuples(s.id, r)
|
|
5664
5666
|
});
|
|
5665
5667
|
};
|
|
5666
|
-
},
|
|
5668
|
+
}, gl = (e) => {
|
|
5667
5669
|
if (typeof e.name != "string" || e.name.length === 0) throw Error("defineReaction: a non-empty `name` is required");
|
|
5668
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`);
|
|
5669
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', … }`);
|
|
@@ -5671,14 +5673,14 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5671
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`);
|
|
5672
5674
|
if (e.guards.costBudgetUsd !== void 0 && e.guards.costBudgetUsd < 0) throw Error(`reaction '${e.name}': guards.costBudgetUsd must be >= 0`);
|
|
5673
5675
|
return e;
|
|
5674
|
-
},
|
|
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 {
|
|
5675
5677
|
hits = /* @__PURE__ */ new Map();
|
|
5676
5678
|
allow(e, t, n, r) {
|
|
5677
5679
|
let i = r - n, a = (this.hits.get(e) ?? []).filter((e) => e > i);
|
|
5678
5680
|
return a.length >= t ? (this.hits.set(e, a), !1) : (a.push(r), this.hits.set(e, a), !0);
|
|
5679
5681
|
}
|
|
5680
|
-
},
|
|
5681
|
-
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";
|
|
5682
5684
|
if (e.when !== void 0 && !e.when(t)) return "skipped-when";
|
|
5683
5685
|
let r = `${e.name}:${e.guards.dedupeKey(t)}`;
|
|
5684
5686
|
if (await n.dedupe.has(r)) return "skipped-dedupe";
|
|
@@ -5687,26 +5689,26 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5687
5689
|
let t = n.now?.() ?? Date.now();
|
|
5688
5690
|
if (!n.rateLimiter.allow(e.name, i.limit, i.windowMs, t)) return "skipped-ratelimit";
|
|
5689
5691
|
}
|
|
5690
|
-
let a =
|
|
5692
|
+
let a = vl(t);
|
|
5691
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, {
|
|
5692
5694
|
id: a,
|
|
5693
5695
|
via: "agent"
|
|
5694
5696
|
}), await n.dedupe.add(r), "acted");
|
|
5695
|
-
},
|
|
5697
|
+
}, xl = T("_voltro_wakeups", {
|
|
5696
5698
|
id: v({ prefix: "wakeup" }),
|
|
5697
5699
|
tenantId: E(),
|
|
5698
5700
|
kind: E(),
|
|
5699
5701
|
refId: E(),
|
|
5700
5702
|
wakeAt: D(),
|
|
5701
5703
|
status: E()
|
|
5702
|
-
}).index(["status", "wakeAt"]).index(["tenantId"]),
|
|
5703
|
-
let t = e.now?.() ?? /* @__PURE__ */ new Date(), n = await
|
|
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);
|
|
5704
5706
|
if (n.length === 0) return 0;
|
|
5705
5707
|
let r = 0;
|
|
5706
|
-
for (let t of n) if (await
|
|
5708
|
+
for (let t of n) if (await Zs(e.store, t)) try {
|
|
5707
5709
|
await e.adapter.wake(t), r++;
|
|
5708
5710
|
} catch (n) {
|
|
5709
|
-
await
|
|
5711
|
+
await Qs(e.store, t), e.log?.warn("wake: adapter failed — released for retry", {
|
|
5710
5712
|
tenantId: t.tenantId,
|
|
5711
5713
|
kind: t.kind,
|
|
5712
5714
|
refId: t.refId,
|
|
@@ -5714,11 +5716,11 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5714
5716
|
});
|
|
5715
5717
|
}
|
|
5716
5718
|
return r > 0 && e.log?.info("wake: woke due deployments", { count: r }), r;
|
|
5717
|
-
},
|
|
5719
|
+
}, Cl = (e, t = 1e3) => {
|
|
5718
5720
|
let n = !1, r, i = async () => {
|
|
5719
5721
|
if (!n) {
|
|
5720
5722
|
try {
|
|
5721
|
-
await
|
|
5723
|
+
await Sl(e);
|
|
5722
5724
|
} catch (t) {
|
|
5723
5725
|
e.log?.warn("wake: tick failed", { reason: t instanceof Error ? t.message : String(t) });
|
|
5724
5726
|
}
|
|
@@ -5728,10 +5730,10 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5728
5730
|
return i(), { stop: () => {
|
|
5729
5731
|
n = !0, r !== void 0 && clearTimeout(r);
|
|
5730
5732
|
} };
|
|
5731
|
-
},
|
|
5733
|
+
}, wl = (e) => ({ wake: async () => {
|
|
5732
5734
|
await e.start();
|
|
5733
|
-
} }),
|
|
5734
|
-
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 () => {
|
|
5735
5737
|
try {
|
|
5736
5738
|
let n = await t(e.healthUrl);
|
|
5737
5739
|
return d(n);
|
|
@@ -5785,11 +5787,11 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5785
5787
|
},
|
|
5786
5788
|
stop: m
|
|
5787
5789
|
};
|
|
5788
|
-
},
|
|
5790
|
+
}, Dl = async (e) => {
|
|
5789
5791
|
if (e.signals.connectedClients() > 0 || e.signals.inFlightRequests() > 0 || e.signals.activeWorkflowExecutions() > 0) return !1;
|
|
5790
|
-
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);
|
|
5791
5793
|
return !(n !== null && n.wakeAt.getTime() <= t);
|
|
5792
|
-
},
|
|
5794
|
+
}, Ol = (e, t = Date.now) => {
|
|
5793
5795
|
let n;
|
|
5794
5796
|
return {
|
|
5795
5797
|
update: (r) => {
|
|
@@ -5801,7 +5803,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5801
5803
|
n = void 0;
|
|
5802
5804
|
}
|
|
5803
5805
|
};
|
|
5804
|
-
},
|
|
5806
|
+
}, kl = () => {
|
|
5805
5807
|
let e = 0, t = 0;
|
|
5806
5808
|
return {
|
|
5807
5809
|
onRequestStart: () => {
|
|
@@ -5819,8 +5821,8 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5819
5821
|
inFlightRequests: () => e,
|
|
5820
5822
|
openConnections: () => t
|
|
5821
5823
|
};
|
|
5822
|
-
},
|
|
5823
|
-
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({
|
|
5824
5826
|
host: n,
|
|
5825
5827
|
port: r,
|
|
5826
5828
|
method: e.method,
|
|
@@ -5830,8 +5832,8 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5830
5832
|
t.writeHead(e.statusCode ?? 502, e.headers), e.pipe(t), e.on("end", i), e.on("error", a);
|
|
5831
5833
|
});
|
|
5832
5834
|
o.on("error", a), e.pipe(o);
|
|
5833
|
-
}),
|
|
5834
|
-
let s =
|
|
5835
|
+
}), Ml = (e, t, n, r, i) => new Promise((a, o) => {
|
|
5836
|
+
let s = Ze.request({
|
|
5835
5837
|
host: r,
|
|
5836
5838
|
port: i,
|
|
5837
5839
|
method: e.method,
|
|
@@ -5845,21 +5847,21 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5845
5847
|
};
|
|
5846
5848
|
t.on("close", s), r.on("close", s), r.on("error", o);
|
|
5847
5849
|
}), s.on("error", o), s.end();
|
|
5848
|
-
}),
|
|
5849
|
-
let t =
|
|
5850
|
+
}), Nl = (e) => {
|
|
5851
|
+
let t = Al({
|
|
5850
5852
|
ensureAwake: () => e.supervisor.start(),
|
|
5851
5853
|
...e.onActivity === void 0 ? {} : { onActivity: e.onActivity }
|
|
5852
|
-
}), n = e.activity, r =
|
|
5853
|
-
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) => {
|
|
5854
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");
|
|
5855
5857
|
});
|
|
5856
5858
|
});
|
|
5857
5859
|
return r.on("upgrade", (r, i, a) => {
|
|
5858
|
-
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) => {
|
|
5859
5861
|
e.log?.warn("wake-router: upgrade proxy failed", { reason: t instanceof Error ? t.message : String(t) }), i.destroy();
|
|
5860
5862
|
});
|
|
5861
5863
|
}), r;
|
|
5862
|
-
},
|
|
5864
|
+
}, Pl = async (e) => {
|
|
5863
5865
|
try {
|
|
5864
5866
|
return (await e.query({
|
|
5865
5867
|
table: "_voltro_workflow_runs",
|
|
@@ -5876,15 +5878,15 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5876
5878
|
} catch {
|
|
5877
5879
|
return 0;
|
|
5878
5880
|
}
|
|
5879
|
-
},
|
|
5880
|
-
let t =
|
|
5881
|
+
}, Fl = async (e) => {
|
|
5882
|
+
let t = wl(e.supervisor), n = await Sl({
|
|
5881
5883
|
store: e.store,
|
|
5882
5884
|
adapter: t,
|
|
5883
5885
|
...e.now === void 0 ? {} : { now: e.now },
|
|
5884
5886
|
...e.log === void 0 ? {} : { log: e.log }
|
|
5885
5887
|
});
|
|
5886
5888
|
n > 0 && e.idleGate.reset();
|
|
5887
|
-
let r = await
|
|
5889
|
+
let r = await Dl({
|
|
5888
5890
|
store: e.store,
|
|
5889
5891
|
signals: e.signals,
|
|
5890
5892
|
...e.wakeLookaheadMs === void 0 ? {} : { wakeLookaheadMs: e.wakeLookaheadMs },
|
|
@@ -5894,12 +5896,12 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5894
5896
|
woke: n,
|
|
5895
5897
|
stopped: i
|
|
5896
5898
|
};
|
|
5897
|
-
},
|
|
5898
|
-
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 ?? {
|
|
5899
5901
|
connectedClients: () => r.openConnections(),
|
|
5900
5902
|
inFlightRequests: () => r.inFlightRequests(),
|
|
5901
5903
|
activeWorkflowExecutions: () => i
|
|
5902
|
-
}, s =
|
|
5904
|
+
}, s = Nl({
|
|
5903
5905
|
supervisor: e.supervisor,
|
|
5904
5906
|
targetHost: e.targetHost,
|
|
5905
5907
|
targetPort: e.targetPort,
|
|
@@ -5918,7 +5920,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5918
5920
|
let l = !1, u, d = e.firedRetentionMs ?? 10 * 6e4, f = 0, p = async () => {
|
|
5919
5921
|
if (!l) {
|
|
5920
5922
|
try {
|
|
5921
|
-
if (a && (i = await
|
|
5923
|
+
if (a && (i = await Pl(e.store)), await Fl({
|
|
5922
5924
|
store: e.store,
|
|
5923
5925
|
supervisor: e.supervisor,
|
|
5924
5926
|
signals: o,
|
|
@@ -5926,7 +5928,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5926
5928
|
...e.wakeLookaheadMs === void 0 ? {} : { wakeLookaheadMs: e.wakeLookaheadMs },
|
|
5927
5929
|
...e.log === void 0 ? {} : { log: e.log }
|
|
5928
5930
|
}), f++ % 60 == 0) {
|
|
5929
|
-
let t = await
|
|
5931
|
+
let t = await ic(e.store, { firedOlderThan: new Date(Date.now() - d) });
|
|
5930
5932
|
t > 0 && e.log?.info("orchestrator: pruned fired wakeups", { count: t });
|
|
5931
5933
|
}
|
|
5932
5934
|
} catch (t) {
|
|
@@ -5941,14 +5943,14 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5941
5943
|
l = !0, u !== void 0 && clearTimeout(u), await new Promise((e) => s.close(() => e()));
|
|
5942
5944
|
}
|
|
5943
5945
|
};
|
|
5944
|
-
},
|
|
5946
|
+
}, Ll = (e) => e, Rl = class extends L.TaggedError()("AnalyticsError", {
|
|
5945
5947
|
provider: L.String,
|
|
5946
5948
|
operation: L.String,
|
|
5947
5949
|
cause: L.String
|
|
5948
|
-
}) {},
|
|
5950
|
+
}) {}, zl = class extends L.TaggedError()("AnalyticsCapabilityNotSupported", {
|
|
5949
5951
|
provider: L.String,
|
|
5950
5952
|
capability: L.String
|
|
5951
|
-
}) {},
|
|
5953
|
+
}) {}, Bl = class extends Ve.Tag("@voltro/AnalyticsSink")() {}, Vl = (e, t) => ({
|
|
5952
5954
|
info: e.info,
|
|
5953
5955
|
track: (n) => e.track(n.tenantId === void 0 ? {
|
|
5954
5956
|
...n,
|
|
@@ -5967,20 +5969,20 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5967
5969
|
tenantId: t
|
|
5968
5970
|
} : n),
|
|
5969
5971
|
...e.mirror === void 0 ? {} : { mirror: e.mirror }
|
|
5970
|
-
}),
|
|
5971
|
-
let e = yield*
|
|
5972
|
+
}), Hl = () => M.gen(function* () {
|
|
5973
|
+
let e = yield* Bl, t = yield* M.serviceOption(Te), n = F.match(t, {
|
|
5972
5974
|
onNone: () => null,
|
|
5973
5975
|
onSome: (e) => e.tenantId ?? null
|
|
5974
5976
|
});
|
|
5975
|
-
return n === null ? e :
|
|
5976
|
-
}),
|
|
5977
|
-
let e = (e) => M.fail(new
|
|
5978
|
-
provider:
|
|
5977
|
+
return n === null ? e : Vl(e, n);
|
|
5978
|
+
}), Ul = "noop", Wl = () => {
|
|
5979
|
+
let e = (e) => M.fail(new zl({
|
|
5980
|
+
provider: Ul,
|
|
5979
5981
|
capability: e
|
|
5980
5982
|
}));
|
|
5981
5983
|
return {
|
|
5982
5984
|
info: {
|
|
5983
|
-
provider:
|
|
5985
|
+
provider: Ul,
|
|
5984
5986
|
capabilities: {
|
|
5985
5987
|
track: !0,
|
|
5986
5988
|
aggregate: !1,
|
|
@@ -5994,8 +5996,8 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
5994
5996
|
timeseries: () => e("timeseries"),
|
|
5995
5997
|
topN: () => e("topN")
|
|
5996
5998
|
};
|
|
5997
|
-
},
|
|
5998
|
-
if (e.length === 0) return
|
|
5999
|
+
}, Gl = (e) => {
|
|
6000
|
+
if (e.length === 0) return Wl();
|
|
5999
6001
|
if (e.length === 1) return e[0];
|
|
6000
6002
|
let t = {
|
|
6001
6003
|
provider: "compose",
|
|
@@ -6012,7 +6014,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
6012
6014
|
discard: !0
|
|
6013
6015
|
}), r = (t, n) => {
|
|
6014
6016
|
let r = e.find((e) => e.info.capabilities[t]);
|
|
6015
|
-
return r === void 0 ? M.fail(new
|
|
6017
|
+
return r === void 0 ? M.fail(new zl({
|
|
6016
6018
|
provider: "compose",
|
|
6017
6019
|
capability: t
|
|
6018
6020
|
})) : n(r);
|
|
@@ -6035,11 +6037,11 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
6035
6037
|
topN: (e) => r("topN", (t) => t.topN(e)),
|
|
6036
6038
|
...a === void 0 ? {} : { mirror: a }
|
|
6037
6039
|
};
|
|
6038
|
-
},
|
|
6040
|
+
}, Kl = (e) => {
|
|
6039
6041
|
let t = e.filter((e) => e.dispose !== void 0);
|
|
6040
6042
|
return {
|
|
6041
6043
|
kind: "compose",
|
|
6042
|
-
build: (t) =>
|
|
6044
|
+
build: (t) => Gl(e.map((e) => e.build(t))),
|
|
6043
6045
|
tables: e.flatMap((e) => e.tables ?? []),
|
|
6044
6046
|
initialize: (t) => M.forEach(e, (e) => e.initialize ? e.initialize(t) : M.void, {
|
|
6045
6047
|
concurrency: 1,
|
|
@@ -6050,15 +6052,15 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
6050
6052
|
discard: !0
|
|
6051
6053
|
}) } : {}
|
|
6052
6054
|
};
|
|
6053
|
-
}, Kl = {
|
|
6054
|
-
kind: "noop",
|
|
6055
|
-
build: () => Ul()
|
|
6056
6055
|
}, ql = {
|
|
6056
|
+
kind: "noop",
|
|
6057
|
+
build: () => Wl()
|
|
6058
|
+
}, Jl = {
|
|
6057
6059
|
tables: [],
|
|
6058
6060
|
detach: () => {}
|
|
6059
|
-
},
|
|
6061
|
+
}, Yl = (e) => {
|
|
6060
6062
|
let { store: t, sink: n, log: r } = e, i = n.mirror;
|
|
6061
|
-
if (i === void 0 || i.tables.length === 0) return
|
|
6063
|
+
if (i === void 0 || i.tables.length === 0) return Jl;
|
|
6062
6064
|
let a = e.run ?? ((e) => M.runPromise(e)), o = i.primaryKey ?? "id", s = new Set(i.tables), c = (e) => {
|
|
6063
6065
|
if (e.op === "delete") {
|
|
6064
6066
|
let t = e.old;
|
|
@@ -6082,11 +6084,11 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
6082
6084
|
tables: i.tables,
|
|
6083
6085
|
detach: l
|
|
6084
6086
|
};
|
|
6085
|
-
},
|
|
6087
|
+
}, Xl = (e) => {
|
|
6086
6088
|
let t = typeof e.refresh == "string" ? { interval: e.refresh } : e.refresh, n = e.strategy ?? "replace";
|
|
6087
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`);
|
|
6088
6090
|
if (e.incremental !== void 0) {
|
|
6089
|
-
let t =
|
|
6091
|
+
let t = tl({
|
|
6090
6092
|
aggregations: [{
|
|
6091
6093
|
op: e.incremental.op,
|
|
6092
6094
|
...e.incremental.column === void 0 ? {} : { column: e.incremental.column }
|
|
@@ -6108,47 +6110,47 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
6108
6110
|
build: e.build,
|
|
6109
6111
|
...e.incremental === void 0 ? {} : { incremental: e.incremental }
|
|
6110
6112
|
};
|
|
6111
|
-
},
|
|
6113
|
+
}, Zl = (e) => typeof e == "object" && !!e && e._voltroAggregate === !0, Ql = class extends L.TaggedError()("AggregateStale", {
|
|
6112
6114
|
name: L.String,
|
|
6113
6115
|
ageMs: L.Number,
|
|
6114
6116
|
maxAgeMs: L.Number
|
|
6115
|
-
}) {},
|
|
6117
|
+
}) {}, $l = class extends L.TaggedError()("AggregateNotFound", { name: L.String }) {}, eu = class extends L.TaggedError()("AggregateError", {
|
|
6116
6118
|
name: L.String,
|
|
6117
6119
|
operation: L.String,
|
|
6118
6120
|
cause: L.String
|
|
6119
|
-
}) {},
|
|
6120
|
-
return (yield*
|
|
6121
|
-
}),
|
|
6121
|
+
}) {}, tu = class extends Ve.Tag("@voltro/AggregateRegistry")() {}, nu = (e) => M.gen(function* () {
|
|
6122
|
+
return (yield* tu).getHandle(e);
|
|
6123
|
+
}), ru = (e, n, r) => {
|
|
6122
6124
|
if (e.crossTenant || !n.has(e.table) || r == null) return e;
|
|
6123
6125
|
let i = u("tenantId", r);
|
|
6124
6126
|
return {
|
|
6125
6127
|
...e,
|
|
6126
6128
|
predicate: e.predicate ? t(e.predicate, i) : i
|
|
6127
6129
|
};
|
|
6128
|
-
},
|
|
6130
|
+
}, iu = (e, n) => {
|
|
6129
6131
|
if (e.includeDeleted || !n.has(e.table)) return e;
|
|
6130
6132
|
let r = S("deletedAt");
|
|
6131
6133
|
return {
|
|
6132
6134
|
...e,
|
|
6133
6135
|
predicate: e.predicate ? t(e.predicate, r) : r
|
|
6134
6136
|
};
|
|
6135
|
-
},
|
|
6136
|
-
if (
|
|
6137
|
+
}, au = (e) => M.runPromiseExit(e).then((e) => {
|
|
6138
|
+
if (Ge.isSuccess(e)) return e.value;
|
|
6137
6139
|
let t = A.failureOption(e.cause);
|
|
6138
6140
|
throw F.isSome(t) ? t.value : A.squash(e.cause);
|
|
6139
|
-
}),
|
|
6140
|
-
let r = await M.runPromise(
|
|
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));
|
|
6141
6143
|
if (r) throw r;
|
|
6142
|
-
},
|
|
6143
|
-
if (
|
|
6144
|
-
let t = await
|
|
6144
|
+
}, cu = async (e) => {
|
|
6145
|
+
if (Nn() === void 0) return e;
|
|
6146
|
+
let t = await au(Fn(e.subject, (e) => {
|
|
6145
6147
|
console.error("[voltro] row filter failed to load", e);
|
|
6146
6148
|
}));
|
|
6147
6149
|
return {
|
|
6148
6150
|
...e,
|
|
6149
6151
|
rowFilter: t
|
|
6150
6152
|
};
|
|
6151
|
-
},
|
|
6153
|
+
}, lu = async (e) => {
|
|
6152
6154
|
let t = `${e.kind}.${e.name}`, n = Date.now(), r = "ok";
|
|
6153
6155
|
try {
|
|
6154
6156
|
if (e.interceptor) {
|
|
@@ -6163,7 +6165,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
6163
6165
|
traceId: e.requestContext.traceId,
|
|
6164
6166
|
...e.requestContext.spanId === void 0 ? {} : { spanId: e.requestContext.spanId }
|
|
6165
6167
|
}), r = await M.runPromiseExit(n);
|
|
6166
|
-
if (
|
|
6168
|
+
if (Ge.isSuccess(r)) return r.value;
|
|
6167
6169
|
throw A.squash(r.cause);
|
|
6168
6170
|
}
|
|
6169
6171
|
return await e.runExecutor();
|
|
@@ -6177,28 +6179,28 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
6177
6179
|
status: r
|
|
6178
6180
|
});
|
|
6179
6181
|
}
|
|
6180
|
-
},
|
|
6182
|
+
}, uu = /* @__PURE__ */ new Set([1213, 1205]), du = /* @__PURE__ */ new Set([
|
|
6181
6183
|
"ER_LOCK_DEADLOCK",
|
|
6182
6184
|
"ER_LOCK_WAIT_TIMEOUT",
|
|
6183
6185
|
"40001",
|
|
6184
6186
|
"40P01"
|
|
6185
|
-
]),
|
|
6187
|
+
]), fu = (e) => {
|
|
6186
6188
|
let t = e;
|
|
6187
6189
|
for (let e = 0; e < 6 && typeof t == "object" && t; e++) {
|
|
6188
6190
|
let e = t;
|
|
6189
|
-
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;
|
|
6190
6192
|
t = e.cause;
|
|
6191
6193
|
}
|
|
6192
6194
|
return !1;
|
|
6193
|
-
},
|
|
6194
|
-
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)));
|
|
6195
6197
|
for (let t = 1;; t++) try {
|
|
6196
6198
|
return await e();
|
|
6197
6199
|
} catch (e) {
|
|
6198
|
-
if (t >=
|
|
6200
|
+
if (t >= pu || !fu(e)) throw e;
|
|
6199
6201
|
await n(t);
|
|
6200
6202
|
}
|
|
6201
|
-
},
|
|
6203
|
+
}, gu = (e) => (t, n, r) => lu({
|
|
6202
6204
|
name: t.descriptor.name,
|
|
6203
6205
|
kind: "mutation",
|
|
6204
6206
|
input: n,
|
|
@@ -6206,11 +6208,11 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
6206
6208
|
...e.interceptor ? { interceptor: e.interceptor } : {},
|
|
6207
6209
|
...e.recordMetric ? { recordMetric: e.recordMetric } : {},
|
|
6208
6210
|
runExecutor: async () => {
|
|
6209
|
-
await
|
|
6210
|
-
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) => {
|
|
6211
6213
|
let s = e.undoCapture?.(o), c = s ? s.tx : o, l = e.buildContext(i, c, { afterCommit: (e) => {
|
|
6212
6214
|
a.push(e);
|
|
6213
|
-
} }), 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;
|
|
6214
6216
|
return s && await s.persist(l.store, {
|
|
6215
6217
|
tag: t.descriptor.name,
|
|
6216
6218
|
subject: r.subject,
|
|
@@ -6220,33 +6222,33 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
6220
6222
|
for (let e of a) await e();
|
|
6221
6223
|
return o;
|
|
6222
6224
|
}
|
|
6223
|
-
}),
|
|
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) => {
|
|
6224
6226
|
let t = e.descriptor.source;
|
|
6225
6227
|
return t == null ? [] : typeof t == "string" ? [t] : [...t];
|
|
6226
|
-
},
|
|
6228
|
+
}, bu = (e, t) => (n) => () => {
|
|
6227
6229
|
let r = e.descriptor.guards;
|
|
6228
|
-
return !r || r.length === 0 ? Promise.resolve(null) : M.runPromise(
|
|
6229
|
-
},
|
|
6230
|
-
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 () => {
|
|
6231
6233
|
let i = await a();
|
|
6232
6234
|
if (i) throw i;
|
|
6233
|
-
let o = e.buildContext(await
|
|
6234
|
-
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));
|
|
6235
6237
|
}, s = (n) => {
|
|
6236
|
-
let i =
|
|
6237
|
-
return
|
|
6238
|
+
let i = _u(n);
|
|
6239
|
+
return vu(i) ? e.finalize(i, r) : {
|
|
6238
6240
|
__voltroComputed: !0,
|
|
6239
6241
|
value: i,
|
|
6240
|
-
dependentTables:
|
|
6242
|
+
dependentTables: yu(t),
|
|
6241
6243
|
tenantId: r.subject?.tenantId ?? null,
|
|
6242
6244
|
recompute: o
|
|
6243
6245
|
};
|
|
6244
6246
|
}, c = () => {
|
|
6245
6247
|
let a = t.executor(n, i);
|
|
6246
|
-
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);
|
|
6247
6249
|
}, l = () => {
|
|
6248
6250
|
let e = t.descriptor.guards;
|
|
6249
|
-
return !e || e.length === 0 ? c() :
|
|
6251
|
+
return !e || e.length === 0 ? c() : Ae(r.subject, e, n).pipe(M.flatMap((e) => {
|
|
6250
6252
|
if (e) return M.fail(e);
|
|
6251
6253
|
let t = c();
|
|
6252
6254
|
return M.isEffect(t) ? t : M.succeed(t);
|
|
@@ -6265,7 +6267,7 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
6265
6267
|
traceId: r.traceId,
|
|
6266
6268
|
...r.spanId === void 0 ? {} : { spanId: r.spanId }
|
|
6267
6269
|
});
|
|
6268
|
-
},
|
|
6270
|
+
}, Su = (e) => (t, n, r) => lu({
|
|
6269
6271
|
name: t.descriptor.name,
|
|
6270
6272
|
kind: "action",
|
|
6271
6273
|
input: n,
|
|
@@ -6273,16 +6275,16 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
6273
6275
|
...e.interceptor ? { interceptor: e.interceptor } : {},
|
|
6274
6276
|
...e.recordMetric ? { recordMetric: e.recordMetric } : {},
|
|
6275
6277
|
runExecutor: async () => {
|
|
6276
|
-
await
|
|
6277
|
-
let i = e.buildContext(await
|
|
6278
|
-
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;
|
|
6279
6281
|
}
|
|
6280
|
-
}),
|
|
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 = [
|
|
6281
6283
|
"updatedAt",
|
|
6282
6284
|
"createdAt",
|
|
6283
6285
|
"updatedBy",
|
|
6284
6286
|
"createdBy"
|
|
6285
|
-
],
|
|
6287
|
+
], Eu = (e) => Tu.some((t) => t in e), Du = (e, t, n) => {
|
|
6286
6288
|
let r = {
|
|
6287
6289
|
table: t.table,
|
|
6288
6290
|
id: t.id,
|
|
@@ -6297,14 +6299,14 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
6297
6299
|
found: !1
|
|
6298
6300
|
};
|
|
6299
6301
|
let i = t.column === void 0 ? void 0 : e[t.column];
|
|
6300
|
-
if (!
|
|
6302
|
+
if (!Eu(e)) return {
|
|
6301
6303
|
...r,
|
|
6302
6304
|
value: i,
|
|
6303
6305
|
lastWrite: null,
|
|
6304
6306
|
attribution: "none",
|
|
6305
6307
|
found: !0
|
|
6306
6308
|
};
|
|
6307
|
-
let a =
|
|
6309
|
+
let a = wu(e.updatedBy) ?? wu(e.createdBy), o = Cu(e.updatedAt) ?? Cu(e.createdAt);
|
|
6308
6310
|
return {
|
|
6309
6311
|
...r,
|
|
6310
6312
|
value: i,
|
|
@@ -6316,12 +6318,12 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
6316
6318
|
attribution: "audit",
|
|
6317
6319
|
found: !0
|
|
6318
6320
|
};
|
|
6319
|
-
},
|
|
6321
|
+
}, Ou = (e, t) => {
|
|
6320
6322
|
let n = e.map((e) => {
|
|
6321
6323
|
let n = e.newValue ?? e.value, r = t.column !== void 0 && n && typeof n == "object" ? n[t.column] : e.newValue ?? e.value;
|
|
6322
6324
|
return {
|
|
6323
|
-
actor: { id:
|
|
6324
|
-
at:
|
|
6325
|
+
actor: { id: wu(e.actor) ?? wu(e.changedBy) },
|
|
6326
|
+
at: Cu(e.at) ?? Cu(e.changedAt),
|
|
6325
6327
|
...e.traceId === void 0 ? {} : { traceId: e.traceId },
|
|
6326
6328
|
value: r
|
|
6327
6329
|
};
|
|
@@ -6336,12 +6338,12 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
6336
6338
|
history: n,
|
|
6337
6339
|
found: n.length > 0
|
|
6338
6340
|
};
|
|
6339
|
-
},
|
|
6341
|
+
}, ku = (e) => {
|
|
6340
6342
|
let t = e.new?.id;
|
|
6341
6343
|
if (typeof t == "string") return t;
|
|
6342
6344
|
let n = e.old?.id;
|
|
6343
6345
|
return typeof n == "string" ? n : void 0;
|
|
6344
|
-
},
|
|
6346
|
+
}, Au = (e) => {
|
|
6345
6347
|
let t = {};
|
|
6346
6348
|
if (e.op === "insert") for (let [n, r] of Object.entries(e.new ?? {})) t[n] = {
|
|
6347
6349
|
from: void 0,
|
|
@@ -6361,11 +6363,11 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
6361
6363
|
return {
|
|
6362
6364
|
table: e.table,
|
|
6363
6365
|
op: e.op,
|
|
6364
|
-
id:
|
|
6366
|
+
id: ku(e),
|
|
6365
6367
|
fields: t
|
|
6366
6368
|
};
|
|
6367
|
-
},
|
|
6368
|
-
let t = e.map(
|
|
6369
|
+
}, ju = (e) => {
|
|
6370
|
+
let t = e.map(Au);
|
|
6369
6371
|
return {
|
|
6370
6372
|
rows: t,
|
|
6371
6373
|
summary: {
|
|
@@ -6374,21 +6376,21 @@ var K = /* @__PURE__ */ new Map(), $n = (e, t) => {
|
|
|
6374
6376
|
deletes: t.filter((e) => e.op === "delete").length
|
|
6375
6377
|
}
|
|
6376
6378
|
};
|
|
6377
|
-
},
|
|
6379
|
+
}, Mu = class extends Error {
|
|
6378
6380
|
constructor() {
|
|
6379
6381
|
super("voltro:preview-rollback"), this.name = "PreviewRollback";
|
|
6380
6382
|
}
|
|
6381
|
-
},
|
|
6383
|
+
}, Nu = async (e, t) => {
|
|
6382
6384
|
let n, r = !1;
|
|
6383
6385
|
try {
|
|
6384
6386
|
await e.transactional(async (e) => {
|
|
6385
|
-
throw n = await t(e), r = !0, new
|
|
6387
|
+
throw n = await t(e), r = !0, new Mu();
|
|
6386
6388
|
});
|
|
6387
6389
|
} catch (e) {
|
|
6388
|
-
if (!(e instanceof
|
|
6390
|
+
if (!(e instanceof Mu)) throw e;
|
|
6389
6391
|
}
|
|
6390
6392
|
if (!r) throw Error("preview: handler did not complete");
|
|
6391
6393
|
return n;
|
|
6392
|
-
},
|
|
6394
|
+
}, Pu = "framework-runtime";
|
|
6393
6395
|
//#endregion
|
|
6394
|
-
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 };
|