nuxt-convex-module 0.11.0 → 0.12.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/README.md CHANGED
@@ -1,31 +1,16 @@
1
- <div align="center">
1
+ <p align="center"><a href="https://nuxt-convex-module.dev"><img src="https://raw.githubusercontent.com/qruto/nuxt-convex-module/main/.github/assets/hero.svg" alt="Nuxt × Convex" width="560"></a></p>
2
2
 
3
- <picture>
4
- <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/qruto/nuxt-convex-module/main/.github/assets/hero-dark.svg">
5
- <img src="https://raw.githubusercontent.com/qruto/nuxt-convex-module/main/.github/assets/hero-light.svg" alt="Nuxt × Convex" width="560">
6
- </picture>
3
+ <p align="center"><a href="https://www.npmjs.com/package/nuxt-convex-module">View on npm</a> &nbsp;·&nbsp; <a href="https://github.com/qruto/nuxt-convex-module">Source on GitHub</a></p>
7
4
 
8
- <a href="https://www.npmjs.com/package/nuxt-convex-module"><img src="https://raw.githubusercontent.com/qruto/nuxt-convex-module/main/.github/assets/npm.svg" alt="npm" height="20" align="middle"></a> &nbsp;<a href="https://www.npmjs.com/package/nuxt-convex-module"><sub><b>View on npm</b></sub></a> &nbsp;&nbsp;&nbsp; <a href="https://github.com/qruto/nuxt-convex-module"><img src="https://raw.githubusercontent.com/qruto/nuxt-convex-module/main/.github/assets/github.svg" alt="GitHub" height="20" align="middle"></a> &nbsp;<a href="https://github.com/qruto/nuxt-convex-module"><sub><b>Source on GitHub</b></sub></a>
5
+ <h1 align="center">nuxt-convex-module</h1>
9
6
 
10
- # nuxt-convex-module
7
+ <p align="center"><a href="https://convex.dev">Convex</a> backend integration with live queries, mutations, actions, pagination, file storage and SSR, auto-imported and typed against your deployment.</p>
11
8
 
12
- Connects a [Nuxt](https://nuxt.com) app to a [Convex](https://convex.dev) backend: live queries, mutations, actions, pagination,
13
- file storage and SSR, auto-imported and typed against your deployment.
9
+ <p align="center"><sub>The same <a href="https://vuejs.org">Vue</a> client runs without Nuxt; Better Auth, Clerk, Auth0 and Polar are opt-in.</sub></p>
14
10
 
15
- <sub>The same [Vue](https://vuejs.org) client runs without Nuxt; Better Auth, Clerk, Auth0 and Polar are opt-in.</sub>
11
+ <p align="center"><a href="https://nuxt.com"><img src="https://img.shields.io/badge/Nuxt-020420?logo=nuxt&style=plastic" alt="Nuxt"></a> <a href="https://convex.dev"><img src="https://img.shields.io/badge/Convex-020420?logo=convex&style=plastic" alt="Convex"></a> &nbsp;<sup>•</sup>&nbsp; <a href="https://npmjs.com/package/nuxt-convex-module"><img src="https://img.shields.io/npm/v/nuxt-convex-module/latest.svg?style=plastic&colorA=020420&colorB=00DC82" alt="npm version"></a> <a href="https://npm.chart.dev/nuxt-convex-module"><img src="https://img.shields.io/npm/dm/nuxt-convex-module.svg?style=plastic&colorA=020420&colorB=00DC82" alt="npm downloads"></a> &nbsp;<sup>•</sup>&nbsp; <a href="https://github.com/qruto/nuxt-convex-module/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/qruto/nuxt-convex-module/ci.yml?branch=main&style=plastic&colorA=020420&label=tests" alt="Tests"></a> <a href="https://codecov.io/gh/qruto/nuxt-convex-module"><img src="https://img.shields.io/codecov/c/github/qruto/nuxt-convex-module?style=plastic&colorA=020420&label=coverage" alt="Coverage"></a> &nbsp;<sup>•</sup>&nbsp; <a href="https://npmjs.com/package/nuxt-convex-module"><img src="https://img.shields.io/npm/l/nuxt-convex-module.svg?style=plastic&colorA=020420&colorB=00DC82" alt="License"></a></p>
16
12
 
17
- [![Nuxt][nuxt-src]][nuxt-href]
18
- [![Convex][convex-src]][convex-href]
19
- <img src="https://raw.githubusercontent.com/qruto/nuxt-convex-module/main/.github/assets/separator.svg" alt="" height="20">
20
- [![npm version][npm-version-src]][npm-version-href]
21
- [![npm downloads][npm-downloads-src]][npm-downloads-href]
22
- <img src="https://raw.githubusercontent.com/qruto/nuxt-convex-module/main/.github/assets/separator.svg" alt="" height="20">
23
- [![Tests][tests-src]][tests-href]
24
- [![Coverage][coverage-src]][coverage-href]
25
- <img src="https://raw.githubusercontent.com/qruto/nuxt-convex-module/main/.github/assets/separator.svg" alt="" height="20">
26
- [![License][license-src]][license-href]
27
-
28
- **With an AI agent** — paste this into Claude Code, Cursor, Codex or any agent that runs commands:
13
+ <p align="center"><b>With an AI agent</b> — paste this into Claude Code, Cursor, Codex or any agent that runs commands:</p>
29
14
 
30
15
  ```text
31
16
  Install nuxt-convex-module, the Convex module for Nuxt, in this project:
@@ -33,15 +18,13 @@ run `npx skills add https://nuxt-convex-module.dev --skill nuxt-convex-module -y
33
18
  then follow .agents/skills/nuxt-convex-module/references/install.md.
34
19
  ```
35
20
 
36
- **By hand**
21
+ <p align="center"><b>By hand</b></p>
37
22
 
38
23
  ```bash
39
24
  npx nuxi@latest module add nuxt-convex-module
40
25
  ```
41
26
 
42
- [Documentation](https://nuxt-convex-module.dev) · [Installation](https://nuxt-convex-module.dev/getting-started/installation) · [AI agents](https://nuxt-convex-module.dev/getting-started/ai-agents) · [Components](https://nuxt-convex-module.dev/components) · [Upstream parity](./PARITY.md) · [Stability](./STABILITY.md) · [Security](#security)
43
-
44
- </div>
27
+ <p align="center"><a href="https://nuxt-convex-module.dev">Documentation</a> · <a href="https://nuxt-convex-module.dev/getting-started/installation">Installation</a> · <a href="https://nuxt-convex-module.dev/getting-started/ai-agents">AI agents</a> · <a href="https://nuxt-convex-module.dev/components">Components</a> · <a href="./PARITY.md">Upstream parity</a> · <a href="./STABILITY.md">Stability</a> · <a href="#security">Security</a></p>
45
28
 
46
29
  ## What you get
47
30
 
@@ -130,24 +113,3 @@ Found a vulnerability? Report it privately via [GitHub Security Advisories](http
130
113
  ## License
131
114
 
132
115
  [MIT](./LICENSE)
133
-
134
- <!-- Badges -->
135
- [npm-version-src]: https://img.shields.io/npm/v/nuxt-convex-module/latest.svg?style=plastic&colorA=020420&colorB=00DC82
136
- [npm-version-href]: https://npmjs.com/package/nuxt-convex-module
137
-
138
- [npm-downloads-src]: https://img.shields.io/npm/dm/nuxt-convex-module.svg?style=plastic&colorA=020420&colorB=00DC82
139
- [npm-downloads-href]: https://npm.chart.dev/nuxt-convex-module
140
-
141
- [license-src]: https://img.shields.io/npm/l/nuxt-convex-module.svg?style=plastic&colorA=020420&colorB=00DC82
142
- [license-href]: https://npmjs.com/package/nuxt-convex-module
143
-
144
- [tests-src]: https://img.shields.io/github/actions/workflow/status/qruto/nuxt-convex-module/ci.yml?branch=main&style=plastic&colorA=020420&label=tests
145
- [tests-href]: https://github.com/qruto/nuxt-convex-module/actions/workflows/ci.yml
146
-
147
- [coverage-src]: https://img.shields.io/codecov/c/github/qruto/nuxt-convex-module?style=plastic&colorA=020420&label=coverage
148
- [coverage-href]: https://codecov.io/gh/qruto/nuxt-convex-module
149
-
150
- [nuxt-src]: https://img.shields.io/badge/Nuxt-020420?logo=nuxt&style=plastic
151
- [nuxt-href]: https://nuxt.com
152
- [convex-src]: https://img.shields.io/badge/Convex-020420?logo=convex&style=plastic
153
- [convex-href]: https://convex.dev
@@ -1,10 +1,11 @@
1
1
  import { existsSync } from 'node:fs';
2
2
  import { stat, readFile } from 'node:fs/promises';
3
- import { join, extname } from 'node:path';
4
- import { defineEventHandler, setResponseHeader, serveStatic } from 'h3';
3
+ import { join, resolve, sep, extname } from 'node:path';
4
+ import { runWithNuxtContext, addDevServerHandler } from '@nuxt/kit';
5
5
 
6
6
  const RPC_NAMESPACE = "nuxt-convex-module";
7
7
  const DEVTOOLS_UI_ROUTE = "/__nuxt-convex-module";
8
+ const DEVTOOLS_DOCK_PARAM = "dock";
8
9
  const DEVTOOLS_UI_LOCAL_PORT = 3630;
9
10
 
10
11
  const EXTENSIONS = ["ts", "tsx", "js", "jsx", "mts", "mjs"];
@@ -32,24 +33,35 @@ const CONTENT_TYPES = {
32
33
  ".svg": "image/svg+xml",
33
34
  ".json": "application/json"
34
35
  };
36
+ async function servePanel(request, root) {
37
+ if (request.method !== "GET" && request.method !== "HEAD") {
38
+ return new Response(null, { status: 405, headers: { allow: "GET, HEAD" } });
39
+ }
40
+ let path;
41
+ try {
42
+ path = decodeURIComponent(new URL(request.url).pathname);
43
+ } catch {
44
+ return new Response(null, { status: 400 });
45
+ }
46
+ if (path.startsWith(DEVTOOLS_UI_ROUTE)) path = path.slice(DEVTOOLS_UI_ROUTE.length);
47
+ const file = resolve(root, `.${path === "" || path === "/" ? "/index.html" : path}`);
48
+ const stats = file.startsWith(root + sep) ? await stat(file).catch(() => void 0) : void 0;
49
+ if (!stats?.isFile()) return new Response(null, { status: 404 });
50
+ return new Response(request.method === "HEAD" ? null : await readFile(file), {
51
+ headers: {
52
+ "content-type": CONTENT_TYPES[extname(file)] ?? "application/octet-stream",
53
+ "content-length": String(stats.size),
54
+ "cache-control": "no-store"
55
+ }
56
+ });
57
+ }
35
58
  function setupDevtools(resolver, nuxt, info) {
36
59
  const devtoolsClientPath = resolver.resolve("./devtools-client");
37
60
  if (existsSync(devtoolsClientPath)) {
38
- nuxt.options.devServerHandlers.push({
39
- route: DEVTOOLS_UI_ROUTE,
40
- handler: defineEventHandler((event) => {
41
- setResponseHeader(event, "cache-control", "no-store");
42
- return serveStatic(event, {
43
- getContents: (id) => readFile(join(devtoolsClientPath, id)),
44
- getMeta: async (id) => {
45
- const stats = await stat(join(devtoolsClientPath, id)).catch(() => void 0);
46
- if (stats?.isFile()) {
47
- return { type: CONTENT_TYPES[extname(id)], size: stats.size, mtime: stats.mtimeMs };
48
- }
49
- }
50
- });
51
- })
52
- });
61
+ runWithNuxtContext(nuxt, () => addDevServerHandler({
62
+ route: `${DEVTOOLS_UI_ROUTE}/**`,
63
+ handler: { nuxt: (event) => servePanel(event.req, devtoolsClientPath) }
64
+ }));
53
65
  } else {
54
66
  nuxt.hook("vite:extendConfig", (config) => {
55
67
  const mutable = config;
@@ -63,16 +75,21 @@ function setupDevtools(resolver, nuxt, info) {
63
75
  };
64
76
  });
65
77
  }
66
- nuxt.hook("devtools:initialized", () => {
78
+ const functions = {
79
+ getInfo: () => info,
80
+ resolveFunctionSource: (udfPath) => resolveFunctionSource(info.rootDir, info.functionsDir, udfPath)
81
+ };
82
+ let viteDevtools = false;
83
+ nuxt.hook("devtools:initialized", ({ version }) => {
84
+ viteDevtools = Number.parseInt(version) >= 4;
85
+ if (viteDevtools) return;
67
86
  const devtools = nuxt.devtools;
68
- devtools?.extendServerRpc(RPC_NAMESPACE, {
69
- getInfo: () => info,
70
- resolveFunctionSource: (udfPath) => resolveFunctionSource(info.rootDir, info.functionsDir, udfPath)
71
- });
87
+ devtools?.extendServerRpc(RPC_NAMESPACE, functions);
72
88
  });
73
89
  nuxt.hook("devtools:customTabs", (tabs) => {
90
+ if (viteDevtools) return;
74
91
  tabs.push({
75
- name: "nuxt-convex-module",
92
+ name: RPC_NAMESPACE,
76
93
  title: "Convex",
77
94
  icon: `${DEVTOOLS_UI_ROUTE}/icon.svg`,
78
95
  view: {
@@ -81,6 +98,21 @@ function setupDevtools(resolver, nuxt, info) {
81
98
  }
82
99
  });
83
100
  });
101
+ nuxt.hook("devtools:ready", (ctx) => {
102
+ ctx.docks.register({
103
+ id: RPC_NAMESPACE,
104
+ title: "Convex",
105
+ icon: `${DEVTOOLS_UI_ROUTE}/icon.svg`,
106
+ type: "iframe",
107
+ url: `${DEVTOOLS_UI_ROUTE}/?${DEVTOOLS_DOCK_PARAM}`,
108
+ // `NUXT_DEVTOOLS_GROUP_ID`: the kit is a type-only dependency.
109
+ groupId: "nuxt",
110
+ category: "modules"
111
+ });
112
+ const { rpc } = ctx.scope(RPC_NAMESPACE);
113
+ rpc.register({ name: "getInfo", type: "query", handler: functions.getInfo });
114
+ rpc.register({ name: "resolveFunctionSource", type: "query", handler: functions.resolveFunctionSource });
115
+ });
84
116
  }
85
117
 
86
- export { setupDevtools };
118
+ export { servePanel, setupDevtools };
@@ -0,0 +1 @@
1
+ import{t as e}from"./BPtiIkWa.js";var t=Symbol.for(`devframe:browser-agent-registry`),{tools:n,listeners:r}=globalThis[t]??={tools:new Map,listeners:new Set};function i(){return[...n.values()]}function a(e){return r.add(e),()=>r.delete(e)}var o=`devframe:client-id`,s;function c(t=globalThis.window){try{let n=t?.sessionStorage;if(n){let t=n.getItem(o);return t||(t=e(),n.setItem(o,t)),t}}catch{}return s??=e(),s}function l(e){e.client.register({name:`devframe:agent:invoke-client-tool`,type:`action`,jsonSerializable:!0,handler:async(e,t)=>{let n=i().find(t=>t.id===e);if(!n)throw Error(`[devframe/agent] browser tool "${e}" not found`);return await n.invoke(t)}});let t=!1,n=!1,r=0,o=()=>{t||n||(t=!0,queueMicrotask(async()=>{if(t=!1,n)return;let a=i().map(({invoke:e,...t})=>t);(a.length!==0||r!==0)&&(r=a.length,await e.callOptional(`devframe:agent:sync-client-tools`,c(),a).catch(()=>{}))}))},s=a(o),l=e.events.on(`connection:status`,e=>{e===`connected`&&o()});return o(),()=>{n=!0,s(),l()}}export{l as setupBrowserAgentRpcBridge};
@@ -0,0 +1,3 @@
1
+ import{n as e,t}from"#entry";function n(e){return t=>{let n=`${e.bold(e.red(`[${t.name}]`))} ${t.message}`,r=[];return t.fix&&r.push(`${e.dim(`fix:`)} ${t.fix}`),t.sources?.length&&r.push(`${e.dim(`sources:`)} ${t.sources.join(`, `)}`),t.docs&&r.push(`${e.dim(`see:`)} ${e.cyan(t.docs)}`),r.length===0?n:[n,...r.map((t,n)=>`${e.dim(n<r.length-1?`├▶`:`╰▶`)} ${t}`)].join(`
2
+ `)}}var r=/^[\w+.-]{2,}:\/\//;function i(e){return e.endsWith(`/`)?e:`${e}/`}function a(e){return(e.endsWith(`/`)?e.slice(0,-1):e)||`/`}function o(e,...t){let n=e;for(let e of t)e&&e!==`/`&&(n=n?i(n)+e.replace(/^\.?\//,``):e);return n}function s(e,t){if(!t||t===`/`||r.test(e))return e;let n=a(t);return e.startsWith(n)?e:o(n,e)}function c(e,t){let n=e.match(r);return t+(n?e.slice(n[0].length):e)}function l(e,t){let n=`\x1B[${e}m`,r=`\x1B[${t}m`;return((e,...t)=>{if(Array.isArray(e)&&`raw`in e){let i=e,a=``;for(let e=0;e<i.length;e++)a+=i[e],e<t.length&&(a+=String(t[e]));return`${n}${a}${r}`}return`${n}${String(e)}${r}`})}var u={blue:l(34,39),cyan:l(36,39),gray:l(90,39),green:l(32,39),red:l(31,39),yellow:l(33,39),bold:l(1,22),dim:l(2,22),reset:l(0,0),underline:l(4,24)},d={bus:{agentManifestChanged:`agent:manifest:changed`,agentToolRegistered:`agent:tool:registered`,agentToolUnregistered:`agent:tool:unregistered`,agentResourceRegistered:`agent:resource:registered`,agentResourceUnregistered:`agent:resource:unregistered`},client:{isTrustedUpdated:`rpc:is-trusted:updated`,error:`rpc:error`,connectionStatus:`connection:status`,connectionError:`connection:error`},broadcast:{authRevoked:`devframe:auth:revoked`,cacheInvalidate:`devframe:rpc:cache:invalidate`,clientStateUpdated:`devframe:rpc:client-state:updated`,clientStatePatch:`devframe:rpc:client-state:patch`,streamingChunk:`devframe:streaming:chunk`,streamingEnd:`devframe:streaming:end`,streamingUploadCancel:`devframe:streaming:upload-cancel`},inPageChannel:{panelStateUpdated:`devframe:in-page:panel-state:updated`,panelStatePatch:`devframe:in-page:panel-state:patch`},postMessage:{remoteAssetsError:`devframe:remote-assets-error`,inPageChannel:`devframe:in-page-channel`}},f=n(u);function p(e,{method:t=`warn`}={}){console[t](f(e))}function m(t){return e({...t,reporters:[p,...t.reporters??[]]})}function h(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}var g=Math.random.bind(Math),_=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function v(e=21){let t=``,n=e;for(;n--;)t+=_[g()*64|0];return t}var y=6e4,b=e=>e,x=b,{clearTimeout:S,setTimeout:ee}=globalThis;function C(e,t){let{post:n,on:r,off:i=()=>{},eventNames:a=[],serialize:o=b,deserialize:s=x,resolver:c,bind:l=`rpc`,timeout:u=y,proxify:d=!0}=t,f=!1,p=new Map,m,g;async function _(e,r,i,a){if(f)throw Error(`[birpc] rpc is closed, cannot call "${e}"`);let s={m:e,a:r,t:`q`};a&&(s.o=!0);let c=async e=>n(o(e));if(i){await c(s);return}if(m)try{await m}finally{m=void 0}let{promise:l,resolve:d,reject:_}=h(),y=v();s.i=y;let b;async function x(n=s){return u>=0&&(b=ee(()=>{try{if(t.onTimeoutError?.call(g,e,r)!==!0)throw Error(`[birpc] timeout on calling "${e}"`)}catch(e){_(e)}p.delete(y)},u),typeof b==`object`&&(b=b.unref?.())),p.set(y,{resolve:d,reject:_,timeoutId:b,method:e}),await c(n),l}try{t.onRequest?await t.onRequest.call(g,s,x,d):await x()}catch(e){if(t.onGeneralError?.call(g,e)!==!0)throw e;return}finally{S(b),p.delete(y)}return l}let C={$call:(e,...t)=>_(e,t,!1),$callOptional:(e,...t)=>_(e,t,!1,!0),$callEvent:(e,...t)=>_(e,t,!0),$callRaw:e=>_(e.method,e.args,e.event,e.optional),$rejectPendingCalls:w,get $closed(){return f},get $meta(){return t.meta},$close:te,$functions:e};g=d?new Proxy({},{get(t,n){if(Object.hasOwn(C,n))return C[n];if(n===`then`&&!a.includes(`then`)&&!(`then`in e))return;let r=(...e)=>_(n,e,!0);if(a.includes(n))return r.asEvent=r,r;let i=(...e)=>_(n,e,!1);return i.asEvent=r,i}}):C;function te(e){f=!0,p.forEach(({reject:t,method:n})=>{let r=Error(`[birpc] rpc is closed, cannot call "${n}"`);if(e)return e.cause??=r,t(e);t(r)}),p.clear(),i(T)}function w(e){let t=Array.from(p.values()).map(({method:t,reject:n})=>e?e({method:t,reject:n}):n(Error(`[birpc]: rejected pending call "${t}".`)));return p.clear(),t}async function T(r,...i){let a;try{a=s(r)}catch(e){if(t.onGeneralError?.call(g,e)!==!0)throw e;return}if(a.t===`q`){let{m:r,a:s,o:u}=a,d,f,p=await(c?c.call(g,r,e[r]):e[r]);if(u&&(p||=()=>void 0),!p)f=Error(`[birpc] function "${r}" not found`);else try{d=await p.apply(l===`rpc`?g:e,s)}catch(e){f=e}if(a.i){if(f&&t.onFunctionError&&t.onFunctionError.call(g,f,r,s)===!0)return;if(!f)try{await n(o({t:`s`,i:a.i,r:d}),...i);return}catch(e){if(f=e,t.onGeneralError?.call(g,e,r,s)!==!0)throw e}try{await n(o({t:`s`,i:a.i,e:f}),...i)}catch(e){if(t.onGeneralError?.call(g,e,r,s)!==!0)throw e}}}else{let{i:e,r:t,e:n}=a,r=p.get(e);r&&(S(r.timeoutId),n?r.reject(n):r.resolve(t)),p.delete(e)}}return m=r(T),g}function te(e,t){return t.safety?t.safety:e===`static`||e===`query`||e==null?`read`:`action`}var w=Object.freeze({type:`object`,additionalProperties:!0});function T(e){let t=e[`~standard`];if(t.jsonSchema)try{return t.jsonSchema.input({target:`draft-2020-12`})}catch{return w}return w}function ne(e){if(!e||e.length===0)return{type:`object`,properties:{}};let t={},n=[];for(let r=0;r<e.length;r++){let i=`arg${r}`;t[i]=T(e[r]),n.push(i)}return{type:`object`,properties:t,required:n,additionalProperties:!1}}function E(e,t){if(Array.isArray(e))return e;if(e==null)return[];if(typeof e!=`object`)return;let n=e;if(t!=null)return Array.from({length:t},(e,t)=>n[`arg${t}`]);if(`arg0`in n){let e=[];for(;`arg${e.length}`in n;)e.push(n[`arg${e.length}`]);return e}return Object.keys(n).length===0?[]:void 0}function re(e,t){return E(e,t)??[e]}function ie(e){return typeof e==`string`?`'${e}'`:new se().serialize(e)}var ae=` _-,;:!?.'"()[]{}@*/\\&#%\`^+<=>|~$0123456789abcdefghijklmnopqrstuvwxyz`,oe=(function(){let e=new Uint8Array(128);for(let t=0;t<69;t++)e[ae.charCodeAt(t)]=t+1;for(let t=65;t<=90;t++)e[t]=e[t+32];return e})();function D(e,t){if(e===t)return 0;let n=Math.min(e.length,t.length),r=0;for(let i=0;i<n;i++){let n=e.charCodeAt(i),a=t.charCodeAt(i);if(n===a)continue;let o=n<128&&oe[n]?oe[n]:n+128,s=a<128&&oe[a]?oe[a]:a+128;if(o!==s)return o<s?-1:1;r===0&&(r=n>a?-1:1)}return e.length===t.length?r:e.length<t.length?-1:1}var se=(function(){class e{#e=new Map;compare(e,t){let n=typeof e,r=typeof t;return n===`string`&&r===`string`?D(e,t):n===`number`&&r===`number`?e-t:D(this.serialize(e,!0),this.serialize(t,!0))}serialize(e,t){if(e===null)return`null`;switch(typeof e){case`string`:return t?e:`'${e}'`;case`bigint`:return`${e}n`;case`object`:return this.$object(e);case`function`:return this.$function(e)}return String(e)}serializeObject(e){let t=Object.prototype.toString.call(e);if(t!==`[object Object]`)return this.serializeBuiltInType(t.length<10?`unknown:${t}`:t.slice(8,-1),e);let n=e.constructor,r=n===Object||n===void 0?``:n.name;if(r!==``&&globalThis[r]===n)return this.serializeBuiltInType(r,e);if(`toJSON`in e&&typeof e.toJSON==`function`){let t=e.toJSON();return r+(typeof t==`object`&&t?this.$object(t):`(${this.serialize(t)})`)}let i=Object.keys(e).sort(D),a=`${r}{`;for(let t=0;t<i.length;t++){let n=i[t];a+=`${n}:${this.serialize(e[n])}`,t<i.length-1&&(a+=`,`)}return a+`}`}serializeBuiltInType(e,t){let n=this[`$`+e];if(n)return n.call(this,t);if(typeof t.entries==`function`)return this.serializeObjectEntries(e,t.entries());throw Error(`Cannot serialize ${e}`)}serializeObjectEntries(e,t){let n=Array.from(t).sort((e,t)=>this.compare(e[0],t[0])),r=`${e}{`;for(let e=0;e<n.length;e++){let[t,i]=n[e];r+=`${this.serialize(t,!0)}:${this.serialize(i)}`,e<n.length-1&&(r+=`,`)}return r+`}`}$object(e){let t=this.#e.get(e);return t===void 0&&(this.#e.set(e,`#${this.#e.size}`),t=this.serializeObject(e),this.#e.set(e,t)),t}$function(e){let t=Function.prototype.toString.call(e);return t.slice(-15)===`[native code] }`?`${e.name||``}()[native]`:`${e.name}(${e.length})${t.replace(/\s*\n\s*/g,``)}`}$Array(e){let t=`[`;for(let n=0;n<e.length;n++)t+=this.serialize(e[n]),n<e.length-1&&(t+=`,`);return t+`]`}$Date(e){try{return`Date(${e.toISOString()})`}catch{return`Date(null)`}}$ArrayBuffer(e){return`ArrayBuffer[${new Uint8Array(e).join(`,`)}]`}$Set(e){return`Set${this.$Array(Array.from(e).sort((e,t)=>this.compare(e,t)))}`}$Map(e){return this.serializeObjectEntries(`Map`,e.entries())}}for(let t of[`Error`,`RegExp`,`URL`])e.prototype[`$`+t]=function(e){return`${t}(${e})`};for(let t of[`Int8Array`,`Uint8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float32Array`,`Float64Array`])e.prototype[`$`+t]=function(e){return`${t}[${e.join(`,`)}]`};for(let t of[`BigInt64Array`,`BigUint64Array`])e.prototype[`$`+t]=function(e){return`${t}[${e.join(`n,`)}${e.length>0?`n`:``}]`};return e})(),ce=[1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225],le=[1116352408,1899447441,-1245643825,-373957723,961987163,1508970993,-1841331548,-1424204075,-670586216,310598401,607225278,1426881987,1925078388,-2132889090,-1680079193,-1046744716,-459576895,-272742522,264347078,604807628,770255983,1249150122,1555081692,1996064986,-1740746414,-1473132947,-1341970488,-1084653625,-958395405,-710438585,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,-2117940946,-1838011259,-1564481375,-1474664885,-1035236496,-949202525,-778901479,-694614492,-200395387,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,-2067236844,-1933114872,-1866530822,-1538233109,-1090935817,-965641998],ue=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_`,O=[],de=class{_data=new fe;_hash=new fe([...ce]);_nDataBytes=0;_minBufferSize=0;finalize(e){e&&this._append(e);let t=this._nDataBytes*8,n=this._data.sigBytes*8;return this._data.words[n>>>5]|=128<<24-n%32,this._data.words[(n+64>>>9<<4)+14]=Math.floor(t/4294967296),this._data.words[(n+64>>>9<<4)+15]=t,this._data.sigBytes=this._data.words.length*4,this._process(),this._hash}_doProcessBlock(e,t){let n=this._hash.words,r=n[0],i=n[1],a=n[2],o=n[3],s=n[4],c=n[5],l=n[6],u=n[7];for(let n=0;n<64;n++){if(n<16)O[n]=e[t+n]|0;else{let e=O[n-15],t=(e<<25|e>>>7)^(e<<14|e>>>18)^e>>>3,r=O[n-2],i=(r<<15|r>>>17)^(r<<13|r>>>19)^r>>>10;O[n]=t+O[n-7]+i+O[n-16]}let d=s&c^~s&l,f=r&i^r&a^i&a,p=(r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22),m=(s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25),h=u+m+d+le[n]+O[n],g=p+f;u=l,l=c,c=s,s=o+h|0,o=a,a=i,i=r,r=h+g|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+a|0,n[3]=n[3]+o|0,n[4]=n[4]+s|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+u|0}_append(e){typeof e==`string`&&(e=fe.fromUtf8(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes}_process(e){let t,n=this._data.sigBytes/64;n=e?Math.ceil(n):Math.max((n|0)-this._minBufferSize,0);let r=n*16,i=Math.min(r*4,this._data.sigBytes);if(r){for(let e=0;e<r;e+=16)this._doProcessBlock(this._data.words,e);t=this._data.words.splice(0,r),this._data.sigBytes-=i}return new fe(t,i)}},fe=class e{words;sigBytes;constructor(e,t){e=this.words=e||[],this.sigBytes=t===void 0?e.length*4:t}static fromUtf8(t){let n=unescape(encodeURIComponent(t)),r=n.length,i=[];for(let e=0;e<r;e++)i[e>>>2]|=(n.charCodeAt(e)&255)<<24-e%4*8;return new e(i,r)}toBase64(){let e=[];for(let t=0;t<this.sigBytes;t+=3){let n=this.words[t>>>2]>>>24-t%4*8&255,r=this.words[t+1>>>2]>>>24-(t+1)%4*8&255,i=this.words[t+2>>>2]>>>24-(t+2)%4*8&255,a=n<<16|r<<8|i;for(let n=0;n<4&&t*8+n*6<this.sigBytes*8;n++)e.push(ue.charAt(a>>>6*(3-n)&63))}return e.join(``)}concat(e){if(this.words[this.sigBytes>>>2]&=4294967295<<32-this.sigBytes%4*8,this.words.length=Math.ceil(this.sigBytes/4),this.sigBytes%4)for(let t=0;t<e.sigBytes;t++){let n=e.words[t>>>2]>>>24-t%4*8&255;this.words[this.sigBytes+t>>>2]|=n<<24-(this.sigBytes+t)%4*8}else for(let t=0;t<e.sigBytes;t+=4)this.words[this.sigBytes+t>>>2]=e.words[t>>>2];this.sigBytes+=e.sigBytes}};function pe(e){return new de().finalize(e).toBase64()}function me(e){return pe(ie(e))}function he(e){return me(e)}function ge(){let e={};function t(t,...n){let r=e[t]||[];for(let e=0,t=r.length;e<t;e++){let t=r[e];t&&t(...n)}}function n(n,...r){t(n,...r),delete e[n]}function r(t,n){return(e[t]||=[]).push(n),()=>{e[t]=e[t]?.filter(e=>n!==e)}}function i(e,t){let n=r(e,((...e)=>(n(),t(...e))));return n}return{_listeners:e,emit:t,emitOnce:n,on:r,once:i}}var _e=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function ve(e=21){let t=``,n=e;for(;n--;)t+=_e[Math.random()*64|0];return t}var ye=Symbol.for(`immer-nothing`),be=Symbol.for(`immer-draftable`),k=Symbol.for(`immer-state`),xe=[function(e){return`The plugin for '${e}' has not been loaded into Immer. To enable the plugin, import and call \`enable${e}()\` when initializing your application.`},function(e){return`produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${e}'`},`This object has been frozen and should not be mutated`,function(e){return`Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? `+e},`An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.`,`Immer forbids circular references`,"The first or second argument to `produce` must be a function","The third argument to `produce` must be a function or undefined","First argument to `createDraft` must be a plain object, an array, or an immerable object","First argument to `finishDraft` must be a draft returned by `createDraft`",function(e){return`'current' expects a draft, got: ${e}`},`Object.defineProperty() cannot be used on an Immer draft`,`Object.setPrototypeOf() cannot be used on an Immer draft`,`Immer only supports deleting array indices`,`Immer only supports setting array indices and the 'length' property`,function(e){return`'original' expects a draft, got: ${e}`}];function A(e,...t){{let n=xe[e],r=W(n)?n.apply(null,t):n;throw Error(`[Immer] ${r}`)}}var j=Object,M=j.getPrototypeOf,Se=`constructor`,N=`prototype`,Ce=`configurable`,we=`enumerable`,Te=`writable`,P=`value`,F=e=>!!e&&!!e[k];function I(e){return e?Oe(e)||V(e)||!!e[be]||!!e[Se]?.[be]||H(e)||je(e):!1}var Ee=j[N][Se].toString(),De=new WeakMap;function Oe(e){if(!e||!U(e))return!1;let t=M(e);if(t===null||t===j[N])return!0;let n=j.hasOwnProperty.call(t,Se)&&t[Se];if(n===Object)return!0;if(!W(n))return!1;let r=De.get(n);return r===void 0&&(r=Function.toString.call(n),De.set(n,r)),r===Ee}function L(e,t,n=!0){R(e)===0?(n?Reflect.ownKeys(e):j.keys(e)).forEach(n=>{t(n,e[n],e)}):e.forEach((n,r)=>t(r,n,e))}function R(e){let t=e[k];return t?t.type_:V(e)?1:H(e)?2:je(e)?3:0}var z=(e,t,n=R(e))=>n===2?e.has(t):j[N].hasOwnProperty.call(e,t),B=(e,t,n=R(e))=>n===2?e.get(t):e[t],ke=(e,t,n,r=R(e))=>{r===2?e.set(t,n):r===3?e.add(n):e[t]=n};function Ae(e,t){return e===t?e!==0||1/e==1/t:e!==e&&t!==t}var V=Array.isArray,H=e=>e instanceof Map,je=e=>e instanceof Set,U=e=>typeof e==`object`,W=e=>typeof e==`function`,Me=e=>typeof e==`boolean`;function Ne(e){let t=+e;return Number.isInteger(t)&&String(t)===e}var Pe=e=>U(e)?e?.[k]:null,G=e=>e.copy_||e.base_,Fe=e=>e.modified_?e.copy_:e.base_;function Ie(e,t){if(H(e))return new Map(e);if(je(e))return new Set(e);if(V(e))return Array[N].slice.call(e);let n=Oe(e);if(t===!0||t===`class_only`&&!n){let t=j.getOwnPropertyDescriptors(e);delete t[k];let n=Reflect.ownKeys(t);for(let r=0;r<n.length;r++){let i=n[r],a=t[i];a[Te]===!1&&(a[Te]=!0,a[Ce]=!0),(a.get||a.set)&&(t[i]={[Ce]:!0,[Te]:!0,[we]:a[we],[P]:e[i]})}return j.create(M(e),t)}{let t=M(e);if(t!==null&&n)return{...e};let r=j.create(t);return j.assign(r,e)}}function Le(e,t=!1){return Be(e)||F(e)||!I(e)||(R(e)>1&&j.defineProperties(e,{set:ze,add:ze,clear:ze,delete:ze}),j.freeze(e),t&&L(e,(e,t)=>{Le(t,!0)},!1)),e}function Re(){A(2)}var ze={[P]:Re};function Be(e){return e===null||!U(e)||j.isFrozen(e)}var Ve=`MapSet`,He=`Patches`,Ue=`ArrayMethods`,We={};function K(e){let t=We[e];return t||A(0,e),t}var Ge=e=>!!We[e];function Ke(e,t){We[e]||(We[e]=t)}var qe,Je=()=>qe,Ye=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:Ge(Ve)?K(Ve):void 0,arrayMethodsPlugin_:Ge(Ue)?K(Ue):void 0});function Xe(e,t){t&&(e.patchPlugin_=K(He),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Ze(e){Qe(e),e.drafts_.forEach(et),e.drafts_=null}function Qe(e){e===qe&&(qe=e.parent_)}var $e=e=>qe=Ye(qe,e);function et(e){let t=e[k];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function tt(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];if(e!==void 0&&e!==n){n[k].modified_&&(Ze(t),A(4)),I(e)&&(e=nt(t,e));let{patchPlugin_:r}=t;r&&r.generateReplacementPatches_(n[k].base_,e,t)}else e=nt(t,n);return rt(t,e,!0),Ze(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e===ye?void 0:e}function nt(e,t){if(Be(t))return t;let n=t[k];if(!n)return dt(t,e.handledSet_,e);if(!at(n,e))return t;if(!n.modified_)return n.base_;if(!n.finalized_){let{callbacks_:t}=n;if(t)for(;t.length>0;)t.pop()(e);lt(n,e)}return n.copy_}function rt(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&Le(t,n)}function it(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var at=(e,t)=>e.scope_===t,ot=[];function st(e,t,n,r){let i=G(e),a=e.type_;if(r!==void 0&&B(i,r,a)===t){ke(i,r,n,a);return}if(!e.draftLocations_){let t=e.draftLocations_=new Map;L(i,(e,n)=>{if(F(n)){let r=t.get(n)||[];r.push(e),t.set(n,r)}})}let o=e.draftLocations_.get(t)??ot;for(let e of o)ke(i,e,n,a)}function ct(e,t,n){e.callbacks_.push(function(r){let i=t;if(!i||!at(i,r))return;r.mapSetPlugin_?.fixSetContents(i);let a=Fe(i);st(e,i.draft_??i,a,n),lt(i,r)})}function lt(e,t){if(e.modified_&&!e.finalized_&&(e.type_===3||e.type_===1&&e.allIndicesReassigned_||(e.assigned_?.size??0)>0)){let{patchPlugin_:n}=t;if(n){let r=n.getPath(e);r&&n.generatePatches_(e,r,t)}it(e)}}function ut(e,t,n){let{scope_:r}=e;if(F(n)){let i=n[k];at(i,r)&&i.callbacks_.push(function(){bt(e),st(e,n,Fe(i),t)})}else I(n)&&e.callbacks_.push(function(){let i=G(e);e.type_===3?i.has(n)&&dt(n,r.handledSet_,r):B(i,t,e.type_)===n&&r.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&dt(B(e.copy_,t,e.type_),r.handledSet_,r)})}function dt(e,t,n){return!n.immer_.autoFreeze_&&n.unfinalizedDrafts_<1||F(e)||t.has(e)||!I(e)||Be(e)||(t.add(e),L(e,(r,i)=>{if(F(i)){let t=i[k];at(t,n)&&(ke(e,r,Fe(t),e.type_),it(t))}else I(i)&&dt(i,t,n)})),e}function ft(e,t){let n=V(e),r={type_:+!!n,scope_:t?t.scope_:Je(),modified_:!1,finalized_:!1,assigned_:void 0,parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1,callbacks_:void 0},i=r,a=pt;n&&(i=[r],a=mt);let{revoke:o,proxy:s}=Proxy.revocable(i,a);return r.draft_=s,r.revoke_=o,[s,r]}var pt={get(e,t){if(t===k)return e;let n=e.scope_.arrayMethodsPlugin_,r=e.type_===1&&typeof t==`string`;if(r&&n?.isArrayOperationMethod(t))return n.createMethodInterceptor(e,t);let i=G(e);if(!z(i,t,e.type_))return _t(e,i,t);let a=i[t];if(e.finalized_||!I(a)||r&&e.operationMethod&&n?.isMutatingArrayMethod(e.operationMethod)&&Ne(t))return a;if(a===ht(e.base_,t)||gt(e,t,a)){bt(e);let n=e.type_===1?+t:t,r=St(e.scope_,a,e,n);return e.copy_[n]=r}return a},has(e,t){return t in G(e)},ownKeys(e){return Reflect.ownKeys(G(e))},set(e,t,n){let r=vt(G(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let r=ht(G(e),t),i=r?.[k];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_.delete(t),!0;if(Ae(n,r)&&(n!==void 0||z(e.base_,t,e.type_)))return!0;bt(e),yt(e)}return e.copy_[t]===n&&(n!==void 0||z(e.copy_,t,e.type_))||Number.isNaN(n)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=n,e.assigned_.set(t,!0),ut(e,t,n)),!0},deleteProperty(e,t){return bt(e),ht(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),yt(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=G(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{[Te]:!0,[Ce]:e.type_!==1||t!==`length`,[we]:r[we],[P]:n[t]}},defineProperty(){A(11)},getPrototypeOf(e){return M(e.base_)},setPrototypeOf(){A(12)}},mt={};for(let e in pt){let t=pt[e];mt[e]=function(){let e=arguments;return e[0]=e[0][0],t.apply(this,e)}}mt.deleteProperty=function(e,t){return isNaN(parseInt(t))&&A(13),mt.set.call(this,e,t,void 0)},mt.set=function(e,t,n){return t!==`length`&&isNaN(parseInt(t))&&A(14),pt.set.call(this,e[0],t,n,e[0])};function ht(e,t){let n=e[k];return(n?G(n):e)[t]}function gt(e,t,n){return e.type_!==1||!e.allIndicesReassigned_||e.assigned_?.get(t)||!I(n)||n[k]?!1:e.baseRefs_.has(n)}function _t(e,t,n){let r=vt(t,n);return r?P in r?r[P]:r.get?.call(e.draft_):void 0}function vt(e,t){if(!(t in e))return;let n=M(e);for(;n;){let e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=M(n)}}function yt(e){e.modified_||(e.modified_=!0,e.parent_&&yt(e.parent_))}function bt(e){e.copy_||=(e.assigned_=new Map,Ie(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var xt=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(e,t,n)=>{if(W(e)&&!W(t)){let n=t;t=e;let r=this;return function(e=n,...i){return r.produce(e,e=>t.call(this,e,...i))}}W(t)||A(6),n!==void 0&&!W(n)&&A(7);let r;if(I(e)){let i=$e(this),a=St(i,e,void 0),o=!0;try{r=t(a),o=!1}finally{o?Ze(i):Qe(i)}return Xe(i,n),tt(r,i)}if(!e||!U(e)){if(r=t(e),r===void 0&&(r=e),r===ye&&(r=void 0),this.autoFreeze_&&Le(r,!0),n){let t=[],i=[];K(He).generateReplacementPatches_(e,r,{patches_:t,inversePatches_:i}),n(t,i)}return r}A(1,e)},this.produceWithPatches=(e,t)=>{if(W(e))return(t,...n)=>this.produceWithPatches(t,t=>e(t,...n));let n,r;return[this.produce(e,t,(e,t)=>{n=e,r=t}),n,r]},Me(e?.autoFreeze)&&this.setAutoFreeze(e.autoFreeze),Me(e?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),Me(e?.useStrictIteration)&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){I(e)||A(8),F(e)&&(e=Ct(e));let t=$e(this),n=St(t,e,void 0);return n[k].isManual_=!0,Qe(t),n}finishDraft(e,t){let n=e&&e[k];(!n||!n.isManual_)&&A(9);let{scope_:r}=n;return Xe(r,t),tt(void 0,r)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}setUseStrictIteration(e){this.useStrictIteration_=e}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(e,t){let n;for(n=t.length-1;n>=0;n--){let r=t[n];if(r.path.length===0&&r.op===`replace`){e=r.value;break}}n>-1&&(t=t.slice(n+1));let r=K(He).applyPatches_;return F(e)?r(e,t):this.produce(e,e=>r(e,t))}};function St(e,t,n,r){let[i,a]=H(t)?K(Ve).proxyMap_(t,n):je(t)?K(Ve).proxySet_(t,n):ft(t,n);return(n?.scope_??Je()).drafts_.push(i),a.callbacks_=n?.callbacks_??[],a.key_=r,n&&r!==void 0?ct(n,a,r):a.callbacks_.push(function(e){e.mapSetPlugin_?.fixSetContents(a);let{patchPlugin_:t}=e;a.modified_&&t&&t.generatePatches_(a,[],e)}),i}function Ct(e){return F(e)||A(10,e),wt(e)}function wt(e){if(!I(e)||Be(e))return e;let t=e[k],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=Ie(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=Ie(e,!0);return L(n,(e,t)=>{ke(n,e,wt(t))},r),t&&(t.finalized_=!1),n}function Tt(){xe.push(`Sets cannot have "replace" patches.`,function(e){return`Unsupported patch operation: `+e},function(e){return`Cannot apply patch, path doesn't resolve: `+e},`Patching reserved attributes like __proto__, prototype and constructor is not allowed`);function e(n,r=[]){if(n.key_!==void 0){let e=n.parent_.copy_??n.parent_.base_,t=Pe(B(e,n.key_)),i=B(e,n.key_);if(i===void 0||i!==n.draft_&&i!==n.base_&&i!==n.copy_||t!=null&&t.base_!==n.base_)return null;let a=n.parent_.type_===3,o;if(a){let e=n.parent_;o=Array.from(e.drafts_.keys()).indexOf(n.key_)}else o=n.key_;if(!(a&&e.size>o||z(e,o)))return null;r.push(o)}if(n.parent_)return e(n.parent_,r);r.reverse();try{t(n.copy_,r)}catch{return null}return r}function t(e,t){let n=e;for(let e=0;e<t.length-1;e++){let r=t[e];if(n=B(n,r),!U(n)||n===null)throw Error(`Cannot resolve path at '${t.join(`/`)}'`)}return n}let n=`replace`,r=`remove`;function i(e,t,n){if(e.scope_.processedForPatches_.has(e))return;e.scope_.processedForPatches_.add(e);let{patches_:r,inversePatches_:i}=n;switch(e.type_){case 0:case 2:return o(e,t,r,i);case 1:return a(e,t,r,i);case 3:return s(e,t,r,i)}}function a(e,t,i,a){let{base_:o,assigned_:s}=e,c=e.copy_;c.length<o.length&&([o,c]=[c,o],[i,a]=[a,i]);let l=e.allIndicesReassigned_===!0;for(let e=0;e<o.length;e++){let r=c[e],u=o[e];if((l||s?.get(e.toString()))&&r!==u){let o=r?.[k];if(o&&o.modified_)continue;let s=t.concat([e]);i.push({op:n,path:s,value:d(r)}),a.push({op:n,path:s,value:d(u)})}}for(let e=o.length;e<c.length;e++){let n=t.concat([e]);i.push({op:`add`,path:n,value:d(c[e])})}for(let e=c.length-1;o.length<=e;--e){let n=t.concat([e]);a.push({op:r,path:n})}}function o(e,t,i,a){let{base_:o,copy_:s,type_:c}=e;L(e.assigned_,(e,l)=>{let u=B(o,e,c),f=B(s,e,c),p=l?z(o,e)?n:`add`:r;if(u===f&&p===n)return;let m=t.concat(e);i.push(p===r?{op:p,path:m}:{op:p,path:m,value:d(f)}),a.push(p===`add`?{op:r,path:m}:p===r?{op:`add`,path:m,value:d(u)}:{op:n,path:m,value:d(u)})})}function s(e,t,n,i){let{base_:a,copy_:o}=e,s=0;a.forEach(e=>{if(!o.has(e)){let a=t.concat([s]);n.push({op:r,path:a,value:e}),i.unshift({op:`add`,path:a,value:e})}s++}),s=0,o.forEach(e=>{if(!a.has(e)){let a=t.concat([s]);n.push({op:`add`,path:a,value:e}),i.unshift({op:r,path:a,value:e})}s++})}function c(e,t,r){let{patches_:i,inversePatches_:a}=r;i.push({op:n,path:[],value:t===ye?void 0:t}),a.push({op:n,path:[],value:e})}function l(e,t){return t.forEach(t=>{let{path:i,op:a}=t,o=e;for(let e=0;e<i.length-1;e++){let t=R(o),n=i[e];typeof n!=`string`&&typeof n!=`number`&&(n=``+n),(t===0||t===1)&&(n===`__proto__`||n===Se)&&A(19),W(o)&&n===N&&A(19),o=B(o,n),(o===null||!U(o))&&A(18,i.join(`/`))}let s=R(o),c=u(t.value),l=i[i.length-1];switch(a){case n:switch(s){case 2:return o.set(l,c);case 3:A(16);default:return o[l]=c}case`add`:switch(s){case 1:return l===`-`?o.push(c):o.splice(l,0,c);case 2:return o.set(l,c);case 3:return o.add(c);default:return o[l]=c}case r:switch(s){case 1:return o.splice(l,1);case 2:return o.delete(l);case 3:return o.delete(t.value);default:return delete o[l]}default:A(17,a)}}),e}function u(e){if(!I(e))return e;if(V(e))return e.map(u);if(H(e))return new Map(Array.from(e.entries()).map(([e,t])=>[e,u(t)]));if(je(e))return new Set(Array.from(e).map(u));let t=Object.create(M(e));for(let n in e)t[n]=u(e[n]);return z(e,be)&&(t[be]=e[be]),t}function d(e){return F(e)?u(e):e}Ke(He,{applyPatches_:l,generatePatches_:i,generateReplacementPatches_:c,getPath:e})}globalThis.Iterator?.from;var Et=new xt,Dt=Et.produce,Ot=Et.produceWithPatches.bind(Et),kt=Et.applyPatches.bind(Et),At=1e3;function jt(e,t){if(e.add(t),e.size>At){let t=e.values().next().value;t!==void 0&&e.delete(t)}}function Mt(e){let{enablePatches:t=!1}=e;t&&Tt();let n=ge(),r=e.initialValue,i=new Set;return{on:n.on,value:()=>r,patch:(e,t=ve())=>{i.has(t)||(Tt(),r=kt(r,e),jt(i,t),n.emit(`updated`,r,void 0,t))},mutate:(e,a=ve())=>{if(!i.has(a)){if(jt(i,a),t){let[t,i]=Ot(r,e);if(t===r)return;r=t,n.emit(`updated`,r,i,a)}else{let t=Dt(r,e);if(t===r)return;r=t,n.emit(`updated`,r,void 0,a)}}},syncIds:i}}var Nt=typeof self==`object`?self:globalThis,Pt=new Set([`Error`,`EvalError`,`RangeError`,`ReferenceError`,`SyntaxError`,`TypeError`,`URIError`,`AggregateError`]),Ft=new Set([`Boolean`,`Number`,`String`,`Int8Array`,`Uint8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float16Array`,`Float32Array`,`Float64Array`,`BigInt64Array`,`BigUint64Array`]);function It(e,t){let n=(t,n)=>(e.set(n,t),t),r=i=>{if(e.has(i))return e.get(i);let[a,o]=t[i];switch(a){case 0:case-1:return n(o,i);case 1:{let e=n([],i);for(let t of o)e.push(r(t));return e}case 2:{let e=n({},i);for(let[t,n]of o)e[r(t)]=r(n);return e}case 3:return n(new Date(o),i);case 4:{let{source:e,flags:t}=o;return n(new RegExp(e,t),i)}case 5:{let e=n(new Map,i);for(let[t,n]of o)e.set(r(t),r(n));return e}case 6:{let e=n(new Set,i);for(let t of o)e.add(r(t));return e}case 7:{let{name:e,message:t}=o,r=Pt.has(e)?Nt[e]:void 0;return n(new(r??Nt.Error)(t),i)}case 8:return n(BigInt(o),i);case`BigInt`:return n(Object(BigInt(o)),i);case`ArrayBuffer`:return n(new Uint8Array(o).buffer,o);case`DataView`:{let{buffer:e}=new Uint8Array(o);return n(new DataView(e),o)}}if(typeof a==`string`&&Ft.has(a))return n(new Nt[a](o),i);throw TypeError(`unable to deserialize unsafe or unknown type: ${String(a)}`)};return r}function Lt(e){return It(new Map,e)(0)}var q=``,{toString:Rt}={},{keys:zt}=Object;function Bt(e){let t=typeof e;if(t!==`object`||!e)return[0,t];let n=Rt.call(e).slice(8,-1);switch(n){case`Array`:return[1,q];case`Object`:return[2,q];case`Date`:return[3,q];case`RegExp`:return[4,q];case`Map`:return[5,q];case`Set`:return[6,q];case`DataView`:return[1,n]}return n.includes(`Array`)?[1,n]:n.includes(`Error`)?[7,n]:[2,n]}function Vt([e,t]){return e===0&&(t===`function`||t===`symbol`)}function Ht(e,t,n,r){let i=(e,t)=>{let i=r.push(e)-1;return n.set(t,i),i},a=r=>{if(n.has(r))return n.get(r);let[o,s]=Bt(r);switch(o){case 0:{let t=r;switch(s){case`bigint`:o=8,t=r.toString();break;case`function`:case`symbol`:if(e)throw TypeError(`unable to serialize ${s}`);t=null;break;case`undefined`:return i([-1],r)}return i([o,t],r)}case 1:{if(s){let e=r;return s===`DataView`?e=new Uint8Array(r.buffer):s===`ArrayBuffer`&&(e=new Uint8Array(r)),i([s,[...e]],r)}let e=[],t=i([o,e],r);for(let t of r)e.push(a(t));return t}case 2:{if(s)switch(s){case`BigInt`:return i([s,r.toString()],r);case`Boolean`:case`Number`:case`String`:return i([s,r.valueOf()],r)}if(t&&`toJSON`in r)return a(r.toJSON());let n=[],c=i([o,n],r);for(let t of zt(r))(e||!Vt(Bt(r[t])))&&n.push([a(t),a(r[t])]);return c}case 3:return i([o,r.toISOString()],r);case 4:{let{source:e,flags:t}=r;return i([o,{source:e,flags:t}],r)}case 5:{let t=[],n=i([o,t],r);for(let[n,i]of r)(e||!(Vt(Bt(n))||Vt(Bt(i))))&&t.push([a(n),a(i)]);return n}case 6:{let t=[],n=i([o,t],r);for(let n of r)(e||!Vt(Bt(n)))&&t.push(a(n));return n}}let{message:c}=r;return i([o,{name:s,message:c}],r)};return a}function Ut(e,t={}){let n=[];return Ht(!(t.json||t.lossy),!!t.json,new Map,n)(e),n}var{parse:Wt,stringify:Gt}=JSON,Kt={json:!0,lossy:!0};function qt(e){return Lt(Wt(e))}function Jt(e){return Gt(Ut(e,Kt))}function Yt(e){return Lt(e)}function Xt(e){return Jt(e)}function Zt(e){return qt(e)}var Qt=256,$t=class extends Error{name=`StreamClosedError`};function en(e={}){let t=e.id??ve(),n=Math.max(0,e.replayWindow??0),r=ge(),i=new AbortController,a=[],o=!1,s=0;function c(e){if(o)throw new $t(`Cannot write to a closed stream "${t}"`);s+=1,n>0&&(a.push({seq:s,chunk:e}),a.length>n&&(a.length-n===1?a.shift():a.splice(0,a.length-n))),r.emit(`chunk`,s,e)}function l(e){if(o)return;o=!0;let t=nn(e);i.abort(e),r.emit(`end`,t)}function u(){o||(o=!0,i.signal.aborted||i.abort(`stream closed`),r.emit(`end`,void 0))}function d(e){o||i.signal.aborted||i.abort(e??`aborted`)}let f=new WritableStream({write(e){c(e)},close(){u()},abort(e){l(e)}});return{id:t,signal:i.signal,get closed(){return o},get lastSeq(){return s},write:c,error:l,close:u,abort:d,writable:f,events:r,buffer:a}}function tn(e={}){let t=e.id??ve(),n=Math.max(1,e.highWaterMark??Qt),r=[],i=0,a=!1,o=!1,s,c,l,u;function d(){if(c){if(r.length>0){let e=r.shift(),t=c;c=void 0,t.resolve({value:e,done:!1})}else if(a){let e=c;if(c=void 0,s){let t=Error(s.message);t.name=s.name,e.reject(t)}else e.resolve({value:void 0,done:!0})}}}function f(){if(l){for(;r.length>0;){let e=r.shift();try{l.enqueue(e)}catch{break}}if(a&&l){try{if(s){let e=Error(s.message);e.name=s.name,l.error(e)}else l.close()}catch{}l=void 0}}}function p(t,s){if(!(a||o)&&!(t<=i)){if(i=t,r.push(s),r.length>n){let t=r.length-n;r.splice(0,t),e.onOverflow?.(t)}d(),u&&f()}}function m(e){a||(a=!0,s=e,d(),u&&f())}function h(){o||a||(o=!0,e.onCancel?.(),m(void 0))}function g(){return u||(u=new ReadableStream({start(e){l=e,f()},cancel(){h()}}),u)}return{id:t,get cancelled(){return o},get done(){return a},get lastSeenSeq(){return i},get readable(){return g()},cancel:h,_push:p,_end:m,[Symbol.asyncIterator](){return{next(){if(r.length>0)return Promise.resolve({value:r.shift(),done:!1});if(a){if(s){let e=Error(s.message);return e.name=s.name,Promise.reject(e)}return Promise.resolve({value:void 0,done:!0})}return new Promise((e,t)=>{c={resolve:e,reject:t}})},return(){return h(),Promise.resolve({value:void 0,done:!0})}}}}}function nn(e){if(e instanceof Error)return{name:e.name||`Error`,message:e.message};if(typeof e==`string`)return{name:`Error`,message:e};try{return{name:`Error`,message:JSON.stringify(e)}}catch{return{name:`Error`,message:String(e)}}}var rn=128;function an(e){return e.replace(/[^\w-]+/g,`_`).slice(0,rn)}var on=`__connection.json`,sn=`__DEVFRAME_CONNECTION__`,cn=`x-birpc-session`,ln=`__rpc-dump/index.json`,un=`devframe:services`,dn=`devframe_otp`,fn=`devframe_auth_token`;d.postMessage.remoteAssetsError;var pn=class{cacheMap=new Map;options;keySerializer;constructor(e){this.options=e,this.keySerializer=e.keySerializer||(e=>he(e))}updateOptions(e){this.options={...this.options,...e}}cached(e,t){let n=this.cacheMap.get(e);if(n)return n.get(this.keySerializer(t))}has(e,t){return this.cacheMap.get(e)?.has(this.keySerializer(t))??!1}apply(e,t){let n=this.cacheMap.get(e.m)||new Map;n.set(this.keySerializer(e.a),t),this.cacheMap.set(e.m,n)}validate(e){return this.options.functions.includes(e)}clear(e){e?this.cacheMap.delete(e):this.cacheMap.clear()}},J=m({docsBase:`https://devfra.me/errors`,codes:{DF0019:{why:e=>`RPC function "${e.name}" has \`agent\` set but \`jsonSerializable\` is \`false\`; MCP requires JSON-serializable data.`,fix:"Remove `jsonSerializable: false`, or remove `agent` to keep it RPC-only."},DF0020:{why:e=>`RPC function "${e.name}" declares \`jsonSerializable: true\` but the value at "${e.path}" is a ${e.type}.`,fix:"Either drop `jsonSerializable: true` (falls back to structured-clone) or change the value to a JSON-safe shape."},DF0021:{why:e=>`RPC function "${e.name}" is already registered`,fix:"Use the `force` parameter to overwrite an existing registration."},DF0022:{why:e=>`RPC function "${e.name}" is not registered. Use register() to add new functions.`},DF0023:{why:e=>`RPC function "${e.name}" is not registered`},DF0024:{why:e=>`Either handler or setup function must be provided for RPC function "${e.name}"`},DF0025:{why:e=>`Function "${e.name}" not found in dump store`},DF0026:{why:e=>`No dump match for "${e.name}" with args: ${e.args}`},DF0027:{why:e=>`Function "${e.name}" with type "${e.type}" cannot have dump configuration. Only "static" and "query" types support dumps.`},DF0028:{why:e=>`Function "${e.name}" with type "${e.type}" cannot use \`snapshot: true\`. Only "query" functions support this sugar; "static" functions have equivalent default behavior already.`,fix:"Remove `snapshot: true`, or change the function type to `query`."},DF0043:{why:e=>`RPC function "${e.name}" received an invalid argument at position ${e.index}: ${e.issues}`,fix:"Pass a value that satisfies the `args` schema declared for this function."},DF0044:{why:e=>`RPC function "${e.name}" returned a value that failed its \`returns\` schema: ${e.issues}`,fix:"Make the handler return a value that satisfies the `returns` schema, or relax the schema."}}});function mn(e){if(e.agent&&e.jsonSerializable===!1)throw J.DF0019({name:e.name});e.agent&&!e.jsonSerializable&&(e.jsonSerializable=!0)}async function hn(e,t){let n=e[`~standard`].validate(t);return n instanceof Promise?await n:n}function gn(e){return e.map(e=>{let t=e.path?.map(e=>typeof e==`object`?e.key:e).join(`.`);return t?`${t}: ${e.message}`:e.message}).join(`; `)}async function _n(e,t,n){let r=n.slice();if(!t||t.length===0)return r;for(let r=0;r<t.length;r++){let i=t[r];if(!i)continue;let a=await hn(i,n[r]);if(a.issues)throw J.DF0043({name:e,index:r,issues:gn(a.issues)})}return r}async function vn(e,t,n){if(!t)return n;let r=await hn(t,n);if(r.issues)throw J.DF0044({name:e,issues:gn(r.issues)});return n}async function yn(e,t){if(!e.setup)return{};if(typeof t==`object`&&t){e.__cache??=new WeakMap;let n=e.__cache,r=n.get(t);return r||(r=Promise.resolve(e.setup(t)),r.catch(()=>{n.get(t)===r&&n.delete(t)}),n.set(t,r)),await r}if(!e.__promise){let n=Promise.resolve(e.setup(t));n.catch(()=>{e.__promise===n&&(e.__promise=void 0)}),e.__promise=n}return await e.__promise}async function bn(e,t){let n=e.handler;if(!n){let r=await yn(e,t);if(!r.handler)throw J.DF0024({name:e.name});n=r.handler}let r=e.args,i=e.returns;if(!r&&!i)return n;let a=n;return async(...t)=>{let n=await _n(e.name,r,t),o=await a(...n);return await vn(e.name,i,o)}}var xn=class{context;definitions=new Map;functions;_onChanged=[];constructor(e){this.context=e;let t=this.definitions,n=this;this.functions=new Proxy({},{get(e,r){let i=t.get(r);if(i)return bn(i,n.context)},has(e,n){return t.has(n)},getOwnPropertyDescriptor(e,n){return{value:t.get(n)?.handler,configurable:!0,enumerable:!0}},ownKeys(){return Array.from(t.keys())}})}register(e,t=!1){if(this.definitions.has(e.name)&&!t)throw J.DF0021({name:e.name});mn(e),this.definitions.set(e.name,e),this._onChanged.forEach(t=>t(e.name))}update(e,t=!1){if(!this.definitions.has(e.name)&&!t)throw J.DF0022({name:e.name});mn(e),this.definitions.set(e.name,e),this._onChanged.forEach(t=>t(e.name))}onChanged(e){return this._onChanged.push(e),()=>{let t=this._onChanged.indexOf(e);t!==-1&&this._onChanged.splice(t,1)}}async getHandler(e){return await bn(this.definitions.get(e),this.context)}getSchema(e){let t=this.definitions.get(e);if(!t)throw J.DF0023({name:String(e)});return{args:t.args,returns:t.returns}}has(e){return this.definitions.has(e)}get(e){return this.definitions.get(e)}list(){return Array.from(this.definitions.keys())}};function Sn(e,t=``){return JSON.stringify(e,function(e,n){let r=this,i=r==null?n:r[e];if(i===void 0){if(Array.isArray(r))throw Y(t,`undefined`,r,e);return n}return i!==null&&Cn(i,r,e,t),n})}function Cn(e,t,n,r){if(typeof e==`bigint`)throw Y(r,`BigInt`,t,n);if(typeof e!=`object`)return;if(e instanceof Map)throw Y(r,`Map`,t,n);if(e instanceof Set)throw Y(r,`Set`,t,n);if(e instanceof Date)throw Y(r,`Date`,t,n);if(Array.isArray(e))return;let i=Object.getPrototypeOf(e);if(i!==null&&i!==Object.prototype)throw Y(r,e.constructor?.name??`class instance`,t,n)}function Y(e,t,n,r){let i=wn(n,r);return J.DF0020({name:e||`<anonymous>`,type:t,path:i})}function wn(e,t){return Array.isArray(e)?`[${t}]`:t===``?`<root>`:t}var Tn=`__DEVFRAME_CONNECTION_META__`,En=`__DEVFRAME_CONNECTION_AUTH_TOKEN__`;function Dn(e){let t=[()=>window?.[e],()=>globalThis?.[e],()=>parent.window?.[e]];for(let e of t)try{let t=e();if(t)return t}catch{}}function On(){return Dn(sn)}function kn(){return Dn(Tn)}function X(e){if(e)return e;try{let e=localStorage.getItem(En);if(e)return e}catch{}return Dn(En)}function An(e){globalThis[sn]=e,globalThis[Tn]={...e.connectionMeta,baseUrl:e.metaBaseUrl},e.authToken&&jn(e.authToken)}function jn(e){try{localStorage.setItem(En,e)}catch{}globalThis[En]=e;let t=On();t&&(globalThis[sn]={...t,authToken:e})}function Mn(e){let t=s(on,e);try{return new URL(t,globalThis.location?.href).href}catch{return t}}function Nn(e,t){return t&&t!==e.authToken?{...e,authToken:t}:e}function Pn(){let e=On();if(e)return Nn(e,X()??e.authToken??e.connectionMeta.authToken);let t=kn();if(t)return{connectionMeta:t,metaBaseUrl:t.baseUrl??Mn(`./`),authToken:X(t.authToken)}}async function Fn(e={}){if(e.connection){let t=Nn(e.connection,X(e.authToken??e.connection.authToken??e.connection.connectionMeta.authToken));return An(t),t}let t=Array.isArray(e.baseURL)?e.baseURL:[e.baseURL??`./`];if(e.connectionMeta){let n={connectionMeta:e.connectionMeta,metaBaseUrl:Mn(t[0]??`./`),authToken:X(e.authToken??e.connectionMeta.authToken)};return An(n),n}let n=Pn();if(n){let t=Nn(n,X(e.authToken??n.authToken??n.connectionMeta.authToken));return An(t),t}let r=[];for(let n of t){let t=s(on,n),i=Mn(n);try{let n=await fetch(t);if(!n.ok)throw Error(`Failed to fetch connection meta from ${i}: ${n.status}`);let r=await n.json(),a=n.url||i,o={connectionMeta:r,metaBaseUrl:r.baseUrl?new URL(r.baseUrl,a).href:a,authToken:X(e.authToken??r.authToken)};return An(o),o}catch(e){r.push(e)}}throw Error(`Failed to get connection meta from ${t.join(`, `)}`,{cause:r})}var Z=class extends Error{name=`DevframeConnectionError`;kind;constructor(e,t,n){super(t,n),this.kind=e}};function In(e=dn){try{let t=globalThis.location?.hash?.replace(/^#/,``)??``;return new URLSearchParams(t).get(e)||void 0}catch{return}}function Ln(e){try{let t=new URL(globalThis.location.href),n=new URLSearchParams(t.hash.replace(/^#/,``));if(!n.has(e))return;n.delete(e),t.hash=n.toString(),globalThis.history?.replaceState(globalThis.history.state,``,t.href)}catch{}}function Rn(e=dn){let t=In(e);return t&&Ln(e),t}async function zn(e,t={}){let n=Rn(t.param??`devframe_otp`);return n?e.isTrusted?!0:e.requestTrustWithCode(n):!1}function Bn(e){let t={},n=new WeakMap,r,i=()=>(r??=e.sharedState.get(un,{initialValue:{}}).then(e=>(t=e.value(),e.on(`updated`,e=>{t=e}),e)),r);return i(),{state:i,has:e=>e in t,keys:()=>Object.keys(t),get:r=>{let i=t[r];if(!i)return;let a=n.get(i);return a||(a={...i,rpc:e.scope(i.scope).rpc},n.set(i,a)),a}}}function Vn(e){let t=new Map,n=new Map,r=new Map,i=new Set,a=e.connectionMeta.backend===`static`;function o(e,t){let n=r.get(e);return n&&typeof n==`object`&&!Array.isArray(n)&&typeof t==`object`&&!Array.isArray(t)?{...n,...t}:t}e.client.register({name:d.broadcast.clientStateUpdated,type:`event`,handler:(e,n,r)=>{let i=t.get(e);i&&!i.syncIds.has(r)&&i.mutate(()=>o(e,n),r)}}),e.client.register({name:d.broadcast.clientStatePatch,type:`event`,handler:(e,n,r)=>{let i=t.get(e);i&&!i.syncIds.has(r)&&i.patch(n,r)}});function s(t,n){let r=[];return r.push(n.on(`updated`,(n,r,i)=>{a||(r?e.callEvent(`devframe:rpc:server-state:patch`,t,r,i):e.callEvent(`devframe:rpc:server-state:set`,t,n,i))})),()=>{for(let e of r)e()}}return{keys:()=>Array.from(t.keys()),onKeyAdded(e){return i.add(e),()=>{i.delete(e)}},delete(e){let i=n.get(e);n.delete(e);let a=t.delete(e);return r.delete(e),i?.(),a},get:async(c,l)=>{if(l?.initialValue!==void 0&&r.set(c,l.initialValue),t.has(c))return t.get(c);let u=Mt({initialValue:l?.initialValue,enablePatches:!1});async function f(){if(a||e.callEvent(`devframe:rpc:server-state:subscribe`,c),l?.initialValue!==void 0){t.set(c,u);for(let e of i)e(c);return e.call(`devframe:rpc:server-state:get`,c).then(e=>{e!==void 0&&u.mutate(()=>o(c,e))}).catch(e=>{console.error(`Error getting server state`,e)}),n.set(c,s(c,u)),u}{let r=await e.call(`devframe:rpc:server-state:get`,c);u.mutate(()=>o(c,r)),t.set(c,u);for(let e of i)e(c);return n.set(c,s(c,u)),u}}return new Promise((t,n)=>{if(e.isTrusted)f().then(t,n);else{t(u);let n=!1;e.events.on(d.client.isTrustedUpdated,e=>{e&&!n&&(n=!0,f())})}})}}}var Hn=new Map;function Un(e=Hn){let t=new Map;return{serialize:n=>{let r;return n.t===`q`?r=n.m:(r=t.get(n.i),t.delete(n.i)),!(n.t===`s`&&`e`in n)&&r&&e.get(r)?.jsonSerializable===!0?Sn(n,r??``):`s:${Xt(n)}`},deserialize:e=>{let n=e.startsWith(`s:`)?Zt(e.slice(2)):JSON.parse(e);return n.t===`q`&&n.i&&n.m&&t.set(n.i,n.m),n}}}function Wn(){}function Gn(e){let t=e.search(/\n\n|\r\n\r\n/);if(!(t<0))return{frame:e.slice(0,t),rest:e.slice(t+(e[t]===`\r`?4:2))}}function Kn(e){let t=`message`,n=[];for(let r of e.split(/\r?\n/))r.startsWith(`:`)||(r.startsWith(`event:`)?t=r.slice(6).trimStart():r.startsWith(`data:`)&&n.push(r.slice(5).replace(/^ /,``)));return{event:t,data:n}}function qn(e){let{onConnected:t=Wn,onError:n=Wn,onDisconnected:r=Wn,definitions:i,fetch:a=globalThis.fetch.bind(globalThis)}=e,o=e.url;e.authToken&&(o=`${o}${o.includes(`?`)?`&`:`?`}${fn}=${encodeURIComponent(e.authToken)}`);let s=Un(i),c=new AbortController,l=!1,u,d,f,p,m=new Promise((e,t)=>{f=e,p=t});m.catch(()=>{});function h(e){l||(l=!0,p(e),n(e),r())}function g(){l||(l=!0,p(Error(`Devframe SSE stream closed`)),r())}function _(e,n){e===`session`?(f(n),t()):u?.(n)}async function v(e){let t=e.getReader();d=t;let n=new TextDecoder,r=``;for(;;){let{done:e,value:i}=await t.read();if(e)break;for(r+=n.decode(i,{stream:!0});;){let e=Gn(r);if(!e)break;r=e.rest;let{event:t,data:n}=Kn(e.frame);n.length>0&&_(t,n.join(`
3
+ `))}}g()}return(async()=>{try{let e=await a(o,{headers:{accept:`text/event-stream`},signal:c.signal});if(!e.ok||!e.body)throw Error(`Devframe SSE stream request failed: ${e.status}`);await v(e.body)}catch(e){if(c.signal.aborted){g();return}h(e instanceof Error?e:Error(String(e)))}})(),{close:()=>{l=!0,c.abort(),d?.cancel().catch(()=>{})},on:e=>{u=e},post:async e=>{let t;try{t=await m}catch{return}if(l)n(Error(`Devframe SSE channel is closed; message dropped`));else try{let n=await a(o,{method:`POST`,headers:{"content-type":`text/plain; charset=utf-8`,[cn]:t},body:e});if(n.status===200){let e=await n.text();e&&u?.(e);return}if(!n.ok)throw Error(`Devframe SSE POST failed: ${n.status}`)}catch(e){n(e instanceof Error?e:Error(String(e)))}},serialize:s.serialize,deserialize:s.deserialize}}function Jn(e,t){let{channel:n,rpcOptions:r={}}=t;return C(e,{...n,timeout:-1,...r,proxify:!1})}function Yn(e){let{transport:t,authToken:n,connectionMeta:r,events:i,clientRpc:a,rpcOptions:o={},callTimeout:s=0}=e,c=!1,l=`connecting`,u=null,f=Promise.withResolvers();function p(e,t=null){if(t?u=t:e===`connected`&&(u=null),e===l)return;let n=l;l=e,i.emit(d.client.connectionStatus,e,n)}let m=new Set;function h(e){for(let t of[...m])t.reject(e)}function g(){return l===`disconnected`||l===`error`?new Z(`connection`,`[devframe] Not connected to the devframe server`,{cause:u??void 0}):l===`unauthorized`?new Z(`auth`,`[devframe] Not authorized by the devframe server`,{cause:u??void 0}):null}function _(e,t){return new Promise((n,r)=>{let a=!1,o,c={reject(e){a||(l(),i.emit(d.client.error,e,t),r(e))}};function l(){a=!0,m.delete(c),o&&clearTimeout(o)}m.add(c),s>0&&(o=setTimeout(()=>{c.reject(new Z(`timeout`,`[devframe] RPC call "${t}" timed out after ${s}ms`))},s)),e.then(e=>{a||(l(),n(e))},e=>{if(a)return;l();let n=e instanceof Error?e:Error(String(e));i.emit(d.client.error,n,t),r(n)})})}let v=new Map;for(let e of r.jsonSerializableMethods??[])v.set(e,{jsonSerializable:!0});let y=e.createChannel({definitions:v,onError(e){p(`error`,e),i.emit(d.client.connectionError,e),h(new Z(`connection`,`[devframe] Connection to the devframe server failed`,{cause:e}))},onDisconnected(){l!==`error`&&p(`disconnected`),h(new Z(`connection`,`[devframe] Disconnected from the devframe server`,{cause:u??void 0}))}}),b=Jn(a.functions,{channel:y,rpcOptions:o});a.register({name:d.broadcast.authRevoked,type:`event`,handler:()=>{c=!1;let e=new Z(`auth`,`[devframe] The devframe server revoked this client's trust`);p(`unauthorized`,e),i.emit(d.client.connectionError,e),h(e),i.emit(d.client.isTrustedUpdated,!1)}});let x=n;async function S(e){x=e;let t=await b.$call(`anonymous:devframe:auth`,{authToken:e,ua:navigator.userAgent,origin:location.origin});if(c=t.isTrusted,c)f.resolve(!0),p(`connected`);else{let e=new Z(`auth`,`[devframe] The devframe server refused this client's credentials`);p(`unauthorized`,e),i.emit(d.client.connectionError,e)}return i.emit(d.client.isTrustedUpdated,c),t.isTrusted}async function ee(e){let t=(await b.$call(`anonymous:devframe:auth:exchange`,{code:e,ua:navigator.userAgent,origin:location.origin}))?.authToken??null;return t&&(x=t,c=!0,f.resolve(!0),p(`connected`),i.emit(d.client.isTrustedUpdated,!0)),t}async function C(e={}){await b.$call(`anonymous:devframe:auth:request-code`,{ua:navigator.userAgent,origin:location.origin,...e.reissue?{reissue:!0}:{}})}async function te(){return c?!0:S(x??``)}async function w(e=6e4){if(c&&f.resolve(!0),e<=0)return f.promise;let t;try{return await Promise.race([f.promise,new Promise((n,r)=>{t=setTimeout(()=>{r(Error(`[devframe] Timeout waiting for rpc to be trusted`))},e)})]),c}finally{clearTimeout(t)}}return{transport:t,get isTrusted(){return c},get status(){return l},get connectionError(){return u},requestTrust:te,requestTrustWithToken:S,requestTrustWithCode:ee,requestAuthCode:C,ensureTrusted:w,call:(...e)=>{let t=String(e[0]),n=g();return n?(i.emit(d.client.error,n,t),Promise.reject(n)):_(b.$call(...e),t)},callEvent:(...e)=>{let t=g();if(t)i.emit(d.client.error,t,String(e[0]));else return b.$callEvent(...e)},callOptional:(...e)=>{let t=String(e[0]),n=g();return n?(i.emit(d.client.error,n,t),Promise.reject(n)):_(b.$callOptional(...e),t)},close:()=>{y.close()}}}function Xn(e,t,n){let r=(()=>{try{return new URL(t,n.href)}catch{return new URL(n.href)}})();if(e&&typeof e==`object`){if(e.host!=null||e.port!=null){let t=e.host??`${r.hostname}:${e.port}`;return new URL(e.path??`/`,`${r.protocol}//${t}`).href}return new URL(e.path??``,r).href}let i=e??``;return/^https?:\/\//i.test(i)?i:new URL(i,r).href}function Zn(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},sseOptions:s={},callTimeout:c=0}=e,l=Xn(n.sse,r??`./`,location);return Yn({transport:`sse`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>qn({url:l,authToken:t,definitions:e.definitions,...s,onConnected(){s.onConnected?.()},onError(t){e.onError(t),s.onError?.(t)},onDisconnected(){e.onDisconnected(),s.onDisconnected?.()}})})}function Qn(e){let{name:t,message:n,cause:r,...i}=e,a=r instanceof Error?r:$n(r)?Qn(r):r,o=a===void 0?Error(n):Error(n,{cause:a});return o.name=t,Object.assign(o,i),o}function $n(e){return typeof e==`object`&&!!e&&typeof e.message==`string`&&typeof e.name==`string`}function er(e){return typeof e==`object`&&!!e&&e.type===`static`&&typeof e.path==`string`}function tr(e){return typeof e==`object`&&!!e&&e.type===`query`&&typeof e.records==`object`&&e.records!==null}function nr(e){return typeof e==`object`&&!!e&&(`output`in e||`error`in e)}function rr(e){if(e.error)throw Qn(e.error);return e.output}function ir(e){return e.some(e=>e!=null)}function ar(e){return typeof e==`object`&&e&&`serialization`in e&&`data`in e?e.data:e}function or(e,t){let n=new Map,r=new Map;function i(e,t){return t===`structured-clone`&&Array.isArray(e)?Yt(e):e}function a(e,t){return i(ar(e),t)}async function o(e){n.has(e.path)||n.set(e.path,t(e.path).then(t=>a(t,e.serialization)));let r=await n.get(e.path);return nr(r)?rr(r):r}async function s(e,n){return r.has(e)||r.set(e,t(e).then(e=>a(e,n))),await r.get(e)}async function c(t,n){if(!(t in e))throw Error(`[devframe-rpc] Function "${t}" not found in dump store`);let r=e[t];if(er(r)){if(ir(n))throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`);return await o(r)}if(tr(r)){let e=he(n),i=r.records[e];if(i)return rr(await s(i,r.serialization));if(r.fallback)return rr(await s(r.fallback,r.serialization));throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}if(!ir(n))return r;throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}return{call:async(e,t)=>await c(e,t),callOptional:async(t,n)=>{if(t in e)return await c(t,n)},callEvent:async(e,t)=>{}}}async function sr(e){let t=or(await e.fetchJsonFromBases(ln),e.fetchJsonFromBases);return{transport:`static`,isTrusted:!0,status:`connected`,connectionError:null,requestTrust:async()=>!0,requestTrustWithToken:async()=>!0,requestTrustWithCode:async()=>null,requestAuthCode:async()=>{},ensureTrusted:async()=>!0,call:(...e)=>t.call(e[0],e.slice(1)),callEvent:(...e)=>t.callEvent(e[0],e.slice(1)),callOptional:(...e)=>t.callOptional(e[0],e.slice(1)),close:()=>{}}}var cr=``;function Q(e,t){return`${e}${cr}${t}`}function lr(e){let t=new Map,n=new Map;e.client.register({name:d.broadcast.streamingChunk,type:`event`,handler(e,n,r,i){t.get(Q(e,n))?._push(r,i)}}),e.client.register({name:d.broadcast.streamingEnd,type:`event`,handler(e,n,r){let i=Q(e,n),a=t.get(i);a&&(a._end(r),t.delete(i))}}),e.client.register({name:d.broadcast.streamingUploadCancel,type:`event`,handler(e,t){let r=Q(e,t),i=n.get(r);i&&(i.abort(`server cancelled upload`),n.delete(r))}}),e.events.on(d.client.isTrustedUpdated,n=>{if(n)for(let[n,r]of t){if(r.cancelled||r.done)continue;let t=n.indexOf(cr);if(t<0)continue;let i=n.slice(0,t),a=n.slice(t+1);e.callEvent(`devframe:streaming:subscribe`,i,a,{afterSeq:r.lastSeenSeq})}});function r(n,r,i={}){let a=Q(n,r),o=t.get(a);if(o)return o;let s=tn({id:r,highWaterMark:i.highWaterMark,onOverflow(e){console.warn(`[devframe] DF0029: Stream "${n}#${r}" dropped ${e} chunk(s) after exceeding the client high-water mark.`)},onCancel(){e.callEvent(`devframe:streaming:cancel`,n,r),t.delete(a)}});if(t.set(a,s),e.isTrusted)e.callEvent(`devframe:streaming:subscribe`,n,r,{afterSeq:0});else{let i=e.events.on(d.client.isTrustedUpdated,o=>{o&&(i(),t.has(a)&&!s.cancelled&&!s.done&&e.callEvent(`devframe:streaming:subscribe`,n,r,{afterSeq:s.lastSeenSeq}))})}return s}function i(t,r){let i=Q(t,r),a=n.get(i);if(a)return a;let o=en({id:r});return o.events.on(`chunk`,(n,i)=>{e.callEvent(`devframe:streaming:upload-chunk`,t,r,n,i)}),o.events.on(`end`,a=>{e.callEvent(`devframe:streaming:upload-end`,t,r,a),n.delete(i)}),n.set(i,o),o}return{subscribe:r,upload:i}}function ur(){}var dr=new Map;function fr(e){let t=e.url;e.authToken&&(t=`${t}?${fn}=${encodeURIComponent(e.authToken)}`);let n=new WebSocket(t),{onConnected:r=ur,onError:i=ur,onDisconnected:a=ur,definitions:o=dr}=e;n.addEventListener(`open`,e=>{r(e)}),n.addEventListener(`error`,e=>{let t=e instanceof Error?e:Error(e.type);i(t)}),n.addEventListener(`close`,e=>{a(e)});let s=Un(o);return{close:()=>{n.close()},on:e=>{n.addEventListener(`message`,t=>{e(t.data)})},post:e=>{if(n.readyState===WebSocket.OPEN)n.send(e);else if(n.readyState===WebSocket.CONNECTING){let t=()=>{i(),n.readyState===WebSocket.OPEN&&n.send(e)},r=()=>i();function i(){n.removeEventListener(`open`,t),n.removeEventListener(`close`,r)}n.addEventListener(`open`,t),n.addEventListener(`close`,r)}else i(Error(`Devframe WebSocket is not open; message dropped`))},serialize:s.serialize,deserialize:s.deserialize}}function pr(e,t,n){let r=(()=>{try{return new URL(t,n.href)}catch{return new URL(n.href)}})(),i=r.protocol===`https:`?`wss:`:`ws:`;if(e&&typeof e==`object`){if(e.host!=null||e.port!=null){let t=e.host??`${r.hostname}:${e.port}`,n=new URL(e.path??`/`,`${i}//${t}`);return n.protocol=i,n.href}let t=new URL(e.path??``,r);return t.protocol=i,t.href}if(typeof e==`number`)return`${i}//${r.hostname}:${e}`;let a=e??``;if(/^wss?:\/\//i.test(a))return a;if(/^https?:\/\//i.test(a))return c(a,/^https/i.test(a)?`wss://`:`ws://`);let o=new URL(a,r);return o.protocol=i,o.href}function mr(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},wsOptions:s={},callTimeout:c=0}=e,l=pr(n.websocket,r??`./`,location);return Yn({transport:`websocket`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>fr({url:l,authToken:t,definitions:e.definitions,...s,onConnected(e){s.onConnected?.(e)},onError(t){e.onError(t),s.onError?.(t)},onDisconnected(t){e.onDisconnected(),s.onDisconnected?.(t)}})})}function hr(e){return e.includes(`:`)}function $(e,t){return hr(t)?t:`${e}:${t}`}function gr(e){return{async get(t){return(await e()).value()?.[t]},async set(t,n){(await e()).mutate(e=>{if(e===void 0)return{[t]:n};e[t]=n})},async delete(t){(await e()).mutate(e=>{e!==void 0&&delete e[t]})},async all(){return(await e()).value()??{}},async onChange(t){return(await e()).on(`updated`,e=>t(e??{}))}}}function _r(e,t,n){let r=`devframe:settings:${n}:${t}`,i;function a(){return i||=(async()=>(await e.ensureTrusted(),e.sharedState.get(r)))().catch(e=>{throw i=void 0,e}),i}return gr(a)}function vr(e,t){return{global:_r(e,t,`global`),project:_r(e,t,`project`)}}function yr(e,t){return{namespace:t,base:e,rpc:{namespace:t,register(n){if(hr(n.name))throw Error(`[devframe] Scoped client RPC registration for namespace "${t}" received an already-namespaced function name "${n.name}". Pass a bare name without a ":" separator.`);e.client.register({...n,name:`${t}:${n.name}`})},call:((n,...r)=>e.call($(t,n),...r)),callEvent:((n,...r)=>e.callEvent($(t,n),...r)),callOptional:((n,...r)=>e.callOptional($(t,n),...r)),sharedState:((n,r)=>e.sharedState.get($(t,n),r)),streaming:{subscribe:(n,r,i)=>e.streaming.subscribe($(t,n),r,i),upload:(n,r)=>e.streaming.upload($(t,n),r)}},settings:vr(e,t),scope:e.scope}}function br(){if(typeof document<`u`){let e=document.modelContext;if(e)return e}if(typeof navigator<`u`){let e=navigator.modelContext;if(e)return e}}function xr(e,t={}){let n=t.modelContext??br();if(!n)return()=>{};let r=n,i=new Map,a=new Map;function o(t,n){let o=an(t.name),s=a.get(o);if(s&&s!==t.name){console.warn(`[devframe] WebMCP tool name "${o}" (from "${t.name}") collides with "${s}"; keeping the first registration.`);return}let c=new AbortController,l=te(t.type,n),u=r.registerTool({name:o,description:n.description,inputSchema:ne(t.args),annotations:{title:n.title??t.name,readOnlyHint:l===`read`,destructiveHint:l===`destructive`},execute:n=>Sr(t,e.context,n)},{signal:c.signal});u&&`then`in u&&u.then(()=>{},()=>{}),a.set(o,t.name),i.set(t.name,()=>{c.abort(),u&&`unregister`in u&&typeof u.unregister==`function`&&u.unregister(),a.delete(o)})}function s(t){let n=t?[t]:[...e.definitions.keys()];for(let t of n){i.get(t)?.(),i.delete(t);let n=e.definitions.get(t),r=n?.agent;n&&r&&o(n,r)}}s();let c=e.onChanged(e=>s(e));return()=>{c();for(let e of i.values())e();i.clear()}}async function Sr(e,t,n){try{let r=re(n,e.args?.length);return{content:[{type:`text`,text:Cr(await(await bn(e,t))(...r))}]}}catch(e){return{isError:!0,content:[{type:`text`,text:wr(e)}]}}}function Cr(e){return e===void 0?`undefined`:typeof e==`string`?e:JSON.stringify(e,null,2)}function wr(e){if(!(e instanceof Error))return String(e);let t=e.cause instanceof Error?` (cause: ${e.cause.message})`:``;return`${e.name}: ${e.message}${t}`}function Tr(e,t){if(t.backend===`static`)return`static`;let n=t.websocket!==void 0,r=t.sse!==void 0;if(e===`websocket`){if(!n)throw Error(`[devframe] transport: 'websocket' was requested, but this server does not advertise a WebSocket endpoint`);return`websocket`}if(e===`sse`){if(!r)throw Error(`[devframe] transport: 'sse' was requested, but this server does not advertise an SSE endpoint`);return`sse`}if(t.backend===`sse`&&r)return`sse`;if(n)return`websocket`;if(r)return`sse`;throw Error(`[devframe] This server advertises no RPC transport (backend "none"), so there is nothing to connect to. Enable the WebSocket or SSE endpoint on the server, or use its static/MCP surfaces instead.`)}async function Er(e={}){let{baseURL:n=`./`,rpcOptions:r={},cacheOptions:i=!1}=e,a=ge(),o=Array.isArray(n)?n:[n],c=await Fn(e),{connectionMeta:l,metaBaseUrl:u,authToken:f}=c,p=o[0]??`./`;try{p=new URL(`.`,u).href}catch{}let m=new pn({functions:[],...typeof e.cacheOptions==`object`?e.cacheOptions:{}}),h={rpc:void 0},g=new xn(h),_=e.webmcp===!1?void 0:xr(g),v,y=!1,b=0,x;function S(){b++,x=void 0,m.clear(),i===!0&&m.updateOptions({functions:[]})}i&&(g.register({name:d.broadcast.cacheInvalidate,type:`event`,handler:S}),a.on(d.client.connectionStatus,S),a.on(d.client.isTrustedUpdated,S));async function ee(e){let t=[p,...o.filter(e=>e!==p)].filter(e=>e!=null),n=[];for(let r of t)try{return await fetch(s(e,r)).then(t=>{if(!t.ok)throw Error(`Failed to fetch ${e} from ${r}: ${t.status}`);return t.json()})}catch(e){n.push(e)}throw Error(`Failed to load ${e} from ${t.join(`, `)}`,{cause:n})}let C=e.callTimeout??0,te=C>0?C:1/0,w,T={authToken:f,connectionMeta:l,metaBaseUrl:u,events:a,clientRpc:g,callTimeout:e.callTimeout,rpcOptions:{...r,async onRequest(e,t,n){let a=performance.now()+te;if(await r.onRequest?.call(this,e,t,n),i===!0&&e.i&&w.isTrusted&&!e.m.startsWith(`anonymous:`)&&e.m!==`devframe:rpc:cacheable-functions`){function t(){if(performance.now()>=a)throw new Z(`timeout`,`[devframe] RPC call "${e.m}" timed out after ${C}ms`)}for(;!x&&(t(),!(y||w.status!==`connected`));){let e=b;x=w.callOptional(`devframe:rpc:cacheable-functions`).then(t=>{e===b&&m.updateOptions({functions:t??[]})}).catch(t=>{throw e===b&&(x=void 0),t}),await x}await x,t()}let o=b;if(i&&e.i&&!y&&w.isTrusted&&m.validate(e.m)){if(m.has(e.m,e.a))return n(m.cached(e.m,e.a));let r=await t(e);o===b&&!y&&m.apply(e,r)}else await t(e)}}},ne=Tr(e.transport??`auto`,l);w=ne===`static`?await sr({fetchJsonFromBases:ee}):ne===`sse`?Zn({...T,sseOptions:e.sseOptions}):mr({...T,wsOptions:e.wsOptions});let E;try{E=new BroadcastChannel(`devframe-auth`)}catch{}let re,ie=!1;function ae(e){return((...t)=>ie||!re?e(...t):re.then(()=>e(...t)))}function oe(){y=!0,S();try{v?.(),_?.()}finally{try{E?.close()}finally{w.close?.()}}}let D={events:a,get isTrusted(){return w.isTrusted},get status(){return w.status},get connectionError(){return w.connectionError},get transport(){return w.transport??ne},get connection(){return c},connectionMeta:l,ensureTrusted:w.ensureTrusted,requestTrust:w.requestTrust,requestTrustWithToken:async e=>(jn(e),c={...c,authToken:e},w.requestTrustWithToken(e)),requestTrustWithCode:async e=>{let t=await w.requestTrustWithCode(e);if(!t)return!1;jn(t),c={...c,authToken:t};try{E?.postMessage({type:`auth-update`,authToken:t})}catch{}return!0},requestAuthCode:e=>w.requestAuthCode(e),call:ae(w.call),callEvent:ae(w.callEvent),callOptional:ae(w.callOptional),client:g,sharedState:void 0,services:void 0,streaming:void 0,cacheManager:m,scope:void 0,close:oe};D.sharedState=Vn(D),D.streaming=lr(D),D.services=Bn(D);let se=new Map;D.scope=(e=>{if(!e)return D;let t=se.get(e);return t||(t=yr(D,e),se.set(e,t)),t}),h.rpc=D;function ce(){try{return typeof window<`u`&&window.self===window.top}catch{return!1}}async function le(){if(e.simpleAuth!==!1&&ce()&&typeof globalThis.prompt==`function`)for(await D.requestAuthCode().catch(()=>{});!D.isTrusted;){let e=globalThis.prompt(`devframe: enter the authentication code shown in your terminal`);if(e==null)return;let t=e.trim();if(t&&await D.requestTrustWithCode(t))return}}async function ue(){let t=await w.requestTrust(),n=e.otpParam??`devframe_otp`,r=n?await zn(D,{param:n}):!1;t||r||D.isTrusted||await le()}return re=ue().then(()=>{ie=!0},()=>{ie=!0}),l.mcp&&t(async()=>{let{setupBrowserAgentRpcBridge:e}=await import(`./AqohFEu1.js`);return{setupBrowserAgentRpcBridge:e}},[],import.meta.url).then(({setupBrowserAgentRpcBridge:e})=>{y||(v=e(D))}).catch(()=>{}),E&&(E.onmessage=e=>{e.data?.type===`auth-update`&&e.data.authToken&&D.requestTrustWithToken(e.data.authToken)}),D}function Dr(e={}){return Er({...e,simpleAuth:!1})}export{Dr as getDevToolsRpcClient,ve as t};