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