@voltro/protocol 0.33.0 → 0.35.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/dist/index.js CHANGED
@@ -1,30 +1,30 @@
1
- import { C as e, D as t, E as n, O as r, S as i, T as a, _ as o, a as ee, b as te, c as ne, d as re, f as ie, g as ae, h as oe, i as se, l as ce, m as le, n as ue, o as de, p as s, r as fe, s as pe, t as me, u as he, v as ge, w as _e, x as ve, y as ye } from "./serverErrorBus-C3JTqgIc.js";
2
- import { a as be, c as xe, d as Se, f as Ce, i as we, l as Te, n as Ee, o as De, p as Oe, r as ke, s as Ae, t as je, u as Me } from "./auth-CXMrvPyX.js";
3
- import { Context as Ne, Layer as Pe, Schema as c } from "effect";
4
- import { Rpc as l } from "@effect/rpc";
1
+ import { A as e, B as t, C as n, D as r, E as i, F as a, H as o, I as ee, L as te, M as ne, N as re, O as ie, P as ae, R as s, S as oe, T as c, U as se, V as ce, _ as le, a as ue, b as de, c as fe, d as pe, f as me, g as he, 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, r as Te, s as Ee, t as De, u as Oe, v as ke, w as Ae, x as je, y as Me, z as Ne } from "./auth-B6YZuSBr.js";
2
+ import { a as Pe, c as Fe, i as Ie, n as Le, o as Re, r as ze, s as Be, t as Ve } from "./serverErrorBus-BeN9pOpY.js";
3
+ import { Context as He, Layer as Ue, Schema as l } from "effect";
4
+ import { Rpc as u } from "@effect/rpc";
5
5
  //#region src/rowPatch.ts
6
- var Fe = c.Union(c.String, c.Number), u = c.Record({
7
- key: c.String,
8
- value: c.Unknown
9
- }).pipe(c.filter((e) => "id" in e, { message: () => "patch row must carry an id" })), d = c.Union(c.Struct({
10
- op: c.Literal("add"),
11
- path: c.String,
12
- value: u
13
- }), c.Struct({
14
- op: c.Literal("replace"),
15
- path: c.String,
16
- value: u
17
- }), c.Struct({
18
- op: c.Literal("remove"),
19
- path: c.String
20
- })), f = c.Struct({
21
- ops: c.Array(d),
22
- order: c.Array(Fe)
23
- }), p = (e) => `/${String(e).replace(/~/g, "~0").replace(/\//g, "~1")}`, Ie = (e) => (e.startsWith("/") ? e.slice(1) : e).replace(/~1/g, "/").replace(/~0/g, "~"), m = (e) => {
6
+ var We = l.Union(l.String, l.Number), d = l.Record({
7
+ key: l.String,
8
+ value: l.Unknown
9
+ }).pipe(l.filter((e) => "id" in e, { message: () => "patch row must carry an id" })), f = l.Union(l.Struct({
10
+ op: l.Literal("add"),
11
+ path: l.String,
12
+ value: d
13
+ }), l.Struct({
14
+ op: l.Literal("replace"),
15
+ path: l.String,
16
+ value: d
17
+ }), l.Struct({
18
+ op: l.Literal("remove"),
19
+ path: l.String
20
+ })), p = l.Struct({
21
+ ops: l.Array(f),
22
+ order: l.Array(We)
23
+ }), m = (e) => `/${String(e).replace(/~/g, "~0").replace(/\//g, "~1")}`, Ge = (e) => (e.startsWith("/") ? e.slice(1) : e).replace(/~1/g, "/").replace(/~0/g, "~"), h = (e) => {
24
24
  let t = Object.keys(e).sort(), n = {};
25
25
  for (let r of t) n[r] = e[r];
26
26
  return JSON.stringify(n);
27
- }, Le = (e, t) => m(e) === m(t), Re = (e, t) => {
27
+ }, Ke = (e, t) => h(e) === h(t), qe = (e, t) => {
28
28
  let n = /* @__PURE__ */ new Map();
29
29
  for (let t of e) n.set(t.id, t);
30
30
  let r = [], i = [], a = /* @__PURE__ */ new Set();
@@ -33,26 +33,26 @@ var Fe = c.Union(c.String, c.Number), u = c.Record({
33
33
  let t = n.get(e.id);
34
34
  t === void 0 ? r.push({
35
35
  op: "add",
36
- path: p(e.id),
36
+ path: m(e.id),
37
37
  value: e
38
- }) : Le(t, e) || r.push({
38
+ }) : Ke(t, e) || r.push({
39
39
  op: "replace",
40
- path: p(e.id),
40
+ path: m(e.id),
41
41
  value: e
42
42
  });
43
43
  }
44
44
  for (let t of e) a.has(t.id) || r.push({
45
45
  op: "remove",
46
- path: p(t.id)
46
+ path: m(t.id)
47
47
  });
48
48
  return {
49
49
  ops: r,
50
50
  order: i
51
51
  };
52
- }, ze = (e) => e.every((e) => {
52
+ }, Je = (e) => e.every((e) => {
53
53
  let t = e.id;
54
54
  return typeof t == "string" || typeof t == "number";
55
- }), Be = (e, t) => {
55
+ }), Ye = (e, t) => {
56
56
  let n = /* @__PURE__ */ new Map();
57
57
  for (let t of e) n.set(t.id, t);
58
58
  for (let e of t.ops) (e.op === "add" || e.op === "replace") && n.set(e.value.id, e.value);
@@ -62,120 +62,218 @@ var Fe = c.Union(c.String, c.Number), u = c.Record({
62
62
  t !== void 0 && r.push(t);
63
63
  }
64
64
  return r;
65
- }, Ve = (e) => c.Union(c.Struct({
66
- _tag: c.Literal("snapshot"),
67
- revision: c.Number,
65
+ }, g = (e) => l.Union(l.Struct({
66
+ _tag: l.Literal("snapshot"),
67
+ revision: l.Number,
68
68
  data: e,
69
- computed: c.optional(c.Boolean)
70
- }), c.Struct({
71
- _tag: c.Literal("delta"),
72
- revision: c.Number,
73
- emittedAt: c.Number,
74
- patch: f
75
- }), c.Struct({
76
- _tag: c.Literal("error"),
77
- error: c.Unknown,
78
- revision: c.optional(c.Number)
79
- })), h = class extends c.TaggedError()("BusinessRuleViolation", {
80
- rule: c.String,
81
- params: c.optional(c.Record({
82
- key: c.String,
83
- value: c.Unknown
69
+ computed: l.optional(l.Boolean)
70
+ }), l.Struct({
71
+ _tag: l.Literal("delta"),
72
+ revision: l.Number,
73
+ emittedAt: l.Number,
74
+ patch: p
75
+ }), l.Struct({
76
+ _tag: l.Literal("error"),
77
+ error: l.Unknown,
78
+ revision: l.optional(l.Number)
79
+ })), _ = class extends l.TaggedError()("BusinessRuleViolation", {
80
+ rule: l.String,
81
+ params: l.optional(l.Record({
82
+ key: l.String,
83
+ value: l.Unknown
84
84
  })),
85
- field: c.optional(c.String),
86
- message: c.optional(c.String),
87
- severity: c.Literal("error", "warning")
88
- }) {}, He = (e) => e.internal !== !0, g = (e) => {
89
- if (Array.isArray(e.guards) && e.guards.length === 0) throw Error(`${e.name}: \`guards: []\` is empty, so it enforces nothing — but it reads\n at the call site as if this procedure were protected. Omit the field for an
85
+ field: l.optional(l.String),
86
+ message: l.optional(l.String),
87
+ severity: l.Literal("error", "warning")
88
+ }) {}, v = class extends l.TaggedError()("ApprovalRequired", {
89
+ approvalId: l.String,
90
+ procedure: l.String,
91
+ expiresAt: l.String,
92
+ requiredScopes: l.Array(l.String),
93
+ reason: l.NullOr(l.String),
94
+ created: l.Boolean
95
+ }) {}, y = class extends l.TaggedError()("ApprovalNotFound", { approvalId: l.String }) {}, b = class extends l.TaggedError()("ApprovalSelfApproval", {
96
+ approvalId: l.String,
97
+ subjectId: l.NullOr(l.String)
98
+ }) {}, x = class extends l.TaggedError()("ApprovalRejected", {
99
+ approvalId: l.String,
100
+ decidedBy: l.NullOr(l.String),
101
+ note: l.NullOr(l.String)
102
+ }) {}, S = class extends l.TaggedError()("ApprovalExpired", {
103
+ approvalId: l.String,
104
+ expiredAt: l.String
105
+ }) {}, C = class extends l.TaggedError()("ApprovalNotPending", {
106
+ approvalId: l.String,
107
+ status: l.String
108
+ }) {}, w = class extends l.TaggedError()("ApprovalForbidden", {
109
+ approvalId: l.String,
110
+ required: l.NullOr(l.String),
111
+ message: l.String
112
+ }) {}, T = class extends l.TaggedError()("ApprovalUnavailable", {
113
+ procedure: l.String,
114
+ message: l.String
115
+ }) {}, E = l.Union(v, x, S, T), D = l.Union(y, b, S, C, w, T), O = l.Struct({
116
+ id: l.String,
117
+ procedure: l.String,
118
+ kind: l.Literal("mutation", "action"),
119
+ requestedBy: l.NullOr(l.String),
120
+ status: l.Literal("pending", "approved", "rejected", "expired", "consumed"),
121
+ reason: l.NullOr(l.String),
122
+ requiredScopes: l.Array(l.String),
123
+ requestedAt: l.String,
124
+ expiresAt: l.String,
125
+ decidedBy: l.NullOr(l.String),
126
+ decidedAt: l.NullOr(l.String),
127
+ note: l.NullOr(l.String),
128
+ relation: l.Literal("to-decide", "requested")
129
+ }), k = "channel:", A = Symbol.for("@voltro/protocol/reactivityChannels"), j = globalThis, M = j[A] ?? (j[A] = /* @__PURE__ */ new Map()), Xe = /^[a-z][a-z0-9-]*(\.[a-z0-9-]+)*$/, Ze = (e) => {
130
+ if (!Xe.test(e)) throw Error(`reactivityChannel('${e}'): invalid channel name.\n Use lowercase kebab segments separated by dots — \`presence\`, \`job-queue\`,
131
+ \`billing.usage\`. A \`:\` is refused because it is the namespace separator in
132
+ the routing key (\`${k}<name>\`), and an uppercase letter is\n refused because a key that differs only by case reads as one channel and
133
+ routes as two.`);
134
+ let t = M.get(e);
135
+ if (t !== void 0) return t;
136
+ let n = `${k}${e}`, r = Object.freeze({
137
+ kind: "reactivity-channel",
138
+ name: e,
139
+ key: n,
140
+ toString: () => n
141
+ });
142
+ return M.set(e, r), r;
143
+ }, N = (e) => typeof e == "object" && !!e && e.kind === "reactivity-channel", P = (e) => e.startsWith(k), F = () => new Set([...M.values()].map((e) => e.key)), I = (e) => N(e) ? e.key : e, L = (e) => e === void 0 ? [] : Array.isArray(e) ? e.map(I) : [I(e)], Qe = (e) => e === void 0 ? void 0 : Array.isArray(e) ? e.map(I) : I(e), $e = (e) => {
144
+ let t = F(), n = [];
145
+ for (let r of e) for (let e of L(r.source)) !P(e) || t.has(e) || n.push({
146
+ procedure: r.name,
147
+ key: e
148
+ });
149
+ return n;
150
+ }, et = (e, t) => {
151
+ let n = e?.injectExternalChange;
152
+ return n === void 0 ? !1 : (n.call(e, {
153
+ table: t.key,
154
+ op: "update",
155
+ new: {},
156
+ old: {},
157
+ origin: "inline"
158
+ }), !0);
159
+ }, tt = (e) => e.internal !== !0, R = (e) => {
160
+ if (nt(e), Array.isArray(e.guards) && e.guards.length === 0) throw Error(`${e.name}: \`guards: []\` is empty, so it enforces nothing — but it reads\n at the call site as if this procedure were protected. Omit the field for an
90
161
  unguarded procedure, or list the scopes required to call it.`);
91
162
  let t = typeof e.source == "string" ? [e.source] : Array.isArray(e.source) ? e.source : void 0;
92
163
  if (t !== void 0 && (t.length === 0 || t.some((e) => String(e).trim() === ""))) throw Error(`${e.name}: \`source\` is empty, so this query declares reactivity and\n subscribes to nothing — it serves one snapshot and never updates again,
93
164
  which is indistinguishable from "nothing changed". Name the table(s) it
94
165
  reads, or omit \`source\` for a non-reactive query.`);
95
166
  if (e.internal !== !0) return e;
167
+ if (e.openAccess !== void 0) throw Error(`${e.name}: \`internal: true\` cannot be combined with \`openAccess\`.\n \`internal\` takes the procedure OFF the wire, and \`openAccess\` declares who may
168
+ call it there — together they describe a decision about a surface that does not
169
+ exist. Drop \`openAccess\` (an internal procedure needs no wire decision), or drop
170
+ \`internal: true\` if the procedure really is meant to be callable.`);
96
171
  if (e.overridesPlugin === !0) throw Error(`${e.name}: \`internal: true\` cannot be combined with \`overridesPlugin\`.\n The override REMOVES the plugin route, and an internal procedure is not
97
172
  wire-reachable — so the plugin's route would vanish with nothing callable
98
173
  in its place, and callers would get a 404 for something that used to work.`);
99
174
  let n = [e.publicApi === void 0 ? void 0 : "publicApi", e.exposeAsTool === void 0 ? void 0 : "exposeAsTool"].filter((e) => e !== void 0);
100
175
  if (n.length === 0) return e;
101
176
  throw Error(`${e.name}: \`internal: true\` cannot be combined with ${n.map((e) => `\`${e}\``).join(" or ")}. \`internal\` takes the procedure OFF the wire; those put it back ON a different one (${n.includes("publicApi") ? "a REST route" : "an agent tool"}), and that surface is projected without consulting the flag — so the procedure would be unreachable from your client and reachable from the internet. Drop \`internal: true\` if the wider surface is intended, or remove the ${n.join(" / ")} annotation if it is not.`);
102
- }, Ue = (e) => e.action !== void 0 && e.resourceType !== void 0, _ = (e) => g({
177
+ }, nt = (e) => {
178
+ let t = e.requiresApproval;
179
+ if (t !== void 0) {
180
+ 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
181
+ — e.g. \`approvers: [{ scope: 'invoices:approve' }]\`.`);
182
+ if (e.openAccess !== void 0) throw Error(`${e.name}: \`requiresApproval\` cannot be combined with \`openAccess\`.\n The self-approval refusal compares subject ids, and an unauthenticated caller has
183
+ none — so on an open procedure every anonymous caller would count as a DIFFERENT
184
+ human from every other, and the second-pair-of-eyes control would enforce nothing.
185
+ Give the procedure a \`guards:\` decision, or drop \`requiresApproval\`.`);
186
+ }
187
+ }, rt = (e) => e.action !== void 0 && e.resourceType !== void 0, it = (e) => e.openAccess !== void 0 || e.guards !== void 0 && e.guards.length > 0, z = (e, t, n) => {
188
+ if (n === void 0) return t;
189
+ 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
190
+ without an authorization check — e.g. \`openAccess: 'public pricing, no caller data'\`.`);
191
+ 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
192
+ caller must hold a scope; drop them if anyone may call it.`);
193
+ return [s(n.trim())];
194
+ }, B = (e) => R({
103
195
  kind: "query",
104
196
  name: e.name,
105
197
  input: e.input,
106
198
  output: e.output,
107
- error: e.error ?? c.Never,
108
- source: e.source,
199
+ error: e.error ?? l.Never,
200
+ source: Qe(e.source),
109
201
  cache: e.cache,
110
- guards: e.guards,
202
+ guards: z(e.name, e.guards, e.openAccess),
203
+ openAccess: e.openAccess,
111
204
  publicApi: e.publicApi,
112
205
  exposeAsTool: e.exposeAsTool,
113
206
  internal: e.internal,
114
207
  overridesPlugin: e.overridesPlugin
115
- }), v = (e) => g({
208
+ }), V = (e) => R({
116
209
  kind: "mutation",
117
210
  name: e.name,
118
211
  input: e.input,
119
212
  output: e.output,
120
- error: e.error ?? c.Never,
213
+ error: e.error ?? l.Never,
121
214
  target: e.target,
122
- guards: e.guards,
215
+ guards: z(e.name, e.guards, e.openAccess),
216
+ openAccess: e.openAccess,
123
217
  publicApi: e.publicApi,
124
218
  exposeAsTool: e.exposeAsTool,
219
+ requiresApproval: e.requiresApproval,
125
220
  internal: e.internal,
126
221
  overridesPlugin: e.overridesPlugin
127
- }), y = (e) => g({
222
+ }), H = (e) => R({
128
223
  kind: "action",
129
224
  name: e.name,
130
225
  input: e.input,
131
226
  output: e.output,
132
- error: e.error ?? c.Never,
133
- guards: e.guards,
227
+ error: e.error ?? l.Never,
228
+ guards: z(e.name, e.guards, e.openAccess),
229
+ openAccess: e.openAccess,
134
230
  source: e.source,
135
231
  target: e.target,
136
232
  publicApi: e.publicApi,
137
233
  exposeAsTool: e.exposeAsTool,
234
+ requiresApproval: e.requiresApproval,
138
235
  internal: e.internal,
139
236
  overridesPlugin: e.overridesPlugin
140
- }), We = (e) => g({
237
+ }), at = (e) => R({
141
238
  kind: "stream",
142
239
  name: e.name,
143
240
  input: e.input,
144
241
  element: e.element,
145
- error: e.error ?? c.Never,
242
+ error: e.error ?? l.Never,
146
243
  internal: e.internal,
147
244
  overridesPlugin: e.overridesPlugin,
148
- guards: e.guards
149
- }), b = (e, t) => t && t.length > 0 ? c.Union(e, ...t) : e, x = (e, t) => t && t.length > 0 ? c.Union(e, s) : e, Ge = (e) => c.Union(e, h), Ke = (e, t) => l.make(e.name, {
245
+ guards: z(e.name, e.guards, e.openAccess),
246
+ openAccess: e.openAccess
247
+ }), U = (e, t) => t && t.length > 0 ? l.Union(e, ...t) : e, W = (e, t) => t && t.some((e) => !a(e)) ? l.Union(e, c) : e, ot = (e) => l.Union(e, _), st = (e, t) => t === void 0 ? e : l.Union(e, E), ct = (e, t) => u.make(e.name, {
150
248
  payload: e.input,
151
- success: Ve(e.output),
152
- error: b(x(e.error, e.guards), t),
249
+ success: g(e.output),
250
+ error: U(W(e.error, e.guards), t),
153
251
  stream: !0
154
- }), qe = (e, t) => l.make(e.name, {
252
+ }), lt = (e, t) => u.make(e.name, {
155
253
  payload: e.input,
156
254
  success: e.output,
157
- error: b(Ge(x(e.error, e.guards)), t)
158
- }), Je = (e, t) => l.make(e.name, {
255
+ error: U(st(ot(W(e.error, e.guards)), e.requiresApproval), t)
256
+ }), ut = (e, t) => u.make(e.name, {
159
257
  payload: e.input,
160
258
  success: e.output,
161
- error: b(x(e.error, e.guards), t)
162
- }), S = (e, t) => l.make(e.name, {
259
+ error: U(st(W(e.error, e.guards), e.requiresApproval), t)
260
+ }), dt = (e, t) => u.make(e.name, {
163
261
  payload: e.input,
164
262
  success: e.element,
165
- error: b(e.error, t),
263
+ error: U(e.error, t),
166
264
  stream: !0
167
- }), Ye = (e) => {
265
+ }), ft = (e) => {
168
266
  if (typeof e != "object" || !e) return;
169
267
  let t = e._tag;
170
268
  return typeof t == "string" ? t : void 0;
171
- }, Xe = (e) => {
269
+ }, pt = (e) => {
172
270
  switch (e.kind) {
173
- case "query": return Ke(e);
174
- case "mutation": return qe(e);
175
- case "action": return Je(e);
176
- case "stream": return S(e);
271
+ case "query": return ct(e);
272
+ case "mutation": return lt(e);
273
+ case "action": return ut(e);
274
+ case "stream": return dt(e);
177
275
  }
178
- }, Ze = (e) => {
276
+ }, mt = (e) => {
179
277
  let t = e.input, n = t === void 0 ? {} : { input: t }, r = e.output, i = r === void 0 ? {} : { output: r };
180
278
  if (e.kind === "query") return {
181
279
  kind: "query",
@@ -216,7 +314,7 @@ var Fe = c.Union(c.String, c.Number), u = c.Record({
216
314
  ..."shapeItem" in e && e.shapeItem !== void 0 ? { shapeItem: e.shapeItem } : {}
217
315
  }))
218
316
  };
219
- }, Qe = 7500, $e = (e) => typeof e == "object" && !!e && e.kind === "event", et = (e) => {
317
+ }, ht = 7500, gt = (e) => typeof e == "object" && !!e && e.kind === "event", _t = (e) => {
220
318
  if (e.name.length === 0) throw Error("defineEvent: `name` must not be empty");
221
319
  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
222
320
  whitespace and delivers nothing — silently, and only on that broker, so an
@@ -224,6 +322,13 @@ var Fe = c.Union(c.String, c.Number), u = c.Record({
224
322
  Use a dot for namespacing: "orders.paid".`);
225
323
  if (e.guards !== void 0 && e.guards.length === 0) throw Error(`defineEvent("${e.name}"): \`guards: []\` is empty, so it enforces nothing —\n but it reads at the call site as if the event were protected. Omit the field
226
324
  for an unguarded event, or list the scopes that may subscribe.`);
325
+ if (e.openAccess !== void 0) {
326
+ if (e.openAccess.trim() === "") throw Error(`defineEvent("${e.name}"): \`openAccess\` needs a REASON, not an empty string. It is\n the sentence a reviewer reads to decide whether anyone should really be able to
327
+ subscribe without an authorization check — e.g. \`openAccess: 'public scoreboard,
328
+ no caller data'\`.`);
329
+ if (e.guards !== void 0 && e.guards.length > 0) throw Error(`defineEvent("${e.name}"): \`openAccess\` and \`guards\` are two different access\n decisions, so declaring both says the event is protected AND open. Keep the guards
330
+ if a subscriber must hold a scope; drop them if anyone may listen.`);
331
+ }
227
332
  if (e.webhook?.rateLimit !== void 0 && e.webhook.rateLimit.perMinute < 1) throw Error(`defineEvent("${e.name}"): \`webhook.rateLimit.perMinute\` is ${e.webhook.rateLimit.perMinute}, which defers every delivery forever.\n There is no "unlimited" spelling here — omit \`rateLimit\` for no ceiling.`);
228
333
  if (e.webhook?.version !== void 0 && e.webhook.version < 1) throw Error(`defineEvent("${e.name}"): \`webhook.version\` must be >= 1 (default 1).\n A subscriber pinned to 1 would read this event as BEHIND its own version,
229
334
  which is the opposite of what a version bump is for.`);
@@ -238,71 +343,75 @@ var Fe = c.Union(c.String, c.Number), u = c.Record({
238
343
  name: e.name,
239
344
  key: e.key,
240
345
  payload: e.payload,
241
- guards: e.guards,
346
+ guards: e.openAccess === void 0 ? e.guards : [s(e.openAccess.trim())],
347
+ openAccess: e.openAccess,
242
348
  rewind: e.rewind,
243
349
  webhook: e.webhook,
244
350
  delivery: e.delivery
245
351
  };
246
- }, C = (e) => c.Struct({
247
- _tag: c.Literal("event"),
248
- origin: c.String,
249
- n: c.Number,
250
- emittedAt: c.Number,
352
+ }, vt = (e) => l.Struct({
353
+ _tag: l.Literal("event"),
354
+ origin: l.String,
355
+ n: l.Number,
356
+ emittedAt: l.Number,
251
357
  payload: e
252
- }), w = c.Struct({
253
- _tag: c.Literal("gap"),
254
- missed: c.Number,
255
- reason: c.Literal("buffer", "resume")
256
- }), T = c.Struct({ _tag: c.Literal("attached") }), E = (e) => c.Union(T, C(e), w), D = c.Struct({
257
- origin: c.String,
258
- n: c.Number
259
- }), O = (e) => c.Struct({
358
+ }), yt = l.Struct({
359
+ _tag: l.Literal("gap"),
360
+ missed: l.Number,
361
+ reason: l.Literal("buffer", "resume")
362
+ }), bt = l.Struct({ _tag: l.Literal("attached") }), xt = (e) => l.Union(bt, vt(e), yt), G = l.Struct({
363
+ origin: l.String,
364
+ n: l.Number
365
+ }), St = (e) => l.Struct({
260
366
  key: e,
261
- resume: c.optional(c.Array(D))
262
- }), tt = (e, t) => {
263
- let n = e.guards && e.guards.length > 0 ? s : c.Never, r = t && t.length > 0 ? c.Union(n, ...t) : n;
264
- return l.make(e.name, {
265
- payload: O(e.key),
266
- success: E(e.payload),
367
+ resume: l.optional(l.Array(G))
368
+ }), Ct = (e, t) => {
369
+ let n = e.guards !== void 0 && e.guards.some((e) => !a(e)) ? c : l.Never, r = t && t.length > 0 ? l.Union(n, ...t) : n;
370
+ return u.make(e.name, {
371
+ payload: St(e.key),
372
+ success: xt(e.payload),
267
373
  error: r,
268
374
  stream: !0
269
375
  });
270
- }, nt = class extends c.TaggedError()("EventPayloadInvalid", {
271
- event: c.String,
272
- message: c.String
273
- }) {}, rt = class extends c.TaggedError()("EventKeyInvalid", {
274
- event: c.String,
275
- message: c.String
276
- }) {}, it = class extends c.TaggedError()("EventPayloadTooLarge", {
277
- event: c.String,
278
- bytes: c.Number,
279
- limit: c.Number
280
- }) {}, k = (e) => {
376
+ }, wt = class extends l.TaggedError()("EventPayloadInvalid", {
377
+ event: l.String,
378
+ message: l.String
379
+ }) {}, Tt = class extends l.TaggedError()("EventKeyInvalid", {
380
+ event: l.String,
381
+ message: l.String
382
+ }) {}, Et = class extends l.TaggedError()("EventPayloadTooLarge", {
383
+ event: l.String,
384
+ bytes: l.Number,
385
+ limit: l.Number
386
+ }) {}, Dt = (e) => {
281
387
  if (typeof e != "object" || !e) return JSON.stringify(e) ?? "null";
282
388
  let t = Object.entries(e).filter(([, e]) => e !== void 0).sort(([e], [t]) => e < t ? -1 : +(e > t));
283
389
  return JSON.stringify(t);
284
- }, at = "\0", ot = (e, t, n) => [
390
+ }, Ot = "\0", kt = (e, t, n) => [
285
391
  e ?? "~",
286
392
  t,
287
- k(n)
288
- ].join("\0"), st = (e) => {
393
+ Dt(n)
394
+ ].join("\0"), At = (e) => {
289
395
  let [t = "~", n = "", r = ""] = e.split("\0");
290
396
  return {
291
397
  tenantId: t === "~" ? null : t,
292
398
  event: n,
293
399
  key: r
294
400
  };
295
- }, ct = (e) => e.split("\0").join(" · "), lt = (e) => e, ut = (e) => e, dt = (e) => {
401
+ }, jt = (e) => e.split("\0").join(" · "), Mt = (e) => e, Nt = (e) => e, Pt = (e) => {
402
+ let t = e.alias?.trim(), n = e.instance?.trim(), r = t !== void 0 && t !== "" ? t : e.base;
403
+ return n !== void 0 && n !== "" ? `${r}#${n}` : r;
404
+ }, Ft = (e) => {
296
405
  if (e.length !== 0) return (t, n) => e.reduceRight((e, t) => t(e, n), t);
297
- }, ft = (e, t) => {
298
- let n = Ne.GenericTag(e);
406
+ }, It = (e, t) => {
407
+ let n = He.GenericTag(e);
299
408
  return {
300
409
  Tag: n,
301
- Live: Pe.succeed(n, t)
410
+ Live: Ue.succeed(n, t)
302
411
  };
303
- }, pt = (e, t, n) => {
412
+ }, Lt = (e, t, n) => {
304
413
  if (!t) return { ok: !0 };
305
- let r = A(n);
414
+ let r = K(n);
306
415
  if (!r) return {
307
416
  ok: !1,
308
417
  reason: `cannot parse runningVersion "${n}"`
@@ -310,12 +419,12 @@ var Fe = c.Union(c.String, c.Number), u = c.Record({
310
419
  let i = t.trim();
311
420
  if (i === "*" || i === "") return { ok: !0 };
312
421
  let a = i.split(/\s+/).filter((e) => e.length > 0);
313
- for (let i of a) if (!mt(i, r)) return {
422
+ for (let i of a) if (!Rt(i, r)) return {
314
423
  ok: !1,
315
424
  reason: `plugin "${e}" requires framework ${t}, running ${n}`
316
425
  };
317
426
  return { ok: !0 };
318
- }, A = (e) => {
427
+ }, K = (e) => {
319
428
  let t = /^(\d+)\.(\d+)\.(\d+)(?:-([0-9a-zA-Z.-]+))?$/.exec(e.trim());
320
429
  return t ? {
321
430
  major: Number(t[1]),
@@ -323,249 +432,275 @@ var Fe = c.Union(c.String, c.Number), u = c.Record({
323
432
  patch: Number(t[3]),
324
433
  pre: t[4] ?? ""
325
434
  } : null;
326
- }, j = (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, mt = (e, t) => {
435
+ }, q = (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, Rt = (e, t) => {
327
436
  if (e === "*") return !0;
328
437
  if (e.startsWith("^")) {
329
- let n = A(e.slice(1));
330
- return !n || t.major !== n.major ? !1 : j(t, n) >= 0;
438
+ let n = K(e.slice(1));
439
+ return !n || t.major !== n.major ? !1 : q(t, n) >= 0;
331
440
  }
332
441
  if (e.startsWith("~")) {
333
- let n = A(e.slice(1));
334
- return !n || t.major !== n.major || t.minor !== n.minor ? !1 : j(t, n) >= 0;
442
+ let n = K(e.slice(1));
443
+ return !n || t.major !== n.major || t.minor !== n.minor ? !1 : q(t, n) >= 0;
335
444
  }
336
445
  let n = /^(>=|<=|>|<)(.+)$/.exec(e);
337
446
  if (n) {
338
- let e = n[1], r = A(n[2]);
447
+ let e = n[1], r = K(n[2]);
339
448
  if (!r) return !1;
340
- let i = j(t, r);
449
+ let i = q(t, r);
341
450
  if (e === ">=") return i >= 0;
342
451
  if (e === "<=") return i <= 0;
343
452
  if (e === ">") return i > 0;
344
453
  if (e === "<") return i < 0;
345
454
  }
346
- let r = A(e);
347
- return r ? j(t, r) === 0 : !1;
348
- }, M = c.Literal("running", "succeeded", "failed", "cancelled", "suspended"), N = c.Literal("cancel", "terminate", "abandon"), P = c.Struct({
349
- mode: c.String,
350
- dueAt: c.NullOr(c.Number),
351
- retryAfterMs: c.NullOr(c.Number),
352
- intentId: c.NullOr(c.String)
353
- }), ht = c.Struct({
354
- id: c.String,
355
- workflowName: c.String,
356
- executionId: c.NullOr(c.String),
357
- status: c.Literal("running", "queued", "dropped", "skipped"),
358
- deferral: c.optional(P)
359
- }), F = c.Struct({
360
- id: c.String,
361
- tag: c.String,
362
- executionId: c.String,
363
- status: M,
364
- payload: c.Unknown,
365
- workflowVersion: c.NullOr(c.String),
366
- workflowPatches: c.NullOr(c.Unknown),
367
- output: c.NullOr(c.Unknown),
368
- subject: c.NullOr(c.Unknown),
369
- source: c.NullOr(c.String),
370
- errorTag: c.NullOr(c.String),
371
- errorMessage: c.NullOr(c.String),
372
- cancelled: c.Boolean,
373
- startedAt: c.Date,
374
- completedAt: c.NullOr(c.Date),
375
- durationMs: c.NullOr(c.Number),
376
- traceId: c.NullOr(c.String),
377
- parentExecutionId: c.NullOr(c.String),
378
- parentClosePolicy: c.NullOr(N)
379
- }), I = c.Struct({
380
- tag: c.optional(c.String),
381
- status: c.optional(M),
382
- limit: c.optional(c.Number)
383
- }), L = c.Struct({
384
- id: c.String,
385
- runId: c.String,
386
- stepName: c.String,
387
- attempt: c.Number,
388
- status: c.Literal("running", "succeeded", "failed"),
389
- input: c.NullOr(c.Unknown),
390
- retryPolicy: c.NullOr(c.Unknown),
391
- output: c.NullOr(c.Unknown),
392
- errorTag: c.NullOr(c.String),
393
- errorMessage: c.NullOr(c.String),
394
- errorCause: c.NullOr(c.Unknown),
395
- startedAt: c.Date,
396
- completedAt: c.NullOr(c.Date),
397
- durationMs: c.NullOr(c.Number)
398
- }), R = c.Struct({
399
- id: c.String,
400
- runId: c.String,
401
- eventType: c.String,
402
- payload: c.NullOr(c.Unknown),
403
- occurredAt: c.Date,
404
- stepName: c.NullOr(c.String),
405
- attempt: c.NullOr(c.Number)
406
- }), z = c.Struct({
407
- id: c.String,
408
- name: c.String,
409
- payload: c.Unknown,
410
- source: c.String,
411
- subject: c.NullOr(c.Unknown),
412
- traceId: c.NullOr(c.String),
413
- occurredAt: c.Date
414
- }), B = c.Struct({
415
- id: c.String,
416
- eventId: c.String,
417
- eventName: c.String,
418
- triggerId: c.String,
419
- workflowName: c.String,
420
- executionId: c.NullOr(c.String),
421
- status: c.Literal("starting", "started", "skipped", "failed"),
422
- idempotencyKey: c.String,
423
- skipped: c.Boolean,
424
- errorMessage: c.NullOr(c.String),
425
- createdAt: c.Date,
426
- completedAt: c.NullOr(c.Date)
427
- }), V = c.Struct({ id: c.String }), H = c.Struct({ runId: c.String }), U = c.Struct({
428
- name: c.optional(c.String),
429
- limit: c.optional(c.Number)
430
- }), W = c.Struct({ eventId: c.String }), G = c.Struct({
431
- workflowName: c.String,
432
- executionId: c.String
433
- }), K = c.Struct({
434
- id: c.String,
435
- signalName: c.String,
436
- payload: c.optional(c.Unknown)
437
- }), q = c.Struct({
438
- id: c.String,
439
- updateName: c.String,
440
- payload: c.optional(c.Unknown),
441
- timeoutMs: c.optional(c.Number)
442
- }), J = c.Struct({
443
- eventId: c.String,
444
- updateId: c.String,
445
- completedEventId: c.String,
446
- result: c.Unknown
447
- }), gt = _({
455
+ let r = K(e);
456
+ return r ? q(t, r) === 0 : !1;
457
+ }, J = l.Literal("running", "succeeded", "failed", "cancelled", "suspended"), zt = l.Literal("cancel", "terminate", "abandon"), Bt = l.Struct({
458
+ mode: l.String,
459
+ dueAt: l.NullOr(l.Number),
460
+ retryAfterMs: l.NullOr(l.Number),
461
+ intentId: l.NullOr(l.String)
462
+ }), Vt = l.Struct({
463
+ id: l.String,
464
+ workflowName: l.String,
465
+ executionId: l.NullOr(l.String),
466
+ status: l.Literal("running", "queued", "dropped", "skipped"),
467
+ deferral: l.optional(Bt)
468
+ }), Y = l.Struct({
469
+ id: l.String,
470
+ tag: l.String,
471
+ executionId: l.String,
472
+ status: J,
473
+ payload: l.Unknown,
474
+ workflowVersion: l.NullOr(l.String),
475
+ workflowPatches: l.NullOr(l.Unknown),
476
+ output: l.NullOr(l.Unknown),
477
+ subject: l.NullOr(l.Unknown),
478
+ source: l.NullOr(l.String),
479
+ errorTag: l.NullOr(l.String),
480
+ errorMessage: l.NullOr(l.String),
481
+ cancelled: l.Boolean,
482
+ startedAt: l.Date,
483
+ completedAt: l.NullOr(l.Date),
484
+ durationMs: l.NullOr(l.Number),
485
+ traceId: l.NullOr(l.String),
486
+ parentExecutionId: l.NullOr(l.String),
487
+ parentClosePolicy: l.NullOr(zt)
488
+ }), Ht = l.Struct({
489
+ tag: l.optional(l.String),
490
+ status: l.optional(J),
491
+ limit: l.optional(l.Number)
492
+ }), Ut = l.Struct({
493
+ id: l.String,
494
+ runId: l.String,
495
+ stepName: l.String,
496
+ attempt: l.Number,
497
+ status: l.Literal("running", "succeeded", "failed"),
498
+ input: l.NullOr(l.Unknown),
499
+ retryPolicy: l.NullOr(l.Unknown),
500
+ output: l.NullOr(l.Unknown),
501
+ errorTag: l.NullOr(l.String),
502
+ errorMessage: l.NullOr(l.String),
503
+ errorCause: l.NullOr(l.Unknown),
504
+ startedAt: l.Date,
505
+ completedAt: l.NullOr(l.Date),
506
+ durationMs: l.NullOr(l.Number)
507
+ }), Wt = l.Struct({
508
+ id: l.String,
509
+ runId: l.String,
510
+ eventType: l.String,
511
+ payload: l.NullOr(l.Unknown),
512
+ occurredAt: l.Date,
513
+ stepName: l.NullOr(l.String),
514
+ attempt: l.NullOr(l.Number)
515
+ }), Gt = l.Struct({
516
+ id: l.String,
517
+ name: l.String,
518
+ payload: l.Unknown,
519
+ source: l.String,
520
+ subject: l.NullOr(l.Unknown),
521
+ traceId: l.NullOr(l.String),
522
+ occurredAt: l.Date
523
+ }), Kt = l.Struct({
524
+ id: l.String,
525
+ eventId: l.String,
526
+ eventName: l.String,
527
+ triggerId: l.String,
528
+ workflowName: l.String,
529
+ executionId: l.NullOr(l.String),
530
+ status: l.Literal("starting", "started", "skipped", "failed"),
531
+ idempotencyKey: l.String,
532
+ skipped: l.Boolean,
533
+ errorMessage: l.NullOr(l.String),
534
+ createdAt: l.Date,
535
+ completedAt: l.NullOr(l.Date)
536
+ }), qt = l.Struct({ id: l.String }), X = l.Struct({ runId: l.String }), Jt = l.Struct({
537
+ name: l.optional(l.String),
538
+ limit: l.optional(l.Number)
539
+ }), Yt = l.Struct({ eventId: l.String }), Z = l.Struct({
540
+ workflowName: l.String,
541
+ executionId: l.String
542
+ }), Xt = l.Struct({
543
+ id: l.String,
544
+ signalName: l.String,
545
+ payload: l.optional(l.Unknown)
546
+ }), Zt = l.Struct({
547
+ id: l.String,
548
+ updateName: l.String,
549
+ payload: l.optional(l.Unknown),
550
+ timeoutMs: l.optional(l.Number)
551
+ }), Qt = l.Struct({
552
+ eventId: l.String,
553
+ updateId: l.String,
554
+ completedEventId: l.String,
555
+ result: l.Unknown
556
+ }), $t = B({
448
557
  name: "__voltro.workflow.run",
449
558
  source: "_voltro_workflow_runs",
450
- input: V,
451
- output: c.Array(F)
452
- }), _t = _({
559
+ input: qt,
560
+ output: l.Array(Y)
561
+ }), en = B({
453
562
  name: "__voltro.workflow.runs",
454
563
  source: "_voltro_workflow_runs",
455
- input: I,
456
- output: c.Array(F)
457
- }), vt = _({
564
+ input: Ht,
565
+ output: l.Array(Y)
566
+ }), tn = B({
458
567
  name: "__voltro.workflow.run.steps",
459
568
  source: "_voltro_workflow_run_steps",
460
- input: H,
461
- output: c.Array(L)
462
- }), yt = _({
569
+ input: X,
570
+ output: l.Array(Ut)
571
+ }), nn = B({
463
572
  name: "__voltro.workflow.run.events",
464
573
  source: "_voltro_workflow_run_events",
465
- input: H,
466
- output: c.Array(R)
467
- }), bt = _({
574
+ input: X,
575
+ output: l.Array(Wt)
576
+ }), rn = B({
468
577
  name: "__voltro.workflow.domainEvents",
469
578
  source: "_voltro_workflow_events",
470
- input: U,
471
- output: c.Array(z)
472
- }), xt = _({
579
+ input: Jt,
580
+ output: l.Array(Gt)
581
+ }), an = B({
473
582
  name: "__voltro.workflow.event.deliveries",
474
583
  source: "_voltro_workflow_event_deliveries",
475
- input: W,
476
- output: c.Array(B)
477
- }), St = y({
584
+ input: Yt,
585
+ output: l.Array(Kt)
586
+ }), on = H({
478
587
  name: "__voltro.workflow.cancel",
479
- input: G,
480
- output: c.Struct({ ok: c.Boolean })
481
- }), Ct = y({
588
+ input: Z,
589
+ output: l.Struct({ ok: l.Boolean })
590
+ }), sn = H({
482
591
  name: "__voltro.workflow.resume",
483
- input: G,
484
- output: c.Struct({ ok: c.Boolean })
485
- }), wt = y({
592
+ input: Z,
593
+ output: l.Struct({ ok: l.Boolean })
594
+ }), cn = H({
486
595
  name: "__voltro.workflow.signal",
487
- input: K,
488
- output: c.Struct({ eventId: c.String })
489
- }), Tt = y({
596
+ input: Xt,
597
+ output: l.Struct({ eventId: l.String })
598
+ }), ln = H({
490
599
  name: "__voltro.workflow.update",
491
- input: q,
492
- output: J
493
- }), Y = "__voltro.undo.log", X = "__voltro.undo.apply", Et = "__voltro.undo.redo", Dt = c.Struct({
494
- id: c.String,
495
- tag: c.String,
496
- label: c.NullOr(c.String),
497
- undone: c.Boolean,
498
- crossesAction: c.Boolean,
499
- createdAt: c.String
500
- }), Ot = class extends c.TaggedError()("UndoNotFound", { invocationId: c.String }) {}, kt = class extends c.TaggedError()("UndoForbidden", { invocationId: c.String }) {}, At = class extends c.TaggedError()("UndoConflict", {
501
- invocationId: c.String,
502
- reason: c.Literal("conflict", "action")
503
- }) {}, jt = c.Union(Ot, kt, At), Mt = _({
504
- name: Y,
600
+ input: Zt,
601
+ output: Qt
602
+ }), un = "__voltro.undo.log", dn = "__voltro.undo.apply", fn = "__voltro.undo.redo", pn = l.Struct({
603
+ id: l.String,
604
+ tag: l.String,
605
+ label: l.NullOr(l.String),
606
+ undone: l.Boolean,
607
+ crossesAction: l.Boolean,
608
+ createdAt: l.String
609
+ }), mn = class extends l.TaggedError()("UndoNotFound", { invocationId: l.String }) {}, hn = class extends l.TaggedError()("UndoForbidden", { invocationId: l.String }) {}, gn = class extends l.TaggedError()("UndoConflict", {
610
+ invocationId: l.String,
611
+ reason: l.Literal("conflict", "action")
612
+ }) {}, _n = l.Union(mn, hn, gn), vn = B({
613
+ name: un,
505
614
  source: "_voltro_undo_log",
506
- input: c.Struct({ limit: c.optional(c.Number) }),
507
- output: c.Array(Dt)
508
- }), Nt = v({
509
- name: X,
510
- input: c.Struct({ invocationId: c.String }),
511
- output: c.Struct({ ok: c.Boolean }),
512
- error: jt
513
- }), Pt = v({
514
- name: Et,
515
- input: c.Struct({ invocationId: c.String }),
516
- output: c.Struct({ ok: c.Boolean }),
517
- error: jt
518
- }), Ft = "__voltro.connections.list", It = "__voltro.connections.start", Lt = "__voltro.connections.submitToken", Rt = "__voltro.connections.disconnect", Z = c.Literal("oauth2", "pat"), zt = c.Literal("disconnected", "connected", "expired", "revoked", "error"), Q = c.Struct({
519
- connectionId: c.String,
520
- kind: Z,
521
- label: c.String,
522
- status: zt,
523
- accountId: c.NullOr(c.String),
524
- accountLabel: c.NullOr(c.String),
525
- scopes: c.Array(c.String),
526
- expiresAt: c.NullOr(c.String),
527
- lastError: c.NullOr(c.String),
528
- connectedAt: c.NullOr(c.String)
529
- }), Bt = class extends c.TaggedError()("ConnectionNotDeclared", { connectionId: c.String }) {}, Vt = class extends c.TaggedError()("ConnectionSubjectRequired", { connectionId: c.String }) {}, Ht = class extends c.TaggedError()("ConnectionKindMismatch", {
530
- connectionId: c.String,
531
- expected: Z,
532
- actual: Z
533
- }) {}, Ut = class extends c.TaggedError()("ConnectionHandshakeFailed", {
534
- connectionId: c.String,
535
- reason: c.String,
536
- transient: c.Boolean
537
- }) {}, $ = c.Union(Bt, Vt, Ht, Ut), Wt = _({
538
- name: Ft,
615
+ input: l.Struct({ limit: l.optional(l.Number) }),
616
+ output: l.Array(pn),
617
+ openAccess: "subject-scoped by construction: lists only the calling subject's own undoable actions"
618
+ }), yn = V({
619
+ name: dn,
620
+ input: l.Struct({ invocationId: l.String }),
621
+ output: l.Struct({ ok: l.Boolean }),
622
+ error: _n,
623
+ openAccess: "subject-scoped by construction: undo is per-actor — another subject's invocation fails typed with UndoForbidden"
624
+ }), bn = V({
625
+ name: fn,
626
+ input: l.Struct({ invocationId: l.String }),
627
+ output: l.Struct({ ok: l.Boolean }),
628
+ error: _n,
629
+ openAccess: "subject-scoped by construction: redo is per-actor — another subject's invocation fails typed with UndoForbidden"
630
+ }), xn = "__voltro.approvals.pending", Sn = "__voltro.approvals.decide", Cn = B({
631
+ name: xn,
632
+ source: "_voltro_approvals",
633
+ input: l.Struct({ limit: l.optional(l.Number) }),
634
+ output: l.Array(O),
635
+ 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"
636
+ }), wn = V({
637
+ name: Sn,
638
+ input: l.Struct({
639
+ approvalId: l.String,
640
+ decision: l.Literal("approve", "reject"),
641
+ note: l.optional(l.String)
642
+ }),
643
+ output: l.Struct({
644
+ approvalId: l.String,
645
+ status: l.Literal("approved", "rejected")
646
+ }),
647
+ error: D,
648
+ 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"
649
+ }), Tn = "__voltro.connections.list", En = "__voltro.connections.start", Dn = "__voltro.connections.submitToken", On = "__voltro.connections.disconnect", Q = l.Literal("oauth2", "pat"), kn = l.Literal("disconnected", "connected", "expired", "revoked", "error"), An = l.Struct({
650
+ connectionId: l.String,
651
+ kind: Q,
652
+ label: l.String,
653
+ status: kn,
654
+ accountId: l.NullOr(l.String),
655
+ accountLabel: l.NullOr(l.String),
656
+ scopes: l.Array(l.String),
657
+ expiresAt: l.NullOr(l.String),
658
+ lastError: l.NullOr(l.String),
659
+ connectedAt: l.NullOr(l.String)
660
+ }), jn = class extends l.TaggedError()("ConnectionNotDeclared", { connectionId: l.String }) {}, Mn = class extends l.TaggedError()("ConnectionSubjectRequired", { connectionId: l.String }) {}, Nn = class extends l.TaggedError()("ConnectionKindMismatch", {
661
+ connectionId: l.String,
662
+ expected: Q,
663
+ actual: Q
664
+ }) {}, Pn = class extends l.TaggedError()("ConnectionHandshakeFailed", {
665
+ connectionId: l.String,
666
+ reason: l.String,
667
+ transient: l.Boolean
668
+ }) {}, $ = l.Union(jn, Mn, Nn, Pn), Fn = B({
669
+ name: Tn,
539
670
  source: "_voltro_connections",
540
- input: c.Struct({}),
541
- output: c.Array(Q)
542
- }), Gt = y({
543
- name: It,
544
- input: c.Struct({
545
- connectionId: c.String,
546
- redirectTo: c.optional(c.String)
671
+ input: l.Struct({}),
672
+ output: l.Array(An),
673
+ openAccess: "self-scoped read: projects the declared connections for the calling subject only (its own connect/disconnect state)"
674
+ }), In = H({
675
+ name: En,
676
+ input: l.Struct({
677
+ connectionId: l.String,
678
+ redirectTo: l.optional(l.String)
547
679
  }),
548
- output: c.Struct({
549
- authorizeUrl: c.String,
550
- state: c.String
680
+ output: l.Struct({
681
+ authorizeUrl: l.String,
682
+ state: l.String
551
683
  }),
552
- error: $
553
- }), Kt = v({
554
- name: Lt,
555
- input: c.Struct({
556
- connectionId: c.String,
557
- token: c.String
684
+ error: $,
685
+ openAccess: "self-service: begins an oauth handshake that stores a credential for the calling subject only; anonymous callers fail typed with ConnectionSubjectRequired"
686
+ }), Ln = V({
687
+ name: Dn,
688
+ input: l.Struct({
689
+ connectionId: l.String,
690
+ token: l.String
558
691
  }),
559
- output: c.Struct({ ok: c.Boolean }),
560
- error: $
561
- }), qt = v({
562
- name: Rt,
563
- input: c.Struct({ connectionId: c.String }),
564
- output: c.Struct({ ok: c.Boolean }),
565
- error: $
566
- }), Jt = (e) => {
692
+ output: l.Struct({ ok: l.Boolean }),
693
+ error: $,
694
+ openAccess: "self-service: stores a pasted token as the calling subject's own credential; anonymous callers fail typed with ConnectionSubjectRequired"
695
+ }), Rn = V({
696
+ name: On,
697
+ input: l.Struct({ connectionId: l.String }),
698
+ output: l.Struct({ ok: l.Boolean }),
699
+ error: $,
700
+ openAccess: "self-service: deletes only the calling subject's own credential row for this connection"
701
+ }), zn = (e) => {
567
702
  let t = e instanceof Date ? e.getTime() : typeof e == "number" ? e : typeof e == "string" ? new Date(e).getTime() : 0;
568
703
  return Number.isNaN(t) ? 0 : t;
569
- }, Yt = 1;
704
+ }, Bn = 1;
570
705
  //#endregion
571
- export { ce as ADMIN_SCOPE, he as APIKEY_ISSUE_ORG_SCOPE, re as APIKEY_ISSUE_OTHER_SCOPE, ie as APIKEY_ISSUE_SELF_SCOPE, je as AuthMiddleware, h as BusinessRuleViolation, Ft as CONNECTIONS_LIST_TAG, Rt as CONNECTION_DISCONNECT_TAG, It as CONNECTION_START_TAG, Lt as CONNECTION_SUBMIT_TOKEN_TAG, Ut as ConnectionHandshakeFailed, Ee as ConnectionInfo, ke as ConnectionInfoMiddleware, Z as ConnectionKind, Ht as ConnectionKindMismatch, Bt as ConnectionNotDeclared, Q as ConnectionState, zt as ConnectionStatus, Vt as ConnectionSubjectRequired, at as EVENT_ROUTE_SEP, rt as EventKeyInvalid, nt as EventPayloadInvalid, it as EventPayloadTooLarge, Qe as MAX_EVENT_ENVELOPE_BYTES, Yt as PROTOCOL_VERSION, s as ScopeError, we as Subject, be as SubjectService, X as UNDO_APPLY_TAG, Y as UNDO_LOG_TAG, Et as UNDO_REDO_TAG, De as Unauthenticated, At as UndoConflict, kt as UndoForbidden, Dt as UndoLogEntry, Ot as UndoNotFound, G as WorkflowControlInputSchema, z as WorkflowDomainEventRowSchema, U as WorkflowDomainEventsInputSchema, W as WorkflowEventDeliveriesInputSchema, B as WorkflowEventDeliveryRowSchema, N as WorkflowParentClosePolicySchema, R as WorkflowRunEventRowSchema, ht as WorkflowRunHandleSchema, V as WorkflowRunRefSchema, F as WorkflowRunRowSchema, M as WorkflowRunStatusSchema, L as WorkflowRunStepRowSchema, H as WorkflowRunTableRefSchema, I as WorkflowRunsInputSchema, K as WorkflowSignalInputSchema, P as WorkflowStartDeferralSchema, q as WorkflowUpdateInputSchema, J as WorkflowUpdateResultSchema, Je as actionToRpc, le as advisoryResourceGuardWarning, Ae as anonymousSubject, Be as applyRowPatch, xe as assertAuthenticated, fe as beginIdempotent, pt as checkFrameworkCompat, oe as checkGuards, ae as checkGuardsEffect, Te as composeAuthStrategies, dt as composeRpcInterceptors, qt as connectionDisconnectDescriptor, Gt as connectionStartDescriptor, Kt as connectionSubmitTokenDescriptor, Wt as connectionsListQueryDescriptor, y as defineAction, et as defineEvent, v as defineMutation, lt as definePlugin, ut as definePluginRoute, ft as definePluginService, _ as defineQuery, We as defineStream, Re as diffRows, o as effectiveScopes, k as encodeEventKey, Ye as errorTag, T as eventAttached, C as eventEnvelope, w as eventGap, D as eventResumePoint, ot as eventRoute, E as eventStreamEvent, O as eventSubscribeInput, tt as eventToRpc, se as failIdempotent, ge as findAdvisoryResourceGuards, ee as finishIdempotent, ct as formatEventRoute, ye as getPolicyGuardResolver, te as getResourceScopeResolver, Me as hasCallbackRoutes, ve as hasEffectiveScope, i as hasScope, p as idToPath, de as idempotencyScope, $e as isEventDescriptor, ze as isIdKeyed, e as isPolicyCheck, Ue as isPolicyGuard, Se as isSystemSubject, He as isWireReachable, pe as memoryIdempotencyStore, qe as mutationToRpc, Ze as normalizeDescriptor, st as parseEventRoute, Ie as pathToId, me as publishServerError, Ke as queryToRpc, _e as requireScope, d as rowPatchOpSchema, f as rowPatchSchema, a as setEffectiveScopes, n as setPolicyGuardResolver, t as setResourceScopeResolver, S as streamToRpc, r as subjectScopes, ue as subscribeServerErrors, Ve as subscriptionEvent, Ce as systemSubject, Oe as tenantScopedSubject, Xe as toRpc, Jt as tsMs, Nt as undoApplyDescriptor, Mt as undoLogQueryDescriptor, Pt as undoRedoDescriptor, St as workflowCancelDescriptor, bt as workflowDomainEventsQueryDescriptor, xt as workflowEventDeliveriesQueryDescriptor, Ct as workflowResumeDescriptor, yt as workflowRunEventsQueryDescriptor, gt as workflowRunQueryDescriptor, vt as workflowRunStepsQueryDescriptor, _t as workflowRunsQueryDescriptor, wt as workflowSignalDescriptor, Tt as workflowUpdateDescriptor, ne as wsMutationIdempotencyScope };
706
+ export { je as ADMIN_SCOPE, oe as APIKEY_ISSUE_ORG_SCOPE, n as APIKEY_ISSUE_OTHER_SCOPE, Ae as APIKEY_ISSUE_SELF_SCOPE, Sn as APPROVALS_DECIDE_TAG, xn as APPROVALS_PENDING_TAG, D as ApprovalDecisionErrors, E as ApprovalErrors, S as ApprovalExpired, w as ApprovalForbidden, y as ApprovalNotFound, C as ApprovalNotPending, x as ApprovalRejected, v as ApprovalRequired, b as ApprovalSelfApproval, T as ApprovalUnavailable, De as AuthMiddleware, _ as BusinessRuleViolation, Tn as CONNECTIONS_LIST_TAG, On as CONNECTION_DISCONNECT_TAG, En as CONNECTION_START_TAG, Dn as CONNECTION_SUBMIT_TOKEN_TAG, Pn as ConnectionHandshakeFailed, Se as ConnectionInfo, Te as ConnectionInfoMiddleware, Q as ConnectionKind, Nn as ConnectionKindMismatch, jn as ConnectionNotDeclared, An as ConnectionState, kn as ConnectionStatus, Mn as ConnectionSubjectRequired, _e as DEFAULT_SCOPE_CACHE_MAX_ENTRIES, ue as DEFAULT_SCOPE_CACHE_TTL_MS, Ot as EVENT_ROUTE_SEP, Tt as EventKeyInvalid, wt as EventPayloadInvalid, Et as EventPayloadTooLarge, ht as MAX_EVENT_ENVELOPE_BYTES, Bn as PROTOCOL_VERSION, O as PendingApproval, k as REACTIVITY_CHANNEL_PREFIX, c as ScopeError, Ce as Subject, Ee as SubjectIdentity, fe as SubjectService, dn as UNDO_APPLY_TAG, un as UNDO_LOG_TAG, fn as UNDO_REDO_TAG, be as Unauthenticated, gn as UndoConflict, hn as UndoForbidden, pn as UndoLogEntry, mn as UndoNotFound, Z as WorkflowControlInputSchema, Gt as WorkflowDomainEventRowSchema, Jt as WorkflowDomainEventsInputSchema, Yt as WorkflowEventDeliveriesInputSchema, Kt as WorkflowEventDeliveryRowSchema, zt as WorkflowParentClosePolicySchema, Wt as WorkflowRunEventRowSchema, Vt as WorkflowRunHandleSchema, qt as WorkflowRunRefSchema, Y as WorkflowRunRowSchema, J as WorkflowRunStatusSchema, Ut as WorkflowRunStepRowSchema, X as WorkflowRunTableRefSchema, Ht as WorkflowRunsInputSchema, Xt as WorkflowSignalInputSchema, Bt as WorkflowStartDeferralSchema, Zt as WorkflowUpdateInputSchema, Qt as WorkflowUpdateResultSchema, ut as actionToRpc, i as advisoryResourceGuardWarning, Oe as anonymousSubject, Ye as applyRowPatch, pe as applyScopeDecision, wn as approvalsDecideDescriptor, Cn as approvalsPendingQueryDescriptor, me as assertAuthenticated, ze as beginIdempotent, Lt as checkFrameworkCompat, r as checkGuards, ie as checkGuardsEffect, we as composeAuthStrategies, Ft as composeRpcInterceptors, Rn as connectionDisconnectDescriptor, In as connectionStartDescriptor, Ln as connectionSubmitTokenDescriptor, Fn as connectionsListQueryDescriptor, F as declaredReactivityChannelKeys, H as defineAction, _t as defineEvent, V as defineMutation, Mt as definePlugin, Nt as definePluginRoute, It as definePluginService, B as defineQuery, at as defineStream, qe as diffRows, ye as effectiveScopes, Dt as encodeEventKey, ft as errorTag, bt as eventAttached, vt as eventEnvelope, yt as eventGap, G as eventResumePoint, kt as eventRoute, xt as eventStreamEvent, St as eventSubscribeInput, Ct as eventToRpc, Ie as failIdempotent, e as findAdvisoryResourceGuards, Pe as finishIdempotent, jt as formatEventRoute, ve as getPolicyGuardResolver, ne as getResourceScopeResolver, it as hasAccessDecision, xe as hasCallbackRoutes, re as hasEffectiveScope, ae as hasScope, m as idToPath, Re as idempotencyScope, gt as isEventDescriptor, Je as isIdKeyed, a as isOpenAccess, ee as isPolicyCheck, rt as isPolicyGuard, N as isReactivityChannel, P as isReactivityChannelKey, ge as isSystemSubject, tt as isWireReachable, he as makeScopeCache, Be as memoryIdempotencyStore, te as missingAccessDecision, lt as mutationToRpc, mt as normalizeDescriptor, Qe as normalizeSource, s as openAccessSpec, At as parseEventRoute, Ge as pathToId, Pt as pluginInstanceName, et as publishReactivity, Ve as publishServerError, ct as queryToRpc, Ze as reactivityChannel, Ne as requireScope, f as rowPatchOpSchema, p as rowPatchSchema, le as scopeCacheKey, t as setEffectiveScopes, ce as setPolicyGuardResolver, o as setResourceScopeResolver, L as sourceKeys, dt as streamToRpc, ke as subjectIdentity, se as subjectScopes, Le as subscribeServerErrors, g as subscriptionEvent, Me as systemSubject, de as tenantScopedSubject, pt as toRpc, zn as tsMs, $e as undeclaredChannelKeys, yn as undoApplyDescriptor, vn as undoLogQueryDescriptor, bn as undoRedoDescriptor, on as workflowCancelDescriptor, rn as workflowDomainEventsQueryDescriptor, an as workflowEventDeliveriesQueryDescriptor, sn as workflowResumeDescriptor, nn as workflowRunEventsQueryDescriptor, $t as workflowRunQueryDescriptor, tn as workflowRunStepsQueryDescriptor, en as workflowRunsQueryDescriptor, cn as workflowSignalDescriptor, ln as workflowUpdateDescriptor, Fe as wsMutationIdempotencyScope };