@voltro/web 0.28.0 → 0.30.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.
@@ -2,23 +2,19 @@ import { t as e } from "./globalContext-d4A-ugDg.js";
2
2
  import { AppClientsContext as t } from "./hooks.js";
3
3
  import { c as n, l as r, r as i, s as a } from "./defaultFallbacks-Fik_Gcjh.js";
4
4
  import { useCallback as o, useContext as s, useEffect as c, useRef as l, useState as u, useSyncExternalStore as d } from "react";
5
- import { Context as f, Layer as p, ManagedRuntime as m } from "effect";
6
- import * as h from "@effect/platform/Socket";
7
- import * as g from "@effect/platform/Headers";
8
- import { RpcClient as _, RpcSerialization as v } from "@effect/rpc";
9
- import { FrameworkRuntimesProvider as y, RpcErrorBus as b, SubscriptionCache as ee, ssrClientProxy as te, ssrStubHandle as ne, subscribeClientTraces as re } from "@voltro/client";
10
- import { Fragment as x, jsx as S, jsxs as C } from "react/jsx-runtime";
5
+ import { FrameworkRuntimesProvider as f, buildApiRuntime as p, ssrClientProxy as m, ssrStubHandle as h, subscribeClientTraces as g } from "@voltro/client";
6
+ import { Fragment as ee, jsx as _, jsxs as v } from "react/jsx-runtime";
11
7
  //#region src/reconnect.ts
12
- var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220, E = () => {
8
+ var y = e("reconnect", null), b = () => s(y) ?? (() => {}), x = 150, S = 220, C = () => {
13
9
  let e = d(r, a, a).some((e) => e.kind === "loading" || e.kind === "reconnecting"), [t, n] = u(!1);
14
10
  return c(() => {
15
11
  if (!e) {
16
12
  n(!1);
17
13
  return;
18
14
  }
19
- let t = setTimeout(() => n(!0), ae);
15
+ let t = setTimeout(() => n(!0), x);
20
16
  return () => clearTimeout(t);
21
- }, [e]), /* @__PURE__ */ C("div", {
17
+ }, [e]), /* @__PURE__ */ v("div", {
22
18
  "aria-hidden": "true",
23
19
  "data-voltro-nav-indicator": "",
24
20
  style: {
@@ -29,7 +25,7 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
29
25
  pointerEvents: "none",
30
26
  opacity: +!!t,
31
27
  transform: t ? "translateY(0) scale(1)" : "translateY(4px) scale(0.96)",
32
- transition: `opacity ${T}ms ease, transform ${T}ms ease`,
28
+ transition: `opacity ${S}ms ease, transform ${S}ms ease`,
33
29
  display: "grid",
34
30
  placeItems: "center",
35
31
  width: 34,
@@ -41,16 +37,16 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
41
37
  border: "1px solid color-mix(in oklch, canvastext 12%, transparent)",
42
38
  boxShadow: "0 4px 14px color-mix(in oklch, canvastext 16%, transparent)"
43
39
  },
44
- children: [/* @__PURE__ */ S("span", { "data-voltro-nav-spinner": "" }), /* @__PURE__ */ S("style", { children: oe })]
40
+ children: [/* @__PURE__ */ _("span", { "data-voltro-nav-spinner": "" }), /* @__PURE__ */ _("style", { children: te })]
45
41
  });
46
- }, oe = "\n@keyframes voltroNavSpin { to { transform: rotate(360deg); } }\n[data-voltro-nav-spinner] {\n width: 16px;\n height: 16px;\n border-radius: 50%;\n border: 2px solid color-mix(in oklch, canvastext 22%, transparent);\n border-top-color: color-mix(in oklch, canvastext 78%, transparent);\n animation: voltroNavSpin 0.7s linear infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n [data-voltro-nav-spinner] { animation-duration: 1.6s; }\n}\n", se = (e) => Math.min(500 * 2 ** Math.min(e - 1, 4), 5e3), ce = 2, D = 2e3, O = () => typeof window < "u" && !1, le = () => typeof window > "u" ? null : `${window.location.origin}/`, ue = 2e4, k = "voltro:wedge-reload-at", de = () => {
42
+ }, te = "\n@keyframes voltroNavSpin { to { transform: rotate(360deg); } }\n[data-voltro-nav-spinner] {\n width: 16px;\n height: 16px;\n border-radius: 50%;\n border: 2px solid color-mix(in oklch, canvastext 22%, transparent);\n border-top-color: color-mix(in oklch, canvastext 78%, transparent);\n animation: voltroNavSpin 0.7s linear infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n [data-voltro-nav-spinner] { animation-duration: 1.6s; }\n}\n", ne = (e) => Math.min(500 * 2 ** Math.min(e - 1, 4), 5e3), re = 2, w = 2e3, T = () => typeof window < "u" && !1, ie = () => typeof window > "u" ? null : `${window.location.origin}/`, ae = 2e4, E = "voltro:wedge-reload-at", D = () => {
47
43
  try {
48
- let e = Number(window.sessionStorage.getItem(k) ?? "0"), t = Date.now();
49
- if (t - e < ue) return;
50
- window.sessionStorage.setItem(k, String(t));
44
+ let e = Number(window.sessionStorage.getItem(E) ?? "0"), t = Date.now();
45
+ if (t - e < ae) return;
46
+ window.sessionStorage.setItem(E, String(t));
51
47
  } catch {}
52
48
  window.location.reload();
53
- }, fe = () => ({
49
+ }, O = () => ({
54
50
  resolved: null,
55
51
  retryToken: 0,
56
52
  failureCount: 0,
@@ -58,15 +54,15 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
58
54
  reconnectStatusDispose: null,
59
55
  everOpened: !1,
60
56
  healthPollHandle: null
61
- }), A = (e) => {
57
+ }), k = (e) => {
62
58
  e.healthPollHandle !== null && (clearInterval(e.healthPollHandle), e.healthPollHandle = null);
63
- }, j = (e) => {
59
+ }, A = (e) => {
64
60
  e.cache.destroy(e.runtime), e.runtime.dispose();
65
- }, pe = (e) => {
66
- let t = e.apis, r = e.buildClient, i = e.onChange, a = e.retryDelayMs ?? se, o = e.stableWindowMs ?? 5e3, s = e.scheduler?.setTimeout ?? ((e, t) => setTimeout(e, t)), c = e.scheduler?.clearTimeout ?? ((e) => {
61
+ }, oe = (e) => {
62
+ let t = e.apis, r = e.buildClient, i = e.onChange, a = e.retryDelayMs ?? ne, o = e.stableWindowMs ?? 5e3, s = e.scheduler?.setTimeout ?? ((e, t) => setTimeout(e, t)), c = e.scheduler?.clearTimeout ?? ((e) => {
67
63
  clearTimeout(e);
68
64
  }), l = e.scheduler?.queueMicrotask ?? queueMicrotask, u = /* @__PURE__ */ new Map();
69
- for (let e of t) u.set(e.name, fe());
65
+ for (let e of t) u.set(e.name, O());
70
66
  let d = !1, f = /* @__PURE__ */ new Set(), p = (e, t) => {
71
67
  let n = s(() => {
72
68
  f.delete(n), e();
@@ -87,17 +83,17 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
87
83
  id: `voltro:supervisor:${e.name}`,
88
84
  kind: "reconnecting",
89
85
  label: "Reconnecting…"
90
- }), O() && t.everOpened && t.failureCount >= ce && t.healthPollHandle === null) {
91
- let e = le();
86
+ }), T() && t.everOpened && t.failureCount >= re && t.healthPollHandle === null) {
87
+ let e = ie();
92
88
  e && (t.healthPollHandle = setInterval(() => {
93
89
  fetch(e, {
94
90
  method: "GET",
95
91
  cache: "no-store",
96
- signal: AbortSignal.timeout(D)
92
+ signal: AbortSignal.timeout(w)
97
93
  }).then((e) => {
98
- e.status < 500 && de();
94
+ e.status < 500 && D();
99
95
  }).catch(() => {});
100
- }, D));
96
+ }, w));
101
97
  }
102
98
  p(() => {
103
99
  d || t.retryToken === i && (t.generation += 1, g(e));
@@ -108,7 +104,7 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
108
104
  if (!t) return;
109
105
  let n = t.generation, i = () => {
110
106
  if (d || t.generation !== n) return;
111
- t.everOpened = !0, A(t), t.retryToken++;
107
+ t.everOpened = !0, k(t), t.retryToken++;
112
108
  let e = t.failureCount;
113
109
  p(() => {
114
110
  d || t.failureCount === e && (t.failureCount = 0);
@@ -119,11 +115,11 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
119
115
  try {
120
116
  let o = await r(e, n, i, a);
121
117
  if (d || t.generation !== n) {
122
- j(o);
118
+ A(o);
123
119
  return;
124
120
  }
125
121
  let s = t.resolved;
126
- t.resolved = o, t.reconnectStatusDispose &&= (t.reconnectStatusDispose(), null), m(), s && j(s);
122
+ t.resolved = o, t.reconnectStatusDispose &&= (t.reconnectStatusDispose(), null), m(), s && A(s);
127
123
  } catch {
128
124
  if (d || t.generation !== n) return;
129
125
  h(e);
@@ -142,35 +138,35 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
142
138
  d = !0;
143
139
  for (let e of f) c(e);
144
140
  f.clear();
145
- for (let [, e] of u) e.resolved && j(e.resolved), e.reconnectStatusDispose && e.reconnectStatusDispose(), A(e);
141
+ for (let [, e] of u) e.resolved && A(e.resolved), e.reconnectStatusDispose && e.reconnectStatusDispose(), k(e);
146
142
  u.clear();
147
143
  }
148
144
  },
149
145
  reconnect: () => {
150
146
  if (!d) for (let e of t) {
151
147
  let t = u.get(e.name);
152
- t && (t.retryToken += 1, t.generation += 1, t.failureCount = 0, A(t), g(e));
148
+ t && (t.retryToken += 1, t.generation += 1, t.failureCount = 0, k(t), g(e));
153
149
  }
154
150
  }
155
151
  });
156
- }, M = {
152
+ }, j = {
157
153
  log: console.log.bind(console),
158
154
  info: console.info.bind(console),
159
155
  warn: console.warn.bind(console),
160
156
  error: console.error.bind(console),
161
157
  debug: console.debug.bind(console)
162
- }, me = 200, he = 400, N = 20, P = 1e3, F = (e) => {
158
+ }, se = 200, M = 400, N = 20, P = 1e3, F = (e) => {
163
159
  if (typeof e == "string") return e;
164
160
  if (e === void 0) return "undefined";
165
161
  if (e === null) return "null";
166
162
  if (e instanceof Error) return e.stack ?? e.message;
167
163
  if (typeof e == "object") try {
168
- return JSON.stringify(e, I());
164
+ return JSON.stringify(e, ce());
169
165
  } catch {
170
166
  return Object.prototype.toString.call(e);
171
167
  }
172
168
  return String(e);
173
- }, I = () => {
169
+ }, ce = () => {
174
170
  let e = /* @__PURE__ */ new WeakSet();
175
171
  return (t, n) => {
176
172
  if (typeof n == "object" && n) {
@@ -179,20 +175,20 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
179
175
  }
180
176
  return n;
181
177
  };
182
- }, L = (e, t) => e.length > t ? `${e.slice(0, t)}…` : e, R = /%[sdifoOc]/g, z = (e) => {
178
+ }, I = (e, t) => e.length > t ? `${e.slice(0, t)}…` : e, L = /%[sdifoOc]/g, R = (e) => {
183
179
  if (e.length === 0) return {
184
180
  message: "",
185
181
  rest: []
186
182
  };
187
183
  let t = e[0];
188
- if (typeof t != "string" || !R.test(t)) return {
184
+ if (typeof t != "string" || !L.test(t)) return {
189
185
  message: F(t),
190
186
  rest: e.slice(1)
191
187
  };
192
- R.lastIndex = 0;
188
+ L.lastIndex = 0;
193
189
  let n = 1;
194
190
  return {
195
- message: t.replace(R, (t) => {
191
+ message: t.replace(L, (t) => {
196
192
  if (t === "%c") return n++, "";
197
193
  if (n >= e.length) return t;
198
194
  let r = e[n++];
@@ -214,15 +210,15 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
214
210
  }),
215
211
  rest: e.slice(n)
216
212
  };
217
- }, B = (e) => {
218
- let t = e.flushAfterMs ?? he, n = `${e.baseUrl.replace(/\/+$/, "")}/_voltro/inspect/clientLog`, r = [], i = null, a = !1, o = () => {
213
+ }, z = (e) => {
214
+ let t = e.flushAfterMs ?? M, n = `${e.baseUrl.replace(/\/+$/, "")}/_voltro/inspect/clientLog`, r = [], i = null, a = !1, o = () => {
219
215
  if (i !== null && (clearTimeout(i), i = null), r.length === 0) return;
220
216
  let t = r;
221
217
  r = [];
222
218
  let a = {
223
219
  app: e.appName,
224
220
  page: typeof window < "u" ? window.location.pathname : void 0,
225
- ua: typeof navigator < "u" ? L(navigator.userAgent, 200) : void 0,
221
+ ua: typeof navigator < "u" ? I(navigator.userAgent, 200) : void 0,
226
222
  entries: t
227
223
  };
228
224
  try {
@@ -238,11 +234,11 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
238
234
  i === null && (i = setTimeout(o, t));
239
235
  }, c = (e, t) => {
240
236
  if (a) return;
241
- r.length >= me && r.shift();
237
+ r.length >= se && r.shift();
242
238
  let n = t.find((e) => e instanceof Error), i = t.find((e) => typeof e == "object" && !!e && "componentStack" in e), c = typeof i?.componentStack == "string" ? i.componentStack : void 0, l = t[0] instanceof Error ? {
243
239
  message: t[0].message,
244
240
  rest: t.slice(1)
245
- } : z(t), u = L(l.message, P), d = l.rest.filter((e) => e !== n && e !== i).map((e) => L(F(e), P)), f;
241
+ } : R(t), u = I(l.message, P), d = l.rest.filter((e) => e !== n && e !== i).map((e) => I(F(e), P)), f;
246
242
  n ? (f = n.stack ?? n.message, c && (f += `\n\nComponent stack:${c}`)) : e === "error" && (f = (/* @__PURE__ */ Error()).stack);
247
243
  let p = {
248
244
  ts: Date.now(),
@@ -253,27 +249,27 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
253
249
  };
254
250
  r.push(p), r.length >= N ? o() : s();
255
251
  }, l = (e) => (...t) => {
256
- M[e](...t), c(e, t);
252
+ j[e](...t), c(e, t);
257
253
  };
258
254
  console.log = l("log"), console.info = l("info"), console.warn = l("warn"), console.error = l("error"), console.debug = l("debug");
259
255
  let u = () => {
260
256
  o();
261
257
  };
262
258
  return typeof window < "u" && (window.addEventListener("beforeunload", u), window.addEventListener("pagehide", u)), { dispose: () => {
263
- a = !0, o(), i !== null && (clearTimeout(i), i = null), console.log = M.log, console.info = M.info, console.warn = M.warn, console.error = M.error, console.debug = M.debug, typeof window < "u" && (window.removeEventListener("beforeunload", u), window.removeEventListener("pagehide", u));
259
+ a = !0, o(), i !== null && (clearTimeout(i), i = null), console.log = j.log, console.info = j.info, console.warn = j.warn, console.error = j.error, console.debug = j.debug, typeof window < "u" && (window.removeEventListener("beforeunload", u), window.removeEventListener("pagehide", u));
264
260
  } };
265
- }, ge = 500, V = /* @__PURE__ */ new Set(), H = (e) => {
266
- if (!V.has(e) && (V.add(e), V.size > ge)) {
261
+ }, B = 500, V = /* @__PURE__ */ new Set(), H = (e) => {
262
+ if (!V.has(e) && (V.add(e), V.size > B)) {
267
263
  let e = V.values().next().value;
268
264
  e !== void 0 && V.delete(e);
269
265
  }
270
266
  }, U = /* @__PURE__ */ new Set(), W = (e) => (U.add(e), () => {
271
267
  U.delete(e);
272
- }), _e = (e) => {
268
+ }), le = (e) => {
273
269
  for (let t of U) try {
274
270
  t(e);
275
271
  } catch {}
276
- }, ve = {
272
+ }, ue = {
277
273
  log: "log",
278
274
  info: "info",
279
275
  warn: "warn",
@@ -292,21 +288,21 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
292
288
  try {
293
289
  let n = JSON.parse(t.data).payload;
294
290
  if (!n || typeof n.message != "string" || n.scope === "client") return;
295
- let r = n.level === void 0 ? "log" : ve[n.level], i = n.scope ? ` ${n.scope}` : "";
296
- M[r](`%c[server ${e.originLabel}${i}]%c ${n.message}`, G[r], "", ...n.fields ? [n.fields] : []);
291
+ let r = n.level === void 0 ? "log" : ue[n.level], i = n.scope ? ` ${n.scope}` : "";
292
+ j[r](`%c[server ${e.originLabel}${i}]%c ${n.message}`, G[r], "", ...n.fields ? [n.fields] : []);
297
293
  } catch {}
298
294
  }), n.addEventListener("trace", (t) => {
299
295
  try {
300
296
  let n = JSON.parse(t.data).payload;
301
297
  if (!n || n.status !== "error" || typeof n.traceId != "string" || !V.has(n.traceId)) return;
302
298
  let r = n.name ?? "span", i = n.statusMessage && n.statusMessage.length > 0 ? n.statusMessage : `${r} failed`;
303
- _e({
299
+ le({
304
300
  traceId: n.traceId,
305
301
  spanName: r,
306
302
  api: e.originLabel,
307
303
  message: i,
308
304
  ts: Date.now()
309
- }), M.error(`%c[trace ${e.originLabel}]%c ${r} failed — ${i} (trace ${n.traceId})`, G.error, "");
305
+ }), j.error(`%c[trace ${e.originLabel}]%c ${r} failed — ${i} (trace ${n.traceId})`, G.error, "");
310
306
  } catch {}
311
307
  }), n.addEventListener("error", () => {
312
308
  n && n.readyState === EventSource.CLOSED && (n = null, !r && i === null && (i = setTimeout(() => {
@@ -325,20 +321,20 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
325
321
  muted: "oklch(0.65 0.012 285)",
326
322
  danger: "oklch(0.7 0.21 22)",
327
323
  dangerDim: "oklch(0.5 0.18 22 / 25%)"
328
- }, J = "ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace", ye = "ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif", be = 0, xe = () => {
324
+ }, J = "ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace", de = "ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif", fe = 0, pe = () => {
329
325
  let [e, t] = u([]);
330
326
  if (c(() => W((e) => {
331
327
  t((t) => {
332
328
  if (t.some((t) => t.traceId === e.traceId && t.spanName === e.spanName)) return t;
333
329
  let n = [...t, {
334
330
  ...e,
335
- id: ++be
331
+ id: ++fe
336
332
  }];
337
333
  return n.length > 4 ? n.slice(n.length - 4) : n;
338
334
  });
339
335
  }), []), e.length === 0) return null;
340
336
  let n = (e) => t((t) => t.filter((t) => t.id !== e));
341
- return /* @__PURE__ */ S("div", {
337
+ return /* @__PURE__ */ _("div", {
342
338
  style: {
343
339
  position: "fixed",
344
340
  right: 16,
@@ -348,17 +344,17 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
348
344
  flexDirection: "column",
349
345
  gap: 10,
350
346
  maxWidth: 380,
351
- fontFamily: ye,
347
+ fontFamily: de,
352
348
  pointerEvents: "none"
353
349
  },
354
- children: e.map((e) => /* @__PURE__ */ S(Se, {
350
+ children: e.map((e) => /* @__PURE__ */ _(me, {
355
351
  toast: e,
356
352
  onDismiss: () => n(e.id)
357
353
  }, e.id))
358
354
  });
359
- }, Se = ({ toast: e, onDismiss: t }) => {
355
+ }, me = ({ toast: e, onDismiss: t }) => {
360
356
  let [n, r] = u(!1), a = `voltro logs --trace ${e.traceId}`;
361
- return /* @__PURE__ */ C("div", {
357
+ return /* @__PURE__ */ v("div", {
362
358
  style: {
363
359
  pointerEvents: "auto",
364
360
  background: q.card,
@@ -372,14 +368,14 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
372
368
  lineHeight: 1.45
373
369
  },
374
370
  children: [
375
- /* @__PURE__ */ C("div", {
371
+ /* @__PURE__ */ v("div", {
376
372
  style: {
377
373
  display: "flex",
378
374
  alignItems: "center",
379
375
  justifyContent: "space-between",
380
376
  gap: 8
381
377
  },
382
- children: [/* @__PURE__ */ S("span", {
378
+ children: [/* @__PURE__ */ _("span", {
383
379
  style: {
384
380
  color: q.danger,
385
381
  fontWeight: 600,
@@ -387,7 +383,7 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
387
383
  letterSpacing: .3
388
384
  },
389
385
  children: "⚠ Backend error"
390
- }), /* @__PURE__ */ S("button", {
386
+ }), /* @__PURE__ */ _("button", {
391
387
  onClick: t,
392
388
  "aria-label": "Dismiss",
393
389
  style: {
@@ -402,14 +398,14 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
402
398
  children: "×"
403
399
  })]
404
400
  }),
405
- /* @__PURE__ */ C("div", {
401
+ /* @__PURE__ */ v("div", {
406
402
  style: {
407
403
  marginTop: 6,
408
404
  color: q.muted,
409
405
  fontSize: 11.5
410
406
  },
411
407
  children: [
412
- /* @__PURE__ */ S("span", {
408
+ /* @__PURE__ */ _("span", {
413
409
  style: {
414
410
  fontFamily: J,
415
411
  color: q.fg
@@ -417,13 +413,13 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
417
413
  children: e.api
418
414
  }),
419
415
  " · ",
420
- /* @__PURE__ */ S("span", {
416
+ /* @__PURE__ */ _("span", {
421
417
  style: { fontFamily: J },
422
418
  children: e.spanName
423
419
  })
424
420
  ]
425
421
  }),
426
- /* @__PURE__ */ S("div", {
422
+ /* @__PURE__ */ _("div", {
427
423
  style: {
428
424
  marginTop: 4,
429
425
  color: q.fg,
@@ -431,7 +427,7 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
431
427
  },
432
428
  children: e.message
433
429
  }),
434
- /* @__PURE__ */ S("button", {
430
+ /* @__PURE__ */ _("button", {
435
431
  onClick: () => {
436
432
  i(a).then((e) => {
437
433
  e !== "failed" && (r(!0), setTimeout(() => r(!1), 1500));
@@ -456,14 +452,14 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
456
452
  })
457
453
  ]
458
454
  });
459
- }, Ce = (e) => {
455
+ }, he = (e) => {
460
456
  try {
461
457
  let t = new URL(e);
462
458
  return `${t.protocol === "wss:" ? "https:" : "http:"}//${t.host}`;
463
459
  } catch {
464
460
  return "";
465
461
  }
466
- }, Y = (e, t) => /^wss?:\/\//i.test(e) || /^https?:\/\//i.test(e) ? Ce(e) : `/_voltro/api/${t}`, we = typeof performance < "u" ? performance.now() : Date.now(), X = () => {
462
+ }, Y = (e, t) => /^wss?:\/\//i.test(e) || /^https?:\/\//i.test(e) ? he(e) : `/_voltro/api/${t}`, ge = typeof performance < "u" ? performance.now() : Date.now(), X = () => {
467
463
  if (typeof window > "u") return !1;
468
464
  try {
469
465
  if (window.localStorage?.getItem("framework_debug") === "1") return !0;
@@ -477,10 +473,10 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
477
473
  }.DEV === !0;
478
474
  }, Z = (e, ...t) => {
479
475
  if (!X()) return;
480
- let n = ((typeof performance < "u" ? performance.now() : Date.now()) - we).toFixed(0).padStart(6, " ");
476
+ let n = ((typeof performance < "u" ? performance.now() : Date.now()) - ge).toFixed(0).padStart(6, " ");
481
477
  console.log(`[fw ${e} +${n}ms]`, ...t);
482
- }, Q = 3e3, Te = 0, Ee = (e, t, n, r) => p.succeed(h.WebSocketConstructor, (i, a) => {
483
- let o = ++Te;
478
+ }, Q = 3e3, _e = 0, ve = (e, t, n, r) => (i, a) => {
479
+ let o = ++_e;
484
480
  Z(e, `ws#${o} create gen=${t} url=${i}`);
485
481
  let s = new globalThis.WebSocket(i, a), c = !1, l = !1, u = (e) => {
486
482
  l || (l = !0, r(e));
@@ -498,23 +494,19 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
498
494
  } catch {}
499
495
  }
500
496
  }, Q), s;
501
- }), De = async (e, t, n, r) => {
502
- class i extends f.Tag(`@voltro/web/AppClient/${e.name}`)() {}
503
- let a = _.layerProtocolSocket().pipe(p.provide(v.layerJson), p.provide(h.layerWebSocket(e.wsUrl)), p.provide(Ee(e.name, t, n, r))), o = typeof e.headers == "function" ? await e.headers() : e.headers, s = p.scoped(i, _.make(e.group)).pipe(p.provide(a)), c = o ? p.locallyScoped(_.currentHeaders, g.fromInput(o)) : p.empty;
497
+ }, ye = async (e, t, n, r) => {
504
498
  Z(e.name, `build gen=${t}: making runtime`);
505
- let l = m.make(p.merge(s, c));
506
499
  try {
507
- let n = await l.runPromise(i);
508
- Z(e.name, `build gen=${t}: runtime resolved`);
509
- let r = new b();
510
- return {
511
- runtime: l,
512
- client: n,
513
- cache: new ee({ errorBus: r }),
514
- errorBus: r
515
- };
500
+ let i = await p({
501
+ name: e.name,
502
+ wsUrl: e.wsUrl,
503
+ group: e.group,
504
+ headers: e.headers,
505
+ webSocketConstructor: ve(e.name, t, n, r)
506
+ });
507
+ return Z(e.name, `build gen=${t}: runtime resolved`), i;
516
508
  } catch (n) {
517
- throw Z(e.name, `build gen=${t}: runtime FAILED, disposing`, n.message ?? n), l.dispose(), n;
509
+ throw Z(e.name, `build gen=${t}: runtime FAILED, disposing`, n.message ?? n), n;
518
510
  }
519
511
  }, $ = ({ apis: e, children: n, chrome: r }) => {
520
512
  let [i, a] = u(() => ({
@@ -522,13 +514,13 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
522
514
  clients: /* @__PURE__ */ new Map()
523
515
  })), s = l(null), d = o(() => {
524
516
  s.current?.reconnect();
525
- }, []), [f, p] = u(!1);
517
+ }, []), [p, b] = u(!1);
526
518
  c(() => {
527
- p(!0);
519
+ b(!0);
528
520
  }, []), c(() => {
529
- let t = pe({
521
+ let t = oe({
530
522
  apis: e,
531
- buildClient: De,
523
+ buildClient: ye,
532
524
  onChange: (e, t) => {
533
525
  a({
534
526
  clients: e,
@@ -542,7 +534,7 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
542
534
  }, [e]), c(() => {
543
535
  if (!X() || typeof window > "u") return;
544
536
  let t = [], n = [], r = e[0]?.name ?? "web";
545
- t.push(B({
537
+ t.push(z({
546
538
  baseUrl: window.location.origin,
547
539
  appName: r
548
540
  }));
@@ -553,14 +545,14 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
553
545
  originLabel: t.name
554
546
  }));
555
547
  }
556
- let i = re((e) => H(e.traceId));
548
+ let i = g((e) => H(e.traceId));
557
549
  return () => {
558
550
  for (let e of t) e.dispose();
559
551
  for (let e of n) e.dispose();
560
552
  i();
561
553
  };
562
554
  }, [e]);
563
- let m = new Map(e.map((e) => [e.name, i.clients.get(e.name)?.client ?? te])), h = new Map(e.map((e) => {
555
+ let x = new Map(e.map((e) => [e.name, i.clients.get(e.name)?.client ?? m])), S = new Map(e.map((e) => {
564
556
  let t = i.clients.get(e.name);
565
557
  return t ? [e.name, {
566
558
  runtime: t.runtime,
@@ -570,28 +562,28 @@ var w = e("reconnect", null), ie = () => s(w) ?? (() => {}), ae = 150, T = 220,
570
562
  inspectBaseUrl: Y(e.wsUrl, e.name),
571
563
  errorBus: t.errorBus
572
564
  }] : [e.name, {
573
- ...ne,
565
+ ...h,
574
566
  descriptors: e.descriptors
575
567
  }];
576
568
  }));
577
- return /* @__PURE__ */ S(w.Provider, {
569
+ return /* @__PURE__ */ _(y.Provider, {
578
570
  value: d,
579
- children: /* @__PURE__ */ S(y, {
580
- apis: h,
581
- children: /* @__PURE__ */ C(t.Provider, {
582
- value: m,
583
- children: [n, f ? /* @__PURE__ */ C(x, { children: [
584
- /* @__PURE__ */ S(E, {}),
571
+ children: /* @__PURE__ */ _(f, {
572
+ apis: S,
573
+ children: /* @__PURE__ */ v(t.Provider, {
574
+ value: x,
575
+ children: [n, p ? /* @__PURE__ */ v(ee, { children: [
576
+ /* @__PURE__ */ _(C, {}),
585
577
  r,
586
- X() ? /* @__PURE__ */ S(xe, {}) : null
578
+ X() ? /* @__PURE__ */ _(pe, {}) : null
587
579
  ] }) : null]
588
580
  })
589
581
  })
590
582
  });
591
- }, Oe = ({ App: e, apis: t, Devtools: n }) => /* @__PURE__ */ S($, {
583
+ }, be = ({ App: e, apis: t, Devtools: n }) => /* @__PURE__ */ _($, {
592
584
  apis: t,
593
- chrome: n ? /* @__PURE__ */ S(n, {}) : null,
594
- children: /* @__PURE__ */ S(e, {})
585
+ chrome: n ? /* @__PURE__ */ _(n, {}) : null,
586
+ children: /* @__PURE__ */ _(e, {})
595
587
  });
596
588
  //#endregion
597
- export { K as a, E as c, B as i, w as l, $ as n, H as o, z as r, W as s, Oe as t, ie as u };
589
+ export { K as a, C as c, z as i, y as l, $ as n, H as o, R as r, W as s, be as t, b as u };
@@ -1,5 +1,6 @@
1
1
  import { ComponentType } from 'react';
2
2
  import { ReactNode } from 'react';
3
+ import { ResolvableHeaders } from '@voltro/client';
3
4
  import { Rpc } from '@effect/rpc';
4
5
  import { RpcGroup } from '@effect/rpc';
5
6
 
@@ -27,14 +28,6 @@ export declare interface FrameworkBootProps {
27
28
  readonly Devtools?: ComponentType;
28
29
  }
29
30
 
30
- export declare interface MountedApi {
31
- readonly name: string;
32
- readonly group: RpcGroup.RpcGroup<Rpc.Any>;
33
- readonly descriptors: ClientDescriptorMap;
34
- readonly wsUrl: string;
35
- readonly headers?: ResolvableHeaders | undefined;
36
- }
37
-
38
31
  /**
39
32
  * Auth headers for an api's WS rpc client. @effect/rpc sends these in the
40
33
  * per-request MESSAGE frame (NOT the WS upgrade — a browser can't set upgrade
@@ -42,8 +35,17 @@ export declare interface MountedApi {
42
35
  * what lets a cross-origin api authenticate WS subscriptions. A thunk is
43
36
  * resolved fresh on every (re)connect, so a rotating token (e.g. a Supabase
44
37
  * access token) is pulled anew per connect instead of freezing at first mount.
38
+ *
39
+ * `ResolvableHeaders` is re-exported from `@voltro/client` (the lower layer that
40
+ * owns `buildApiRuntime`) so there is ONE definition, not a web-local copy.
45
41
  */
46
- export declare type ResolvableHeaders = Record<string, string> | (() => Record<string, string> | Promise<Record<string, string>>);
42
+ export declare interface MountedApi {
43
+ readonly name: string;
44
+ readonly group: RpcGroup.RpcGroup<Rpc.Any>;
45
+ readonly descriptors: ClientDescriptorMap;
46
+ readonly wsUrl: string;
47
+ readonly headers?: ResolvableHeaders | undefined;
48
+ }
47
49
 
48
50
  export declare const VoltroRuntimeProvider: ({ apis, children, chrome }: VoltroRuntimeProviderProps) => ReactNode;
49
51
 
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./frameworkBoot-DHdoAwd9.js";
1
+ import { n as e, t } from "./frameworkBoot-BkBY6M2s.js";
2
2
  export { t as FrameworkBoot, e as VoltroRuntimeProvider };