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