@voltro/protocol 0.70.0 → 0.71.1

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/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, 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 { S as Pe, _ as Fe, a as Ie, b as Le, c as Re, d as ze, f as Be, g as Ve, h as p, i as He, l as Ue, m as We, n as Ge, o as Ke, p as qe, r as Je, s as Ye, t as Xe, u as Ze, v as Qe, x as $e, y as et } from "./restFormat-Bnngx-zI.js";
3
- import { Context as tt, Layer as nt, Schema as m } from "effect";
4
- import { Rpc as h } from "@effect/rpc";
5
- import { VersionConflict as rt } from "@voltro/database/wire";
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 it = m.Union(m.String, m.Number), g = 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" })), at = m.Union(m.Struct({
11
- op: m.Literal("add"),
12
- path: m.String,
13
- value: g
14
- }), m.Struct({
15
- op: m.Literal("replace"),
16
- path: m.String,
17
- value: g
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
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
- })), ot = m.Struct({
29
- ops: m.Array(at),
30
- order: m.Array(it)
31
- }), _ = (e) => `/${String(e).replace(/~/g, "~0").replace(/\//g, "~1")}`, st = (e) => (e.startsWith("/") ? e.slice(1) : e).replace(/~1/g, "/").replace(/~0/g, "~"), v = (e) => {
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
- }, y = (e, t) => v(e) === v(t), ct = (e, t) => {
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 v({
41
+ return g({
42
42
  id: 0,
43
43
  v: e
44
- }) === v({
44
+ }) === g({
45
45
  id: 0,
46
46
  v: t
47
47
  });
48
- }, lt = (e, t, n = {}) => {
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) || ct(e[i], t[i])) continue;
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: _(e.id),
73
+ path: h(e.id),
74
74
  value: e
75
75
  });
76
- else if (!y(t, e)) {
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: _(e.id),
80
+ path: h(e.id),
81
81
  value: e
82
- }) : (y(Object.fromEntries(Object.entries(t).filter(([e]) => !s.columns.has(e))), n.scalars) || i.push({
82
+ }) : (_(Object.fromEntries(Object.entries(t).filter(([e]) => !s.columns.has(e))), n.scalars) || i.push({
83
83
  op: "replace",
84
- path: _(e.id),
84
+ path: h(e.id),
85
85
  value: n.scalars
86
86
  }), i.push({
87
87
  op: "mergeCells",
88
- path: _(e.id),
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: _(t.id)
95
+ path: h(t.id)
96
96
  });
97
97
  return {
98
98
  ops: i,
99
99
  order: a
100
100
  };
101
- }, ut = (e) => e.every((e) => {
101
+ }, yt = (e) => e.every((e) => {
102
102
  let t = e.id;
103
103
  return typeof t == "string" || typeof t == "number";
104
- }), dt = (e, t, n = {}) => {
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 = st(e.path), i = r.get(t) ?? r.get(Number(t)), a = r.has(t) ? t : Number(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
- }, b = (e) => m.Union(m.Struct({
125
- _tag: m.Literal("snapshot"),
126
- revision: m.Number,
124
+ }, v = (e) => f.Union(f.Struct({
125
+ _tag: f.Literal("snapshot"),
126
+ revision: f.Number,
127
127
  data: e,
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: ot
135
- }), m.Struct({
136
- _tag: m.Literal("error"),
137
- error: m.Unknown,
138
- revision: m.optional(m.Number)
139
- })), x = (e, t) => {
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
- }, ft = (e) => {
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
- }, S = (e, t, n) => {
146
- let r = x(t, n), i = e.annotations({
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 ft(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
- }, pt = class extends m.TaggedError()("BusinessRuleViolation", {
152
- rule: m.String,
153
- params: m.optional(m.Record({
154
- key: m.String,
155
- value: m.Unknown
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: m.optional(m.String),
158
- message: m.optional(m.String),
159
- severity: m.Literal("error", "warning")
160
- }) {}, mt = m.Struct({
161
- field: m.String,
162
- message: m.String,
163
- params: m.optional(m.Record({
164
- key: m.String,
165
- value: m.Unknown
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
- }), ht = 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
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
- }) {}, gt = class extends m.TaggedError()("ValidationErrors", { issues: m.Array(mt).pipe(m.minItems(1)) }) {}, _t = (e) => {
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
- }, vt = 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
- }) {}, yt = class extends m.TaggedError()("ApprovalNotFound", { approvalId: m.String }) {}, bt = class extends m.TaggedError()("ApprovalSelfApproval", {
208
- approvalId: m.String,
209
- subjectId: m.NullOr(m.String)
210
- }) {}, xt = 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
- }) {}, St = class extends m.TaggedError()("ApprovalNotPending", {
218
- approvalId: m.String,
219
- status: m.String
220
- }) {}, Ct = 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
- }) {}, wt = m.Union(vt, xt, C, w), Tt = m.Union(yt, bt, C, St, Ct, w), Et = 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:", Dt = Symbol.for("@voltro/protocol/reactivityChannels"), Ot = globalThis, E = Ot[Dt] ?? (Ot[Dt] = /* @__PURE__ */ new Map()), kt = /^[a-z][a-z0-9-]*(\.[a-z0-9-]+)*$/, At = (e) => {
242
- if (!kt.test(e)) throw Error(`reactivityChannel('${e}'): invalid channel name.\n Use lowercase kebab segments separated by dots — \`presence\`, \`job-queue\`,
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 (\`${T}<name>\`), and an uppercase letter is\n refused because a key that differs only by case reads as one channel and
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 = E.get(e);
246
+ let t = T.get(e);
247
247
  if (t !== void 0) return t;
248
- let n = `${T}${e}`, r = Object.freeze({
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 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), jt = (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({
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
- }, Mt = (e, t) => {
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
- }, Nt = (e) => e.internal !== !0, N = (e) => {
272
- if (Pt(e), e.idempotencyScope !== void 0 && e.idempotencyScope !== "subject" && e.idempotencyScope !== "connection") throw Error(`${e.name}: idempotencyScope must be 'subject' or 'connection'`);
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
- }, Pt = (e) => {
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
- }, Ft = (e) => e.action !== void 0 && e.resourceType !== void 0, It = (e) => e.authenticated === !0, Lt = (e) => e.openAccess !== void 0 || e.guards !== void 0 && e.guards.length > 0, P = (e, t, n) => {
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 [f(n.trim())];
313
- }, F = (e) => N({
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 ?? m.Never,
319
- source: M(e.source),
318
+ error: e.error ?? f.Never,
319
+ source: O(e.source),
320
320
  cache: e.cache,
321
- guards: P(e.name, e.guards, e.openAccess),
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
- }), I = (e) => N({
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 ?? m.Never,
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: P(e.name, e.guards, e.openAccess),
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
- }), L = (e) => N({
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 ?? m.Never,
349
- guards: P(e.name, e.guards, e.openAccess),
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
- }), Rt = (e) => N({
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 ?? m.Never,
363
+ error: e.error ?? f.Never,
364
364
  internal: e.internal,
365
365
  overridesPlugin: e.overridesPlugin,
366
- guards: P(e.name, e.guards, e.openAccess),
366
+ guards: A(e.name, e.guards, e.openAccess),
367
367
  openAccess: e.openAccess
368
- }), R = (e, t) => t && t.length > 0 ? m.Union(e, ...t) : e, z = (e) => e !== void 0 && e.some((e) => !d(e)), zt = (e, t) => z(t) ? m.Union(e, u, l) : e, Bt = (e) => m.Union(e, pt), Vt = (e) => m.Union(e, ht, gt), Ht = (e, t) => t === void 0 ? e : m.Union(e, wt), B = (e, t) => {
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 = zt(e.error, e.guards);
370
+ let n = Xt(e.error, e.guards);
371
371
  if (t === "query") return n;
372
- let r = t === "mutation" ? m.Union(Bt(n), Ve, rt) : n;
373
- return Ht(Vt(t === "mutation" && e.idempotencyScope === "connection" ? m.Union(r, p) : r), e.requiresApproval);
374
- }, Ut = (e, t) => R(zt(e.errorSchema, e.guards), t), Wt = (e, t) => ({
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
- }), Gt = (e, t) => h.make(e.name, {
378
- payload: S(e.input, e.name, z(e.guards)),
379
- success: b(e.output),
380
- error: R(B(e, "query"), t),
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
- }), Kt = (e, t) => h.make(e.name, {
383
- payload: S(e.input, e.name, z(e.guards)),
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: R(B(e, "mutation"), t)
386
- }), qt = (e, t) => h.make(e.name, {
387
- payload: S(e.input, e.name, z(e.guards)),
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: R(B(e, "action"), t)
390
- }), Jt = (e, t) => h.make(e.name, {
391
- payload: S(e.input, e.name, z(e.guards)),
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: R(e.error, t),
393
+ error: P(e.error, t),
394
394
  stream: !0
395
- }), Yt = (e) => {
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
- }, Xt = (e) => {
399
+ }, cn = (e) => {
400
400
  switch (e.kind) {
401
- case "query": return Gt(e);
402
- case "mutation": return Kt(e);
403
- case "action": return qt(e);
404
- case "stream": return Jt(e);
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
- }, Zt = (e) => {
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
- }, Qt = 7500, $t = (e) => typeof e == "object" && !!e && e.kind === "event", en = (e) => {
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 : [f(e.openAccess.trim())],
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
- }, tn = (e) => m.Struct({
488
- _tag: m.Literal("event"),
489
- origin: m.String,
490
- n: m.Number,
491
- emittedAt: m.Number,
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
- }), nn = m.Struct({
494
- _tag: m.Literal("gap"),
495
- missed: m.Number,
496
- reason: m.Literal("buffer", "resume")
497
- }), rn = m.Struct({ _tag: m.Literal("attached") }), an = (e) => m.Union(rn, tn(e), nn), on = m.Struct({
498
- origin: m.String,
499
- n: m.Number
500
- }), sn = (e) => m.Struct({
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: m.optional(m.Array(on))
503
- }), cn = (e, t) => {
504
- 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;
505
- return h.make(e.name, {
506
- payload: S(sn(e.key), e.name, z(e.guards)),
507
- success: an(e.payload),
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
- }, ln = class extends m.TaggedError()("EventPayloadInvalid", {
512
- event: m.String,
513
- message: m.String
514
- }) {}, un = class extends m.TaggedError()("EventKeyInvalid", {
515
- event: m.String,
516
- message: m.String
517
- }) {}, dn = class extends m.TaggedError()("EventPayloadTooLarge", {
518
- event: m.String,
519
- bytes: m.Number,
520
- limit: m.Number
521
- }) {}, fn = (e) => {
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
- }, pn = "\0", mn = (e, t, n) => [
525
+ }, wn = "\0", Tn = (e, t, n) => [
526
526
  e ?? "~",
527
527
  t,
528
- fn(n)
529
- ].join("\0"), hn = (e) => {
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
- }, gn = (e) => e.split("\0").join(" · "), V = Symbol.for("@voltro/protocol/workflow-access"), _n = {
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
- }, vn = (e, t) => {
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 : [f(t.openAccess.trim())],
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
- }, yn = (e, t) => {
561
- Object.defineProperty(e, V, {
560
+ }, An = (e, t) => {
561
+ Object.defineProperty(e, L, {
562
562
  value: t,
563
563
  enumerable: !1
564
564
  });
565
- }, H = (e) => {
566
- if (typeof e != "object" || !e) return _n;
567
- let t = e[V];
568
- return t === void 0 ? _n : t;
569
- }, bn = (e) => {
570
- let t = H(e);
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
- }, xn = (e) => typeof e == "object" && !!e && typeof e._tag == "string", Sn = 64, U = (e, t = 0) => {
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
- }, An = (e) => {
580
+ }, Fn = (e) => {
636
581
  if (e.length !== 0) return (t, n) => e.reduceRight((e, t) => t(e, n), t);
637
- }, jn = (e, t) => {
638
- let n = tt.GenericTag(e);
582
+ }, In = (e, t) => {
583
+ let n = ut.GenericTag(e);
639
584
  return {
640
585
  Tag: n,
641
- Live: nt.succeed(n, t)
586
+ Live: dt.succeed(n, t)
642
587
  };
643
- }, Mn = (e, t, n) => {
588
+ }, Ln = (e, t, n) => {
644
589
  if (!t) return { ok: !0 };
645
- let r = n === void 0 ? null : W(n);
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 (!Nn(i, r)) return {
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
- }, W = (e) => {
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
- }, 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, Nn = (e, t) => {
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 = W(e.slice(1));
670
- return !n || t.major !== n.major ? !1 : G(t, n) >= 0;
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 = W(e.slice(1));
674
- return !n || t.major !== n.major || t.minor !== n.minor ? !1 : G(t, n) >= 0;
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 = W(n[2]);
623
+ let e = n[1], r = z(n[2]);
679
624
  if (!r) return !1;
680
- let i = G(t, r);
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 = W(e);
687
- return r ? G(t, r) === 0 : !1;
688
- }, Pn = (e) => {
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
- }, Fn = (e) => {
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
- }, In = Symbol.for("@voltro/protocol/pluginAliases"), K = () => {
695
- let e = globalThis, t = e[In];
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[In] = n, n;
699
- }, Ln = (e) => {
700
- let t = K();
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
- }, Rn = () => {
707
- K().clear();
708
- }, zn = (e, t) => {
709
- let n = K().get(e);
710
- if (n === void 0 || n.size === 0) return `${Pn(e)}.${t}`;
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
- }, q = m.Literal("running", "succeeded", "failed", "cancelled", "suspended"), Bn = m.Literal("cancel", "terminate", "abandon"), Vn = m.Struct({
716
- mode: m.String,
717
- dueAt: m.NullOr(m.Number),
718
- retryAfterMs: m.NullOr(m.Number),
719
- intentId: m.NullOr(m.String)
720
- }), Hn = m.Struct({
721
- id: m.String,
722
- workflowName: m.String,
723
- executionId: m.NullOr(m.String),
724
- status: m.Literal("running", "queued", "dropped", "skipped", "replayed"),
725
- deferral: m.optional(Vn)
726
- }), Un = (e, t) => {
727
- let n = H(e);
728
- return h.make(e.name, {
729
- payload: S(e.payloadSchema, e.name, z(n.guards)),
730
- success: Hn,
731
- error: Ut({
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
- }, J = m.Struct({
737
- id: m.String,
738
- tag: m.String,
739
- executionId: m.String,
740
- status: q,
741
- payload: m.Unknown,
742
- workflowVersion: m.NullOr(m.String),
743
- workflowPatches: m.NullOr(m.Unknown),
744
- output: m.NullOr(m.Unknown),
745
- subject: m.NullOr(m.Unknown),
746
- source: m.NullOr(m.String),
747
- errorTag: m.NullOr(m.String),
748
- errorMessage: m.NullOr(m.String),
749
- cancelled: m.Boolean,
750
- startedAt: m.Date,
751
- completedAt: m.NullOr(m.Date),
752
- durationMs: m.NullOr(m.Number),
753
- traceId: m.NullOr(m.String),
754
- parentExecutionId: m.NullOr(m.String),
755
- parentClosePolicy: m.NullOr(Bn)
756
- }), Wn = m.Struct({
757
- tag: m.optional(m.String),
758
- status: m.optional(q),
759
- limit: m.optional(m.Number)
760
- }), Gn = m.Struct({
761
- id: m.String,
762
- runId: m.String,
763
- stepName: m.String,
764
- attempt: m.Number,
765
- status: m.Literal("running", "succeeded", "failed"),
766
- input: m.NullOr(m.Unknown),
767
- retryPolicy: m.NullOr(m.Unknown),
768
- output: m.NullOr(m.Unknown),
769
- errorTag: m.NullOr(m.String),
770
- errorMessage: m.NullOr(m.String),
771
- errorCause: m.NullOr(m.Unknown),
772
- startedAt: m.Date,
773
- completedAt: m.NullOr(m.Date),
774
- durationMs: m.NullOr(m.Number)
775
- }), Kn = m.Struct({
776
- id: m.String,
777
- runId: m.String,
778
- eventType: m.String,
779
- payload: m.NullOr(m.Unknown),
780
- occurredAt: m.Date,
781
- stepName: m.NullOr(m.String),
782
- attempt: m.NullOr(m.Number)
783
- }), qn = m.Struct({
784
- id: m.String,
785
- name: m.String,
786
- payload: m.Unknown,
787
- source: m.String,
788
- subject: m.NullOr(m.Unknown),
789
- traceId: m.NullOr(m.String),
790
- occurredAt: m.Date
791
- }), Jn = m.Struct({
792
- id: m.String,
793
- eventId: m.String,
794
- eventName: m.String,
795
- triggerId: m.String,
796
- workflowName: m.String,
797
- executionId: m.NullOr(m.String),
798
- status: m.Literal("starting", "started", "skipped", "failed"),
799
- idempotencyKey: m.String,
800
- skipped: m.Boolean,
801
- errorMessage: m.NullOr(m.String),
802
- createdAt: m.Date,
803
- completedAt: m.NullOr(m.Date)
804
- }), Yn = m.Struct({ id: m.String }), Y = m.Struct({ runId: m.String }), Xn = m.Struct({
805
- name: m.optional(m.String),
806
- limit: m.optional(m.Number)
807
- }), Zn = m.Struct({ eventId: m.String }), X = m.Struct({
808
- workflowName: m.String,
809
- executionId: m.String
810
- }), Qn = m.Struct({
811
- id: m.String,
812
- signalName: m.String,
813
- payload: m.optional(m.Unknown)
814
- }), $n = m.Struct({
815
- id: m.String,
816
- updateName: m.String,
817
- payload: m.optional(m.Unknown),
818
- timeoutMs: m.optional(m.Number)
819
- }), er = m.Struct({
820
- eventId: m.String,
821
- updateId: m.String,
822
- completedEventId: m.String,
823
- result: m.Unknown
824
- }), tr = F({
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: Yn,
828
- output: m.Array(J)
829
- }), nr = F({
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: Wn,
833
- output: m.Array(J)
834
- }), rr = F({
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: Y,
838
- output: m.Array(Gn)
839
- }), ir = F({
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: Y,
843
- output: m.Array(Kn)
844
- }), ar = F({
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: Xn,
848
- output: m.Array(qn)
849
- }), or = F({
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: Zn,
853
- output: m.Array(Jn)
854
- }), sr = L({
892
+ input: rr,
893
+ output: f.Array(er)
894
+ }), vr = N({
855
895
  name: "__voltro.workflow.cancel",
856
- input: X,
857
- output: m.Struct({ ok: m.Boolean })
858
- }), cr = L({
896
+ input: Y,
897
+ output: W
898
+ }), yr = N({
859
899
  name: "__voltro.workflow.resume",
860
- input: X,
861
- output: m.Struct({ ok: m.Boolean })
862
- }), lr = L({
900
+ input: Y,
901
+ output: W
902
+ }), br = N({
863
903
  name: "__voltro.workflow.signal",
864
- input: Qn,
865
- output: m.Struct({ eventId: m.String })
866
- }), ur = L({
904
+ input: lr,
905
+ output: f.Struct({ eventId: f.String })
906
+ }), xr = N({
867
907
  name: "__voltro.workflow.update",
868
- input: $n,
869
- output: er
870
- }), dr = "__voltro.undo.log", fr = "__voltro.undo.apply", pr = "__voltro.undo.redo", mr = m.Struct({
871
- id: m.String,
872
- tag: m.String,
873
- label: m.NullOr(m.String),
874
- undone: m.Boolean,
875
- crossesAction: m.Boolean,
876
- createdAt: m.String
877
- }), hr = class extends m.TaggedError()("UndoNotFound", { invocationId: m.String }) {}, gr = class extends m.TaggedError()("UndoForbidden", { invocationId: m.String }) {}, _r = class extends m.TaggedError()("UndoConflict", {
878
- invocationId: m.String,
879
- reason: m.Literal("conflict", "action")
880
- }) {}, vr = m.Union(hr, gr, _r), yr = F({
881
- name: dr,
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: m.Struct({ limit: m.optional(m.Number) }),
884
- output: m.Array(mr),
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
- }), br = I({
887
- name: fr,
888
- input: m.Struct({ invocationId: m.String }),
889
- output: m.Struct({ ok: m.Boolean }),
890
- error: vr,
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
- }), xr = I({
893
- name: pr,
894
- input: m.Struct({ invocationId: m.String }),
895
- output: m.Struct({ ok: m.Boolean }),
896
- error: vr,
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
- }), Sr = class extends m.TaggedError()("TenantScopeViolation", {
899
- table: m.String,
900
- reason: m.String
901
- }) {}, Cr = class extends m.TaggedError()("StoreOperationFailed", {
902
- operation: m.String,
903
- table: m.String,
904
- cause: m.String
905
- }) {}, wr = class extends m.TaggedError()("NoRowFound", {
906
- table: m.String,
907
- found: m.Number
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
- }, Tr = class extends m.TaggedError()("TableValidationFailed", {
913
- table: m.String,
914
- summary: m.String,
915
- issues: m.Array(m.Struct({
916
- path: m.String,
917
- message: m.String
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
- }) {}, Er = class extends m.TaggedError()("TenantRowNotFound", {
920
- table: m.String,
921
- id: m.String,
922
- reason: m.String
923
- }) {}, Dr = class extends m.TaggedError()("ServerOnlyColumnWrite", {
924
- table: m.String,
925
- columns: m.Array(m.String)
926
- }) {}, Or = class extends m.TaggedError()("ConstraintViolation", {
927
- kind: m.Literal("foreignKey", "foreignKeyInUse", "unique", "notNull", "check"),
928
- table: m.String,
929
- operation: m.String,
930
- constraint: m.optional(m.String),
931
- column: m.optional(m.String),
932
- detail: m.optional(m.String)
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
- }, Z = "__voltro.approvals.pending", kr = "__voltro.approvals.decide", Ar = F({
946
- name: Z,
985
+ }, Br = "__voltro.approvals.pending", Vr = "__voltro.approvals.decide", Hr = j({
986
+ name: Br,
947
987
  source: "_voltro_approvals",
948
- input: m.Struct({ limit: m.optional(m.Number) }),
949
- output: m.Array(Et),
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
- }), jr = I({
952
- name: kr,
953
- input: m.Struct({
954
- approvalId: m.String,
955
- decision: m.Literal("approve", "reject"),
956
- note: m.optional(m.String)
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: m.Struct({
959
- approvalId: m.String,
960
- status: m.Literal("approved", "rejected")
998
+ output: f.Struct({
999
+ approvalId: f.String,
1000
+ status: f.Literal("approved", "rejected")
961
1001
  }),
962
- error: Tt,
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
- }), Mr = "__voltro.connections.list", Nr = "__voltro.connections.start", Pr = "__voltro.connections.submitToken", Fr = "__voltro.connections.disconnect", Q = m.Literal("oauth2", "pat"), Ir = m.Literal("disconnected", "connected", "expired", "revoked", "error"), Lr = m.Struct({
965
- connectionId: m.String,
966
- kind: Q,
967
- label: m.String,
968
- status: Ir,
969
- accountId: m.NullOr(m.String),
970
- accountLabel: m.NullOr(m.String),
971
- scopes: m.Array(m.String),
972
- expiresAt: m.NullOr(m.String),
973
- lastError: m.NullOr(m.String),
974
- connectedAt: m.NullOr(m.String)
975
- }), Rr = class extends m.TaggedError()("ConnectionNotDeclared", { connectionId: m.String }) {}, zr = class extends m.TaggedError()("ConnectionSubjectRequired", { connectionId: m.String }) {}, Br = class extends m.TaggedError()("ConnectionKindMismatch", {
976
- connectionId: m.String,
977
- expected: Q,
978
- actual: Q
979
- }) {}, Vr = class extends m.TaggedError()("ConnectionHandshakeFailed", {
980
- connectionId: m.String,
981
- reason: m.String,
982
- transient: m.Boolean
983
- }) {}, $ = m.Union(Rr, zr, Br, Vr), Hr = F({
984
- name: Mr,
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: m.Struct({}),
987
- output: m.Array(Lr),
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
- }), Ur = L({
990
- name: Nr,
991
- input: m.Struct({
992
- connectionId: m.String,
993
- redirectTo: m.optional(m.String)
1029
+ }), ei = N({
1030
+ name: Gr,
1031
+ input: f.Struct({
1032
+ connectionId: f.String,
1033
+ redirectTo: f.optional(f.String)
994
1034
  }),
995
- output: m.Struct({
996
- authorizeUrl: m.String,
997
- state: m.String
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
- }), Wr = I({
1002
- name: Pr,
1003
- input: m.Struct({
1004
- connectionId: m.String,
1005
- token: m.String
1041
+ }), ti = M({
1042
+ name: Kr,
1043
+ input: f.Struct({
1044
+ connectionId: f.String,
1045
+ token: f.String
1006
1046
  }),
1007
- output: m.Struct({ ok: m.Boolean }),
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
- }), Gr = I({
1011
- name: Fr,
1012
- input: m.Struct({ connectionId: m.String }),
1013
- output: m.Struct({ ok: m.Boolean }),
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
- }), Kr = (e) => {
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
- }, qr = 4001, Jr = /* @__PURE__ */ new Set(["/rpc", "/ws"]), Yr = (e) => {
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 (Jr.has(e.path)) throw Error(`defineWebSocket: '${e.path}' is the framework's own socket surface — mount the gateway elsewhere`);
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
- }, Xr = 1;
1064
+ }, si = 1;
1025
1065
  //#endregion
1026
- export { Oe as ADMIN_SCOPE, Se as APIKEY_ISSUE_ORG_SCOPE, Ee as APIKEY_ISSUE_OTHER_SCOPE, _e as APIKEY_ISSUE_SELF_SCOPE, kr as APPROVALS_DECIDE_TAG, Z as APPROVALS_PENDING_TAG, Tt as ApprovalDecisionErrors, wt as ApprovalErrors, C as ApprovalExpired, Ct as ApprovalForbidden, yt as ApprovalNotFound, St as ApprovalNotPending, xt as ApprovalRejected, vt as ApprovalRequired, bt as ApprovalSelfApproval, w as ApprovalUnavailable, se as AuthMiddleware, pt as BusinessRuleViolation, Mr as CONNECTIONS_LIST_TAG, Fr as CONNECTION_DISCONNECT_TAG, Nr as CONNECTION_START_TAG, Pr as CONNECTION_SUBMIT_TOKEN_TAG, Vr as ConnectionHandshakeFailed, i as ConnectionInfo, r as ConnectionInfoMiddleware, Q as ConnectionKind, Br as ConnectionKindMismatch, Rr as ConnectionNotDeclared, Lr as ConnectionState, Ir as ConnectionStatus, zr as ConnectionSubjectRequired, Or as ConstraintViolation, ie as DEFAULT_SCOPE_CACHE_MAX_ENTRIES, ye as DEFAULT_SCOPE_CACHE_TTL_MS, pn as EVENT_ROUTE_SEP, un as EventKeyInvalid, ln as EventPayloadInvalid, dn as EventPayloadTooLarge, qr as GATEWAY_CREDENTIAL_EXPIRED_CLOSE_CODE, e as IMPERSONATION_METADATA_KEY, Xe as JSONAPI_MEDIA_TYPE, Qt as MAX_EVENT_ENVELOPE_BYTES, We as MUTATION_IN_FLIGHT_RETRY_AFTER_MS, p as MutationConnectionRequired, Ve as MutationInFlight, wr as NoRowFound, Ge as PROBLEM_JSON, Xr as PROTOCOL_VERSION, Et as PendingApproval, T as REACTIVITY_CHANNEL_PREFIX, Je as REST_PROFILE_NAMES, u as ScopeError, Dr as ServerOnlyColumnWrite, Cr as StoreOperationFailed, ve as Subject, ne as SubjectIdentity, re as SubjectService, Tr as TableValidationFailed, Er as TenantRowNotFound, Sr as TenantScopeViolation, fr as UNDO_APPLY_TAG, dr as UNDO_LOG_TAG, pr as UNDO_REDO_TAG, l as Unauthenticated, _r as UndoConflict, gr as UndoForbidden, mr as UndoLogEntry, hr as UndoNotFound, ht as ValidationError, gt as ValidationErrors, mt as ValidationIssue, V as WorkflowAccessProperty, X as WorkflowControlInputSchema, qn as WorkflowDomainEventRowSchema, Xn as WorkflowDomainEventsInputSchema, Zn as WorkflowEventDeliveriesInputSchema, Jn as WorkflowEventDeliveryRowSchema, Bn as WorkflowParentClosePolicySchema, Kn as WorkflowRunEventRowSchema, Hn as WorkflowRunHandleSchema, Yn as WorkflowRunRefSchema, J as WorkflowRunRowSchema, q as WorkflowRunStatusSchema, Gn as WorkflowRunStepRowSchema, Y as WorkflowRunTableRefSchema, Wn as WorkflowRunsInputSchema, Qn as WorkflowSignalInputSchema, Vn as WorkflowStartDeferralSchema, $n as WorkflowUpdateInputSchema, er as WorkflowUpdateResultSchema, qt as actionToRpc, Ce as advisoryResourceGuardWarning, a as anonymousSubject, dt as applyRowPatch, c as applyScopeDecision, jr as approvalsDecideDescriptor, Ar as approvalsPendingQueryDescriptor, te as assertAuthenticated, yn as attachWorkflowAccess, Fe as beginIdempotent, Mn as checkFrameworkCompat, De as checkGuards, pe as checkGuardsEffect, En as compareSurfaces, ae as composeAuthStrategies, An as composeRpcInterceptors, Gr as connectionDisconnectDescriptor, Ur as connectionStartDescriptor, Wr as connectionSubmitTokenDescriptor, Hr as connectionsListQueryDescriptor, k as declaredReactivityChannelKeys, L as defineAction, en as defineEvent, I as defineMutation, Dn as definePlugin, On as definePluginRoute, jn as definePluginService, F as defineQuery, Rt as defineStream, Yr as defineWebSocket, lt as diffRows, be as effectiveScopes, fn as encodeEventKey, He as encodeRestError, Ie as encodeRestSuccess, Yt as errorTag, rn as eventAttached, tn as eventEnvelope, nn as eventGap, on as eventResumePoint, mn as eventRoute, an as eventStreamEvent, sn as eventSubscribeInput, cn as eventToRpc, Qe as failIdempotent, _t as fieldIssuesOf, ke as findAdvisoryResourceGuards, et as finishIdempotent, gn as formatEventRoute, me as getPolicyGuardResolver, he as getResourceScopeResolver, H as getWorkflowAccess, Tn as groupShapeDigests, Lt as hasAccessDecision, Ne as hasCallbackRoutes, we as hasEffectiveScope, z as hasEnforcedGuard, xe as hasScope, _ as idToPath, Le as idempotencyScope, x as inputLabel, ge as isAuthenticatedCheck, It as isAuthenticatedGuard, $t as isEventDescriptor, ut as isIdKeyed, d as isOpenAccess, de as isPolicyCheck, Ft as isPolicyGuard, D as isReactivityChannel, O as isReactivityChannelKey, t as isSystemSubject, Nt as isWireReachable, le as makeScopeCache, $e as memoryIdempotencyStore, Ae as missingAccessDecision, Kt as mutationToRpc, Ke as nextLink, Zt as normalizeDescriptor, M as normalizeSource, f as openAccessSpec, s as orderByBearerPrefix, hn as parseEventRoute, st as pathToId, Pn as pluginAlias, kn as pluginInstanceName, Fn as pluginSlug, zn as pluginTag, Ye as problemDetails, Re as problemTypeOf, wn as procedureShapeDigest, Mt as publishReactivity, Be as publishServerError, Gt as queryToRpc, ce as rawImpersonationMark, At as reactivityChannel, Ln as registerPluginAliases, fe as requireScope, Rn as resetPluginAliases, Ue as resolveRestFormat, vn as resolveWorkflowAccess, Ze as restViewSchema, at as rowPatchOpSchema, ot as rowPatchSchema, U as schemaShape, ue as scopeCacheKey, Me as setEffectiveScopes, oe as setPolicyGuardResolver, n as setResourceScopeResolver, Cn as shapeDigest, j as sourceKeys, Jt as streamToRpc, S as strictInput, o as subjectIdentity, je as subjectScopes, qe as subscribeServerErrors, b as subscriptionEvent, ee as systemSubject, Te as tenantScopedSubject, Xt as toRpc, ze as toSnakeCase, Kr as tsMs, jt as undeclaredChannelKeys, br as undoApplyDescriptor, yr as undoLogQueryDescriptor, xr as undoRedoDescriptor, B as wireErrorUnion, Wt as withRpcTag, bn as workflowAccessDescriptor, sr as workflowCancelDescriptor, ar as workflowDomainEventsQueryDescriptor, or as workflowEventDeliveriesQueryDescriptor, cr as workflowResumeDescriptor, ir as workflowRunEventsQueryDescriptor, tr as workflowRunQueryDescriptor, rr as workflowRunStepsQueryDescriptor, nr as workflowRunsQueryDescriptor, lr as workflowSignalDescriptor, Un as workflowToRpc, ur as workflowUpdateDescriptor, Ut as workflowWireErrorUnion, Pe as wsMutationIdempotencyScope };
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 };