@voltro/runtime 0.11.2 → 0.11.3
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 +55 -0
- package/dist/index.d.ts +87 -0
- package/dist/index.js +1110 -1045
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { ENCRYPTED_PREFIX as e, and as t, attachEagerLoads as n, boolean as r, clearRetentions as i, collectSubqueries as a, contains as o, decryptFieldsOnRead as s, deserializeArraysOnRead as c, encryptFieldsForWrite as l, eq as u, evaluatePredicate as d, generateId as f, getRelations as p, getTable as m, gt as h, gte as g, hasEagerLoads as _, id as v, inSet as y, integer as b, isEncrypted as x, isNull as S, json as C, listRetentions as ee, lt as te, lte as
|
|
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 w, missingConflictColumns as T, missingRequiredColumns as ne, neq as re, or as E, queryFor as ie, raiseChangeListenerCeiling as ae, registerRetention as oe, requireTable as se, retentionTtlMsFromEnv as ce, serializeArraysForWrite as le, stampGeneratedId as ue, sweepRetention as de, table as D, text as O, timestamp as k, walkLeaves as fe } from "@voltro/database";
|
|
2
|
+
import { createCipheriv as pe, createDecipheriv as me, createHash as he, randomBytes as ge, randomUUID as _e, scryptSync as ve } from "node:crypto";
|
|
3
|
+
import { EventEmitter as ye } from "node:events";
|
|
4
|
+
import { ADMIN_SCOPE as be, ConnectionHandshakeFailed as A, ConnectionInfo as xe, ConnectionKindMismatch as Se, ConnectionNotDeclared as Ce, ConnectionSubjectRequired as we, SubjectService as Te, UndoConflict as Ee, UndoForbidden as De, UndoNotFound as Oe, WorkflowRunHandleSchema as ke, checkGuardsEffect as Ae, diffRows as je, effectiveScopes as Me, hasEffectiveScope as Ne, isIdKeyed as Pe, publishServerError as Fe, requireScope as Ie, setPolicyGuardResolver as Le, systemSubject as Re, tsMs as ze } from "@voltro/protocol";
|
|
5
|
+
import { createLogger as j } from "@voltro/logger";
|
|
6
|
+
import { Cause as M, Clock as Be, Context as Ve, Cron as He, Deferred as Ue, Duration as We, Effect as N, Either as Ge, Exit as Ke, Layer as P, ManagedRuntime as qe, Metric as F, MetricBoundaries as Je, MetricState as Ye, Option as Xe, Ref as I, Schedule as Ze, Schema as L, Stream as R, Tracer as Qe } from "effect";
|
|
7
|
+
import * as $e from "node:http";
|
|
8
|
+
import { createServer as et } from "node:http";
|
|
9
|
+
import { HttpClient as tt, HttpClientRequest as nt, HttpLayerRouter as z, HttpServer as rt, HttpServerRequest as it, HttpServerResponse as B } from "@effect/platform";
|
|
10
|
+
import { NodeContext as at, NodeHttpServer as ot, NodeRuntime as st } from "@effect/platform-node";
|
|
11
|
+
import { Rpc as ct, RpcSerialization as lt, RpcServer as ut } from "@effect/rpc";
|
|
12
|
+
import { defineRestRoute as dt, dispatchSharedPath as ft, requireScope as pt } from "@voltro/protocol/rest";
|
|
13
|
+
import { AsyncLocalStorage as mt } from "node:async_hooks";
|
|
14
|
+
import { SpanKind as ht, SpanStatusCode as gt } from "@opentelemetry/api";
|
|
15
|
+
import { Kv as _t, KvError as vt, KvStore as yt, layerConnections as bt, layerMemory as xt, layerRedis as St } from "@voltro/kv";
|
|
16
|
+
import { apiKeyStrategy as Ct } from "@voltro/protocol/apikey";
|
|
17
|
+
import { getCurrentWorkflowExecutionId as wt, inspectWorkflow as Tt } from "@voltro/workflow";
|
|
18
|
+
import { ArrayFormatter as Et } from "effect/ParseResult";
|
|
19
|
+
import { spawn as Dt } from "node:child_process";
|
|
20
20
|
//#region src/matcher.ts
|
|
21
|
-
var
|
|
21
|
+
var Ot = 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 Dt = class {
|
|
|
59
59
|
});
|
|
60
60
|
return { perTable: e };
|
|
61
61
|
}
|
|
62
|
-
},
|
|
62
|
+
}, kt = (e) => {
|
|
63
63
|
let t = [];
|
|
64
|
-
for (let n of
|
|
64
|
+
for (let n of fe(e)) n.conjunctive && n.path === void 0 && (n.op === "eq" && t.push({
|
|
65
65
|
column: n.column,
|
|
66
66
|
values: [n.value]
|
|
67
67
|
}), n.op === "in" && t.push({
|
|
@@ -69,18 +69,18 @@ var Dt = class {
|
|
|
69
69
|
values: n.value
|
|
70
70
|
}));
|
|
71
71
|
return t;
|
|
72
|
-
},
|
|
72
|
+
}, At = (e) => {
|
|
73
73
|
let t = [];
|
|
74
|
-
for (let n of
|
|
74
|
+
for (let n of fe(e)) n.conjunctive && n.path === void 0 && (n.op === "gt" || n.op === "gte" || n.op === "lt" || n.op === "lte") && t.push({
|
|
75
75
|
column: n.column,
|
|
76
76
|
op: n.op,
|
|
77
77
|
threshold: n.value
|
|
78
78
|
});
|
|
79
79
|
return t;
|
|
80
|
-
}, At = (e, t) => {
|
|
81
|
-
for (let n of pe(e)) if (n.conjunctive && n.path === void 0 && n.op === "eq" && n.column === t) return n.value;
|
|
82
|
-
return null;
|
|
83
80
|
}, jt = (e, t) => {
|
|
81
|
+
for (let n of fe(e)) if (n.conjunctive && n.path === void 0 && n.op === "eq" && n.column === t) return n.value;
|
|
82
|
+
return null;
|
|
83
|
+
}, Mt = (e, t) => {
|
|
84
84
|
let n = [];
|
|
85
85
|
for (let r of e) {
|
|
86
86
|
let e = t(r);
|
|
@@ -88,8 +88,8 @@ var Dt = class {
|
|
|
88
88
|
n.push(`${typeof e}:${String(e)}`);
|
|
89
89
|
}
|
|
90
90
|
return n.join("|");
|
|
91
|
-
},
|
|
92
|
-
let r =
|
|
91
|
+
}, Nt = (e, t) => e === null || t === null ? null : e === t ? 0 : typeof e == typeof t ? e > t ? 1 : -1 : null, Pt = (e, t, n) => {
|
|
92
|
+
let r = Nt(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 Dt = class {
|
|
|
97
97
|
case "lt": return r < 0;
|
|
98
98
|
case "lte": return r <= 0;
|
|
99
99
|
}
|
|
100
|
-
},
|
|
100
|
+
}, Ft = class {
|
|
101
101
|
columnByTable = /* @__PURE__ */ new Map();
|
|
102
102
|
rangeByTable = /* @__PURE__ */ new Map();
|
|
103
103
|
tupleByTable = /* @__PURE__ */ new Map();
|
|
@@ -105,9 +105,9 @@ var Dt = 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 = kt(e.predicate), n = At(e.predicate);
|
|
109
109
|
if (e.usingIndex !== void 0) {
|
|
110
|
-
let r = e.usingIndex, i =
|
|
110
|
+
let r = e.usingIndex, i = Mt(r.fields, (t) => jt(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 Dt = class {
|
|
|
252
252
|
}
|
|
253
253
|
}
|
|
254
254
|
for (let [e, a] of i) {
|
|
255
|
-
let i =
|
|
255
|
+
let i = Mt(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 Dt = 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) Pt(i, e, r.threshold) && n.add(r.subId);
|
|
270
270
|
}
|
|
271
271
|
return n;
|
|
272
272
|
}
|
|
@@ -275,7 +275,7 @@ var Dt = 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 (!Pt(e, n.op, n.threshold)) return !1;
|
|
279
279
|
}
|
|
280
280
|
return !0;
|
|
281
281
|
}
|
|
@@ -297,23 +297,23 @@ var Dt = class {
|
|
|
297
297
|
}
|
|
298
298
|
return i;
|
|
299
299
|
}
|
|
300
|
-
},
|
|
300
|
+
}, It = (e) => {
|
|
301
301
|
if (e == null) return null;
|
|
302
|
-
if (Array.isArray(e)) return e.map(
|
|
302
|
+
if (Array.isArray(e)) return e.map(It);
|
|
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] = It(t[e]);
|
|
306
306
|
return r;
|
|
307
307
|
}
|
|
308
308
|
return e;
|
|
309
|
-
},
|
|
310
|
-
let r =
|
|
309
|
+
}, Lt = (e, t, n) => {
|
|
310
|
+
let r = It({
|
|
311
311
|
table: e,
|
|
312
312
|
predicate: t,
|
|
313
313
|
indexHint: n ?? null
|
|
314
314
|
});
|
|
315
|
-
return
|
|
316
|
-
},
|
|
315
|
+
return he("sha256").update(JSON.stringify(r)).digest("hex").slice(0, 16);
|
|
316
|
+
}, Rt = class {
|
|
317
317
|
matcher;
|
|
318
318
|
byFingerprint = /* @__PURE__ */ new Map();
|
|
319
319
|
byClient = /* @__PURE__ */ new Map();
|
|
@@ -332,7 +332,7 @@ var Dt = class {
|
|
|
332
332
|
} catch {}
|
|
333
333
|
}
|
|
334
334
|
subscribe(e, t, n, r) {
|
|
335
|
-
let i =
|
|
335
|
+
let i = Lt(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 Dt = class {
|
|
|
390
390
|
});
|
|
391
391
|
return e;
|
|
392
392
|
}
|
|
393
|
-
},
|
|
393
|
+
}, zt = (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 Dt = class {
|
|
|
400
400
|
return r.direction === "asc" ? a : -a;
|
|
401
401
|
}
|
|
402
402
|
return 0;
|
|
403
|
-
}),
|
|
403
|
+
}), Bt = (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 Dt = class {
|
|
|
418
418
|
...e,
|
|
419
419
|
[i]: c
|
|
420
420
|
};
|
|
421
|
-
},
|
|
421
|
+
}, Vt = (e, t, n) => !e || d(e, t, n), Ht = (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 =
|
|
425
|
+
let e = t.get(r.descriptor.table) ?? /* @__PURE__ */ new Map(), i = Ht(r.descriptor.predicate, t), a = Ut(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 Dt = class {
|
|
|
437
437
|
}
|
|
438
438
|
}
|
|
439
439
|
return n;
|
|
440
|
-
},
|
|
441
|
-
let i = r ??
|
|
440
|
+
}, Ut = (e, t, n = /* @__PURE__ */ new Map(), r = null) => {
|
|
441
|
+
let i = r ?? Ht(e.predicate, n), a = [...t.values()].filter((t) => Vt(e.predicate, t, i));
|
|
442
442
|
if (e.aggregations && e.aggregations.length > 0) {
|
|
443
|
-
let t =
|
|
443
|
+
let t = Wt(a, e.aggregations, e.groupBy);
|
|
444
444
|
if (!e.having) return t;
|
|
445
|
-
let r =
|
|
446
|
-
return t.filter((t) =>
|
|
445
|
+
let r = Ht(e.having, n);
|
|
446
|
+
return t.filter((t) => Vt(e.having, t, r));
|
|
447
447
|
}
|
|
448
|
-
let o =
|
|
448
|
+
let o = zt(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 Dt = class {
|
|
|
453
453
|
for (let n of l) t[n] = e[n];
|
|
454
454
|
return t;
|
|
455
455
|
});
|
|
456
|
-
},
|
|
456
|
+
}, Wt = (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 Dt = 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] = Gt(r, e.rows);
|
|
475
475
|
i.push(n);
|
|
476
476
|
}
|
|
477
477
|
return i;
|
|
478
|
-
},
|
|
478
|
+
}, Gt = (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 Dt = class {
|
|
|
519
519
|
}
|
|
520
520
|
default: throw Error(`computeAggregates: unknown op '${e.op}'`);
|
|
521
521
|
}
|
|
522
|
-
},
|
|
522
|
+
}, Kt = "\0", qt = (e, t) => e === null ? t : `${e}${Kt}${t}`, Jt = class e {
|
|
523
523
|
#e;
|
|
524
524
|
#t;
|
|
525
525
|
#n;
|
|
@@ -529,13 +529,13 @@ var Dt = class {
|
|
|
529
529
|
return r.#e = t.tables, r.#t = t.emitter, r.#n = t.numericCounters, r;
|
|
530
530
|
}
|
|
531
531
|
constructor(e, t = null) {
|
|
532
|
-
if (this.#r = t, this.#e = /* @__PURE__ */ new Map(), this.#t = new
|
|
532
|
+
if (this.#r = t, this.#e = /* @__PURE__ */ new Map(), this.#t = new ye(), ae(this.#t), this.#n = /* @__PURE__ */ new Map(), e) for (let [n, r] of Object.entries(e)) {
|
|
533
533
|
let e = /* @__PURE__ */ new Map();
|
|
534
534
|
for (let t of r) {
|
|
535
535
|
let n = t.id;
|
|
536
536
|
n && e.set(n, t);
|
|
537
537
|
}
|
|
538
|
-
this.#e.set(
|
|
538
|
+
this.#e.set(qt(t, n), e);
|
|
539
539
|
}
|
|
540
540
|
}
|
|
541
541
|
withNamespace(t) {
|
|
@@ -546,11 +546,11 @@ var Dt = class {
|
|
|
546
546
|
}, t);
|
|
547
547
|
}
|
|
548
548
|
#a(e) {
|
|
549
|
-
return
|
|
549
|
+
return qt(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}${Kt}`;
|
|
553
|
+
for (let [n, r] of this.#e) t === null ? n.includes(Kt) || 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,11 +558,11 @@ var Dt = 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 = Ut(e, this.#e.get(this.#a(e.table)) ?? /* @__PURE__ */ new Map(), this.#o());
|
|
562
|
+
return _(e) ? n(t, e.eager, se(e.table), (e) => this.query(e)) : t;
|
|
563
563
|
}
|
|
564
564
|
async insert(e, t) {
|
|
565
|
-
t =
|
|
565
|
+
t = ue(e, t);
|
|
566
566
|
let n = t;
|
|
567
567
|
if (n.id === void 0) {
|
|
568
568
|
let r = this.#c(e);
|
|
@@ -589,7 +589,7 @@ var Dt = class {
|
|
|
589
589
|
if (!i) return null;
|
|
590
590
|
let a = i.get(t);
|
|
591
591
|
if (!a) return null;
|
|
592
|
-
let o =
|
|
592
|
+
let o = Bt(a, n, r);
|
|
593
593
|
return i.set(t, o), this.#t.emit("change", {
|
|
594
594
|
table: e,
|
|
595
595
|
op: "update",
|
|
@@ -631,7 +631,7 @@ var Dt = class {
|
|
|
631
631
|
async updateMany(e, t, n) {
|
|
632
632
|
let r = this.#e.get(this.#a(e));
|
|
633
633
|
if (!r) return 0;
|
|
634
|
-
let i =
|
|
634
|
+
let i = Ht(n.where, this.#o()), a = 0;
|
|
635
635
|
for (let [o, s] of r) {
|
|
636
636
|
if (!d(n.where, s, i)) continue;
|
|
637
637
|
let c = {
|
|
@@ -650,7 +650,7 @@ var Dt = class {
|
|
|
650
650
|
async deleteMany(e, t) {
|
|
651
651
|
let n = this.#e.get(this.#a(e));
|
|
652
652
|
if (!n) return 0;
|
|
653
|
-
let r =
|
|
653
|
+
let r = Ht(t.where, this.#o()), i = [];
|
|
654
654
|
for (let [e, a] of n) d(t.where, a, r) && i.push([e, a]);
|
|
655
655
|
for (let [t, r] of i) n.delete(t), this.#t.emit("change", {
|
|
656
656
|
table: e,
|
|
@@ -689,7 +689,7 @@ var Dt = class {
|
|
|
689
689
|
}
|
|
690
690
|
}
|
|
691
691
|
async transactional(e) {
|
|
692
|
-
let t = new
|
|
692
|
+
let t = new Yt(this.#u());
|
|
693
693
|
try {
|
|
694
694
|
let n = await e(t);
|
|
695
695
|
return t.commit(), n;
|
|
@@ -725,7 +725,7 @@ var Dt = class {
|
|
|
725
725
|
allocateNumericId: (e) => this.#c(e)
|
|
726
726
|
};
|
|
727
727
|
}
|
|
728
|
-
},
|
|
728
|
+
}, Yt = class {
|
|
729
729
|
parent;
|
|
730
730
|
overlay = /* @__PURE__ */ new Map();
|
|
731
731
|
tombstones = /* @__PURE__ */ new Map();
|
|
@@ -755,11 +755,11 @@ var Dt = class {
|
|
|
755
755
|
return t || (t = /* @__PURE__ */ new Map(), this.overlay.set(e, t)), t;
|
|
756
756
|
}
|
|
757
757
|
async query(e) {
|
|
758
|
-
let t = this.buildTablesView(e), r =
|
|
759
|
-
return _(e) ? n(r, e.eager,
|
|
758
|
+
let t = this.buildTablesView(e), r = Ut(e, this.materialise(e.table), t);
|
|
759
|
+
return _(e) ? n(r, e.eager, se(e.table), (e) => this.query(e)) : r;
|
|
760
760
|
}
|
|
761
761
|
async insert(e, t) {
|
|
762
|
-
t =
|
|
762
|
+
t = ue(e, t);
|
|
763
763
|
let n = t;
|
|
764
764
|
n.id === void 0 && (n = {
|
|
765
765
|
...t,
|
|
@@ -795,7 +795,7 @@ var Dt = class {
|
|
|
795
795
|
async patchJson(e, t, n, r) {
|
|
796
796
|
let i = this.materialise(e).get(t);
|
|
797
797
|
if (!i) return null;
|
|
798
|
-
let a =
|
|
798
|
+
let a = Bt(i, n, r);
|
|
799
799
|
return this.getOrCreateOverlay(e).set(t, a), this.events.push({
|
|
800
800
|
table: e,
|
|
801
801
|
op: "update",
|
|
@@ -816,7 +816,7 @@ var Dt = class {
|
|
|
816
816
|
}), !0;
|
|
817
817
|
}
|
|
818
818
|
async updateMany(e, t, n) {
|
|
819
|
-
let r = this.materialise(e), i =
|
|
819
|
+
let r = this.materialise(e), i = Ht(n.where, this.buildTablesViewForPred(n.where)), a = 0;
|
|
820
820
|
for (let [o, s] of r) {
|
|
821
821
|
if (!d(n.where, s, i)) continue;
|
|
822
822
|
let r = {
|
|
@@ -833,7 +833,7 @@ var Dt = class {
|
|
|
833
833
|
return a;
|
|
834
834
|
}
|
|
835
835
|
async deleteMany(e, t) {
|
|
836
|
-
let n = this.materialise(e), r =
|
|
836
|
+
let n = this.materialise(e), r = Ht(t.where, this.buildTablesViewForPred(t.where)), i = 0, a = this.tombstones.get(e);
|
|
837
837
|
for (let [o, s] of n) d(t.where, s, r) && (this.overlay.get(e)?.delete(o), a || (a = /* @__PURE__ */ new Set(), this.tombstones.set(e, a)), a.add(o), this.events.push({
|
|
838
838
|
table: e,
|
|
839
839
|
op: "delete",
|
|
@@ -896,7 +896,7 @@ var Dt = class {
|
|
|
896
896
|
discard() {
|
|
897
897
|
this.settled || (this.settled = !0, this.overlay.clear(), this.tombstones.clear(), this.events.length = 0);
|
|
898
898
|
}
|
|
899
|
-
},
|
|
899
|
+
}, Xt = (e) => {
|
|
900
900
|
let t = {}, n = [], r = e;
|
|
901
901
|
for (let e = 0; e < 8 && typeof r == "object" && r; e++) {
|
|
902
902
|
let e = r;
|
|
@@ -907,23 +907,23 @@ var Dt = class {
|
|
|
907
907
|
(o || s) && n.push(`${o || "Error"}${s ? `: ${s.slice(0, 200)}` : ""}`), r = e.cause;
|
|
908
908
|
}
|
|
909
909
|
return n.length > 0 && (t.dbCauseChain = n.join(" ← "), t.dbMessage === void 0 && (t.dbMessage = n[n.length - 1])), t;
|
|
910
|
-
},
|
|
910
|
+
}, Zt = (e) => {
|
|
911
911
|
let t = e.dbCode;
|
|
912
912
|
return t === "23503" || e.dbErrno === 1452 || t === 547 || t === "SQLITE_CONSTRAINT_FOREIGNKEY";
|
|
913
|
-
},
|
|
914
|
-
has: (t) =>
|
|
915
|
-
hasAny: (t) => t.some((t) =>
|
|
916
|
-
require: (t) =>
|
|
913
|
+
}, Qt = (e) => ({
|
|
914
|
+
has: (t) => Ne(e, t),
|
|
915
|
+
hasAny: (t) => t.some((t) => Ne(e, t)),
|
|
916
|
+
require: (t) => Ie(e, t),
|
|
917
917
|
get scopes() {
|
|
918
|
-
return
|
|
918
|
+
return Me(e);
|
|
919
919
|
}
|
|
920
|
-
}),
|
|
920
|
+
}), $t = (e) => {
|
|
921
921
|
let t = /* @__PURE__ */ new Set();
|
|
922
|
-
return
|
|
923
|
-
},
|
|
924
|
-
if (t.add(e.table), e.eager !== void 0 &&
|
|
925
|
-
if (e.ctes !== void 0) for (let n of e.ctes)
|
|
926
|
-
},
|
|
922
|
+
return en(e, t), t;
|
|
923
|
+
}, en = (e, t) => {
|
|
924
|
+
if (t.add(e.table), e.eager !== void 0 && tn(e.table, e.eager, t), e.setOp !== void 0) for (let n of e.setOp.queries) en(n, t);
|
|
925
|
+
if (e.ctes !== void 0) for (let n of e.ctes) en(n.descriptor, t);
|
|
926
|
+
}, tn = (e, t, n) => {
|
|
927
927
|
let r = p(e);
|
|
928
928
|
if (r !== void 0) for (let [e, i] of Object.entries(t)) {
|
|
929
929
|
let t = r[e];
|
|
@@ -931,24 +931,24 @@ var Dt = class {
|
|
|
931
931
|
let a = i === !0 ? {} : i;
|
|
932
932
|
if (t.kind === "manyToMany") {
|
|
933
933
|
let e = t.through().tableName, r = t.target().tableName;
|
|
934
|
-
n.add(e), n.add(r), a.with !== void 0 &&
|
|
934
|
+
n.add(e), n.add(r), a.with !== void 0 && tn(r, a.with, n);
|
|
935
935
|
} else {
|
|
936
936
|
let e = t.target().tableName;
|
|
937
|
-
n.add(e), a.with !== void 0 &&
|
|
937
|
+
n.add(e), a.with !== void 0 && tn(e, a.with, n);
|
|
938
938
|
}
|
|
939
939
|
}
|
|
940
|
-
},
|
|
940
|
+
}, nn = (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-")), rn = /* @__PURE__ */ new Set(["*"]), an = (e, t) => {
|
|
941
941
|
if (e !== void 0) {
|
|
942
942
|
if ("not" in e) {
|
|
943
|
-
|
|
943
|
+
an(e.not, t);
|
|
944
944
|
return;
|
|
945
945
|
}
|
|
946
946
|
if ("and" in e) {
|
|
947
|
-
for (let n of e.and)
|
|
947
|
+
for (let n of e.and) an(n, t);
|
|
948
948
|
return;
|
|
949
949
|
}
|
|
950
950
|
if ("or" in e) {
|
|
951
|
-
for (let n of e.or)
|
|
951
|
+
for (let n of e.or) an(n, t);
|
|
952
952
|
return;
|
|
953
953
|
}
|
|
954
954
|
if (e.op === "subquery-in" || e.op === "subquery-not-in") {
|
|
@@ -957,11 +957,11 @@ var Dt = class {
|
|
|
957
957
|
}
|
|
958
958
|
e.op === "exists" || e.op === "not-exists" || t.add(e.column);
|
|
959
959
|
}
|
|
960
|
-
},
|
|
960
|
+
}, V = (e, t, n) => {
|
|
961
961
|
let r = e.get(t);
|
|
962
962
|
r === void 0 && (r = /* @__PURE__ */ new Set(), e.set(t, r));
|
|
963
963
|
for (let e of n) r.add(e);
|
|
964
|
-
},
|
|
964
|
+
}, on = (e, t, n) => {
|
|
965
965
|
let r = p(e);
|
|
966
966
|
if (r !== void 0) for (let [i, a] of Object.entries(t)) {
|
|
967
967
|
let t = r[i];
|
|
@@ -969,64 +969,64 @@ var Dt = class {
|
|
|
969
969
|
let o = a === !0 ? {} : a;
|
|
970
970
|
if (t.kind === "manyToMany") {
|
|
971
971
|
let r = t.through(), i = t.target();
|
|
972
|
-
|
|
972
|
+
V(n, r.tableName, [t.sourceKey, t.targetKey]), V(n, e, ["id"]), V(n, i.tableName, ["id"]), sn(i.tableName, o, n), o.with !== void 0 && on(i.tableName, o.with, n);
|
|
973
973
|
continue;
|
|
974
974
|
}
|
|
975
975
|
let s = t.target();
|
|
976
|
-
t.foreignKey !== void 0 &&
|
|
976
|
+
t.foreignKey !== void 0 && V(n, s.tableName, [t.foreignKey]), t.sourceKey === void 0 ? V(n, e, ["id"]) : V(n, e, [t.sourceKey]), V(n, s.tableName, ["id"]), sn(s.tableName, o, n), o.with !== void 0 && on(s.tableName, o.with, n);
|
|
977
977
|
}
|
|
978
|
-
},
|
|
978
|
+
}, sn = (e, t, n) => {
|
|
979
979
|
if (t.where !== void 0) {
|
|
980
980
|
let r = /* @__PURE__ */ new Set();
|
|
981
|
-
|
|
981
|
+
an(t.where, r), V(n, e, r);
|
|
982
982
|
}
|
|
983
|
-
t.orderBy !== void 0 &&
|
|
983
|
+
t.orderBy !== void 0 && V(n, e, t.orderBy.map((e) => e.column));
|
|
984
984
|
let r = m(e);
|
|
985
|
-
r === void 0 ?
|
|
986
|
-
},
|
|
985
|
+
r === void 0 ? V(n, e, ["*"]) : V(n, e, Object.keys(r.fields));
|
|
986
|
+
}, cn = (e) => {
|
|
987
987
|
let t = /* @__PURE__ */ new Map();
|
|
988
|
-
if (
|
|
989
|
-
for (let n of
|
|
988
|
+
if (nn(e)) {
|
|
989
|
+
for (let n of $t(e)) V(t, n, ["*"]);
|
|
990
990
|
return t;
|
|
991
991
|
}
|
|
992
992
|
let n = /* @__PURE__ */ new Set();
|
|
993
993
|
if (e.projection !== void 0) for (let t of e.projection) n.add(t);
|
|
994
994
|
else n.add("*");
|
|
995
|
-
|
|
995
|
+
an(e.predicate, n);
|
|
996
996
|
for (let t of e.order) n.add(t.column);
|
|
997
|
-
return
|
|
998
|
-
},
|
|
999
|
-
if (e.op === "insert" || e.op === "delete" || e.old === null || e.new === null) return
|
|
997
|
+
return V(t, e.table, n), e.eager !== void 0 && on(e.table, e.eager, t), t;
|
|
998
|
+
}, ln = (e) => {
|
|
999
|
+
if (e.op === "insert" || e.op === "delete" || e.old === null || e.new === null) return rn;
|
|
1000
1000
|
let t = /* @__PURE__ */ new Set(), n = e.old, r = e.new, i = /* @__PURE__ */ new Set([...Object.keys(n), ...Object.keys(r)]);
|
|
1001
1001
|
for (let e of i) Object.is(n[e], r[e]) || t.add(e);
|
|
1002
1002
|
return t;
|
|
1003
|
-
},
|
|
1003
|
+
}, un = (e, t) => {
|
|
1004
1004
|
let n = t.get(e.table);
|
|
1005
1005
|
if (n === void 0) return !1;
|
|
1006
1006
|
if (n.has("*")) return !0;
|
|
1007
|
-
let r =
|
|
1007
|
+
let r = ln(e);
|
|
1008
1008
|
if (r.has("*")) return !0;
|
|
1009
1009
|
for (let e of r) if (n.has(e)) return !0;
|
|
1010
1010
|
return !1;
|
|
1011
|
-
},
|
|
1011
|
+
}, dn = Je.exponential({
|
|
1012
1012
|
start: .001,
|
|
1013
1013
|
factor: 2,
|
|
1014
1014
|
count: 16
|
|
1015
|
-
}),
|
|
1016
|
-
let t = e.durationMs / 1e3, n = e.kind === "rpc" ? N.zipRight(F.increment(
|
|
1015
|
+
}), fn = F.counter("voltro_rpc_requests_total", { description: "Total RPC handler invocations." }), pn = F.counter("voltro_rpc_errors_total", { description: "RPC handler invocations that errored." }), mn = F.histogram("voltro_rpc_duration_seconds", dn, "RPC handler duration in seconds."), hn = F.counter("voltro_http_requests_total", { description: "Total HTTP route invocations." }), gn = F.histogram("voltro_http_duration_seconds", dn, "HTTP route duration in seconds."), _n = F.histogram("voltro_plugin_hook_duration_seconds", dn, "Plugin interceptor duration in seconds."), vn = F.counter("voltro_plugin_hook_errors_total", { description: "Plugin interceptor invocations that errored." }), yn = F.counter("voltro_subscription_deliveries_total", { description: "Total subscription deliveries (snapshot + delta)." }), bn = F.histogram("voltro_subscription_delivery_seconds", dn, "Subscription delivery produce→push latency in seconds."), xn = F.gauge("voltro_subscriptions_active", { description: "Currently-open subscriptions." }), Sn = (e) => {
|
|
1016
|
+
let t = e.durationMs / 1e3, n = e.kind === "rpc" ? N.zipRight(F.increment(fn).pipe(N.tagMetrics("tag", e.tag), N.tagMetrics("status", e.status)), N.zipRight(F.update(mn, t).pipe(N.tagMetrics("tag", e.tag)), e.status === "error" ? F.increment(pn).pipe(N.tagMetrics("tag", e.tag)) : N.void)) : e.kind === "request" ? N.zipRight(F.increment(hn).pipe(N.tagMetrics("route", e.tag), N.tagMetrics("status", e.status)), F.update(gn, t).pipe(N.tagMetrics("route", e.tag))) : N.zipRight(F.update(_n, t).pipe(N.tagMetrics("hook", e.tag)), e.status === "error" ? F.increment(vn).pipe(N.tagMetrics("hook", e.tag)) : N.void);
|
|
1017
1017
|
N.runSync(n);
|
|
1018
|
-
},
|
|
1019
|
-
let t =
|
|
1020
|
-
N.runSync(N.zipRight(F.increment(
|
|
1021
|
-
},
|
|
1022
|
-
let n =
|
|
1023
|
-
r === 0 ?
|
|
1024
|
-
},
|
|
1018
|
+
}, Cn = (e) => e.startsWith("subscription.") ? e.slice(13) : e, wn = (e) => {
|
|
1019
|
+
let t = Cn(e.label);
|
|
1020
|
+
N.runSync(N.zipRight(F.increment(yn).pipe(N.tagMetrics("tag", t), N.tagMetrics("kind", e.kind)), F.update(bn, e.durationMs / 1e3).pipe(N.tagMetrics("tag", t), N.tagMetrics("kind", e.kind))));
|
|
1021
|
+
}, Tn = /* @__PURE__ */ new Map(), H = (e, t) => {
|
|
1022
|
+
let n = Cn(e), r = Math.max(0, (Tn.get(n) ?? 0) + t);
|
|
1023
|
+
r === 0 ? Tn.delete(n) : Tn.set(n, r), N.runSync(F.set(xn, r).pipe(N.tagMetrics("tag", n)));
|
|
1024
|
+
}, En = (e, t) => F.counter(e, t === void 0 ? {} : { description: t }), Dn = (e, t) => F.gauge(e, t === void 0 ? {} : { description: t }), On = (e, t = dn, n) => F.histogram(e, t, n), kn = (e) => {
|
|
1025
1025
|
let t = {};
|
|
1026
1026
|
for (let n of e) t[n.key] = n.value;
|
|
1027
1027
|
return t;
|
|
1028
|
-
},
|
|
1029
|
-
let t = e.metricKey.name, n =
|
|
1028
|
+
}, An = F.snapshot.pipe(N.map((e) => e.map((e) => {
|
|
1029
|
+
let t = e.metricKey.name, n = kn(e.metricKey.tags), r = Xe.getOrUndefined(e.metricKey.description), i = r === void 0 ? {} : { description: r }, a = e.metricState;
|
|
1030
1030
|
if (Ye.isHistogramState(a)) return {
|
|
1031
1031
|
name: t,
|
|
1032
1032
|
labels: n,
|
|
@@ -1076,25 +1076,25 @@ var Dt = class {
|
|
|
1076
1076
|
type: "counter",
|
|
1077
1077
|
value: Number(a.count)
|
|
1078
1078
|
};
|
|
1079
|
-
}))),
|
|
1080
|
-
|
|
1081
|
-
},
|
|
1082
|
-
if (e === void 0 || t.type === "system") return N.succeed(
|
|
1083
|
-
let r = e.retry ??
|
|
1084
|
-
return (r === !1 ? i : N.retry(i, r)).pipe(N.map((t) => (n) => e.predicate(t, n)), N.catchAll((t) => N.suspend(() => (n?.(t), e.onLoadError === "deny" ? N.succeed(
|
|
1085
|
-
},
|
|
1079
|
+
}))), jn = () => N.runSync(An), Mn = class extends L.TaggedError()("RowFilterUnavailable", { cause: L.String }) {}, Nn = Ze.exponential("20 millis").pipe(Ze.intersect(Ze.recurs(2))), Pn, Fn = (e) => {
|
|
1080
|
+
Pn = e;
|
|
1081
|
+
}, In = () => Pn, Ln = () => void 0, Rn = (e, t) => zn(Pn, e, t), zn = (e, t, n) => {
|
|
1082
|
+
if (e === void 0 || t.type === "system") return N.succeed(Ln);
|
|
1083
|
+
let r = e.retry ?? Nn, i = e.load(t);
|
|
1084
|
+
return (r === !1 ? i : N.retry(i, r)).pipe(N.map((t) => (n) => e.predicate(t, n)), N.catchAll((t) => N.suspend(() => (n?.(t), e.onLoadError === "deny" ? N.succeed(Bn) : N.fail(new Mn({ cause: String(t) }))))));
|
|
1085
|
+
}, Bn = () => ({
|
|
1086
1086
|
column: "id",
|
|
1087
1087
|
op: "isNull"
|
|
1088
|
-
}),
|
|
1088
|
+
}), Vn = (e, n, r) => {
|
|
1089
1089
|
let i = e(n);
|
|
1090
1090
|
return i === void 0 ? r : r ? t(r, i) : i;
|
|
1091
|
-
},
|
|
1092
|
-
let n =
|
|
1091
|
+
}, Hn = (e, t) => {
|
|
1092
|
+
let n = Vn(e, t.table, t.predicate);
|
|
1093
1093
|
return n === t.predicate ? t : {
|
|
1094
1094
|
...t,
|
|
1095
1095
|
predicate: n
|
|
1096
1096
|
};
|
|
1097
|
-
},
|
|
1097
|
+
}, U = j({ scope: "voltro:dispatcher" }), Un = (e) => Array.isArray(e) ? e.length : e == null ? 0 : 1, Wn = (e) => typeof e == "object" && !!e && e._tag === "ScopeError", Gn = class {
|
|
1098
1098
|
deps;
|
|
1099
1099
|
subscriptionRegistry;
|
|
1100
1100
|
matcher;
|
|
@@ -1104,12 +1104,12 @@ var Dt = class {
|
|
|
1104
1104
|
computedSubs = /* @__PURE__ */ new Map();
|
|
1105
1105
|
computedByTable = /* @__PURE__ */ new Map();
|
|
1106
1106
|
constructor(e) {
|
|
1107
|
-
this.deps = e, this.matcher = new
|
|
1107
|
+
this.deps = e, this.matcher = new Ft(), this.subscriptionRegistry = new Rt(this.matcher), this.unsubscribeChange = e.store.onChange((e) => {
|
|
1108
1108
|
this.handleChange(e);
|
|
1109
1109
|
});
|
|
1110
1110
|
}
|
|
1111
1111
|
async subscribe(e, t, n, r, i, a, o, s) {
|
|
1112
|
-
let c = `sub_${
|
|
1112
|
+
let c = `sub_${_e()}`, l = i ?? `subscription.${e.table}`, u = $t(e), d = cn(e);
|
|
1113
1113
|
e.predicate !== void 0 && this.subscriptionRegistry.subscribe(c, e.table, e.predicate, r);
|
|
1114
1114
|
for (let e of u) {
|
|
1115
1115
|
let t = this.dependentByTable.get(e);
|
|
@@ -1123,7 +1123,7 @@ var Dt = class {
|
|
|
1123
1123
|
}
|
|
1124
1124
|
}, h, g;
|
|
1125
1125
|
try {
|
|
1126
|
-
h = s === void 0 ? e :
|
|
1126
|
+
h = s === void 0 ? e : Hn(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);
|
|
1127
1127
|
} catch (e) {
|
|
1128
1128
|
throw m(), e;
|
|
1129
1129
|
}
|
|
@@ -1140,7 +1140,7 @@ var Dt = class {
|
|
|
1140
1140
|
cacheBinding: a,
|
|
1141
1141
|
reauthorize: o,
|
|
1142
1142
|
refilter: s
|
|
1143
|
-
}),
|
|
1143
|
+
}), H(l, 1), t({
|
|
1144
1144
|
_tag: "snapshot",
|
|
1145
1145
|
revision: 0,
|
|
1146
1146
|
data: g
|
|
@@ -1156,16 +1156,16 @@ var Dt = class {
|
|
|
1156
1156
|
durationMs: _ - f,
|
|
1157
1157
|
rowCount: g.length
|
|
1158
1158
|
}), () => {
|
|
1159
|
-
this.subscriptions.delete(c),
|
|
1159
|
+
this.subscriptions.delete(c), H(l, -1), m();
|
|
1160
1160
|
};
|
|
1161
1161
|
}
|
|
1162
1162
|
revokeSubscription(e, t, n = "guards no longer satisfied") {
|
|
1163
|
-
this.subscriptions.delete(e.id),
|
|
1163
|
+
this.subscriptions.delete(e.id), H(e.label, -1), this.subscriptionRegistry.unsubscribe(e.id);
|
|
1164
1164
|
for (let t of e.dependentTables) {
|
|
1165
1165
|
let n = this.dependentByTable.get(t);
|
|
1166
1166
|
n !== void 0 && (n.delete(e.id), n.size === 0 && this.dependentByTable.delete(t));
|
|
1167
1167
|
}
|
|
1168
|
-
|
|
1168
|
+
U.warn(`subscription revoked mid-stream — ${n}`, {
|
|
1169
1169
|
id: e.id,
|
|
1170
1170
|
label: e.label,
|
|
1171
1171
|
traceId: e.context.traceId
|
|
@@ -1175,12 +1175,12 @@ var Dt = class {
|
|
|
1175
1175
|
});
|
|
1176
1176
|
}
|
|
1177
1177
|
revokeComputed(e, t) {
|
|
1178
|
-
this.computedSubs.delete(e.id),
|
|
1178
|
+
this.computedSubs.delete(e.id), H(e.label, -1);
|
|
1179
1179
|
for (let t of e.tables) {
|
|
1180
1180
|
let n = this.computedByTable.get(t);
|
|
1181
1181
|
n !== void 0 && (n.delete(e.id), n.size === 0 && this.computedByTable.delete(t));
|
|
1182
1182
|
}
|
|
1183
|
-
|
|
1183
|
+
U.warn("computed subscription revoked mid-stream — guards no longer satisfied", {
|
|
1184
1184
|
id: e.id,
|
|
1185
1185
|
label: e.label,
|
|
1186
1186
|
traceId: e.context.traceId
|
|
@@ -1190,7 +1190,7 @@ var Dt = class {
|
|
|
1190
1190
|
});
|
|
1191
1191
|
}
|
|
1192
1192
|
async subscribeComputed(e, t, n, r) {
|
|
1193
|
-
let i = `csub_${
|
|
1193
|
+
let i = `csub_${_e()}`, a = e.dependentTables, o = {
|
|
1194
1194
|
id: i,
|
|
1195
1195
|
recompute: e.recompute,
|
|
1196
1196
|
tenantId: e.tenantId,
|
|
@@ -1198,10 +1198,10 @@ var Dt = class {
|
|
|
1198
1198
|
context: n,
|
|
1199
1199
|
label: r ?? "subscription.computed",
|
|
1200
1200
|
tables: a,
|
|
1201
|
-
lastJson:
|
|
1201
|
+
lastJson: Kn(e.value),
|
|
1202
1202
|
revision: 0
|
|
1203
1203
|
};
|
|
1204
|
-
this.computedSubs.set(i, o),
|
|
1204
|
+
this.computedSubs.set(i, o), H(o.label, 1);
|
|
1205
1205
|
for (let e of a) {
|
|
1206
1206
|
let t = this.computedByTable.get(e);
|
|
1207
1207
|
t === void 0 && (t = /* @__PURE__ */ new Set(), this.computedByTable.set(e, t)), t.add(i);
|
|
@@ -1219,9 +1219,9 @@ var Dt = class {
|
|
|
1219
1219
|
startMs: s,
|
|
1220
1220
|
endMs: Date.now(),
|
|
1221
1221
|
durationMs: Date.now() - s,
|
|
1222
|
-
rowCount:
|
|
1222
|
+
rowCount: Un(e.value)
|
|
1223
1223
|
}), () => {
|
|
1224
|
-
this.computedSubs.delete(i),
|
|
1224
|
+
this.computedSubs.delete(i), H(o.label, -1);
|
|
1225
1225
|
for (let e of a) {
|
|
1226
1226
|
let t = this.computedByTable.get(e);
|
|
1227
1227
|
t !== void 0 && (t.delete(i), t.size === 0 && this.computedByTable.delete(e));
|
|
@@ -1231,7 +1231,7 @@ var Dt = class {
|
|
|
1231
1231
|
async recomputeComputed(e) {
|
|
1232
1232
|
let t = Date.now();
|
|
1233
1233
|
try {
|
|
1234
|
-
let n = await e.recompute(), r =
|
|
1234
|
+
let n = await e.recompute(), r = Kn(n);
|
|
1235
1235
|
if (r === e.lastJson) return;
|
|
1236
1236
|
e.lastJson = r, e.revision += 1;
|
|
1237
1237
|
let i = Date.now();
|
|
@@ -1247,14 +1247,14 @@ var Dt = class {
|
|
|
1247
1247
|
startMs: t,
|
|
1248
1248
|
endMs: i,
|
|
1249
1249
|
durationMs: i - t,
|
|
1250
|
-
rowCount:
|
|
1250
|
+
rowCount: Un(n)
|
|
1251
1251
|
});
|
|
1252
1252
|
} catch (t) {
|
|
1253
|
-
if (
|
|
1253
|
+
if (Wn(t)) {
|
|
1254
1254
|
this.revokeComputed(e, t);
|
|
1255
1255
|
return;
|
|
1256
1256
|
}
|
|
1257
|
-
|
|
1257
|
+
U.warn("computed recompute failed; subscriber left on last value", {
|
|
1258
1258
|
id: e.id,
|
|
1259
1259
|
label: e.label,
|
|
1260
1260
|
traceId: e.context.traceId
|
|
@@ -1289,7 +1289,7 @@ var Dt = class {
|
|
|
1289
1289
|
for (let e of n) r.add(e.subscriberId);
|
|
1290
1290
|
let i = this.dependentByTable.get(e.table);
|
|
1291
1291
|
if (i !== void 0) for (let e of i) r.add(e);
|
|
1292
|
-
if (
|
|
1292
|
+
if (U.trace("handleChange", {
|
|
1293
1293
|
table: e.table,
|
|
1294
1294
|
op: e.op,
|
|
1295
1295
|
matcher: n.length,
|
|
@@ -1300,10 +1300,10 @@ var Dt = class {
|
|
|
1300
1300
|
for (let t of r) {
|
|
1301
1301
|
let n = this.subscriptions.get(t);
|
|
1302
1302
|
if (!n) {
|
|
1303
|
-
|
|
1303
|
+
U.trace("missing subscription", { subscriberId: t });
|
|
1304
1304
|
continue;
|
|
1305
1305
|
}
|
|
1306
|
-
if (!
|
|
1306
|
+
if (!un(e, n.relevantFields)) {
|
|
1307
1307
|
o++;
|
|
1308
1308
|
continue;
|
|
1309
1309
|
}
|
|
@@ -1326,21 +1326,21 @@ var Dt = class {
|
|
|
1326
1326
|
this.revokeSubscription(n, e, "row filter unavailable");
|
|
1327
1327
|
continue;
|
|
1328
1328
|
}
|
|
1329
|
-
i =
|
|
1329
|
+
i = Hn(e, n.baseDescriptor);
|
|
1330
1330
|
}
|
|
1331
1331
|
let o = await this.deps.store.query(i), s = n.lastDelivered;
|
|
1332
|
-
if (
|
|
1333
|
-
|
|
1332
|
+
if (qn(o, s)) {
|
|
1333
|
+
U.trace("suppressed no-op delta", {
|
|
1334
1334
|
subscriberId: t,
|
|
1335
1335
|
table: e.table
|
|
1336
1336
|
});
|
|
1337
1337
|
continue;
|
|
1338
1338
|
}
|
|
1339
|
-
n.lastDelivered = o, this.deps.cache !== void 0 && n.cacheBinding !== void 0 && this.deps.cache.put(n.cacheBinding, Array.from(n.dependentTables), o),
|
|
1339
|
+
n.lastDelivered = o, this.deps.cache !== void 0 && n.cacheBinding !== void 0 && this.deps.cache.put(n.cacheBinding, Array.from(n.dependentTables), o), Pe(s) && Pe(o) ? n.emit({
|
|
1340
1340
|
_tag: "delta",
|
|
1341
1341
|
revision: a,
|
|
1342
1342
|
emittedAt: a,
|
|
1343
|
-
patch:
|
|
1343
|
+
patch: je(s, o)
|
|
1344
1344
|
}) : n.emit({
|
|
1345
1345
|
_tag: "snapshot",
|
|
1346
1346
|
revision: a,
|
|
@@ -1358,7 +1358,7 @@ var Dt = class {
|
|
|
1358
1358
|
rowCount: o.length
|
|
1359
1359
|
});
|
|
1360
1360
|
} catch (r) {
|
|
1361
|
-
|
|
1361
|
+
U.warn("reactive re-query failed; subscriber left on last snapshot", {
|
|
1362
1362
|
subscriberId: t,
|
|
1363
1363
|
label: n.label,
|
|
1364
1364
|
table: e.table,
|
|
@@ -1366,66 +1366,66 @@ var Dt = class {
|
|
|
1366
1366
|
}, r);
|
|
1367
1367
|
}
|
|
1368
1368
|
}
|
|
1369
|
-
o > 0 &&
|
|
1369
|
+
o > 0 && U.trace("handleChange/prefiltered", {
|
|
1370
1370
|
table: e.table,
|
|
1371
1371
|
op: e.op,
|
|
1372
1372
|
skipped: o
|
|
1373
1373
|
});
|
|
1374
1374
|
}
|
|
1375
|
-
},
|
|
1375
|
+
}, Kn = (e) => {
|
|
1376
1376
|
try {
|
|
1377
1377
|
return JSON.stringify(e) ?? "null";
|
|
1378
1378
|
} catch {
|
|
1379
1379
|
return String(e);
|
|
1380
1380
|
}
|
|
1381
|
-
},
|
|
1381
|
+
}, qn = (e, t) => {
|
|
1382
1382
|
if (e === t) return !0;
|
|
1383
1383
|
if (e.length !== t.length) return !1;
|
|
1384
1384
|
for (let n = 0; n < e.length; n++) if (JSON.stringify(e[n]) !== JSON.stringify(t[n])) return !1;
|
|
1385
1385
|
return !0;
|
|
1386
|
-
},
|
|
1387
|
-
|
|
1386
|
+
}, Jn = (e) => typeof e == "object" && !!e && e.__voltroComputed === !0, Yn = 1440 * 60 * 1e3, Xn = 3600 * 1e3, W = /* @__PURE__ */ new Map(), Zn = /* @__PURE__ */ new Set(), Qn = (e, t) => {
|
|
1387
|
+
W.set(e, {
|
|
1388
1388
|
subject: t,
|
|
1389
1389
|
touchedAt: Date.now()
|
|
1390
1390
|
});
|
|
1391
|
-
for (let n of
|
|
1391
|
+
for (let n of Zn) try {
|
|
1392
1392
|
n(e, t);
|
|
1393
1393
|
} catch {}
|
|
1394
|
-
}, Qn = (e) => {
|
|
1395
|
-
let t = G.get(e);
|
|
1396
|
-
if (t) return t.touchedAt = Date.now(), t.subject;
|
|
1397
1394
|
}, $n = (e) => {
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
},
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1395
|
+
let t = W.get(e);
|
|
1396
|
+
if (t) return t.touchedAt = Date.now(), t.subject;
|
|
1397
|
+
}, er = (e) => {
|
|
1398
|
+
W.delete(e);
|
|
1399
|
+
}, tr = (e) => (Zn.add(e), () => {
|
|
1400
|
+
Zn.delete(e);
|
|
1401
|
+
}), nr = setInterval(() => {
|
|
1402
|
+
let e = Date.now() - Yn;
|
|
1403
|
+
for (let [t, n] of W) n.touchedAt < e && W.delete(t);
|
|
1404
|
+
}, Xn);
|
|
1405
|
+
typeof nr == "object" && nr && "unref" in nr && nr.unref();
|
|
1406
|
+
var G = /* @__PURE__ */ new Map(), rr = (e, t) => {
|
|
1407
|
+
let n = G.get(e);
|
|
1408
|
+
return n || (n = /* @__PURE__ */ new Set(), G.set(e, n)), n.add(t), () => {
|
|
1409
|
+
let n = G.get(e);
|
|
1410
|
+
n && (n.delete(t), n.size === 0 && G.delete(e));
|
|
1411
1411
|
};
|
|
1412
|
-
},
|
|
1413
|
-
let t =
|
|
1412
|
+
}, ir = (e) => {
|
|
1413
|
+
let t = G.get(e);
|
|
1414
1414
|
if (t) {
|
|
1415
1415
|
for (let e of [...t]) try {
|
|
1416
1416
|
e();
|
|
1417
1417
|
} catch {}
|
|
1418
|
-
|
|
1418
|
+
G.delete(e);
|
|
1419
1419
|
}
|
|
1420
|
-
},
|
|
1421
|
-
|
|
1422
|
-
},
|
|
1420
|
+
}, ar = (e) => G.get(e)?.size ?? 0, or = () => {
|
|
1421
|
+
W.clear(), G.clear();
|
|
1422
|
+
}, sr = () => [...W.entries()].map(([e, t]) => ({
|
|
1423
1423
|
clientId: e,
|
|
1424
1424
|
subjectType: t.subject.type,
|
|
1425
1425
|
tenantId: t.subject.tenantId
|
|
1426
|
-
})),
|
|
1426
|
+
})), cr = /^00-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/, lr = (e) => `00-${e.traceId}-${e.spanId}-${e.sampled ? "01" : "00"}`, ur = (e) => {
|
|
1427
1427
|
if (typeof e != "string") return null;
|
|
1428
|
-
let t =
|
|
1428
|
+
let t = cr.exec(e.trim().toLowerCase());
|
|
1429
1429
|
if (t === null) return null;
|
|
1430
1430
|
let [, n, r, i] = t;
|
|
1431
1431
|
return n === "0".repeat(32) || r === "0".repeat(16) ? null : {
|
|
@@ -1433,14 +1433,14 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
1433
1433
|
spanId: r,
|
|
1434
1434
|
sampled: (parseInt(i, 16) & 1) == 1
|
|
1435
1435
|
};
|
|
1436
|
-
},
|
|
1437
|
-
let t =
|
|
1438
|
-
if (t !== null) return
|
|
1436
|
+
}, dr = (e) => {
|
|
1437
|
+
let t = ur(e);
|
|
1438
|
+
if (t !== null) return Qe.externalSpan({
|
|
1439
1439
|
traceId: t.traceId,
|
|
1440
1440
|
spanId: t.spanId,
|
|
1441
1441
|
sampled: t.sampled
|
|
1442
1442
|
});
|
|
1443
|
-
},
|
|
1443
|
+
}, fr = new mt(), pr = (e, t) => fr.run(e, t), mr = () => fr.getStore(), hr = (e = {}) => {
|
|
1444
1444
|
let t = e.random ?? Math.random, n = /* @__PURE__ */ new Map(), r = (e) => n.get(e) ?? 0;
|
|
1445
1445
|
return {
|
|
1446
1446
|
pick(e) {
|
|
@@ -1465,7 +1465,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
1465
1465
|
}));
|
|
1466
1466
|
}
|
|
1467
1467
|
};
|
|
1468
|
-
},
|
|
1468
|
+
}, gr = (e = {}) => {
|
|
1469
1469
|
let t = e.thresholdFailures ?? 3, n = e.windowMs ?? 1e4, r = e.blackoutMs ?? 6e4, i = e.now ?? Date.now, a = /* @__PURE__ */ new Map(), o = (e) => {
|
|
1470
1470
|
let t = a.get(e);
|
|
1471
1471
|
return t === void 0 && (t = {
|
|
@@ -1499,7 +1499,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
1499
1499
|
}));
|
|
1500
1500
|
}
|
|
1501
1501
|
};
|
|
1502
|
-
},
|
|
1502
|
+
}, _r = (e = {}) => {
|
|
1503
1503
|
let t = e.now ?? Date.now, n = /* @__PURE__ */ new Map();
|
|
1504
1504
|
return {
|
|
1505
1505
|
get(e) {
|
|
@@ -1522,7 +1522,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
1522
1522
|
return n.size;
|
|
1523
1523
|
}
|
|
1524
1524
|
};
|
|
1525
|
-
},
|
|
1525
|
+
}, vr = (e, t) => e === null ? t === void 0 ? "anon:bg" : `anon:${t}` : `subject:${e}`, yr = (e) => {
|
|
1526
1526
|
let t = e.now ?? Date.now, n = e.keyPrefix ?? "voltro:ryw", r = e.channel ?? `${n}:bus`, i = e.onError ?? ((e, t) => {
|
|
1527
1527
|
process.stderr.write(`[voltro:ryw] redis ${t} failed: ${String(e)}\n`);
|
|
1528
1528
|
}), a = `${process.pid ?? 0}:${Math.random() * 1e9 | 0}:${t()}`, o = /* @__PURE__ */ new Map(), s = (e) => {
|
|
@@ -1581,7 +1581,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
1581
1581
|
return o.size;
|
|
1582
1582
|
}
|
|
1583
1583
|
};
|
|
1584
|
-
},
|
|
1584
|
+
}, br = j({ scope: "voltro:replication" }), xr = new mt(), Sr = (e, t) => xr.run(e, t), Cr = () => xr.getStore(), wr = class {
|
|
1585
1585
|
primary;
|
|
1586
1586
|
replicas;
|
|
1587
1587
|
adapter;
|
|
@@ -1594,10 +1594,10 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
1594
1594
|
recordRouting;
|
|
1595
1595
|
now;
|
|
1596
1596
|
constructor(e) {
|
|
1597
|
-
this.primary = e.primary, this.replicas = e.replicas, this.adapter = e.replicationAdapter, this.policy = e.rywPolicy ?? "fallback", this.rywTtlMs = e.rywTtlMs ?? 3e4, this.rywMaxWaitMs = e.rywMaxWaitMs ?? 500, this.now = e.now ?? Date.now, this.rywStore = e.rywStore ??
|
|
1597
|
+
this.primary = e.primary, this.replicas = e.replicas, this.adapter = e.replicationAdapter, this.policy = e.rywPolicy ?? "fallback", this.rywTtlMs = e.rywTtlMs ?? 3e4, this.rywMaxWaitMs = e.rywMaxWaitMs ?? 500, this.now = e.now ?? Date.now, this.rywStore = e.rywStore ?? _r({ now: this.now }), this.selector = e.replicaSelector ?? hr(), this.health = e.replicaHealth ?? gr({ now: this.now }), e.recordRouting !== void 0 && (this.recordRouting = e.recordRouting);
|
|
1598
1598
|
}
|
|
1599
1599
|
async query(e) {
|
|
1600
|
-
let t =
|
|
1600
|
+
let t = xr.getStore(), n = t?.subjectKey ?? "anon:bg";
|
|
1601
1601
|
if (t?.forcePrimary === !0) return this.emitRouting({
|
|
1602
1602
|
target: "primary",
|
|
1603
1603
|
replicaIndex: null,
|
|
@@ -1661,7 +1661,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
1661
1661
|
waitMs: 0
|
|
1662
1662
|
}), r;
|
|
1663
1663
|
} catch (r) {
|
|
1664
|
-
return this.health.reportFailure(i, String(r)),
|
|
1664
|
+
return this.health.reportFailure(i, String(r)), br.warn("replica query failed; falling back to primary", {
|
|
1665
1665
|
idx: a,
|
|
1666
1666
|
err: r
|
|
1667
1667
|
}), this.emitRouting({
|
|
@@ -1730,7 +1730,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
1730
1730
|
fallbackReason: "wait-timeout"
|
|
1731
1731
|
}), this.primary.query(e);
|
|
1732
1732
|
}
|
|
1733
|
-
await
|
|
1733
|
+
await Tr(10);
|
|
1734
1734
|
}
|
|
1735
1735
|
}
|
|
1736
1736
|
async insert(e, t) {
|
|
@@ -1770,8 +1770,8 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
1770
1770
|
return await this.stampPostWrite(), r;
|
|
1771
1771
|
}
|
|
1772
1772
|
async transactional(e) {
|
|
1773
|
-
let t = await
|
|
1774
|
-
subjectKey:
|
|
1773
|
+
let t = await Sr({
|
|
1774
|
+
subjectKey: xr.getStore()?.subjectKey ?? "anon:bg",
|
|
1775
1775
|
forcePrimary: !0
|
|
1776
1776
|
}, () => this.primary.transactional(e));
|
|
1777
1777
|
return await this.stampPostWrite(), t;
|
|
@@ -1787,7 +1787,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
1787
1787
|
}
|
|
1788
1788
|
async stampPostWrite() {
|
|
1789
1789
|
if (this.replicas.length === 0) return;
|
|
1790
|
-
let e =
|
|
1790
|
+
let e = xr.getStore()?.subjectKey ?? "anon:bg";
|
|
1791
1791
|
try {
|
|
1792
1792
|
let t = await this.adapter.capturePrimaryPosition(this.primary);
|
|
1793
1793
|
this.rywStore.set(e, {
|
|
@@ -1795,37 +1795,37 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
1795
1795
|
expiresAt: this.now() + this.rywTtlMs
|
|
1796
1796
|
});
|
|
1797
1797
|
} catch (e) {
|
|
1798
|
-
|
|
1798
|
+
br.warn("failed to capture primary position; RYW skipped", { err: e });
|
|
1799
1799
|
}
|
|
1800
1800
|
}
|
|
1801
1801
|
emitRouting(e) {
|
|
1802
1802
|
this.recordRouting?.(e);
|
|
1803
1803
|
}
|
|
1804
|
-
},
|
|
1804
|
+
}, Tr = (e) => new Promise((t) => setTimeout(t, e)), Er = (e, t, n) => ({
|
|
1805
1805
|
subject: e,
|
|
1806
|
-
traceId: t?.traceId ??
|
|
1806
|
+
traceId: t?.traceId ?? _e(),
|
|
1807
1807
|
...t?.spanId === void 0 ? {} : { spanId: t.spanId },
|
|
1808
1808
|
...n === void 0 ? {} : { clientId: n }
|
|
1809
|
-
}),
|
|
1809
|
+
}), Dr = N.currentSpan.pipe(N.catchAll(() => N.succeed(void 0))), Or = (e) => ({
|
|
1810
1810
|
traceId: e.traceId,
|
|
1811
1811
|
...e.spanId === void 0 ? {} : { spanId: e.spanId }
|
|
1812
|
-
}),
|
|
1812
|
+
}), kr = (e, t, n) => {
|
|
1813
1813
|
e !== void 0 && (e.attribute("rpc.tag", t), e.attribute("subject.type", n.type), n.tenantId !== void 0 && n.tenantId !== null && e.attribute("tenant.id", n.tenantId));
|
|
1814
|
-
},
|
|
1815
|
-
if (
|
|
1816
|
-
let t = await N.runPromise(N.either(
|
|
1814
|
+
}, Ar = (e) => {
|
|
1815
|
+
if (In() !== void 0) return async () => {
|
|
1816
|
+
let t = await N.runPromise(N.either(Rn(e, (e) => {
|
|
1817
1817
|
console.error("[voltro] row filter failed to load — subscription", e);
|
|
1818
1818
|
})));
|
|
1819
1819
|
if (t._tag === "Left") throw t.left;
|
|
1820
1820
|
return t.right;
|
|
1821
1821
|
};
|
|
1822
|
-
},
|
|
1822
|
+
}, jr = (e, t, n, r, i, a, o, s) => R.asyncScoped((c) => N.gen(function* () {
|
|
1823
1823
|
let l = yield* N.tryPromise(() => t.subscribe(e, (e) => {
|
|
1824
1824
|
c.single(e);
|
|
1825
1825
|
}, n, r, i, a, o, s)).pipe(N.matchCause({
|
|
1826
|
-
onFailure: (e) => (
|
|
1826
|
+
onFailure: (e) => (Lr(`subscription.${i}`, n.traceId, e), {
|
|
1827
1827
|
ok: !1,
|
|
1828
|
-
error:
|
|
1828
|
+
error: Vr(e)
|
|
1829
1829
|
}),
|
|
1830
1830
|
onSuccess: (e) => ({
|
|
1831
1831
|
ok: !0,
|
|
@@ -1841,21 +1841,21 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
1841
1841
|
}
|
|
1842
1842
|
let u = l.unsubscribe;
|
|
1843
1843
|
if (yield* N.addFinalizer(() => N.sync(() => u())), n.clientId !== void 0) {
|
|
1844
|
-
let e =
|
|
1844
|
+
let e = rr(n.clientId, () => {
|
|
1845
1845
|
c.end();
|
|
1846
1846
|
});
|
|
1847
1847
|
yield* N.addFinalizer(() => N.sync(() => e()));
|
|
1848
1848
|
}
|
|
1849
|
-
})),
|
|
1849
|
+
})), Mr = (e, t, n, r) => R.asyncScoped((i) => N.gen(function* () {
|
|
1850
1850
|
let a = yield* N.tryPromise(() => t.subscribeComputed(e, (e) => {
|
|
1851
1851
|
i.single(e._tag === "snapshot" ? {
|
|
1852
1852
|
...e,
|
|
1853
1853
|
computed: !0
|
|
1854
1854
|
} : e);
|
|
1855
1855
|
}, n, r)).pipe(N.matchCause({
|
|
1856
|
-
onFailure: (e) => (
|
|
1856
|
+
onFailure: (e) => (Lr(`subscription.${r}`, n.traceId, e), {
|
|
1857
1857
|
ok: !1,
|
|
1858
|
-
error:
|
|
1858
|
+
error: Vr(e)
|
|
1859
1859
|
}),
|
|
1860
1860
|
onSuccess: (e) => ({
|
|
1861
1861
|
ok: !0,
|
|
@@ -1871,21 +1871,21 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
1871
1871
|
}
|
|
1872
1872
|
let o = a.unsubscribe;
|
|
1873
1873
|
if (yield* N.addFinalizer(() => N.sync(() => o())), n.clientId !== void 0) {
|
|
1874
|
-
let e =
|
|
1874
|
+
let e = rr(n.clientId, () => {
|
|
1875
1875
|
i.end();
|
|
1876
1876
|
});
|
|
1877
1877
|
yield* N.addFinalizer(() => N.sync(() => e()));
|
|
1878
1878
|
}
|
|
1879
|
-
})),
|
|
1880
|
-
let s = yield*
|
|
1881
|
-
|
|
1882
|
-
let u =
|
|
1879
|
+
})), Nr = (e, t, n = "rpc.subscription", r, i, a, o) => R.unwrap(N.gen(function* () {
|
|
1880
|
+
let s = yield* Te, c = yield* xe, l = yield* Dr;
|
|
1881
|
+
kr(l, n, s);
|
|
1882
|
+
let u = Er(s, l, c.clientId), d = vr(s.id, c.clientId), f = Sr({ subjectKey: d }, () => pr({
|
|
1883
1883
|
traceId: u.traceId,
|
|
1884
1884
|
...u.spanId === void 0 ? {} : { spanId: u.spanId }
|
|
1885
1885
|
}, () => e(u))), p = N.isEffect(f) ? yield* f.pipe(N.matchCause({
|
|
1886
|
-
onFailure: (e) => (
|
|
1886
|
+
onFailure: (e) => (Lr(`subscription.${n}`, u.traceId, e), {
|
|
1887
1887
|
ok: !1,
|
|
1888
|
-
error:
|
|
1888
|
+
error: Vr(e)
|
|
1889
1889
|
}),
|
|
1890
1890
|
onSuccess: (e) => ({
|
|
1891
1891
|
ok: !0,
|
|
@@ -1895,49 +1895,49 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
1895
1895
|
ok: !0,
|
|
1896
1896
|
value: f
|
|
1897
1897
|
};
|
|
1898
|
-
if (!p.ok) return
|
|
1898
|
+
if (!p.ok) return R.make({
|
|
1899
1899
|
_tag: "error",
|
|
1900
1900
|
error: p.error
|
|
1901
1901
|
});
|
|
1902
1902
|
let m = p.value;
|
|
1903
|
-
if (
|
|
1903
|
+
if (Jn(m)) return Mr(m, t, u, n);
|
|
1904
1904
|
let h = m, g = r?.(h);
|
|
1905
|
-
return
|
|
1905
|
+
return jr(h, t, u, g, n, i === void 0 ? void 0 : {
|
|
1906
1906
|
key: i.scope === "subject" ? `${i.baseKey}:s:${d}` : `${i.baseKey}:global`,
|
|
1907
1907
|
ttlMs: i.ttlMs,
|
|
1908
1908
|
swrMs: i.swrMs
|
|
1909
|
-
}, a?.(s), o?.(s) ??
|
|
1910
|
-
}).pipe(N.withSpan(n, { attributes: { "framework.kind": "subscription" } }))),
|
|
1911
|
-
let n = yield*
|
|
1912
|
-
|
|
1913
|
-
let a =
|
|
1909
|
+
}, a?.(s), o?.(s) ?? Ar(s));
|
|
1910
|
+
}).pipe(N.withSpan(n, { attributes: { "framework.kind": "subscription" } }))), Pr = (e, t = "rpc.stream") => R.unwrap(N.gen(function* () {
|
|
1911
|
+
let n = yield* Te, r = yield* xe, i = yield* Dr;
|
|
1912
|
+
kr(i, t, n);
|
|
1913
|
+
let a = Er(n, i, r.clientId), o = e(a), s = N.isEffect(o) ? yield* o.pipe(N.orDie) : o;
|
|
1914
1914
|
if (a.clientId === void 0) return s;
|
|
1915
1915
|
let c = a.clientId;
|
|
1916
|
-
return
|
|
1917
|
-
let e = yield* Ue.make(), t =
|
|
1916
|
+
return R.unwrapScoped(N.gen(function* () {
|
|
1917
|
+
let e = yield* Ue.make(), t = rr(c, () => {
|
|
1918
1918
|
Ue.unsafeDone(e, N.void);
|
|
1919
1919
|
});
|
|
1920
|
-
return yield* N.addFinalizer(() => N.sync(() => t())), s.pipe(
|
|
1920
|
+
return yield* N.addFinalizer(() => N.sync(() => t())), s.pipe(R.interruptWhen(Ue.await(e)));
|
|
1921
1921
|
}));
|
|
1922
|
-
}).pipe(N.withSpan(t, { attributes: { "framework.kind": "stream" } }))),
|
|
1923
|
-
if (
|
|
1924
|
-
let r =
|
|
1922
|
+
}).pipe(N.withSpan(t, { attributes: { "framework.kind": "stream" } }))), Fr = j({ scope: "voltro:rpc" }), Ir = j({ scope: "voltro:http" }), Lr = (e, t, n) => {
|
|
1923
|
+
if (M.isInterruptedOnly(n)) return;
|
|
1924
|
+
let r = M.squash(n), i = r?._tag, a = r instanceof Error ? r.message : r?.message ?? String(r), o = M.dieOption(n)._tag === "Some", s = Xt(r), c = {
|
|
1925
1925
|
traceId: t,
|
|
1926
1926
|
...i === void 0 ? {} : { errorTag: i },
|
|
1927
1927
|
...s
|
|
1928
1928
|
}, l = a === "Failed to execute statement" && typeof s.dbMessage == "string" ? s.dbMessage : a;
|
|
1929
|
-
o ?
|
|
1930
|
-
},
|
|
1929
|
+
o ? Fr.error(`${e} failed: ${l}`, c) : Fr.warn(`${e} failed: ${l}`, c);
|
|
1930
|
+
}, Rr = /* @__PURE__ */ new Set([
|
|
1931
1931
|
"SqlError",
|
|
1932
1932
|
"ResultLengthMismatch",
|
|
1933
1933
|
"FieldDecryptionError"
|
|
1934
|
-
]),
|
|
1934
|
+
]), zr = (e) => typeof e == "object" && !!e && typeof e._tag == "string" && Rr.has(e._tag), Br = (e) => ({
|
|
1935
1935
|
_tag: "InternalError",
|
|
1936
1936
|
message: "internal server error",
|
|
1937
1937
|
traceId: e
|
|
1938
|
-
}),
|
|
1939
|
-
let t =
|
|
1940
|
-
if (t && typeof t == "object" && t._tag === "UnknownException" && (t = t.error ?? t.cause ?? t),
|
|
1938
|
+
}), Vr = (e) => {
|
|
1939
|
+
let t = M.squash(e);
|
|
1940
|
+
if (t && typeof t == "object" && t._tag === "UnknownException" && (t = t.error ?? t.cause ?? t), zr(t)) return {
|
|
1941
1941
|
_tag: "InternalError",
|
|
1942
1942
|
message: "internal server error"
|
|
1943
1943
|
};
|
|
@@ -1949,43 +1949,43 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
1949
1949
|
...typeof i == "string" ? { _tag: i } : {},
|
|
1950
1950
|
message: typeof a == "string" ? a : String(t)
|
|
1951
1951
|
};
|
|
1952
|
-
},
|
|
1953
|
-
let r = yield*
|
|
1954
|
-
|
|
1955
|
-
let o =
|
|
1952
|
+
}, Hr = (e, t, n = "rpc.mutation") => N.gen(function* () {
|
|
1953
|
+
let r = yield* Te, i = yield* xe, a = yield* Dr;
|
|
1954
|
+
kr(a, n, r);
|
|
1955
|
+
let o = Er(r, a, i.clientId), s = Sr({ subjectKey: vr(r.id, i.clientId) }, () => pr({
|
|
1956
1956
|
traceId: o.traceId,
|
|
1957
1957
|
...o.spanId === void 0 ? {} : { spanId: o.spanId }
|
|
1958
1958
|
}, () => e(t, o)));
|
|
1959
1959
|
return yield* (N.isEffect(s) ? s : N.tryPromise({
|
|
1960
1960
|
try: () => Promise.resolve(s),
|
|
1961
1961
|
catch: (e) => e
|
|
1962
|
-
})).pipe(N.tapErrorCause((e) => N.sync(() =>
|
|
1963
|
-
}).pipe(N.withSpan(n, { attributes: { "framework.kind": "mutation" } })),
|
|
1964
|
-
let t = e.port ?? 4e3, n = e.path ?? "/ws", r =
|
|
1965
|
-
if (!e.inspectRoute) return
|
|
1962
|
+
})).pipe(N.tapErrorCause((e) => N.sync(() => Lr(n, o.traceId, e))), N.catchIf(zr, () => N.die(Br(o.traceId))), N.annotateLogs(Or(o)));
|
|
1963
|
+
}).pipe(N.withSpan(n, { attributes: { "framework.kind": "mutation" } })), Ur = 8 * 1024 * 1024, Wr = (e) => {
|
|
1964
|
+
let t = e.port ?? 4e3, n = e.path ?? "/ws", r = et(), i = (t) => it.HttpServerRequest.pipe(N.flatMap((t) => N.gen(function* () {
|
|
1965
|
+
if (!e.inspectRoute) return B.text("inspect route not configured", { status: 404 });
|
|
1966
1966
|
let n = {};
|
|
1967
1967
|
for (let [e, r] of Object.entries(t.headers)) r !== void 0 && (n[e.toLowerCase()] = Array.isArray(r) ? r.join(", ") : r);
|
|
1968
1968
|
let r;
|
|
1969
1969
|
t.method !== "GET" && t.method !== "HEAD" && t.method !== "OPTIONS" && (r = yield* t.text.pipe(N.orElseSucceed(() => "")));
|
|
1970
1970
|
let i = e.inspectRoute.handle(t.url, n, t.method, r), a = i instanceof Promise ? yield* N.promise(() => i) : i;
|
|
1971
|
-
return a === null ?
|
|
1971
|
+
return a === null ? B.text("inspect route not found", { status: 404 }) : B.text(a.body, {
|
|
1972
1972
|
status: a.status,
|
|
1973
1973
|
contentType: a.contentType,
|
|
1974
1974
|
headers: a.headers ?? {}
|
|
1975
1975
|
});
|
|
1976
|
-
}))), a = () =>
|
|
1976
|
+
}))), a = () => it.HttpServerRequest.pipe(N.flatMap((t) => {
|
|
1977
1977
|
let n = e.inspectStream;
|
|
1978
|
-
if (!n) return N.succeed(
|
|
1978
|
+
if (!n) return N.succeed(B.text("inspect stream not configured", { status: 404 }));
|
|
1979
1979
|
let r = {};
|
|
1980
1980
|
for (let [e, n] of Object.entries(t.headers)) n !== void 0 && (r[e.toLowerCase()] = Array.isArray(n) ? n.join(", ") : n);
|
|
1981
1981
|
let i = n.corsHeaders(r.origin);
|
|
1982
|
-
if (n.isDisabled()) return N.succeed(
|
|
1982
|
+
if (n.isDisabled()) return N.succeed(B.text(JSON.stringify({ error: "inspect disabled (VOLTRO_INSPECT=off)" }), {
|
|
1983
1983
|
status: 503,
|
|
1984
1984
|
contentType: "application/json; charset=utf-8",
|
|
1985
1985
|
headers: i
|
|
1986
1986
|
}));
|
|
1987
1987
|
let a = n.authorize(r);
|
|
1988
|
-
if (!a.ok) return N.succeed(
|
|
1988
|
+
if (!a.ok) return N.succeed(B.text(JSON.stringify({
|
|
1989
1989
|
error: "unauthorized",
|
|
1990
1990
|
reason: a.reason
|
|
1991
1991
|
}), {
|
|
@@ -1997,7 +1997,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
1997
1997
|
if (!f || e.indexOf("event: ") !== 0) return !0;
|
|
1998
1998
|
let t = e.indexOf("\n", 7);
|
|
1999
1999
|
return t < 0 || f.has(e.slice(7, t).trim());
|
|
2000
|
-
}, m =
|
|
2000
|
+
}, m = R.asyncScoped((e) => N.gen(function* () {
|
|
2001
2001
|
if (e.single(o.encode("retry: 5000\n\n")), !u) for (let t of n.replay()) p(t) && e.single(o.encode(t));
|
|
2002
2002
|
let t = n.subscribe((t) => {
|
|
2003
2003
|
p(t) && e.single(o.encode(t));
|
|
@@ -2008,7 +2008,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2008
2008
|
clearInterval(r), t();
|
|
2009
2009
|
}));
|
|
2010
2010
|
}));
|
|
2011
|
-
return N.succeed(
|
|
2011
|
+
return N.succeed(B.stream(m, {
|
|
2012
2012
|
status: 200,
|
|
2013
2013
|
headers: {
|
|
2014
2014
|
"content-type": "text/event-stream; charset=utf-8",
|
|
@@ -2018,26 +2018,26 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2018
2018
|
...i
|
|
2019
2019
|
}
|
|
2020
2020
|
}));
|
|
2021
|
-
})), o =
|
|
2022
|
-
if (!e.inspectRoute) return
|
|
2021
|
+
})), o = z.add("*", "/_voltro/inspect/*", it.HttpServerRequest.pipe(N.flatMap((t) => N.gen(function* () {
|
|
2022
|
+
if (!e.inspectRoute) return B.text("inspect route not configured", { status: 404 });
|
|
2023
2023
|
let n = {};
|
|
2024
2024
|
for (let [e, r] of Object.entries(t.headers)) r !== void 0 && (n[e.toLowerCase()] = Array.isArray(r) ? r.join(", ") : r);
|
|
2025
2025
|
let r;
|
|
2026
2026
|
t.method !== "GET" && t.method !== "HEAD" && t.method !== "OPTIONS" && (r = yield* t.text.pipe(N.orElseSucceed(() => "")));
|
|
2027
2027
|
let i = e.inspectRoute.handle(t.url, n, t.method, r), a = i instanceof Promise ? yield* N.promise(() => i) : i;
|
|
2028
|
-
return a === null ?
|
|
2028
|
+
return a === null ? B.text("inspect route not found", { status: 404 }) : B.text(a.body, {
|
|
2029
2029
|
status: a.status,
|
|
2030
2030
|
contentType: a.contentType,
|
|
2031
2031
|
headers: a.headers ?? {}
|
|
2032
2032
|
});
|
|
2033
2033
|
})))), s = P.empty;
|
|
2034
|
-
e.inspectRoute !== void 0 && (s = e.inspectStream === void 0 ? P.mergeAll(
|
|
2034
|
+
e.inspectRoute !== void 0 && (s = e.inspectStream === void 0 ? P.mergeAll(z.add("*", "/_voltro/inspect", i(!0)), o) : P.mergeAll(z.add("GET", "/_voltro/inspect/stream", a()), z.add("*", "/_voltro/inspect", i(!0)), o));
|
|
2035
2035
|
let c = P.empty;
|
|
2036
2036
|
if (e.webhookRoutes !== void 0 && e.webhookRoutes.size > 0) {
|
|
2037
|
-
let t = (e) =>
|
|
2037
|
+
let t = (e) => it.HttpServerRequest.pipe(N.flatMap((t) => N.gen(function* () {
|
|
2038
2038
|
let n = {};
|
|
2039
2039
|
for (let [e, r] of Object.entries(t.headers)) r !== void 0 && (n[e.toLowerCase()] = Array.isArray(r) ? r.join(", ") : r);
|
|
2040
|
-
let r = t.method !== "GET" && t.method !== "HEAD" ? yield* t.text.pipe(N.orElseSucceed(() => "")) : "", i = new TextEncoder().encode(r), a = t.url.split("?")[0], o =
|
|
2040
|
+
let r = t.method !== "GET" && t.method !== "HEAD" ? yield* t.text.pipe(N.orElseSucceed(() => "")) : "", i = new TextEncoder().encode(r), a = t.url.split("?")[0], o = dr(n.traceparent), s = yield* N.promise(() => e.handle({
|
|
2041
2041
|
method: t.method,
|
|
2042
2042
|
path: a,
|
|
2043
2043
|
headers: n,
|
|
@@ -2049,16 +2049,16 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2049
2049
|
},
|
|
2050
2050
|
...o ? { parent: o } : {}
|
|
2051
2051
|
}));
|
|
2052
|
-
return
|
|
2052
|
+
return B.text(s.body, {
|
|
2053
2053
|
status: s.status,
|
|
2054
2054
|
contentType: s.contentType
|
|
2055
2055
|
});
|
|
2056
|
-
}))), n = Array.from(e.webhookRoutes.entries()).map(([e, n]) =>
|
|
2056
|
+
}))), n = Array.from(e.webhookRoutes.entries()).map(([e, n]) => z.add("*", e, t(n)));
|
|
2057
2057
|
c = P.mergeAll(...n);
|
|
2058
2058
|
}
|
|
2059
2059
|
let l = P.empty;
|
|
2060
2060
|
if (e.httpRoutes !== void 0 && e.httpRoutes.length > 0) {
|
|
2061
|
-
let t = (e) =>
|
|
2061
|
+
let t = (e) => it.HttpServerRequest.pipe(N.flatMap((t) => N.gen(function* () {
|
|
2062
2062
|
let n = {};
|
|
2063
2063
|
for (let [e, r] of Object.entries(t.headers)) r !== void 0 && (n[e.toLowerCase()] = Array.isArray(r) ? r.join(", ") : r);
|
|
2064
2064
|
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(N.orElseSucceed(() => /* @__PURE__ */ new ArrayBuffer(0)))) : /* @__PURE__ */ new Uint8Array(), s = {
|
|
@@ -2067,8 +2067,8 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2067
2067
|
query: a,
|
|
2068
2068
|
headers: n,
|
|
2069
2069
|
rawBody: o
|
|
2070
|
-
}, c = yield* N.promise(() =>
|
|
2071
|
-
c.status >= 500 &&
|
|
2070
|
+
}, c = yield* N.promise(() => ft(e, s));
|
|
2071
|
+
c.status >= 500 && Ir.warn(`${t.method} ${i} → ${c.status}`, {
|
|
2072
2072
|
method: t.method,
|
|
2073
2073
|
path: i,
|
|
2074
2074
|
status: c.status,
|
|
@@ -2079,45 +2079,45 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2079
2079
|
...c.contentType ? { contentType: c.contentType } : {},
|
|
2080
2080
|
headers: l
|
|
2081
2081
|
};
|
|
2082
|
-
return c.body instanceof Uint8Array ?
|
|
2083
|
-
})), N.tapErrorCause((t) =>
|
|
2082
|
+
return c.body instanceof Uint8Array ? B.uint8Array(c.body, u) : B.text(c.body ?? "", u);
|
|
2083
|
+
})), N.tapErrorCause((t) => M.isInterruptedOnly(t) ? N.void : N.sync(() => Ir.error(`${e.map((e) => e.method).join("|")} ${e[0].path} threw`, { path: e[0].path }, M.squash(t))))), n = /* @__PURE__ */ new Map();
|
|
2084
2084
|
for (let t of e.httpRoutes) {
|
|
2085
2085
|
let e = n.get(t.path);
|
|
2086
2086
|
e ? e.push(t) : n.set(t.path, [t]);
|
|
2087
2087
|
}
|
|
2088
2088
|
let r = [...n.entries()].flatMap(([e, n]) => {
|
|
2089
2089
|
let r = n.length === 1 ? n[0].method : "*", i = t(n);
|
|
2090
|
-
return [
|
|
2090
|
+
return [z.add(r, e, i), z.add(r, `${e}/*`, i)];
|
|
2091
2091
|
});
|
|
2092
2092
|
l = P.mergeAll(...r);
|
|
2093
2093
|
}
|
|
2094
|
-
let u =
|
|
2095
|
-
let e = yield*
|
|
2094
|
+
let u = ut.layerProtocolWebsocketRouter({ path: n }), d = ut.layer(e.group), f = ut.layer(e.group).pipe(P.provide(ut.layerProtocolHttpRouter({ path: "/rpc" })), P.provide(lt.layerJson), P.provide(e.httpHandlersLayer ?? e.handlersLayer)), p = P.scopedDiscard(N.gen(function* () {
|
|
2095
|
+
let e = yield* ut.Protocol;
|
|
2096
2096
|
yield* N.forkScoped(N.gen(function* () {
|
|
2097
2097
|
let t = yield* e.disconnects.take;
|
|
2098
|
-
|
|
2098
|
+
er(t), ir(t);
|
|
2099
2099
|
}).pipe(N.forever));
|
|
2100
|
-
})), m = P.mergeAll(d, p).pipe(P.provide(u), P.provide(
|
|
2101
|
-
let t = yield*
|
|
2100
|
+
})), m = P.mergeAll(d, p).pipe(P.provide(u), P.provide(lt.layerJson), P.provide(e.handlersLayer)), h = P.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) => N.gen(function* () {
|
|
2101
|
+
let t = yield* it.HttpServerRequest, n = {};
|
|
2102
2102
|
for (let [e, r] of Object.entries(t.headers)) r !== void 0 && (n[e.toLowerCase()] = Array.isArray(r) ? r.join(", ") : r);
|
|
2103
2103
|
let r = t.url.indexOf("?"), i = r === -1 ? t.url : t.url.slice(0, r);
|
|
2104
2104
|
if (t.method === "POST" && i === "/rpc") {
|
|
2105
2105
|
let e = n["content-length"];
|
|
2106
|
-
if (e !== void 0 && Number(e) > y) return
|
|
2106
|
+
if (e !== void 0 && Number(e) > y) return B.text("rpc payload too large", {
|
|
2107
2107
|
status: 413,
|
|
2108
2108
|
headers: b
|
|
2109
2109
|
});
|
|
2110
2110
|
}
|
|
2111
|
-
if (_ && (i === "/internal/liveness" || i === "/internal/readiness")) return i === "/internal/liveness" ?
|
|
2111
|
+
if (_ && (i === "/internal/liveness" || i === "/internal/readiness")) return i === "/internal/liveness" ? B.text("ok", {
|
|
2112
2112
|
status: 200,
|
|
2113
2113
|
headers: b
|
|
2114
|
-
}) : _.isReady() ? _.ping && !(yield* N.tryPromise(() => _.ping()).pipe(N.orElseSucceed(() => !1))) ?
|
|
2114
|
+
}) : _.isReady() ? _.ping && !(yield* N.tryPromise(() => _.ping()).pipe(N.orElseSucceed(() => !1))) ? B.text("not-ready: dependency", {
|
|
2115
2115
|
status: 503,
|
|
2116
2116
|
headers: b
|
|
2117
|
-
}) :
|
|
2117
|
+
}) : B.text("ready", {
|
|
2118
2118
|
status: 200,
|
|
2119
2119
|
headers: b
|
|
2120
|
-
}) :
|
|
2120
|
+
}) : B.text("not-ready", {
|
|
2121
2121
|
status: 503,
|
|
2122
2122
|
headers: b
|
|
2123
2123
|
});
|
|
@@ -2134,17 +2134,17 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2134
2134
|
headers: n,
|
|
2135
2135
|
remoteAddr: c
|
|
2136
2136
|
})).pipe(N.orElseSucceed(() => null));
|
|
2137
|
-
return l === null ? yield* e :
|
|
2137
|
+
return l === null ? yield* e : B.text(l.body ?? "", {
|
|
2138
2138
|
status: l.status,
|
|
2139
2139
|
...l.headers ? { headers: l.headers } : {}
|
|
2140
2140
|
});
|
|
2141
|
-
}), S = P.unwrapEffect(
|
|
2141
|
+
}), S = P.unwrapEffect(z.toHttpEffect(h).pipe(N.map((e) => rt.serve(x(e))))).pipe(P.provide(ot.layer(() => r, { port: t })), P.provide(at.layer));
|
|
2142
2142
|
e.tracerLayer && (S = S.pipe(P.provide(e.tracerLayer)));
|
|
2143
|
-
let C =
|
|
2144
|
-
C.error("rpc server crashed", {},
|
|
2143
|
+
let C = j({ scope: "voltro:rpc" }), ee = P.launch(S).pipe(N.catchAllCause((e) => N.sync(() => {
|
|
2144
|
+
C.error("rpc server crashed", {}, M.squash(e)), process.exit(1);
|
|
2145
2145
|
})));
|
|
2146
|
-
return
|
|
2147
|
-
},
|
|
2146
|
+
return st.runMain(ee, { disableErrorReporting: !0 }), r;
|
|
2147
|
+
}, Gr = (e, t = 1e4) => new Promise((n, r) => {
|
|
2148
2148
|
if (e.listening) {
|
|
2149
2149
|
n();
|
|
2150
2150
|
return;
|
|
@@ -2160,13 +2160,13 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2160
2160
|
o(e);
|
|
2161
2161
|
}
|
|
2162
2162
|
a = setTimeout(() => o(/* @__PURE__ */ Error(`rpc server did not bind within ${t}ms`)), t), e.on("listening", s), e.on("error", c);
|
|
2163
|
-
}),
|
|
2163
|
+
}), Kr = () => {
|
|
2164
2164
|
let e = process.env.FRAMEWORK_TRACING?.toLowerCase();
|
|
2165
2165
|
return e === "console" || e === "otlp" || e === "off" ? e : process.env.OTEL_EXPORTER_OTLP_ENDPOINT || process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT ? "otlp" : "off";
|
|
2166
|
-
},
|
|
2166
|
+
}, qr = () => {
|
|
2167
2167
|
let e = process.env.FRAMEWORK_METRICS?.toLowerCase();
|
|
2168
2168
|
return e === "console" || e === "otlp" || e === "off" ? e : process.env.OTEL_EXPORTER_OTLP_ENDPOINT || process.env.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT ? "otlp" : "off";
|
|
2169
|
-
},
|
|
2169
|
+
}, Jr = async () => {
|
|
2170
2170
|
let [e, t, n, r, i] = await Promise.all([
|
|
2171
2171
|
import("@opentelemetry/sdk-trace-base"),
|
|
2172
2172
|
import("@opentelemetry/sdk-metrics"),
|
|
@@ -2181,7 +2181,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2181
2181
|
otlpMetrics: r,
|
|
2182
2182
|
nodeSdk: i
|
|
2183
2183
|
};
|
|
2184
|
-
},
|
|
2184
|
+
}, Yr = (e, t, n) => {
|
|
2185
2185
|
let { PeriodicExportingMetricReader: r, ConsoleMetricExporter: i, InMemoryMetricExporter: a, AggregationTemporality: o } = e.sdkMetrics;
|
|
2186
2186
|
if (t === "off") return {
|
|
2187
2187
|
reader: void 0,
|
|
@@ -2204,8 +2204,8 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2204
2204
|
}),
|
|
2205
2205
|
inMemory: void 0
|
|
2206
2206
|
};
|
|
2207
|
-
},
|
|
2208
|
-
let t = e.mode ??
|
|
2207
|
+
}, Xr = async (e = {}) => {
|
|
2208
|
+
let t = e.mode ?? Kr(), n = e.metricsMode ?? qr(), r = e.extraSpanProcessors ?? [], i = e.extraMetricReaders ?? [];
|
|
2209
2209
|
if (t === "off" && e.traceSink === void 0 && n === "off" && r.length === 0 && i.length === 0) return {
|
|
2210
2210
|
layer: P.empty,
|
|
2211
2211
|
mode: t,
|
|
@@ -2214,13 +2214,13 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2214
2214
|
metricsMode: n,
|
|
2215
2215
|
inMemoryMetricExporter: void 0
|
|
2216
2216
|
};
|
|
2217
|
-
let a = await
|
|
2217
|
+
let a = await Jr(), { 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;
|
|
2218
2218
|
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());
|
|
2219
2219
|
let m = [
|
|
2220
2220
|
...e.traceSink ? [e.traceSink] : [],
|
|
2221
2221
|
...p ? [p] : [],
|
|
2222
2222
|
...r
|
|
2223
|
-
], h = m.length === 1 ? m[0] : m, { reader: g, inMemory: _ } =
|
|
2223
|
+
], h = m.length === 1 ? m[0] : m, { reader: g, inMemory: _ } = Yr(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 = {
|
|
2224
2224
|
serviceName: d,
|
|
2225
2225
|
...e.serviceVersion ? { serviceVersion: e.serviceVersion } : {},
|
|
2226
2226
|
...e.resourceAttributes ? { attributes: e.resourceAttributes } : {}
|
|
@@ -2238,18 +2238,18 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2238
2238
|
metricsMode: n,
|
|
2239
2239
|
inMemoryMetricExporter: _
|
|
2240
2240
|
};
|
|
2241
|
-
},
|
|
2242
|
-
[
|
|
2243
|
-
[
|
|
2244
|
-
[
|
|
2245
|
-
[
|
|
2246
|
-
[
|
|
2247
|
-
},
|
|
2241
|
+
}, Zr = {
|
|
2242
|
+
[ht.INTERNAL]: "internal",
|
|
2243
|
+
[ht.SERVER]: "server",
|
|
2244
|
+
[ht.CLIENT]: "client",
|
|
2245
|
+
[ht.PRODUCER]: "producer",
|
|
2246
|
+
[ht.CONSUMER]: "consumer"
|
|
2247
|
+
}, Qr = (e) => e[0] * 1e3 + e[1] / 1e6, $r = 512, ei = 48, ti = (e) => {
|
|
2248
2248
|
let t = {}, n = 0;
|
|
2249
2249
|
for (let r in e) {
|
|
2250
|
-
if (n >=
|
|
2250
|
+
if (n >= ei) break;
|
|
2251
2251
|
let i = e[r];
|
|
2252
|
-
if (typeof i == "string") t[r] = i.length >
|
|
2252
|
+
if (typeof i == "string") t[r] = i.length > $r ? `${i.slice(0, $r)}…` : i;
|
|
2253
2253
|
else if (typeof i == "number" || typeof i == "boolean" || i == null) t[r] = i;
|
|
2254
2254
|
else {
|
|
2255
2255
|
let e;
|
|
@@ -2258,49 +2258,49 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2258
2258
|
} catch {
|
|
2259
2259
|
e = String(i);
|
|
2260
2260
|
}
|
|
2261
|
-
t[r] = e.length >
|
|
2261
|
+
t[r] = e.length > $r ? `${e.slice(0, $r)}…` : e;
|
|
2262
2262
|
}
|
|
2263
2263
|
n++;
|
|
2264
2264
|
}
|
|
2265
2265
|
return t;
|
|
2266
|
-
},
|
|
2267
|
-
[
|
|
2268
|
-
[
|
|
2269
|
-
[
|
|
2270
|
-
},
|
|
2266
|
+
}, ni = {
|
|
2267
|
+
[gt.UNSET]: "unset",
|
|
2268
|
+
[gt.OK]: "ok",
|
|
2269
|
+
[gt.ERROR]: "error"
|
|
2270
|
+
}, ri = (e) => {
|
|
2271
2271
|
let t = e.spanContext(), n = e.events.length > 0 ? e.events.slice(0, 16).map((e) => ({
|
|
2272
2272
|
name: e.name,
|
|
2273
|
-
tsMs:
|
|
2274
|
-
...e.attributes ? { attributes:
|
|
2273
|
+
tsMs: Qr(e.time),
|
|
2274
|
+
...e.attributes ? { attributes: ti(e.attributes) } : {}
|
|
2275
2275
|
})) : void 0;
|
|
2276
2276
|
return {
|
|
2277
2277
|
traceId: t.traceId,
|
|
2278
2278
|
spanId: t.spanId,
|
|
2279
2279
|
parentSpanId: e.parentSpanContext?.spanId ?? null,
|
|
2280
2280
|
name: e.name,
|
|
2281
|
-
kind:
|
|
2282
|
-
attributes:
|
|
2283
|
-
startMs:
|
|
2284
|
-
endMs:
|
|
2285
|
-
durationMs:
|
|
2286
|
-
status:
|
|
2281
|
+
kind: Zr[e.kind] ?? "internal",
|
|
2282
|
+
attributes: ti(e.attributes),
|
|
2283
|
+
startMs: Qr(e.startTime),
|
|
2284
|
+
endMs: Qr(e.endTime),
|
|
2285
|
+
durationMs: Qr(e.duration),
|
|
2286
|
+
status: ni[e.status.code] ?? "unset",
|
|
2287
2287
|
...e.status.message ? { statusMessage: e.status.message } : {},
|
|
2288
2288
|
...n ? { events: n } : {}
|
|
2289
2289
|
};
|
|
2290
|
-
},
|
|
2290
|
+
}, ii = (e) => ({
|
|
2291
2291
|
onStart: () => {},
|
|
2292
2292
|
onEnd: (t) => {
|
|
2293
2293
|
try {
|
|
2294
|
-
e(
|
|
2294
|
+
e(ri(t));
|
|
2295
2295
|
} catch {}
|
|
2296
2296
|
},
|
|
2297
2297
|
forceFlush: () => Promise.resolve(),
|
|
2298
2298
|
shutdown: () => Promise.resolve()
|
|
2299
|
-
}),
|
|
2300
|
-
|
|
2301
|
-
},
|
|
2302
|
-
|
|
2303
|
-
},
|
|
2299
|
+
}), ai = { get: (e) => Promise.resolve(process.env[e]) }, oi = ai, si = (e) => {
|
|
2300
|
+
oi = e;
|
|
2301
|
+
}, ci = () => {
|
|
2302
|
+
oi = ai;
|
|
2303
|
+
}, li = async (e) => await oi.get(e) ?? process.env[e], ui = (e) => process.env[e], di = (e, t = 6e4, n = () => Date.now()) => {
|
|
2304
2304
|
let r = /* @__PURE__ */ new Map();
|
|
2305
2305
|
return { get: async (i) => {
|
|
2306
2306
|
let a = r.get(i);
|
|
@@ -2311,12 +2311,12 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2311
2311
|
at: n()
|
|
2312
2312
|
}), o;
|
|
2313
2313
|
} };
|
|
2314
|
-
},
|
|
2314
|
+
}, fi = (e) => {
|
|
2315
2315
|
let t = {
|
|
2316
2316
|
accept: "application/json",
|
|
2317
2317
|
...e.headers ?? {}
|
|
2318
2318
|
};
|
|
2319
|
-
if (e.perKey) return
|
|
2319
|
+
if (e.perKey) return di({ get: async (n) => {
|
|
2320
2320
|
let r = await fetch(`${e.url.replace(/\/$/, "")}/${encodeURIComponent(n)}`, { headers: t });
|
|
2321
2321
|
if (!r.ok) return;
|
|
2322
2322
|
let i = await r.json();
|
|
@@ -2327,59 +2327,59 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2327
2327
|
let t = (await a())[e];
|
|
2328
2328
|
return typeof t == "string" ? t : void 0;
|
|
2329
2329
|
} };
|
|
2330
|
-
},
|
|
2330
|
+
}, pi = (e) => e === void 0 || e === "env" || typeof e == "object" && e.kind === "env" ? ai : e.kind === "custom" ? e.backend : e.kind === "http" ? fi(e) : ai, mi = (e) => /^[0-9a-f]{64}$/i.test(e) ? Buffer.from(e, "hex") : ve(e, "voltro:field-encryption:v1", 32), hi = (t) => {
|
|
2331
2331
|
if (t.length !== 32) throw Error(`field cipher key must be 32 bytes, got ${t.length}`);
|
|
2332
2332
|
return {
|
|
2333
2333
|
encrypt: (n) => {
|
|
2334
|
-
let r =
|
|
2334
|
+
let r = ge(12), i = pe("aes-256-gcm", t, r), a = Buffer.concat([i.update(n, "utf8"), i.final()]), o = i.getAuthTag();
|
|
2335
2335
|
return `${e}${r.toString("base64")}:${o.toString("base64")}:${a.toString("base64")}`;
|
|
2336
2336
|
},
|
|
2337
2337
|
decrypt: (n) => {
|
|
2338
2338
|
let [r, i, a] = n.slice(e.length).split(":");
|
|
2339
2339
|
if (!r || !i || a === void 0) throw Error("field cipher: malformed ciphertext");
|
|
2340
|
-
let o =
|
|
2340
|
+
let o = me("aes-256-gcm", t, Buffer.from(r, "base64"));
|
|
2341
2341
|
return o.setAuthTag(Buffer.from(i, "base64")), Buffer.concat([o.update(Buffer.from(a, "base64")), o.final()]).toString("utf8");
|
|
2342
2342
|
}
|
|
2343
2343
|
};
|
|
2344
|
-
},
|
|
2345
|
-
|
|
2346
|
-
},
|
|
2347
|
-
let t =
|
|
2348
|
-
if (!t) throw Error(`encryptField: ${
|
|
2344
|
+
}, gi = (e) => hi(mi(e)), _i, vi = (e) => {
|
|
2345
|
+
_i = e;
|
|
2346
|
+
}, yi = () => _i, bi = "no field cipher registered — enable `@voltro/plugin-governance` `governancePlugin({ fieldEncryption: { key } })` (or call setFieldCipher) so a key is available.", K = (e) => {
|
|
2347
|
+
let t = yi();
|
|
2348
|
+
if (!t) throw Error(`encryptField: ${bi}`);
|
|
2349
2349
|
return t.encrypt(e);
|
|
2350
|
-
},
|
|
2350
|
+
}, xi = (e) => {
|
|
2351
2351
|
if (!x(e)) return e;
|
|
2352
|
-
let t =
|
|
2353
|
-
if (!t) throw Error(`decryptField: ${
|
|
2352
|
+
let t = yi();
|
|
2353
|
+
if (!t) throw Error(`decryptField: ${bi}`);
|
|
2354
2354
|
return t.decrypt(e);
|
|
2355
|
-
},
|
|
2355
|
+
}, Si = "_voltro_idempotency", Ci = (e) => {
|
|
2356
2356
|
if (e == null) return null;
|
|
2357
2357
|
let t = typeof e == "string" ? JSON.parse(e) : e;
|
|
2358
2358
|
return t && typeof t == "object" && "status" in t ? t : null;
|
|
2359
|
-
},
|
|
2359
|
+
}, wi = (e) => ({
|
|
2360
2360
|
scope: e.scope,
|
|
2361
2361
|
key: e.key,
|
|
2362
2362
|
status: e.status === "completed" ? "completed" : "in_flight",
|
|
2363
|
-
response:
|
|
2364
|
-
createdAt:
|
|
2365
|
-
}),
|
|
2366
|
-
table:
|
|
2363
|
+
response: Ci(e.response),
|
|
2364
|
+
createdAt: ze(e.createdAt)
|
|
2365
|
+
}), Ti = async (e, n, r) => (await e.query({
|
|
2366
|
+
table: Si,
|
|
2367
2367
|
predicate: t(u("scope", n), u("key", r)),
|
|
2368
2368
|
order: [],
|
|
2369
2369
|
take: 1,
|
|
2370
2370
|
skip: void 0,
|
|
2371
2371
|
projection: void 0
|
|
2372
|
-
}))[0] ?? null,
|
|
2372
|
+
}))[0] ?? null, Ei = (e) => ({
|
|
2373
2373
|
get: async (t, n) => {
|
|
2374
|
-
let r = await
|
|
2375
|
-
return r ?
|
|
2374
|
+
let r = await Ti(e, t, n);
|
|
2375
|
+
return r ? wi(r) : null;
|
|
2376
2376
|
},
|
|
2377
2377
|
claim: async (t, n, r, i) => {
|
|
2378
2378
|
for (let a = 0; a < 2; a++) {
|
|
2379
2379
|
let a = f({
|
|
2380
2380
|
kind: "typeid",
|
|
2381
2381
|
prefix: "idem"
|
|
2382
|
-
},
|
|
2382
|
+
}, Si), o = await e.insertIgnore(Si, {
|
|
2383
2383
|
id: a,
|
|
2384
2384
|
scope: t,
|
|
2385
2385
|
key: n,
|
|
@@ -2388,11 +2388,11 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2388
2388
|
createdAt: new Date(r)
|
|
2389
2389
|
}, { conflictColumns: ["scope", "key"] });
|
|
2390
2390
|
if (o.id === a) return "claimed";
|
|
2391
|
-
if (r -
|
|
2392
|
-
await e.delete(
|
|
2391
|
+
if (r - ze(o.createdAt) < i) return wi(o);
|
|
2392
|
+
await e.delete(Si, o.id);
|
|
2393
2393
|
}
|
|
2394
|
-
let a = await
|
|
2395
|
-
return a ?
|
|
2394
|
+
let a = await Ti(e, t, n);
|
|
2395
|
+
return a ? wi(a) : {
|
|
2396
2396
|
scope: t,
|
|
2397
2397
|
key: n,
|
|
2398
2398
|
status: "in_flight",
|
|
@@ -2401,36 +2401,36 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2401
2401
|
};
|
|
2402
2402
|
},
|
|
2403
2403
|
complete: async (t, n, r, i) => {
|
|
2404
|
-
let a = await
|
|
2405
|
-
a && await e.update(
|
|
2404
|
+
let a = await Ti(e, t, n);
|
|
2405
|
+
a && await e.update(Si, a.id, {
|
|
2406
2406
|
status: "completed",
|
|
2407
2407
|
response: r
|
|
2408
2408
|
});
|
|
2409
2409
|
},
|
|
2410
2410
|
release: async (t, n) => {
|
|
2411
|
-
let r = await
|
|
2412
|
-
r && await e.delete(
|
|
2411
|
+
let r = await Ti(e, t, n);
|
|
2412
|
+
r && await e.delete(Si, r.id);
|
|
2413
2413
|
}
|
|
2414
|
-
}),
|
|
2414
|
+
}), q = "_voltro_kv", Di = (e) => {
|
|
2415
2415
|
if (e == null) return null;
|
|
2416
2416
|
if (e instanceof Date) return e.getTime();
|
|
2417
2417
|
if (typeof e == "number") return e;
|
|
2418
2418
|
let t = Date.parse(String(e));
|
|
2419
2419
|
return Number.isNaN(t) ? null : t;
|
|
2420
|
-
},
|
|
2421
|
-
let n =
|
|
2420
|
+
}, Oi = (e, t) => {
|
|
2421
|
+
let n = Di(e.expiresAt);
|
|
2422
2422
|
return n !== null && n <= t;
|
|
2423
|
-
},
|
|
2424
|
-
table:
|
|
2423
|
+
}, ki = (e) => e === null ? null : JSON.parse(e), Ai = async (e, t) => (await e.query({
|
|
2424
|
+
table: q,
|
|
2425
2425
|
predicate: u("key", t),
|
|
2426
2426
|
order: [],
|
|
2427
2427
|
take: 1,
|
|
2428
2428
|
skip: void 0,
|
|
2429
2429
|
projection: void 0
|
|
2430
|
-
}))[0] ?? null,
|
|
2430
|
+
}))[0] ?? null, ji = (e) => {
|
|
2431
2431
|
let n = (e, t, n) => N.tryPromise({
|
|
2432
2432
|
try: n,
|
|
2433
|
-
catch: (n) => new
|
|
2433
|
+
catch: (n) => new vt({
|
|
2434
2434
|
operation: e,
|
|
2435
2435
|
key: t,
|
|
2436
2436
|
cause: String(n)
|
|
@@ -2438,15 +2438,15 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2438
2438
|
});
|
|
2439
2439
|
return {
|
|
2440
2440
|
get: (t) => n("get", t, async () => {
|
|
2441
|
-
let n = await
|
|
2442
|
-
return n === null ?
|
|
2441
|
+
let n = await Ai(e, t);
|
|
2442
|
+
return n === null ? Xe.none() : Oi(n, Date.now()) ? (await e.delete(q, n.id), Xe.none()) : Xe.some(ki(n.value));
|
|
2443
2443
|
}),
|
|
2444
2444
|
set: (t, r, i) => n("set", t, async () => {
|
|
2445
2445
|
let n = Date.now(), a = i?.ttlMs !== void 0 && i.ttlMs > 0 ? new Date(n + i.ttlMs) : null, o = f({
|
|
2446
2446
|
kind: "typeid",
|
|
2447
2447
|
prefix: "kv"
|
|
2448
|
-
},
|
|
2449
|
-
await e.upsert(
|
|
2448
|
+
}, q);
|
|
2449
|
+
await e.upsert(q, {
|
|
2450
2450
|
id: o,
|
|
2451
2451
|
key: t,
|
|
2452
2452
|
value: JSON.stringify(r),
|
|
@@ -2462,39 +2462,39 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2462
2462
|
});
|
|
2463
2463
|
}),
|
|
2464
2464
|
delete: (t) => n("delete", t, async () => {
|
|
2465
|
-
let n = await
|
|
2465
|
+
let n = await Ai(e, t);
|
|
2466
2466
|
if (n === null) return !1;
|
|
2467
|
-
let r = !
|
|
2468
|
-
return await e.delete(
|
|
2467
|
+
let r = !Oi(n, Date.now());
|
|
2468
|
+
return await e.delete(q, n.id), r;
|
|
2469
2469
|
}),
|
|
2470
2470
|
has: (t) => n("has", t, async () => {
|
|
2471
|
-
let n = await
|
|
2472
|
-
return n === null ? !1 :
|
|
2471
|
+
let n = await Ai(e, t);
|
|
2472
|
+
return n === null ? !1 : Oi(n, Date.now()) ? (await e.delete(q, n.id), !1) : !0;
|
|
2473
2473
|
}),
|
|
2474
2474
|
list: (r) => n("list", "", async () => {
|
|
2475
|
-
let n = Date.now(), i =
|
|
2476
|
-
table:
|
|
2475
|
+
let n = Date.now(), i = E(S("expiresAt"), h("expiresAt", new Date(n))), a = r === "" ? i : t(o("key", r), i), s = await e.query({
|
|
2476
|
+
table: q,
|
|
2477
2477
|
predicate: a,
|
|
2478
2478
|
order: [],
|
|
2479
2479
|
take: void 0,
|
|
2480
2480
|
skip: void 0,
|
|
2481
2481
|
projection: void 0
|
|
2482
2482
|
}), c = [];
|
|
2483
|
-
for (let e of s)
|
|
2483
|
+
for (let e of s) Oi(e, n) || (r === "" || e.key.startsWith(r)) && c.push(e.key);
|
|
2484
2484
|
return c;
|
|
2485
2485
|
}),
|
|
2486
2486
|
clear: () => n("clear", "", async () => {
|
|
2487
|
-
await e.deleteMany(
|
|
2487
|
+
await e.deleteMany(q, { where: {
|
|
2488
2488
|
column: "id",
|
|
2489
2489
|
op: "isNotNull"
|
|
2490
2490
|
} });
|
|
2491
2491
|
})
|
|
2492
2492
|
};
|
|
2493
|
-
},
|
|
2494
|
-
let n = (t.KV_BACKEND ?? "database").toLowerCase(), r = n === "redis" ? "redis" : n === "memory" ? "memory" : "database", i = r === "redis" ?
|
|
2493
|
+
}, Mi = async ({ store: e, env: t = process.env }) => {
|
|
2494
|
+
let n = (t.KV_BACKEND ?? "database").toLowerCase(), r = n === "redis" ? "redis" : n === "memory" ? "memory" : "database", i = r === "redis" ? St(t.KV_KEY_PREFIX ? { keyPrefix: t.KV_KEY_PREFIX } : {}).pipe(P.provide(bt)) : r === "memory" ? xt() : P.succeed(yt, yt.of(ji(e))), a = qe.make(_t.Default.pipe(P.provide(i))), o = await a.runPromise(_t);
|
|
2495
2495
|
return {
|
|
2496
2496
|
kv: {
|
|
2497
|
-
get: (e) => a.runPromise(o.get(e)).then((e) =>
|
|
2497
|
+
get: (e) => a.runPromise(o.get(e)).then((e) => Xe.getOrUndefined(e)),
|
|
2498
2498
|
getOrElse: (e, t) => a.runPromise(o.getOrElse(e, t)),
|
|
2499
2499
|
set: (e, t, n) => a.runPromise(o.set(e, t, n)),
|
|
2500
2500
|
delete: (e) => a.runPromise(o.delete(e)),
|
|
@@ -2506,7 +2506,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2506
2506
|
backend: r,
|
|
2507
2507
|
dispose: () => a.dispose()
|
|
2508
2508
|
};
|
|
2509
|
-
},
|
|
2509
|
+
}, Ni = {
|
|
2510
2510
|
get: () => Promise.resolve(void 0),
|
|
2511
2511
|
getOrElse: (e, t) => Promise.resolve(t()),
|
|
2512
2512
|
set: () => Promise.resolve(),
|
|
@@ -2514,7 +2514,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2514
2514
|
has: () => Promise.resolve(!1),
|
|
2515
2515
|
list: () => Promise.resolve([]),
|
|
2516
2516
|
clear: () => Promise.resolve()
|
|
2517
|
-
},
|
|
2517
|
+
}, Pi = "_voltro_api_keys", Fi = (e) => he("sha256").update(e, "utf8").digest("hex"), Ii = (e = "voltro_") => `${e}${ge(30).toString("base64url")}`, Li = (e) => ({
|
|
2518
2518
|
id: e.id,
|
|
2519
2519
|
name: e.name,
|
|
2520
2520
|
keyPrefix: e.keyPrefix,
|
|
@@ -2524,17 +2524,17 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2524
2524
|
expiresAt: e.expiresAt,
|
|
2525
2525
|
revokedAt: e.revokedAt,
|
|
2526
2526
|
createdAt: e.createdAt
|
|
2527
|
-
}),
|
|
2527
|
+
}), Ri = (e, t) => e.revokedAt === null && (e.expiresAt === null || e.expiresAt > t), zi = (e, t = {}) => {
|
|
2528
2528
|
let n = t.prefix ?? "voltro_", r = async (t) => {
|
|
2529
|
-
let r =
|
|
2529
|
+
let r = Ii(n), i = f({
|
|
2530
2530
|
kind: "typeid",
|
|
2531
2531
|
prefix: "apikey"
|
|
2532
|
-
},
|
|
2532
|
+
}, Pi), a = t.scopes ?? [], o = t.expiresAt == null ? null : t.expiresAt instanceof Date ? t.expiresAt.getTime() : t.expiresAt;
|
|
2533
2533
|
return await e.insert({
|
|
2534
2534
|
id: i,
|
|
2535
2535
|
tenantId: t.tenantId ?? null,
|
|
2536
2536
|
name: t.name,
|
|
2537
|
-
hashedKey:
|
|
2537
|
+
hashedKey: Fi(r),
|
|
2538
2538
|
keyPrefix: r.slice(0, n.length + 6),
|
|
2539
2539
|
scopes: a,
|
|
2540
2540
|
lastUsedAt: null,
|
|
@@ -2552,7 +2552,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2552
2552
|
};
|
|
2553
2553
|
}, i = async (t, n = Date.now()) => {
|
|
2554
2554
|
let r = await e.findByHash(t);
|
|
2555
|
-
return !r || !
|
|
2555
|
+
return !r || !Ri(r, n) ? null : (await e.patch(r.id, { lastUsedAt: n }), {
|
|
2556
2556
|
id: r.id,
|
|
2557
2557
|
tenantId: r.tenantId ?? "",
|
|
2558
2558
|
createdBy: r.createdBy ?? null,
|
|
@@ -2562,7 +2562,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2562
2562
|
return {
|
|
2563
2563
|
issue: r,
|
|
2564
2564
|
resolveByHash: i,
|
|
2565
|
-
verify: (e, t) => i(
|
|
2565
|
+
verify: (e, t) => i(Fi(e), t),
|
|
2566
2566
|
revoke: async (t, n = Date.now()) => await e.findById(t) ? (await e.patch(t, { revokedAt: n }), !0) : !1,
|
|
2567
2567
|
rotate: async (t, n = Date.now()) => {
|
|
2568
2568
|
let i = await e.findById(t);
|
|
@@ -2573,9 +2573,9 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2573
2573
|
createdBy: i.createdBy
|
|
2574
2574
|
})) : null;
|
|
2575
2575
|
},
|
|
2576
|
-
list: async (t) => (await e.listByTenant(t)).map(
|
|
2576
|
+
list: async (t) => (await e.listByTenant(t)).map(Li)
|
|
2577
2577
|
};
|
|
2578
|
-
},
|
|
2578
|
+
}, Bi = () => {
|
|
2579
2579
|
let e = /* @__PURE__ */ new Map();
|
|
2580
2580
|
return {
|
|
2581
2581
|
insert: async (t) => {
|
|
@@ -2592,21 +2592,21 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2592
2592
|
});
|
|
2593
2593
|
}
|
|
2594
2594
|
};
|
|
2595
|
-
},
|
|
2595
|
+
}, Vi = (e) => e == null ? null : e instanceof Date ? e.getTime() : typeof e == "number" ? e : typeof e == "string" ? new Date(e).getTime() : null, Hi = (e) => ({
|
|
2596
2596
|
id: String(e.id),
|
|
2597
2597
|
tenantId: e.tenantId ?? null,
|
|
2598
2598
|
name: String(e.name),
|
|
2599
2599
|
hashedKey: String(e.hashedKey),
|
|
2600
2600
|
keyPrefix: String(e.keyPrefix),
|
|
2601
2601
|
scopes: e.scopes ?? null,
|
|
2602
|
-
lastUsedAt:
|
|
2603
|
-
expiresAt:
|
|
2604
|
-
revokedAt:
|
|
2602
|
+
lastUsedAt: Vi(e.lastUsedAt),
|
|
2603
|
+
expiresAt: Vi(e.expiresAt),
|
|
2604
|
+
revokedAt: Vi(e.revokedAt),
|
|
2605
2605
|
createdBy: e.createdBy ?? null,
|
|
2606
|
-
createdAt:
|
|
2607
|
-
}),
|
|
2606
|
+
createdAt: Vi(e.createdAt) ?? 0
|
|
2607
|
+
}), Ui = (e) => {
|
|
2608
2608
|
let t = async (t) => await e.query({
|
|
2609
|
-
table:
|
|
2609
|
+
table: Pi,
|
|
2610
2610
|
predicate: t,
|
|
2611
2611
|
order: [],
|
|
2612
2612
|
take: void 0,
|
|
@@ -2624,61 +2624,61 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2624
2624
|
};
|
|
2625
2625
|
return {
|
|
2626
2626
|
insert: async (t) => {
|
|
2627
|
-
await e.insert(
|
|
2627
|
+
await e.insert(Pi, n(t));
|
|
2628
2628
|
},
|
|
2629
2629
|
findByHash: async (e) => {
|
|
2630
2630
|
let n = await t(u("hashedKey", e));
|
|
2631
|
-
return n[0] ?
|
|
2631
|
+
return n[0] ? Hi(n[0]) : null;
|
|
2632
2632
|
},
|
|
2633
2633
|
findById: async (e) => {
|
|
2634
2634
|
let n = await t(u("id", e));
|
|
2635
|
-
return n[0] ?
|
|
2635
|
+
return n[0] ? Hi(n[0]) : null;
|
|
2636
2636
|
},
|
|
2637
|
-
listByTenant: async (e) => (await t(e === null ? void 0 : u("tenantId", e))).map(
|
|
2637
|
+
listByTenant: async (e) => (await t(e === null ? void 0 : u("tenantId", e))).map(Hi).filter((t) => e === null || t.tenantId === e),
|
|
2638
2638
|
patch: async (t, r) => {
|
|
2639
|
-
await e.update(
|
|
2639
|
+
await e.update(Pi, t, n(r));
|
|
2640
2640
|
}
|
|
2641
2641
|
};
|
|
2642
|
-
},
|
|
2642
|
+
}, Wi = (e, t = {}) => Ct({
|
|
2643
2643
|
id: "voltro-apikey",
|
|
2644
2644
|
...t.prefix ? { prefix: t.prefix } : {},
|
|
2645
2645
|
resolveKey: (t) => e.resolveByHash(t)
|
|
2646
|
-
}),
|
|
2646
|
+
}), Gi = (e) => {
|
|
2647
2647
|
let t = e.subject;
|
|
2648
2648
|
return {
|
|
2649
2649
|
id: t.id ?? null,
|
|
2650
2650
|
tenantId: t.tenantId ?? null
|
|
2651
2651
|
};
|
|
2652
|
-
},
|
|
2653
|
-
let n =
|
|
2654
|
-
id:
|
|
2655
|
-
name:
|
|
2656
|
-
keyPrefix:
|
|
2657
|
-
tenantId:
|
|
2658
|
-
scopes:
|
|
2659
|
-
lastUsedAt:
|
|
2660
|
-
expiresAt:
|
|
2661
|
-
revokedAt:
|
|
2662
|
-
createdAt:
|
|
2652
|
+
}, Ki = (e, t = "/v1/api-keys") => {
|
|
2653
|
+
let n = L.Struct({
|
|
2654
|
+
id: L.String,
|
|
2655
|
+
name: L.String,
|
|
2656
|
+
keyPrefix: L.String,
|
|
2657
|
+
tenantId: L.NullOr(L.String),
|
|
2658
|
+
scopes: L.Array(L.String),
|
|
2659
|
+
lastUsedAt: L.NullOr(L.Number),
|
|
2660
|
+
expiresAt: L.NullOr(L.Number),
|
|
2661
|
+
revokedAt: L.NullOr(L.Number),
|
|
2662
|
+
createdAt: L.Number
|
|
2663
2663
|
});
|
|
2664
2664
|
return [
|
|
2665
|
-
|
|
2665
|
+
dt({
|
|
2666
2666
|
method: "POST",
|
|
2667
2667
|
path: `${t}/issue`,
|
|
2668
2668
|
summary: "Issue an API key (the token is returned ONCE).",
|
|
2669
|
-
guards: [
|
|
2670
|
-
input:
|
|
2671
|
-
name:
|
|
2672
|
-
scopes:
|
|
2673
|
-
expiresInDays:
|
|
2669
|
+
guards: [pt(be)],
|
|
2670
|
+
input: L.Struct({ body: L.Struct({
|
|
2671
|
+
name: L.String,
|
|
2672
|
+
scopes: L.optional(L.Array(L.String)),
|
|
2673
|
+
expiresInDays: L.optional(L.Number)
|
|
2674
2674
|
}) }),
|
|
2675
|
-
output:
|
|
2676
|
-
id:
|
|
2677
|
-
token:
|
|
2678
|
-
keyPrefix:
|
|
2675
|
+
output: L.Struct({
|
|
2676
|
+
id: L.String,
|
|
2677
|
+
token: L.String,
|
|
2678
|
+
keyPrefix: L.String
|
|
2679
2679
|
}),
|
|
2680
2680
|
handler: async (t, n) => {
|
|
2681
|
-
let r = t.body, i =
|
|
2681
|
+
let r = t.body, i = Gi(n), a = await e.issue({
|
|
2682
2682
|
tenantId: i.tenantId,
|
|
2683
2683
|
name: r.name,
|
|
2684
2684
|
...r.scopes ? { scopes: r.scopes } : {},
|
|
@@ -2692,72 +2692,72 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2692
2692
|
};
|
|
2693
2693
|
}
|
|
2694
2694
|
}),
|
|
2695
|
-
|
|
2695
|
+
dt({
|
|
2696
2696
|
method: "GET",
|
|
2697
2697
|
path: t,
|
|
2698
2698
|
summary: "List the caller tenant's API keys (no secrets).",
|
|
2699
|
-
guards: [
|
|
2700
|
-
input:
|
|
2701
|
-
output:
|
|
2702
|
-
handler: async (t, n) => ({ keys: [...await e.list(
|
|
2699
|
+
guards: [pt(be)],
|
|
2700
|
+
input: L.Struct({}),
|
|
2701
|
+
output: L.Struct({ keys: L.Array(n) }),
|
|
2702
|
+
handler: async (t, n) => ({ keys: [...await e.list(Gi(n).tenantId)] })
|
|
2703
2703
|
}),
|
|
2704
|
-
|
|
2704
|
+
dt({
|
|
2705
2705
|
method: "POST",
|
|
2706
2706
|
path: `${t}/revoke`,
|
|
2707
2707
|
summary: "Revoke an API key by id.",
|
|
2708
|
-
guards: [
|
|
2709
|
-
input:
|
|
2710
|
-
output:
|
|
2708
|
+
guards: [pt(be)],
|
|
2709
|
+
input: L.Struct({ body: L.Struct({ id: L.String }) }),
|
|
2710
|
+
output: L.Struct({ ok: L.Boolean }),
|
|
2711
2711
|
handler: async (t, n) => ({ ok: await e.revoke(t.body.id) })
|
|
2712
2712
|
})
|
|
2713
2713
|
];
|
|
2714
|
-
},
|
|
2714
|
+
}, qi = {
|
|
2715
2715
|
type: "anonymous",
|
|
2716
2716
|
id: null,
|
|
2717
2717
|
tenantId: null
|
|
2718
|
-
},
|
|
2719
|
-
table:
|
|
2720
|
-
reason:
|
|
2721
|
-
}) {},
|
|
2722
|
-
operation:
|
|
2723
|
-
table:
|
|
2724
|
-
cause:
|
|
2725
|
-
}) {},
|
|
2726
|
-
table:
|
|
2727
|
-
summary:
|
|
2728
|
-
issues:
|
|
2729
|
-
path:
|
|
2730
|
-
message:
|
|
2718
|
+
}, Ji = class extends L.TaggedError()("TenantScopeViolation", {
|
|
2719
|
+
table: L.String,
|
|
2720
|
+
reason: L.String
|
|
2721
|
+
}) {}, Yi = class extends L.TaggedError()("StoreOperationFailed", {
|
|
2722
|
+
operation: L.String,
|
|
2723
|
+
table: L.String,
|
|
2724
|
+
cause: L.String
|
|
2725
|
+
}) {}, Xi = class extends L.TaggedError()("TableValidationFailed", {
|
|
2726
|
+
table: L.String,
|
|
2727
|
+
summary: L.String,
|
|
2728
|
+
issues: L.Array(L.Struct({
|
|
2729
|
+
path: L.String,
|
|
2730
|
+
message: L.String
|
|
2731
2731
|
}))
|
|
2732
|
-
}) {},
|
|
2732
|
+
}) {}, Zi = class extends Ve.Tag("@voltro/EffectStore")() {}, Qi = (e, t) => (n) => n instanceof Ji ? n : new Yi({
|
|
2733
2733
|
operation: e,
|
|
2734
2734
|
table: t,
|
|
2735
2735
|
cause: String(n)
|
|
2736
|
-
}),
|
|
2736
|
+
}), $i = (e, t, n) => N.tryPromise({
|
|
2737
2737
|
try: n,
|
|
2738
|
-
catch:
|
|
2739
|
-
}),
|
|
2740
|
-
query: ((t) =>
|
|
2741
|
-
insert: (t, n) =>
|
|
2742
|
-
update: (t, n, r) =>
|
|
2743
|
-
delete: (t, n) =>
|
|
2744
|
-
hardDelete: (t, n) =>
|
|
2745
|
-
}),
|
|
2738
|
+
catch: Qi(e, t)
|
|
2739
|
+
}), ea = (e) => P.succeed(Zi, {
|
|
2740
|
+
query: ((t) => $i("query", t.table, () => e.query(t))),
|
|
2741
|
+
insert: (t, n) => $i("insert", t, () => e.insert(t, n)),
|
|
2742
|
+
update: (t, n, r) => $i("update", t, () => e.update(t, n, r)),
|
|
2743
|
+
delete: (t, n) => $i("delete", t, () => e.delete(t, n)),
|
|
2744
|
+
hardDelete: (t, n) => $i("hardDelete", t, () => e.hardDelete(t, n))
|
|
2745
|
+
}), ta = (e) => ct.make(e.name, {
|
|
2746
2746
|
payload: e.payloadSchema,
|
|
2747
|
-
success:
|
|
2747
|
+
success: ke,
|
|
2748
2748
|
error: e.errorSchema
|
|
2749
|
-
}),
|
|
2749
|
+
}), na = (e, t) => ({
|
|
2750
2750
|
id: t,
|
|
2751
2751
|
workflowName: e,
|
|
2752
2752
|
executionId: t,
|
|
2753
2753
|
status: "running"
|
|
2754
|
-
}),
|
|
2755
|
-
let t =
|
|
2754
|
+
}), ra = na, ia = (e) => {
|
|
2755
|
+
let t = M.failureOption(e), n = t._tag === "Some" ? t.value : M.squash(e);
|
|
2756
2756
|
return {
|
|
2757
2757
|
tag: n && typeof n == "object" && "_tag" in n ? String(n._tag) : null,
|
|
2758
2758
|
message: n?.message ?? String(n)
|
|
2759
2759
|
};
|
|
2760
|
-
},
|
|
2760
|
+
}, aa = (e, t, n) => {
|
|
2761
2761
|
if (n === void 0) return {
|
|
2762
2762
|
id: t,
|
|
2763
2763
|
workflowName: e,
|
|
@@ -2783,7 +2783,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2783
2783
|
workflowName: e,
|
|
2784
2784
|
executionId: t,
|
|
2785
2785
|
status: "failed",
|
|
2786
|
-
error:
|
|
2786
|
+
error: ia(r.cause)
|
|
2787
2787
|
};
|
|
2788
2788
|
}
|
|
2789
2789
|
return {
|
|
@@ -2792,17 +2792,17 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2792
2792
|
executionId: t,
|
|
2793
2793
|
status: "running"
|
|
2794
2794
|
};
|
|
2795
|
-
},
|
|
2795
|
+
}, oa = (e) => new Promise((t) => setTimeout(t, e)), sa = (e) => {
|
|
2796
2796
|
let t = new Map(e.workflows.map((e) => [e.definition.name, e.definition])), n = (e) => {
|
|
2797
2797
|
let n = t.get(e);
|
|
2798
2798
|
if (!n) throw Error(`Unknown workflow: ${e}`);
|
|
2799
2799
|
return n;
|
|
2800
2800
|
}, r = async (t, r) => {
|
|
2801
2801
|
let i = n(t);
|
|
2802
|
-
return
|
|
2803
|
-
}, i = async () => e.runEffect(
|
|
2802
|
+
return aa(t, r, await e.runEffect(i.poll(r)));
|
|
2803
|
+
}, i = async () => e.runEffect(wt()), a = async (t, r, i) => {
|
|
2804
2804
|
let a = n(t), o;
|
|
2805
|
-
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)),
|
|
2805
|
+
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)), na(t, o ?? await e.runEffect(a.executionId(r)))) : na(t, await e.runEffect(a.execute(r, { discard: !0 })));
|
|
2806
2806
|
};
|
|
2807
2807
|
return {
|
|
2808
2808
|
start: a,
|
|
@@ -2840,7 +2840,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2840
2840
|
let e = await r(i, a);
|
|
2841
2841
|
if (e.status === "succeeded" || e.status === "failed" || e.status === "cancelled") return e;
|
|
2842
2842
|
if (o?.timeoutMs !== void 0 && Date.now() - s >= o.timeoutMs) throw Error(`Timed out waiting for workflow '${i}' run '${a}'`);
|
|
2843
|
-
await
|
|
2843
|
+
await oa(c);
|
|
2844
2844
|
}
|
|
2845
2845
|
}),
|
|
2846
2846
|
cancel: async (t, r) => {
|
|
@@ -2878,22 +2878,22 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2878
2878
|
return e.retry(t, n);
|
|
2879
2879
|
}
|
|
2880
2880
|
};
|
|
2881
|
-
},
|
|
2881
|
+
}, ca = (e, t) => ({
|
|
2882
2882
|
...e,
|
|
2883
2883
|
start: async (n, r, i) => {
|
|
2884
2884
|
if (i?.wait) throw Error("ctx.workflows.start(..., { wait: true }) is not allowed inside a mutation transaction; start the workflow and wait after commit.");
|
|
2885
2885
|
let a = await e.executionId(n, r);
|
|
2886
|
-
return t(() => e.start(n, r)),
|
|
2886
|
+
return t(() => e.start(n, r)), na(n, a);
|
|
2887
2887
|
},
|
|
2888
2888
|
child: async (n, r, i) => {
|
|
2889
2889
|
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.");
|
|
2890
2890
|
let a = await e.executionId(n, r);
|
|
2891
|
-
return t(() => e.child(n, r, i)),
|
|
2891
|
+
return t(() => e.child(n, r, i)), na(n, a);
|
|
2892
2892
|
},
|
|
2893
2893
|
run: async () => {
|
|
2894
2894
|
throw Error("ctx.workflows.run(...) is not allowed inside a mutation transaction; use ctx.workflows.start(...) so the workflow starts after commit.");
|
|
2895
2895
|
}
|
|
2896
|
-
}),
|
|
2896
|
+
}), la = (e, t) => ({
|
|
2897
2897
|
...e,
|
|
2898
2898
|
start: (n, r, i) => e.start(n, r, {
|
|
2899
2899
|
...i,
|
|
@@ -2907,7 +2907,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2907
2907
|
...i,
|
|
2908
2908
|
callerContext: t
|
|
2909
2909
|
})
|
|
2910
|
-
}),
|
|
2910
|
+
}), ua = (e) => {
|
|
2911
2911
|
let t = () => {
|
|
2912
2912
|
let t = e();
|
|
2913
2913
|
if (!t) throw Error("Workflow runtime is not ready yet");
|
|
@@ -2928,16 +2928,16 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2928
2928
|
listRuns: ((e) => t().listRuns(e)),
|
|
2929
2929
|
retry: (e, n) => t().retry(e, n)
|
|
2930
2930
|
};
|
|
2931
|
-
},
|
|
2931
|
+
}, da = (e, t) => {
|
|
2932
2932
|
let n = {};
|
|
2933
|
-
for (let r of e) n[r.definition.name] = (e) => (t ? N.promise(() => t.start(r.definition.name, e)) : r.definition.execute(e, { discard: !0 }).pipe(N.map((e) =>
|
|
2933
|
+
for (let r of e) n[r.definition.name] = (e) => (t ? N.promise(() => t.start(r.definition.name, e)) : r.definition.execute(e, { discard: !0 }).pipe(N.map((e) => na(r.definition.name, e)))).pipe(N.withSpan(`workflow.${r.definition.name}`, { attributes: { "framework.kind": "workflow" } }));
|
|
2934
2934
|
return n;
|
|
2935
|
-
},
|
|
2935
|
+
}, fa = (e, t, n) => e.map((e) => e.definition.toLayer(((r, i) => {
|
|
2936
2936
|
let a = t.resolveStartContext?.(e.definition.name, i);
|
|
2937
2937
|
return (a === void 0 ? N.succeed(void 0) : N.promise(() => Promise.resolve(a))).pipe(N.flatMap((a) => {
|
|
2938
2938
|
let o = {
|
|
2939
2939
|
...a,
|
|
2940
|
-
subject: a?.subject ??
|
|
2940
|
+
subject: a?.subject ?? qi,
|
|
2941
2941
|
traceId: a?.traceId ?? "workflow-bootstrap"
|
|
2942
2942
|
}, s = t.buildContext(o, {
|
|
2943
2943
|
workflowName: e.definition.name,
|
|
@@ -2945,42 +2945,42 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
2945
2945
|
parentExecutionId: a?.parentExecutionId ?? null,
|
|
2946
2946
|
parentClosePolicy: a?.parentClosePolicy ?? null
|
|
2947
2947
|
}), c = e.buildExecute(s), l = (n?.(e, c, o) ?? c)(r, i), u = s?.store;
|
|
2948
|
-
return u === void 0 ? l : N.provide(l,
|
|
2948
|
+
return u === void 0 ? l : N.provide(l, ea(u));
|
|
2949
2949
|
}));
|
|
2950
|
-
}))),
|
|
2950
|
+
}))), pa = (e) => ({
|
|
2951
2951
|
_tag: "workflowEventTrigger",
|
|
2952
2952
|
...e
|
|
2953
|
-
}),
|
|
2953
|
+
}), ma = pa, ha = (e) => typeof e == "object" && !!e && e._tag === "workflowEventTrigger", ga = () => {
|
|
2954
2954
|
let e = globalThis.crypto;
|
|
2955
2955
|
return typeof e?.randomUUID == "function" ? e.randomUUID() : `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`;
|
|
2956
|
-
},
|
|
2956
|
+
}, _a = (e) => `${e}_${ga()}`, va = (e) => e.id ?? `${e.event}->${e.workflow}`, ya = D("_voltro_workflow_events", {
|
|
2957
2957
|
id: v({ prefix: "wfe" }),
|
|
2958
|
-
name:
|
|
2958
|
+
name: O(),
|
|
2959
2959
|
payload: C(),
|
|
2960
|
-
source:
|
|
2960
|
+
source: O(),
|
|
2961
2961
|
subject: C().nullable(),
|
|
2962
|
-
traceId:
|
|
2963
|
-
occurredAt:
|
|
2964
|
-
}).index(["name"]).index(["source"]).index(["occurredAt"]).reactive(),
|
|
2962
|
+
traceId: O().nullable(),
|
|
2963
|
+
occurredAt: k().default("now")
|
|
2964
|
+
}).index(["name"]).index(["source"]).index(["occurredAt"]).reactive(), ba = D("_voltro_workflow_event_deliveries", {
|
|
2965
2965
|
id: v({ prefix: "wfed" }),
|
|
2966
|
-
eventId:
|
|
2967
|
-
eventName:
|
|
2968
|
-
triggerId:
|
|
2969
|
-
workflowName:
|
|
2970
|
-
executionId:
|
|
2971
|
-
status:
|
|
2966
|
+
eventId: O(),
|
|
2967
|
+
eventName: O(),
|
|
2968
|
+
triggerId: O(),
|
|
2969
|
+
workflowName: O(),
|
|
2970
|
+
executionId: O().nullable(),
|
|
2971
|
+
status: O().oneOf([
|
|
2972
2972
|
"starting",
|
|
2973
2973
|
"started",
|
|
2974
2974
|
"skipped",
|
|
2975
2975
|
"failed"
|
|
2976
2976
|
]).default("starting"),
|
|
2977
|
-
idempotencyKey:
|
|
2977
|
+
idempotencyKey: O().unique(),
|
|
2978
2978
|
skipped: r().default(!1),
|
|
2979
|
-
errorMessage:
|
|
2980
|
-
createdAt:
|
|
2981
|
-
completedAt:
|
|
2982
|
-
}).index(["eventId"]).index(["eventName"]).index(["triggerId"]).index(["workflowName"]).index(["status"]).reactive(),
|
|
2983
|
-
let t = e.makeId ??
|
|
2979
|
+
errorMessage: O().nullable(),
|
|
2980
|
+
createdAt: k().default("now"),
|
|
2981
|
+
completedAt: k().nullable()
|
|
2982
|
+
}).index(["eventId"]).index(["eventName"]).index(["triggerId"]).index(["workflowName"]).index(["status"]).reactive(), xa = (e) => {
|
|
2983
|
+
let t = e.makeId ?? _a, n = /* @__PURE__ */ new Map();
|
|
2984
2984
|
for (let t of e.triggers) {
|
|
2985
2985
|
let e = n.get(t.event);
|
|
2986
2986
|
e ? e.push(t) : n.set(t.event, [t]);
|
|
@@ -3021,7 +3021,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3021
3021
|
});
|
|
3022
3022
|
let p = o(n), m = [];
|
|
3023
3023
|
for (let o of p) {
|
|
3024
|
-
let s =
|
|
3024
|
+
let s = va(o), l = o.workflow, d;
|
|
3025
3025
|
try {
|
|
3026
3026
|
let p = o.idempotencyKey?.(f) ?? `${c}:${s}`;
|
|
3027
3027
|
if (o.filter && !await o.filter(f)) {
|
|
@@ -3124,61 +3124,61 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3124
3124
|
triggered: m
|
|
3125
3125
|
};
|
|
3126
3126
|
} };
|
|
3127
|
-
},
|
|
3127
|
+
}, Sa = j({ scope: "voltro:outbox" }), J = "_voltro_outbox", Ca = {
|
|
3128
3128
|
kind: "typeid",
|
|
3129
3129
|
prefix: "obx"
|
|
3130
|
-
},
|
|
3130
|
+
}, wa = D(J, {
|
|
3131
3131
|
id: v({ prefix: "obx" }),
|
|
3132
|
-
effect:
|
|
3132
|
+
effect: O(),
|
|
3133
3133
|
payload: C(),
|
|
3134
|
-
status:
|
|
3134
|
+
status: O(),
|
|
3135
3135
|
attempts: b(),
|
|
3136
3136
|
maxAttempts: b(),
|
|
3137
|
-
nextAttemptAt:
|
|
3138
|
-
idempotencyKey:
|
|
3139
|
-
lastError:
|
|
3140
|
-
subjectId:
|
|
3141
|
-
tenantId:
|
|
3142
|
-
traceId:
|
|
3143
|
-
createdAt:
|
|
3144
|
-
deliveredAt:
|
|
3145
|
-
resendRequestedBy:
|
|
3146
|
-
resendReason:
|
|
3137
|
+
nextAttemptAt: k(),
|
|
3138
|
+
idempotencyKey: O().nullable(),
|
|
3139
|
+
lastError: O().nullable(),
|
|
3140
|
+
subjectId: O().nullable(),
|
|
3141
|
+
tenantId: O().nullable(),
|
|
3142
|
+
traceId: O().nullable(),
|
|
3143
|
+
createdAt: k(),
|
|
3144
|
+
deliveredAt: k().nullable(),
|
|
3145
|
+
resendRequestedBy: O().nullable(),
|
|
3146
|
+
resendReason: O().nullable(),
|
|
3147
3147
|
resendCount: b()
|
|
3148
|
-
}),
|
|
3148
|
+
}), Ta = "_voltro_outbox_attempts", Ea = {
|
|
3149
3149
|
kind: "typeid",
|
|
3150
3150
|
prefix: "obxa"
|
|
3151
|
-
},
|
|
3151
|
+
}, Da = D(Ta, {
|
|
3152
3152
|
id: v({ prefix: "obxa" }),
|
|
3153
|
-
outboxId:
|
|
3154
|
-
effect:
|
|
3153
|
+
outboxId: O(),
|
|
3154
|
+
effect: O(),
|
|
3155
3155
|
attempt: b(),
|
|
3156
|
-
trigger:
|
|
3157
|
-
triggeredBy:
|
|
3158
|
-
reason:
|
|
3159
|
-
outcome:
|
|
3156
|
+
trigger: O().oneOf(["automatic", "manual"]),
|
|
3157
|
+
triggeredBy: O().nullable(),
|
|
3158
|
+
reason: O().nullable(),
|
|
3159
|
+
outcome: O().oneOf([
|
|
3160
3160
|
"delivered",
|
|
3161
3161
|
"failed",
|
|
3162
3162
|
"dead"
|
|
3163
3163
|
]),
|
|
3164
|
-
startedAt:
|
|
3165
|
-
finishedAt:
|
|
3164
|
+
startedAt: k(),
|
|
3165
|
+
finishedAt: k(),
|
|
3166
3166
|
durationMs: b(),
|
|
3167
|
-
error:
|
|
3167
|
+
error: O().nullable(),
|
|
3168
3168
|
response: C().nullable(),
|
|
3169
|
-
subjectId:
|
|
3170
|
-
tenantId:
|
|
3171
|
-
traceId:
|
|
3172
|
-
}).index(["outboxId", "attempt"]).index(["startedAt"]).index(["outcome"]),
|
|
3169
|
+
subjectId: O().nullable(),
|
|
3170
|
+
tenantId: O().nullable(),
|
|
3171
|
+
traceId: O().nullable()
|
|
3172
|
+
}).index(["outboxId", "attempt"]).index(["startedAt"]).index(["outcome"]), Oa = (e) => {
|
|
3173
3173
|
if (e.effect.trim() === "") throw Error("defineOutboxHandler: `effect` must be a non-empty name");
|
|
3174
3174
|
if (e.maxAttempts !== void 0 && e.maxAttempts < 1) throw Error(`defineOutboxHandler("${e.effect}"): maxAttempts must be >= 1`);
|
|
3175
3175
|
return e;
|
|
3176
|
-
},
|
|
3176
|
+
}, ka = 8, Aa = (e) => ({
|
|
3177
3177
|
enqueue: async (n, r, i) => {
|
|
3178
3178
|
let a = (e.now ?? (() => /* @__PURE__ */ new Date()))(), o = i?.idempotencyKey;
|
|
3179
3179
|
if (o !== void 0) {
|
|
3180
3180
|
let n = (await e.store.query({
|
|
3181
|
-
table:
|
|
3181
|
+
table: J,
|
|
3182
3182
|
predicate: t(u("idempotencyKey", o), u("status", "pending")),
|
|
3183
3183
|
order: [],
|
|
3184
3184
|
take: 1,
|
|
@@ -3188,12 +3188,12 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3188
3188
|
if (n !== void 0) return n.id;
|
|
3189
3189
|
}
|
|
3190
3190
|
let s = {
|
|
3191
|
-
id: f(
|
|
3191
|
+
id: f(Ca, J),
|
|
3192
3192
|
effect: n,
|
|
3193
3193
|
payload: r,
|
|
3194
3194
|
status: "pending",
|
|
3195
3195
|
attempts: 0,
|
|
3196
|
-
maxAttempts: i?.maxAttempts ??
|
|
3196
|
+
maxAttempts: i?.maxAttempts ?? ka,
|
|
3197
3197
|
nextAttemptAt: new Date(a.getTime() + (i?.delayMs ?? 0)),
|
|
3198
3198
|
idempotencyKey: o ?? null,
|
|
3199
3199
|
lastError: null,
|
|
@@ -3205,7 +3205,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3205
3205
|
resendRequestedBy: null,
|
|
3206
3206
|
resendReason: null,
|
|
3207
3207
|
resendCount: 0
|
|
3208
|
-
}, c = await e.store.insert(
|
|
3208
|
+
}, c = await e.store.insert(J, s);
|
|
3209
3209
|
if (e.afterCommit !== void 0 && e.nudge !== void 0) {
|
|
3210
3210
|
let t = e.nudge;
|
|
3211
3211
|
e.afterCommit(async () => {
|
|
@@ -3216,7 +3216,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3216
3216
|
},
|
|
3217
3217
|
resend: async (t, n) => {
|
|
3218
3218
|
let r = (e.now ?? (() => /* @__PURE__ */ new Date()))(), i = (await e.store.query({
|
|
3219
|
-
table:
|
|
3219
|
+
table: J,
|
|
3220
3220
|
predicate: u("id", t),
|
|
3221
3221
|
order: [],
|
|
3222
3222
|
take: 1,
|
|
@@ -3226,7 +3226,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3226
3226
|
if (i === void 0) throw Error(`outbox.resend: no entry "${t}"`);
|
|
3227
3227
|
if (i.status === "delivering") throw Error(`outbox.resend("${t}"): an attempt is in flight — retry once it settles`);
|
|
3228
3228
|
let a = i.attempts ?? 0, o = Math.max(1, Math.floor(n?.attempts ?? 1));
|
|
3229
|
-
if (await e.store.update(
|
|
3229
|
+
if (await e.store.update(J, t, {
|
|
3230
3230
|
status: "pending",
|
|
3231
3231
|
nextAttemptAt: r,
|
|
3232
3232
|
maxAttempts: a + o,
|
|
@@ -3240,7 +3240,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3240
3240
|
});
|
|
3241
3241
|
} else e.nudge?.();
|
|
3242
3242
|
}
|
|
3243
|
-
}),
|
|
3243
|
+
}), ja = (e) => Math.min(1e3 * 2 ** Math.max(0, e - 1), 5 * 6e4), Ma = 50, Na = (e, t) => e.length <= t ? e : `${e.slice(0, t)}… [clipped]`, Pa = (e) => {
|
|
3244
3244
|
if (e == null) return null;
|
|
3245
3245
|
let t = typeof e == "object" && !Array.isArray(e) ? e : { value: e }, n;
|
|
3246
3246
|
try {
|
|
@@ -3250,13 +3250,13 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3250
3250
|
}
|
|
3251
3251
|
return n.length > 8192 ? {
|
|
3252
3252
|
truncated: !0,
|
|
3253
|
-
preview:
|
|
3253
|
+
preview: Na(n, 8192)
|
|
3254
3254
|
} : t;
|
|
3255
|
-
},
|
|
3255
|
+
}, Fa = async (e, t, n) => {
|
|
3256
3256
|
let r = t.outboxRow, i = r.id, a = r.resendRequestedBy ?? null;
|
|
3257
3257
|
try {
|
|
3258
|
-
await e.insert(
|
|
3259
|
-
id: f(
|
|
3258
|
+
await e.insert(Ta, {
|
|
3259
|
+
id: f(Ea, Ta),
|
|
3260
3260
|
outboxId: i,
|
|
3261
3261
|
effect: r.effect,
|
|
3262
3262
|
attempt: t.attempt,
|
|
@@ -3267,14 +3267,14 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3267
3267
|
startedAt: t.startedAt,
|
|
3268
3268
|
finishedAt: t.finishedAt,
|
|
3269
3269
|
durationMs: Math.max(0, t.finishedAt.getTime() - t.startedAt.getTime()),
|
|
3270
|
-
error: t.error === null ? null :
|
|
3271
|
-
response:
|
|
3270
|
+
error: t.error === null ? null : Na(t.error, 4e3),
|
|
3271
|
+
response: Pa(t.response),
|
|
3272
3272
|
subjectId: r.subjectId ?? null,
|
|
3273
3273
|
tenantId: r.tenantId ?? null,
|
|
3274
3274
|
traceId: r.traceId ?? null
|
|
3275
3275
|
});
|
|
3276
3276
|
} catch (e) {
|
|
3277
|
-
|
|
3277
|
+
Sa.warn("outbox: could not record delivery attempt (delivery itself is unaffected)", {
|
|
3278
3278
|
outboxId: i,
|
|
3279
3279
|
attempt: t.attempt
|
|
3280
3280
|
}, e);
|
|
@@ -3282,7 +3282,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3282
3282
|
}
|
|
3283
3283
|
if (!(t.attempt <= n)) try {
|
|
3284
3284
|
let t = await e.query({
|
|
3285
|
-
table:
|
|
3285
|
+
table: Ta,
|
|
3286
3286
|
predicate: u("outboxId", i),
|
|
3287
3287
|
order: [{
|
|
3288
3288
|
column: "attempt",
|
|
@@ -3292,14 +3292,14 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3292
3292
|
skip: void 0,
|
|
3293
3293
|
projection: ["id"]
|
|
3294
3294
|
});
|
|
3295
|
-
for (let r of t.slice(0, Math.max(0, t.length - n))) await e.delete(
|
|
3295
|
+
for (let r of t.slice(0, Math.max(0, t.length - n))) await e.delete(Ta, r.id);
|
|
3296
3296
|
} catch (e) {
|
|
3297
|
-
|
|
3297
|
+
Sa.warn("outbox: attempt-log trim failed; the log may exceed its cap", { outboxId: i }, e);
|
|
3298
3298
|
}
|
|
3299
|
-
},
|
|
3299
|
+
}, Ia = async (e) => {
|
|
3300
3300
|
let n = (e.now ?? (() => /* @__PURE__ */ new Date()))(), r = await e.store.query({
|
|
3301
|
-
table:
|
|
3302
|
-
predicate: t(u("status", "pending"),
|
|
3301
|
+
table: J,
|
|
3302
|
+
predicate: t(u("status", "pending"), w("nextAttemptAt", n)),
|
|
3303
3303
|
order: [{
|
|
3304
3304
|
column: "nextAttemptAt",
|
|
3305
3305
|
direction: "asc"
|
|
@@ -3314,7 +3314,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3314
3314
|
s++;
|
|
3315
3315
|
continue;
|
|
3316
3316
|
}
|
|
3317
|
-
let u = t.attempts + 1, d = t.maxAttempts ??
|
|
3317
|
+
let u = t.attempts + 1, d = t.maxAttempts ?? ka, f = /* @__PURE__ */ new Date(), p = e.attemptLogCap ?? 50;
|
|
3318
3318
|
try {
|
|
3319
3319
|
let n = await l.handler({
|
|
3320
3320
|
payload: t.payload ?? {},
|
|
@@ -3323,7 +3323,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3323
3323
|
tenantId: t.tenantId ?? null,
|
|
3324
3324
|
traceId: t.traceId ?? null
|
|
3325
3325
|
});
|
|
3326
|
-
await
|
|
3326
|
+
await Fa(e.store, {
|
|
3327
3327
|
outboxRow: t,
|
|
3328
3328
|
attempt: u,
|
|
3329
3329
|
outcome: "delivered",
|
|
@@ -3331,7 +3331,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3331
3331
|
finishedAt: /* @__PURE__ */ new Date(),
|
|
3332
3332
|
error: null,
|
|
3333
3333
|
response: n
|
|
3334
|
-
}, p), await e.store.update(
|
|
3334
|
+
}, p), await e.store.update(J, r, {
|
|
3335
3335
|
status: "delivered",
|
|
3336
3336
|
attempts: u,
|
|
3337
3337
|
deliveredAt: /* @__PURE__ */ new Date(),
|
|
@@ -3341,7 +3341,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3341
3341
|
}), i++;
|
|
3342
3342
|
} catch (i) {
|
|
3343
3343
|
let s = i instanceof Error ? i.message : String(i), l = u >= d;
|
|
3344
|
-
await
|
|
3344
|
+
await Fa(e.store, {
|
|
3345
3345
|
outboxRow: t,
|
|
3346
3346
|
attempt: u,
|
|
3347
3347
|
outcome: l ? "dead" : "failed",
|
|
@@ -3349,24 +3349,24 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3349
3349
|
finishedAt: /* @__PURE__ */ new Date(),
|
|
3350
3350
|
error: s,
|
|
3351
3351
|
response: null
|
|
3352
|
-
}, p), await e.store.update(
|
|
3352
|
+
}, p), await e.store.update(J, r, {
|
|
3353
3353
|
status: l ? "dead" : "pending",
|
|
3354
3354
|
attempts: u,
|
|
3355
3355
|
lastError: s,
|
|
3356
|
-
nextAttemptAt: new Date(n.getTime() +
|
|
3356
|
+
nextAttemptAt: new Date(n.getTime() + ja(u)),
|
|
3357
3357
|
resendRequestedBy: null,
|
|
3358
3358
|
resendReason: null
|
|
3359
|
-
}), l ? (o++,
|
|
3359
|
+
}), l ? (o++, Sa.error("outbox effect dead-lettered after exhausting attempts", {
|
|
3360
3360
|
id: r,
|
|
3361
3361
|
effect: c,
|
|
3362
3362
|
attempts: u,
|
|
3363
3363
|
maxAttempts: d
|
|
3364
|
-
}, i)) : (a++,
|
|
3364
|
+
}, i)) : (a++, Sa.warn("outbox delivery failed; will retry", {
|
|
3365
3365
|
id: r,
|
|
3366
3366
|
effect: c,
|
|
3367
3367
|
attempt: u,
|
|
3368
3368
|
maxAttempts: d,
|
|
3369
|
-
retryInMs:
|
|
3369
|
+
retryInMs: ja(u)
|
|
3370
3370
|
}));
|
|
3371
3371
|
}
|
|
3372
3372
|
}
|
|
@@ -3376,45 +3376,45 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3376
3376
|
dead: o,
|
|
3377
3377
|
skipped: s
|
|
3378
3378
|
};
|
|
3379
|
-
},
|
|
3379
|
+
}, La = j({ scope: "voltro:connections" }), Y = "_voltro_connections", Ra = {
|
|
3380
3380
|
kind: "typeid",
|
|
3381
3381
|
prefix: "conn"
|
|
3382
|
-
},
|
|
3382
|
+
}, za = D(Y, {
|
|
3383
3383
|
id: v({ prefix: "conn" }),
|
|
3384
|
-
connectionId:
|
|
3385
|
-
subjectId:
|
|
3386
|
-
tenantId:
|
|
3387
|
-
kind:
|
|
3388
|
-
status:
|
|
3384
|
+
connectionId: O(),
|
|
3385
|
+
subjectId: O(),
|
|
3386
|
+
tenantId: O().nullable(),
|
|
3387
|
+
kind: O().oneOf(["oauth2", "pat"]),
|
|
3388
|
+
status: O().oneOf([
|
|
3389
3389
|
"connected",
|
|
3390
3390
|
"expired",
|
|
3391
3391
|
"revoked",
|
|
3392
3392
|
"error"
|
|
3393
3393
|
]),
|
|
3394
|
-
accessToken:
|
|
3395
|
-
refreshToken:
|
|
3396
|
-
expiresAt:
|
|
3397
|
-
scopes:
|
|
3398
|
-
accountId:
|
|
3399
|
-
accountLabel:
|
|
3400
|
-
lastError:
|
|
3401
|
-
refreshLockedUntil:
|
|
3394
|
+
accessToken: O(),
|
|
3395
|
+
refreshToken: O().nullable(),
|
|
3396
|
+
expiresAt: k().nullable(),
|
|
3397
|
+
scopes: O().nullable(),
|
|
3398
|
+
accountId: O().nullable(),
|
|
3399
|
+
accountLabel: O().nullable(),
|
|
3400
|
+
lastError: O().nullable(),
|
|
3401
|
+
refreshLockedUntil: k(),
|
|
3402
3402
|
metadata: C().nullable(),
|
|
3403
|
-
connectedAt:
|
|
3404
|
-
updatedAt:
|
|
3405
|
-
}).unique("bySubject", ["connectionId", "subjectId"]).index(["subjectId"]).reactive(),
|
|
3403
|
+
connectedAt: k(),
|
|
3404
|
+
updatedAt: k()
|
|
3405
|
+
}).unique("bySubject", ["connectionId", "subjectId"]).index(["subjectId"]).reactive(), X = "_voltro_connection_grants", Ba = {
|
|
3406
3406
|
kind: "typeid",
|
|
3407
3407
|
prefix: "cgrant"
|
|
3408
|
-
}, Va =
|
|
3408
|
+
}, Va = D(X, {
|
|
3409
3409
|
id: v({ prefix: "cgrant" }),
|
|
3410
|
-
state:
|
|
3411
|
-
connectionId:
|
|
3412
|
-
subjectId:
|
|
3413
|
-
tenantId:
|
|
3414
|
-
codeVerifier:
|
|
3415
|
-
redirectTo:
|
|
3416
|
-
createdAt:
|
|
3417
|
-
expiresAt:
|
|
3410
|
+
state: O().unique(),
|
|
3411
|
+
connectionId: O(),
|
|
3412
|
+
subjectId: O(),
|
|
3413
|
+
tenantId: O().nullable(),
|
|
3414
|
+
codeVerifier: O().nullable(),
|
|
3415
|
+
redirectTo: O(),
|
|
3416
|
+
createdAt: k(),
|
|
3417
|
+
expiresAt: k()
|
|
3418
3418
|
}).index(["expiresAt"]), Ha = /^[a-z][a-z0-9-]*$/, Ua = (e) => {
|
|
3419
3419
|
if (!Ha.test(e.id)) throw Error(`defineConnection: id "${e.id}" must be lowercase kebab-case (it becomes a URL path segment).`);
|
|
3420
3420
|
if (e.kind === "oauth2") {
|
|
@@ -3427,7 +3427,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3427
3427
|
}
|
|
3428
3428
|
return e;
|
|
3429
3429
|
}, Wa = (e) => e.label ?? e.id, Ga = (e) => {
|
|
3430
|
-
if (e.length !== 0 &&
|
|
3430
|
+
if (e.length !== 0 && yi() === 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).`);
|
|
3431
3431
|
}, Ka = (e) => {
|
|
3432
3432
|
let t = /* @__PURE__ */ new Map();
|
|
3433
3433
|
for (let n of e) {
|
|
@@ -3465,7 +3465,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3465
3465
|
lastError: t.lastError ?? null,
|
|
3466
3466
|
connectedAt: Ja(t.connectedAt)
|
|
3467
3467
|
}, Za = async (e, n, r) => (await e.query({
|
|
3468
|
-
table:
|
|
3468
|
+
table: Y,
|
|
3469
3469
|
predicate: t(u("connectionId", n), u("subjectId", r)),
|
|
3470
3470
|
order: [],
|
|
3471
3471
|
take: 1,
|
|
@@ -3473,14 +3473,14 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3473
3473
|
projection: void 0
|
|
3474
3474
|
}))[0], Qa = async (e) => {
|
|
3475
3475
|
let t = (e.now ?? (() => /* @__PURE__ */ new Date()))(), n = e.tokens.expiresAt === void 0 ? null : new Date(e.tokens.expiresAt), r = {
|
|
3476
|
-
id: f(
|
|
3476
|
+
id: f(Ra, Y),
|
|
3477
3477
|
connectionId: e.definition.id,
|
|
3478
3478
|
subjectId: e.subjectId,
|
|
3479
3479
|
tenantId: e.tenantId,
|
|
3480
3480
|
kind: e.definition.kind,
|
|
3481
3481
|
status: "connected",
|
|
3482
|
-
accessToken:
|
|
3483
|
-
refreshToken: e.tokens.refreshToken === void 0 ? null :
|
|
3482
|
+
accessToken: K(e.tokens.accessToken),
|
|
3483
|
+
refreshToken: e.tokens.refreshToken === void 0 ? null : K(e.tokens.refreshToken),
|
|
3484
3484
|
expiresAt: n,
|
|
3485
3485
|
scopes: e.tokens.scopes.length > 0 ? e.tokens.scopes.join(" ") : null,
|
|
3486
3486
|
accountId: e.account?.accountId ?? null,
|
|
@@ -3492,7 +3492,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3492
3492
|
updatedAt: t
|
|
3493
3493
|
};
|
|
3494
3494
|
return $a(e.store, r);
|
|
3495
|
-
}, $a = (e, t) => e.upsert(
|
|
3495
|
+
}, $a = (e, t) => e.upsert(Y, t, {
|
|
3496
3496
|
conflictColumns: ["connectionId", "subjectId"],
|
|
3497
3497
|
update: [
|
|
3498
3498
|
"kind",
|
|
@@ -3510,10 +3510,10 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3510
3510
|
]
|
|
3511
3511
|
}), eo = async (e, t, n) => {
|
|
3512
3512
|
let r = await Za(e, t, n);
|
|
3513
|
-
return r !== void 0 && e.delete(
|
|
3513
|
+
return r !== void 0 && e.delete(Y, r.id);
|
|
3514
3514
|
}, to = async (e, t, n) => {
|
|
3515
3515
|
let r = await e.query({
|
|
3516
|
-
table:
|
|
3516
|
+
table: Y,
|
|
3517
3517
|
predicate: u("subjectId", n),
|
|
3518
3518
|
order: [],
|
|
3519
3519
|
take: void 0,
|
|
@@ -3534,7 +3534,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3534
3534
|
});
|
|
3535
3535
|
i = n.status, a = await n.text();
|
|
3536
3536
|
} catch (t) {
|
|
3537
|
-
throw new
|
|
3537
|
+
throw new A({
|
|
3538
3538
|
connectionId: e.id,
|
|
3539
3539
|
reason: `token endpoint unreachable: ${String(t)}`,
|
|
3540
3540
|
transient: !0
|
|
@@ -3546,12 +3546,12 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3546
3546
|
} catch {
|
|
3547
3547
|
o = {};
|
|
3548
3548
|
}
|
|
3549
|
-
if (i < 200 || i >= 300) throw new
|
|
3549
|
+
if (i < 200 || i >= 300) throw new A({
|
|
3550
3550
|
connectionId: e.id,
|
|
3551
3551
|
reason: `token endpoint ${i}: ${o.error ?? ""} ${o.error_description ?? a.slice(0, 200)}`.trim(),
|
|
3552
3552
|
transient: i >= 500
|
|
3553
3553
|
});
|
|
3554
|
-
if (typeof o.access_token != "string" || o.access_token.length === 0) throw new
|
|
3554
|
+
if (typeof o.access_token != "string" || o.access_token.length === 0) throw new A({
|
|
3555
3555
|
connectionId: e.id,
|
|
3556
3556
|
reason: "token response carried no access_token",
|
|
3557
3557
|
transient: !1
|
|
@@ -3588,7 +3588,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3588
3588
|
}, mo = (e, t) => ({
|
|
3589
3589
|
connectionId: e.id,
|
|
3590
3590
|
kind: e.kind,
|
|
3591
|
-
accessToken:
|
|
3591
|
+
accessToken: xi(String(t.accessToken)),
|
|
3592
3592
|
expiresAt: qa(t.expiresAt),
|
|
3593
3593
|
scopes: Ya(t.scopes),
|
|
3594
3594
|
accountId: t.accountId ?? null,
|
|
@@ -3612,50 +3612,50 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3612
3612
|
return uo.set(o, c), c;
|
|
3613
3613
|
}, _o = async (e) => {
|
|
3614
3614
|
let { store: n, subjectId: r, now: i } = e, a = e.definition, o = e.sleep ?? lo, s = a.refreshSkewMs ?? 6e4, c = e.row.id;
|
|
3615
|
-
if (await n.updateMany("_voltro_connections", { refreshLockedUntil: new Date(i() + 3e4) }, { where: t(u("id", c),
|
|
3615
|
+
if (await n.updateMany("_voltro_connections", { refreshLockedUntil: new Date(i() + 3e4) }, { where: t(u("id", c), w("refreshLockedUntil", new Date(i()))) }) === 0) {
|
|
3616
3616
|
for (let e = 0; e < 10; e++) {
|
|
3617
3617
|
await o(200);
|
|
3618
3618
|
let e = await Za(n, a.id, r);
|
|
3619
3619
|
if (e === void 0) throw new co(a.id, r);
|
|
3620
3620
|
if (!ho(e, s, i())) return mo(a, e);
|
|
3621
3621
|
}
|
|
3622
|
-
throw new
|
|
3622
|
+
throw new A({
|
|
3623
3623
|
connectionId: a.id,
|
|
3624
3624
|
reason: "another replica held the refresh lease and did not publish a fresh token in time",
|
|
3625
3625
|
transient: !0
|
|
3626
3626
|
});
|
|
3627
3627
|
}
|
|
3628
3628
|
let l = e.row.refreshToken;
|
|
3629
|
-
if (l == null) throw await n.update(
|
|
3629
|
+
if (l == null) throw await n.update(Y, c, {
|
|
3630
3630
|
status: "expired",
|
|
3631
3631
|
lastError: "access token expired and no refresh token is on file — reconnect required",
|
|
3632
3632
|
refreshLockedUntil: /* @__PURE__ */ new Date(0),
|
|
3633
3633
|
updatedAt: new Date(i())
|
|
3634
|
-
}), new
|
|
3634
|
+
}), new A({
|
|
3635
3635
|
connectionId: a.id,
|
|
3636
3636
|
reason: "access token expired and no refresh token is on file — reconnect required",
|
|
3637
3637
|
transient: !1
|
|
3638
3638
|
});
|
|
3639
3639
|
let d;
|
|
3640
3640
|
try {
|
|
3641
|
-
d = await ao(a,
|
|
3641
|
+
d = await ao(a, xi(String(l)), i);
|
|
3642
3642
|
} catch (e) {
|
|
3643
|
-
let t = e instanceof
|
|
3643
|
+
let t = e instanceof A ? e : new A({
|
|
3644
3644
|
connectionId: a.id,
|
|
3645
3645
|
reason: String(e),
|
|
3646
3646
|
transient: !0
|
|
3647
3647
|
});
|
|
3648
|
-
throw await n.update(
|
|
3648
|
+
throw await n.update(Y, c, {
|
|
3649
3649
|
status: t.transient ? "error" : "revoked",
|
|
3650
3650
|
lastError: t.reason,
|
|
3651
3651
|
refreshLockedUntil: /* @__PURE__ */ new Date(0),
|
|
3652
3652
|
updatedAt: new Date(i()),
|
|
3653
3653
|
...t.transient ? {} : {
|
|
3654
|
-
accessToken:
|
|
3654
|
+
accessToken: K(""),
|
|
3655
3655
|
refreshToken: null,
|
|
3656
3656
|
expiresAt: null
|
|
3657
3657
|
}
|
|
3658
|
-
}),
|
|
3658
|
+
}), La.warn("connection refresh failed", {
|
|
3659
3659
|
connectionId: a.id,
|
|
3660
3660
|
transient: t.transient,
|
|
3661
3661
|
reason: t.reason
|
|
@@ -3663,15 +3663,15 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3663
3663
|
}
|
|
3664
3664
|
let f = {
|
|
3665
3665
|
status: "connected",
|
|
3666
|
-
accessToken:
|
|
3667
|
-
...d.refreshToken === void 0 ? {} : { refreshToken:
|
|
3666
|
+
accessToken: K(d.accessToken),
|
|
3667
|
+
...d.refreshToken === void 0 ? {} : { refreshToken: K(d.refreshToken) },
|
|
3668
3668
|
expiresAt: d.expiresAt === void 0 ? null : new Date(d.expiresAt),
|
|
3669
3669
|
...d.scopes.length > 0 ? { scopes: d.scopes.join(" ") } : {},
|
|
3670
3670
|
lastError: null,
|
|
3671
3671
|
refreshLockedUntil: /* @__PURE__ */ new Date(0),
|
|
3672
3672
|
updatedAt: new Date(i())
|
|
3673
3673
|
};
|
|
3674
|
-
return mo(a, await n.update(
|
|
3674
|
+
return mo(a, await n.update(Y, c, f) ?? {
|
|
3675
3675
|
...e.row,
|
|
3676
3676
|
...f
|
|
3677
3677
|
});
|
|
@@ -3687,13 +3687,13 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3687
3687
|
return yo(new Uint8Array(t));
|
|
3688
3688
|
}, xo = 10 * 6e4, So = (e) => `/_voltro/connections/${e}/callback`, Co = (e) => e === void 0 || e.length === 0 || !e.startsWith("/") || e.startsWith("//") || e.startsWith("/\\") ? "/" : e, wo = (e, t) => e.redirectUri ?? `${t.replace(/\/+$/, "")}${So(e.id)}`, To = async (e) => {
|
|
3689
3689
|
let t = (e.now ?? (() => /* @__PURE__ */ new Date()))(), { definition: n } = e, r = vo(), i = n.pkce === !1 ? null : vo(48), a = wo(n, e.publicUrl);
|
|
3690
|
-
await e.store.insert(
|
|
3691
|
-
id: f(Ba,
|
|
3690
|
+
await e.store.insert(X, {
|
|
3691
|
+
id: f(Ba, X),
|
|
3692
3692
|
state: r,
|
|
3693
3693
|
connectionId: n.id,
|
|
3694
3694
|
subjectId: e.subjectId,
|
|
3695
3695
|
tenantId: e.tenantId,
|
|
3696
|
-
codeVerifier: i === null ? null :
|
|
3696
|
+
codeVerifier: i === null ? null : K(i),
|
|
3697
3697
|
redirectTo: Co(e.redirectTo),
|
|
3698
3698
|
createdAt: t,
|
|
3699
3699
|
expiresAt: new Date(t.getTime() + xo)
|
|
@@ -3714,37 +3714,37 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3714
3714
|
};
|
|
3715
3715
|
}, Eo = async (e) => {
|
|
3716
3716
|
let t = (e.now ?? (() => /* @__PURE__ */ new Date()))(), n = (await e.store.query({
|
|
3717
|
-
table:
|
|
3717
|
+
table: X,
|
|
3718
3718
|
predicate: u("state", e.state),
|
|
3719
3719
|
order: [],
|
|
3720
3720
|
take: 1,
|
|
3721
3721
|
skip: void 0,
|
|
3722
3722
|
projection: void 0
|
|
3723
3723
|
}))[0];
|
|
3724
|
-
if (n === void 0) throw new
|
|
3724
|
+
if (n === void 0) throw new A({
|
|
3725
3725
|
connectionId: "unknown",
|
|
3726
3726
|
reason: "unknown or already-used handshake state",
|
|
3727
3727
|
transient: !1
|
|
3728
3728
|
});
|
|
3729
|
-
await e.store.delete(
|
|
3729
|
+
await e.store.delete(X, n.id);
|
|
3730
3730
|
let r = String(n.connectionId), i = qa(n.expiresAt);
|
|
3731
|
-
if (i !== null && i.getTime() < t.getTime()) throw new
|
|
3731
|
+
if (i !== null && i.getTime() < t.getTime()) throw new A({
|
|
3732
3732
|
connectionId: r,
|
|
3733
3733
|
reason: "handshake expired — start again",
|
|
3734
3734
|
transient: !1
|
|
3735
3735
|
});
|
|
3736
3736
|
let a = e.registry.get(r);
|
|
3737
|
-
if (a === void 0 || a.kind !== "oauth2") throw new
|
|
3737
|
+
if (a === void 0 || a.kind !== "oauth2") throw new A({
|
|
3738
3738
|
connectionId: r,
|
|
3739
3739
|
reason: "no oauth2 connection is declared under that id",
|
|
3740
3740
|
transient: !1
|
|
3741
3741
|
});
|
|
3742
|
-
let o = n.codeVerifier === null || n.codeVerifier === void 0 ? null :
|
|
3742
|
+
let o = n.codeVerifier === null || n.codeVerifier === void 0 ? null : xi(String(n.codeVerifier)), s = await io(a, {
|
|
3743
3743
|
code: e.code,
|
|
3744
3744
|
redirectUri: wo(a, e.publicUrl),
|
|
3745
3745
|
codeVerifier: o
|
|
3746
3746
|
}, () => t.getTime()), c = a.identify === void 0 ? void 0 : await a.identify(s).catch((e) => {
|
|
3747
|
-
|
|
3747
|
+
La.warn("connection identify failed; storing without account details", {
|
|
3748
3748
|
connectionId: r,
|
|
3749
3749
|
reason: String(e)
|
|
3750
3750
|
});
|
|
@@ -3763,8 +3763,8 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3763
3763
|
};
|
|
3764
3764
|
}, Do = async (e, t = /* @__PURE__ */ new Date()) => {
|
|
3765
3765
|
let n = await e.query({
|
|
3766
|
-
table:
|
|
3767
|
-
predicate:
|
|
3766
|
+
table: X,
|
|
3767
|
+
predicate: w("expiresAt", t),
|
|
3768
3768
|
order: [],
|
|
3769
3769
|
take: void 0,
|
|
3770
3770
|
skip: void 0,
|
|
@@ -3823,11 +3823,11 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3823
3823
|
};
|
|
3824
3824
|
}, Po = (e, t) => {
|
|
3825
3825
|
let n = e.request?.subject?.id ?? null;
|
|
3826
|
-
if (n === null || n === "") throw new
|
|
3826
|
+
if (n === null || n === "") throw new we({ connectionId: t });
|
|
3827
3827
|
return n;
|
|
3828
3828
|
}, Fo = (e, t) => {
|
|
3829
3829
|
let n = e.registry.get(t);
|
|
3830
|
-
if (n === void 0) throw new
|
|
3830
|
+
if (n === void 0) throw new Ce({ connectionId: t });
|
|
3831
3831
|
return n;
|
|
3832
3832
|
}, Io = (e) => async (t, n) => {
|
|
3833
3833
|
let r = n.request?.subject?.id ?? null;
|
|
@@ -3845,7 +3845,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3845
3845
|
})) : to(n.store, e.registry, r);
|
|
3846
3846
|
}, Lo = (e) => async (t, n) => {
|
|
3847
3847
|
let r = Fo(e, t.connectionId), i = Po(n, t.connectionId);
|
|
3848
|
-
if (r.kind !== "oauth2") throw new
|
|
3848
|
+
if (r.kind !== "oauth2") throw new Se({
|
|
3849
3849
|
connectionId: t.connectionId,
|
|
3850
3850
|
expected: "oauth2",
|
|
3851
3851
|
actual: r.kind
|
|
@@ -3860,13 +3860,13 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3860
3860
|
});
|
|
3861
3861
|
}, Ro = (e) => async (t, n) => {
|
|
3862
3862
|
let r = Fo(e, t.connectionId), i = Po(n, t.connectionId);
|
|
3863
|
-
if (r.kind !== "pat") throw new
|
|
3863
|
+
if (r.kind !== "pat") throw new Se({
|
|
3864
3864
|
connectionId: t.connectionId,
|
|
3865
3865
|
expected: "pat",
|
|
3866
3866
|
actual: r.kind
|
|
3867
3867
|
});
|
|
3868
3868
|
let a = t.token.trim();
|
|
3869
|
-
if (a.length === 0) throw new
|
|
3869
|
+
if (a.length === 0) throw new A({
|
|
3870
3870
|
connectionId: t.connectionId,
|
|
3871
3871
|
reason: "token is empty",
|
|
3872
3872
|
transient: !1
|
|
@@ -3875,7 +3875,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3875
3875
|
if (r.validate !== void 0) try {
|
|
3876
3876
|
o = await r.validate(a);
|
|
3877
3877
|
} catch (e) {
|
|
3878
|
-
throw new
|
|
3878
|
+
throw new A({
|
|
3879
3879
|
connectionId: t.connectionId,
|
|
3880
3880
|
reason: `the provider rejected that token: ${e instanceof Error ? e.message : String(e)}`,
|
|
3881
3881
|
transient: !1
|
|
@@ -3896,10 +3896,10 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3896
3896
|
Fo(e, t.connectionId);
|
|
3897
3897
|
let r = Po(n, t.connectionId);
|
|
3898
3898
|
return { ok: await eo(n.store, t.connectionId, r) };
|
|
3899
|
-
}, Bo = "admin:full", Vo = class extends
|
|
3900
|
-
action:
|
|
3901
|
-
resourceType:
|
|
3902
|
-
resourceId:
|
|
3899
|
+
}, Bo = "admin:full", Vo = class extends L.TaggedError()("AccessDenied", {
|
|
3900
|
+
action: L.String,
|
|
3901
|
+
resourceType: L.String,
|
|
3902
|
+
resourceId: L.String
|
|
3903
3903
|
}) {}, Ho = /* @__PURE__ */ new Map(), Uo = (e) => {
|
|
3904
3904
|
if (typeof e.resourceType != "string" || e.resourceType.length === 0) throw Error("defineResourcePolicy: a non-empty `resourceType` is required");
|
|
3905
3905
|
if (e.actions === void 0 || Object.keys(e.actions).length === 0) throw Error(`resource policy '${e.resourceType}': at least one action is required`);
|
|
@@ -3947,10 +3947,10 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
3947
3947
|
}, i)), $o = (e, t) => {
|
|
3948
3948
|
let n = new Set(t.map((e) => e.id));
|
|
3949
3949
|
return e.filter((e) => !n.has(e.id)).map((e) => e.id);
|
|
3950
|
-
}, es =
|
|
3950
|
+
}, es = j({ scope: "voltro:policy" }), ts, ns = (e) => {
|
|
3951
3951
|
ts = e;
|
|
3952
3952
|
}, rs = () => ts, is = () => {
|
|
3953
|
-
|
|
3953
|
+
Le((e) => N.gen(function* () {
|
|
3954
3954
|
let t = Wo(e.resourceType);
|
|
3955
3955
|
if (t === void 0) return es.warn("policy guard denied — no resource policy registered for this type", {
|
|
3956
3956
|
resourceType: e.resourceType,
|
|
@@ -4034,7 +4034,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4034
4034
|
load: async (e, t) => (await o(e, [t]))[0] ?? null,
|
|
4035
4035
|
loadMany: (e, t) => o(e, t)
|
|
4036
4036
|
};
|
|
4037
|
-
}, ss = P.effect(
|
|
4037
|
+
}, ss = P.effect(tt.HttpClient, N.map(tt.HttpClient, (e) => e.pipe(tt.mapRequestEffect((e) => N.currentSpan.pipe(N.map((t) => e.headers.traceparent === void 0 ? nt.setHeader(e, "traceparent", lr({
|
|
4038
4038
|
traceId: t.traceId,
|
|
4039
4039
|
spanId: t.spanId,
|
|
4040
4040
|
sampled: t.sampled
|
|
@@ -4088,16 +4088,16 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4088
4088
|
insertSchema: (e) => t.get(e)?.insertSchema,
|
|
4089
4089
|
validatePatchSchema: (e) => t.get(e)?.validatePatchSchema
|
|
4090
4090
|
};
|
|
4091
|
-
}, fs = /* @__PURE__ */ new Map(), ps = /* @__PURE__ */ new Map(), ms = /* @__PURE__ */ new Set(), hs = ds([]), gs = class extends
|
|
4092
|
-
table:
|
|
4093
|
-
found:
|
|
4091
|
+
}, fs = /* @__PURE__ */ new Map(), ps = /* @__PURE__ */ new Map(), ms = /* @__PURE__ */ new Set(), hs = ds([]), gs = class extends L.TaggedError()("NoRowFound", {
|
|
4092
|
+
table: L.String,
|
|
4093
|
+
found: L.Number
|
|
4094
4094
|
}) {
|
|
4095
4095
|
get message() {
|
|
4096
4096
|
return this.found === 0 ? `expected exactly one row in '${this.table}', found none` : `expected exactly one row in '${this.table}', found more than one`;
|
|
4097
4097
|
}
|
|
4098
|
-
}, _s = class extends
|
|
4099
|
-
table:
|
|
4100
|
-
expected:
|
|
4098
|
+
}, _s = class extends L.TaggedError()("OptimisticLockError", {
|
|
4099
|
+
table: L.String,
|
|
4100
|
+
expected: L.Number
|
|
4101
4101
|
}) {
|
|
4102
4102
|
get message() {
|
|
4103
4103
|
return `optimistic lock failed on '${this.table}': expected version ${this.expected}`;
|
|
@@ -4110,11 +4110,11 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4110
4110
|
switch (n) {
|
|
4111
4111
|
case "=": return u(t, r);
|
|
4112
4112
|
case "!=":
|
|
4113
|
-
case "<>": return
|
|
4113
|
+
case "<>": return re(t, r);
|
|
4114
4114
|
case ">": return h(t, r);
|
|
4115
4115
|
case ">=": return g(t, r);
|
|
4116
4116
|
case "<": return te(t, r);
|
|
4117
|
-
case "<=": return
|
|
4117
|
+
case "<=": return w(t, r);
|
|
4118
4118
|
case "in": return y(t, r);
|
|
4119
4119
|
case "like":
|
|
4120
4120
|
case "contains":
|
|
@@ -4124,7 +4124,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4124
4124
|
}, bs = (e) => {
|
|
4125
4125
|
let t = m(e);
|
|
4126
4126
|
if (t === void 0) throw Error(`unknown table '${e}' — is it declared with table()?`);
|
|
4127
|
-
return
|
|
4127
|
+
return ie(t);
|
|
4128
4128
|
}, xs = class e {
|
|
4129
4129
|
backend;
|
|
4130
4130
|
scope;
|
|
@@ -4174,7 +4174,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4174
4174
|
scopedQuery() {
|
|
4175
4175
|
let e = this.query, { subject: t, schemaRegistry: n } = this.scope;
|
|
4176
4176
|
!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")));
|
|
4177
|
-
let r = (this.scope.rowFilter ??
|
|
4177
|
+
let r = (this.scope.rowFilter ?? Ln)(this.table);
|
|
4178
4178
|
return r !== void 0 && (e = e.where(r)), e;
|
|
4179
4179
|
}
|
|
4180
4180
|
async all() {
|
|
@@ -4292,12 +4292,12 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4292
4292
|
for (let r of t) e[r] !== void 0 && (n[r] = e[r]);
|
|
4293
4293
|
return n;
|
|
4294
4294
|
}, Os = "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).", ks = (e) => {
|
|
4295
|
-
throw new
|
|
4295
|
+
throw new Ji({
|
|
4296
4296
|
table: e,
|
|
4297
4297
|
reason: Os
|
|
4298
4298
|
});
|
|
4299
4299
|
}, As = (e, n) => {
|
|
4300
|
-
let r = n.subject.id, i = n.subject.tenantId, a = n.rowFilter ??
|
|
4300
|
+
let r = n.subject.id, i = n.subject.tenantId, a = n.rowFilter ?? Ln, o = (e, t) => {
|
|
4301
4301
|
let a = { ...t }, o = n.schemaRegistry, s = o.idScheme(e);
|
|
4302
4302
|
if (s !== void 0 && a[Ts] == null) if (s.kind === "numeric") delete a[Ts];
|
|
4303
4303
|
else {
|
|
@@ -4325,10 +4325,10 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4325
4325
|
try {
|
|
4326
4326
|
return await r();
|
|
4327
4327
|
} catch (n) {
|
|
4328
|
-
let r =
|
|
4329
|
-
if (
|
|
4328
|
+
let r = Xt(n);
|
|
4329
|
+
if (Zt(r)) {
|
|
4330
4330
|
let n = t.tenantId, i = `${r.dbConstraint ?? ""} ${r.dbColumn ?? ""} ${r.dbMessage ?? ""} ${r.dbCauseChain ?? ""}`.toLowerCase();
|
|
4331
|
-
if (i.includes("tenantid") || /\btenants\b/.test(i) || n != null && i.includes(String(n).toLowerCase())) throw new
|
|
4331
|
+
if (i.includes("tenantid") || /\btenants\b/.test(i) || n != null && i.includes(String(n).toLowerCase())) throw new Ji({
|
|
4332
4332
|
table: e,
|
|
4333
4333
|
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)`
|
|
4334
4334
|
});
|
|
@@ -4347,13 +4347,13 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4347
4347
|
}, g = (e, t) => {
|
|
4348
4348
|
let r = n.schemaRegistry.validatePatchSchema(e);
|
|
4349
4349
|
if (r === void 0) return t;
|
|
4350
|
-
let i =
|
|
4350
|
+
let i = L.decodeUnknownEither(r)(t);
|
|
4351
4351
|
if (i._tag === "Right") return t;
|
|
4352
|
-
let a =
|
|
4352
|
+
let a = Et.formatErrorSync(i.left).map((e) => ({
|
|
4353
4353
|
path: e.path.length === 0 ? "<root>" : e.path.join("."),
|
|
4354
4354
|
message: e.message
|
|
4355
4355
|
})), o = a[0];
|
|
4356
|
-
throw new
|
|
4356
|
+
throw new Xi({
|
|
4357
4357
|
table: e,
|
|
4358
4358
|
summary: o === void 0 ? "patch validation failed" : `${o.path}: ${o.message}`,
|
|
4359
4359
|
issues: a
|
|
@@ -4362,8 +4362,8 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4362
4362
|
let e = { deletedAt: /* @__PURE__ */ new Date() };
|
|
4363
4363
|
return r !== null && (e.deletedBy = r), e;
|
|
4364
4364
|
}, v = (e, t, n) => {
|
|
4365
|
-
let r =
|
|
4366
|
-
if (r.length !== 0) throw new
|
|
4365
|
+
let r = T(n, t);
|
|
4366
|
+
if (r.length !== 0) throw new Xi({
|
|
4367
4367
|
table: e,
|
|
4368
4368
|
summary: `upsert conflictColumns [${n.map((e) => `'${e}'`).join(", ")}] but the payload is missing ${r.map((e) => `'${e}'`).join(", ")}`,
|
|
4369
4369
|
issues: r.map((e) => ({
|
|
@@ -4371,11 +4371,11 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4371
4371
|
message: "named in conflictColumns but absent from the payload"
|
|
4372
4372
|
}))
|
|
4373
4373
|
});
|
|
4374
|
-
},
|
|
4374
|
+
}, b = (e, t) => {
|
|
4375
4375
|
let r = m(e);
|
|
4376
4376
|
if (r !== void 0) {
|
|
4377
|
-
let n =
|
|
4378
|
-
if (n.length > 0) throw new
|
|
4377
|
+
let n = ne(r, t);
|
|
4378
|
+
if (n.length > 0) throw new Xi({
|
|
4379
4379
|
table: e,
|
|
4380
4380
|
summary: `missing required column${n.length > 1 ? "s" : ""} ${n.map((e) => `'${e}'`).join(", ")} — NOT NULL with no default and not auto-stamped`,
|
|
4381
4381
|
issues: n.map((e) => ({
|
|
@@ -4386,34 +4386,34 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4386
4386
|
}
|
|
4387
4387
|
let i = n.schemaRegistry.insertSchema(e);
|
|
4388
4388
|
if (i === void 0) return t;
|
|
4389
|
-
let a =
|
|
4389
|
+
let a = L.decodeUnknownEither(i)(t);
|
|
4390
4390
|
if (a._tag === "Right") return t;
|
|
4391
|
-
let o =
|
|
4391
|
+
let o = Et.formatErrorSync(a.left).map((e) => ({
|
|
4392
4392
|
path: e.path.length === 0 ? "<root>" : e.path.join("."),
|
|
4393
4393
|
message: e.message
|
|
4394
4394
|
})), s = o[0];
|
|
4395
|
-
throw new
|
|
4395
|
+
throw new Xi({
|
|
4396
4396
|
table: e,
|
|
4397
4397
|
summary: s === void 0 ? "row validation failed" : `${s.path}: ${s.message}`,
|
|
4398
4398
|
issues: o
|
|
4399
4399
|
});
|
|
4400
|
-
},
|
|
4400
|
+
}, x = n.dialect, C = (e, t) => {
|
|
4401
4401
|
let n = m(e);
|
|
4402
|
-
return l(
|
|
4403
|
-
},
|
|
4402
|
+
return l(x ? le(t, n, x) : t, n, yi());
|
|
4403
|
+
}, ee = process.env.VOLTRO_FIELD_DECRYPT_ON_ERROR === "null" ? "null" : "throw", te = j({ scope: "store.fieldEncryption" }), w = /* @__PURE__ */ new Set(), re = (e) => {
|
|
4404
4404
|
let t = `${e.table}.${e.column}`;
|
|
4405
|
-
|
|
4405
|
+
w.has(t) || (w.add(t), te.warn("encrypted column degraded to null — could not decrypt with the active key", {
|
|
4406
4406
|
table: e.table,
|
|
4407
4407
|
column: e.column,
|
|
4408
4408
|
reason: e.reason,
|
|
4409
4409
|
hint: "VOLTRO_FIELD_DECRYPT_ON_ERROR=null is set — this row was likely encrypted under a different key"
|
|
4410
4410
|
}));
|
|
4411
|
-
},
|
|
4412
|
-
let n = m(e), r = s(t, n,
|
|
4413
|
-
onError:
|
|
4414
|
-
...
|
|
4411
|
+
}, E = (e, t) => {
|
|
4412
|
+
let n = m(e), r = s(t, n, yi(), {
|
|
4413
|
+
onError: ee,
|
|
4414
|
+
...ee === "null" ? { warn: re } : {}
|
|
4415
4415
|
});
|
|
4416
|
-
return
|
|
4416
|
+
return x ? c(r, n, x) : r;
|
|
4417
4417
|
}, ie = (e) => {
|
|
4418
4418
|
let r = e.table, o = e.predicate;
|
|
4419
4419
|
if (!e.crossTenant && i != null && n.schemaRegistry.hasTenant(r)) {
|
|
@@ -4424,13 +4424,13 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4424
4424
|
let e = S("deletedAt");
|
|
4425
4425
|
o = o ? t(o, e) : e;
|
|
4426
4426
|
}
|
|
4427
|
-
return o =
|
|
4427
|
+
return o = Vn(a, r, o), o === e.predicate ? e : {
|
|
4428
4428
|
...e,
|
|
4429
4429
|
predicate: o
|
|
4430
4430
|
};
|
|
4431
4431
|
}, ae = async (t) => {
|
|
4432
4432
|
let n = await e.query(t);
|
|
4433
|
-
return
|
|
4433
|
+
return E(t.table, n);
|
|
4434
4434
|
}, oe = async (e) => ae(ie(e)), se = async (t, r, i) => {
|
|
4435
4435
|
let a = d(t, i);
|
|
4436
4436
|
if (n.schemaRegistry.computedFields(t).size > 0) {
|
|
@@ -4447,27 +4447,43 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4447
4447
|
projection: void 0
|
|
4448
4448
|
}))[0];
|
|
4449
4449
|
if (n === void 0) return null;
|
|
4450
|
-
a = h(t,
|
|
4450
|
+
a = h(t, E(t, [n])[0], a);
|
|
4451
4451
|
}
|
|
4452
4452
|
a = g(t, a);
|
|
4453
|
-
let o = await e.update(t, r,
|
|
4454
|
-
return o === null ? null :
|
|
4455
|
-
}, ce = async (t, r) => n.schemaRegistry.hasSoftDelete(t) ? await e.update(t, r, _()) !== null : e.delete(t, r),
|
|
4453
|
+
let o = await e.update(t, r, C(t, a));
|
|
4454
|
+
return o === null ? null : E(t, [o])[0];
|
|
4455
|
+
}, ce = async (t, r) => n.schemaRegistry.hasSoftDelete(t) ? await e.update(t, r, _()) !== null : e.delete(t, r), ue = async (t, n, r) => e.updateMany(t, C(t, d(t, n)), r), de = async (t, n) => e.deleteMany(t, n), D = (e, r) => i != null && n.schemaRegistry.hasTenant(e) ? t(r, u("tenantId", i)) : r, O = async (e, t, n) => ue(e, t, {
|
|
4456
4456
|
...n,
|
|
4457
|
-
where:
|
|
4458
|
-
}),
|
|
4457
|
+
where: D(e, n.where)
|
|
4458
|
+
}), k = async (e, t) => de(e, {
|
|
4459
4459
|
...t,
|
|
4460
|
-
where:
|
|
4461
|
-
}),
|
|
4460
|
+
where: D(e, t.where)
|
|
4461
|
+
}), fe = ws({
|
|
4462
4462
|
query: ae,
|
|
4463
|
-
updateMany:
|
|
4463
|
+
updateMany: ue,
|
|
4464
4464
|
deleteMany: de,
|
|
4465
4465
|
delete: (t, n) => e.delete(t, n)
|
|
4466
4466
|
}, {
|
|
4467
4467
|
subject: n.subject,
|
|
4468
4468
|
schemaRegistry: n.schemaRegistry,
|
|
4469
4469
|
rowFilter: a
|
|
4470
|
-
})
|
|
4470
|
+
}), pe = ((e, t, n) => t === void 0 ? fe.updateWhere(e) : se(e, t, n)), me = ((e, t) => t === void 0 ? fe.deleteWhere(e) : ce(e, t)), he = async (t, n) => {
|
|
4471
|
+
let r = n.map((e) => o(t, e)), i = r.map((e) => C(t, b(t, e))), a = await p(t, r[0] ?? {}, () => e.insertMany(t, i));
|
|
4472
|
+
return E(t, a);
|
|
4473
|
+
}, ge = (e, t) => {
|
|
4474
|
+
let n = Object.keys(t);
|
|
4475
|
+
if (n.length !== 1) throw Error(`store.links('${e}'): anchor must name exactly one source column, got [${n.join(", ")}]`);
|
|
4476
|
+
let r = n[0], i = t[r], a = m(e);
|
|
4477
|
+
if (a === void 0) throw Error(`store.links('${e}'): unknown table (not registered) — declare it and its relation first`);
|
|
4478
|
+
let o = Object.entries(a.fields).filter(([, e]) => e.type === "reference").map(([e]) => e);
|
|
4479
|
+
if (o.length !== 2) throw Error(`store.links('${e}'): expected a junction with exactly two reference() columns, found ${o.length} [${o.join(", ")}]. Use plain insert/deleteMany for a non-standard junction.`);
|
|
4480
|
+
if (!o.includes(r)) throw Error(`store.links('${e}'): '${r}' is not a reference column of the junction [${o.join(", ")}]`);
|
|
4481
|
+
return {
|
|
4482
|
+
sourceCol: r,
|
|
4483
|
+
sourceId: i,
|
|
4484
|
+
targetCol: o.find((e) => e !== r)
|
|
4485
|
+
};
|
|
4486
|
+
};
|
|
4471
4487
|
return {
|
|
4472
4488
|
query: oe,
|
|
4473
4489
|
one: (async (e) => {
|
|
@@ -4494,35 +4510,67 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4494
4510
|
take: 1
|
|
4495
4511
|
}))[0] ?? null),
|
|
4496
4512
|
insert: async (t, n) => {
|
|
4497
|
-
let r = o(t, n), i = await p(t, r, () => e.insert(t,
|
|
4498
|
-
return
|
|
4513
|
+
let r = o(t, n), i = await p(t, r, () => e.insert(t, C(t, b(t, r))));
|
|
4514
|
+
return E(t, [i])[0];
|
|
4499
4515
|
},
|
|
4500
|
-
insertMany: async (
|
|
4501
|
-
|
|
4502
|
-
|
|
4516
|
+
insertMany: (async (e, t) => he(e, t)),
|
|
4517
|
+
links: (e, n) => {
|
|
4518
|
+
let { sourceCol: r, sourceId: i, targetCol: a } = ge(e, n), o = async () => (await oe({
|
|
4519
|
+
table: e,
|
|
4520
|
+
predicate: u(r, i),
|
|
4521
|
+
order: [],
|
|
4522
|
+
projection: void 0,
|
|
4523
|
+
skip: void 0,
|
|
4524
|
+
take: void 0
|
|
4525
|
+
})).map((e) => String(e[a])), s = async (t) => {
|
|
4526
|
+
t.length !== 0 && await he(e, t.map((e) => ({
|
|
4527
|
+
[r]: i,
|
|
4528
|
+
[a]: e
|
|
4529
|
+
})));
|
|
4530
|
+
}, c = async (n) => {
|
|
4531
|
+
n.length !== 0 && await k(e, { where: t(u(r, i), y(a, n)) });
|
|
4532
|
+
};
|
|
4533
|
+
return {
|
|
4534
|
+
list: o,
|
|
4535
|
+
set: async (e) => {
|
|
4536
|
+
let t = new Set(e), n = new Set(await o()), r = [...t].filter((e) => !n.has(e)), i = [...n].filter((e) => !t.has(e));
|
|
4537
|
+
return await c(i), await s(r), {
|
|
4538
|
+
added: r,
|
|
4539
|
+
removed: i
|
|
4540
|
+
};
|
|
4541
|
+
},
|
|
4542
|
+
add: async (e) => {
|
|
4543
|
+
let t = new Set(await o()), n = [...new Set(e)].filter((e) => !t.has(e));
|
|
4544
|
+
return await s(n), n;
|
|
4545
|
+
},
|
|
4546
|
+
remove: async (e) => {
|
|
4547
|
+
let t = new Set(await o()), n = [...new Set(e)].filter((e) => t.has(e));
|
|
4548
|
+
return await c(n), n;
|
|
4549
|
+
}
|
|
4550
|
+
};
|
|
4503
4551
|
},
|
|
4504
4552
|
patchJson: async (t, n, r, i) => {
|
|
4505
4553
|
let a = await e.patchJson(t, n, r, i);
|
|
4506
|
-
return a === null ? null :
|
|
4554
|
+
return a === null ? null : E(t, [a])[0];
|
|
4507
4555
|
},
|
|
4508
|
-
select:
|
|
4509
|
-
update:
|
|
4510
|
-
delete:
|
|
4556
|
+
select: fe.select,
|
|
4557
|
+
update: pe,
|
|
4558
|
+
delete: me,
|
|
4511
4559
|
applyDefined: Ds,
|
|
4512
4560
|
hardDelete: async (t, n) => e.delete(t, n),
|
|
4513
|
-
updateMany:
|
|
4514
|
-
deleteMany:
|
|
4561
|
+
updateMany: O,
|
|
4562
|
+
deleteMany: k,
|
|
4515
4563
|
upsert: async (t, n, r) => {
|
|
4516
4564
|
let i = o(t, n);
|
|
4517
4565
|
v(t, i, r.conflictColumns);
|
|
4518
|
-
let a = await p(t, i, () => e.upsert(t,
|
|
4519
|
-
return
|
|
4566
|
+
let a = await p(t, i, () => e.upsert(t, C(t, b(t, i)), r));
|
|
4567
|
+
return E(t, [a])[0];
|
|
4520
4568
|
},
|
|
4521
4569
|
insertIgnore: async (t, n, r) => {
|
|
4522
4570
|
let i = o(t, n);
|
|
4523
4571
|
v(t, i, r.conflictColumns);
|
|
4524
|
-
let a = await p(t, i, () => e.insertIgnore(t,
|
|
4525
|
-
return
|
|
4572
|
+
let a = await p(t, i, () => e.insertIgnore(t, C(t, b(t, i)), r));
|
|
4573
|
+
return E(t, [a])[0];
|
|
4526
4574
|
},
|
|
4527
4575
|
transactional: (t) => e.transactional(async (e) => t(As(e, n))),
|
|
4528
4576
|
...e.raw ? { raw: e.raw.bind(e) } : {},
|
|
@@ -4530,30 +4578,47 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4530
4578
|
injectExternalChange: (t) => e.injectExternalChange(t),
|
|
4531
4579
|
...e.changeScope === void 0 ? {} : { changeScope: e.changeScope }
|
|
4532
4580
|
};
|
|
4533
|
-
}, js =
|
|
4534
|
-
|
|
4535
|
-
|
|
4536
|
-
|
|
4581
|
+
}, js = (e, t) => {
|
|
4582
|
+
if (t === void 0 || t.length === 0) return e;
|
|
4583
|
+
let n = { ...e };
|
|
4584
|
+
for (let e of t) delete n[e];
|
|
4585
|
+
return n;
|
|
4586
|
+
}, Ms = (e, t) => t.length === 0 ? e : e.map((e) => js(e, t)), Ns = {
|
|
4587
|
+
list: (e, t = {}) => async (n, r) => Ms(await r.store.select(e).all(), t.redact ?? []),
|
|
4588
|
+
getById: (e, t = {}) => async (n, r) => {
|
|
4589
|
+
let i = await r.store.select(e).where("id", n.id).first();
|
|
4590
|
+
return i === null ? null : js(i, t.redact);
|
|
4591
|
+
},
|
|
4592
|
+
create: (e, t = {}) => async (n, r) => js(await r.store.insert(e, n), t.redact),
|
|
4593
|
+
update: (e, t = {}) => async (n, r) => {
|
|
4594
|
+
let { id: i, ...a } = n, o = await r.store.update(e, i, a);
|
|
4595
|
+
return o === null ? null : js(o, t.redact);
|
|
4596
|
+
},
|
|
4597
|
+
remove: (e) => async (t, n) => ({ deleted: await n.store.delete(e, t.id) })
|
|
4598
|
+
}, Ps = class extends L.TaggedError()("CircuitOpen", {
|
|
4599
|
+
name: L.String,
|
|
4600
|
+
retryAfterMs: L.Number
|
|
4601
|
+
}) {}, Fs = {
|
|
4537
4602
|
tag: "closed",
|
|
4538
4603
|
failureCount: 0,
|
|
4539
4604
|
halfOpenSuccesses: 0,
|
|
4540
4605
|
openedAt: 0
|
|
4541
|
-
},
|
|
4542
|
-
let t = e.name ?? "circuit", n = We.toMillis(We.decode(e.resetTimeout)), r = e.halfOpenSuccessThreshold ?? 1, i = e.isFailure ?? (() => !0), a = yield*
|
|
4543
|
-
let e = yield*
|
|
4606
|
+
}, Is = { make: (e) => N.gen(function* () {
|
|
4607
|
+
let t = e.name ?? "circuit", n = We.toMillis(We.decode(e.resetTimeout)), r = e.halfOpenSuccessThreshold ?? 1, i = e.isFailure ?? (() => !0), a = yield* I.make(Fs), o = N.gen(function* () {
|
|
4608
|
+
let e = yield* I.get(a);
|
|
4544
4609
|
if (e.tag === "half-open") {
|
|
4545
4610
|
let t = e.halfOpenSuccesses + 1;
|
|
4546
|
-
yield*
|
|
4611
|
+
yield* I.set(a, t >= r ? Fs : {
|
|
4547
4612
|
...e,
|
|
4548
4613
|
halfOpenSuccesses: t
|
|
4549
4614
|
});
|
|
4550
4615
|
return;
|
|
4551
4616
|
}
|
|
4552
|
-
e.failureCount !== 0 && (yield*
|
|
4617
|
+
e.failureCount !== 0 && (yield* I.set(a, Fs));
|
|
4553
4618
|
}), s = N.gen(function* () {
|
|
4554
|
-
let t = yield*
|
|
4619
|
+
let t = yield* Be.currentTimeMillis, n = yield* I.get(a);
|
|
4555
4620
|
if (n.tag === "half-open" || n.tag === "open") {
|
|
4556
|
-
yield*
|
|
4621
|
+
yield* I.set(a, {
|
|
4557
4622
|
tag: "open",
|
|
4558
4623
|
failureCount: e.failureThreshold,
|
|
4559
4624
|
halfOpenSuccesses: 0,
|
|
@@ -4562,7 +4627,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4562
4627
|
return;
|
|
4563
4628
|
}
|
|
4564
4629
|
let r = n.failureCount + 1;
|
|
4565
|
-
yield*
|
|
4630
|
+
yield* I.set(a, r >= e.failureThreshold ? {
|
|
4566
4631
|
tag: "open",
|
|
4567
4632
|
failureCount: r,
|
|
4568
4633
|
halfOpenSuccesses: 0,
|
|
@@ -4572,10 +4637,10 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4572
4637
|
failureCount: r
|
|
4573
4638
|
});
|
|
4574
4639
|
}), c = N.gen(function* () {
|
|
4575
|
-
let e = yield*
|
|
4640
|
+
let e = yield* I.get(a);
|
|
4576
4641
|
if (e.tag !== "open") return null;
|
|
4577
|
-
let t = (yield*
|
|
4578
|
-
return t >= n ? (yield*
|
|
4642
|
+
let t = (yield* Be.currentTimeMillis) - e.openedAt;
|
|
4643
|
+
return t >= n ? (yield* I.set(a, {
|
|
4579
4644
|
tag: "half-open",
|
|
4580
4645
|
failureCount: 0,
|
|
4581
4646
|
halfOpenSuccesses: 0,
|
|
@@ -4584,27 +4649,27 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4584
4649
|
}), l = (e) => N.gen(function* () {
|
|
4585
4650
|
let n = yield* c;
|
|
4586
4651
|
return n === null ? yield* e.pipe(N.tap(() => o), N.tapErrorCause((e) => {
|
|
4587
|
-
if (
|
|
4588
|
-
let t =
|
|
4652
|
+
if (M.isInterruptedOnly(e)) return N.void;
|
|
4653
|
+
let t = M.failureOption(e), n = t._tag === "Some" ? t.value : void 0;
|
|
4589
4654
|
return i(n) ? s : N.void;
|
|
4590
|
-
})) : yield* N.fail(new
|
|
4655
|
+
})) : yield* N.fail(new Ps({
|
|
4591
4656
|
name: t,
|
|
4592
4657
|
retryAfterMs: n
|
|
4593
4658
|
}));
|
|
4594
4659
|
}), u = ((e) => l(e));
|
|
4595
4660
|
return Object.defineProperty(u, "state", {
|
|
4596
|
-
value:
|
|
4661
|
+
value: I.get(a).pipe(N.map((e) => e.tag)),
|
|
4597
4662
|
enumerable: !0
|
|
4598
4663
|
}), Object.defineProperty(u, "reset", {
|
|
4599
|
-
value:
|
|
4664
|
+
value: I.set(a, Fs),
|
|
4600
4665
|
enumerable: !0
|
|
4601
4666
|
}), u;
|
|
4602
|
-
}) },
|
|
4603
|
-
|
|
4604
|
-
},
|
|
4605
|
-
|
|
4606
|
-
},
|
|
4607
|
-
let n = t.scopes === void 0 ?
|
|
4667
|
+
}) }, Ls, Rs = (e) => {
|
|
4668
|
+
Ls = e;
|
|
4669
|
+
}, zs = () => {
|
|
4670
|
+
Ls = void 0;
|
|
4671
|
+
}, Bs = () => Ls, Vs = async (e, t = {}) => {
|
|
4672
|
+
let n = t.scopes === void 0 ? Re(t.id ?? "system") : Re(t.id ?? "system", t.scopes), r = t.store ?? Ls?.dataStore, i = t.schemaRegistry ?? Ls?.schemaRegistry, a = t.dialect ?? Ls?.dialect;
|
|
4608
4673
|
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.");
|
|
4609
4674
|
return e({
|
|
4610
4675
|
subject: n,
|
|
@@ -4614,7 +4679,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4614
4679
|
...a === void 0 ? {} : { dialect: a }
|
|
4615
4680
|
})
|
|
4616
4681
|
});
|
|
4617
|
-
},
|
|
4682
|
+
}, Hs = (e) => {
|
|
4618
4683
|
let { currentRegion: t, replicaRegions: n, inner: r } = e, i = (e) => {
|
|
4619
4684
|
if (t === void 0) return {
|
|
4620
4685
|
sameRegion: [],
|
|
@@ -4642,7 +4707,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4642
4707
|
return r.loadSnapshot();
|
|
4643
4708
|
}
|
|
4644
4709
|
};
|
|
4645
|
-
},
|
|
4710
|
+
}, Us = (e = process.env) => {
|
|
4646
4711
|
for (let t of [
|
|
4647
4712
|
"VOLTRO_REGION",
|
|
4648
4713
|
"AWS_REGION",
|
|
@@ -4654,7 +4719,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4654
4719
|
let n = e[t];
|
|
4655
4720
|
if (typeof n == "string" && n.length > 0) return n;
|
|
4656
4721
|
}
|
|
4657
|
-
},
|
|
4722
|
+
}, Ws = () => {
|
|
4658
4723
|
let e = {
|
|
4659
4724
|
primary: 0,
|
|
4660
4725
|
lagByReplica: /* @__PURE__ */ new Map()
|
|
@@ -4679,8 +4744,8 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4679
4744
|
e.lagByReplica.set(t, n);
|
|
4680
4745
|
}
|
|
4681
4746
|
};
|
|
4682
|
-
},
|
|
4683
|
-
let t =
|
|
4747
|
+
}, Gs = Symbol.for("@voltro/ScheduleDefinition"), Ks = (e) => typeof e == "object" && !!e && Gs in e, qs = 30 * 6e4, Js = (e) => {
|
|
4748
|
+
let t = He.parse(e.cron, e.timezone);
|
|
4684
4749
|
if (Ge.isLeft(t)) throw Error(`defineSchedule("${e.name}"): invalid cron expression "${e.cron}" (tz="${e.timezone}") — ${String(t.left)}`);
|
|
4685
4750
|
if (!e.timezone || e.timezone.trim() === "") throw Error(`defineSchedule("${e.name}"): timezone is required (e.g. "UTC", "Europe/Berlin")`);
|
|
4686
4751
|
if (e.handler === void 0 && e.workflow === void 0) throw Error(`defineSchedule("${e.name}"): define either handler or workflow`);
|
|
@@ -4688,18 +4753,18 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4688
4753
|
...e,
|
|
4689
4754
|
onOverlap: e.onOverlap ?? "skip",
|
|
4690
4755
|
backfill: e.backfill ?? "skip",
|
|
4691
|
-
maxRuntimeMs: e.maxRuntimeMs ??
|
|
4692
|
-
[
|
|
4756
|
+
maxRuntimeMs: e.maxRuntimeMs ?? qs,
|
|
4757
|
+
[Gs]: !0
|
|
4693
4758
|
};
|
|
4694
|
-
},
|
|
4759
|
+
}, Ys = (e) => He.unsafeParse(e.cron, e.timezone), Xs = (e, t = /* @__PURE__ */ new Date()) => He.next(Ys(e), t), Z = "_voltro_wakeups", Zs = (e) => `${e.tenantId}:${e.kind}:${e.refId}`, Qs = (e) => ({
|
|
4695
4760
|
tenantId: String(e.tenantId),
|
|
4696
4761
|
kind: String(e.kind),
|
|
4697
4762
|
refId: String(e.refId),
|
|
4698
4763
|
wakeAt: e.wakeAt instanceof Date ? e.wakeAt : new Date(String(e.wakeAt)),
|
|
4699
4764
|
status: e.status === "fired" ? "fired" : "pending"
|
|
4700
|
-
}),
|
|
4765
|
+
}), $s = async (e, t) => {
|
|
4701
4766
|
await e.upsert(Z, {
|
|
4702
|
-
id:
|
|
4767
|
+
id: Zs(t),
|
|
4703
4768
|
tenantId: t.tenantId,
|
|
4704
4769
|
kind: t.kind,
|
|
4705
4770
|
refId: t.refId,
|
|
@@ -4709,7 +4774,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4709
4774
|
conflictColumns: ["id"],
|
|
4710
4775
|
update: ["wakeAt", "status"]
|
|
4711
4776
|
});
|
|
4712
|
-
},
|
|
4777
|
+
}, ec = async (e, t) => e.delete(Z, Zs(t)), tc = async (e, t) => await e.update(Z, Zs(t), { status: "fired" }) !== null, nc = (e, t) => ({ and: [{
|
|
4713
4778
|
column: "id",
|
|
4714
4779
|
op: "eq",
|
|
4715
4780
|
value: e
|
|
@@ -4717,16 +4782,16 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4717
4782
|
column: "status",
|
|
4718
4783
|
op: "eq",
|
|
4719
4784
|
value: t
|
|
4720
|
-
}] }),
|
|
4721
|
-
await e.updateMany(Z, { status: "pending" }, { where:
|
|
4722
|
-
},
|
|
4785
|
+
}] }), rc = async (e, t) => await e.updateMany(Z, { status: "fired" }, { where: nc(Zs(t), "pending") }) > 0, ic = async (e, t) => {
|
|
4786
|
+
await e.updateMany(Z, { status: "pending" }, { where: nc(Zs(t), "fired") });
|
|
4787
|
+
}, ac = {
|
|
4723
4788
|
column: "status",
|
|
4724
4789
|
op: "eq",
|
|
4725
4790
|
value: "pending"
|
|
4726
|
-
},
|
|
4791
|
+
}, oc = async (e, t) => {
|
|
4727
4792
|
let n = {
|
|
4728
4793
|
table: Z,
|
|
4729
|
-
predicate:
|
|
4794
|
+
predicate: ac,
|
|
4730
4795
|
order: [{
|
|
4731
4796
|
column: "wakeAt",
|
|
4732
4797
|
direction: "asc"
|
|
@@ -4735,18 +4800,18 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4735
4800
|
skip: void 0,
|
|
4736
4801
|
projection: void 0
|
|
4737
4802
|
};
|
|
4738
|
-
return (await e.query(n)).map(
|
|
4739
|
-
},
|
|
4740
|
-
let r = await
|
|
4803
|
+
return (await e.query(n)).map(Qs);
|
|
4804
|
+
}, sc = async (e, t, n = 500) => {
|
|
4805
|
+
let r = await oc(e, n), i = t.getTime();
|
|
4741
4806
|
return r.filter((e) => e.wakeAt.getTime() <= i);
|
|
4742
|
-
},
|
|
4807
|
+
}, cc = async (e) => (await oc(e, 1))[0] ?? null, lc = {
|
|
4743
4808
|
column: "status",
|
|
4744
4809
|
op: "eq",
|
|
4745
4810
|
value: "fired"
|
|
4746
|
-
},
|
|
4811
|
+
}, uc = async (e, t = {}) => {
|
|
4747
4812
|
let n = {
|
|
4748
4813
|
table: Z,
|
|
4749
|
-
predicate:
|
|
4814
|
+
predicate: lc,
|
|
4750
4815
|
order: [{
|
|
4751
4816
|
column: "wakeAt",
|
|
4752
4817
|
direction: "asc"
|
|
@@ -4757,12 +4822,12 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4757
4822
|
}, r = await e.query(n), i = t.firedOlderThan?.getTime(), a = 0;
|
|
4758
4823
|
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++;
|
|
4759
4824
|
return a;
|
|
4760
|
-
},
|
|
4825
|
+
}, dc = qi, fc = "default", pc = {
|
|
4761
4826
|
kind: "single",
|
|
4762
4827
|
tryClaim: async () => !0
|
|
4763
|
-
},
|
|
4828
|
+
}, mc = "_voltro_schedule_claims", hc = (e, t, n) => {
|
|
4764
4829
|
let r = async (t) => (await e.query({
|
|
4765
|
-
table:
|
|
4830
|
+
table: mc,
|
|
4766
4831
|
order: [],
|
|
4767
4832
|
predicate: void 0,
|
|
4768
4833
|
projection: ["id"],
|
|
@@ -4777,7 +4842,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4777
4842
|
if (await r(s)) return !1;
|
|
4778
4843
|
} catch {}
|
|
4779
4844
|
try {
|
|
4780
|
-
return await e.insert(
|
|
4845
|
+
return await e.insert(mc, {
|
|
4781
4846
|
id: s,
|
|
4782
4847
|
scheduleName: i,
|
|
4783
4848
|
bucket: o,
|
|
@@ -4795,12 +4860,12 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4795
4860
|
}
|
|
4796
4861
|
}
|
|
4797
4862
|
};
|
|
4798
|
-
},
|
|
4863
|
+
}, gc = "_voltro_schedule_runs", _c = async (e, t) => {
|
|
4799
4864
|
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) => {
|
|
4800
|
-
s?.(e,
|
|
4865
|
+
s?.(e, yc(t));
|
|
4801
4866
|
}, _ = async (e, t, r, i, s, c) => {
|
|
4802
4867
|
try {
|
|
4803
|
-
let o = `sr_${
|
|
4868
|
+
let o = `sr_${_e()}`, l = await n.insert(gc, {
|
|
4804
4869
|
id: o,
|
|
4805
4870
|
name: e.name,
|
|
4806
4871
|
status: i,
|
|
@@ -4825,7 +4890,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4825
4890
|
}
|
|
4826
4891
|
}, v = async (e, t) => {
|
|
4827
4892
|
try {
|
|
4828
|
-
let r = await n.update(
|
|
4893
|
+
let r = await n.update(gc, e, t);
|
|
4829
4894
|
r && g("update", r);
|
|
4830
4895
|
} catch (t) {
|
|
4831
4896
|
o.warn("schedule: failed to record run finish", {
|
|
@@ -4836,7 +4901,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4836
4901
|
}, y = async (e) => {
|
|
4837
4902
|
try {
|
|
4838
4903
|
let t = await n.query({
|
|
4839
|
-
table:
|
|
4904
|
+
table: gc,
|
|
4840
4905
|
predicate: {
|
|
4841
4906
|
_tag: "leaf",
|
|
4842
4907
|
column: "status",
|
|
@@ -4871,7 +4936,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4871
4936
|
scheduleName: e.name,
|
|
4872
4937
|
trigger: n,
|
|
4873
4938
|
runId: s,
|
|
4874
|
-
subject:
|
|
4939
|
+
subject: dc
|
|
4875
4940
|
})
|
|
4876
4941
|
};
|
|
4877
4942
|
try {
|
|
@@ -4902,7 +4967,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4902
4967
|
let n = Q(t).includes("exceeded maxRuntimeMs");
|
|
4903
4968
|
s && await v(s, {
|
|
4904
4969
|
status: "failed",
|
|
4905
|
-
errorTag: n ? "timeout" :
|
|
4970
|
+
errorTag: n ? "timeout" : vc(t),
|
|
4906
4971
|
errorMessage: Q(t),
|
|
4907
4972
|
completedAt: /* @__PURE__ */ new Date(),
|
|
4908
4973
|
durationMs: Date.now() - l
|
|
@@ -4910,7 +4975,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4910
4975
|
name: e.name,
|
|
4911
4976
|
reason: Q(t),
|
|
4912
4977
|
timeout: n
|
|
4913
|
-
}),
|
|
4978
|
+
}), Fe({
|
|
4914
4979
|
error: t,
|
|
4915
4980
|
source: "schedule",
|
|
4916
4981
|
name: e.name,
|
|
@@ -4959,8 +5024,8 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4959
5024
|
}
|
|
4960
5025
|
}, C = async (e) => {
|
|
4961
5026
|
try {
|
|
4962
|
-
let t =
|
|
4963
|
-
await
|
|
5027
|
+
let t = He.next(Ys(e), /* @__PURE__ */ new Date());
|
|
5028
|
+
await $s(n, {
|
|
4964
5029
|
tenantId: u,
|
|
4965
5030
|
kind: "schedule",
|
|
4966
5031
|
refId: e.name,
|
|
@@ -4974,7 +5039,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4974
5039
|
}
|
|
4975
5040
|
}, ee = 2147483647, te = (e) => {
|
|
4976
5041
|
if (m) return;
|
|
4977
|
-
let n =
|
|
5042
|
+
let n = Ys(e), r = He.next(n, /* @__PURE__ */ new Date()), i = () => {
|
|
4978
5043
|
if (m) return;
|
|
4979
5044
|
let n = r.getTime() - Date.now();
|
|
4980
5045
|
if (n > ee) {
|
|
@@ -4991,12 +5056,12 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
4991
5056
|
d.set(e.name, a);
|
|
4992
5057
|
};
|
|
4993
5058
|
i();
|
|
4994
|
-
},
|
|
5059
|
+
}, w = async (e) => {
|
|
4995
5060
|
if (e.backfill === "skip") return;
|
|
4996
5061
|
let r;
|
|
4997
5062
|
try {
|
|
4998
5063
|
let t = (await n.query({
|
|
4999
|
-
table:
|
|
5064
|
+
table: gc,
|
|
5000
5065
|
order: [{
|
|
5001
5066
|
column: "scheduledAt",
|
|
5002
5067
|
direction: "desc"
|
|
@@ -5015,8 +5080,8 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5015
5080
|
return;
|
|
5016
5081
|
}
|
|
5017
5082
|
if (!r) return;
|
|
5018
|
-
let i =
|
|
5019
|
-
for (; s.getTime() < c && a.length < 1e3;) a.push(s), s =
|
|
5083
|
+
let i = Ys(e), a = [], s = He.next(i, r), c = Date.now();
|
|
5084
|
+
for (; s.getTime() < c && a.length < 1e3;) a.push(s), s = He.next(i, s);
|
|
5020
5085
|
if (a.length !== 0) if (o.info("schedule: backfill", {
|
|
5021
5086
|
name: e.name,
|
|
5022
5087
|
missed: a.length,
|
|
@@ -5026,20 +5091,20 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5026
5091
|
let n = a[a.length - 1];
|
|
5027
5092
|
await x(e, n, e.trigger ?? t.defaultTrigger);
|
|
5028
5093
|
} else for (let n of a) await x(e, n, e.trigger ?? t.defaultTrigger);
|
|
5029
|
-
},
|
|
5094
|
+
}, T = e.filter((e) => (e.trigger ?? t.defaultTrigger) === "self");
|
|
5030
5095
|
o.info("scheduler: starting", {
|
|
5031
5096
|
total: e.length,
|
|
5032
|
-
self:
|
|
5033
|
-
external: e.length -
|
|
5097
|
+
self: T.length,
|
|
5098
|
+
external: e.length - T.length,
|
|
5034
5099
|
coordinator: r.kind
|
|
5035
5100
|
});
|
|
5036
|
-
let
|
|
5101
|
+
let ne = (t.armSelf ?? !0) && !l;
|
|
5037
5102
|
if (l) {
|
|
5038
|
-
o.info("scheduler: sleep mode — registering wakeups, not arming timers", { count:
|
|
5039
|
-
for (let e of
|
|
5040
|
-
} else if (
|
|
5041
|
-
for (let e of
|
|
5042
|
-
for (let e of
|
|
5103
|
+
o.info("scheduler: sleep mode — registering wakeups, not arming timers", { count: T.length });
|
|
5104
|
+
for (let e of T) await C(e);
|
|
5105
|
+
} else if (ne) {
|
|
5106
|
+
for (let e of T) await w(e);
|
|
5107
|
+
for (let e of T) te(e);
|
|
5043
5108
|
}
|
|
5044
5109
|
return {
|
|
5045
5110
|
fireNow: async (e, t) => {
|
|
@@ -5060,11 +5125,11 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5060
5125
|
d.clear(), o.info("scheduler: stopped");
|
|
5061
5126
|
}
|
|
5062
5127
|
};
|
|
5063
|
-
}, Q = (e) => e?.message ?? String(e),
|
|
5128
|
+
}, Q = (e) => e?.message ?? String(e), vc = (e) => e && typeof e == "object" && "_tag" in e ? String(e._tag) : null, yc = (e) => {
|
|
5064
5129
|
let t = {};
|
|
5065
5130
|
for (let [n, r] of Object.entries(e)) t[n] = r instanceof Date ? r.toISOString() : r;
|
|
5066
5131
|
return t;
|
|
5067
|
-
},
|
|
5132
|
+
}, bc = (e, t, n, r) => {
|
|
5068
5133
|
let i = !1, a, o = async () => {
|
|
5069
5134
|
if (i) return;
|
|
5070
5135
|
let a = new Date(Math.floor(Date.now() / t) * t), o = !1;
|
|
@@ -5094,96 +5159,96 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5094
5159
|
i || (i = !0, a && clearInterval(a), a = void 0);
|
|
5095
5160
|
}
|
|
5096
5161
|
};
|
|
5097
|
-
},
|
|
5162
|
+
}, xc = (e) => (t, n, r) => bc(t, n, r, e), Sc = D("_voltro_schedule_runs", {
|
|
5098
5163
|
id: v({ prefix: "schrun" }),
|
|
5099
|
-
name:
|
|
5100
|
-
status:
|
|
5164
|
+
name: O(),
|
|
5165
|
+
status: O().oneOf([
|
|
5101
5166
|
"running",
|
|
5102
5167
|
"succeeded",
|
|
5103
5168
|
"failed",
|
|
5104
5169
|
"skipped",
|
|
5105
5170
|
"missed"
|
|
5106
5171
|
]).default("running"),
|
|
5107
|
-
trigger:
|
|
5172
|
+
trigger: O().oneOf([
|
|
5108
5173
|
"self",
|
|
5109
5174
|
"external",
|
|
5110
5175
|
"manual"
|
|
5111
5176
|
]).default("self"),
|
|
5112
|
-
scheduledAt:
|
|
5113
|
-
firedAt:
|
|
5114
|
-
completedAt:
|
|
5177
|
+
scheduledAt: k(),
|
|
5178
|
+
firedAt: k().nullable(),
|
|
5179
|
+
completedAt: k().nullable(),
|
|
5115
5180
|
durationMs: b().nullable(),
|
|
5116
|
-
errorTag:
|
|
5117
|
-
errorMessage:
|
|
5118
|
-
coordinationOutcome:
|
|
5181
|
+
errorTag: O().nullable(),
|
|
5182
|
+
errorMessage: O().nullable(),
|
|
5183
|
+
coordinationOutcome: O().oneOf([
|
|
5119
5184
|
"single",
|
|
5120
5185
|
"wonLock",
|
|
5121
5186
|
"lostLock",
|
|
5122
5187
|
"external",
|
|
5123
5188
|
"cluster"
|
|
5124
5189
|
]).nullable(),
|
|
5125
|
-
replicaId:
|
|
5190
|
+
replicaId: O().nullable(),
|
|
5126
5191
|
result: C().nullable()
|
|
5127
|
-
}).index(["name", "scheduledAt"]).index(["status"]),
|
|
5192
|
+
}).index(["name", "scheduledAt"]).index(["status"]), Cc = D("_voltro_schedule_claims", {
|
|
5128
5193
|
id: v({ prefix: "schclaim" }),
|
|
5129
|
-
scheduleName:
|
|
5130
|
-
bucket:
|
|
5131
|
-
claimedBy:
|
|
5132
|
-
claimedAt:
|
|
5133
|
-
}).index(["scheduleName", "bucket"]).index(["claimedAt"]),
|
|
5194
|
+
scheduleName: O(),
|
|
5195
|
+
bucket: O(),
|
|
5196
|
+
claimedBy: O(),
|
|
5197
|
+
claimedAt: k()
|
|
5198
|
+
}).index(["scheduleName", "bucket"]).index(["claimedAt"]), wc = D("_voltro_traces", {
|
|
5134
5199
|
id: v({ prefix: "span" }),
|
|
5135
|
-
traceId:
|
|
5136
|
-
spanId:
|
|
5137
|
-
parentSpanId:
|
|
5138
|
-
name:
|
|
5139
|
-
kind:
|
|
5200
|
+
traceId: O(),
|
|
5201
|
+
spanId: O(),
|
|
5202
|
+
parentSpanId: O().nullable(),
|
|
5203
|
+
name: O(),
|
|
5204
|
+
kind: O().oneOf([
|
|
5140
5205
|
"internal",
|
|
5141
5206
|
"server",
|
|
5142
5207
|
"client",
|
|
5143
5208
|
"producer",
|
|
5144
5209
|
"consumer"
|
|
5145
5210
|
]).default("internal"),
|
|
5146
|
-
status:
|
|
5211
|
+
status: O().oneOf([
|
|
5147
5212
|
"ok",
|
|
5148
5213
|
"error",
|
|
5149
5214
|
"unset"
|
|
5150
5215
|
]).default("unset"),
|
|
5151
|
-
statusMessage:
|
|
5152
|
-
startedAt:
|
|
5153
|
-
endedAt:
|
|
5216
|
+
statusMessage: O().nullable(),
|
|
5217
|
+
startedAt: k(),
|
|
5218
|
+
endedAt: k(),
|
|
5154
5219
|
durationMs: b(),
|
|
5155
5220
|
attributes: C().nullable(),
|
|
5156
5221
|
events: C().nullable()
|
|
5157
|
-
}).index(["traceId", "startedAt"]).index(["startedAt"]).index(["status"]),
|
|
5222
|
+
}).index(["traceId", "startedAt"]).index(["startedAt"]).index(["status"]), Tc = D("_voltro_undo_log", {
|
|
5158
5223
|
id: v({ prefix: "undo" }),
|
|
5159
|
-
tag:
|
|
5160
|
-
label:
|
|
5161
|
-
subjectId:
|
|
5162
|
-
tenantId:
|
|
5163
|
-
traceId:
|
|
5164
|
-
changes:
|
|
5224
|
+
tag: O(),
|
|
5225
|
+
label: O().nullable(),
|
|
5226
|
+
subjectId: O().nullable(),
|
|
5227
|
+
tenantId: O().nullable(),
|
|
5228
|
+
traceId: O().nullable(),
|
|
5229
|
+
changes: O(),
|
|
5165
5230
|
crossesAction: r().default(!1),
|
|
5166
5231
|
undone: r().default(!1),
|
|
5167
|
-
createdAt:
|
|
5168
|
-
}).index(["subjectId", "createdAt"]).reactive(),
|
|
5232
|
+
createdAt: k().default("now")
|
|
5233
|
+
}).index(["subjectId", "createdAt"]).reactive(), Ec = (e = process.env) => {
|
|
5169
5234
|
let t = (e.VOLTRO_UNDO ?? "").toLowerCase();
|
|
5170
5235
|
return t === "on" || t === "1" || t === "true" ? !0 : t === "off" || t === "0" || t === "false" ? !1 : e.NODE_ENV !== "production";
|
|
5171
|
-
},
|
|
5236
|
+
}, Dc = (e) => e.startsWith("_voltro"), Oc = async (e, t, n) => (await e.query({
|
|
5172
5237
|
table: t,
|
|
5173
5238
|
predicate: u("id", n),
|
|
5174
5239
|
order: []
|
|
5175
|
-
}))[0] ?? null,
|
|
5240
|
+
}))[0] ?? null, kc = (e, t) => new Proxy(e, { get(e, n, r) {
|
|
5176
5241
|
if (n === "insert") return async (n, r) => {
|
|
5177
5242
|
let i = await e.insert(n, r);
|
|
5178
|
-
return
|
|
5243
|
+
return Dc(n) || t({
|
|
5179
5244
|
table: n,
|
|
5180
5245
|
op: "insert",
|
|
5181
5246
|
next: i
|
|
5182
5247
|
}), i;
|
|
5183
5248
|
};
|
|
5184
5249
|
if (n === "update") return async (n, r, i) => {
|
|
5185
|
-
let a =
|
|
5186
|
-
return
|
|
5250
|
+
let a = Dc(n) ? null : await Oc(e, n, r), o = await e.update(n, r, i);
|
|
5251
|
+
return Dc(n) || t({
|
|
5187
5252
|
table: n,
|
|
5188
5253
|
op: "update",
|
|
5189
5254
|
id: r,
|
|
@@ -5192,8 +5257,8 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5192
5257
|
}), o;
|
|
5193
5258
|
};
|
|
5194
5259
|
if (n === "delete") return async (n, r) => {
|
|
5195
|
-
let i =
|
|
5196
|
-
return !
|
|
5260
|
+
let i = Dc(n) ? null : await Oc(e, n, r), a = await e.delete(n, r);
|
|
5261
|
+
return !Dc(n) && a && t({
|
|
5197
5262
|
table: n,
|
|
5198
5263
|
op: "delete",
|
|
5199
5264
|
id: r,
|
|
@@ -5202,10 +5267,10 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5202
5267
|
};
|
|
5203
5268
|
let i = Reflect.get(e, n, r);
|
|
5204
5269
|
return typeof i == "function" ? i.bind(e) : i;
|
|
5205
|
-
} }),
|
|
5270
|
+
} }), Ac = (e) => {
|
|
5206
5271
|
let t = [];
|
|
5207
5272
|
return {
|
|
5208
|
-
tx:
|
|
5273
|
+
tx: kc(e, (e) => t.push(e)),
|
|
5209
5274
|
persist: async (e, n) => {
|
|
5210
5275
|
if (t.length === 0 || n.tag.startsWith("__voltro")) return;
|
|
5211
5276
|
let r = n.subject;
|
|
@@ -5221,14 +5286,14 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5221
5286
|
});
|
|
5222
5287
|
}
|
|
5223
5288
|
};
|
|
5224
|
-
},
|
|
5289
|
+
}, jc = (e) => {
|
|
5225
5290
|
if (e.id !== void 0) return e.id;
|
|
5226
5291
|
let t = e.next?.id;
|
|
5227
5292
|
if (typeof t == "string") return t;
|
|
5228
5293
|
let n = e.prev?.id;
|
|
5229
5294
|
return typeof n == "string" ? n : void 0;
|
|
5230
|
-
},
|
|
5231
|
-
let t =
|
|
5295
|
+
}, Mc = (e) => {
|
|
5296
|
+
let t = jc(e);
|
|
5232
5297
|
switch (e.op) {
|
|
5233
5298
|
case "insert": return t === void 0 ? null : {
|
|
5234
5299
|
table: e.table,
|
|
@@ -5252,28 +5317,28 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5252
5317
|
row: e.prev
|
|
5253
5318
|
};
|
|
5254
5319
|
}
|
|
5255
|
-
},
|
|
5256
|
-
if (e.crossesAction) throw new
|
|
5320
|
+
}, Nc = (e) => {
|
|
5321
|
+
if (e.crossesAction) throw new Pc(e.invocationId, "action");
|
|
5257
5322
|
let t = [];
|
|
5258
5323
|
for (let n = e.changes.length - 1; n >= 0; --n) {
|
|
5259
|
-
let r =
|
|
5324
|
+
let r = Mc(e.changes[n]);
|
|
5260
5325
|
r !== null && t.push(r);
|
|
5261
5326
|
}
|
|
5262
5327
|
return t;
|
|
5263
|
-
},
|
|
5328
|
+
}, Pc = class extends Error {
|
|
5264
5329
|
invocationId;
|
|
5265
5330
|
boundary;
|
|
5266
5331
|
_tag = "UndoBoundaryError";
|
|
5267
5332
|
constructor(e, t) {
|
|
5268
5333
|
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";
|
|
5269
5334
|
}
|
|
5270
|
-
},
|
|
5335
|
+
}, Fc = (e, t, n = ["updatedAt", "updatedBy"]) => {
|
|
5271
5336
|
if (t == null) return e == null;
|
|
5272
5337
|
if (e == null) return !1;
|
|
5273
5338
|
let r = new Set(n);
|
|
5274
5339
|
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;
|
|
5275
5340
|
return !0;
|
|
5276
|
-
},
|
|
5341
|
+
}, Ic = class {
|
|
5277
5342
|
capacity;
|
|
5278
5343
|
done = [];
|
|
5279
5344
|
undone = [];
|
|
@@ -5309,7 +5374,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5309
5374
|
redo: [...this.undone]
|
|
5310
5375
|
};
|
|
5311
5376
|
}
|
|
5312
|
-
},
|
|
5377
|
+
}, Lc = (e, t = /* @__PURE__ */ new Set()) => e.op === "insert" ? {
|
|
5313
5378
|
table: e.table,
|
|
5314
5379
|
op: "insert",
|
|
5315
5380
|
next: e.new ?? null
|
|
@@ -5326,7 +5391,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5326
5391
|
table: e.table,
|
|
5327
5392
|
op: "delete",
|
|
5328
5393
|
prev: e.old ?? null
|
|
5329
|
-
},
|
|
5394
|
+
}, Rc = async (e, t) => {
|
|
5330
5395
|
switch (t.op) {
|
|
5331
5396
|
case "delete":
|
|
5332
5397
|
await e.delete(t.table, t.id);
|
|
@@ -5344,21 +5409,21 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5344
5409
|
await e.insert(t.table, t.row);
|
|
5345
5410
|
return;
|
|
5346
5411
|
}
|
|
5347
|
-
},
|
|
5348
|
-
for (let n of t) await
|
|
5349
|
-
},
|
|
5412
|
+
}, zc = async (e, t) => {
|
|
5413
|
+
for (let n of t) await Rc(e, n);
|
|
5414
|
+
}, Bc = (e) => e.request?.subject?.id ?? null, Vc = (e) => e === !0 || e === 1, Hc = async (e, t, n) => (await e.query({
|
|
5350
5415
|
table: t,
|
|
5351
5416
|
predicate: u("id", n),
|
|
5352
5417
|
order: []
|
|
5353
|
-
}))[0] ?? null,
|
|
5418
|
+
}))[0] ?? null, Uc = (e) => {
|
|
5354
5419
|
try {
|
|
5355
5420
|
let t = JSON.parse(String(e ?? "[]"));
|
|
5356
5421
|
return Array.isArray(t) ? t : [];
|
|
5357
5422
|
} catch {
|
|
5358
5423
|
return [];
|
|
5359
5424
|
}
|
|
5360
|
-
},
|
|
5361
|
-
let n =
|
|
5425
|
+
}, Wc = (e) => e.id ?? e.next?.id ?? e.prev?.id, Gc = async (e, t) => {
|
|
5426
|
+
let n = Bc(t);
|
|
5362
5427
|
return [...await t.store.query({
|
|
5363
5428
|
table: "_voltro_undo_log",
|
|
5364
5429
|
predicate: u("subjectId", n),
|
|
@@ -5367,68 +5432,68 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5367
5432
|
id: String(e.id),
|
|
5368
5433
|
tag: String(e.tag ?? ""),
|
|
5369
5434
|
label: e.label ?? null,
|
|
5370
|
-
undone:
|
|
5371
|
-
crossesAction:
|
|
5435
|
+
undone: Vc(e.undone),
|
|
5436
|
+
crossesAction: Vc(e.crossesAction),
|
|
5372
5437
|
createdAt: String(e.createdAt ?? "")
|
|
5373
5438
|
}));
|
|
5374
|
-
},
|
|
5375
|
-
let n = await
|
|
5376
|
-
if (!n) throw new
|
|
5377
|
-
if ((n.subjectId ?? null) !==
|
|
5439
|
+
}, Kc = async (e, t) => {
|
|
5440
|
+
let n = await Hc(t.store, "_voltro_undo_log", e.invocationId);
|
|
5441
|
+
if (!n) throw new Oe({ invocationId: e.invocationId });
|
|
5442
|
+
if ((n.subjectId ?? null) !== Bc(t)) throw new De({ invocationId: e.invocationId });
|
|
5378
5443
|
return n;
|
|
5379
|
-
},
|
|
5380
|
-
let n = await
|
|
5381
|
-
if (
|
|
5382
|
-
if (
|
|
5444
|
+
}, qc = async (e, t) => {
|
|
5445
|
+
let n = await Kc(e, t);
|
|
5446
|
+
if (Vc(n.undone)) return { ok: !0 };
|
|
5447
|
+
if (Vc(n.crossesAction)) throw new Ee({
|
|
5383
5448
|
invocationId: e.invocationId,
|
|
5384
5449
|
reason: "action"
|
|
5385
5450
|
});
|
|
5386
|
-
let r =
|
|
5451
|
+
let r = Uc(n.changes);
|
|
5387
5452
|
for (let n of r) {
|
|
5388
|
-
let r =
|
|
5389
|
-
if (r !== void 0 && !
|
|
5453
|
+
let r = Wc(n);
|
|
5454
|
+
if (r !== void 0 && !Fc(await Hc(t.store, n.table, r), n.next ?? null)) throw new Ee({
|
|
5390
5455
|
invocationId: e.invocationId,
|
|
5391
5456
|
reason: "conflict"
|
|
5392
5457
|
});
|
|
5393
5458
|
}
|
|
5394
5459
|
let i = {
|
|
5395
5460
|
invocationId: e.invocationId,
|
|
5396
|
-
subject:
|
|
5461
|
+
subject: Bc(t),
|
|
5397
5462
|
changes: r,
|
|
5398
5463
|
crossesAction: !1
|
|
5399
5464
|
};
|
|
5400
|
-
return await
|
|
5401
|
-
},
|
|
5402
|
-
let n = await
|
|
5403
|
-
if (!
|
|
5404
|
-
for (let e of
|
|
5405
|
-
let n =
|
|
5465
|
+
return await zc(t.store, Nc(i)), await t.store.update("_voltro_undo_log", e.invocationId, { undone: !0 }), { ok: !0 };
|
|
5466
|
+
}, Jc = async (e, t) => {
|
|
5467
|
+
let n = await Kc(e, t);
|
|
5468
|
+
if (!Vc(n.undone)) return { ok: !0 };
|
|
5469
|
+
for (let e of Uc(n.changes)) {
|
|
5470
|
+
let n = Wc(e);
|
|
5406
5471
|
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);
|
|
5407
5472
|
}
|
|
5408
5473
|
return await t.store.update("_voltro_undo_log", e.invocationId, { undone: !1 }), { ok: !0 };
|
|
5409
|
-
},
|
|
5474
|
+
}, Yc = (e = process.env) => {
|
|
5410
5475
|
let t = (e.VOLTRO_TIMELINE ?? "").toLowerCase();
|
|
5411
5476
|
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";
|
|
5412
|
-
},
|
|
5477
|
+
}, Xc = /pass(word)?|secret|token|api[_-]?key|authorization|cookie|ssn|credit[_-]?card|card[_-]?number|cvv|encrypted/i, Zc = "«redacted»", Qc = (e) => {
|
|
5413
5478
|
if (e == null) return null;
|
|
5414
5479
|
let t = {};
|
|
5415
|
-
for (let [n, r] of Object.entries(e)) t[n] =
|
|
5480
|
+
for (let [n, r] of Object.entries(e)) t[n] = Xc.test(n) ? Zc : r;
|
|
5416
5481
|
return t;
|
|
5417
|
-
},
|
|
5482
|
+
}, $c = (e) => {
|
|
5418
5483
|
let t = e?.id;
|
|
5419
5484
|
return typeof t == "string" ? t : void 0;
|
|
5420
|
-
},
|
|
5485
|
+
}, el = (e, t) => {
|
|
5421
5486
|
if (t.op === "insert") {
|
|
5422
|
-
let n =
|
|
5487
|
+
let n = $c(t.new);
|
|
5423
5488
|
return n === void 0 ? e : e.filter((e) => e.id !== n);
|
|
5424
5489
|
}
|
|
5425
5490
|
if (t.op === "update") {
|
|
5426
5491
|
if (t.old == null) return e;
|
|
5427
|
-
let n =
|
|
5492
|
+
let n = $c(t.new) ?? $c(t.old);
|
|
5428
5493
|
return e.map((e) => e.id === n ? t.old : e);
|
|
5429
5494
|
}
|
|
5430
5495
|
return t.old == null ? e : [...e, t.old];
|
|
5431
|
-
},
|
|
5496
|
+
}, tl = class {
|
|
5432
5497
|
mode;
|
|
5433
5498
|
capacity;
|
|
5434
5499
|
now;
|
|
@@ -5448,8 +5513,8 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5448
5513
|
ts: this.now(),
|
|
5449
5514
|
table: e.table,
|
|
5450
5515
|
op: e.op,
|
|
5451
|
-
old:
|
|
5452
|
-
new:
|
|
5516
|
+
old: Qc(e.old),
|
|
5517
|
+
new: Qc(e.new),
|
|
5453
5518
|
tenantId: n
|
|
5454
5519
|
}), this.ring.length > this.capacity && this.ring.shift(), t;
|
|
5455
5520
|
}
|
|
@@ -5462,23 +5527,23 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5462
5527
|
}
|
|
5463
5528
|
replay(e, t, n) {
|
|
5464
5529
|
let r = this.ring.filter((n) => n.table === e && n.seq > t).sort((e, t) => t.seq - e.seq), i = n;
|
|
5465
|
-
for (let e of r) i =
|
|
5530
|
+
for (let e of r) i = el(i, e);
|
|
5466
5531
|
return i;
|
|
5467
5532
|
}
|
|
5468
|
-
},
|
|
5469
|
-
|
|
5470
|
-
},
|
|
5471
|
-
let t =
|
|
5533
|
+
}, nl, rl = () => (nl === void 0 && (nl = new tl(Yc())), nl), il = (e) => {
|
|
5534
|
+
nl = e;
|
|
5535
|
+
}, al = (e) => {
|
|
5536
|
+
let t = rl();
|
|
5472
5537
|
if (t.enabled) try {
|
|
5473
5538
|
t.record(e);
|
|
5474
5539
|
} catch {}
|
|
5475
|
-
},
|
|
5540
|
+
}, ol = /* @__PURE__ */ new Set([
|
|
5476
5541
|
"count",
|
|
5477
5542
|
"sum",
|
|
5478
5543
|
"avg",
|
|
5479
5544
|
"min",
|
|
5480
5545
|
"max"
|
|
5481
|
-
]),
|
|
5546
|
+
]), sl = (e) => {
|
|
5482
5547
|
if (e.joins !== void 0 && e.joins.length > 0) return {
|
|
5483
5548
|
maintainable: !1,
|
|
5484
5549
|
reason: "joins are not maintainable in v1"
|
|
@@ -5500,7 +5565,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5500
5565
|
reason: "v1 maintains exactly one aggregation"
|
|
5501
5566
|
};
|
|
5502
5567
|
let t = e.aggregations[0];
|
|
5503
|
-
return
|
|
5568
|
+
return ol.has(t.op) ? t.op !== "count" && (t.column === void 0 || t.column.length === 0) ? {
|
|
5504
5569
|
maintainable: !1,
|
|
5505
5570
|
reason: `op '${t.op}' requires a column`
|
|
5506
5571
|
} : {
|
|
@@ -5514,7 +5579,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5514
5579
|
maintainable: !1,
|
|
5515
5580
|
reason: `op '${t.op}' is not maintainable`
|
|
5516
5581
|
};
|
|
5517
|
-
},
|
|
5582
|
+
}, cl = "\0", $ = (e, t) => t === void 0 || t.length === 0 ? "" : t.map((t) => JSON.stringify(e[t] ?? null)).join(cl), ll = (e, t) => t === void 0 ? 0 : Number(e[t] ?? 0), ul = (e, t) => {
|
|
5518
5583
|
switch (e.op) {
|
|
5519
5584
|
case "count": return t.count;
|
|
5520
5585
|
case "sum": return t.sum ?? 0;
|
|
@@ -5522,10 +5587,10 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5522
5587
|
case "min":
|
|
5523
5588
|
case "max": return t.count > 0 ? t.extreme ?? null : null;
|
|
5524
5589
|
}
|
|
5525
|
-
},
|
|
5590
|
+
}, dl = (e, t) => {
|
|
5526
5591
|
let n = /* @__PURE__ */ new Map();
|
|
5527
5592
|
for (let r of t) {
|
|
5528
|
-
let t = $(r, e.groupBy), i = n.get(t), a =
|
|
5593
|
+
let t = $(r, e.groupBy), i = n.get(t), a = ll(r, e.column);
|
|
5529
5594
|
if (i === void 0) n.set(t, {
|
|
5530
5595
|
count: 1,
|
|
5531
5596
|
...e.op === "sum" || e.op === "avg" ? { sum: a } : {},
|
|
@@ -5541,10 +5606,10 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5541
5606
|
}
|
|
5542
5607
|
}
|
|
5543
5608
|
return n;
|
|
5544
|
-
},
|
|
5609
|
+
}, fl = (e, t) => [...t.entries()].map(([t, n]) => ({
|
|
5545
5610
|
groupKey: t,
|
|
5546
|
-
value:
|
|
5547
|
-
})),
|
|
5611
|
+
value: ul(e, n)
|
|
5612
|
+
})), pl = (e, t, n) => {
|
|
5548
5613
|
let r = new Map(t), i = /* @__PURE__ */ new Set(), a = (t) => {
|
|
5549
5614
|
let n = $(t, e.groupBy), a = r.get(n);
|
|
5550
5615
|
if (a === void 0) return;
|
|
@@ -5553,7 +5618,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5553
5618
|
r.delete(n);
|
|
5554
5619
|
return;
|
|
5555
5620
|
}
|
|
5556
|
-
let s =
|
|
5621
|
+
let s = ll(t, e.column);
|
|
5557
5622
|
e.op === "min" || e.op === "max" ? (a.extreme !== void 0 && s === a.extreme && i.add(n), r.set(n, {
|
|
5558
5623
|
count: o,
|
|
5559
5624
|
...a.extreme === void 0 ? {} : { extreme: a.extreme }
|
|
@@ -5562,7 +5627,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5562
5627
|
...e.op === "sum" || e.op === "avg" ? { sum: (a.sum ?? 0) - s } : {}
|
|
5563
5628
|
});
|
|
5564
5629
|
}, o = (t) => {
|
|
5565
|
-
let n = $(t, e.groupBy), i = r.get(n), a =
|
|
5630
|
+
let n = $(t, e.groupBy), i = r.get(n), a = ll(t, e.column);
|
|
5566
5631
|
if (i === void 0) {
|
|
5567
5632
|
r.set(n, {
|
|
5568
5633
|
count: 1,
|
|
@@ -5582,15 +5647,15 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5582
5647
|
state: r,
|
|
5583
5648
|
rescanGroups: [...i]
|
|
5584
5649
|
};
|
|
5585
|
-
},
|
|
5650
|
+
}, ml = (e, t, n, r) => {
|
|
5586
5651
|
if (n.length === 0) return t;
|
|
5587
|
-
let i = new Set(n), a =
|
|
5652
|
+
let i = new Set(n), a = dl(e, r.filter((t) => i.has($(t, e.groupBy)))), o = new Map(t);
|
|
5588
5653
|
for (let e of i) {
|
|
5589
5654
|
let t = a.get(e);
|
|
5590
5655
|
t === void 0 ? o.delete(e) : o.set(e, t);
|
|
5591
5656
|
}
|
|
5592
5657
|
return o;
|
|
5593
|
-
},
|
|
5658
|
+
}, hl = class {
|
|
5594
5659
|
shape;
|
|
5595
5660
|
state = /* @__PURE__ */ new Map();
|
|
5596
5661
|
groups = /* @__PURE__ */ new Map();
|
|
@@ -5598,7 +5663,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5598
5663
|
this.shape = e;
|
|
5599
5664
|
}
|
|
5600
5665
|
seed(e) {
|
|
5601
|
-
this.state =
|
|
5666
|
+
this.state = dl(this.shape, e), this.groups.clear();
|
|
5602
5667
|
for (let t of e) {
|
|
5603
5668
|
let e = $(t, this.shape.groupBy);
|
|
5604
5669
|
this.groups.has(e) || this.groups.set(e, this.groupValues(t));
|
|
@@ -5610,14 +5675,14 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5610
5675
|
let e = $(t, this.shape.groupBy);
|
|
5611
5676
|
this.groups.has(e) || this.groups.set(e, this.groupValues(t));
|
|
5612
5677
|
}
|
|
5613
|
-
let n =
|
|
5678
|
+
let n = pl(this.shape, this.state, e);
|
|
5614
5679
|
this.state = n.state;
|
|
5615
5680
|
for (let e of this.groups.keys()) this.state.has(e) || this.groups.delete(e);
|
|
5616
5681
|
return n.rescanGroups;
|
|
5617
5682
|
}
|
|
5618
5683
|
resolveRescan(e, t) {
|
|
5619
5684
|
if (e.length === 0) return;
|
|
5620
|
-
this.state =
|
|
5685
|
+
this.state = ml(this.shape, this.state, e, t);
|
|
5621
5686
|
let n = new Set(e);
|
|
5622
5687
|
for (let e of t) {
|
|
5623
5688
|
let t = $(e, this.shape.groupBy);
|
|
@@ -5626,7 +5691,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5626
5691
|
for (let e of n) this.state.has(e) || this.groups.delete(e);
|
|
5627
5692
|
}
|
|
5628
5693
|
materialize() {
|
|
5629
|
-
return
|
|
5694
|
+
return fl(this.shape, this.state).map((e) => ({
|
|
5630
5695
|
groupKey: e.groupKey,
|
|
5631
5696
|
group: this.groups.get(e.groupKey) ?? {},
|
|
5632
5697
|
value: e.value
|
|
@@ -5639,19 +5704,19 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5639
5704
|
for (let r of t) n[r] = e[r];
|
|
5640
5705
|
return n;
|
|
5641
5706
|
}
|
|
5642
|
-
},
|
|
5707
|
+
}, gl = D("_voltro_rebac_tuples", {
|
|
5643
5708
|
id: v({ prefix: "rbct" }),
|
|
5644
|
-
subjectId:
|
|
5645
|
-
relation:
|
|
5646
|
-
resourceType:
|
|
5647
|
-
resourceId:
|
|
5648
|
-
tenantId:
|
|
5649
|
-
createdAt:
|
|
5709
|
+
subjectId: O(),
|
|
5710
|
+
relation: O(),
|
|
5711
|
+
resourceType: O(),
|
|
5712
|
+
resourceId: O(),
|
|
5713
|
+
tenantId: O().nullable(),
|
|
5714
|
+
createdAt: k().default("now")
|
|
5650
5715
|
}).index([
|
|
5651
5716
|
"subjectId",
|
|
5652
5717
|
"resourceType",
|
|
5653
5718
|
"resourceId"
|
|
5654
|
-
]).reactive(),
|
|
5719
|
+
]).reactive(), _l = async (e, n, r, i) => n === null ? [] : (await e.query({
|
|
5655
5720
|
table: "_voltro_rebac_tuples",
|
|
5656
5721
|
predicate: t(u("subjectId", n), u("resourceType", r), u("resourceId", i)),
|
|
5657
5722
|
order: [],
|
|
@@ -5663,11 +5728,11 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5663
5728
|
relation: e.relation,
|
|
5664
5729
|
resourceType: e.resourceType,
|
|
5665
5730
|
resourceId: e.resourceId
|
|
5666
|
-
})),
|
|
5731
|
+
})), vl = (e) => ({
|
|
5667
5732
|
id: e.id,
|
|
5668
5733
|
tenantId: e.tenantId,
|
|
5669
5734
|
...e.scopes === void 0 ? {} : { scopes: e.scopes }
|
|
5670
|
-
}),
|
|
5735
|
+
}), yl = (e, t) => {
|
|
5671
5736
|
let n = t.getPolicy ?? Wo;
|
|
5672
5737
|
return (r, i) => {
|
|
5673
5738
|
let a = e[i.tag];
|
|
@@ -5680,7 +5745,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5680
5745
|
if (o === void 0) return s("");
|
|
5681
5746
|
let c = a.resourceId(i.input);
|
|
5682
5747
|
if (c === null || c === "") return s("");
|
|
5683
|
-
let l =
|
|
5748
|
+
let l = vl(i.subject), u = {
|
|
5684
5749
|
type: a.resourceType,
|
|
5685
5750
|
id: c,
|
|
5686
5751
|
tenantId: i.subject.tenantId
|
|
@@ -5690,7 +5755,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5690
5755
|
tuples: e
|
|
5691
5756
|
}) ? r : s(c));
|
|
5692
5757
|
};
|
|
5693
|
-
},
|
|
5758
|
+
}, bl = async (e, n, r) => n === null ? [] : (await e.query({
|
|
5694
5759
|
table: "_voltro_rebac_tuples",
|
|
5695
5760
|
predicate: t(u("subjectId", n), u("resourceType", r)),
|
|
5696
5761
|
order: [],
|
|
@@ -5702,18 +5767,18 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5702
5767
|
relation: e.relation,
|
|
5703
5768
|
resourceType: e.resourceType,
|
|
5704
5769
|
resourceId: e.resourceId
|
|
5705
|
-
})),
|
|
5770
|
+
})), xl = (e) => {
|
|
5706
5771
|
let t = e.getPolicy ?? Wo;
|
|
5707
5772
|
return async (n, r, i, a) => {
|
|
5708
5773
|
let o = t(r);
|
|
5709
5774
|
if (o === void 0) return [];
|
|
5710
|
-
let s =
|
|
5775
|
+
let s = vl(n);
|
|
5711
5776
|
return Qo(s, i, r, a, {
|
|
5712
5777
|
policy: o,
|
|
5713
5778
|
tuples: await e.loadSubjectTuples(s.id, r)
|
|
5714
5779
|
});
|
|
5715
5780
|
};
|
|
5716
|
-
},
|
|
5781
|
+
}, Sl = (e) => {
|
|
5717
5782
|
if (typeof e.name != "string" || e.name.length === 0) throw Error("defineReaction: a non-empty `name` is required");
|
|
5718
5783
|
if (e.watch === void 0 || typeof e.watch.table != "string" || e.watch.table.length === 0) throw Error(`reaction '${e.name}': watch.table is required`);
|
|
5719
5784
|
if (e.act === void 0 || e.act.kind !== "agent" && e.act.kind !== "workflow") throw Error(`reaction '${e.name}': act must be { kind: 'agent' | 'workflow', … }`);
|
|
@@ -5721,14 +5786,14 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5721
5786
|
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`);
|
|
5722
5787
|
if (e.guards.costBudgetUsd !== void 0 && e.guards.costBudgetUsd < 0) throw Error(`reaction '${e.name}': guards.costBudgetUsd must be >= 0`);
|
|
5723
5788
|
return e;
|
|
5724
|
-
},
|
|
5789
|
+
}, Cl = (e, t) => e === void 0 ? !0 : Array.isArray(e) ? e.includes(t) : e === t, wl = (e) => e.new?.tenantId ?? e.old?.tenantId ?? null, Tl = class {
|
|
5725
5790
|
hits = /* @__PURE__ */ new Map();
|
|
5726
5791
|
allow(e, t, n, r) {
|
|
5727
5792
|
let i = r - n, a = (this.hits.get(e) ?? []).filter((e) => e > i);
|
|
5728
5793
|
return a.length >= t ? (this.hits.set(e, a), !1) : (a.push(r), this.hits.set(e, a), !0);
|
|
5729
5794
|
}
|
|
5730
|
-
},
|
|
5731
|
-
if (t.table !== e.watch.table || !
|
|
5795
|
+
}, El = async (e, t, n) => {
|
|
5796
|
+
if (t.table !== e.watch.table || !Cl(e.watch.on, t.op)) return "skipped-op";
|
|
5732
5797
|
if (e.when !== void 0 && !e.when(t)) return "skipped-when";
|
|
5733
5798
|
let r = `${e.name}:${e.guards.dedupeKey(t)}`;
|
|
5734
5799
|
if (await n.dedupe.has(r)) return "skipped-dedupe";
|
|
@@ -5737,26 +5802,26 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5737
5802
|
let t = n.now?.() ?? Date.now();
|
|
5738
5803
|
if (!n.rateLimiter.allow(e.name, i.limit, i.windowMs, t)) return "skipped-ratelimit";
|
|
5739
5804
|
}
|
|
5740
|
-
let a =
|
|
5805
|
+
let a = wl(t);
|
|
5741
5806
|
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, {
|
|
5742
5807
|
id: a,
|
|
5743
5808
|
via: "agent"
|
|
5744
5809
|
}), await n.dedupe.add(r), "acted");
|
|
5745
|
-
},
|
|
5810
|
+
}, Dl = D("_voltro_wakeups", {
|
|
5746
5811
|
id: v({ prefix: "wakeup" }),
|
|
5747
|
-
tenantId:
|
|
5748
|
-
kind:
|
|
5749
|
-
refId:
|
|
5750
|
-
wakeAt:
|
|
5751
|
-
status:
|
|
5752
|
-
}).index(["status", "wakeAt"]).index(["tenantId"]),
|
|
5753
|
-
let t = e.now?.() ?? /* @__PURE__ */ new Date(), n = await
|
|
5812
|
+
tenantId: O(),
|
|
5813
|
+
kind: O(),
|
|
5814
|
+
refId: O(),
|
|
5815
|
+
wakeAt: k(),
|
|
5816
|
+
status: O()
|
|
5817
|
+
}).index(["status", "wakeAt"]).index(["tenantId"]), Ol = async (e) => {
|
|
5818
|
+
let t = e.now?.() ?? /* @__PURE__ */ new Date(), n = await sc(e.store, t, e.batchLimit ?? 100);
|
|
5754
5819
|
if (n.length === 0) return 0;
|
|
5755
5820
|
let r = 0;
|
|
5756
|
-
for (let t of n) if (await
|
|
5821
|
+
for (let t of n) if (await rc(e.store, t)) try {
|
|
5757
5822
|
await e.adapter.wake(t), r++;
|
|
5758
5823
|
} catch (n) {
|
|
5759
|
-
await
|
|
5824
|
+
await ic(e.store, t), e.log?.warn("wake: adapter failed — released for retry", {
|
|
5760
5825
|
tenantId: t.tenantId,
|
|
5761
5826
|
kind: t.kind,
|
|
5762
5827
|
refId: t.refId,
|
|
@@ -5764,11 +5829,11 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5764
5829
|
});
|
|
5765
5830
|
}
|
|
5766
5831
|
return r > 0 && e.log?.info("wake: woke due deployments", { count: r }), r;
|
|
5767
|
-
},
|
|
5832
|
+
}, kl = (e, t = 1e3) => {
|
|
5768
5833
|
let n = !1, r, i = async () => {
|
|
5769
5834
|
if (!n) {
|
|
5770
5835
|
try {
|
|
5771
|
-
await
|
|
5836
|
+
await Ol(e);
|
|
5772
5837
|
} catch (t) {
|
|
5773
5838
|
e.log?.warn("wake: tick failed", { reason: t instanceof Error ? t.message : String(t) });
|
|
5774
5839
|
}
|
|
@@ -5778,10 +5843,10 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5778
5843
|
return i(), { stop: () => {
|
|
5779
5844
|
n = !0, r !== void 0 && clearTimeout(r);
|
|
5780
5845
|
} };
|
|
5781
|
-
},
|
|
5846
|
+
}, Al = (e) => ({ wake: async () => {
|
|
5782
5847
|
await e.start();
|
|
5783
|
-
} }),
|
|
5784
|
-
let t = e.fetchImpl ?? fetch, n = e.now ?? Date.now, r = e.sleep ??
|
|
5848
|
+
} }), jl = (e) => new Promise((t) => setTimeout(t, e)), Ml = (e) => {
|
|
5849
|
+
let t = e.fetchImpl ?? fetch, n = e.now ?? Date.now, r = e.sleep ?? jl, i = e.spawnImpl ?? Dt, 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 () => {
|
|
5785
5850
|
try {
|
|
5786
5851
|
let n = await t(e.healthUrl);
|
|
5787
5852
|
return d(n);
|
|
@@ -5835,11 +5900,11 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5835
5900
|
},
|
|
5836
5901
|
stop: m
|
|
5837
5902
|
};
|
|
5838
|
-
},
|
|
5903
|
+
}, Nl = async (e) => {
|
|
5839
5904
|
if (e.signals.connectedClients() > 0 || e.signals.inFlightRequests() > 0 || e.signals.activeWorkflowExecutions() > 0) return !1;
|
|
5840
|
-
let t = (e.now?.() ?? /* @__PURE__ */ new Date()).getTime() + (e.wakeLookaheadMs ?? 3e4), n = await
|
|
5905
|
+
let t = (e.now?.() ?? /* @__PURE__ */ new Date()).getTime() + (e.wakeLookaheadMs ?? 3e4), n = await cc(e.store);
|
|
5841
5906
|
return !(n !== null && n.wakeAt.getTime() <= t);
|
|
5842
|
-
},
|
|
5907
|
+
}, Pl = (e, t = Date.now) => {
|
|
5843
5908
|
let n;
|
|
5844
5909
|
return {
|
|
5845
5910
|
update: (r) => {
|
|
@@ -5851,7 +5916,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5851
5916
|
n = void 0;
|
|
5852
5917
|
}
|
|
5853
5918
|
};
|
|
5854
|
-
},
|
|
5919
|
+
}, Fl = () => {
|
|
5855
5920
|
let e = 0, t = 0;
|
|
5856
5921
|
return {
|
|
5857
5922
|
onRequestStart: () => {
|
|
@@ -5869,8 +5934,8 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5869
5934
|
inFlightRequests: () => e,
|
|
5870
5935
|
openConnections: () => t
|
|
5871
5936
|
};
|
|
5872
|
-
},
|
|
5873
|
-
let o =
|
|
5937
|
+
}, Il = (e) => ({ run: async (t) => (e.onActivity?.(), await e.ensureAwake(), t()) }), Ll = (e, t, n, r) => new Promise((i, a) => {
|
|
5938
|
+
let o = $e.request({
|
|
5874
5939
|
host: n,
|
|
5875
5940
|
port: r,
|
|
5876
5941
|
method: e.method,
|
|
@@ -5880,8 +5945,8 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5880
5945
|
t.writeHead(e.statusCode ?? 502, e.headers), e.pipe(t), e.on("end", i), e.on("error", a);
|
|
5881
5946
|
});
|
|
5882
5947
|
o.on("error", a), e.pipe(o);
|
|
5883
|
-
}),
|
|
5884
|
-
let s =
|
|
5948
|
+
}), Rl = (e, t, n, r, i) => new Promise((a, o) => {
|
|
5949
|
+
let s = $e.request({
|
|
5885
5950
|
host: r,
|
|
5886
5951
|
port: i,
|
|
5887
5952
|
method: e.method,
|
|
@@ -5895,21 +5960,21 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5895
5960
|
};
|
|
5896
5961
|
t.on("close", s), r.on("close", s), r.on("error", o);
|
|
5897
5962
|
}), s.on("error", o), s.end();
|
|
5898
|
-
}),
|
|
5899
|
-
let t =
|
|
5963
|
+
}), zl = (e) => {
|
|
5964
|
+
let t = Il({
|
|
5900
5965
|
ensureAwake: () => e.supervisor.start(),
|
|
5901
5966
|
...e.onActivity === void 0 ? {} : { onActivity: e.onActivity }
|
|
5902
|
-
}), n = e.activity, r =
|
|
5903
|
-
n?.onRequestStart(), i.on("close", () => n?.onRequestEnd()), t.run(() =>
|
|
5967
|
+
}), n = e.activity, r = $e.createServer((r, i) => {
|
|
5968
|
+
n?.onRequestStart(), i.on("close", () => n?.onRequestEnd()), t.run(() => Ll(r, i, e.targetHost, e.targetPort)).catch((t) => {
|
|
5904
5969
|
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");
|
|
5905
5970
|
});
|
|
5906
5971
|
});
|
|
5907
5972
|
return r.on("upgrade", (r, i, a) => {
|
|
5908
|
-
n?.onConnect(), i.on("close", () => n?.onDisconnect()), t.run(() =>
|
|
5973
|
+
n?.onConnect(), i.on("close", () => n?.onDisconnect()), t.run(() => Rl(r, i, a, e.targetHost, e.targetPort)).catch((t) => {
|
|
5909
5974
|
e.log?.warn("wake-router: upgrade proxy failed", { reason: t instanceof Error ? t.message : String(t) }), i.destroy();
|
|
5910
5975
|
});
|
|
5911
5976
|
}), r;
|
|
5912
|
-
},
|
|
5977
|
+
}, Bl = async (e) => {
|
|
5913
5978
|
try {
|
|
5914
5979
|
return (await e.query({
|
|
5915
5980
|
table: "_voltro_workflow_runs",
|
|
@@ -5926,15 +5991,15 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5926
5991
|
} catch {
|
|
5927
5992
|
return 0;
|
|
5928
5993
|
}
|
|
5929
|
-
},
|
|
5930
|
-
let t =
|
|
5994
|
+
}, Vl = async (e) => {
|
|
5995
|
+
let t = Al(e.supervisor), n = await Ol({
|
|
5931
5996
|
store: e.store,
|
|
5932
5997
|
adapter: t,
|
|
5933
5998
|
...e.now === void 0 ? {} : { now: e.now },
|
|
5934
5999
|
...e.log === void 0 ? {} : { log: e.log }
|
|
5935
6000
|
});
|
|
5936
6001
|
n > 0 && e.idleGate.reset();
|
|
5937
|
-
let r = await
|
|
6002
|
+
let r = await Nl({
|
|
5938
6003
|
store: e.store,
|
|
5939
6004
|
signals: e.signals,
|
|
5940
6005
|
...e.wakeLookaheadMs === void 0 ? {} : { wakeLookaheadMs: e.wakeLookaheadMs },
|
|
@@ -5944,12 +6009,12 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5944
6009
|
woke: n,
|
|
5945
6010
|
stopped: i
|
|
5946
6011
|
};
|
|
5947
|
-
},
|
|
5948
|
-
let t =
|
|
6012
|
+
}, Hl = async (e) => {
|
|
6013
|
+
let t = Pl(e.idleGraceMs ?? 6e4), n = e.tickMs ?? 1e3, r = Fl(), i = 0, a = e.signals === void 0, o = e.signals ?? {
|
|
5949
6014
|
connectedClients: () => r.openConnections(),
|
|
5950
6015
|
inFlightRequests: () => r.inFlightRequests(),
|
|
5951
6016
|
activeWorkflowExecutions: () => i
|
|
5952
|
-
}, s =
|
|
6017
|
+
}, s = zl({
|
|
5953
6018
|
supervisor: e.supervisor,
|
|
5954
6019
|
targetHost: e.targetHost,
|
|
5955
6020
|
targetPort: e.targetPort,
|
|
@@ -5968,7 +6033,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5968
6033
|
let l = !1, u, d = e.firedRetentionMs ?? 10 * 6e4, f = 0, p = async () => {
|
|
5969
6034
|
if (!l) {
|
|
5970
6035
|
try {
|
|
5971
|
-
if (a && (i = await
|
|
6036
|
+
if (a && (i = await Bl(e.store)), await Vl({
|
|
5972
6037
|
store: e.store,
|
|
5973
6038
|
supervisor: e.supervisor,
|
|
5974
6039
|
signals: o,
|
|
@@ -5976,7 +6041,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5976
6041
|
...e.wakeLookaheadMs === void 0 ? {} : { wakeLookaheadMs: e.wakeLookaheadMs },
|
|
5977
6042
|
...e.log === void 0 ? {} : { log: e.log }
|
|
5978
6043
|
}), f++ % 60 == 0) {
|
|
5979
|
-
let t = await
|
|
6044
|
+
let t = await uc(e.store, { firedOlderThan: new Date(Date.now() - d) });
|
|
5980
6045
|
t > 0 && e.log?.info("orchestrator: pruned fired wakeups", { count: t });
|
|
5981
6046
|
}
|
|
5982
6047
|
} catch (t) {
|
|
@@ -5991,14 +6056,14 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
5991
6056
|
l = !0, u !== void 0 && clearTimeout(u), await new Promise((e) => s.close(() => e()));
|
|
5992
6057
|
}
|
|
5993
6058
|
};
|
|
5994
|
-
},
|
|
5995
|
-
provider:
|
|
5996
|
-
operation:
|
|
5997
|
-
cause:
|
|
5998
|
-
}) {},
|
|
5999
|
-
provider:
|
|
6000
|
-
capability:
|
|
6001
|
-
}) {},
|
|
6059
|
+
}, Ul = (e) => e, Wl = class extends L.TaggedError()("AnalyticsError", {
|
|
6060
|
+
provider: L.String,
|
|
6061
|
+
operation: L.String,
|
|
6062
|
+
cause: L.String
|
|
6063
|
+
}) {}, Gl = class extends L.TaggedError()("AnalyticsCapabilityNotSupported", {
|
|
6064
|
+
provider: L.String,
|
|
6065
|
+
capability: L.String
|
|
6066
|
+
}) {}, Kl = class extends Ve.Tag("@voltro/AnalyticsSink")() {}, ql = (e, t) => ({
|
|
6002
6067
|
info: e.info,
|
|
6003
6068
|
track: (n) => e.track(n.tenantId === void 0 ? {
|
|
6004
6069
|
...n,
|
|
@@ -6017,20 +6082,20 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
6017
6082
|
tenantId: t
|
|
6018
6083
|
} : n),
|
|
6019
6084
|
...e.mirror === void 0 ? {} : { mirror: e.mirror }
|
|
6020
|
-
}),
|
|
6021
|
-
let e = yield*
|
|
6085
|
+
}), Jl = () => N.gen(function* () {
|
|
6086
|
+
let e = yield* Kl, t = yield* N.serviceOption(Te), n = Xe.match(t, {
|
|
6022
6087
|
onNone: () => null,
|
|
6023
6088
|
onSome: (e) => e.tenantId ?? null
|
|
6024
6089
|
});
|
|
6025
|
-
return n === null ? e :
|
|
6026
|
-
}),
|
|
6027
|
-
let e = (e) => N.fail(new
|
|
6028
|
-
provider:
|
|
6090
|
+
return n === null ? e : ql(e, n);
|
|
6091
|
+
}), Yl = "noop", Xl = () => {
|
|
6092
|
+
let e = (e) => N.fail(new Gl({
|
|
6093
|
+
provider: Yl,
|
|
6029
6094
|
capability: e
|
|
6030
6095
|
}));
|
|
6031
6096
|
return {
|
|
6032
6097
|
info: {
|
|
6033
|
-
provider:
|
|
6098
|
+
provider: Yl,
|
|
6034
6099
|
capabilities: {
|
|
6035
6100
|
track: !0,
|
|
6036
6101
|
aggregate: !1,
|
|
@@ -6044,8 +6109,8 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
6044
6109
|
timeseries: () => e("timeseries"),
|
|
6045
6110
|
topN: () => e("topN")
|
|
6046
6111
|
};
|
|
6047
|
-
},
|
|
6048
|
-
if (e.length === 0) return
|
|
6112
|
+
}, Zl = (e) => {
|
|
6113
|
+
if (e.length === 0) return Xl();
|
|
6049
6114
|
if (e.length === 1) return e[0];
|
|
6050
6115
|
let t = {
|
|
6051
6116
|
provider: "compose",
|
|
@@ -6062,7 +6127,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
6062
6127
|
discard: !0
|
|
6063
6128
|
}), r = (t, n) => {
|
|
6064
6129
|
let r = e.find((e) => e.info.capabilities[t]);
|
|
6065
|
-
return r === void 0 ? N.fail(new
|
|
6130
|
+
return r === void 0 ? N.fail(new Gl({
|
|
6066
6131
|
provider: "compose",
|
|
6067
6132
|
capability: t
|
|
6068
6133
|
})) : n(r);
|
|
@@ -6085,11 +6150,11 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
6085
6150
|
topN: (e) => r("topN", (t) => t.topN(e)),
|
|
6086
6151
|
...a === void 0 ? {} : { mirror: a }
|
|
6087
6152
|
};
|
|
6088
|
-
},
|
|
6153
|
+
}, Ql = (e) => {
|
|
6089
6154
|
let t = e.filter((e) => e.dispose !== void 0);
|
|
6090
6155
|
return {
|
|
6091
6156
|
kind: "compose",
|
|
6092
|
-
build: (t) =>
|
|
6157
|
+
build: (t) => Zl(e.map((e) => e.build(t))),
|
|
6093
6158
|
tables: e.flatMap((e) => e.tables ?? []),
|
|
6094
6159
|
initialize: (t) => N.forEach(e, (e) => e.initialize ? e.initialize(t) : N.void, {
|
|
6095
6160
|
concurrency: 1,
|
|
@@ -6100,15 +6165,15 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
6100
6165
|
discard: !0
|
|
6101
6166
|
}) } : {}
|
|
6102
6167
|
};
|
|
6103
|
-
},
|
|
6168
|
+
}, $l = {
|
|
6104
6169
|
kind: "noop",
|
|
6105
|
-
build: () =>
|
|
6106
|
-
},
|
|
6170
|
+
build: () => Xl()
|
|
6171
|
+
}, eu = {
|
|
6107
6172
|
tables: [],
|
|
6108
6173
|
detach: () => {}
|
|
6109
|
-
},
|
|
6174
|
+
}, tu = (e) => {
|
|
6110
6175
|
let { store: t, sink: n, log: r } = e, i = n.mirror;
|
|
6111
|
-
if (i === void 0 || i.tables.length === 0) return
|
|
6176
|
+
if (i === void 0 || i.tables.length === 0) return eu;
|
|
6112
6177
|
let a = e.run ?? ((e) => N.runPromise(e)), o = i.primaryKey ?? "id", s = new Set(i.tables), c = (e) => {
|
|
6113
6178
|
if (e.op === "delete") {
|
|
6114
6179
|
let t = e.old;
|
|
@@ -6132,11 +6197,11 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
6132
6197
|
tables: i.tables,
|
|
6133
6198
|
detach: l
|
|
6134
6199
|
};
|
|
6135
|
-
},
|
|
6200
|
+
}, nu = (e) => {
|
|
6136
6201
|
let t = typeof e.refresh == "string" ? { interval: e.refresh } : e.refresh, n = e.strategy ?? "replace";
|
|
6137
6202
|
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`);
|
|
6138
6203
|
if (e.incremental !== void 0) {
|
|
6139
|
-
let t =
|
|
6204
|
+
let t = sl({
|
|
6140
6205
|
aggregations: [{
|
|
6141
6206
|
op: e.incremental.op,
|
|
6142
6207
|
...e.incremental.column === void 0 ? {} : { column: e.incremental.column }
|
|
@@ -6158,47 +6223,47 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
6158
6223
|
build: e.build,
|
|
6159
6224
|
...e.incremental === void 0 ? {} : { incremental: e.incremental }
|
|
6160
6225
|
};
|
|
6161
|
-
},
|
|
6162
|
-
name:
|
|
6163
|
-
ageMs:
|
|
6164
|
-
maxAgeMs:
|
|
6165
|
-
}) {},
|
|
6166
|
-
name:
|
|
6167
|
-
operation:
|
|
6168
|
-
cause:
|
|
6169
|
-
}) {},
|
|
6170
|
-
return (yield*
|
|
6171
|
-
}),
|
|
6226
|
+
}, ru = (e) => typeof e == "object" && !!e && e._voltroAggregate === !0, iu = class extends L.TaggedError()("AggregateStale", {
|
|
6227
|
+
name: L.String,
|
|
6228
|
+
ageMs: L.Number,
|
|
6229
|
+
maxAgeMs: L.Number
|
|
6230
|
+
}) {}, au = class extends L.TaggedError()("AggregateNotFound", { name: L.String }) {}, ou = class extends L.TaggedError()("AggregateError", {
|
|
6231
|
+
name: L.String,
|
|
6232
|
+
operation: L.String,
|
|
6233
|
+
cause: L.String
|
|
6234
|
+
}) {}, su = class extends Ve.Tag("@voltro/AggregateRegistry")() {}, cu = (e) => N.gen(function* () {
|
|
6235
|
+
return (yield* su).getHandle(e);
|
|
6236
|
+
}), lu = (e, n, r) => {
|
|
6172
6237
|
if (e.crossTenant || !n.has(e.table) || r == null) return e;
|
|
6173
6238
|
let i = u("tenantId", r);
|
|
6174
6239
|
return {
|
|
6175
6240
|
...e,
|
|
6176
6241
|
predicate: e.predicate ? t(e.predicate, i) : i
|
|
6177
6242
|
};
|
|
6178
|
-
},
|
|
6243
|
+
}, uu = (e, t, n) => n === "" && !e.crossTenant && t.has(e.table), du = (e) => e?.type === "user" && e.tenantId === "", fu = (e, n) => {
|
|
6179
6244
|
if (e.includeDeleted || !n.has(e.table)) return e;
|
|
6180
6245
|
let r = S("deletedAt");
|
|
6181
6246
|
return {
|
|
6182
6247
|
...e,
|
|
6183
6248
|
predicate: e.predicate ? t(e.predicate, r) : r
|
|
6184
6249
|
};
|
|
6185
|
-
},
|
|
6250
|
+
}, pu = (e, t) => t, mu = (e) => N.runPromiseExit(e).then((e) => {
|
|
6186
6251
|
if (Ke.isSuccess(e)) return e.value;
|
|
6187
|
-
let t =
|
|
6188
|
-
throw
|
|
6189
|
-
}),
|
|
6190
|
-
let r = await N.runPromise(
|
|
6252
|
+
let t = M.failureOption(e.cause);
|
|
6253
|
+
throw Xe.isSome(t) ? t.value : M.squash(e.cause);
|
|
6254
|
+
}), hu = (e, t) => e.pipe(N.provideService(Te, t)), gu = async (e, t, n) => {
|
|
6255
|
+
let r = await N.runPromise(Ae(t, e.guards, n));
|
|
6191
6256
|
if (r) throw r;
|
|
6192
|
-
},
|
|
6193
|
-
if (
|
|
6194
|
-
let t = await
|
|
6257
|
+
}, _u = async (e) => {
|
|
6258
|
+
if (In() === void 0) return e;
|
|
6259
|
+
let t = await mu(Rn(e.subject, (e) => {
|
|
6195
6260
|
console.error("[voltro] row filter failed to load", e);
|
|
6196
6261
|
}));
|
|
6197
6262
|
return {
|
|
6198
6263
|
...e,
|
|
6199
6264
|
rowFilter: t
|
|
6200
6265
|
};
|
|
6201
|
-
},
|
|
6266
|
+
}, vu = async (e) => {
|
|
6202
6267
|
let t = `${e.kind}.${e.name}`, n = Date.now(), r = "ok";
|
|
6203
6268
|
try {
|
|
6204
6269
|
if (e.interceptor) {
|
|
@@ -6214,7 +6279,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
6214
6279
|
...e.requestContext.spanId === void 0 ? {} : { spanId: e.requestContext.spanId }
|
|
6215
6280
|
}), r = await N.runPromiseExit(n);
|
|
6216
6281
|
if (Ke.isSuccess(r)) return r.value;
|
|
6217
|
-
throw
|
|
6282
|
+
throw M.squash(r.cause);
|
|
6218
6283
|
}
|
|
6219
6284
|
return await e.runExecutor();
|
|
6220
6285
|
} catch (e) {
|
|
@@ -6227,28 +6292,28 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
6227
6292
|
status: r
|
|
6228
6293
|
});
|
|
6229
6294
|
}
|
|
6230
|
-
},
|
|
6295
|
+
}, yu = /* @__PURE__ */ new Set([1213, 1205]), bu = /* @__PURE__ */ new Set([
|
|
6231
6296
|
"ER_LOCK_DEADLOCK",
|
|
6232
6297
|
"ER_LOCK_WAIT_TIMEOUT",
|
|
6233
6298
|
"40001",
|
|
6234
6299
|
"40P01"
|
|
6235
|
-
]),
|
|
6300
|
+
]), xu = (e) => {
|
|
6236
6301
|
let t = e;
|
|
6237
6302
|
for (let e = 0; e < 6 && typeof t == "object" && t; e++) {
|
|
6238
6303
|
let e = t;
|
|
6239
|
-
if (typeof e.errno == "number" &&
|
|
6304
|
+
if (typeof e.errno == "number" && yu.has(e.errno) || typeof e.code == "string" && bu.has(e.code) || typeof e.sqlState == "string" && bu.has(e.sqlState)) return !0;
|
|
6240
6305
|
t = e.cause;
|
|
6241
6306
|
}
|
|
6242
6307
|
return !1;
|
|
6243
|
-
},
|
|
6244
|
-
let n = t?.delay ?? ((e) =>
|
|
6308
|
+
}, Su = 3, Cu = (e) => new Promise((t) => setTimeout(t, e)), wu = async (e, t) => {
|
|
6309
|
+
let n = t?.delay ?? ((e) => Cu(e * 20 + Math.floor(Math.random() * 30)));
|
|
6245
6310
|
for (let t = 1;; t++) try {
|
|
6246
6311
|
return await e();
|
|
6247
6312
|
} catch (e) {
|
|
6248
|
-
if (t >=
|
|
6313
|
+
if (t >= Su || !xu(e)) throw e;
|
|
6249
6314
|
await n(t);
|
|
6250
6315
|
}
|
|
6251
|
-
},
|
|
6316
|
+
}, Tu = (e) => (t, n, r) => vu({
|
|
6252
6317
|
name: t.descriptor.name,
|
|
6253
6318
|
kind: "mutation",
|
|
6254
6319
|
input: n,
|
|
@@ -6256,11 +6321,11 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
6256
6321
|
...e.interceptor ? { interceptor: e.interceptor } : {},
|
|
6257
6322
|
...e.recordMetric ? { recordMetric: e.recordMetric } : {},
|
|
6258
6323
|
runExecutor: async () => {
|
|
6259
|
-
await
|
|
6260
|
-
let i = await
|
|
6324
|
+
await gu(t.descriptor, r.subject, n);
|
|
6325
|
+
let i = await _u(r), a = [], o = await wu(async () => (a.length = 0, e.store.transactional(async (o) => {
|
|
6261
6326
|
let s = e.undoCapture?.(o), c = s ? s.tx : o, l = e.buildContext(i, c, { afterCommit: (e) => {
|
|
6262
6327
|
a.push(e);
|
|
6263
|
-
} }), u = t.executor(n, l), d = N.isEffect(u) ? await e.runEffect(
|
|
6328
|
+
} }), u = t.executor(n, l), d = N.isEffect(u) ? await e.runEffect(hu(u, r.subject), l.store) : await u;
|
|
6264
6329
|
return s && await s.persist(l.store, {
|
|
6265
6330
|
tag: t.descriptor.name,
|
|
6266
6331
|
subject: r.subject,
|
|
@@ -6270,33 +6335,33 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
6270
6335
|
for (let e of a) await e();
|
|
6271
6336
|
return o;
|
|
6272
6337
|
}
|
|
6273
|
-
}),
|
|
6338
|
+
}), Eu = (e) => e && typeof e == "object" && "descriptor" in e ? e.descriptor : e, Du = (e) => typeof e == "object" && !!e && !Array.isArray(e) && "table" in e && "order" in e, Ou = (e) => {
|
|
6274
6339
|
let t = e.descriptor.source;
|
|
6275
6340
|
return t == null ? [] : typeof t == "string" ? [t] : [...t];
|
|
6276
|
-
},
|
|
6341
|
+
}, ku = (e, t) => (n) => () => {
|
|
6277
6342
|
let r = e.descriptor.guards;
|
|
6278
|
-
return !r || r.length === 0 ? Promise.resolve(null) : N.runPromise(
|
|
6279
|
-
},
|
|
6280
|
-
let i = e.buildContext(r), a =
|
|
6343
|
+
return !r || r.length === 0 ? Promise.resolve(null) : N.runPromise(Ae(n, r, t));
|
|
6344
|
+
}, Au = (e) => (t, n) => (r) => {
|
|
6345
|
+
let i = e.buildContext(r), a = ku(t, n)(r.subject), o = async () => {
|
|
6281
6346
|
let i = await a();
|
|
6282
6347
|
if (i) throw i;
|
|
6283
|
-
let o = e.buildContext(await
|
|
6284
|
-
return N.isEffect(s) ? N.runPromise(e.provideEffect(
|
|
6348
|
+
let o = e.buildContext(await _u(r)), s = t.executor(n, o);
|
|
6349
|
+
return N.isEffect(s) ? N.runPromise(e.provideEffect(hu(s, r.subject), o.store)) : Eu(await Promise.resolve(s));
|
|
6285
6350
|
}, s = (n) => {
|
|
6286
|
-
let i =
|
|
6287
|
-
return
|
|
6351
|
+
let i = Eu(n);
|
|
6352
|
+
return Du(i) ? e.finalize(i, r) : {
|
|
6288
6353
|
__voltroComputed: !0,
|
|
6289
6354
|
value: i,
|
|
6290
|
-
dependentTables:
|
|
6355
|
+
dependentTables: Ou(t),
|
|
6291
6356
|
tenantId: r.subject?.tenantId ?? null,
|
|
6292
6357
|
recompute: o
|
|
6293
6358
|
};
|
|
6294
6359
|
}, c = () => {
|
|
6295
6360
|
let a = t.executor(n, i);
|
|
6296
|
-
return N.isEffect(a) ? e.provideEffect(
|
|
6361
|
+
return N.isEffect(a) ? e.provideEffect(hu(a, r.subject), i.store).pipe(N.map(s)) : a instanceof Promise ? N.promise(() => a).pipe(N.map(s)) : s(a);
|
|
6297
6362
|
}, l = () => {
|
|
6298
6363
|
let e = t.descriptor.guards;
|
|
6299
|
-
return !e || e.length === 0 ? c() :
|
|
6364
|
+
return !e || e.length === 0 ? c() : Ae(r.subject, e, n).pipe(N.flatMap((e) => {
|
|
6300
6365
|
if (e) return N.fail(e);
|
|
6301
6366
|
let t = c();
|
|
6302
6367
|
return N.isEffect(t) ? t : N.succeed(t);
|
|
@@ -6315,7 +6380,7 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
6315
6380
|
traceId: r.traceId,
|
|
6316
6381
|
...r.spanId === void 0 ? {} : { spanId: r.spanId }
|
|
6317
6382
|
});
|
|
6318
|
-
},
|
|
6383
|
+
}, ju = (e) => (t, n, r) => vu({
|
|
6319
6384
|
name: t.descriptor.name,
|
|
6320
6385
|
kind: "action",
|
|
6321
6386
|
input: n,
|
|
@@ -6323,16 +6388,16 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
6323
6388
|
...e.interceptor ? { interceptor: e.interceptor } : {},
|
|
6324
6389
|
...e.recordMetric ? { recordMetric: e.recordMetric } : {},
|
|
6325
6390
|
runExecutor: async () => {
|
|
6326
|
-
await
|
|
6327
|
-
let i = e.buildContext(await
|
|
6328
|
-
return N.isEffect(a) ? e.runEffect(
|
|
6391
|
+
await gu(t.descriptor, r.subject, n);
|
|
6392
|
+
let i = e.buildContext(await _u(r)), a = t.executor(n, i);
|
|
6393
|
+
return N.isEffect(a) ? e.runEffect(hu(a, r.subject), i.store) : a;
|
|
6329
6394
|
}
|
|
6330
|
-
}),
|
|
6395
|
+
}), Mu = (e) => e instanceof Date ? e.toISOString() : typeof e == "string" && e.length > 0 ? e : null, Nu = (e) => typeof e == "string" && e.length > 0 ? e : null, Pu = [
|
|
6331
6396
|
"updatedAt",
|
|
6332
6397
|
"createdAt",
|
|
6333
6398
|
"updatedBy",
|
|
6334
6399
|
"createdBy"
|
|
6335
|
-
],
|
|
6400
|
+
], Fu = (e) => Pu.some((t) => t in e), Iu = (e, t, n) => {
|
|
6336
6401
|
let r = {
|
|
6337
6402
|
table: t.table,
|
|
6338
6403
|
id: t.id,
|
|
@@ -6347,14 +6412,14 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
6347
6412
|
found: !1
|
|
6348
6413
|
};
|
|
6349
6414
|
let i = t.column === void 0 ? void 0 : e[t.column];
|
|
6350
|
-
if (!
|
|
6415
|
+
if (!Fu(e)) return {
|
|
6351
6416
|
...r,
|
|
6352
6417
|
value: i,
|
|
6353
6418
|
lastWrite: null,
|
|
6354
6419
|
attribution: "none",
|
|
6355
6420
|
found: !0
|
|
6356
6421
|
};
|
|
6357
|
-
let a =
|
|
6422
|
+
let a = Nu(e.updatedBy) ?? Nu(e.createdBy), o = Mu(e.updatedAt) ?? Mu(e.createdAt);
|
|
6358
6423
|
return {
|
|
6359
6424
|
...r,
|
|
6360
6425
|
value: i,
|
|
@@ -6366,12 +6431,12 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
6366
6431
|
attribution: "audit",
|
|
6367
6432
|
found: !0
|
|
6368
6433
|
};
|
|
6369
|
-
},
|
|
6434
|
+
}, Lu = (e, t) => {
|
|
6370
6435
|
let n = e.map((e) => {
|
|
6371
6436
|
let n = e.newValue ?? e.value, r = t.column !== void 0 && n && typeof n == "object" ? n[t.column] : e.newValue ?? e.value;
|
|
6372
6437
|
return {
|
|
6373
|
-
actor: { id:
|
|
6374
|
-
at:
|
|
6438
|
+
actor: { id: Nu(e.actor) ?? Nu(e.changedBy) },
|
|
6439
|
+
at: Mu(e.at) ?? Mu(e.changedAt),
|
|
6375
6440
|
...e.traceId === void 0 ? {} : { traceId: e.traceId },
|
|
6376
6441
|
value: r
|
|
6377
6442
|
};
|
|
@@ -6386,12 +6451,12 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
6386
6451
|
history: n,
|
|
6387
6452
|
found: n.length > 0
|
|
6388
6453
|
};
|
|
6389
|
-
},
|
|
6454
|
+
}, Ru = (e) => {
|
|
6390
6455
|
let t = e.new?.id;
|
|
6391
6456
|
if (typeof t == "string") return t;
|
|
6392
6457
|
let n = e.old?.id;
|
|
6393
6458
|
return typeof n == "string" ? n : void 0;
|
|
6394
|
-
},
|
|
6459
|
+
}, zu = (e) => {
|
|
6395
6460
|
let t = {};
|
|
6396
6461
|
if (e.op === "insert") for (let [n, r] of Object.entries(e.new ?? {})) t[n] = {
|
|
6397
6462
|
from: void 0,
|
|
@@ -6411,11 +6476,11 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
6411
6476
|
return {
|
|
6412
6477
|
table: e.table,
|
|
6413
6478
|
op: e.op,
|
|
6414
|
-
id:
|
|
6479
|
+
id: Ru(e),
|
|
6415
6480
|
fields: t
|
|
6416
6481
|
};
|
|
6417
|
-
},
|
|
6418
|
-
let t = e.map(
|
|
6482
|
+
}, Bu = (e) => {
|
|
6483
|
+
let t = e.map(zu);
|
|
6419
6484
|
return {
|
|
6420
6485
|
rows: t,
|
|
6421
6486
|
summary: {
|
|
@@ -6424,21 +6489,21 @@ var K = /* @__PURE__ */ new Map(), nr = (e, t) => {
|
|
|
6424
6489
|
deletes: t.filter((e) => e.op === "delete").length
|
|
6425
6490
|
}
|
|
6426
6491
|
};
|
|
6427
|
-
},
|
|
6492
|
+
}, Vu = class extends Error {
|
|
6428
6493
|
constructor() {
|
|
6429
6494
|
super("voltro:preview-rollback"), this.name = "PreviewRollback";
|
|
6430
6495
|
}
|
|
6431
|
-
},
|
|
6496
|
+
}, Hu = async (e, t) => {
|
|
6432
6497
|
let n, r = !1;
|
|
6433
6498
|
try {
|
|
6434
6499
|
await e.transactional(async (e) => {
|
|
6435
|
-
throw n = await t(e), r = !0, new
|
|
6500
|
+
throw n = await t(e), r = !0, new Vu();
|
|
6436
6501
|
});
|
|
6437
6502
|
} catch (e) {
|
|
6438
|
-
if (!(e instanceof
|
|
6503
|
+
if (!(e instanceof Vu)) throw e;
|
|
6439
6504
|
}
|
|
6440
6505
|
if (!r) throw Error("preview: handler did not complete");
|
|
6441
6506
|
return n;
|
|
6442
|
-
},
|
|
6507
|
+
}, Uu = "framework-runtime";
|
|
6443
6508
|
//#endregion
|
|
6444
|
-
export {
|
|
6509
|
+
export { Pi as API_KEYS_TABLE, Vo as AccessDenied, ou as AggregateError, hl as AggregateMaintainer, au as AggregateNotFound, su as AggregateRegistry, iu as AggregateStale, Gl as AnalyticsCapabilityNotSupported, Wl as AnalyticsError, Kl as AnalyticsSink, Y as CONNECTIONS_TABLE, X as CONNECTION_GRANTS_TABLE, Is as CircuitBreaker, Ps as CircuitOpen, co as ConnectionNotConnected, Ur as DEFAULT_MAX_RPC_BODY_BYTES, oo as DEFAULT_REFRESH_SKEW_MS, Nn as DEFAULT_ROW_FILTER_RETRY, fc as DORMANCY_WAKEUP_TENANT, Cs as DeleteBuilder, Gn as Dispatcher, Zi as EffectStore, xo as GRANT_TTL_MS, Jt as InMemoryDataStore, Ft as IndexedMatcher, Ot as LinearScanMatcher, Je as MetricBoundaries, Yl as NOOP_ANALYTICS_PROVIDER, Ln as NO_ROW_FILTER, gs as NoRowFound, Ta as OUTBOX_ATTEMPTS_TABLE, Ma as OUTBOX_ATTEMPT_LOG_CAP, J as OUTBOX_TABLE, _s as OptimisticLockError, Bo as REBAC_ADMIN_SCOPE, so as REFRESH_LEASE_MS, Uu as RUNTIME_NAME, Tl as ReactionRateLimiter, wr as ReplicatedDataStore, Mn as RowFilterUnavailable, dc as SCHEDULE_SUBJECT, qi as SYSTEM_SUBJECT, xs as SelectBuilder, Yi as StoreOperationFailed, Rt as SubscriptionRegistry, Xi as TableValidationFailed, Ji as TenantScopeViolation, tl as TimelineRecorder, Pc as UndoBoundaryError, Ic as UndoStack, Ss as UpdateBuilder, cs as VOLTRO_AUDIT_MIXIN_ID, ls as VOLTRO_SOFT_DELETE_MIXIN_ID, us as VOLTRO_TENANT_MIXIN_ID, ar as _connectionStreamCount, or as _resetConnectionSubjectsForTest, Va as _voltroConnectionGrantsTable, za as _voltroConnectionsTable, gl as _voltroRebacTuplesTable, Cc as _voltroScheduleClaimsTable, Sc as _voltroScheduleRunsTable, wc as _voltroTracesTable, Tc as _voltroUndoLogTable, Dl as _voltroWakeupsTable, ba as _voltroWorkflowEventDeliveriesTable, ya as _voltroWorkflowEventsTable, Ki as apiKeyManagementRoutes, Ds as applyDefined, pl as applyDelta, Rc as applyInverse, zc as applyInverses, Vn as applyRowFilter, Hn as applyRowFilterToDescriptor, fu as applySoftDeleteScope, lu as applyTenantScope, qc as applyUndoInvocation, Zo as assertCan, Ga as assertConnectionCipherConfigured, tu as attachAnalyticsMirror, Gr as awaitServerListening, ja as backoffMs, To as beginOAuthConnect, Qn as bindConnectionSubject, Hr as bindMutation, Pr as bindStream, Nr as bindSubscription, jr as bindSubscriptionUntyped, dl as buildIvmState, Bu as buildPreview, yl as buildRebacInterceptor, xl as buildRebacReadFilter, vr as buildSubjectKey, Xr as buildTracingLayer, di as cachedBackend, Xo as can, ec as cancelWakeup, sl as classifyShape, po as clearConnectionRefreshFlights, Ko as clearResourcePolicies, i as clearRetentions, zs as clearSystemStoreHandle, Ys as compileCron, Eo as completeOAuthConnect, Ql as composeAnalytics, Zl as composeAnalyticsSinks, So as connectionCallbackPath, Wa as connectionLabel, sr as connectionSubjectsSnapshot, Bl as countRunningWorkflows, En as counter, Ns as crud, Cr as currentRoutingContext, mr as currentTraceContext, Ui as dataStoreApiKeyStore, Ei as dataStoreIdempotencyStore, ji as dataStoreKvStore, xi as decryptField, nu as defineAggregate, Ua as defineConnection, ma as defineEventTrigger, pu as defineExecutor, Oa as defineOutboxHandler, Sl as defineReaction, Uo as defineResourcePolicy, Js as defineSchedule, Ul as defineSubscriber, Un as deliveredRowCount, mi as deriveKey, zu as diffChange, Ia as drainOutbox, sc as dueWakeups, Yo as effectiveRelations, hs as emptySchemaRegistry, K as encryptField, ai as envSecretsBackend, io as exchangeAuthorizationCode, dr as externalSpanFromTraceparent, Xt as extractDbCause, Lt as fingerprintFor, eo as forgetCredential, lr as formatTraceparent, Lc as forwardChangeFromCdc, Wi as frameworkApiKeyStrategy, Dn as gauge, Ii as generateApiKeyToken, Ao as getConnectionResolver, $n as getConnectionSubject, yi as getFieldCipher, Wo as getResourcePolicy, In as getRowFilter, Bs as getSystemStoreHandle, rl as getTimelineRecorder, rs as getTupleSource, $ as groupKeyOf, On as histogramMetric, Lu as historyProvenance, fi as httpSecretsBackend, Tt as inspectWorkflow, is as installPolicyGuardResolver, ir as interruptConnectionStreams, Mc as invertChange, ru as isAggregateDefinition, uu as isEmptyTenantScopedRead, Zt as isForeignKeyViolation, Nl as isIdleNow, zr as isInfraError, du as isOrglessUserSubject, Fc as isSafeToApply, Ks as isScheduleDefinition, ha as isWorkflowEventTriggerDefinition, ul as ivmValue, Iu as lastWriteProvenance, to as listConnectionStates, Go as listResourcePolicies, ee as listRetentions, _l as loadResourceTuples, bl as loadSubjectTuples, Hs as localityAwareSelector, ju as makeActionRunner, hc as makeAdvisoryLockCoordinator, hi as makeAesCipher, zi as makeApiKeyService, Qt as makeAppAccess, Mi as makeAsyncKv, ii as makeBufferingSpanProcessor, Ka as makeConnectionRegistry, Mo as makeConnectionResolver, No as makeConnectionsFacade, xc as makeCoordinatedScheduler, os as makeDataLoader, zo as makeDisconnectConnectionExecutor, ea as makeEffectStoreLayer, xa as makeEventsFacade, gi as makeFieldCipher, ws as makeFluentStore, Pl as makeIdleGate, ua as makeLazyWorkflowFacade, Io as makeListConnectionsExecutor, Tu as makeMutationRunner, Aa as makeOutboxFacade, ca as makePostCommitWorkflowFacade, Al as makeProcessAdapter, Au as makeQueryDescriptorProducer, ku as makeQueryReauthorizer, Fl as makeRouterActivity, ds as makeSchemaRegistry, Lo as makeStartConnectionExecutor, Ro as makeSubmitTokenExecutor, Ac as makeUndoCapture, Il as makeWakeGate, zl as makeWakeProxyServer, sa as makeWorkflowFacade, la as makeWorkflowFacadeWithCallerContext, da as makeWorkflowHandlers, fa as makeWorkflowLayers, ra as makeWorkflowRunHandle, tc as markWakeupFired, fl as materializeIvm, Bi as memoryApiKeyStore, Ws as memoryReplicationAdapter, _r as memoryRywPositionStore, Xs as nextFiring, cc as nextWakeup, Ml as nodeProcessSupervisor, Xl as noopAnalytics, $l as noopAnalyticsSpec, Ni as noopKv, tr as onBindConnectionSubject, Da as outboxAttemptsTable, wa as outboxTable, ur as parseTraceparent, hr as powerOfTwoSelector, Hu as previewInRollback, Xa as projectConnectionState, uc as pruneWakeups, qo as rebacPolicyGraph, Sn as recordSample, H as recordSubscriptionActive, wn as recordSubscriptionDelivery, al as recordTimelineEvent, Ms as redactColumns, Qc as redactRow, yr as redisRywPositionStore, Jc as redoUndoInvocation, ao as refreshAccessToken, rr as registerConnectionStream, oe as registerRetention, $s as registerWakeup, ic as releaseWakeup, gr as replicaHealth, ci as resetSecretsBackend, go as resolveConnection, jo as resolveConnectionForSubject, Us as resolveCurrentRegion, $t as resolveDependentTables, wo as resolveRedirectUri, ml as resolveRescan, Rn as resolveRowFilterScope, zn as resolveRowFilterScopeFor, li as resolveSecret, ui as resolveSecretSync, pi as resolveSecretsBackend, Yc as resolveTimelineMode, ce as retentionTtlMsFromEnv, el as reverseEventOverRows, $o as revokedIds, Vs as runAsSystem, Vl as runOrchestratorTick, mu as runProvidedEffect, El as runReaction, Hl as runSingleNodeOrchestrator, kl as runWakeLoop, wu as runWithDeadlockRetry, Sr as runWithRoutingContext, pr as runWithTraceContext, Co as sanitizeRedirectTo, bc as scheduleCoordinated, ko as setConnectionResolver, vi as setFieldCipher, Fn as setRowFilter, si as setSecretsBackend, Rs as setSystemStoreHandle, il as setTimelineRecorderForTest, ns as setTupleSource, Fi as sha256Hex, pc as singleCoordinator, An as snapshotMetrics, jn as snapshotMetricsSync, Wr as startRpcServer, _c as startScheduler, Qa as storeCredential, Do as sweepExpiredGrants, de as sweepRetention, Nc as synthesizeInverse, ss as tracingHttpClientLayer, pa as triggerWorkflow, rc as tryClaimWakeup, er as unbindConnectionSubject, Ec as undoCaptureEnabled, Gc as undoLogExecutor, cu as useAggregate, Jl as useAnalytics, Qo as visibleRows, Ol as wakeDueOnce, _u as withRowFilter, ta as workflowToRpc, kc as wrapCaptureStore, As as wrapStoreWithMixinBehaviour };
|