@voltro/protocol 0.67.0 → 0.69.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +437 -0
- package/dist/index.d.ts +106 -4
- package/dist/index.js +552 -497
- package/dist/rest.js +1 -1
- package/dist/{scopes-C86BDyNJ.js → scopes-DVtiKKsm.js} +25 -15
- package/dist/session.js +6 -6
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
import { A as e, B as t, C as n, D as r, E as i, F as a, G as o, H as s, I as c, K as ee, L as te, M as ne, N as re, O as ie, P as l, R as ae, S as oe, T as se, U as ce, V as le, W as ue, _ as de, a as u, b as fe, c as pe, d as me, f as he, g as d, h as ge, i as _e, j as ve, k as ye, l as be, m as xe, n as Se, o as Ce, p as we,
|
|
2
|
-
import { a as
|
|
3
|
-
import { Context as
|
|
4
|
-
import { Rpc as
|
|
5
|
-
import { VersionConflict as
|
|
1
|
+
import { A as e, B as t, C as n, D as r, E as i, F as a, G as o, H as s, I as c, K as ee, L as te, M as ne, N as re, O as ie, P as l, R as ae, S as oe, T as se, U as ce, V as le, W as ue, _ as de, a as u, b as fe, c as pe, d as me, f as he, g as d, h as ge, i as _e, j as ve, k as ye, l as be, m as xe, n as Se, o as Ce, p as we, q as Te, r as Ee, s as De, t as Oe, u as ke, v as Ae, w as je, x as Me, y as f, z as Ne } from "./scopes-DVtiKKsm.js";
|
|
2
|
+
import { a as Pe, c as Fe, d as Ie, i as p, l as Le, n as Re, o as ze, r as Be, s as Ve, t as He, u as Ue } from "./serverErrorBus-BTnTpMqj.js";
|
|
3
|
+
import { Context as We, Layer as Ge, Schema as m } from "effect";
|
|
4
|
+
import { Rpc as h } from "@effect/rpc";
|
|
5
|
+
import { VersionConflict as Ke } from "@voltro/database/wire";
|
|
6
6
|
//#region src/rowPatch.ts
|
|
7
|
-
var
|
|
8
|
-
key:
|
|
9
|
-
value:
|
|
10
|
-
}).pipe(
|
|
11
|
-
op:
|
|
12
|
-
path:
|
|
13
|
-
value:
|
|
14
|
-
}),
|
|
15
|
-
op:
|
|
16
|
-
path:
|
|
17
|
-
value:
|
|
18
|
-
}),
|
|
19
|
-
op:
|
|
20
|
-
path:
|
|
21
|
-
}),
|
|
22
|
-
op:
|
|
23
|
-
path:
|
|
24
|
-
value:
|
|
25
|
-
key:
|
|
26
|
-
value:
|
|
7
|
+
var qe = m.Union(m.String, m.Number), Je = m.Record({
|
|
8
|
+
key: m.String,
|
|
9
|
+
value: m.Unknown
|
|
10
|
+
}).pipe(m.filter((e) => "id" in e, { message: () => "patch row must carry an id" })), Ye = m.Union(m.Struct({
|
|
11
|
+
op: m.Literal("add"),
|
|
12
|
+
path: m.String,
|
|
13
|
+
value: Je
|
|
14
|
+
}), m.Struct({
|
|
15
|
+
op: m.Literal("replace"),
|
|
16
|
+
path: m.String,
|
|
17
|
+
value: Je
|
|
18
|
+
}), m.Struct({
|
|
19
|
+
op: m.Literal("remove"),
|
|
20
|
+
path: m.String
|
|
21
|
+
}), m.Struct({
|
|
22
|
+
op: m.Literal("mergeCells"),
|
|
23
|
+
path: m.String,
|
|
24
|
+
value: m.Record({
|
|
25
|
+
key: m.String,
|
|
26
|
+
value: m.Unknown
|
|
27
27
|
})
|
|
28
|
-
})),
|
|
29
|
-
ops:
|
|
30
|
-
order:
|
|
31
|
-
}),
|
|
28
|
+
})), Xe = m.Struct({
|
|
29
|
+
ops: m.Array(Ye),
|
|
30
|
+
order: m.Array(qe)
|
|
31
|
+
}), g = (e) => `/${String(e).replace(/~/g, "~0").replace(/\//g, "~1")}`, _ = (e) => (e.startsWith("/") ? e.slice(1) : e).replace(/~1/g, "/").replace(/~0/g, "~"), v = (e) => {
|
|
32
32
|
let t = Object.keys(e).sort(), n = {};
|
|
33
33
|
for (let r of t) n[r] = e[r];
|
|
34
34
|
return JSON.stringify(n);
|
|
35
|
-
},
|
|
35
|
+
}, y = (e, t) => v(e) === v(t), Ze = (e, t) => {
|
|
36
36
|
if (e instanceof Uint8Array && t instanceof Uint8Array) {
|
|
37
37
|
if (e.length !== t.length) return !1;
|
|
38
38
|
for (let n = 0; n < e.length; n += 1) if (e[n] !== t[n]) return !1;
|
|
39
39
|
return !0;
|
|
40
40
|
}
|
|
41
|
-
return
|
|
41
|
+
return v({
|
|
42
42
|
id: 0,
|
|
43
43
|
v: e
|
|
44
|
-
}) ===
|
|
44
|
+
}) === v({
|
|
45
45
|
id: 0,
|
|
46
46
|
v: t
|
|
47
47
|
});
|
|
48
|
-
},
|
|
48
|
+
}, Qe = (e, t, n = {}) => {
|
|
49
49
|
let r = /* @__PURE__ */ new Map();
|
|
50
50
|
for (let t of e) r.set(t.id, t);
|
|
51
51
|
let i = [], a = [], o = /* @__PURE__ */ new Set(), s = n.crdt, c = (e, t) => {
|
|
52
52
|
if (s === void 0 || s.columns.size === 0) return;
|
|
53
53
|
let n = {}, r = !1;
|
|
54
54
|
for (let i of s.columns) {
|
|
55
|
-
if (!(i in t) ||
|
|
55
|
+
if (!(i in t) || Ze(e[i], t[i])) continue;
|
|
56
56
|
let a = s.incremental(i, e[i], t[i]);
|
|
57
57
|
if (a === void 0) return;
|
|
58
58
|
n[i] = a, r = !0;
|
|
@@ -70,43 +70,43 @@ var Ge = h.Union(h.String, h.Number), _ = h.Record({
|
|
|
70
70
|
let t = r.get(e.id);
|
|
71
71
|
if (t === void 0) i.push({
|
|
72
72
|
op: "add",
|
|
73
|
-
path:
|
|
73
|
+
path: g(e.id),
|
|
74
74
|
value: e
|
|
75
75
|
});
|
|
76
|
-
else if (!
|
|
76
|
+
else if (!y(t, e)) {
|
|
77
77
|
let n = c(t, e);
|
|
78
78
|
n === void 0 ? i.push({
|
|
79
79
|
op: "replace",
|
|
80
|
-
path:
|
|
80
|
+
path: g(e.id),
|
|
81
81
|
value: e
|
|
82
|
-
}) : (
|
|
82
|
+
}) : (y(Object.fromEntries(Object.entries(t).filter(([e]) => !s.columns.has(e))), n.scalars) || i.push({
|
|
83
83
|
op: "replace",
|
|
84
|
-
path:
|
|
84
|
+
path: g(e.id),
|
|
85
85
|
value: n.scalars
|
|
86
86
|
}), i.push({
|
|
87
87
|
op: "mergeCells",
|
|
88
|
-
path:
|
|
88
|
+
path: g(e.id),
|
|
89
89
|
value: n.merges
|
|
90
90
|
}));
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
93
|
for (let t of e) o.has(t.id) || i.push({
|
|
94
94
|
op: "remove",
|
|
95
|
-
path:
|
|
95
|
+
path: g(t.id)
|
|
96
96
|
});
|
|
97
97
|
return {
|
|
98
98
|
ops: i,
|
|
99
99
|
order: a
|
|
100
100
|
};
|
|
101
|
-
},
|
|
101
|
+
}, $e = (e) => e.every((e) => {
|
|
102
102
|
let t = e.id;
|
|
103
103
|
return typeof t == "string" || typeof t == "number";
|
|
104
|
-
}),
|
|
104
|
+
}), et = (e, t, n = {}) => {
|
|
105
105
|
let r = /* @__PURE__ */ new Map();
|
|
106
106
|
for (let t of e) r.set(t.id, t);
|
|
107
107
|
for (let e of t.ops) {
|
|
108
108
|
if (e.op === "mergeCells") {
|
|
109
|
-
let t =
|
|
109
|
+
let t = _(e.path), i = r.get(t) ?? r.get(Number(t)), a = r.has(t) ? t : Number(t);
|
|
110
110
|
if (i === void 0) continue;
|
|
111
111
|
let o = { ...i };
|
|
112
112
|
for (let [t, r] of Object.entries(e.value)) o[t] = n.mergeCell === void 0 ? r : n.mergeCell(t, i[t], r);
|
|
@@ -121,57 +121,57 @@ var Ge = h.Union(h.String, h.Number), _ = h.Record({
|
|
|
121
121
|
t !== void 0 && i.push(t);
|
|
122
122
|
}
|
|
123
123
|
return i;
|
|
124
|
-
},
|
|
125
|
-
_tag:
|
|
126
|
-
revision:
|
|
124
|
+
}, b = (e) => m.Union(m.Struct({
|
|
125
|
+
_tag: m.Literal("snapshot"),
|
|
126
|
+
revision: m.Number,
|
|
127
127
|
data: e,
|
|
128
|
-
computed:
|
|
129
|
-
reconciles:
|
|
130
|
-
}),
|
|
131
|
-
_tag:
|
|
132
|
-
revision:
|
|
133
|
-
emittedAt:
|
|
134
|
-
patch:
|
|
135
|
-
}),
|
|
136
|
-
_tag:
|
|
137
|
-
error:
|
|
138
|
-
revision:
|
|
139
|
-
})),
|
|
128
|
+
computed: m.optional(m.Boolean),
|
|
129
|
+
reconciles: m.optional(m.String)
|
|
130
|
+
}), m.Struct({
|
|
131
|
+
_tag: m.Literal("delta"),
|
|
132
|
+
revision: m.Number,
|
|
133
|
+
emittedAt: m.Number,
|
|
134
|
+
patch: Xe
|
|
135
|
+
}), m.Struct({
|
|
136
|
+
_tag: m.Literal("error"),
|
|
137
|
+
error: m.Unknown,
|
|
138
|
+
revision: m.optional(m.Number)
|
|
139
|
+
})), x = (e, t) => {
|
|
140
140
|
let n = `${e ?? "this procedure"} input`;
|
|
141
141
|
return t === !0 ? `${n} (guarded — the guard did NOT run: the payload failed to decode first, so this says nothing about access)` : n;
|
|
142
|
-
},
|
|
142
|
+
}, tt = (e) => {
|
|
143
143
|
let t = e.ast;
|
|
144
144
|
return t._tag === "TypeLiteral" && (t.propertySignatures?.length ?? 0) === 0 && (t.indexSignatures?.length ?? 0) === 0;
|
|
145
|
-
},
|
|
146
|
-
let r =
|
|
145
|
+
}, S = (e, t, n) => {
|
|
146
|
+
let r = x(t, n), i = e.annotations({
|
|
147
147
|
parseOptions: { onExcessProperty: "error" },
|
|
148
148
|
parseIssueTitle: () => r
|
|
149
149
|
});
|
|
150
|
-
return
|
|
151
|
-
},
|
|
152
|
-
rule:
|
|
153
|
-
params:
|
|
154
|
-
key:
|
|
155
|
-
value:
|
|
150
|
+
return tt(e) ? m.filter((e) => typeof e == "object" && e && Object.keys(e).length > 0 ? `this procedure declares no input; received: ${Object.keys(e).join(", ")}` : void 0)(i).annotations({ identifier: r }) : i;
|
|
151
|
+
}, nt = class extends m.TaggedError()("BusinessRuleViolation", {
|
|
152
|
+
rule: m.String,
|
|
153
|
+
params: m.optional(m.Record({
|
|
154
|
+
key: m.String,
|
|
155
|
+
value: m.Unknown
|
|
156
156
|
})),
|
|
157
|
-
field:
|
|
158
|
-
message:
|
|
159
|
-
severity:
|
|
160
|
-
}) {},
|
|
161
|
-
field:
|
|
162
|
-
message:
|
|
163
|
-
params:
|
|
164
|
-
key:
|
|
165
|
-
value:
|
|
157
|
+
field: m.optional(m.String),
|
|
158
|
+
message: m.optional(m.String),
|
|
159
|
+
severity: m.Literal("error", "warning")
|
|
160
|
+
}) {}, rt = m.Struct({
|
|
161
|
+
field: m.String,
|
|
162
|
+
message: m.String,
|
|
163
|
+
params: m.optional(m.Record({
|
|
164
|
+
key: m.String,
|
|
165
|
+
value: m.Unknown
|
|
166
166
|
}))
|
|
167
|
-
}),
|
|
168
|
-
field:
|
|
169
|
-
message:
|
|
170
|
-
params:
|
|
171
|
-
key:
|
|
172
|
-
value:
|
|
167
|
+
}), it = class extends m.TaggedError()("ValidationError", {
|
|
168
|
+
field: m.String,
|
|
169
|
+
message: m.String,
|
|
170
|
+
params: m.optional(m.Record({
|
|
171
|
+
key: m.String,
|
|
172
|
+
value: m.Unknown
|
|
173
173
|
}))
|
|
174
|
-
}) {},
|
|
174
|
+
}) {}, at = class extends m.TaggedError()("ValidationErrors", { issues: m.Array(rt).pipe(m.minItems(1)) }) {}, ot = (e) => {
|
|
175
175
|
if (typeof e != "object" || !e) return [];
|
|
176
176
|
let t = e._tag;
|
|
177
177
|
if (t === "ValidationError") {
|
|
@@ -197,69 +197,69 @@ var Ge = h.Union(h.String, h.Number), _ = h.Record({
|
|
|
197
197
|
}];
|
|
198
198
|
}
|
|
199
199
|
return [];
|
|
200
|
-
},
|
|
201
|
-
approvalId:
|
|
202
|
-
procedure:
|
|
203
|
-
expiresAt:
|
|
204
|
-
requiredScopes:
|
|
205
|
-
reason:
|
|
206
|
-
created:
|
|
207
|
-
}) {},
|
|
208
|
-
approvalId:
|
|
209
|
-
subjectId:
|
|
210
|
-
}) {},
|
|
211
|
-
approvalId:
|
|
212
|
-
decidedBy:
|
|
213
|
-
note:
|
|
214
|
-
}) {},
|
|
215
|
-
approvalId:
|
|
216
|
-
expiredAt:
|
|
217
|
-
}) {},
|
|
218
|
-
approvalId:
|
|
219
|
-
status:
|
|
220
|
-
}) {},
|
|
221
|
-
approvalId:
|
|
222
|
-
required:
|
|
223
|
-
message:
|
|
224
|
-
}) {},
|
|
225
|
-
procedure:
|
|
226
|
-
message:
|
|
227
|
-
}) {},
|
|
228
|
-
id:
|
|
229
|
-
procedure:
|
|
230
|
-
kind:
|
|
231
|
-
requestedBy:
|
|
232
|
-
status:
|
|
233
|
-
reason:
|
|
234
|
-
requiredScopes:
|
|
235
|
-
requestedAt:
|
|
236
|
-
expiresAt:
|
|
237
|
-
decidedBy:
|
|
238
|
-
decidedAt:
|
|
239
|
-
note:
|
|
240
|
-
relation:
|
|
241
|
-
}),
|
|
242
|
-
if (!
|
|
200
|
+
}, st = class extends m.TaggedError()("ApprovalRequired", {
|
|
201
|
+
approvalId: m.String,
|
|
202
|
+
procedure: m.String,
|
|
203
|
+
expiresAt: m.String,
|
|
204
|
+
requiredScopes: m.Array(m.String),
|
|
205
|
+
reason: m.NullOr(m.String),
|
|
206
|
+
created: m.Boolean
|
|
207
|
+
}) {}, ct = class extends m.TaggedError()("ApprovalNotFound", { approvalId: m.String }) {}, lt = class extends m.TaggedError()("ApprovalSelfApproval", {
|
|
208
|
+
approvalId: m.String,
|
|
209
|
+
subjectId: m.NullOr(m.String)
|
|
210
|
+
}) {}, ut = class extends m.TaggedError()("ApprovalRejected", {
|
|
211
|
+
approvalId: m.String,
|
|
212
|
+
decidedBy: m.NullOr(m.String),
|
|
213
|
+
note: m.NullOr(m.String)
|
|
214
|
+
}) {}, C = class extends m.TaggedError()("ApprovalExpired", {
|
|
215
|
+
approvalId: m.String,
|
|
216
|
+
expiredAt: m.String
|
|
217
|
+
}) {}, dt = class extends m.TaggedError()("ApprovalNotPending", {
|
|
218
|
+
approvalId: m.String,
|
|
219
|
+
status: m.String
|
|
220
|
+
}) {}, ft = class extends m.TaggedError()("ApprovalForbidden", {
|
|
221
|
+
approvalId: m.String,
|
|
222
|
+
required: m.NullOr(m.String),
|
|
223
|
+
message: m.String
|
|
224
|
+
}) {}, w = class extends m.TaggedError()("ApprovalUnavailable", {
|
|
225
|
+
procedure: m.String,
|
|
226
|
+
message: m.String
|
|
227
|
+
}) {}, pt = m.Union(st, ut, C, w), mt = m.Union(ct, lt, C, dt, ft, w), ht = m.Struct({
|
|
228
|
+
id: m.String,
|
|
229
|
+
procedure: m.String,
|
|
230
|
+
kind: m.Literal("mutation", "action"),
|
|
231
|
+
requestedBy: m.NullOr(m.String),
|
|
232
|
+
status: m.Literal("pending", "approved", "rejected", "expired", "consumed"),
|
|
233
|
+
reason: m.NullOr(m.String),
|
|
234
|
+
requiredScopes: m.Array(m.String),
|
|
235
|
+
requestedAt: m.String,
|
|
236
|
+
expiresAt: m.String,
|
|
237
|
+
decidedBy: m.NullOr(m.String),
|
|
238
|
+
decidedAt: m.NullOr(m.String),
|
|
239
|
+
note: m.NullOr(m.String),
|
|
240
|
+
relation: m.Literal("to-decide", "requested")
|
|
241
|
+
}), T = "channel:", gt = Symbol.for("@voltro/protocol/reactivityChannels"), _t = globalThis, E = _t[gt] ?? (_t[gt] = /* @__PURE__ */ new Map()), vt = /^[a-z][a-z0-9-]*(\.[a-z0-9-]+)*$/, yt = (e) => {
|
|
242
|
+
if (!vt.test(e)) throw Error(`reactivityChannel('${e}'): invalid channel name.\n Use lowercase kebab segments separated by dots — \`presence\`, \`job-queue\`,
|
|
243
243
|
\`billing.usage\`. A \`:\` is refused because it is the namespace separator in
|
|
244
|
-
the routing key (\`${
|
|
244
|
+
the routing key (\`${T}<name>\`), and an uppercase letter is\n refused because a key that differs only by case reads as one channel and
|
|
245
245
|
routes as two.`);
|
|
246
|
-
let t =
|
|
246
|
+
let t = E.get(e);
|
|
247
247
|
if (t !== void 0) return t;
|
|
248
|
-
let n = `${
|
|
248
|
+
let n = `${T}${e}`, r = Object.freeze({
|
|
249
249
|
kind: "reactivity-channel",
|
|
250
250
|
name: e,
|
|
251
251
|
key: n,
|
|
252
252
|
toString: () => n
|
|
253
253
|
});
|
|
254
|
-
return
|
|
255
|
-
},
|
|
256
|
-
let t =
|
|
257
|
-
for (let r of e) for (let e of
|
|
254
|
+
return E.set(e, r), r;
|
|
255
|
+
}, D = (e) => typeof e == "object" && !!e && e.kind === "reactivity-channel", O = (e) => e.startsWith(T), k = () => new Set([...E.values()].map((e) => e.key)), A = (e) => D(e) ? e.key : e, j = (e) => e === void 0 ? [] : Array.isArray(e) ? e.map(A) : [A(e)], M = (e) => e === void 0 ? void 0 : Array.isArray(e) ? e.map(A) : A(e), bt = (e) => {
|
|
256
|
+
let t = k(), n = [];
|
|
257
|
+
for (let r of e) for (let e of j(r.source)) O(e) && !t.has(e) && n.push({
|
|
258
258
|
procedure: r.name,
|
|
259
259
|
key: e
|
|
260
260
|
});
|
|
261
261
|
return n;
|
|
262
|
-
},
|
|
262
|
+
}, xt = (e, t) => {
|
|
263
263
|
let n = e?.injectExternalChange;
|
|
264
264
|
return n !== void 0 && (n.call(e, {
|
|
265
265
|
table: t.key,
|
|
@@ -268,8 +268,8 @@ var Ge = h.Union(h.String, h.Number), _ = h.Record({
|
|
|
268
268
|
old: {},
|
|
269
269
|
origin: "inline"
|
|
270
270
|
}), !0);
|
|
271
|
-
},
|
|
272
|
-
if (
|
|
271
|
+
}, St = (e) => e.internal !== !0, N = (e) => {
|
|
272
|
+
if (Ct(e), e.idempotencyScope !== void 0 && e.idempotencyScope !== "subject" && e.idempotencyScope !== "connection") throw Error(`${e.name}: idempotencyScope must be 'subject' or 'connection'`);
|
|
273
273
|
if (e.idempotencyScope === "connection" && (e.internal === !0 || e.publicApi !== void 0 || e.exposeAsTool !== void 0)) throw Error(`${e.name}: connection-scoped mutations require the native WebSocket RPC surface; internal, publicApi and exposeAsTool cannot establish its connection state`);
|
|
274
274
|
if (Array.isArray(e.guards) && e.guards.length === 0) throw Error(`${e.name}: \`guards: []\` is empty, so it enforces nothing — but it reads\n at the call site as if this procedure were protected. Omit the field for an
|
|
275
275
|
unguarded procedure, or list the scopes required to call it.`);
|
|
@@ -288,7 +288,7 @@ var Ge = h.Union(h.String, h.Number), _ = h.Record({
|
|
|
288
288
|
let n = [e.publicApi === void 0 ? void 0 : "publicApi", e.exposeAsTool === void 0 ? void 0 : "exposeAsTool"].filter((e) => e !== void 0);
|
|
289
289
|
if (n.length === 0) return e;
|
|
290
290
|
throw Error(`${e.name}: \`internal: true\` cannot be combined with ${n.map((e) => `\`${e}\``).join(" or ")}. \`internal\` takes the procedure OFF the wire; those put it back ON a different one (${n.includes("publicApi") ? "a REST route" : "an agent tool"}), and that surface is projected without consulting the flag — so the procedure would be unreachable from your client and reachable from the internet. Drop \`internal: true\` if the wider surface is intended, or remove the ${n.join(" / ")} annotation if it is not.`);
|
|
291
|
-
},
|
|
291
|
+
}, Ct = (e) => {
|
|
292
292
|
let t = e.requiresApproval;
|
|
293
293
|
if (t !== void 0) {
|
|
294
294
|
if (!Array.isArray(t.approvers) || t.approvers.length === 0) throw Error(`${e.name}: \`requiresApproval.approvers\` is empty, so NOBODY can approve this\n procedure and every call would park forever. Name the scope(s) an approver must hold
|
|
@@ -298,49 +298,49 @@ var Ge = h.Union(h.String, h.Number), _ = h.Record({
|
|
|
298
298
|
human from every other, and the second-pair-of-eyes control would enforce nothing.
|
|
299
299
|
Give the procedure a \`guards:\` decision, or drop \`requiresApproval\`.`);
|
|
300
300
|
}
|
|
301
|
-
},
|
|
301
|
+
}, wt = (e) => e.action !== void 0 && e.resourceType !== void 0, Tt = (e) => e.authenticated === !0, Et = (e) => e.openAccess !== void 0 || e.guards !== void 0 && e.guards.length > 0, P = (e, t, n) => {
|
|
302
302
|
if (n === void 0) return t;
|
|
303
303
|
if (n.trim() === "") throw Error(`${e}: \`openAccess\` needs a REASON, not an empty string. It is the sentence a\n reviewer reads to decide whether this procedure should really be callable
|
|
304
304
|
without an authorization check — e.g. \`openAccess: 'public pricing, no caller data'\`.`);
|
|
305
305
|
if (t !== void 0 && t.length > 0) throw Error(`${e}: \`openAccess\` and \`guards\` are two different access decisions, so\n declaring both says the procedure is protected AND open. Keep the guards if a
|
|
306
306
|
caller must hold a scope; drop them if anyone may call it.`);
|
|
307
307
|
return [f(n.trim())];
|
|
308
|
-
},
|
|
308
|
+
}, F = (e) => N({
|
|
309
309
|
kind: "query",
|
|
310
310
|
name: e.name,
|
|
311
311
|
input: e.input,
|
|
312
312
|
output: e.output,
|
|
313
|
-
error: e.error ??
|
|
314
|
-
source:
|
|
313
|
+
error: e.error ?? m.Never,
|
|
314
|
+
source: M(e.source),
|
|
315
315
|
cache: e.cache,
|
|
316
|
-
guards:
|
|
316
|
+
guards: P(e.name, e.guards, e.openAccess),
|
|
317
317
|
openAccess: e.openAccess,
|
|
318
318
|
publicApi: e.publicApi,
|
|
319
319
|
exposeAsTool: e.exposeAsTool,
|
|
320
320
|
internal: e.internal,
|
|
321
321
|
overridesPlugin: e.overridesPlugin
|
|
322
|
-
}),
|
|
322
|
+
}), I = (e) => N({
|
|
323
323
|
kind: "mutation",
|
|
324
324
|
name: e.name,
|
|
325
325
|
input: e.input,
|
|
326
326
|
output: e.output,
|
|
327
|
-
error: e.error ??
|
|
327
|
+
error: e.error ?? m.Never,
|
|
328
328
|
...e.idempotencyScope === void 0 ? {} : { idempotencyScope: e.idempotencyScope },
|
|
329
329
|
target: e.target,
|
|
330
|
-
guards:
|
|
330
|
+
guards: P(e.name, e.guards, e.openAccess),
|
|
331
331
|
openAccess: e.openAccess,
|
|
332
332
|
publicApi: e.publicApi,
|
|
333
333
|
exposeAsTool: e.exposeAsTool,
|
|
334
334
|
requiresApproval: e.requiresApproval,
|
|
335
335
|
internal: e.internal,
|
|
336
336
|
overridesPlugin: e.overridesPlugin
|
|
337
|
-
}),
|
|
337
|
+
}), L = (e) => N({
|
|
338
338
|
kind: "action",
|
|
339
339
|
name: e.name,
|
|
340
340
|
input: e.input,
|
|
341
341
|
output: e.output,
|
|
342
|
-
error: e.error ??
|
|
343
|
-
guards:
|
|
342
|
+
error: e.error ?? m.Never,
|
|
343
|
+
guards: P(e.name, e.guards, e.openAccess),
|
|
344
344
|
openAccess: e.openAccess,
|
|
345
345
|
source: e.source,
|
|
346
346
|
target: e.target,
|
|
@@ -349,55 +349,55 @@ var Ge = h.Union(h.String, h.Number), _ = h.Record({
|
|
|
349
349
|
requiresApproval: e.requiresApproval,
|
|
350
350
|
internal: e.internal,
|
|
351
351
|
overridesPlugin: e.overridesPlugin
|
|
352
|
-
}),
|
|
352
|
+
}), Dt = (e) => N({
|
|
353
353
|
kind: "stream",
|
|
354
354
|
name: e.name,
|
|
355
355
|
input: e.input,
|
|
356
356
|
element: e.element,
|
|
357
|
-
error: e.error ??
|
|
357
|
+
error: e.error ?? m.Never,
|
|
358
358
|
internal: e.internal,
|
|
359
359
|
overridesPlugin: e.overridesPlugin,
|
|
360
|
-
guards:
|
|
360
|
+
guards: P(e.name, e.guards, e.openAccess),
|
|
361
361
|
openAccess: e.openAccess
|
|
362
|
-
}),
|
|
362
|
+
}), R = (e, t) => t && t.length > 0 ? m.Union(e, ...t) : e, z = (e) => e !== void 0 && e.some((e) => !d(e)), Ot = (e, t) => z(t) ? m.Union(e, u, l) : e, kt = (e) => m.Union(e, nt), At = (e) => m.Union(e, it, at), jt = (e, t) => t === void 0 ? e : m.Union(e, pt), B = (e, t) => {
|
|
363
363
|
if (t === "stream") return e.error;
|
|
364
|
-
let n =
|
|
364
|
+
let n = Ot(e.error, e.guards);
|
|
365
365
|
if (t === "query") return n;
|
|
366
|
-
let r = t === "mutation" ?
|
|
367
|
-
return
|
|
368
|
-
},
|
|
366
|
+
let r = t === "mutation" ? m.Union(kt(n), Pe, Ke) : n;
|
|
367
|
+
return jt(At(t === "mutation" && e.idempotencyScope === "connection" ? m.Union(r, p) : r), e.requiresApproval);
|
|
368
|
+
}, Mt = (e, t) => R(Ot(e.errorSchema, e.guards), t), Nt = (e, t) => ({
|
|
369
369
|
...e,
|
|
370
370
|
name: t
|
|
371
|
-
}),
|
|
372
|
-
payload:
|
|
373
|
-
success:
|
|
374
|
-
error:
|
|
371
|
+
}), Pt = (e, t) => h.make(e.name, {
|
|
372
|
+
payload: S(e.input, e.name, z(e.guards)),
|
|
373
|
+
success: b(e.output),
|
|
374
|
+
error: R(B(e, "query"), t),
|
|
375
375
|
stream: !0
|
|
376
|
-
}),
|
|
377
|
-
payload:
|
|
376
|
+
}), Ft = (e, t) => h.make(e.name, {
|
|
377
|
+
payload: S(e.input, e.name, z(e.guards)),
|
|
378
378
|
success: e.output,
|
|
379
|
-
error:
|
|
380
|
-
}),
|
|
381
|
-
payload:
|
|
379
|
+
error: R(B(e, "mutation"), t)
|
|
380
|
+
}), It = (e, t) => h.make(e.name, {
|
|
381
|
+
payload: S(e.input, e.name, z(e.guards)),
|
|
382
382
|
success: e.output,
|
|
383
|
-
error:
|
|
384
|
-
}),
|
|
385
|
-
payload:
|
|
383
|
+
error: R(B(e, "action"), t)
|
|
384
|
+
}), Lt = (e, t) => h.make(e.name, {
|
|
385
|
+
payload: S(e.input, e.name, z(e.guards)),
|
|
386
386
|
success: e.element,
|
|
387
|
-
error:
|
|
387
|
+
error: R(e.error, t),
|
|
388
388
|
stream: !0
|
|
389
|
-
}),
|
|
389
|
+
}), Rt = (e) => {
|
|
390
390
|
if (typeof e != "object" || !e) return;
|
|
391
391
|
let t = e._tag;
|
|
392
392
|
return typeof t == "string" ? t : void 0;
|
|
393
|
-
},
|
|
393
|
+
}, zt = (e) => {
|
|
394
394
|
switch (e.kind) {
|
|
395
|
-
case "query": return
|
|
396
|
-
case "mutation": return
|
|
397
|
-
case "action": return
|
|
398
|
-
case "stream": return
|
|
395
|
+
case "query": return Pt(e);
|
|
396
|
+
case "mutation": return Ft(e);
|
|
397
|
+
case "action": return It(e);
|
|
398
|
+
case "stream": return Lt(e);
|
|
399
399
|
}
|
|
400
|
-
},
|
|
400
|
+
}, Bt = (e) => {
|
|
401
401
|
let t = e.input, n = t === void 0 ? {} : { input: t }, r = e.output, i = r === void 0 ? {} : { output: r };
|
|
402
402
|
if (e.kind === "query") return {
|
|
403
403
|
kind: "query",
|
|
@@ -441,7 +441,7 @@ var Ge = h.Union(h.String, h.Number), _ = h.Record({
|
|
|
441
441
|
..."relations" in e && e.relations !== void 0 ? { relations: e.relations } : {}
|
|
442
442
|
}))
|
|
443
443
|
};
|
|
444
|
-
},
|
|
444
|
+
}, Vt = 7500, Ht = (e) => typeof e == "object" && !!e && e.kind === "event", Ut = (e) => {
|
|
445
445
|
if (e.name.length === 0) throw Error("defineEvent: `name` must not be empty");
|
|
446
446
|
if (/\s/.test(e.name)) throw Error(`defineEvent("${e.name}"): \`name\` must not contain whitespace.\n The name is used as a broker subject segment. NATS refuses a subject with
|
|
447
447
|
whitespace and delivers nothing — silently, and only on that broker, so an
|
|
@@ -476,60 +476,60 @@ var Ge = h.Union(h.String, h.Number), _ = h.Record({
|
|
|
476
476
|
webhook: e.webhook,
|
|
477
477
|
delivery: e.delivery
|
|
478
478
|
};
|
|
479
|
-
},
|
|
480
|
-
_tag:
|
|
481
|
-
origin:
|
|
482
|
-
n:
|
|
483
|
-
emittedAt:
|
|
479
|
+
}, Wt = (e) => m.Struct({
|
|
480
|
+
_tag: m.Literal("event"),
|
|
481
|
+
origin: m.String,
|
|
482
|
+
n: m.Number,
|
|
483
|
+
emittedAt: m.Number,
|
|
484
484
|
payload: e
|
|
485
|
-
}),
|
|
486
|
-
_tag:
|
|
487
|
-
missed:
|
|
488
|
-
reason:
|
|
489
|
-
}),
|
|
490
|
-
origin:
|
|
491
|
-
n:
|
|
492
|
-
}),
|
|
485
|
+
}), Gt = m.Struct({
|
|
486
|
+
_tag: m.Literal("gap"),
|
|
487
|
+
missed: m.Number,
|
|
488
|
+
reason: m.Literal("buffer", "resume")
|
|
489
|
+
}), Kt = m.Struct({ _tag: m.Literal("attached") }), qt = (e) => m.Union(Kt, Wt(e), Gt), Jt = m.Struct({
|
|
490
|
+
origin: m.String,
|
|
491
|
+
n: m.Number
|
|
492
|
+
}), Yt = (e) => m.Struct({
|
|
493
493
|
key: e,
|
|
494
|
-
resume:
|
|
495
|
-
}),
|
|
496
|
-
let n = e.guards !== void 0 && e.guards.some((e) => !d(e)) ?
|
|
497
|
-
return
|
|
498
|
-
payload:
|
|
499
|
-
success:
|
|
494
|
+
resume: m.optional(m.Array(Jt))
|
|
495
|
+
}), Xt = (e, t) => {
|
|
496
|
+
let n = e.guards !== void 0 && e.guards.some((e) => !d(e)) ? m.Union(u, l) : m.Never, r = t && t.length > 0 ? m.Union(n, ...t) : n;
|
|
497
|
+
return h.make(e.name, {
|
|
498
|
+
payload: S(Yt(e.key), e.name, z(e.guards)),
|
|
499
|
+
success: qt(e.payload),
|
|
500
500
|
error: r,
|
|
501
501
|
stream: !0
|
|
502
502
|
});
|
|
503
|
-
},
|
|
504
|
-
event:
|
|
505
|
-
message:
|
|
506
|
-
}) {},
|
|
507
|
-
event:
|
|
508
|
-
message:
|
|
509
|
-
}) {},
|
|
510
|
-
event:
|
|
511
|
-
bytes:
|
|
512
|
-
limit:
|
|
513
|
-
}) {},
|
|
503
|
+
}, Zt = class extends m.TaggedError()("EventPayloadInvalid", {
|
|
504
|
+
event: m.String,
|
|
505
|
+
message: m.String
|
|
506
|
+
}) {}, Qt = class extends m.TaggedError()("EventKeyInvalid", {
|
|
507
|
+
event: m.String,
|
|
508
|
+
message: m.String
|
|
509
|
+
}) {}, $t = class extends m.TaggedError()("EventPayloadTooLarge", {
|
|
510
|
+
event: m.String,
|
|
511
|
+
bytes: m.Number,
|
|
512
|
+
limit: m.Number
|
|
513
|
+
}) {}, en = (e) => {
|
|
514
514
|
if (typeof e != "object" || !e) return JSON.stringify(e) ?? "null";
|
|
515
515
|
let t = Object.entries(e).filter(([, e]) => e !== void 0).sort(([e], [t]) => e < t ? -1 : +(e > t));
|
|
516
516
|
return JSON.stringify(t);
|
|
517
|
-
},
|
|
517
|
+
}, tn = "\0", nn = (e, t, n) => [
|
|
518
518
|
e ?? "~",
|
|
519
519
|
t,
|
|
520
|
-
|
|
521
|
-
].join("\0"),
|
|
520
|
+
en(n)
|
|
521
|
+
].join("\0"), rn = (e) => {
|
|
522
522
|
let [t = "~", n = "", r = ""] = e.split("\0");
|
|
523
523
|
return {
|
|
524
524
|
tenantId: t === "~" ? null : t,
|
|
525
525
|
event: n,
|
|
526
526
|
key: r
|
|
527
527
|
};
|
|
528
|
-
},
|
|
528
|
+
}, an = (e) => e.split("\0").join(" · "), V = Symbol.for("@voltro/protocol/workflow-access"), on = {
|
|
529
529
|
guards: void 0,
|
|
530
530
|
openAccess: void 0,
|
|
531
531
|
internal: !1
|
|
532
|
-
},
|
|
532
|
+
}, sn = (e, t) => {
|
|
533
533
|
let n = t.guards;
|
|
534
534
|
if (n !== void 0 && n.length === 0) throw Error(`workflow("${e}"): \`guards: []\` is empty, so it enforces nothing —\n but it reads at the call site as if the start were protected. Omit the field
|
|
535
535
|
and decide with \`openAccess\` or \`internal\`, or list the scopes that may start it.`);
|
|
@@ -549,37 +549,92 @@ var Ge = h.Union(h.String, h.Number), _ = h.Record({
|
|
|
549
549
|
openAccess: t.openAccess?.trim(),
|
|
550
550
|
internal: t.internal === !0
|
|
551
551
|
};
|
|
552
|
-
},
|
|
553
|
-
Object.defineProperty(e,
|
|
552
|
+
}, cn = (e, t) => {
|
|
553
|
+
Object.defineProperty(e, V, {
|
|
554
554
|
value: t,
|
|
555
555
|
enumerable: !1
|
|
556
556
|
});
|
|
557
|
-
},
|
|
558
|
-
if (typeof e != "object" || !e) return
|
|
559
|
-
let t = e[
|
|
560
|
-
return t === void 0 ?
|
|
561
|
-
},
|
|
562
|
-
let t =
|
|
557
|
+
}, H = (e) => {
|
|
558
|
+
if (typeof e != "object" || !e) return on;
|
|
559
|
+
let t = e[V];
|
|
560
|
+
return t === void 0 ? on : t;
|
|
561
|
+
}, ln = (e) => {
|
|
562
|
+
let t = H(e);
|
|
563
563
|
return {
|
|
564
564
|
name: e.name,
|
|
565
565
|
internal: t.internal,
|
|
566
566
|
guards: t.guards,
|
|
567
567
|
openAccess: t.openAccess
|
|
568
568
|
};
|
|
569
|
-
},
|
|
569
|
+
}, un = (e) => typeof e == "object" && !!e && typeof e._tag == "string", dn = 64, U = (e, t = 0) => {
|
|
570
|
+
if (!un(e)) return String(e);
|
|
571
|
+
if (t >= dn) return "…";
|
|
572
|
+
let n = t + 1, r = (t) => U(e[t], n), i = (t) => Array.isArray(e[t]) ? e[t] : [];
|
|
573
|
+
switch (e._tag) {
|
|
574
|
+
case "Transformation": return `T(${r("from")}->${r("to")})`;
|
|
575
|
+
case "Refinement": return `R(${r("from")})`;
|
|
576
|
+
case "Suspend": return "S(…)";
|
|
577
|
+
case "TypeLiteral": {
|
|
578
|
+
let e = i("propertySignatures").map((e) => {
|
|
579
|
+
let t = e;
|
|
580
|
+
return `${String(t.name)}${t.isOptional === !0 ? "?" : ""}:${U(t.type, n)}`;
|
|
581
|
+
}).join(","), t = i("indexSignatures").map((e) => {
|
|
582
|
+
let t = e;
|
|
583
|
+
return `[${U(t.parameter, n)}]:${U(t.type, n)}`;
|
|
584
|
+
}).join(",");
|
|
585
|
+
return t === "" ? `{${e}}` : `{${e};${t}}`;
|
|
586
|
+
}
|
|
587
|
+
case "Union": return `U(${i("types").map((e) => U(e, n)).join("|")})`;
|
|
588
|
+
case "TupleType": {
|
|
589
|
+
let e = i("elements").map((e) => {
|
|
590
|
+
let t = e;
|
|
591
|
+
return `${U(t.type, n)}${t.isOptional === !0 ? "?" : ""}`;
|
|
592
|
+
}).join(","), t = i("rest").map((e) => U(e.type, n)).join(",");
|
|
593
|
+
return `A(${e}${t === "" ? "" : `...${t}`})`;
|
|
594
|
+
}
|
|
595
|
+
case "Declaration": return `D(${i("typeParameters").map((e) => U(e, n)).join(",")})`;
|
|
596
|
+
default: return String(e);
|
|
597
|
+
}
|
|
598
|
+
}, fn = (e) => {
|
|
599
|
+
let t = 2166136261;
|
|
600
|
+
for (let n = 0; n < e.length; n++) t ^= e.charCodeAt(n), t = Math.imul(t, 16777619) >>> 0;
|
|
601
|
+
return t.toString(16).padStart(8, "0");
|
|
602
|
+
}, pn = (e) => fn([
|
|
603
|
+
U(e.payloadSchema?.ast),
|
|
604
|
+
U(e.successSchema?.ast),
|
|
605
|
+
U(e.errorSchema?.ast)
|
|
606
|
+
].join("\0")), mn = (e) => {
|
|
607
|
+
let t = {}, n = e.requests, r = n instanceof Map ? n.entries() : Array.isArray(n) ? n.map((e, t) => [t, e]) : [];
|
|
608
|
+
for (let [, e] of r) {
|
|
609
|
+
if (typeof e != "object" && typeof e != "function" || e === null) continue;
|
|
610
|
+
let n = e;
|
|
611
|
+
typeof n._tag == "string" && (t[n._tag] = pn(n));
|
|
612
|
+
}
|
|
613
|
+
return t;
|
|
614
|
+
}, hn = (e, t) => {
|
|
615
|
+
let n = [], r = [];
|
|
616
|
+
for (let [i, a] of Object.entries(t)) {
|
|
617
|
+
let t = e[i];
|
|
618
|
+
t === void 0 ? r.push(i) : t !== a && n.push(i);
|
|
619
|
+
}
|
|
620
|
+
return {
|
|
621
|
+
differing: n.sort(),
|
|
622
|
+
missingHere: r.sort()
|
|
623
|
+
};
|
|
624
|
+
}, gn = (e) => e, _n = (e) => e, vn = (e) => {
|
|
570
625
|
let t = e.alias?.trim(), n = e.instance?.trim(), r = t !== void 0 && t !== "" ? t : e.base;
|
|
571
626
|
return n !== void 0 && n !== "" ? `${r}#${n}` : r;
|
|
572
|
-
},
|
|
627
|
+
}, yn = (e) => {
|
|
573
628
|
if (e.length !== 0) return (t, n) => e.reduceRight((e, t) => t(e, n), t);
|
|
574
|
-
},
|
|
575
|
-
let n =
|
|
629
|
+
}, bn = (e, t) => {
|
|
630
|
+
let n = We.GenericTag(e);
|
|
576
631
|
return {
|
|
577
632
|
Tag: n,
|
|
578
|
-
Live:
|
|
633
|
+
Live: Ge.succeed(n, t)
|
|
579
634
|
};
|
|
580
|
-
},
|
|
635
|
+
}, xn = (e, t, n) => {
|
|
581
636
|
if (!t) return { ok: !0 };
|
|
582
|
-
let r = n === void 0 ? null :
|
|
637
|
+
let r = n === void 0 ? null : W(n);
|
|
583
638
|
if (!r) return {
|
|
584
639
|
ok: !0,
|
|
585
640
|
unverified: `plugin "${e}" requires framework ${t}, but the running framework version is ${n === void 0 ? "unknown" : `unreadable ("${n}")`} — not checked.`
|
|
@@ -587,12 +642,12 @@ var Ge = h.Union(h.String, h.Number), _ = h.Record({
|
|
|
587
642
|
let i = t.trim();
|
|
588
643
|
if (i === "*" || i === "") return { ok: !0 };
|
|
589
644
|
let a = i.split(/\s+/).filter((e) => e.length > 0);
|
|
590
|
-
for (let i of a) if (!
|
|
645
|
+
for (let i of a) if (!Sn(i, r)) return {
|
|
591
646
|
ok: !1,
|
|
592
647
|
reason: `plugin "${e}" requires framework ${t}, running ${n}`
|
|
593
648
|
};
|
|
594
649
|
return { ok: !0 };
|
|
595
|
-
},
|
|
650
|
+
}, W = (e) => {
|
|
596
651
|
let t = /^(\d+)\.(\d+)\.(\d+)(?:-([0-9a-zA-Z.-]+))?$/.exec(e.trim());
|
|
597
652
|
return t ? {
|
|
598
653
|
major: Number(t[1]),
|
|
@@ -600,273 +655,273 @@ var Ge = h.Union(h.String, h.Number), _ = h.Record({
|
|
|
600
655
|
patch: Number(t[3]),
|
|
601
656
|
pre: t[4] ?? ""
|
|
602
657
|
} : null;
|
|
603
|
-
},
|
|
658
|
+
}, G = (e, t) => e.major === t.major ? e.minor === t.minor ? e.patch === t.patch ? e.pre && !t.pre ? -1 : !e.pre && t.pre ? 1 : e.pre && t.pre ? e.pre < t.pre ? -1 : +(e.pre > t.pre) : 0 : e.patch - t.patch : e.minor - t.minor : e.major - t.major, Sn = (e, t) => {
|
|
604
659
|
if (e === "*") return !0;
|
|
605
660
|
if (e.startsWith("^")) {
|
|
606
|
-
let n =
|
|
607
|
-
return !n || t.major !== n.major ? !1 :
|
|
661
|
+
let n = W(e.slice(1));
|
|
662
|
+
return !n || t.major !== n.major ? !1 : G(t, n) >= 0;
|
|
608
663
|
}
|
|
609
664
|
if (e.startsWith("~")) {
|
|
610
|
-
let n =
|
|
611
|
-
return !n || t.major !== n.major || t.minor !== n.minor ? !1 :
|
|
665
|
+
let n = W(e.slice(1));
|
|
666
|
+
return !n || t.major !== n.major || t.minor !== n.minor ? !1 : G(t, n) >= 0;
|
|
612
667
|
}
|
|
613
668
|
let n = /^(>=|<=|>|<)(.+)$/.exec(e);
|
|
614
669
|
if (n) {
|
|
615
|
-
let e = n[1], r =
|
|
670
|
+
let e = n[1], r = W(n[2]);
|
|
616
671
|
if (!r) return !1;
|
|
617
|
-
let i =
|
|
672
|
+
let i = G(t, r);
|
|
618
673
|
if (e === ">=") return i >= 0;
|
|
619
674
|
if (e === "<=") return i <= 0;
|
|
620
675
|
if (e === ">") return i > 0;
|
|
621
676
|
if (e === "<") return i < 0;
|
|
622
677
|
}
|
|
623
|
-
let r =
|
|
624
|
-
return r ?
|
|
625
|
-
},
|
|
678
|
+
let r = W(e);
|
|
679
|
+
return r ? G(t, r) === 0 : !1;
|
|
680
|
+
}, Cn = (e) => {
|
|
626
681
|
let t = e.startsWith("@") ? e.replace(/^@[^/]+\//, "") : e;
|
|
627
682
|
return (t.startsWith("plugin-") ? t.slice(7) : t).replace(/-([a-zA-Z0-9])/g, (e, t) => t.toUpperCase());
|
|
628
|
-
},
|
|
683
|
+
}, wn = (e) => {
|
|
629
684
|
let t = e.startsWith("@") ? e.replace(/^@[^/]+\//, "") : e;
|
|
630
685
|
return (t.startsWith("plugin-") ? t.slice(7) : t).replace(/#/g, "--").replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
631
|
-
},
|
|
632
|
-
let e = globalThis, t = e[
|
|
686
|
+
}, Tn = Symbol.for("@voltro/protocol/pluginAliases"), K = () => {
|
|
687
|
+
let e = globalThis, t = e[Tn];
|
|
633
688
|
if (t instanceof Map) return t;
|
|
634
689
|
let n = /* @__PURE__ */ new Map();
|
|
635
|
-
return e[
|
|
636
|
-
},
|
|
637
|
-
let t =
|
|
690
|
+
return e[Tn] = n, n;
|
|
691
|
+
}, En = (e) => {
|
|
692
|
+
let t = K();
|
|
638
693
|
for (let [n, r] of Object.entries(e)) {
|
|
639
694
|
if (r === "") continue;
|
|
640
695
|
let e = t.get(n);
|
|
641
696
|
e === void 0 ? t.set(n, /* @__PURE__ */ new Set([r])) : e.add(r);
|
|
642
697
|
}
|
|
643
|
-
},
|
|
644
|
-
|
|
645
|
-
},
|
|
646
|
-
let n =
|
|
647
|
-
if (n === void 0 || n.size === 0) return `${
|
|
698
|
+
}, Dn = () => {
|
|
699
|
+
K().clear();
|
|
700
|
+
}, On = (e, t) => {
|
|
701
|
+
let n = K().get(e);
|
|
702
|
+
if (n === void 0 || n.size === 0) return `${Cn(e)}.${t}`;
|
|
648
703
|
if (n.size === 1) return `${[...n][0]}.${t}`;
|
|
649
704
|
let r = [...n].filter((e) => !e.includes("#"));
|
|
650
705
|
if (r.length === 1) return `${r[0]}.${t}`;
|
|
651
706
|
throw Error(`[voltro] ${e} is installed more than once (${[...n].sort().join(", ")}) and no single install is the primary one, so a plugin hook cannot tell which of them it addresses. Call the route by its full tag instead — e.g. useSubscription(api, '${[...n].sort()[0]}.${t}').`);
|
|
652
|
-
},
|
|
653
|
-
mode:
|
|
654
|
-
dueAt:
|
|
655
|
-
retryAfterMs:
|
|
656
|
-
intentId:
|
|
657
|
-
}),
|
|
658
|
-
id:
|
|
659
|
-
workflowName:
|
|
660
|
-
executionId:
|
|
661
|
-
status:
|
|
662
|
-
deferral:
|
|
663
|
-
}),
|
|
664
|
-
let n =
|
|
665
|
-
return
|
|
666
|
-
payload:
|
|
667
|
-
success:
|
|
668
|
-
error:
|
|
707
|
+
}, q = m.Literal("running", "succeeded", "failed", "cancelled", "suspended"), kn = m.Literal("cancel", "terminate", "abandon"), An = m.Struct({
|
|
708
|
+
mode: m.String,
|
|
709
|
+
dueAt: m.NullOr(m.Number),
|
|
710
|
+
retryAfterMs: m.NullOr(m.Number),
|
|
711
|
+
intentId: m.NullOr(m.String)
|
|
712
|
+
}), jn = m.Struct({
|
|
713
|
+
id: m.String,
|
|
714
|
+
workflowName: m.String,
|
|
715
|
+
executionId: m.NullOr(m.String),
|
|
716
|
+
status: m.Literal("running", "queued", "dropped", "skipped", "replayed"),
|
|
717
|
+
deferral: m.optional(An)
|
|
718
|
+
}), Mn = (e, t) => {
|
|
719
|
+
let n = H(e);
|
|
720
|
+
return h.make(e.name, {
|
|
721
|
+
payload: S(e.payloadSchema, e.name, z(n.guards)),
|
|
722
|
+
success: jn,
|
|
723
|
+
error: Mt({
|
|
669
724
|
errorSchema: e.errorSchema,
|
|
670
725
|
guards: n.guards
|
|
671
726
|
}, t)
|
|
672
727
|
});
|
|
673
|
-
},
|
|
674
|
-
id:
|
|
675
|
-
tag:
|
|
676
|
-
executionId:
|
|
677
|
-
status:
|
|
678
|
-
payload:
|
|
679
|
-
workflowVersion:
|
|
680
|
-
workflowPatches:
|
|
681
|
-
output:
|
|
682
|
-
subject:
|
|
683
|
-
source:
|
|
684
|
-
errorTag:
|
|
685
|
-
errorMessage:
|
|
686
|
-
cancelled:
|
|
687
|
-
startedAt:
|
|
688
|
-
completedAt:
|
|
689
|
-
durationMs:
|
|
690
|
-
traceId:
|
|
691
|
-
parentExecutionId:
|
|
692
|
-
parentClosePolicy:
|
|
693
|
-
}),
|
|
694
|
-
tag:
|
|
695
|
-
status:
|
|
696
|
-
limit:
|
|
697
|
-
}),
|
|
698
|
-
id:
|
|
699
|
-
runId:
|
|
700
|
-
stepName:
|
|
701
|
-
attempt:
|
|
702
|
-
status:
|
|
703
|
-
input:
|
|
704
|
-
retryPolicy:
|
|
705
|
-
output:
|
|
706
|
-
errorTag:
|
|
707
|
-
errorMessage:
|
|
708
|
-
errorCause:
|
|
709
|
-
startedAt:
|
|
710
|
-
completedAt:
|
|
711
|
-
durationMs:
|
|
712
|
-
}),
|
|
713
|
-
id:
|
|
714
|
-
runId:
|
|
715
|
-
eventType:
|
|
716
|
-
payload:
|
|
717
|
-
occurredAt:
|
|
718
|
-
stepName:
|
|
719
|
-
attempt:
|
|
720
|
-
}),
|
|
721
|
-
id:
|
|
722
|
-
name:
|
|
723
|
-
payload:
|
|
724
|
-
source:
|
|
725
|
-
subject:
|
|
726
|
-
traceId:
|
|
727
|
-
occurredAt:
|
|
728
|
-
}),
|
|
729
|
-
id:
|
|
730
|
-
eventId:
|
|
731
|
-
eventName:
|
|
732
|
-
triggerId:
|
|
733
|
-
workflowName:
|
|
734
|
-
executionId:
|
|
735
|
-
status:
|
|
736
|
-
idempotencyKey:
|
|
737
|
-
skipped:
|
|
738
|
-
errorMessage:
|
|
739
|
-
createdAt:
|
|
740
|
-
completedAt:
|
|
741
|
-
}),
|
|
742
|
-
name:
|
|
743
|
-
limit:
|
|
744
|
-
}),
|
|
745
|
-
workflowName:
|
|
746
|
-
executionId:
|
|
747
|
-
}),
|
|
748
|
-
id:
|
|
749
|
-
signalName:
|
|
750
|
-
payload:
|
|
751
|
-
}),
|
|
752
|
-
id:
|
|
753
|
-
updateName:
|
|
754
|
-
payload:
|
|
755
|
-
timeoutMs:
|
|
756
|
-
}),
|
|
757
|
-
eventId:
|
|
758
|
-
updateId:
|
|
759
|
-
completedEventId:
|
|
760
|
-
result:
|
|
761
|
-
}),
|
|
728
|
+
}, J = m.Struct({
|
|
729
|
+
id: m.String,
|
|
730
|
+
tag: m.String,
|
|
731
|
+
executionId: m.String,
|
|
732
|
+
status: q,
|
|
733
|
+
payload: m.Unknown,
|
|
734
|
+
workflowVersion: m.NullOr(m.String),
|
|
735
|
+
workflowPatches: m.NullOr(m.Unknown),
|
|
736
|
+
output: m.NullOr(m.Unknown),
|
|
737
|
+
subject: m.NullOr(m.Unknown),
|
|
738
|
+
source: m.NullOr(m.String),
|
|
739
|
+
errorTag: m.NullOr(m.String),
|
|
740
|
+
errorMessage: m.NullOr(m.String),
|
|
741
|
+
cancelled: m.Boolean,
|
|
742
|
+
startedAt: m.Date,
|
|
743
|
+
completedAt: m.NullOr(m.Date),
|
|
744
|
+
durationMs: m.NullOr(m.Number),
|
|
745
|
+
traceId: m.NullOr(m.String),
|
|
746
|
+
parentExecutionId: m.NullOr(m.String),
|
|
747
|
+
parentClosePolicy: m.NullOr(kn)
|
|
748
|
+
}), Nn = m.Struct({
|
|
749
|
+
tag: m.optional(m.String),
|
|
750
|
+
status: m.optional(q),
|
|
751
|
+
limit: m.optional(m.Number)
|
|
752
|
+
}), Pn = m.Struct({
|
|
753
|
+
id: m.String,
|
|
754
|
+
runId: m.String,
|
|
755
|
+
stepName: m.String,
|
|
756
|
+
attempt: m.Number,
|
|
757
|
+
status: m.Literal("running", "succeeded", "failed"),
|
|
758
|
+
input: m.NullOr(m.Unknown),
|
|
759
|
+
retryPolicy: m.NullOr(m.Unknown),
|
|
760
|
+
output: m.NullOr(m.Unknown),
|
|
761
|
+
errorTag: m.NullOr(m.String),
|
|
762
|
+
errorMessage: m.NullOr(m.String),
|
|
763
|
+
errorCause: m.NullOr(m.Unknown),
|
|
764
|
+
startedAt: m.Date,
|
|
765
|
+
completedAt: m.NullOr(m.Date),
|
|
766
|
+
durationMs: m.NullOr(m.Number)
|
|
767
|
+
}), Fn = m.Struct({
|
|
768
|
+
id: m.String,
|
|
769
|
+
runId: m.String,
|
|
770
|
+
eventType: m.String,
|
|
771
|
+
payload: m.NullOr(m.Unknown),
|
|
772
|
+
occurredAt: m.Date,
|
|
773
|
+
stepName: m.NullOr(m.String),
|
|
774
|
+
attempt: m.NullOr(m.Number)
|
|
775
|
+
}), In = m.Struct({
|
|
776
|
+
id: m.String,
|
|
777
|
+
name: m.String,
|
|
778
|
+
payload: m.Unknown,
|
|
779
|
+
source: m.String,
|
|
780
|
+
subject: m.NullOr(m.Unknown),
|
|
781
|
+
traceId: m.NullOr(m.String),
|
|
782
|
+
occurredAt: m.Date
|
|
783
|
+
}), Ln = m.Struct({
|
|
784
|
+
id: m.String,
|
|
785
|
+
eventId: m.String,
|
|
786
|
+
eventName: m.String,
|
|
787
|
+
triggerId: m.String,
|
|
788
|
+
workflowName: m.String,
|
|
789
|
+
executionId: m.NullOr(m.String),
|
|
790
|
+
status: m.Literal("starting", "started", "skipped", "failed"),
|
|
791
|
+
idempotencyKey: m.String,
|
|
792
|
+
skipped: m.Boolean,
|
|
793
|
+
errorMessage: m.NullOr(m.String),
|
|
794
|
+
createdAt: m.Date,
|
|
795
|
+
completedAt: m.NullOr(m.Date)
|
|
796
|
+
}), Rn = m.Struct({ id: m.String }), Y = m.Struct({ runId: m.String }), zn = m.Struct({
|
|
797
|
+
name: m.optional(m.String),
|
|
798
|
+
limit: m.optional(m.Number)
|
|
799
|
+
}), Bn = m.Struct({ eventId: m.String }), X = m.Struct({
|
|
800
|
+
workflowName: m.String,
|
|
801
|
+
executionId: m.String
|
|
802
|
+
}), Vn = m.Struct({
|
|
803
|
+
id: m.String,
|
|
804
|
+
signalName: m.String,
|
|
805
|
+
payload: m.optional(m.Unknown)
|
|
806
|
+
}), Hn = m.Struct({
|
|
807
|
+
id: m.String,
|
|
808
|
+
updateName: m.String,
|
|
809
|
+
payload: m.optional(m.Unknown),
|
|
810
|
+
timeoutMs: m.optional(m.Number)
|
|
811
|
+
}), Un = m.Struct({
|
|
812
|
+
eventId: m.String,
|
|
813
|
+
updateId: m.String,
|
|
814
|
+
completedEventId: m.String,
|
|
815
|
+
result: m.Unknown
|
|
816
|
+
}), Wn = F({
|
|
762
817
|
name: "__voltro.workflow.run",
|
|
763
818
|
source: "_voltro_workflow_runs",
|
|
764
|
-
input:
|
|
765
|
-
output:
|
|
766
|
-
}),
|
|
819
|
+
input: Rn,
|
|
820
|
+
output: m.Array(J)
|
|
821
|
+
}), Gn = F({
|
|
767
822
|
name: "__voltro.workflow.runs",
|
|
768
823
|
source: "_voltro_workflow_runs",
|
|
769
|
-
input:
|
|
770
|
-
output:
|
|
771
|
-
}),
|
|
824
|
+
input: Nn,
|
|
825
|
+
output: m.Array(J)
|
|
826
|
+
}), Kn = F({
|
|
772
827
|
name: "__voltro.workflow.run.steps",
|
|
773
828
|
source: "_voltro_workflow_run_steps",
|
|
774
|
-
input:
|
|
775
|
-
output:
|
|
776
|
-
}),
|
|
829
|
+
input: Y,
|
|
830
|
+
output: m.Array(Pn)
|
|
831
|
+
}), qn = F({
|
|
777
832
|
name: "__voltro.workflow.run.events",
|
|
778
833
|
source: "_voltro_workflow_run_events",
|
|
779
|
-
input:
|
|
780
|
-
output:
|
|
781
|
-
}),
|
|
834
|
+
input: Y,
|
|
835
|
+
output: m.Array(Fn)
|
|
836
|
+
}), Jn = F({
|
|
782
837
|
name: "__voltro.workflow.domainEvents",
|
|
783
838
|
source: "_voltro_workflow_events",
|
|
784
|
-
input:
|
|
785
|
-
output:
|
|
786
|
-
}),
|
|
839
|
+
input: zn,
|
|
840
|
+
output: m.Array(In)
|
|
841
|
+
}), Yn = F({
|
|
787
842
|
name: "__voltro.workflow.event.deliveries",
|
|
788
843
|
source: "_voltro_workflow_event_deliveries",
|
|
789
|
-
input:
|
|
790
|
-
output:
|
|
791
|
-
}),
|
|
844
|
+
input: Bn,
|
|
845
|
+
output: m.Array(Ln)
|
|
846
|
+
}), Xn = L({
|
|
792
847
|
name: "__voltro.workflow.cancel",
|
|
793
|
-
input:
|
|
794
|
-
output:
|
|
795
|
-
}),
|
|
848
|
+
input: X,
|
|
849
|
+
output: m.Struct({ ok: m.Boolean })
|
|
850
|
+
}), Zn = L({
|
|
796
851
|
name: "__voltro.workflow.resume",
|
|
797
|
-
input:
|
|
798
|
-
output:
|
|
799
|
-
}),
|
|
852
|
+
input: X,
|
|
853
|
+
output: m.Struct({ ok: m.Boolean })
|
|
854
|
+
}), Qn = L({
|
|
800
855
|
name: "__voltro.workflow.signal",
|
|
801
|
-
input:
|
|
802
|
-
output:
|
|
803
|
-
}),
|
|
856
|
+
input: Vn,
|
|
857
|
+
output: m.Struct({ eventId: m.String })
|
|
858
|
+
}), $n = L({
|
|
804
859
|
name: "__voltro.workflow.update",
|
|
805
|
-
input:
|
|
806
|
-
output:
|
|
807
|
-
}),
|
|
808
|
-
id:
|
|
809
|
-
tag:
|
|
810
|
-
label:
|
|
811
|
-
undone:
|
|
812
|
-
crossesAction:
|
|
813
|
-
createdAt:
|
|
814
|
-
}),
|
|
815
|
-
invocationId:
|
|
816
|
-
reason:
|
|
817
|
-
}) {},
|
|
818
|
-
name:
|
|
860
|
+
input: Hn,
|
|
861
|
+
output: Un
|
|
862
|
+
}), er = "__voltro.undo.log", tr = "__voltro.undo.apply", nr = "__voltro.undo.redo", rr = m.Struct({
|
|
863
|
+
id: m.String,
|
|
864
|
+
tag: m.String,
|
|
865
|
+
label: m.NullOr(m.String),
|
|
866
|
+
undone: m.Boolean,
|
|
867
|
+
crossesAction: m.Boolean,
|
|
868
|
+
createdAt: m.String
|
|
869
|
+
}), ir = class extends m.TaggedError()("UndoNotFound", { invocationId: m.String }) {}, ar = class extends m.TaggedError()("UndoForbidden", { invocationId: m.String }) {}, or = class extends m.TaggedError()("UndoConflict", {
|
|
870
|
+
invocationId: m.String,
|
|
871
|
+
reason: m.Literal("conflict", "action")
|
|
872
|
+
}) {}, Z = m.Union(ir, ar, or), sr = F({
|
|
873
|
+
name: er,
|
|
819
874
|
source: "_voltro_undo_log",
|
|
820
|
-
input:
|
|
821
|
-
output:
|
|
875
|
+
input: m.Struct({ limit: m.optional(m.Number) }),
|
|
876
|
+
output: m.Array(rr),
|
|
822
877
|
openAccess: "subject-scoped by construction: lists only the calling subject's own undoable actions"
|
|
823
|
-
}),
|
|
824
|
-
name:
|
|
825
|
-
input:
|
|
826
|
-
output:
|
|
827
|
-
error:
|
|
878
|
+
}), cr = I({
|
|
879
|
+
name: tr,
|
|
880
|
+
input: m.Struct({ invocationId: m.String }),
|
|
881
|
+
output: m.Struct({ ok: m.Boolean }),
|
|
882
|
+
error: Z,
|
|
828
883
|
openAccess: "subject-scoped by construction: undo is per-actor — another subject's invocation fails typed with UndoForbidden"
|
|
829
|
-
}),
|
|
830
|
-
name:
|
|
831
|
-
input:
|
|
832
|
-
output:
|
|
833
|
-
error:
|
|
884
|
+
}), lr = I({
|
|
885
|
+
name: nr,
|
|
886
|
+
input: m.Struct({ invocationId: m.String }),
|
|
887
|
+
output: m.Struct({ ok: m.Boolean }),
|
|
888
|
+
error: Z,
|
|
834
889
|
openAccess: "subject-scoped by construction: redo is per-actor — another subject's invocation fails typed with UndoForbidden"
|
|
835
|
-
}),
|
|
836
|
-
table:
|
|
837
|
-
reason:
|
|
838
|
-
}) {},
|
|
839
|
-
operation:
|
|
840
|
-
table:
|
|
841
|
-
cause:
|
|
842
|
-
}) {},
|
|
843
|
-
table:
|
|
844
|
-
found:
|
|
890
|
+
}), ur = class extends m.TaggedError()("TenantScopeViolation", {
|
|
891
|
+
table: m.String,
|
|
892
|
+
reason: m.String
|
|
893
|
+
}) {}, dr = class extends m.TaggedError()("StoreOperationFailed", {
|
|
894
|
+
operation: m.String,
|
|
895
|
+
table: m.String,
|
|
896
|
+
cause: m.String
|
|
897
|
+
}) {}, fr = class extends m.TaggedError()("NoRowFound", {
|
|
898
|
+
table: m.String,
|
|
899
|
+
found: m.Number
|
|
845
900
|
}) {
|
|
846
901
|
get message() {
|
|
847
902
|
return this.found === 0 ? `expected exactly one row in '${this.table}', found none` : `expected exactly one row in '${this.table}', found more than one`;
|
|
848
903
|
}
|
|
849
|
-
},
|
|
850
|
-
table:
|
|
851
|
-
summary:
|
|
852
|
-
issues:
|
|
853
|
-
path:
|
|
854
|
-
message:
|
|
904
|
+
}, pr = class extends m.TaggedError()("TableValidationFailed", {
|
|
905
|
+
table: m.String,
|
|
906
|
+
summary: m.String,
|
|
907
|
+
issues: m.Array(m.Struct({
|
|
908
|
+
path: m.String,
|
|
909
|
+
message: m.String
|
|
855
910
|
}))
|
|
856
|
-
}) {},
|
|
857
|
-
table:
|
|
858
|
-
id:
|
|
859
|
-
reason:
|
|
860
|
-
}) {},
|
|
861
|
-
table:
|
|
862
|
-
columns:
|
|
863
|
-
}) {},
|
|
864
|
-
kind:
|
|
865
|
-
table:
|
|
866
|
-
operation:
|
|
867
|
-
constraint:
|
|
868
|
-
column:
|
|
869
|
-
detail:
|
|
911
|
+
}) {}, mr = class extends m.TaggedError()("TenantRowNotFound", {
|
|
912
|
+
table: m.String,
|
|
913
|
+
id: m.String,
|
|
914
|
+
reason: m.String
|
|
915
|
+
}) {}, hr = class extends m.TaggedError()("ServerOnlyColumnWrite", {
|
|
916
|
+
table: m.String,
|
|
917
|
+
columns: m.Array(m.String)
|
|
918
|
+
}) {}, gr = class extends m.TaggedError()("ConstraintViolation", {
|
|
919
|
+
kind: m.Literal("foreignKey", "foreignKeyInUse", "unique", "notNull", "check"),
|
|
920
|
+
table: m.String,
|
|
921
|
+
operation: m.String,
|
|
922
|
+
constraint: m.optional(m.String),
|
|
923
|
+
column: m.optional(m.String),
|
|
924
|
+
detail: m.optional(m.String)
|
|
870
925
|
}) {
|
|
871
926
|
get message() {
|
|
872
927
|
if (this.detail !== void 0) return this.detail;
|
|
@@ -879,85 +934,85 @@ var Ge = h.Union(h.String, h.Number), _ = h.Record({
|
|
|
879
934
|
case "check": return `check constraint ${t}: the row does not satisfy it`;
|
|
880
935
|
}
|
|
881
936
|
}
|
|
882
|
-
},
|
|
883
|
-
name:
|
|
937
|
+
}, _r = "__voltro.approvals.pending", vr = "__voltro.approvals.decide", yr = F({
|
|
938
|
+
name: _r,
|
|
884
939
|
source: "_voltro_approvals",
|
|
885
|
-
input:
|
|
886
|
-
output:
|
|
940
|
+
input: m.Struct({ limit: m.optional(m.Number) }),
|
|
941
|
+
output: m.Array(ht),
|
|
887
942
|
openAccess: "the answer is scoped to the caller — a row appears only if they requested it or hold its recorded approver scopes, so an anonymous caller sees nothing"
|
|
888
|
-
}),
|
|
889
|
-
name:
|
|
890
|
-
input:
|
|
891
|
-
approvalId:
|
|
892
|
-
decision:
|
|
893
|
-
note:
|
|
943
|
+
}), br = I({
|
|
944
|
+
name: vr,
|
|
945
|
+
input: m.Struct({
|
|
946
|
+
approvalId: m.String,
|
|
947
|
+
decision: m.Literal("approve", "reject"),
|
|
948
|
+
note: m.optional(m.String)
|
|
894
949
|
}),
|
|
895
|
-
output:
|
|
896
|
-
approvalId:
|
|
897
|
-
status:
|
|
950
|
+
output: m.Struct({
|
|
951
|
+
approvalId: m.String,
|
|
952
|
+
status: m.Literal("approved", "rejected")
|
|
898
953
|
}),
|
|
899
|
-
error:
|
|
954
|
+
error: mt,
|
|
900
955
|
openAccess: "the approver authority is the PENDING ROW's own recorded scopes (plus an unconditional self-approval refusal), checked in-handler — a descriptor-level scope would have to be the union of every approval-requiring procedure in the app"
|
|
901
|
-
}),
|
|
902
|
-
connectionId:
|
|
956
|
+
}), xr = "__voltro.connections.list", Sr = "__voltro.connections.start", Cr = "__voltro.connections.submitToken", wr = "__voltro.connections.disconnect", Q = m.Literal("oauth2", "pat"), Tr = m.Literal("disconnected", "connected", "expired", "revoked", "error"), Er = m.Struct({
|
|
957
|
+
connectionId: m.String,
|
|
903
958
|
kind: Q,
|
|
904
|
-
label:
|
|
905
|
-
status:
|
|
906
|
-
accountId:
|
|
907
|
-
accountLabel:
|
|
908
|
-
scopes:
|
|
909
|
-
expiresAt:
|
|
910
|
-
lastError:
|
|
911
|
-
connectedAt:
|
|
912
|
-
}),
|
|
913
|
-
connectionId:
|
|
959
|
+
label: m.String,
|
|
960
|
+
status: Tr,
|
|
961
|
+
accountId: m.NullOr(m.String),
|
|
962
|
+
accountLabel: m.NullOr(m.String),
|
|
963
|
+
scopes: m.Array(m.String),
|
|
964
|
+
expiresAt: m.NullOr(m.String),
|
|
965
|
+
lastError: m.NullOr(m.String),
|
|
966
|
+
connectedAt: m.NullOr(m.String)
|
|
967
|
+
}), Dr = class extends m.TaggedError()("ConnectionNotDeclared", { connectionId: m.String }) {}, Or = class extends m.TaggedError()("ConnectionSubjectRequired", { connectionId: m.String }) {}, kr = class extends m.TaggedError()("ConnectionKindMismatch", {
|
|
968
|
+
connectionId: m.String,
|
|
914
969
|
expected: Q,
|
|
915
970
|
actual: Q
|
|
916
|
-
}) {},
|
|
917
|
-
connectionId:
|
|
918
|
-
reason:
|
|
919
|
-
transient:
|
|
920
|
-
}) {}, $ =
|
|
921
|
-
name:
|
|
971
|
+
}) {}, Ar = class extends m.TaggedError()("ConnectionHandshakeFailed", {
|
|
972
|
+
connectionId: m.String,
|
|
973
|
+
reason: m.String,
|
|
974
|
+
transient: m.Boolean
|
|
975
|
+
}) {}, $ = m.Union(Dr, Or, kr, Ar), jr = F({
|
|
976
|
+
name: xr,
|
|
922
977
|
source: "_voltro_connections",
|
|
923
|
-
input:
|
|
924
|
-
output:
|
|
978
|
+
input: m.Struct({}),
|
|
979
|
+
output: m.Array(Er),
|
|
925
980
|
openAccess: "self-scoped read: projects the declared connections for the calling subject only (its own connect/disconnect state)"
|
|
926
|
-
}),
|
|
927
|
-
name:
|
|
928
|
-
input:
|
|
929
|
-
connectionId:
|
|
930
|
-
redirectTo:
|
|
981
|
+
}), Mr = L({
|
|
982
|
+
name: Sr,
|
|
983
|
+
input: m.Struct({
|
|
984
|
+
connectionId: m.String,
|
|
985
|
+
redirectTo: m.optional(m.String)
|
|
931
986
|
}),
|
|
932
|
-
output:
|
|
933
|
-
authorizeUrl:
|
|
934
|
-
state:
|
|
987
|
+
output: m.Struct({
|
|
988
|
+
authorizeUrl: m.String,
|
|
989
|
+
state: m.String
|
|
935
990
|
}),
|
|
936
991
|
error: $,
|
|
937
992
|
openAccess: "self-service: begins an oauth handshake that stores a credential for the calling subject only; anonymous callers fail typed with ConnectionSubjectRequired"
|
|
938
|
-
}),
|
|
939
|
-
name:
|
|
940
|
-
input:
|
|
941
|
-
connectionId:
|
|
942
|
-
token:
|
|
993
|
+
}), Nr = I({
|
|
994
|
+
name: Cr,
|
|
995
|
+
input: m.Struct({
|
|
996
|
+
connectionId: m.String,
|
|
997
|
+
token: m.String
|
|
943
998
|
}),
|
|
944
|
-
output:
|
|
999
|
+
output: m.Struct({ ok: m.Boolean }),
|
|
945
1000
|
error: $,
|
|
946
1001
|
openAccess: "self-service: stores a pasted token as the calling subject's own credential; anonymous callers fail typed with ConnectionSubjectRequired"
|
|
947
|
-
}),
|
|
948
|
-
name:
|
|
949
|
-
input:
|
|
950
|
-
output:
|
|
1002
|
+
}), Pr = I({
|
|
1003
|
+
name: wr,
|
|
1004
|
+
input: m.Struct({ connectionId: m.String }),
|
|
1005
|
+
output: m.Struct({ ok: m.Boolean }),
|
|
951
1006
|
error: $,
|
|
952
1007
|
openAccess: "self-service: deletes only the calling subject's own credential row for this connection"
|
|
953
|
-
}),
|
|
1008
|
+
}), Fr = (e) => {
|
|
954
1009
|
let t = e instanceof Date ? e.getTime() : typeof e == "number" ? e : typeof e == "string" ? new Date(e).getTime() : 0;
|
|
955
1010
|
return Number.isNaN(t) ? 0 : t;
|
|
956
|
-
},
|
|
1011
|
+
}, Ir = 4001, Lr = /* @__PURE__ */ new Set(["/rpc", "/ws"]), Rr = (e) => {
|
|
957
1012
|
if (!e.path.startsWith("/")) throw Error(`defineWebSocket: path must be absolute, got '${e.path}'`);
|
|
958
|
-
if (
|
|
1013
|
+
if (Lr.has(e.path)) throw Error(`defineWebSocket: '${e.path}' is the framework's own socket surface — mount the gateway elsewhere`);
|
|
959
1014
|
if (e.auth !== "subject" && e.auth !== "public") throw Error(`defineWebSocket: auth must be 'subject' or 'public' (explicitly — an unauthenticated socket has to be a decision somebody wrote down), got '${String(e.auth)}'`);
|
|
960
1015
|
return e;
|
|
961
|
-
},
|
|
1016
|
+
}, zr = 1;
|
|
962
1017
|
//#endregion
|
|
963
|
-
export {
|
|
1018
|
+
export { Oe as ADMIN_SCOPE, Se as APIKEY_ISSUE_ORG_SCOPE, Ee as APIKEY_ISSUE_OTHER_SCOPE, _e as APIKEY_ISSUE_SELF_SCOPE, vr as APPROVALS_DECIDE_TAG, _r as APPROVALS_PENDING_TAG, mt as ApprovalDecisionErrors, pt as ApprovalErrors, C as ApprovalExpired, ft as ApprovalForbidden, ct as ApprovalNotFound, dt as ApprovalNotPending, ut as ApprovalRejected, st as ApprovalRequired, lt as ApprovalSelfApproval, w as ApprovalUnavailable, se as AuthMiddleware, nt as BusinessRuleViolation, xr as CONNECTIONS_LIST_TAG, wr as CONNECTION_DISCONNECT_TAG, Sr as CONNECTION_START_TAG, Cr as CONNECTION_SUBMIT_TOKEN_TAG, Ar as ConnectionHandshakeFailed, i as ConnectionInfo, r as ConnectionInfoMiddleware, Q as ConnectionKind, kr as ConnectionKindMismatch, Dr as ConnectionNotDeclared, Er as ConnectionState, Tr as ConnectionStatus, Or as ConnectionSubjectRequired, gr as ConstraintViolation, ie as DEFAULT_SCOPE_CACHE_MAX_ENTRIES, ye as DEFAULT_SCOPE_CACHE_TTL_MS, tn as EVENT_ROUTE_SEP, Qt as EventKeyInvalid, Zt as EventPayloadInvalid, $t as EventPayloadTooLarge, Ir as GATEWAY_CREDENTIAL_EXPIRED_CLOSE_CODE, e as IMPERSONATION_METADATA_KEY, Vt as MAX_EVENT_ENVELOPE_BYTES, Be as MUTATION_IN_FLIGHT_RETRY_AFTER_MS, p as MutationConnectionRequired, Pe as MutationInFlight, fr as NoRowFound, zr as PROTOCOL_VERSION, ht as PendingApproval, T as REACTIVITY_CHANNEL_PREFIX, u as ScopeError, hr as ServerOnlyColumnWrite, dr as StoreOperationFailed, ve as Subject, ne as SubjectIdentity, re as SubjectService, pr as TableValidationFailed, mr as TenantRowNotFound, ur as TenantScopeViolation, tr as UNDO_APPLY_TAG, er as UNDO_LOG_TAG, nr as UNDO_REDO_TAG, l as Unauthenticated, or as UndoConflict, ar as UndoForbidden, rr as UndoLogEntry, ir as UndoNotFound, it as ValidationError, at as ValidationErrors, rt as ValidationIssue, V as WorkflowAccessProperty, X as WorkflowControlInputSchema, In as WorkflowDomainEventRowSchema, zn as WorkflowDomainEventsInputSchema, Bn as WorkflowEventDeliveriesInputSchema, Ln as WorkflowEventDeliveryRowSchema, kn as WorkflowParentClosePolicySchema, Fn as WorkflowRunEventRowSchema, jn as WorkflowRunHandleSchema, Rn as WorkflowRunRefSchema, J as WorkflowRunRowSchema, q as WorkflowRunStatusSchema, Pn as WorkflowRunStepRowSchema, Y as WorkflowRunTableRefSchema, Nn as WorkflowRunsInputSchema, Vn as WorkflowSignalInputSchema, An as WorkflowStartDeferralSchema, Hn as WorkflowUpdateInputSchema, Un as WorkflowUpdateResultSchema, It as actionToRpc, Ce as advisoryResourceGuardWarning, a as anonymousSubject, et as applyRowPatch, c as applyScopeDecision, br as approvalsDecideDescriptor, yr as approvalsPendingQueryDescriptor, te as assertAuthenticated, cn as attachWorkflowAccess, ze as beginIdempotent, xn as checkFrameworkCompat, De as checkGuards, pe as checkGuardsEffect, hn as compareSurfaces, ae as composeAuthStrategies, yn as composeRpcInterceptors, Pr as connectionDisconnectDescriptor, Mr as connectionStartDescriptor, Nr as connectionSubmitTokenDescriptor, jr as connectionsListQueryDescriptor, k as declaredReactivityChannelKeys, L as defineAction, Ut as defineEvent, I as defineMutation, gn as definePlugin, _n as definePluginRoute, bn as definePluginService, F as defineQuery, Dt as defineStream, Rr as defineWebSocket, Qe as diffRows, be as effectiveScopes, en as encodeEventKey, Rt as errorTag, Kt as eventAttached, Wt as eventEnvelope, Gt as eventGap, Jt as eventResumePoint, nn as eventRoute, qt as eventStreamEvent, Yt as eventSubscribeInput, Xt as eventToRpc, Ve as failIdempotent, ot as fieldIssuesOf, ke as findAdvisoryResourceGuards, Fe as finishIdempotent, an as formatEventRoute, me as getPolicyGuardResolver, he as getResourceScopeResolver, H as getWorkflowAccess, mn as groupShapeDigests, Et as hasAccessDecision, Ne as hasCallbackRoutes, we as hasEffectiveScope, z as hasEnforcedGuard, xe as hasScope, g as idToPath, Le as idempotencyScope, x as inputLabel, ge as isAuthenticatedCheck, Tt as isAuthenticatedGuard, Ht as isEventDescriptor, $e as isIdKeyed, d as isOpenAccess, de as isPolicyCheck, wt as isPolicyGuard, D as isReactivityChannel, O as isReactivityChannelKey, t as isSystemSubject, St as isWireReachable, le as makeScopeCache, Ue as memoryIdempotencyStore, Ae as missingAccessDecision, Ft as mutationToRpc, Bt as normalizeDescriptor, M as normalizeSource, f as openAccessSpec, s as orderByBearerPrefix, rn as parseEventRoute, _ as pathToId, Cn as pluginAlias, vn as pluginInstanceName, wn as pluginSlug, On as pluginTag, pn as procedureShapeDigest, xt as publishReactivity, He as publishServerError, Pt as queryToRpc, ce as rawImpersonationMark, yt as reactivityChannel, En as registerPluginAliases, fe as requireScope, Dn as resetPluginAliases, sn as resolveWorkflowAccess, Ye as rowPatchOpSchema, Xe as rowPatchSchema, U as schemaShape, ue as scopeCacheKey, Me as setEffectiveScopes, oe as setPolicyGuardResolver, n as setResourceScopeResolver, fn as shapeDigest, j as sourceKeys, Lt as streamToRpc, S as strictInput, o as subjectIdentity, je as subjectScopes, Re as subscribeServerErrors, b as subscriptionEvent, ee as systemSubject, Te as tenantScopedSubject, zt as toRpc, Fr as tsMs, bt as undeclaredChannelKeys, cr as undoApplyDescriptor, sr as undoLogQueryDescriptor, lr as undoRedoDescriptor, B as wireErrorUnion, Nt as withRpcTag, ln as workflowAccessDescriptor, Xn as workflowCancelDescriptor, Jn as workflowDomainEventsQueryDescriptor, Yn as workflowEventDeliveriesQueryDescriptor, Zn as workflowResumeDescriptor, qn as workflowRunEventsQueryDescriptor, Wn as workflowRunQueryDescriptor, Kn as workflowRunStepsQueryDescriptor, Gn as workflowRunsQueryDescriptor, Qn as workflowSignalDescriptor, Mn as workflowToRpc, $n as workflowUpdateDescriptor, Mt as workflowWireErrorUnion, Ie as wsMutationIdempotencyScope };
|