bunite-core 0.17.2 → 0.17.3

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bunite-core",
3
3
  "description": "Uniting UI and Bun",
4
- "version": "0.17.2",
4
+ "version": "0.17.3",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "setup:cef": "bun ../tools/bunite-dev/scripts/setup-cef.ts",
@@ -626,7 +626,7 @@ export class BrowserView {
626
626
  const myGen = this.connectionGeneration;
627
627
  if (this.connection) {
628
628
  try {
629
- (this.connection as { transport?: { close?(): void } }).transport?.close?.();
629
+ this.connection.shutdown("view_reattached");
630
630
  } catch {
631
631
  /* swallow */
632
632
  }
@@ -664,7 +664,7 @@ export class BrowserView {
664
664
  this.connectionGeneration += 1;
665
665
  if (this.connection) {
666
666
  try {
667
- (this.connection as { transport?: { close?(): void } }).transport?.close?.();
667
+ this.connection.shutdown("view_detached");
668
668
  } catch {
669
669
  /* swallow */
670
670
  }
@@ -1,4 +1,5 @@
1
1
  import { createCipheriv, createDecipheriv, randomBytes } from "node:crypto";
2
+ import type { CloseInfo } from "../rpc/peer";
2
3
  import type { BytesPipe } from "../rpc/transport";
3
4
 
4
5
  const VERSION = 1;
@@ -10,12 +11,16 @@ const HEADER_LENGTH = 1 + IV_LENGTH;
10
11
  export async function createEncryptedPipe(base: BytesPipe, rawKey: Uint8Array): Promise<BytesPipe> {
11
12
  let downstream: ((bytes: Uint8Array) => void) | undefined;
12
13
  let closed = false;
13
- const closeOnce = () => {
14
- if (!closed) {
15
- closed = true;
16
- base.close();
17
- }
14
+ let onCloseHandler: ((info?: CloseInfo) => void) | undefined;
15
+ // Report close (so the Connection tears down) for both a base disconnect and a
16
+ // local crypto/frame failure, then close the base transport.
17
+ const closeOnce = (info?: CloseInfo) => {
18
+ if (closed) return;
19
+ closed = true;
20
+ onCloseHandler?.(info);
21
+ base.close();
18
22
  };
23
+ base.onClose?.((info) => closeOnce(info));
19
24
 
20
25
  base.setReceive((frame) => {
21
26
  if (closed) return;
@@ -64,6 +69,9 @@ export async function createEncryptedPipe(base: BytesPipe, rawKey: Uint8Array):
64
69
  setReceive(handler) {
65
70
  downstream = handler;
66
71
  },
72
+ onClose(h) {
73
+ onCloseHandler = h;
74
+ },
67
75
  close() {
68
76
  closeOnce();
69
77
  },
@@ -23,7 +23,7 @@ function asBytes(message: unknown): Uint8Array {
23
23
 
24
24
  export function createBunWebSocketServerHandler<TData extends object>(
25
25
  onConnection: (ws: ServerWebSocket<TData>, pipe: BytesPipe) => void,
26
- onClose?: (ws: ServerWebSocket<TData>) => void,
26
+ onClose?: (ws: ServerWebSocket<TData>, code?: number, reason?: string) => void,
27
27
  ): WebSocketHandler<TData> {
28
28
  return {
29
29
  open(ws) {
@@ -47,10 +47,10 @@ export function createBunWebSocketServerHandler<TData extends object>(
47
47
  const slot = ws.data as TData & PipeSlot;
48
48
  slot._bunitePipe?.handler?.(asBytes(message));
49
49
  },
50
- close(ws) {
50
+ close(ws, code, reason) {
51
51
  const slot = ws.data as TData & PipeSlot;
52
52
  slot._bunitePipe = undefined;
53
- onClose?.(ws);
53
+ onClose?.(ws, code, reason);
54
54
  },
55
55
  };
56
56
  }
@@ -78,6 +78,7 @@ export function serveWeb<TData extends WsData = WsData>(
78
78
  opts: ServeWebOptions<TData> = {},
79
79
  ): WebRpcMount {
80
80
  const path = opts.path ?? DEFAULT_RPC_PATH;
81
+ const conns = new WeakMap<ServerWebSocket<TData>, Connection>();
81
82
  return {
82
83
  fetch(req, srv) {
83
84
  if (new URL(req.url).pathname !== path) return undefined;
@@ -87,25 +88,32 @@ export function serveWeb<TData extends WsData = WsData>(
87
88
  return upgraded ? undefined : new Response("WebSocket upgrade failed", { status: 400 });
88
89
  },
89
90
  websocket: {
90
- ...(createBunWebSocketServerHandler<TData>((ws, pipe) => {
91
- const wsData = ws.data;
92
- const origin = wsData?.origin ?? "";
93
- const conn = createConnection({
94
- transport: createFrameTransport(pipe),
95
- mode: "web",
96
- origin: origin || "web-client",
97
- attestation: {
98
- origin,
99
- topOrigin: origin,
100
- partition: "default",
101
- isAppRes: false,
102
- isMainFrame: true,
103
- userGesture: false,
104
- level: "untrusted",
105
- },
106
- });
107
- setup(conn, wsData);
108
- }) as unknown as WebRpcMount["websocket"]),
91
+ ...(createBunWebSocketServerHandler<TData>(
92
+ (ws, pipe) => {
93
+ const wsData = ws.data;
94
+ const origin = wsData?.origin ?? "";
95
+ const conn = createConnection({
96
+ transport: createFrameTransport(pipe),
97
+ mode: "web",
98
+ origin: origin || "web-client",
99
+ attestation: {
100
+ origin,
101
+ topOrigin: origin,
102
+ partition: "default",
103
+ isAppRes: false,
104
+ isMainFrame: true,
105
+ userGesture: false,
106
+ level: "untrusted",
107
+ },
108
+ });
109
+ conns.set(ws, conn);
110
+ setup(conn, wsData);
111
+ },
112
+ (ws, code, reason) => {
113
+ conns.get(ws)?.shutdown("ws_closed", { code, reason });
114
+ conns.delete(ws);
115
+ },
116
+ ) as unknown as WebRpcMount["websocket"]),
109
117
  maxPayloadLength: DEFAULT_MAX_BYTES,
110
118
  },
111
119
  };
@@ -1 +1 @@
1
- function A8(X){let $=new ArrayBuffer(X.byteLength);return new Uint8Array($).set(X),$}async function h0(X){return crypto.subtle.importKey("raw",A8(X),"AES-GCM",!1,["encrypt","decrypt"])}async function e8(X,$){let Q=await h0($),Z,H=Promise.resolve(),q=Promise.resolve(),G=!1,D=()=>{if(!G)G=!0,X.close()};return X.setReceive((_)=>{if(G)return;if(_.length<13||_[0]!==1){D();return}let M=A8(_.subarray(1,13)),T=A8(_.subarray(13));q=q.then(async()=>{if(G)return;try{let V=await crypto.subtle.decrypt({name:"AES-GCM",iv:M},Q,T);Z?.(new Uint8Array(V))}catch{D()}})}),{send(_){if(G)return;let M=A8(_);H=H.then(async()=>{if(G)return;try{let T=crypto.getRandomValues(new Uint8Array(12)),V=A8(T),j=await crypto.subtle.encrypt({name:"AES-GCM",iv:V},Q,M),k=new Uint8Array(j),v=new Uint8Array(13+k.byteLength);v[0]=1,v.set(T,1),v.set(k,13),X.send(v)}catch{D()}})},setReceive(_){Z=_},close(){D()}}}class P extends Error{code;details;retry;constructor(X){super(X.message??X.code);this.name="IpcError",this.code=X.code,this.details=X.details,this.retry=X.retry}toStatus(){return{code:this.code,message:this.message,details:this.details,retry:this.retry}}}var pX=Symbol.for("bunite.rpc.CallDef"),uX=Symbol.for("bunite.rpc.StreamDef"),lX=Symbol.for("bunite.rpc.CapDef"),dX=Symbol.for("bunite.rpc.CapRefToken"),cX=Symbol.for("bunite.rpc.CapArrayToken"),nX=Symbol.for("bunite.rpc.CapRecordToken"),m0=Symbol.for("bunite.rpc.Schema");function XX(X){return{[dX]:!0,cap:X}}XX.array=(X)=>({[cX]:!0,cap:X});XX.record=(X)=>({[nX]:!0,cap:X});var n=XX;function j8(X){return typeof X==="object"&&X!==null&&X[dX]===!0}function x8(X){return typeof X==="object"&&X!==null&&X[cX]===!0}function w8(X){return typeof X==="object"&&X!==null&&X[nX]===!0}function b8(X){return typeof X==="object"&&X!==null&&X[pX]===!0}function I8(X){return typeof X==="object"&&X!==null&&X[uX]===!0}function A(X){return{[pX]:!0,idempotent:!!X?.idempotent,returns:X?.returns}}function J8(X){return{[uX]:!0,hint:X?.hint}}function a(X,$,Q){return{[lX]:!0,name:X,version:Q?.version!=null?String(Q.version):void 0,methods:$,disposal:Q?.disposal??void 0}}function k8(X){return typeof X==="object"&&X!==null&&X[lX]===!0}function $X(X){return typeof X==="object"&&X!==null&&X[m0]===!0}var _8=a("bunite.BrowserWindow",{focus:A(),close:A(),setBounds:A(),setTitle:A(),id:A({idempotent:!0}),label:A({idempotent:!0}),minimize:A(),unminimize:A(),maximize:A(),unmaximize:A(),toggleMaximize:A(),getState:A({idempotent:!0}),stateWatch:J8(),beginMoveDrag:A()}),QX=a("bunite.Window",{create:A({returns:n(_8)}),list:A({returns:n.array(_8),idempotent:!0}),current:A({returns:n(_8),idempotent:!0}),focus:A(),close:A()}),y8=a("bunite.FileRef",{text:A({idempotent:!0}),bytes:A({idempotent:!0}),path:A({idempotent:!0}),revoke:A()},{disposal:{method:"revoke"}}),ZX=a("bunite.Dialogs",{openFile:A({returns:n.array(y8)}),saveFile:A({returns:n(y8)}),showMessage:A()}),HX=a("bunite.Clipboard",{readText:A({idempotent:!0}),writeText:A(),readBytes:A({idempotent:!0}),writeBytes:A()}),qX=a("bunite.Shell",{openExternal:A(),showItemInFolder:A()}),JX=a("bunite.PageReporting",{reportConsoleBatch:A()}),NX=a("bunite.Surface",{init:A(),resize:A(),remove:A(),setHidden:A(),setMasks:A(),setAllPassthrough:A(),bringAllVisiblesToFront:A(),navigate:A(),goBack:A(),reload:A(),evaluate:A(),capabilities:A(),click:A(),type:A(),press:A(),scroll:A(),mouse:A(),screenshot:A(),waitForSelector:A(),waitForFunction:A(),respondToDialog:A(),setDialogTimeout:A(),getConsoleBuffer:A({idempotent:!0}),surfaceEvents:J8(),dialogs:J8(),consoleEvents:J8(),getNavigationState:A({idempotent:!0}),accessibilitySnapshot:A(),getBoundingRect:A({idempotent:!0}),listFrames:A({idempotent:!0}),downloadEvents:J8(),waitForDownload:A(),setDownloadPolicy:A(),acceptPopup:A(),dismissPopup:A(),extendPopupTimeout:A(),resolveAndClick:A()}),z8=a("bunite.Runtime",{window:A({returns:n(QX),idempotent:!0}),dialogs:A({returns:n(ZX),idempotent:!0}),clipboard:A({returns:n(HX),idempotent:!0}),shell:A({returns:n(qX),idempotent:!0}),appName:A({idempotent:!0}),appVersion:A({idempotent:!0}),theme:A({idempotent:!0}),themeWatch:J8(),surface:A({returns:n(NX),idempotent:!0}),reporting:A({returns:n(JX),idempotent:!0}),popupMetrics:A({idempotent:!0})}),e={Runtime:1,Window:2,Dialogs:3,FileRef:4,Clipboard:5,Shell:6,BrowserWindow:7,Surface:8,PageReporting:9},g0=new Map([[z8,e.Runtime],[QX,e.Window],[ZX,e.Dialogs],[y8,e.FileRef],[HX,e.Clipboard],[qX,e.Shell],[_8,e.BrowserWindow],[NX,e.Surface],[JX,e.PageReporting]]);function GX(X){return g0.get(X)}var YX;try{YX=new TextDecoder}catch(X){}var O,s,J=0;var J0=[],DX=J0,FX=0,b={},C,N8,o=0,X8=0,p,H8,l=[],E,oX={useRecords:!1,mapsAsObjects:!0};class h8{}var UX=new h8;UX.name="MessagePack 0xC1";var G8=!1,sX=2,iX,aX,rX;class $8{constructor(X){if(X){if(X.useRecords===!1&&X.mapsAsObjects===void 0)X.mapsAsObjects=!0;if(X.sequential&&X.trusted!==!1){if(X.trusted=!0,!X.structures&&X.useRecords!=!1){if(X.structures=[],!X.maxSharedStructures)X.maxSharedStructures=0}}if(X.structures)X.structures.sharedLength=X.structures.length;else if(X.getStructures)(X.structures=[]).uninitialized=!0,X.structures.sharedLength=0;if(X.int64AsNumber)X.int64AsType="number"}Object.assign(this,X)}unpack(X,$){if(O)return D0(()=>{return v8(),this?this.unpack(X,$):$8.prototype.unpack.call(oX,X,$)});if(!X.buffer&&X.constructor===ArrayBuffer)X=typeof Buffer<"u"?Buffer.from(X):new Uint8Array(X);if(typeof $==="object")s=$.end||X.length,J=$.start||0;else J=0,s=$>-1?$:X.length;FX=0,X8=0,N8=null,DX=J0,p=null,O=X;try{E=X.dataView||(X.dataView=new DataView(X.buffer,X.byteOffset,X.byteLength))}catch(Q){if(O=null,X instanceof Uint8Array)throw Q;throw Error("Source must be a Uint8Array or Buffer but was a "+(X&&typeof X=="object"?X.constructor.name:typeof X))}if(this instanceof $8){if(b=this,this.structures)return C=this.structures,S8($);else if(!C||C.length>0)C=[]}else if(b=oX,!C||C.length>0)C=[];return S8($)}unpackMultiple(X,$){let Q,Z=0;try{G8=!0;let H=X.length,q=this?this.unpack(X,H):g8.unpack(X,H);if($){if($(q,Z,J)===!1)return;while(J<H)if(Z=J,$(S8(),Z,J)===!1)return}else{Q=[q];while(J<H)Z=J,Q.push(S8());return Q}}catch(H){throw H.lastPosition=Z,H.values=Q,H}finally{G8=!1,v8()}}_mergeStructures(X,$){if(aX)X=aX.call(this,X);if(X=X||[],Object.isFrozen(X))X=X.map((Q)=>Q.slice(0));for(let Q=0,Z=X.length;Q<Z;Q++){let H=X[Q];if(H){if(H.isShared=!0,Q>=32)H.highByte=Q-32>>5}}X.sharedLength=X.length;for(let Q in $||[])if(Q>=0){let Z=X[Q],H=$[Q];if(H){if(Z)(X.restoreStructures||(X.restoreStructures=[]))[Q]=Z;X[Q]=H}}return this.structures=X}decode(X,$){return this.unpack(X,$)}}function S8(X){try{if(!b.trusted&&!G8){let Q=C.sharedLength||0;if(Q<C.length)C.length=Q}let $;if(b.randomAccessStructure&&O[J]<64&&O[J]>=32&&iX){if($=iX(O,J,s,b),O=null,!(X&&X.lazy)&&$)$=$.toJSON();J=s}else $=h();if(p)J=p.postBundlePosition,p=null;if(G8)C.restoreStructures=null;if(J==s){if(C&&C.restoreStructures)tX();if(C=null,O=null,H8)H8=null}else if(J>s)throw Error("Unexpected end of MessagePack data");else if(!G8){let Q;try{Q=JSON.stringify($,(Z,H)=>typeof H==="bigint"?`${H}n`:H).slice(0,100)}catch(Z){Q="(JSON view not available "+Z+")"}throw Error("Data read, but end of buffer not reached "+Q)}return $}catch($){if(C&&C.restoreStructures)tX();if(v8(),$ instanceof RangeError||$.message.startsWith("Unexpected end of buffer")||J>s)$.incomplete=!0;throw $}}function tX(){for(let X in C.restoreStructures)C[X]=C.restoreStructures[X];C.restoreStructures=null}function h(){let X=O[J++];if(X<160)if(X<128)if(X<64)return X;else{let $=C[X&63]||b.getStructures&&N0()[X&63];if($){if(!$.read)$.read=OX($,X&63);return $.read()}else return X}else if(X<144)if(X-=128,b.mapsAsObjects){let $={};for(let Q=0;Q<X;Q++){let Z=K0();if(Z==="__proto__")Z="__proto_";$[Z]=h()}return $}else{let $=new Map;for(let Q=0;Q<X;Q++)$.set(h(),h());return $}else{X-=144;let $=Array(X);for(let Q=0;Q<X;Q++)$[Q]=h();if(b.freezeData)return Object.freeze($);return $}else if(X<192){let $=X-160;if(X8>=J)return N8.slice(J-o,(J+=$)-o);if(X8==0&&s<140){let Q=$<16?AX($):G0($);if(Q!=null)return Q}return LX($)}else{let $;switch(X){case 192:return null;case 193:if(p)if($=h(),$>0)return p[1].slice(p.position1,p.position1+=$);else return p[0].slice(p.position0,p.position0-=$);return UX;case 194:return!1;case 195:return!0;case 196:if($=O[J++],$===void 0)throw Error("Unexpected end of buffer");return KX($);case 197:return $=E.getUint16(J),J+=2,KX($);case 198:return $=E.getUint32(J),J+=4,KX($);case 199:return K8(O[J++]);case 200:return $=E.getUint16(J),J+=2,K8($);case 201:return $=E.getUint32(J),J+=4,K8($);case 202:if($=E.getFloat32(J),b.useFloat32>2){let Q=m8[(O[J]&127)<<1|O[J+1]>>7];return J+=4,(Q*$+($>0?0.5:-0.5)>>0)/Q}return J+=4,$;case 203:return $=E.getFloat64(J),J+=8,$;case 204:return O[J++];case 205:return $=E.getUint16(J),J+=2,$;case 206:return $=E.getUint32(J),J+=4,$;case 207:if(b.int64AsType==="number")$=E.getUint32(J)*4294967296,$+=E.getUint32(J+4);else if(b.int64AsType==="string")$=E.getBigUint64(J).toString();else if(b.int64AsType==="auto"){if($=E.getBigUint64(J),$<=BigInt(2)<<BigInt(52))$=Number($)}else $=E.getBigUint64(J);return J+=8,$;case 208:return E.getInt8(J++);case 209:return $=E.getInt16(J),J+=2,$;case 210:return $=E.getInt32(J),J+=4,$;case 211:if(b.int64AsType==="number")$=E.getInt32(J)*4294967296,$+=E.getUint32(J+4);else if(b.int64AsType==="string")$=E.getBigInt64(J).toString();else if(b.int64AsType==="auto"){if($=E.getBigInt64(J),$>=BigInt(-2)<<BigInt(52)&&$<=BigInt(2)<<BigInt(52))$=Number($)}else $=E.getBigInt64(J);return J+=8,$;case 212:if($=O[J++],$==114)return H0(O[J++]&63);else{let Q=l[$];if(Q)if(Q.read)return J++,Q.read(h());else if(Q.noBuffer)return J++,Q();else return Q(O.subarray(J,++J));else throw Error("Unknown extension "+$)}case 213:if($=O[J],$==114)return J++,H0(O[J++]&63,O[J++]);else return K8(2);case 214:return K8(4);case 215:return K8(8);case 216:return K8(16);case 217:if($=O[J++],X8>=J)return N8.slice(J-o,(J+=$)-o);return p0($);case 218:if($=E.getUint16(J),J+=2,X8>=J)return N8.slice(J-o,(J+=$)-o);return u0($);case 219:if($=E.getUint32(J),J+=4,X8>=J)return N8.slice(J-o,(J+=$)-o);return l0($);case 220:return $=E.getUint16(J),J+=2,X0($);case 221:return $=E.getUint32(J),J+=4,X0($);case 222:return $=E.getUint16(J),J+=2,$0($);case 223:return $=E.getUint32(J),J+=4,$0($);default:if(X>=224)return X-256;if(X===void 0){let Q=Error("Unexpected end of MessagePack data");throw Q.incomplete=!0,Q}throw Error("Unknown MessagePack token "+X)}}}var f0=/^[a-zA-Z_$][a-zA-Z\d_$]*$/;function OX(X,$){function Q(){if(Q.count++>sX){let H;try{H=X.read=Function("r","return function(){return "+(b.freezeData?"Object.freeze":"")+"({"+X.map((q)=>q==="__proto__"?"__proto_:r()":f0.test(q)?q+":r()":"["+JSON.stringify(q)+"]:r()").join(",")+"})}")(h)}catch(q){return sX=1/0,Q()}if(X.highByte===0)X.read=eX($,X.read);return H()}let Z={};for(let H=0,q=X.length;H<q;H++){let G=X[H];if(G==="__proto__")G="__proto_";Z[G]=h()}if(b.freezeData)return Object.freeze(Z);return Z}if(Q.count=0,X.highByte===0)return eX($,Q);return Q}var eX=(X,$)=>{return function(){let Q=O[J++];if(Q===0)return $();let Z=X<32?-(X+(Q<<5)):X+(Q<<5),H=C[Z]||N0()[Z];if(!H)throw Error("Record id is not defined for "+Z);if(!H.read)H.read=OX(H,X);return H.read()}};function N0(){let X=D0(()=>{return O=null,b.getStructures()});return C=b._mergeStructures(X,C)}var LX=M8,p0=M8,u0=M8,l0=M8;function M8(X){let $;if(X<16){if($=AX(X))return $}if(X>64&&YX)return YX.decode(O.subarray(J,J+=X));let Q=J+X,Z=[];$="";while(J<Q){let H=O[J++];if((H&128)===0)Z.push(H);else if((H&224)===192){let q=O[J++]&63,G=(H&31)<<6|q;if(G<128)Z.push(65533);else Z.push(G)}else if((H&240)===224){let q=O[J++]&63,G=O[J++]&63,D=(H&31)<<12|q<<6|G;if(D<2048||D>=55296&&D<=57343)Z.push(65533);else Z.push(D)}else if((H&248)===240){let q=O[J++]&63,G=O[J++]&63,D=O[J++]&63,_=(H&7)<<18|q<<12|G<<6|D;if(_<65536||_>1114111)Z.push(65533);else if(_>65535)_-=65536,Z.push(_>>>10&1023|55296),_=56320|_&1023,Z.push(_);else Z.push(_)}else Z.push(65533);if(Z.length>=4096)$+=f.apply(String,Z),Z.length=0}if(Z.length>0)$+=f.apply(String,Z);return $}function X0(X){let $=Array(X);for(let Q=0;Q<X;Q++)$[Q]=h();if(b.freezeData)return Object.freeze($);return $}function $0(X){if(b.mapsAsObjects){let $={};for(let Q=0;Q<X;Q++){let Z=K0();if(Z==="__proto__")Z="__proto_";$[Z]=h()}return $}else{let $=new Map;for(let Q=0;Q<X;Q++)$.set(h(),h());return $}}var f=String.fromCharCode;function G0(X){let $=J,Q=Array(X);for(let Z=0;Z<X;Z++){let H=O[J++];if((H&128)>0){J=$;return}Q[Z]=H}return f.apply(String,Q)}function AX(X){if(X<4)if(X<2)if(X===0)return"";else{let $=O[J++];if(($&128)>1){J-=1;return}return f($)}else{let $=O[J++],Q=O[J++];if(($&128)>0||(Q&128)>0){J-=2;return}if(X<3)return f($,Q);let Z=O[J++];if((Z&128)>0){J-=3;return}return f($,Q,Z)}else{let $=O[J++],Q=O[J++],Z=O[J++],H=O[J++];if(($&128)>0||(Q&128)>0||(Z&128)>0||(H&128)>0){J-=4;return}if(X<6)if(X===4)return f($,Q,Z,H);else{let q=O[J++];if((q&128)>0){J-=5;return}return f($,Q,Z,H,q)}else if(X<8){let q=O[J++],G=O[J++];if((q&128)>0||(G&128)>0){J-=6;return}if(X<7)return f($,Q,Z,H,q,G);let D=O[J++];if((D&128)>0){J-=7;return}return f($,Q,Z,H,q,G,D)}else{let q=O[J++],G=O[J++],D=O[J++],_=O[J++];if((q&128)>0||(G&128)>0||(D&128)>0||(_&128)>0){J-=8;return}if(X<10)if(X===8)return f($,Q,Z,H,q,G,D,_);else{let M=O[J++];if((M&128)>0){J-=9;return}return f($,Q,Z,H,q,G,D,_,M)}else if(X<12){let M=O[J++],T=O[J++];if((M&128)>0||(T&128)>0){J-=10;return}if(X<11)return f($,Q,Z,H,q,G,D,_,M,T);let V=O[J++];if((V&128)>0){J-=11;return}return f($,Q,Z,H,q,G,D,_,M,T,V)}else{let M=O[J++],T=O[J++],V=O[J++],j=O[J++];if((M&128)>0||(T&128)>0||(V&128)>0||(j&128)>0){J-=12;return}if(X<14)if(X===12)return f($,Q,Z,H,q,G,D,_,M,T,V,j);else{let k=O[J++];if((k&128)>0){J-=13;return}return f($,Q,Z,H,q,G,D,_,M,T,V,j,k)}else{let k=O[J++],v=O[J++];if((k&128)>0||(v&128)>0){J-=14;return}if(X<15)return f($,Q,Z,H,q,G,D,_,M,T,V,j,k,v);let u=O[J++];if((u&128)>0){J-=15;return}return f($,Q,Z,H,q,G,D,_,M,T,V,j,k,v,u)}}}}}function Q0(){let X=O[J++],$;if(X<192)$=X-160;else switch(X){case 217:$=O[J++];break;case 218:$=E.getUint16(J),J+=2;break;case 219:$=E.getUint32(J),J+=4;break;default:throw Error("Expected string")}return M8($)}function KX(X){return b.copyBuffers?Uint8Array.prototype.slice.call(O,J,J+=X):O.subarray(J,J+=X)}function K8(X){let $=O[J++];if(l[$]){let Q;return l[$](O.subarray(J,Q=J+=X),(Z)=>{J=Z;try{return h()}finally{J=Q}})}else throw Error("Unknown extension type "+$)}var Z0=Array(4096);function K0(){let X=O[J++];if(X>=160&&X<192){if(X=X-160,X8>=J)return N8.slice(J-o,(J+=X)-o);else if(!(X8==0&&s<180))return LX(X)}else return J--,Y0(h());let $=(X<<5^(X>1?E.getUint16(J):X>0?O[J]:0))&4095,Q=Z0[$],Z=J,H=J+X-3,q,G=0;if(Q&&Q.bytes==X){while(Z<H){if(q=E.getUint32(Z),q!=Q[G++]){Z=1879048192;break}Z+=4}H+=3;while(Z<H)if(q=O[Z++],q!=Q[G++]){Z=1879048192;break}if(Z===H)return J=Z,Q.string;H-=3,Z=J}Q=[],Z0[$]=Q,Q.bytes=X;while(Z<H)q=E.getUint32(Z),Q.push(q),Z+=4;H+=3;while(Z<H)q=O[Z++],Q.push(q);let D=X<16?AX(X):G0(X);if(D!=null)return Q.string=D;return Q.string=LX(X)}function Y0(X){if(typeof X==="string")return X;if(typeof X==="number"||typeof X==="boolean"||typeof X==="bigint")return X.toString();if(X==null)return X+"";if(b.allowArraysInMapKeys&&Array.isArray(X)&&X.flat().every(($)=>["string","number","boolean","bigint"].includes(typeof $)))return X.flat().toString();throw Error(`Invalid property type for record: ${typeof X}`)}var H0=(X,$)=>{let Q=h().map(Y0),Z=X;if($!==void 0)X=X<32?-(($<<5)+X):($<<5)+X,Q.highByte=$;let H=C[X];if(H&&(H.isShared||G8))(C.restoreStructures||(C.restoreStructures=[]))[X]=H;return C[X]=Q,Q.read=OX(Q,Z),Q.read()};l[0]=()=>{};l[0].noBuffer=!0;l[66]=(X)=>{let $=X.byteLength%8||8,Q=BigInt(X[0]&128?X[0]-256:X[0]);for(let Z=1;Z<$;Z++)Q<<=BigInt(8),Q+=BigInt(X[Z]);if(X.byteLength!==$){let Z=new DataView(X.buffer,X.byteOffset,X.byteLength),H=(q,G)=>{let D=G-q;if(D<=40){let V=Z.getBigUint64(q);for(let j=q+8;j<G;j+=8)V<<=BigInt(64),V|=Z.getBigUint64(j);return V}let _=q+(D>>4<<3),M=H(q,_),T=H(_,G);return M<<BigInt((G-_)*8)|T};Q=Q<<BigInt((Z.byteLength-$)*8)|H($,Z.byteLength)}return Q};var q0={Error,EvalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError,AggregateError:typeof AggregateError==="function"?AggregateError:null};l[101]=()=>{let X=h();if(!q0[X[0]]){let $=Error(X[1],{cause:X[2]});return $.name=X[0],$}return q0[X[0]](X[1],{cause:X[2]})};l[105]=(X)=>{if(b.structuredClone===!1)throw Error("Structured clone extension is disabled");let $=E.getUint32(J-4);if(!H8)H8=new Map;let Q=O[J],Z;if(Q>=144&&Q<160||Q==220||Q==221)Z=[];else if(Q>=128&&Q<144||Q==222||Q==223)Z=new Map;else if((Q>=199&&Q<=201||Q>=212&&Q<=216)&&O[J+1]===115)Z=new Set;else Z={};let H={target:Z};H8.set($,H);let q=h();if(!H.used)return H.target=q;else Object.assign(Z,q);if(Z instanceof Map)for(let[G,D]of q.entries())Z.set(G,D);if(Z instanceof Set)for(let G of Array.from(q))Z.add(G);return Z};l[112]=(X)=>{if(b.structuredClone===!1)throw Error("Structured clone extension is disabled");let $=E.getUint32(J-4),Q=H8.get($);return Q.used=!0,Q.target};l[115]=()=>new Set(h());var _X=["Int8","Uint8","Uint8Clamped","Int16","Uint16","Int32","Uint32","Float32","Float64","BigInt64","BigUint64"].map((X)=>X+"Array"),d0=typeof globalThis==="object"?globalThis:window;l[116]=(X)=>{let $=X[0],Q=Uint8Array.prototype.slice.call(X,1).buffer,Z=_X[$];if(!Z){if($===16)return Q;if($===17)return new DataView(Q);throw Error("Could not find typed array for code "+$)}return new d0[Z](Q)};l[120]=()=>{let X=h();return new RegExp(X[0],X[1])};var c0=[];l[98]=(X)=>{let $=(X[0]<<24)+(X[1]<<16)+(X[2]<<8)+X[3],Q=J;return J+=$-X.length,p=c0,p=[Q0(),Q0()],p.position0=0,p.position1=0,p.postBundlePosition=J,J=Q,h()};l[255]=(X)=>{if(X.length==4)return new Date((X[0]*16777216+(X[1]<<16)+(X[2]<<8)+X[3])*1000);else if(X.length==8)return new Date(((X[0]<<22)+(X[1]<<14)+(X[2]<<6)+(X[3]>>2))/1e6+((X[3]&3)*4294967296+X[4]*16777216+(X[5]<<16)+(X[6]<<8)+X[7])*1000);else if(X.length==12)return new Date(((X[0]<<24)+(X[1]<<16)+(X[2]<<8)+X[3])/1e6+((X[4]&128?-281474976710656:0)+X[6]*1099511627776+X[7]*4294967296+X[8]*16777216+(X[9]<<16)+(X[10]<<8)+X[11])*1000);else return new Date("invalid")};function D0(X){if(rX)rX();let $=s,Q=J,Z=FX,H=o,q=X8,G=N8,D=DX,_=H8,M=p,T=new Uint8Array(O.slice(0,s)),V=C,j=C.slice(0,C.length),k=b,v=G8,u=X();return s=$,J=Q,FX=Z,o=H,X8=q,N8=G,DX=D,H8=_,p=M,O=T,G8=v,C=V,C.splice(0,C.length,...j),b=k,E=new DataView(O.buffer,O.byteOffset,O.byteLength),u}function v8(){O=null,H8=null,C=null}function F0(X){if(X.unpack)l[X.type]=X.unpack;else l[X.type]=X}var m8=Array(147);for(let X=0;X<256;X++)m8[X]=+("1e"+Math.floor(45.15-X*0.30103));var g8=new $8({useRecords:!1}),n0=g8.unpack,o0=g8.unpackMultiple,s0=g8.unpack;var i0=new Float32Array(1),k$=new Uint8Array(i0.buffer,0,4);var p8;try{p8=new TextEncoder}catch(X){}var u8,l8,D8=typeof Buffer<"u",f8=D8?function(X){return Buffer.allocUnsafeSlow(X)}:Uint8Array,_0=D8?Buffer:Uint8Array,L0=D8?4294967296:2144337920,K,W8,I,N=0,d,S=null,a0,r0=21760,t0=/[\u0080-\uFFFF]/,Y8=Symbol("record-id");class F8 extends $8{constructor(X){super(X);this.offset=0;let $,Q,Z,H,q,G=_0.prototype.utf8Write?function(Y,z){return K.utf8Write(Y,z,K.byteLength-z)}:p8&&p8.encodeInto?function(Y,z){return p8.encodeInto(Y,K.subarray(z)).written}:!1,D=this;if(!X)X={};let _=X&&X.sequential,M=X.structures||X.saveStructures,T=X.maxSharedStructures;if(T==null)T=M?32:0;if(T>8160)throw Error("Maximum maxSharedStructure is 8160");if(X.structuredClone&&X.moreTypes==null)this.moreTypes=!0;let V=X.maxOwnStructures;if(V==null)V=M?32:64;if(!this.structures&&X.useRecords!=!1)this.structures=[];let j=T>32||V+T>64,k=T+64,v=T+V+64;if(v>8256)throw Error("Maximum maxSharedStructure + maxOwnStructure is 8192");let u=[],g=0,Q8=0;this.pack=this.encode=function(Y,z){if(!K)K=new f8(8192),I=K.dataView||(K.dataView=new DataView(K.buffer,0,8192)),N=0;if(d=K.length-10,d-N<2048)K=new f8(K.length),I=K.dataView||(K.dataView=new DataView(K.buffer,0,K.length)),d=K.length-10,N=0;else N=N+7&2147483640;if(Q=N,z&R0)N+=z&255;if(q=D.structuredClone?new Map:null,D.bundleStrings&&typeof Y!=="string")S=[],S.size=1/0;else S=null;if(H=D.structures,H){if(H.uninitialized)H=D._mergeStructures(D.getStructures());let F=H.sharedLength||0;if(F>T)throw Error("Shared structures is larger than maximum shared structures, try increasing maxSharedStructures to "+H.sharedLength);if(!H.transitions){H.transitions=Object.create(null);for(let L=0;L<F;L++){let R=H[L];if(!R)continue;let B,W=H.transitions;for(let x=0,w=R.length;x<w;x++){let t=R[x];if(B=W[t],!B)B=W[t]=Object.create(null);W=B}W[Y8]=L+64}this.lastNamedStructuresLength=F}if(!_)H.nextId=F+64}if(Z)Z=!1;let U;try{if(D.randomAccessStructure&&Y&&typeof Y==="object")if(Y.constructor===Object)fX(Y);else if(Y.constructor!==Map&&!Array.isArray(Y)&&!l8.some((L)=>Y instanceof L))fX(Y.toJSON?Y.toJSON():Y);else y(Y);else y(Y);let F=S;if(S)O0(Q,y,0);if(q&&q.idsToInsert){let L=q.idsToInsert.sort((x,w)=>x.offset>w.offset?1:-1),R=L.length,B=-1;while(F&&R>0){let x=L[--R].offset+Q;if(x<F.stringsPosition+Q&&B===-1)B=0;if(x>F.position+Q){if(B>=0)B+=6}else{if(B>=0)I.setUint32(F.position+Q,I.getUint32(F.position+Q)+B),B=-1;F=F.previous,R++}}if(B>=0&&F)I.setUint32(F.position+Q,I.getUint32(F.position+Q)+B);if(N+=L.length*6,N>d)Z8(N);D.offset=N;let W=e0(K.subarray(Q,N),L);return q=null,W}if(D.offset=N,z&M0)return K.start=Q,K.end=N,K;return K.subarray(Q,N)}catch(F){throw U=F,F}finally{if(H){if(E8(),Z&&D.saveStructures){let F=H.sharedLength||0,L=K.subarray(Q,N),R=X$(H,D);if(!U){if(D.saveStructures(R,R.isCompatible)===!1)return D.pack(Y,z);if(D.lastNamedStructuresLength=F,K.length>1073741824)K=null;return L}}}if(K.length>1073741824)K=null;if(z&W0)N=Q}};let E8=()=>{if(Q8<10)Q8++;let Y=H.sharedLength||0;if(H.length>Y&&!_)H.length=Y;if(g>1e4){if(H.transitions=null,Q8=0,g=0,u.length>0)u=[]}else if(u.length>0&&!_){for(let z=0,U=u.length;z<U;z++)u[z][Y8]=0;u=[]}},r8=(Y)=>{var z=Y.length;if(z<16)K[N++]=144|z;else if(z<65536)K[N++]=220,K[N++]=z>>8,K[N++]=z&255;else K[N++]=221,I.setUint32(N,z),N+=4;for(let U=0;U<z;U++)y(Y[U])},y=(Y)=>{if(N>d)K=Z8(N);var z=typeof Y,U;if(z==="string"){let F=Y.length;if(S&&F>=4&&F<4096){if((S.size+=F)>r0){let W,x=(S[0]?S[0].length*3+S[1].length:0)+10;if(N+x>d)K=Z8(N+x);let w;if(S.position)w=S,K[N]=200,N+=3,K[N++]=98,W=N-Q,N+=4,O0(Q,y,0),I.setUint16(W+Q-3,N-Q-W);else K[N++]=214,K[N++]=98,W=N-Q,N+=4;S=["",""],S.previous=w,S.size=0,S.position=W}let B=t0.test(Y);S[B?0:1]+=Y,K[N++]=193,y(B?-F:F);return}let L;if(F<32)L=1;else if(F<256)L=2;else if(F<65536)L=3;else L=5;let R=F*3;if(N+R>d)K=Z8(N+R);if(F<64||!G){let B,W,x,w=N+L;for(B=0;B<F;B++)if(W=Y.charCodeAt(B),W<128)K[w++]=W;else if(W<2048)K[w++]=W>>6|192,K[w++]=W&63|128;else if((W&64512)===55296&&((x=Y.charCodeAt(B+1))&64512)===56320)W=65536+((W&1023)<<10)+(x&1023),B++,K[w++]=W>>18|240,K[w++]=W>>12&63|128,K[w++]=W>>6&63|128,K[w++]=W&63|128;else K[w++]=W>>12|224,K[w++]=W>>6&63|128,K[w++]=W&63|128;U=w-N-L}else U=G(Y,N+L);if(U<32)K[N++]=160|U;else if(U<256){if(L<2)K.copyWithin(N+2,N+1,N+1+U);K[N++]=217,K[N++]=U}else if(U<65536){if(L<3)K.copyWithin(N+3,N+2,N+2+U);K[N++]=218,K[N++]=U>>8,K[N++]=U&255}else{if(L<5)K.copyWithin(N+5,N+3,N+3+U);K[N++]=219,I.setUint32(N,U),N+=4}N+=U}else if(z==="number")if(Y>>>0===Y)if(Y<32||Y<128&&this.useRecords===!1||Y<64&&!this.randomAccessStructure)K[N++]=Y;else if(Y<256)K[N++]=204,K[N++]=Y;else if(Y<65536)K[N++]=205,K[N++]=Y>>8,K[N++]=Y&255;else K[N++]=206,I.setUint32(N,Y),N+=4;else if(Y>>0===Y)if(Y>=-32)K[N++]=256+Y;else if(Y>=-128)K[N++]=208,K[N++]=Y+256;else if(Y>=-32768)K[N++]=209,I.setInt16(N,Y),N+=2;else K[N++]=210,I.setInt32(N,Y),N+=4;else{let F;if((F=this.useFloat32)>0&&Y<4294967296&&Y>=-2147483648){K[N++]=202,I.setFloat32(N,Y);let L;if(F<4||(L=Y*m8[(K[N]&127)<<1|K[N+1]>>7])>>0===L){N+=4;return}else N--}K[N++]=203,I.setFloat64(N,Y),N+=8}else if(z==="object"||z==="function")if(!Y)K[N++]=192;else{if(q){let L=q.get(Y);if(L){if(!L.id){let R=q.idsToInsert||(q.idsToInsert=[]);L.id=R.push(L)}K[N++]=214,K[N++]=112,I.setUint32(N,L.id),N+=4;return}else q.set(Y,{offset:N-Q})}let F=Y.constructor;if(F===Object)C8(Y);else if(F===Array)r8(Y);else if(F===Map)if(this.mapAsEmptyObject)K[N++]=128;else{if(U=Y.size,U<16)K[N++]=128|U;else if(U<65536)K[N++]=222,K[N++]=U>>8,K[N++]=U&255;else K[N++]=223,I.setUint32(N,U),N+=4;for(let[L,R]of Y)y(L),y(R)}else{for(let L=0,R=u8.length;L<R;L++){let B=l8[L];if(Y instanceof B){let W=u8[L];if(W.write){if(W.type)K[N++]=212,K[N++]=W.type,K[N++]=0;let O8=W.write.call(this,Y);if(O8===Y)if(Array.isArray(Y))r8(Y);else C8(Y);else y(O8);return}let x=K,w=I,t=N;K=null;let q8;try{q8=W.pack.call(this,Y,(O8)=>{if(K=x,x=null,N+=O8,N>d)Z8(N);return{target:K,targetView:I,position:N-O8}},y)}finally{if(x)K=x,I=w,N=t,d=K.length-10}if(q8){if(q8.length+N>d)Z8(q8.length+N);N=U0(q8,K,N,W.type)}return}}if(Array.isArray(Y))r8(Y);else{if(Y.toJSON){let L=Y.toJSON();if(L!==Y)return y(L)}if(z==="function")return y(this.writeFunction&&this.writeFunction(Y));C8(Y)}}}else if(z==="boolean")K[N++]=Y?195:194;else if(z==="bigint"){if(Y<9223372036854776000&&Y>=-9223372036854776000)K[N++]=211,I.setBigInt64(N,Y);else if(Y<18446744073709552000&&Y>0)K[N++]=207,I.setBigUint64(N,Y);else if(this.largeBigIntToFloat)K[N++]=203,I.setFloat64(N,Number(Y));else if(this.largeBigIntToString)return y(Y.toString());else if(this.useBigIntExtension||this.moreTypes){let F=Y<0?BigInt(-1):BigInt(0),L;if(Y>>BigInt(65536)===F){let R=BigInt(18446744073709552000)-BigInt(1),B=[];while(!0){if(B.push(Y&R),Y>>BigInt(63)===F)break;Y>>=BigInt(64)}L=new Uint8Array(new BigUint64Array(B).buffer),L.reverse()}else{let R=Y<0,B=(R?~Y:Y).toString(16);if(B.length%2)B="0"+B;else if(parseInt(B.charAt(0),16)>=8)B="00"+B;if(D8)L=Buffer.from(B,"hex");else{L=new Uint8Array(B.length/2);for(let W=0;W<L.length;W++)L[W]=parseInt(B.slice(W*2,W*2+2),16)}if(R)for(let W=0;W<L.length;W++)L[W]=~L[W]}if(L.length+N>d)Z8(L.length+N);N=U0(L,K,N,66);return}else throw RangeError(Y+" was too large to fit in MessagePack 64-bit integer format, use useBigIntExtension, or set largeBigIntToFloat to convert to float-64, or set largeBigIntToString to convert to string");N+=8}else if(z==="undefined")if(this.encodeUndefinedAsNil)K[N++]=192;else K[N++]=212,K[N++]=0,K[N++]=0;else throw Error("Unknown type: "+z)},vX=this.variableMapSize||this.coercibleKeyAsNumber||this.skipValues?(Y)=>{let z;if(this.skipValues){z=[];for(let L in Y)if((typeof Y.hasOwnProperty!=="function"||Y.hasOwnProperty(L))&&!this.skipValues.includes(Y[L]))z.push(L)}else z=Object.keys(Y);let U=z.length;if(U<16)K[N++]=128|U;else if(U<65536)K[N++]=222,K[N++]=U>>8,K[N++]=U&255;else K[N++]=223,I.setUint32(N,U),N+=4;let F;if(this.coercibleKeyAsNumber)for(let L=0;L<U;L++){F=z[L];let R=Number(F);y(isNaN(R)?F:R),y(Y[F])}else for(let L=0;L<U;L++)y(F=z[L]),y(Y[F])}:(Y)=>{K[N++]=222;let z=N-Q;N+=2;let U=0;for(let F in Y)if(typeof Y.hasOwnProperty!=="function"||Y.hasOwnProperty(F))y(F),y(Y[F]),U++;if(U>65535)throw Error('Object is too large to serialize with fast 16-bit map size, use the "variableMapSize" option to serialize this object');K[z+++Q]=U>>8,K[z+Q]=U&255},hX=this.useRecords===!1?vX:X.progressiveRecords&&!j?(Y)=>{let z,U=H.transitions||(H.transitions=Object.create(null)),F=N++-Q,L;for(let R in Y)if(typeof Y.hasOwnProperty!=="function"||Y.hasOwnProperty(R)){if(z=U[R],z)U=z;else{let B=Object.keys(Y),W=U;U=H.transitions;let x=0;for(let w=0,t=B.length;w<t;w++){let q8=B[w];if(z=U[q8],!z)z=U[q8]=Object.create(null),x++;U=z}if(F+Q+1==N)N--,t8(U,B,x);else gX(U,B,F,x);L=!0,U=W[R]}y(Y[R])}if(!L){let R=U[Y8];if(R)K[F+Q]=R;else gX(U,Object.keys(Y),F,0)}}:(Y)=>{let z,U=H.transitions||(H.transitions=Object.create(null)),F=0;for(let R in Y)if(typeof Y.hasOwnProperty!=="function"||Y.hasOwnProperty(R)){if(z=U[R],!z)z=U[R]=Object.create(null),F++;U=z}let L=U[Y8];if(L)if(L>=96&&j)K[N++]=((L-=96)&31)+96,K[N++]=L>>5;else K[N++]=L;else t8(U,U.__keys__||Object.keys(Y),F);for(let R in Y)if(typeof Y.hasOwnProperty!=="function"||Y.hasOwnProperty(R))y(Y[R])},mX=typeof this.useRecords=="function"&&this.useRecords,C8=mX?(Y)=>{mX(Y)?hX(Y):vX(Y)}:hX,Z8=(Y)=>{let z;if(Y>16777216){if(Y-Q>L0)throw Error("Packed buffer would be larger than maximum buffer size");z=Math.min(L0,Math.round(Math.max((Y-Q)*(Y>67108864?1.25:2),4194304)/4096)*4096)}else z=(Math.max(Y-Q<<2,K.length-1)>>12)+1<<12;let U=new f8(z);if(I=U.dataView||(U.dataView=new DataView(U.buffer,0,z)),Y=Math.min(Y,K.length),K.copy)K.copy(U,0,Q,Y);else U.set(K.slice(Q,Y));return N-=Q,Q=0,d=U.length-10,K=U},t8=(Y,z,U)=>{let F=H.nextId;if(!F)F=64;if(F<k&&this.shouldShareStructure&&!this.shouldShareStructure(z)){if(F=H.nextOwnId,!(F<v))F=k;H.nextOwnId=F+1}else{if(F>=v)F=k;H.nextId=F+1}let L=z.highByte=F>=96&&j?F-96>>5:-1;if(Y[Y8]=F,Y.__keys__=z,H[F-64]=z,F<k)if(z.isShared=!0,H.sharedLength=F-63,Z=!0,L>=0)K[N++]=(F&31)+96,K[N++]=L;else K[N++]=F;else{if(L>=0)K[N++]=213,K[N++]=114,K[N++]=(F&31)+96,K[N++]=L;else K[N++]=212,K[N++]=114,K[N++]=F;if(U)g+=Q8*U;if(u.length>=V)u.shift()[Y8]=0;u.push(Y),y(z)}},gX=(Y,z,U,F)=>{let L=K,R=N,B=d,W=Q;if(K=W8,N=0,Q=0,!K)W8=K=new f8(8192);d=K.length-10,t8(Y,z,F),W8=K;let x=N;if(K=L,N=R,d=B,Q=W,x>1){let w=N+x-1;if(w>d)Z8(w);let t=U+Q;K.copyWithin(t+x,t+1,N),K.set(W8.slice(0,x),t),N=w}else K[U+Q]=W8[0]},fX=(Y)=>{let z=a0(Y,K,Q,N,H,Z8,(U,F,L)=>{if(L)return Z=!0;N=F;let R=K;if(y(U),E8(),R!==K)return{position:N,targetView:I,target:K};return N},this);if(z===0)return C8(Y);N=z}}useBuffer(X){K=X,K.dataView||(K.dataView=new DataView(K.buffer,K.byteOffset,K.byteLength)),I=K.dataView,N=0}set position(X){N=X}get position(){return N}clearSharedData(){if(this.structures)this.structures=[];if(this.typedStructs)this.typedStructs=[]}}l8=[Date,Set,Error,RegExp,ArrayBuffer,Object.getPrototypeOf(Uint8Array.prototype).constructor,DataView,h8];u8=[{pack(X,$,Q){let Z=X.getTime()/1000;if((this.useTimestamp32||X.getMilliseconds()===0)&&Z>=0&&Z<4294967296){let{target:H,targetView:q,position:G}=$(6);H[G++]=214,H[G++]=255,q.setUint32(G,Z)}else if(Z>0&&Z<4294967296){let{target:H,targetView:q,position:G}=$(10);H[G++]=215,H[G++]=255,q.setUint32(G,X.getMilliseconds()*4000000+(Z/1000/4294967296>>0)),q.setUint32(G+4,Z)}else if(isNaN(Z)){if(this.onInvalidDate)return $(0),Q(this.onInvalidDate());let{target:H,targetView:q,position:G}=$(3);H[G++]=212,H[G++]=255,H[G++]=255}else{let{target:H,targetView:q,position:G}=$(15);H[G++]=199,H[G++]=12,H[G++]=255,q.setUint32(G,X.getMilliseconds()*1e6),q.setBigInt64(G+4,BigInt(Math.floor(Z)))}}},{pack(X,$,Q){if(this.setAsEmptyObject)return $(0),Q({});let Z=Array.from(X),{target:H,position:q}=$(this.moreTypes?3:0);if(this.moreTypes)H[q++]=212,H[q++]=115,H[q++]=0;Q(Z)}},{pack(X,$,Q){let{target:Z,position:H}=$(this.moreTypes?3:0);if(this.moreTypes)Z[H++]=212,Z[H++]=101,Z[H++]=0;Q([X.name,X.message,X.cause])}},{pack(X,$,Q){let{target:Z,position:H}=$(this.moreTypes?3:0);if(this.moreTypes)Z[H++]=212,Z[H++]=120,Z[H++]=0;Q([X.source,X.flags])}},{pack(X,$){if(this.moreTypes)zX(X,16,$);else MX(D8?Buffer.from(X):new Uint8Array(X),$)}},{pack(X,$){let Q=X.constructor;if(Q!==_0&&this.moreTypes)zX(X,_X.indexOf(Q.name),$);else MX(X,$)}},{pack(X,$){if(this.moreTypes)zX(X,17,$);else MX(D8?Buffer.from(X):new Uint8Array(X),$)}},{pack(X,$){let{target:Q,position:Z}=$(1);Q[Z]=193}}];function zX(X,$,Q,Z){let H=X.byteLength;if(H+1<256){var{target:q,position:G}=Q(4+H);q[G++]=199,q[G++]=H+1}else if(H+1<65536){var{target:q,position:G}=Q(5+H);q[G++]=200,q[G++]=H+1>>8,q[G++]=H+1&255}else{var{target:q,position:G,targetView:D}=Q(7+H);q[G++]=201,D.setUint32(G,H+1),G+=4}if(q[G++]=116,q[G++]=$,!X.buffer)X=new Uint8Array(X);q.set(new Uint8Array(X.buffer,X.byteOffset,X.byteLength),G)}function MX(X,$){let Q=X.byteLength;var Z,H;if(Q<256){var{target:Z,position:H}=$(Q+2);Z[H++]=196,Z[H++]=Q}else if(Q<65536){var{target:Z,position:H}=$(Q+3);Z[H++]=197,Z[H++]=Q>>8,Z[H++]=Q&255}else{var{target:Z,position:H,targetView:q}=$(Q+5);Z[H++]=198,q.setUint32(H,Q),H+=4}Z.set(X,H)}function U0(X,$,Q,Z){let H=X.length;switch(H){case 1:$[Q++]=212;break;case 2:$[Q++]=213;break;case 4:$[Q++]=214;break;case 8:$[Q++]=215;break;case 16:$[Q++]=216;break;default:if(H<256)$[Q++]=199,$[Q++]=H;else if(H<65536)$[Q++]=200,$[Q++]=H>>8,$[Q++]=H&255;else $[Q++]=201,$[Q++]=H>>24,$[Q++]=H>>16&255,$[Q++]=H>>8&255,$[Q++]=H&255}return $[Q++]=Z,$.set(X,Q),Q+=H,Q}function e0(X,$){let Q,Z=$.length*6,H=X.length-Z;while(Q=$.pop()){let{offset:q,id:G}=Q;X.copyWithin(q+Z,q,H),Z-=6;let D=q+Z;X[D++]=214,X[D++]=105,X[D++]=G>>24,X[D++]=G>>16&255,X[D++]=G>>8&255,X[D++]=G&255,H=q}return X}function O0(X,$,Q){if(S.length>0){I.setUint32(S.position+X,N+Q-S.position-X),S.stringsPosition=N-X;let Z=S;S=null,$(Z[0]),$(Z[1])}}function WX(X){if(X.Class){if(!X.pack&&!X.write)throw Error("Extension has no pack or write function");if(X.pack&&!X.type)throw Error("Extension has no type (numeric code to identify the extension)");l8.unshift(X.Class),u8.unshift(X)}F0(X)}function X$(X,$){return X.isCompatible=(Q)=>{let Z=!Q||($.lastNamedStructuresLength||0)===Q.length;if(!Z)$._mergeStructures(Q);return Z},X}var z0=new F8({useRecords:!1}),$$=z0.pack,Q$=z0.pack;var M0=512,W0=1024,R0=2048;var V0=80;class r{capId;constructor(X){this.capId=X}}var Z$=new Set(["hello","goaway","call","result","cancel","stream","drop","cap_revoked"]);function RX(X){if(typeof X!=="object"||X===null)return!1;let $=X,Q=$.op;if(typeof Q!=="string"||!Z$.has(Q))return!1;switch(Q){case"hello":return $.v===1&&($.mode==="native"||$.mode==="web")&&Array.isArray($.features)&&typeof $.maxBytes==="number"&&typeof $.origin==="string";case"goaway":return $.reason===void 0||typeof $.reason==="string";case"call":return typeof $.id==="number"&&typeof $.method==="string"&&typeof $.target==="object"&&$.target!==null&&$.target.kind==="cap"&&typeof $.target.id==="number";case"result":return typeof $.id==="number"&&($.ok===!0||$.ok===!1);case"cancel":return typeof $.id==="number";case"stream":return typeof $.id==="number"&&typeof $.ev==="string"&&($.ev==="next"||$.ev==="credit"||$.ev==="end"||$.ev==="error");case"drop":return Array.isArray($.caps);case"cap_revoked":if(!Array.isArray($.capIds))return!1;for(let Z of $.capIds)if(typeof Z!=="number"||!Number.isInteger(Z)||Z<0||Z>4294967295)return!1;return!0}}var B0=!1;function H$(){if(B0)return;B0=!0,WX({Class:r,type:V0,pack:(X)=>q$(X.capId),unpack:(X)=>new r(N$(X))})}function BX(){return H$(),{packr:new F8({useRecords:!0,sequential:!0,moreTypes:!0}),unpackr:new $8({useRecords:!0,sequential:!0,moreTypes:!0})}}function q$(X){let $=new Uint8Array(5),Q=X>>>0,Z=0;while(Q>=128)$[Z++]=Q&127|128,Q>>>=7;return $[Z++]=Q&127,$.subarray(0,Z)}var J$=5;function N$(X){let $=0,Q=0,Z=Math.min(X.length,J$);for(let H=0;H<Z;H++){let q=X[H];if($|=(q&127)<<Q,(q&128)===0)return $>>>0;Q+=7}throw Error("Truncated or oversize varuint")}var VX=67108864,TX=1,d8="bunite.",c8="bootstrap";var o8=0,CX=1,P0=0,E0=1,L8=2,jX=128,s8=1024,C0=1024,G$=s8*4,K$=500,Y$=32,D$=8,F$=1024;function L$(X){let $=X?.initialBudget;if(typeof $!=="number"||!Number.isFinite($)||!Number.isInteger($)||$<1)return Y$;return Math.min($,F$)}var n8=null;class xX{entries=new Map;nextCapId=L8;capLimit;constructor(X=s8){this.capLimit=X}install(X,$){if(this.entries.has(X))throw Error(`cap-id ${X} already installed`);let Q={capId:X,...$};return this.entries.set(X,Q),Q}allocate(X){if(this.entries.size>=this.capLimit)throw new P({code:"resource_exhausted",message:`cap-table limit ${this.capLimit}`,details:{reason:"max_caps_per_connection"}});let $=this.nextCapId++;while(this.entries.has($))$=this.nextCapId++;return this.install($,X)}get(X){return this.entries.get(X)}release(X,$=1){let Q=this.entries.get(X);if(!Q)return!1;if(Q.refCount=Math.max(0,Q.refCount-$),Q.refCount===0&&X>=L8)return this.entries.delete(X),!0;return!1}delete(X){if(X<L8)return!1;return this.entries.delete(X)}clear(){this.entries.clear(),this.nextCapId=L8}size(){return this.entries.size}values(){return this.entries.values()}}var U$={origin:"",topOrigin:"",partition:"default",isAppRes:!1,isMainFrame:!1,userGesture:!1,level:"untrusted"},j0=Symbol("bunite.rpc.ExportedCap"),T0=Symbol("bunite.rpc.CapProxyMeta");function O$(X){return typeof X==="object"&&X!==null&&X[j0]===!0}var A$=typeof FinalizationRegistry<"u"?new FinalizationRegistry((X)=>{if(X.dropped())return;let $=X.connRef.deref();if(!$||$.closed)return;$._dropFromFinalizer(X.capId)}):{register:()=>{}};class x0{transport;capTable;pending=new Map;clientStreams=new Map;serverStreams=new Map;serverCallChildren=new Map;serverActiveCalls=new Map;registry=new Map;rootInstances=new Map;revokedCapIds=new Set;closeHandlers=new Set;observers={};nextCallId=1;remoteHello=null;remoteReady;resolveRemoteReady;rejectRemoteReady;closed_=!1;maxBytes;maxInFlightCalls;mode;origin;features;attestation;peerId;policy;constructor(X){this.transport=X.transport,this.mode=X.mode,this.origin=X.origin,this.features=X.features??[],this.maxBytes=X.maxBytes??VX,this.maxInFlightCalls=X.maxInFlightCalls??C0,this.attestation=X.attestation??U$,this.peerId=X.peerId??"peer",this.policy=X.policy,this.capTable=new xX(X.capLimit??s8),this.capTable.install(o8,{typeId:P0,cap:null,impl:null,refCount:1}),this.capTable.install(CX,{typeId:E0,cap:z8,impl:X.runtime??null,refCount:1}),this.remoteReady=new Promise(($,Q)=>{this.resolveRemoteReady=$,this.rejectRemoteReady=Q}),this.remoteReady.catch(()=>{}),this.transport.setReceive(($)=>this.handleFrame($)),this.transport.send({op:"hello",v:TX,mode:this.mode,features:this.features,maxBytes:this.maxBytes,origin:this.origin})}get closed(){return this.closed_}onClose(X){return this.closeHandlers.add(X),()=>this.closeHandlers.delete(X)}on(X,$){let Q=this.observers[X];if(!Q)Q=new Set,this.observers[X]=Q;return Q.add($),()=>{Q.delete($)}}emitObs(X,$){let Q=this.observers[X];if(!Q||Q.size===0)return;for(let Z of Q)try{Z($)}catch{}}markRevoked(X){this.revokedCapIds.add(X);while(this.revokedCapIds.size>G$){let $=this.revokedCapIds.values().next().value;if($===void 0)break;this.revokedCapIds.delete($)}}serve(X,$,Q){this.assertNotFrameworkName(X.name);let Z=Q?.ifExists??"throw";if(this.registry.get(X.name))switch(Z){case"throw":throw new P({code:"already_exists",message:`cap "${X.name}" already served`,details:{reason:"name_collision"}});case"skip":return this.makeHandle([]);case"replace":return this.replace(X,$),this.makeHandle([X.name])}return this.registry.set(X.name,{cap:X,impl:$,version:X.version}),this.makeHandle([X.name])}makeHandle(X){let $={names:X,[Symbol.dispose]:()=>this.unserve($)};return $}serveAll(X,$,Q){let Z=Q?.ifExists??"throw";for(let q of Object.keys(X.roots)){let G=X.roots[q];this.assertNotFrameworkName(G.name);let D=this.registry.get(G.name);if(D){if(Z==="throw")throw new P({code:"already_exists",message:`cap "${G.name}" already served`,details:{reason:"name_collision"}});if(Z==="replace"&&D.version!==G.version)throw new P({code:"failed_precondition",message:`version mismatch on replace for "${G.name}" (current "${D.version}", new "${G.version}")`,details:{reason:"version_mismatch"}})}}let H=[];for(let q of Object.keys(X.roots)){let G=X.roots[q],D=$[q];if(this.serve(G,D,{ifExists:Z}).names.length>0)H.push(G.name)}return this.makeHandle(H)}unserve(X){let $=k8(X)?[X.name]:Array.from(X.names),Q=[];for(let Z of $){if(!this.registry.delete(Z))continue;let H=this.rootInstances.get(Z);if(H!==void 0){let q=this.capTable.get(H);if(q)this.invokeServerDisposal(q);this.rootInstances.delete(Z),this.capTable.delete(H),Q.push(H)}}if(Q.length>0)this.transport.send({op:"cap_revoked",capIds:Q}),this.emitObs("revoke",{capIds:Q,reason:"unserve"})}replace(X,$){let Q=this.registry.get(X.name);if(!Q)throw new P({code:"not_found",message:`cap "${X.name}" not served`});if(Q.version!==X.version)throw new P({code:"failed_precondition",message:`version mismatch (current "${Q.version}", new "${X.version}")`,details:{reason:"version_mismatch"}});Q.impl=$,Q.cap=X;let Z=this.rootInstances.get(X.name);if(Z!==void 0){let H=this.capTable.get(Z);if(H)H.impl=$,H.cap=X}this.emitObs("revoke",{capIds:Z!==void 0?[Z]:[],reason:"replace"})}assertNotFrameworkName(X){if(X.startsWith(d8))throw new P({code:"already_exists",message:`cap name "${X}" uses reserved prefix "${d8}"`,details:{reason:"reserved_namespace"}})}runtimeProxy=null;runtime(){if(!this.runtimeProxy)this.runtimeProxy=this.makeCapProxy(z8,CX);return this.runtimeProxy}async bootstrap(X){if(k8(X))return this._bootstrapCap(X);if($X(X))return this._bootstrapSchema(X);throw new P({code:"invalid_argument",message:"bootstrap target must be CapDef or Schema"})}async _bootstrapCap(X){await this.remoteReady;let $={name:X.name};if(X.version!=null)$.version=X.version;let Q=await this.sendCallTyped(o8,c8,$,void 0);if(!(Q instanceof r))throw new P({code:"invalid_argument",message:"bootstrap did not return a CapRef"});return this.makeCapProxy(X,Q.capId)}async _bootstrapSchema(X){let $=Object.keys(X.roots),Q=await Promise.allSettled($.map((q)=>this._bootstrapCap(X.roots[q]))),Z=Q.find((q)=>q.status==="rejected");if(Z){for(let q of Q)if(q.status==="fulfilled")try{this.releaseRef(q.value)}catch{}throw Z.reason}let H={};for(let q=0;q<$.length;q++)H[$[q]]=Q[q].value;return H}handleFrame(X){if(this.closed_)return;switch(X.op){case"hello":this.handleHello(X);return;case"call":this.handleCall(X);return;case"result":this.handleResult(X);return;case"cancel":this.handleCancel(X);return;case"stream":this.handleStreamFrame(X);return;case"drop":this.handleDrop(X);return;case"cap_revoked":this.handleCapRevoked(X);return;case"goaway":this.handleGoaway(X);return;default:this.handleUnknownFrame(X);return}}handleUnknownFrame(X){let $=X?.id;if(typeof $==="number"){this.transport.send({op:"result",id:$,ok:!1,error:{code:"invalid_argument",message:"unknown opcode"}});return}this.transport.send({op:"goaway",reason:"invalid_argument",error:{code:"invalid_argument",message:"unknown opcode"}}),this.shutdown("invalid_argument")}handleHello(X){this.remoteHello=X,this.resolveRemoteReady(X)}handleGoaway(X){this.rejectRemoteReady(new P(X.error??{code:"unavailable",message:X.reason??"peer goaway"})),this.shutdown(X.reason??"remote goaway")}handleCapRevoked(X){for(let $ of X.capIds){this.markRevoked($);let Q=new P({code:"failed_precondition",message:"cap revoked",details:{reason:"revoked"}});for(let[Z,H]of this.pending)if(H.capId===$){if(this.pending.delete(Z),H.timer)clearTimeout(H.timer);H.reject(Q)}for(let[Z,H]of this.clientStreams)if(H.capId===$)this.clientStreams.delete(Z),H.fail(Q)}}async handleCall(X){if(X.target.id===o8&&X.method===c8){await this.handleBootstrap(X);return}let $=this.capTable.get(X.target.id);if(!$)return this.emitObs("call",{capId:X.target.id,method:X.method,callId:X.id,result:"not_found"}),this.sendError(X.id,"not_found",`cap-id ${X.target.id} not found`);let Q=$.cap;if(!Q||!$.impl)return this.emitObs("call",{capId:X.target.id,method:X.method,callId:X.id,result:"not_found"}),this.sendError(X.id,"not_found","cap has no impl");let Z=Q.methods[X.method];if(!Z)return this.emitObs("call",{capId:X.target.id,capName:Q.name,method:X.method,callId:X.id,result:"not_found"}),this.sendError(X.id,"not_found",`method "${X.method}" on cap "${Q.name}"`);let H=$.impl[X.method];if(typeof H!=="function")return this.emitObs("call",{capId:X.target.id,capName:Q.name,method:X.method,callId:X.id,result:"not_found"}),this.sendError(X.id,"not_found",`method "${X.method}" has no handler`);if(this.serverActiveCalls.size+this.serverStreams.size>=this.maxInFlightCalls)return this.emitObs("call",{capId:X.target.id,capName:Q.name,method:X.method,callId:X.id,result:"resource_exhausted"}),this.sendError(X.id,"resource_exhausted",`in-flight calls limit ${this.maxInFlightCalls}`,{reason:"max_concurrent_calls"});await this.invokeServerMethod(X,Q,Z,H)}async handleBootstrap(X){let $=X.args??{},Q=$.name;if(typeof Q!=="string")return this.emitObs("bootstrap",{name:String(Q),attestation:this.attestation,result:"invalid_argument"}),this.sendError(X.id,"invalid_argument","bootstrap requires {name: string}");let Z=$.version!=null?String($.version):void 0,H=this.registry.get(Q);if(!H)return this.emitObs("bootstrap",{name:Q,version:Z,attestation:this.attestation,result:"not_found"}),this.sendError(X.id,"not_found",`cap "${Q}" not served`);let q=H.version;if(q!=null&&Z!=null&&q!==Z)return this.emitObs("bootstrap",{name:Q,version:Z,attestation:this.attestation,result:"version_mismatch"}),this.sendError(X.id,"failed_precondition",`version mismatch (server "${q}", client "${Z}")`,{reason:"version_mismatch"});if(this.policy){let D;try{D=await this.policy(Q,this.attestation)}catch(_){return this.emitObs("error",{phase:"policy",error:_ instanceof Error?_:Error(String(_))}),this.emitObs("bootstrap",{name:Q,version:Z,attestation:this.attestation,result:"internal"}),this.sendError(X.id,"internal","policy threw")}if(typeof D!=="boolean")return this.emitObs("error",{phase:"policy",error:Error(`policy must return boolean (got ${typeof D})`)}),this.emitObs("bootstrap",{name:Q,version:Z,attestation:this.attestation,result:"internal"}),this.sendError(X.id,"internal","policy returned non-boolean");if(!D)return this.emitObs("bootstrap",{name:Q,version:Z,attestation:this.attestation,result:"denied"}),this.sendError(X.id,"failed_precondition","policy denied",{reason:"unauthorized"})}let G=this.rootInstances.get(Q);if(G!==void 0){let D=this.capTable.get(G);if(D)D.refCount+=1;else this.rootInstances.delete(Q),G=void 0}if(G===void 0)try{G=this.capTable.allocate({typeId:GX(H.cap)??jX,cap:H.cap,impl:H.impl,refCount:1}).capId,this.rootInstances.set(Q,G)}catch(D){if(D instanceof P){let _=D.code==="resource_exhausted"?"resource_exhausted":"internal";return this.emitObs("bootstrap",{name:Q,version:Z,attestation:this.attestation,result:_}),this.sendError(X.id,D.code,D.message,D.details)}throw D}this.emitObs("bootstrap",{name:Q,version:Z,attestation:this.attestation,result:"ok",capId:G}),this.transport.send({op:"result",id:X.id,ok:!0,value:new r(G)})}async invokeServerMethod(X,$,Q,Z){let H=this.makeCallCtx(X);if(I8(Q)){let q=L$(Q.hint);try{let G=()=>Z(X.args,H),D=n8,M=(D?()=>D.run({callId:X.id},G):G)();this.runServerStream(X.id,M,H,q,$,X.method,X.target.id)}catch(G){this.emitObs("stream",{capId:X.target.id,capName:$.name,method:X.method,callId:X.id,event:"error"}),this.transport.send({op:"stream",id:X.id,ev:"error",error:PX(G)})}return}if(b8(Q)){let q=performance.now(),G=Q.idempotent?void 0:this.armServerDeadline(X,H);this.serverActiveCalls.set(X.id,{ctrl:H._ctrl,capId:X.target.id,capName:$.name,method:X.method,startedAt:q});let D=_$(Q.returns),_=()=>Promise.resolve(Z(X.args,H)),M=n8,T=M?()=>M.run({callId:X.id},_):_;try{let V=await T();if(G)clearTimeout(G);if(!this.serverActiveCalls.delete(X.id))return;let j=D(V);this.transport.send({op:"result",id:X.id,ok:!0,value:j}),this.emitObs("call",{capId:X.target.id,capName:$.name,method:X.method,callId:X.id,durationMs:performance.now()-q,result:"ok"})}catch(V){if(G)clearTimeout(G);if(!this.serverActiveCalls.delete(X.id))return;let j=PX(V);this.sendErrorFromStatus(X.id,j),this.emitObs("call",{capId:X.target.id,capName:$.name,method:X.method,callId:X.id,durationMs:performance.now()-q,result:j.code})}return}this.sendError(X.id,"not_found","unknown method kind")}armServerDeadline(X,$){let Q=X.meta?.deadlineMs;if(!Q)return;return setTimeout(()=>{$._ctrl.abort()},Q)}makeCallCtx(X){let $=new AbortController;return{callId:X.id,peerId:this.peerId,attestation:this.attestation,signal:$.signal,deadline:X.meta?.deadlineMs,_ctrl:$,exportCap:(Z,H)=>this.exportCap(Z,H)}}exportCap(X,$){let Q=GX(X)??jX,Z=this.capTable.allocate({typeId:Q,cap:X,impl:$,refCount:1});return{[j0]:!0,cap:X,capId:Z.capId,typeId:Z.typeId}}runServerStream(X,$,Q,Z,H,q,G){let D=$[Symbol.asyncIterator](),_=Q._ctrl,M={iter:D,abort:_,cancelled:!1,credit:Z,creditWaker:null,capId:G,capName:H.name,method:q,callId:X,count:0};this.serverStreams.set(X,M),this.emitObs("stream",{capId:G,capName:H.name,method:q,callId:X,event:"start"});let T=()=>{if(M.credit>0||M.cancelled)return Promise.resolve();return new Promise((j)=>{M.creditWaker=j})};(async()=>{let j=!1;try{while(!M.cancelled){if(M.credit===0)await T();if(M.cancelled)break;let{done:k,value:v}=await D.next();if(k)break;if(M.cancelled)break;M.credit-=1,M.count+=1,this.transport.send({op:"stream",id:X,ev:"next",value:v})}}catch(k){j=!0,this.transport.send({op:"stream",id:X,ev:"error",error:PX(k)}),this.emitObs("stream",{capId:G,capName:H.name,method:q,callId:X,event:"error",count:M.count})}finally{if(!j)this.transport.send({op:"stream",id:X,ev:"end"}),this.emitObs("stream",{capId:G,capName:H.name,method:q,callId:X,event:M.cancelled?"cancel":"end",count:M.count});this.serverStreams.delete(X)}})()}handleResult(X){let $=this.pending.get(X.id);if($){if(this.pending.delete(X.id),this.serverCallChildren.delete(X.id),$.timer)clearTimeout($.timer);if(X.ok){let Z=$.decodeReturn?$.decodeReturn(X.value):X.value;$.resolve(Z)}else $.reject(new P(X.error));return}let Q=this.clientStreams.get(X.id);if(Q){this.clientStreams.delete(X.id);let Z=X.ok?new P({code:"invalid_argument",message:"stream method returned result frame"}):new P(X.error);Q.fail(Z)}}handleCancel(X){let $=this.serverStreams.get(X.id);if($)$.cancelled=!0,$.abort.abort(),$.iter?.return?.(),this.serverStreams.delete(X.id);let Q=this.serverActiveCalls.get(X.id);if(Q)this.serverActiveCalls.delete(X.id),Q.ctrl.abort(),this.transport.send({op:"result",id:X.id,ok:!1,error:{code:"cancelled",message:X.reason}}),this.emitObs("call",{capId:Q.capId,capName:Q.capName,method:Q.method,callId:X.id,durationMs:performance.now()-Q.startedAt,result:"cancelled"});for(let[Z,H]of this.serverCallChildren){if(H.parentId!==X.id)continue;if(this.serverCallChildren.delete(Z),this.pending.has(Z))this.transport.send({op:"cancel",id:Z,reason:X.reason})}}releaseRef(X){if(typeof X!=="object"||X===null)return;let $=X[T0];if(!$||$.dropped)return;$.dropped=!0,this.sendDrop($.capId)}sendDrop(X){if(this.closed_)return;if(X<L8)return;this.transport.send({op:"drop",caps:[{id:X,delta:1}]})}handleStreamFrame(X){if(X.ev==="credit"){let Q=this.serverStreams.get(X.id);if(!Q)return;Q.credit+=X.credit?.messages??0;let Z=Q.creditWaker;Q.creditWaker=null,Z?.();return}let $=this.clientStreams.get(X.id);if(!$)return;switch(X.ev){case"next":$.push(X.value);return;case"end":$.end(),this.clientStreams.delete(X.id);return;case"error":$.fail(new P(X.error)),this.clientStreams.delete(X.id);return}}handleDrop(X){for(let{id:$,delta:Q}of X.caps)if(this.capTable.release($,Q)){for(let[H,q]of this.rootInstances)if(q===$){this.rootInstances.delete(H);break}}}sendError(X,$,Q,Z){let H={code:$,message:Q};if(Z!==void 0)H.details=Z;this.transport.send({op:"result",id:X,ok:!1,error:H})}sendErrorFromStatus(X,$){this.transport.send({op:"result",id:X,ok:!1,error:$})}nextId(){return this.nextCallId++}sendCallTyped(X,$,Q,Z,H,q){if(this.closed_)return Promise.reject(new P({code:"unavailable",message:"connection closed"}));if(this.revokedCapIds.has(X))return Promise.reject(new P({code:"failed_precondition",message:"cap revoked",details:{reason:"revoked"}}));if(this.pending.size>=this.maxInFlightCalls)return Promise.reject(new P({code:"resource_exhausted",message:`in-flight calls limit ${this.maxInFlightCalls}`,details:{reason:"max_concurrent_calls"}}));let G=this.nextId();return new Promise((D,_)=>{let M=new AbortController,T={resolve:D,reject:_,abort:M,decodeReturn:Z,startedAt:performance.now(),capId:X,method:$,capName:q,kind:"call"};if(H?.deadlineMs)T.timer=setTimeout(()=>{if(this.pending.delete(G))this.transport.send({op:"cancel",id:G,reason:"deadline_exceeded"}),_(new P({code:"deadline_exceeded"}))},H.deadlineMs+K$);this.pending.set(G,T);let V=H;if(V?.parentCallId===void 0&&n8){let j=n8.getStore();if(j)V={...V??{},parentCallId:j.callId}}if(V?.parentCallId!==void 0)this.serverCallChildren.set(G,{parentId:V.parentCallId});this.transport.send({op:"call",id:G,target:{kind:"cap",id:X},method:$,args:Q,meta:V})})}openClientStream(X,$,Q,Z,H){if(this.closed_){let M=EX(X,0,()=>{},()=>{});return M.fail(new P({code:"unavailable",message:"connection closed"})),M.stream}if(this.revokedCapIds.has(X)){let M=EX(X,0,()=>{},()=>{});return M.fail(new P({code:"failed_precondition",message:"cap revoked",details:{reason:"revoked"}})),M.stream}let q=this.nextId(),_=EX(X,q,()=>{if(this.clientStreams.delete(q))this.transport.send({op:"cancel",id:q,reason:"client_cancel"})},(M)=>{if(this.closed_||!this.clientStreams.has(q))return;this.transport.send({op:"stream",id:q,ev:"credit",credit:{messages:M}})});return this.clientStreams.set(q,_),this.transport.send({op:"call",id:q,target:{kind:"cap",id:X},method:$,args:Q,meta:Z}),_.stream}makeCapProxy(X,$){let Q={},Z={capId:$,dropped:!1};Q[T0]=Z;let H=()=>{if(Z.dropped)return;Z.dropped=!0,this.sendDrop($)};for(let G of Object.keys(X.methods)){let D=X.methods[G];if(I8(D))Q[G]=(_)=>this.openClientStream($,G,_,void 0,X.name);else if(b8(D)){let _=z$(D.returns,(M,T)=>this.makeCapProxy(M,T));Q[G]=(M)=>this.sendCallTyped($,G,M,_,void 0,X.name)}}let q=X.disposal;if(q)Q[Symbol.dispose]=()=>{try{let G=Q[q.method]?.();if(G&&typeof G.then==="function")G.catch((D)=>this.emitObs("error",{phase:"dispose",error:D instanceof Error?D:Error(String(D))}))}catch(G){this.emitObs("error",{phase:"dispose",error:G instanceof Error?G:Error(String(G))})}H()};if(typeof FinalizationRegistry<"u")A$.register(Q,{connRef:new WeakRef(this),capId:$,dropped:()=>Z.dropped});return Q}_dropFromFinalizer(X){try{this.sendDrop(X)}catch{}}shutdown(X="shutdown"){if(this.closed_)return;this.closed_=!0;for(let $ of this.pending.values()){if($.timer)clearTimeout($.timer);$.reject(new P({code:"unavailable",message:X}))}this.pending.clear();for(let $ of this.clientStreams.values())$.fail(new P({code:"unavailable",message:X}));this.clientStreams.clear();for(let $ of this.serverStreams.values())$.cancelled=!0,$.abort.abort(),$.iter?.return?.();this.serverStreams.clear();for(let $ of this.serverActiveCalls.values())$.ctrl.abort();this.serverActiveCalls.clear();for(let $ of this.capTable.values())this.invokeServerDisposal($);if(this.capTable.clear(),!this.remoteHello)this.rejectRemoteReady(new P({code:"unavailable",message:X}));for(let $ of this.closeHandlers)try{$()}catch{}this.closeHandlers.clear();try{this.transport.close()}catch{}}invokeServerDisposal(X){let $=X.cap;if(!$)return;let Q=$.disposal;if(!Q)return;let Z=X.impl,H=Z?.[Q.method];if(!H)return;try{H.call(Z,void 0,void 0)}catch{}}}function _$(X){if(!X)return(Q)=>Q;let $=(Q,Z)=>{if(!O$(Q))throw new P({code:"failed_precondition",message:"expected ctx.exportCap return for cap method",details:{reason:"unregistered_cap_return"}});if(Q.cap!==Z)throw new P({code:"failed_precondition",message:"exported cap type mismatch with method returns",details:{reason:"unregistered_cap_return"}});return new r(Q.capId)};if(j8(X))return(Q)=>$(Q,X.cap);if(x8(X))return(Q)=>{if(!Array.isArray(Q))throw new P({code:"invalid_argument",message:"expected ExportedCap[] for cap.array method"});return Q.map((Z)=>$(Z,X.cap))};if(w8(X))return(Q)=>{if(!Q||typeof Q!=="object")throw new P({code:"invalid_argument",message:"expected Record<string, ExportedCap> for cap.record method"});let Z={};for(let H of Object.keys(Q))Z[H]=$(Q[H],X.cap);return Z};return(Q)=>Q}function z$(X,$){if(!X)return;if(j8(X)){let Q=X.cap;return(Z)=>{if(!(Z instanceof r))throw new P({code:"invalid_argument",message:"expected CapRef"});return $(Q,Z.capId)}}if(x8(X)){let Q=X.cap,Z=Q.disposal;return(H)=>{if(!Array.isArray(H))throw new P({code:"invalid_argument",message:"expected array"});let q=H.map((G)=>{if(!(G instanceof r))throw new P({code:"invalid_argument",message:"expected CapRef in array"});return $(Q,G.capId)});return M$(q,Z),q}}if(w8(X)){let Q=X.cap;return(Z)=>{if(!Z||typeof Z!=="object")throw new P({code:"invalid_argument",message:"expected record"});let H={};for(let q of Object.keys(Z)){let G=Z[q];if(!(G instanceof r))throw new P({code:"invalid_argument",message:"expected CapRef in record"});H[q]=$(Q,G.capId)}return H}}return}function M$(X,$){if(!$)return;X[Symbol.dispose]=()=>{for(let Q of X)Q[Symbol.dispose]?.call(Q)}}function PX(X){if(X instanceof P)return X.toStatus();if(X instanceof Error)return{code:"internal",message:X.message};return{code:"internal",message:String(X)}}function EX(X,$,Q,Z){let H=[],q=[],G=!1,D=null,_=!1,M=0;function T(){if(M+=1,M>=D$)Z(M),M=0}function V(){if(H.length>0){let g=H.shift();return T(),{value:g,done:!1}}if(D)return null;if(G||_)return{value:void 0,done:!0};return null}function j(){let g=V();if(g)return Promise.resolve(g);if(D)return Promise.reject(D);return new Promise((Q8,E8)=>q.push({resolve:Q8,reject:E8}))}function k(){while(q.length>0){let g=q.shift(),Q8=V();if(Q8){g.resolve(Q8);continue}if(D){g.reject(D);continue}q.unshift(g);break}}function v(){if(_||G||D)return;_=!0,Q(),k()}let u={[Symbol.asyncIterator]:()=>({next:j,return:()=>{return v(),Promise.resolve({value:void 0,done:!0})},throw:(g)=>{return v(),Promise.reject(g)}}),[Symbol.dispose]:v,cancel:v};return{capId:X,stream:u,push(g){if(_||G||D)return;H.push(g),k()},end(){G=!0,k()},fail(g){D=g,k()}}}function wX(X){return new x0(X)}class W${buffer=[];waiters=[];ctrl=new AbortController;cleanup;ended=!1;failure=null;constructor(X){let $=(Q)=>{if(this.ended||this.failure)return;let Z=this.waiters.shift();if(Z){Z.resolve({value:Q,done:!1});return}this.buffer.push(Q)};try{let Q=X($,this.ctrl.signal);if(typeof Q==="function")this.cleanup=Q}catch(Q){this.failure=Q}}[Symbol.asyncIterator](){return{next:async()=>{if(this.buffer.length>0)return{value:this.buffer.shift(),done:!1};if(this.failure)throw this.failure;if(this.ended)return{value:void 0,done:!0};return new Promise((X,$)=>this.waiters.push({resolve:X,reject:$}))},return:async()=>{return this.dispose(),{value:void 0,done:!0}}}}cancel(){this.dispose()}[Symbol.dispose](){this.dispose()}dispose(){if(this.ended)return;this.ended=!0,this.ctrl.abort();try{this.cleanup?.()}catch{}while(this.waiters.length>0)this.waiters.shift().resolve({value:void 0,done:!0})}}function bX(X,$={}){let Q=BX(),Z;return X.setReceive((H)=>{let q;try{q=Q.unpackr.unpack(H)}catch(G){$.onProtocolError?.(`unpack failed: ${G instanceof Error?G.message:String(G)}`),X.close();return}if(!RX(q)){$.onProtocolError?.("malformed frame"),X.close();return}Z?.(q)}),{send(H){let q=Q.packr.pack(H);X.send(q instanceof Uint8Array?q:new Uint8Array(q))},setReceive(H){Z=H},close(){X.close()}}}function IX(X){if("binaryType"in X)try{X.binaryType="arraybuffer"}catch{}let $,Q=(Z)=>{if(!$)return;let H=Z.data;if(H instanceof Uint8Array){$(H);return}if(H instanceof ArrayBuffer){$(new Uint8Array(H));return}if(typeof Blob<"u"&&H instanceof Blob){H.arrayBuffer().then((q)=>$?.(new Uint8Array(q)));return}};return X.addEventListener("message",Q),{send(Z){X.send(Z)},setReceive(Z){$=Z},close(){X.removeEventListener?.("message",Q),X.close?.()}}}var kX=null;function R8(){if(!kX)kX=host.runtime().then((X)=>X.surface());return kX}function c(X){return R8().then(X).catch(($)=>{if(globalThis.__BUNITE_DEBUG__)console.warn("[bunite] surface call failed",$);return})}function m(X){return R8().then(X)}class w0{element;onBoundsChange;observer=null;rafId=0;lastRect={x:0,y:0,width:0,height:0};dirty=!1;stopped=!1;constructor(X,$){this.element=X,this.onBoundsChange=$}start(){this.observer=new ResizeObserver(()=>this.markDirty()),this.observer.observe(this.element),this.scheduleFrame()}stop(){if(this.stopped=!0,this.observer?.disconnect(),this.observer=null,this.rafId)cancelAnimationFrame(this.rafId),this.rafId=0}markDirty(){this.dirty=!0}scheduleFrame(){if(this.stopped)return;this.rafId=requestAnimationFrame(()=>{this.flush(),this.scheduleFrame()})}flush(){let X=window.devicePixelRatio||1,$=this.element.getBoundingClientRect(),Q={x:Math.round($.x*X),y:Math.round($.y*X),width:Math.round($.width*X),height:Math.round($.height*X)};if(!this.dirty&&Q.x===this.lastRect.x&&Q.y===this.lastRect.y&&Q.width===this.lastRect.width&&Q.height===this.lastRect.height)return;this.dirty=!1,this.lastRect=Q,this.onBoundsChange(Q)}}class b0 extends HTMLElement{static observedAttributes=["src"];_surfaceId=null;_syncCtrl=null;_initPromise=null;_aborted=!1;_pendingSrc=null;_syncHidden=!1;_userHidden=!1;_layoutObserver=null;_unsubNavigate=null;_activeStreams=[];connectedCallback(){this._aborted=!1,this._syncHidden=!1,this._userHidden=!1;let X=new AbortController;this._unsubNavigate=()=>X.abort(),(async()=>{try{let $=await R8();if(X.signal.aborted)return;await this._waitForSurfaceId(X.signal);let Q=this._surfaceId;if(X.signal.aborted||Q==null)return;let Z=$.surfaceEvents({surfaceId:Q});this._activeStreams.push(Z);let H=$.downloadEvents({surfaceId:Q});this._activeStreams.push(H),(async()=>{try{for await(let q of H){if(X.signal.aborted)break;this.dispatchEvent(new CustomEvent("download-event",{detail:q}))}}catch{}})();for await(let q of Z){if(X.signal.aborted)break;this.dispatchEvent(new CustomEvent("surface-event",{detail:q}))}}catch($){if(globalThis.__BUNITE_DEBUG__)console.warn("[bunite] surfaceEvents stream failed",$)}})(),this._waitForLayout()}async _waitForSurfaceId(X){while(this._surfaceId==null&&!X.aborted){let $=this._initPromise;if($)try{await $}catch{return}else await new Promise((Q)=>setTimeout(Q,16))}}_waitForLayout(){if(this._layoutObserver)return;let X=()=>{if(!this.isConnected||this._aborted)return!0;let $=this.getBoundingClientRect();if($.width>0&&$.height>0){if(this.getAttribute("src")||this._pendingSrc||"")this.initSurface();return!0}return!1};requestAnimationFrame(()=>{if(X())return;this._layoutObserver=new ResizeObserver(()=>{if(X())this._layoutObserver?.disconnect(),this._layoutObserver=null}),this._layoutObserver.observe(this)})}disconnectedCallback(){this._aborted=!0,this._unsubNavigate?.(),this._unsubNavigate=null;for(let X of this._activeStreams)try{X.cancel?.()}catch{}if(this._activeStreams=[],this._layoutObserver?.disconnect(),this._layoutObserver=null,this._syncCtrl?.stop(),this._syncCtrl=null,this._surfaceId!=null){let X=this._surfaceId;this._surfaceId=null,c(($)=>$.remove({surfaceId:X}))}else if(this._initPromise)this._initPromise.then((X)=>{c(($)=>$.remove({surfaceId:X.surfaceId}))}).catch(()=>{});this._initPromise=null}attributeChangedCallback(X,$,Q){if(X!=="src")return;if(this._surfaceId!=null){let Z=this._surfaceId;c((H)=>H.navigate({surfaceId:Z,url:Q||""}))}else if(this._initPromise)this._pendingSrc=Q||"";else if(this.isConnected&&!this._aborted&&Q)this._waitForLayout()}setHidden(X){this._userHidden=X,this._applySurfaceHidden()}goBack(){let X=this._surfaceId;if(X!=null)c(($)=>$.goBack({surfaceId:X}))}reload(){let X=this._surfaceId;if(X!=null)c(($)=>$.reload({surfaceId:X}))}navigate(X){this.setAttribute("src",X)}async evaluate(X,$){let Q=this._surfaceId;if(Q==null)return{ok:!1,code:"not_supported",message:"surface not ready"};return m((Z)=>Z.evaluate({surfaceId:Q,script:X,frameId:$?.frameId}))}async capabilities(){let X=this._surfaceId;if(X==null)return{evaluate:!1,crossOriginEval:!1,surfaceEvents:!1,nativeInputTrusted:!1,click:!1,type:!1,press:!1,scroll:!1,mouse:!1,dialogs:!1,console:!1,screenshot:!1,accessibilitySnapshot:!1,getBoundingRect:!1,frames:!1,downloads:!1,popups:!1,resolveAndClick:!1};return m(($)=>$.capabilities({surfaceId:X}))}async sendClick(X){let $=this._surfaceId;if($==null)return;await m((Q)=>Q.click({surfaceId:$,...X}))}async sendType(X){let $=this._surfaceId;if($==null)return;await m((Q)=>Q.type({surfaceId:$,text:X}))}async sendPress(X,$,Q){let Z=this._surfaceId;if(Z==null)return;await m((H)=>H.press({surfaceId:Z,key:X,modifiers:$,action:Q}))}async sendScroll(X){let $=this._surfaceId;if($==null)return;await m((Q)=>Q.scroll({surfaceId:$,...X}))}async sendMouse(X){let $=this._surfaceId;if($==null)return;await m((Q)=>Q.mouse({surfaceId:$,...X}))}async respondToDialog(X,$,Q){let Z=this._surfaceId;if(Z==null)return;await m((H)=>H.respondToDialog({surfaceId:Z,requestId:X,accept:$,text:Q}))}async setDialogTimeout(X){let $=this._surfaceId;if($==null)return;await m((Q)=>Q.setDialogTimeout({surfaceId:$,ms:X}))}async waitForSelector(X,$){let Q=this._surfaceId;if(Q==null)return{ok:!1,code:"runtime_error",message:"surface not ready"};return m((Z)=>Z.waitForSelector({surfaceId:Q,selector:X,timeoutMs:$}))}async waitForFunction(X,$){let Q=this._surfaceId;if(Q==null)return{ok:!1,code:"runtime_error",message:"surface not ready"};return m((Z)=>Z.waitForFunction({surfaceId:Q,expression:X,...$}))}async getConsoleBuffer(X){let $=this._surfaceId;if($==null)return[];return await m((Q)=>Q.getConsoleBuffer({surfaceId:$,clear:X?.clear}))??[]}async getNavigationState(){let X=this._surfaceId;if(X==null)return{lastLoadEpoch:0,isLoading:!1,currentUrl:""};return m(($)=>$.getNavigationState({surfaceId:X}))}async accessibilitySnapshot(X){let $=this._surfaceId;if($==null)return{ok:!1,code:"not_supported",message:"surface not ready"};return m((Q)=>Q.accessibilitySnapshot({surfaceId:$,interestingOnly:X?.interestingOnly}))}async getBoundingRect(X,$){let Q=this._surfaceId;if(Q==null)return{ok:!1,code:"runtime_error",message:"surface not ready"};return m((Z)=>Z.getBoundingRect({surfaceId:Q,selector:X,frameId:$?.frameId}))}async listFrames(){let X=this._surfaceId;if(X==null)return{ok:!1,code:"not_supported",message:"surface not ready"};return m(($)=>$.listFrames({surfaceId:X}))}async resolveAndClick(X,$){let Q=this._surfaceId;if(Q==null)return{ok:!1,code:"runtime_error",message:"surface not ready"};return m((Z)=>Z.resolveAndClick({surfaceId:Q,selector:X,...$}))}async setDownloadPolicy(X,$){let Q=this._surfaceId;if(Q==null)return;await c((Z)=>Z.setDownloadPolicy({surfaceId:Q,policy:X,downloadDir:$}))}async waitForDownload(X){let $=this._surfaceId;if($==null)return{ok:!1,code:"not_supported",message:"surface not ready"};return m((Q)=>Q.waitForDownload({surfaceId:$,timeoutMs:X?.timeoutMs}))}async dismissPopup(X){await c(($)=>$.dismissPopup({newSurfaceId:X}))}async extendAdoptionTimeout(X,$){return m((Q)=>Q.extendPopupTimeout({newSurfaceId:X,gracePeriodMs:$}))}async screenshot(X){let $=this._surfaceId;if($==null)return{ok:!1,code:"not_supported",message:"surface not ready"};return m((Q)=>Q.screenshot({surfaceId:$,...X}))}_applySurfaceHidden(){let X=this._surfaceId;if(X==null)return;let $=this._userHidden||this._syncHidden;c((Q)=>Q.setHidden({surfaceId:X,hidden:$}))}_setupSyncCtrl(){this._syncCtrl=new w0(this,(X)=>{let $=this._surfaceId;if($==null)return;if(X.width===0&&X.height===0){if(!this._syncHidden)this._syncHidden=!0,this._applySurfaceHidden();return}if(this._syncHidden)this._syncHidden=!1,this._applySurfaceHidden();c((Z)=>Z.resize({surfaceId:$,x:X.x,y:X.y,w:X.width,h:X.height}))}),this._syncCtrl.start()}initSurface(){if(this._surfaceId!=null||this._initPromise!=null)return;let X=window.devicePixelRatio||1,$=this.getBoundingClientRect(),Q=this.getAttribute("adopt-popup-id"),Z=Q?Number(Q):NaN;if(Number.isFinite(Z)){let G=R8().then(async(D)=>{let _=await D.acceptPopup({newSurfaceId:Z,hostViewId:__buniteWebviewId,bounds:{x:Math.round($.x*X),y:Math.round($.y*X),width:Math.round($.width*X),height:Math.round($.height*X)}});if(!_.ok)throw Error(`acceptPopup failed: ${_.code}: ${_.message}`);return{surfaceId:Z}});this._initPromise=G,G.then((D)=>{if(this._initPromise!==G)return;if(this._aborted){c((_)=>_.remove({surfaceId:D.surfaceId}));return}this._surfaceId=D.surfaceId,this._setupSyncCtrl()}).catch((D)=>{if(globalThis.__BUNITE_DEBUG__)console.warn("[bunite] adopt-popup-id init failed",D);this._initPromise=null});return}let H=this._pendingSrc||this.getAttribute("src")||"";this._pendingSrc=null;let q=R8().then((G)=>G.init({src:H,x:Math.round($.x*X),y:Math.round($.y*X),width:Math.round($.width*X),height:Math.round($.height*X),hidden:this._userHidden}));this._initPromise=q,q.then((G)=>{if(this._initPromise!==q)return;if(this._aborted){c((D)=>D.remove({surfaceId:G.surfaceId}));return}if(this._surfaceId=G.surfaceId,this._userHidden)this._applySurfaceHidden();if(this._pendingSrc!=null){let D=this._pendingSrc;this._pendingSrc=null;let _=this._surfaceId;if(_!=null)c((M)=>M.navigate({surfaceId:_,url:D}))}this._setupSyncCtrl()}).catch(()=>{}).finally(()=>{if(this._initPromise===q)this._initPromise=null})}}if(typeof customElements<"u"){customElements.define("bunite-webview",b0);let X=()=>{c(($)=>$.bringAllVisiblesToFront())};document.addEventListener("pointerdown",X,!0),document.addEventListener("dragstart",()=>{c(($)=>$.setAllPassthrough({passthrough:!0}))},!0),document.addEventListener("dragend",()=>{c(($)=>$.setAllPassthrough({passthrough:!1})),X()},!0)}var yX=null,B8=null;function a8(){if(yX)return Promise.resolve(yX);if(B8)return B8;let X=(async()=>{let $=new WebSocket(`ws://localhost:${__buniteRpcSocketPort}/rpc?webviewId=${__buniteWebviewId}`);$.binaryType="arraybuffer",await new Promise((q,G)=>{$.addEventListener("open",()=>q(),{once:!0}),$.addEventListener("error",()=>G(Error("bunite preload ws connect failed")),{once:!0})});let Q=Uint8Array.from(atob(__buniteSecretKeyBase64),(q)=>q.charCodeAt(0)),Z=await e8(IX($),Q),H=wX({transport:bX(Z),mode:"native",origin:location.origin});return yX=H,H})();return B8=X,X.catch(()=>{if(B8===X)B8=null}),X}var i=window;i.__bunite??={};i.__buniteWebviewId=__buniteWebviewId;i.__buniteRpcSocketPort=__buniteRpcSocketPort;i.host??={};i.host.bootstrap=async(X)=>{return(await a8()).bootstrap(X)};i.host.runtime=async()=>(await a8()).runtime();i.host.releaseRef=async(X)=>{(await a8()).releaseRef(X)};i.host.getConnection=()=>a8();var S0=Symbol.for("bunite.console.buffer"),I0=200,R$=16,B$=50;i[S0]=[];var i8=i[S0];function V$(X){if(typeof X==="string")return X;if(X instanceof Error)return X.stack??X.message;try{return JSON.stringify(X)}catch{return String(X)}}var U8=null,k0=0,T$=1000;function P$(){if(U8)return U8;if(Date.now()<k0)return Promise.reject(Error("reporting cap cooldown"));return U8=(async()=>{return(await i.host.runtime()).reporting()})(),U8.catch(()=>{U8=null,k0=Date.now()+T$}),U8}var T8=[],P8=null;function y0(){if(P8)clearTimeout(P8),P8=null;if(T8.length===0)return;let X=T8;T8=[],P$().then(($)=>$.reportConsoleBatch({entries:X})).catch(()=>{})}function E$(){if(T8.length>=B$){y0();return}if(P8)return;P8=setTimeout(y0,R$)}function C$(){for(let X of["log","warn","error","info","debug"]){let $=console[X].bind(console);console[X]=(...Q)=>{try{$(...Q)}catch{}try{let Z={level:X,args:Q.map(V$),ts:Date.now()};if(i8.push(Z),i8.length>I0)i8.splice(0,i8.length-I0);T8.push(Z),E$()}catch{}}}}C$();var V8=null;function SX(){if(!V8)V8=(async()=>{return await(await(await i.host.runtime()).window()).current()})(),V8.catch(()=>{V8=null});return V8}function v0(X){let $=X instanceof Element?X:null;while($){if($.hasAttribute("data-bunite-no-drag"))return!1;if($.hasAttribute("data-bunite-drag-region"))return!0;$=$.parentElement}return!1}SX();document.addEventListener("mousedown",(X)=>{if(X.button!==0||window.self!==window.top||!v0(X.target))return;SX().then(($)=>$.beginMoveDrag()).catch(()=>{})},!0);document.addEventListener("dblclick",(X)=>{if(X.button!==0||window.self!==window.top||!v0(X.target))return;SX().then(($)=>$.toggleMaximize()).catch(()=>{})},!0);
1
+ function UX(X){let Q=new ArrayBuffer(X.byteLength);return new Uint8Array(Q).set(X),Q}async function hQ(X){return crypto.subtle.importKey("raw",UX(X),"AES-GCM",!1,["encrypt","decrypt"])}async function X0(X,Q){let $=await hQ(Q),Z,H=Promise.resolve(),J=Promise.resolve(),N=!1,D,L=(z)=>{if(N)return;N=!0,D?.(z),X.close()};return X.onClose?.((z)=>L(z)),X.setReceive((z)=>{if(N)return;if(z.length<13||z[0]!==1){L();return}let R=UX(z.subarray(1,13)),V=UX(z.subarray(13));J=J.then(async()=>{if(N)return;try{let E=await crypto.subtle.decrypt({name:"AES-GCM",iv:R},$,V);Z?.(new Uint8Array(E))}catch{L()}})}),{send(z){if(N)return;let R=UX(z);H=H.then(async()=>{if(N)return;try{let V=crypto.getRandomValues(new Uint8Array(12)),E=UX(V),k=await crypto.subtle.encrypt({name:"AES-GCM",iv:E},$,R),g=new Uint8Array(k),v=new Uint8Array(13+g.byteLength);v[0]=1,v.set(V,1),v.set(g,13),X.send(v)}catch{L()}})},setReceive(z){Z=z},onClose(z){D=z},close(){L()}}}class P extends Error{code;details;retry;constructor(X){super(X.message??X.code);this.name="IpcError",this.code=X.code,this.details=X.details,this.retry=X.retry}toStatus(){return{code:this.code,message:this.message,details:this.details,retry:this.retry}}}var p0=Symbol.for("bunite.rpc.CallDef"),u0=Symbol.for("bunite.rpc.StreamDef"),l0=Symbol.for("bunite.rpc.CapDef"),d0=Symbol.for("bunite.rpc.CapRefToken"),c0=Symbol.for("bunite.rpc.CapArrayToken"),n0=Symbol.for("bunite.rpc.CapRecordToken"),mQ=Symbol.for("bunite.rpc.Schema");function Q0(X){return{[d0]:!0,cap:X}}Q0.array=(X)=>({[c0]:!0,cap:X});Q0.record=(X)=>({[n0]:!0,cap:X});var n=Q0;function xX(X){return typeof X==="object"&&X!==null&&X[d0]===!0}function wX(X){return typeof X==="object"&&X!==null&&X[c0]===!0}function bX(X){return typeof X==="object"&&X!==null&&X[n0]===!0}function IX(X){return typeof X==="object"&&X!==null&&X[p0]===!0}function kX(X){return typeof X==="object"&&X!==null&&X[u0]===!0}function M(X){return{[p0]:!0,idempotent:!!X?.idempotent,returns:X?.returns}}function JX(X){return{[u0]:!0,hint:X?.hint}}function a(X,Q,$){return{[l0]:!0,name:X,version:$?.version!=null?String($.version):void 0,methods:Q,disposal:$?.disposal??void 0}}function yX(X){return typeof X==="object"&&X!==null&&X[l0]===!0}function $0(X){return typeof X==="object"&&X!==null&&X[mQ]===!0}var MX=a("bunite.BrowserWindow",{focus:M(),close:M(),setBounds:M(),setTitle:M(),id:M({idempotent:!0}),label:M({idempotent:!0}),minimize:M(),unminimize:M(),maximize:M(),unmaximize:M(),toggleMaximize:M(),getState:M({idempotent:!0}),stateWatch:JX(),beginMoveDrag:M()}),Z0=a("bunite.Window",{create:M({returns:n(MX)}),list:M({returns:n.array(MX),idempotent:!0}),current:M({returns:n(MX),idempotent:!0}),focus:M(),close:M()}),SX=a("bunite.FileRef",{text:M({idempotent:!0}),bytes:M({idempotent:!0}),path:M({idempotent:!0}),revoke:M()},{disposal:{method:"revoke"}}),H0=a("bunite.Dialogs",{openFile:M({returns:n.array(SX)}),saveFile:M({returns:n(SX)}),showMessage:M()}),q0=a("bunite.Clipboard",{readText:M({idempotent:!0}),writeText:M(),readBytes:M({idempotent:!0}),writeBytes:M()}),J0=a("bunite.Shell",{openExternal:M(),showItemInFolder:M()}),G0=a("bunite.PageReporting",{reportConsoleBatch:M()}),N0=a("bunite.Surface",{init:M(),resize:M(),remove:M(),setHidden:M(),setMasks:M(),setAllPassthrough:M(),bringAllVisiblesToFront:M(),navigate:M(),goBack:M(),reload:M(),evaluate:M(),capabilities:M(),click:M(),type:M(),press:M(),scroll:M(),mouse:M(),screenshot:M(),waitForSelector:M(),waitForFunction:M(),respondToDialog:M(),setDialogTimeout:M(),getConsoleBuffer:M({idempotent:!0}),surfaceEvents:JX(),dialogs:JX(),consoleEvents:JX(),getNavigationState:M({idempotent:!0}),accessibilitySnapshot:M(),getBoundingRect:M({idempotent:!0}),listFrames:M({idempotent:!0}),downloadEvents:JX(),waitForDownload:M(),setDownloadPolicy:M(),acceptPopup:M(),dismissPopup:M(),extendPopupTimeout:M(),resolveAndClick:M()}),WX=a("bunite.Runtime",{window:M({returns:n(Z0),idempotent:!0}),dialogs:M({returns:n(H0),idempotent:!0}),clipboard:M({returns:n(q0),idempotent:!0}),shell:M({returns:n(J0),idempotent:!0}),appName:M({idempotent:!0}),appVersion:M({idempotent:!0}),theme:M({idempotent:!0}),themeWatch:JX(),surface:M({returns:n(N0),idempotent:!0}),reporting:M({returns:n(G0),idempotent:!0}),popupMetrics:M({idempotent:!0})}),e={Runtime:1,Window:2,Dialogs:3,FileRef:4,Clipboard:5,Shell:6,BrowserWindow:7,Surface:8,PageReporting:9},gQ=new Map([[WX,e.Runtime],[Z0,e.Window],[H0,e.Dialogs],[SX,e.FileRef],[q0,e.Clipboard],[J0,e.Shell],[MX,e.BrowserWindow],[N0,e.Surface],[G0,e.PageReporting]]);function K0(X){return gQ.get(X)}var D0;try{D0=new TextDecoder}catch(X){}var U,o,q=0;var JQ=[],O0=JQ,F0=0,b={},C,GX,s=0,XX=0,u,HX,l=[],j,s0={useRecords:!1,mapsAsObjects:!0};class mX{}var z0=new mX;z0.name="MessagePack 0xC1";var NX=!1,o0=2,i0,a0,r0;class QX{constructor(X){if(X){if(X.useRecords===!1&&X.mapsAsObjects===void 0)X.mapsAsObjects=!0;if(X.sequential&&X.trusted!==!1){if(X.trusted=!0,!X.structures&&X.useRecords!=!1){if(X.structures=[],!X.maxSharedStructures)X.maxSharedStructures=0}}if(X.structures)X.structures.sharedLength=X.structures.length;else if(X.getStructures)(X.structures=[]).uninitialized=!0,X.structures.sharedLength=0;if(X.int64AsNumber)X.int64AsType="number"}Object.assign(this,X)}unpack(X,Q){if(U)return DQ(()=>{return hX(),this?this.unpack(X,Q):QX.prototype.unpack.call(s0,X,Q)});if(!X.buffer&&X.constructor===ArrayBuffer)X=typeof Buffer<"u"?Buffer.from(X):new Uint8Array(X);if(typeof Q==="object")o=Q.end||X.length,q=Q.start||0;else q=0,o=Q>-1?Q:X.length;F0=0,XX=0,GX=null,O0=JQ,u=null,U=X;try{j=X.dataView||(X.dataView=new DataView(X.buffer,X.byteOffset,X.byteLength))}catch($){if(U=null,X instanceof Uint8Array)throw $;throw Error("Source must be a Uint8Array or Buffer but was a "+(X&&typeof X=="object"?X.constructor.name:typeof X))}if(this instanceof QX){if(b=this,this.structures)return C=this.structures,vX(Q);else if(!C||C.length>0)C=[]}else if(b=s0,!C||C.length>0)C=[];return vX(Q)}unpackMultiple(X,Q){let $,Z=0;try{NX=!0;let H=X.length,J=this?this.unpack(X,H):fX.unpack(X,H);if(Q){if(Q(J,Z,q)===!1)return;while(q<H)if(Z=q,Q(vX(),Z,q)===!1)return}else{$=[J];while(q<H)Z=q,$.push(vX());return $}}catch(H){throw H.lastPosition=Z,H.values=$,H}finally{NX=!1,hX()}}_mergeStructures(X,Q){if(a0)X=a0.call(this,X);if(X=X||[],Object.isFrozen(X))X=X.map(($)=>$.slice(0));for(let $=0,Z=X.length;$<Z;$++){let H=X[$];if(H){if(H.isShared=!0,$>=32)H.highByte=$-32>>5}}X.sharedLength=X.length;for(let $ in Q||[])if($>=0){let Z=X[$],H=Q[$];if(H){if(Z)(X.restoreStructures||(X.restoreStructures=[]))[$]=Z;X[$]=H}}return this.structures=X}decode(X,Q){return this.unpack(X,Q)}}function vX(X){try{if(!b.trusted&&!NX){let $=C.sharedLength||0;if($<C.length)C.length=$}let Q;if(b.randomAccessStructure&&U[q]<64&&U[q]>=32&&i0){if(Q=i0(U,q,o,b),U=null,!(X&&X.lazy)&&Q)Q=Q.toJSON();q=o}else Q=h();if(u)q=u.postBundlePosition,u=null;if(NX)C.restoreStructures=null;if(q==o){if(C&&C.restoreStructures)t0();if(C=null,U=null,HX)HX=null}else if(q>o)throw Error("Unexpected end of MessagePack data");else if(!NX){let $;try{$=JSON.stringify(Q,(Z,H)=>typeof H==="bigint"?`${H}n`:H).slice(0,100)}catch(Z){$="(JSON view not available "+Z+")"}throw Error("Data read, but end of buffer not reached "+$)}return Q}catch(Q){if(C&&C.restoreStructures)t0();if(hX(),Q instanceof RangeError||Q.message.startsWith("Unexpected end of buffer")||q>o)Q.incomplete=!0;throw Q}}function t0(){for(let X in C.restoreStructures)C[X]=C.restoreStructures[X];C.restoreStructures=null}function h(){let X=U[q++];if(X<160)if(X<128)if(X<64)return X;else{let Q=C[X&63]||b.getStructures&&GQ()[X&63];if(Q){if(!Q.read)Q.read=_0(Q,X&63);return Q.read()}else return X}else if(X<144)if(X-=128,b.mapsAsObjects){let Q={};for(let $=0;$<X;$++){let Z=KQ();if(Z==="__proto__")Z="__proto_";Q[Z]=h()}return Q}else{let Q=new Map;for(let $=0;$<X;$++)Q.set(h(),h());return Q}else{X-=144;let Q=Array(X);for(let $=0;$<X;$++)Q[$]=h();if(b.freezeData)return Object.freeze(Q);return Q}else if(X<192){let Q=X-160;if(XX>=q)return GX.slice(q-s,(q+=Q)-s);if(XX==0&&o<140){let $=Q<16?U0(Q):NQ(Q);if($!=null)return $}return L0(Q)}else{let Q;switch(X){case 192:return null;case 193:if(u)if(Q=h(),Q>0)return u[1].slice(u.position1,u.position1+=Q);else return u[0].slice(u.position0,u.position0-=Q);return z0;case 194:return!1;case 195:return!0;case 196:if(Q=U[q++],Q===void 0)throw Error("Unexpected end of buffer");return Y0(Q);case 197:return Q=j.getUint16(q),q+=2,Y0(Q);case 198:return Q=j.getUint32(q),q+=4,Y0(Q);case 199:return KX(U[q++]);case 200:return Q=j.getUint16(q),q+=2,KX(Q);case 201:return Q=j.getUint32(q),q+=4,KX(Q);case 202:if(Q=j.getFloat32(q),b.useFloat32>2){let $=gX[(U[q]&127)<<1|U[q+1]>>7];return q+=4,($*Q+(Q>0?0.5:-0.5)>>0)/$}return q+=4,Q;case 203:return Q=j.getFloat64(q),q+=8,Q;case 204:return U[q++];case 205:return Q=j.getUint16(q),q+=2,Q;case 206:return Q=j.getUint32(q),q+=4,Q;case 207:if(b.int64AsType==="number")Q=j.getUint32(q)*4294967296,Q+=j.getUint32(q+4);else if(b.int64AsType==="string")Q=j.getBigUint64(q).toString();else if(b.int64AsType==="auto"){if(Q=j.getBigUint64(q),Q<=BigInt(2)<<BigInt(52))Q=Number(Q)}else Q=j.getBigUint64(q);return q+=8,Q;case 208:return j.getInt8(q++);case 209:return Q=j.getInt16(q),q+=2,Q;case 210:return Q=j.getInt32(q),q+=4,Q;case 211:if(b.int64AsType==="number")Q=j.getInt32(q)*4294967296,Q+=j.getUint32(q+4);else if(b.int64AsType==="string")Q=j.getBigInt64(q).toString();else if(b.int64AsType==="auto"){if(Q=j.getBigInt64(q),Q>=BigInt(-2)<<BigInt(52)&&Q<=BigInt(2)<<BigInt(52))Q=Number(Q)}else Q=j.getBigInt64(q);return q+=8,Q;case 212:if(Q=U[q++],Q==114)return HQ(U[q++]&63);else{let $=l[Q];if($)if($.read)return q++,$.read(h());else if($.noBuffer)return q++,$();else return $(U.subarray(q,++q));else throw Error("Unknown extension "+Q)}case 213:if(Q=U[q],Q==114)return q++,HQ(U[q++]&63,U[q++]);else return KX(2);case 214:return KX(4);case 215:return KX(8);case 216:return KX(16);case 217:if(Q=U[q++],XX>=q)return GX.slice(q-s,(q+=Q)-s);return pQ(Q);case 218:if(Q=j.getUint16(q),q+=2,XX>=q)return GX.slice(q-s,(q+=Q)-s);return uQ(Q);case 219:if(Q=j.getUint32(q),q+=4,XX>=q)return GX.slice(q-s,(q+=Q)-s);return lQ(Q);case 220:return Q=j.getUint16(q),q+=2,XQ(Q);case 221:return Q=j.getUint32(q),q+=4,XQ(Q);case 222:return Q=j.getUint16(q),q+=2,QQ(Q);case 223:return Q=j.getUint32(q),q+=4,QQ(Q);default:if(X>=224)return X-256;if(X===void 0){let $=Error("Unexpected end of MessagePack data");throw $.incomplete=!0,$}throw Error("Unknown MessagePack token "+X)}}}var fQ=/^[a-zA-Z_$][a-zA-Z\d_$]*$/;function _0(X,Q){function $(){if($.count++>o0){let H;try{H=X.read=Function("r","return function(){return "+(b.freezeData?"Object.freeze":"")+"({"+X.map((J)=>J==="__proto__"?"__proto_:r()":fQ.test(J)?J+":r()":"["+JSON.stringify(J)+"]:r()").join(",")+"})}")(h)}catch(J){return o0=1/0,$()}if(X.highByte===0)X.read=e0(Q,X.read);return H()}let Z={};for(let H=0,J=X.length;H<J;H++){let N=X[H];if(N==="__proto__")N="__proto_";Z[N]=h()}if(b.freezeData)return Object.freeze(Z);return Z}if($.count=0,X.highByte===0)return e0(Q,$);return $}var e0=(X,Q)=>{return function(){let $=U[q++];if($===0)return Q();let Z=X<32?-(X+($<<5)):X+($<<5),H=C[Z]||GQ()[Z];if(!H)throw Error("Record id is not defined for "+Z);if(!H.read)H.read=_0(H,X);return H.read()}};function GQ(){let X=DQ(()=>{return U=null,b.getStructures()});return C=b._mergeStructures(X,C)}var L0=AX,pQ=AX,uQ=AX,lQ=AX;function AX(X){let Q;if(X<16){if(Q=U0(X))return Q}if(X>64&&D0)return D0.decode(U.subarray(q,q+=X));let $=q+X,Z=[];Q="";while(q<$){let H=U[q++];if((H&128)===0)Z.push(H);else if((H&224)===192){let J=U[q++]&63,N=(H&31)<<6|J;if(N<128)Z.push(65533);else Z.push(N)}else if((H&240)===224){let J=U[q++]&63,N=U[q++]&63,D=(H&31)<<12|J<<6|N;if(D<2048||D>=55296&&D<=57343)Z.push(65533);else Z.push(D)}else if((H&248)===240){let J=U[q++]&63,N=U[q++]&63,D=U[q++]&63,L=(H&7)<<18|J<<12|N<<6|D;if(L<65536||L>1114111)Z.push(65533);else if(L>65535)L-=65536,Z.push(L>>>10&1023|55296),L=56320|L&1023,Z.push(L);else Z.push(L)}else Z.push(65533);if(Z.length>=4096)Q+=p.apply(String,Z),Z.length=0}if(Z.length>0)Q+=p.apply(String,Z);return Q}function XQ(X){let Q=Array(X);for(let $=0;$<X;$++)Q[$]=h();if(b.freezeData)return Object.freeze(Q);return Q}function QQ(X){if(b.mapsAsObjects){let Q={};for(let $=0;$<X;$++){let Z=KQ();if(Z==="__proto__")Z="__proto_";Q[Z]=h()}return Q}else{let Q=new Map;for(let $=0;$<X;$++)Q.set(h(),h());return Q}}var p=String.fromCharCode;function NQ(X){let Q=q,$=Array(X);for(let Z=0;Z<X;Z++){let H=U[q++];if((H&128)>0){q=Q;return}$[Z]=H}return p.apply(String,$)}function U0(X){if(X<4)if(X<2)if(X===0)return"";else{let Q=U[q++];if((Q&128)>1){q-=1;return}return p(Q)}else{let Q=U[q++],$=U[q++];if((Q&128)>0||($&128)>0){q-=2;return}if(X<3)return p(Q,$);let Z=U[q++];if((Z&128)>0){q-=3;return}return p(Q,$,Z)}else{let Q=U[q++],$=U[q++],Z=U[q++],H=U[q++];if((Q&128)>0||($&128)>0||(Z&128)>0||(H&128)>0){q-=4;return}if(X<6)if(X===4)return p(Q,$,Z,H);else{let J=U[q++];if((J&128)>0){q-=5;return}return p(Q,$,Z,H,J)}else if(X<8){let J=U[q++],N=U[q++];if((J&128)>0||(N&128)>0){q-=6;return}if(X<7)return p(Q,$,Z,H,J,N);let D=U[q++];if((D&128)>0){q-=7;return}return p(Q,$,Z,H,J,N,D)}else{let J=U[q++],N=U[q++],D=U[q++],L=U[q++];if((J&128)>0||(N&128)>0||(D&128)>0||(L&128)>0){q-=8;return}if(X<10)if(X===8)return p(Q,$,Z,H,J,N,D,L);else{let z=U[q++];if((z&128)>0){q-=9;return}return p(Q,$,Z,H,J,N,D,L,z)}else if(X<12){let z=U[q++],R=U[q++];if((z&128)>0||(R&128)>0){q-=10;return}if(X<11)return p(Q,$,Z,H,J,N,D,L,z,R);let V=U[q++];if((V&128)>0){q-=11;return}return p(Q,$,Z,H,J,N,D,L,z,R,V)}else{let z=U[q++],R=U[q++],V=U[q++],E=U[q++];if((z&128)>0||(R&128)>0||(V&128)>0||(E&128)>0){q-=12;return}if(X<14)if(X===12)return p(Q,$,Z,H,J,N,D,L,z,R,V,E);else{let k=U[q++];if((k&128)>0){q-=13;return}return p(Q,$,Z,H,J,N,D,L,z,R,V,E,k)}else{let k=U[q++],g=U[q++];if((k&128)>0||(g&128)>0){q-=14;return}if(X<15)return p(Q,$,Z,H,J,N,D,L,z,R,V,E,k,g);let v=U[q++];if((v&128)>0){q-=15;return}return p(Q,$,Z,H,J,N,D,L,z,R,V,E,k,g,v)}}}}}function $Q(){let X=U[q++],Q;if(X<192)Q=X-160;else switch(X){case 217:Q=U[q++];break;case 218:Q=j.getUint16(q),q+=2;break;case 219:Q=j.getUint32(q),q+=4;break;default:throw Error("Expected string")}return AX(Q)}function Y0(X){return b.copyBuffers?Uint8Array.prototype.slice.call(U,q,q+=X):U.subarray(q,q+=X)}function KX(X){let Q=U[q++];if(l[Q]){let $;return l[Q](U.subarray(q,$=q+=X),(Z)=>{q=Z;try{return h()}finally{q=$}})}else throw Error("Unknown extension type "+Q)}var ZQ=Array(4096);function KQ(){let X=U[q++];if(X>=160&&X<192){if(X=X-160,XX>=q)return GX.slice(q-s,(q+=X)-s);else if(!(XX==0&&o<180))return L0(X)}else return q--,YQ(h());let Q=(X<<5^(X>1?j.getUint16(q):X>0?U[q]:0))&4095,$=ZQ[Q],Z=q,H=q+X-3,J,N=0;if($&&$.bytes==X){while(Z<H){if(J=j.getUint32(Z),J!=$[N++]){Z=1879048192;break}Z+=4}H+=3;while(Z<H)if(J=U[Z++],J!=$[N++]){Z=1879048192;break}if(Z===H)return q=Z,$.string;H-=3,Z=q}$=[],ZQ[Q]=$,$.bytes=X;while(Z<H)J=j.getUint32(Z),$.push(J),Z+=4;H+=3;while(Z<H)J=U[Z++],$.push(J);let D=X<16?U0(X):NQ(X);if(D!=null)return $.string=D;return $.string=L0(X)}function YQ(X){if(typeof X==="string")return X;if(typeof X==="number"||typeof X==="boolean"||typeof X==="bigint")return X.toString();if(X==null)return X+"";if(b.allowArraysInMapKeys&&Array.isArray(X)&&X.flat().every((Q)=>["string","number","boolean","bigint"].includes(typeof Q)))return X.flat().toString();throw Error(`Invalid property type for record: ${typeof X}`)}var HQ=(X,Q)=>{let $=h().map(YQ),Z=X;if(Q!==void 0)X=X<32?-((Q<<5)+X):(Q<<5)+X,$.highByte=Q;let H=C[X];if(H&&(H.isShared||NX))(C.restoreStructures||(C.restoreStructures=[]))[X]=H;return C[X]=$,$.read=_0($,Z),$.read()};l[0]=()=>{};l[0].noBuffer=!0;l[66]=(X)=>{let Q=X.byteLength%8||8,$=BigInt(X[0]&128?X[0]-256:X[0]);for(let Z=1;Z<Q;Z++)$<<=BigInt(8),$+=BigInt(X[Z]);if(X.byteLength!==Q){let Z=new DataView(X.buffer,X.byteOffset,X.byteLength),H=(J,N)=>{let D=N-J;if(D<=40){let V=Z.getBigUint64(J);for(let E=J+8;E<N;E+=8)V<<=BigInt(64),V|=Z.getBigUint64(E);return V}let L=J+(D>>4<<3),z=H(J,L),R=H(L,N);return z<<BigInt((N-L)*8)|R};$=$<<BigInt((Z.byteLength-Q)*8)|H(Q,Z.byteLength)}return $};var qQ={Error,EvalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError,AggregateError:typeof AggregateError==="function"?AggregateError:null};l[101]=()=>{let X=h();if(!qQ[X[0]]){let Q=Error(X[1],{cause:X[2]});return Q.name=X[0],Q}return qQ[X[0]](X[1],{cause:X[2]})};l[105]=(X)=>{if(b.structuredClone===!1)throw Error("Structured clone extension is disabled");let Q=j.getUint32(q-4);if(!HX)HX=new Map;let $=U[q],Z;if($>=144&&$<160||$==220||$==221)Z=[];else if($>=128&&$<144||$==222||$==223)Z=new Map;else if(($>=199&&$<=201||$>=212&&$<=216)&&U[q+1]===115)Z=new Set;else Z={};let H={target:Z};HX.set(Q,H);let J=h();if(!H.used)return H.target=J;else Object.assign(Z,J);if(Z instanceof Map)for(let[N,D]of J.entries())Z.set(N,D);if(Z instanceof Set)for(let N of Array.from(J))Z.add(N);return Z};l[112]=(X)=>{if(b.structuredClone===!1)throw Error("Structured clone extension is disabled");let Q=j.getUint32(q-4),$=HX.get(Q);return $.used=!0,$.target};l[115]=()=>new Set(h());var M0=["Int8","Uint8","Uint8Clamped","Int16","Uint16","Int32","Uint32","Float32","Float64","BigInt64","BigUint64"].map((X)=>X+"Array"),dQ=typeof globalThis==="object"?globalThis:window;l[116]=(X)=>{let Q=X[0],$=Uint8Array.prototype.slice.call(X,1).buffer,Z=M0[Q];if(!Z){if(Q===16)return $;if(Q===17)return new DataView($);throw Error("Could not find typed array for code "+Q)}return new dQ[Z]($)};l[120]=()=>{let X=h();return new RegExp(X[0],X[1])};var cQ=[];l[98]=(X)=>{let Q=(X[0]<<24)+(X[1]<<16)+(X[2]<<8)+X[3],$=q;return q+=Q-X.length,u=cQ,u=[$Q(),$Q()],u.position0=0,u.position1=0,u.postBundlePosition=q,q=$,h()};l[255]=(X)=>{if(X.length==4)return new Date((X[0]*16777216+(X[1]<<16)+(X[2]<<8)+X[3])*1000);else if(X.length==8)return new Date(((X[0]<<22)+(X[1]<<14)+(X[2]<<6)+(X[3]>>2))/1e6+((X[3]&3)*4294967296+X[4]*16777216+(X[5]<<16)+(X[6]<<8)+X[7])*1000);else if(X.length==12)return new Date(((X[0]<<24)+(X[1]<<16)+(X[2]<<8)+X[3])/1e6+((X[4]&128?-281474976710656:0)+X[6]*1099511627776+X[7]*4294967296+X[8]*16777216+(X[9]<<16)+(X[10]<<8)+X[11])*1000);else return new Date("invalid")};function DQ(X){if(r0)r0();let Q=o,$=q,Z=F0,H=s,J=XX,N=GX,D=O0,L=HX,z=u,R=new Uint8Array(U.slice(0,o)),V=C,E=C.slice(0,C.length),k=b,g=NX,v=X();return o=Q,q=$,F0=Z,s=H,XX=J,GX=N,O0=D,HX=L,u=z,U=R,NX=g,C=V,C.splice(0,C.length,...E),b=k,j=new DataView(U.buffer,U.byteOffset,U.byteLength),v}function hX(){U=null,HX=null,C=null}function OQ(X){if(X.unpack)l[X.type]=X.unpack;else l[X.type]=X}var gX=Array(147);for(let X=0;X<256;X++)gX[X]=+("1e"+Math.floor(45.15-X*0.30103));var fX=new QX({useRecords:!1}),nQ=fX.unpack,sQ=fX.unpackMultiple,oQ=fX.unpack;var iQ=new Float32Array(1),k5=new Uint8Array(iQ.buffer,0,4);var uX;try{uX=new TextEncoder}catch(X){}var lX,dX,DX=typeof Buffer<"u",pX=DX?function(X){return Buffer.allocUnsafeSlow(X)}:Uint8Array,UQ=DX?Buffer:Uint8Array,FQ=DX?4294967296:2144337920,K,RX,I,G=0,d,S=null,aQ,rQ=21760,tQ=/[\u0080-\uFFFF]/,YX=Symbol("record-id");class OX extends QX{constructor(X){super(X);this.offset=0;let Q,$,Z,H,J,N=UQ.prototype.utf8Write?function(Y,W){return K.utf8Write(Y,W,K.byteLength-W)}:uX&&uX.encodeInto?function(Y,W){return uX.encodeInto(Y,K.subarray(W)).written}:!1,D=this;if(!X)X={};let L=X&&X.sequential,z=X.structures||X.saveStructures,R=X.maxSharedStructures;if(R==null)R=z?32:0;if(R>8160)throw Error("Maximum maxSharedStructure is 8160");if(X.structuredClone&&X.moreTypes==null)this.moreTypes=!0;let V=X.maxOwnStructures;if(V==null)V=z?32:64;if(!this.structures&&X.useRecords!=!1)this.structures=[];let E=R>32||V+R>64,k=R+64,g=R+V+64;if(g>8256)throw Error("Maximum maxSharedStructure + maxOwnStructure is 8192");let v=[],f=0,$X=0;this.pack=this.encode=function(Y,W){if(!K)K=new pX(8192),I=K.dataView||(K.dataView=new DataView(K.buffer,0,8192)),G=0;if(d=K.length-10,d-G<2048)K=new pX(K.length),I=K.dataView||(K.dataView=new DataView(K.buffer,0,K.length)),d=K.length-10,G=0;else G=G+7&2147483640;if($=G,W&RQ)G+=W&255;if(J=D.structuredClone?new Map:null,D.bundleStrings&&typeof Y!=="string")S=[],S.size=1/0;else S=null;if(H=D.structures,H){if(H.uninitialized)H=D._mergeStructures(D.getStructures());let O=H.sharedLength||0;if(O>R)throw Error("Shared structures is larger than maximum shared structures, try increasing maxSharedStructures to "+H.sharedLength);if(!H.transitions){H.transitions=Object.create(null);for(let F=0;F<O;F++){let B=H[F];if(!B)continue;let T,A=H.transitions;for(let x=0,w=B.length;x<w;x++){let t=B[x];if(T=A[t],!T)T=A[t]=Object.create(null);A=T}A[YX]=F+64}this.lastNamedStructuresLength=O}if(!L)H.nextId=O+64}if(Z)Z=!1;let _;try{if(D.randomAccessStructure&&Y&&typeof Y==="object")if(Y.constructor===Object)f0(Y);else if(Y.constructor!==Map&&!Array.isArray(Y)&&!dX.some((F)=>Y instanceof F))f0(Y.toJSON?Y.toJSON():Y);else y(Y);else y(Y);let O=S;if(S)zQ($,y,0);if(J&&J.idsToInsert){let F=J.idsToInsert.sort((x,w)=>x.offset>w.offset?1:-1),B=F.length,T=-1;while(O&&B>0){let x=F[--B].offset+$;if(x<O.stringsPosition+$&&T===-1)T=0;if(x>O.position+$){if(T>=0)T+=6}else{if(T>=0)I.setUint32(O.position+$,I.getUint32(O.position+$)+T),T=-1;O=O.previous,B++}}if(T>=0&&O)I.setUint32(O.position+$,I.getUint32(O.position+$)+T);if(G+=F.length*6,G>d)ZX(G);D.offset=G;let A=eQ(K.subarray($,G),F);return J=null,A}if(D.offset=G,W&WQ)return K.start=$,K.end=G,K;return K.subarray($,G)}catch(O){throw _=O,O}finally{if(H){if(jX(),Z&&D.saveStructures){let O=H.sharedLength||0,F=K.subarray($,G),B=X5(H,D);if(!_){if(D.saveStructures(B,B.isCompatible)===!1)return D.pack(Y,W);if(D.lastNamedStructuresLength=O,K.length>1073741824)K=null;return F}}}if(K.length>1073741824)K=null;if(W&AQ)G=$}};let jX=()=>{if($X<10)$X++;let Y=H.sharedLength||0;if(H.length>Y&&!L)H.length=Y;if(f>1e4){if(H.transitions=null,$X=0,f=0,v.length>0)v=[]}else if(v.length>0&&!L){for(let W=0,_=v.length;W<_;W++)v[W][YX]=0;v=[]}},tX=(Y)=>{var W=Y.length;if(W<16)K[G++]=144|W;else if(W<65536)K[G++]=220,K[G++]=W>>8,K[G++]=W&255;else K[G++]=221,I.setUint32(G,W),G+=4;for(let _=0;_<W;_++)y(Y[_])},y=(Y)=>{if(G>d)K=ZX(G);var W=typeof Y,_;if(W==="string"){let O=Y.length;if(S&&O>=4&&O<4096){if((S.size+=O)>rQ){let A,x=(S[0]?S[0].length*3+S[1].length:0)+10;if(G+x>d)K=ZX(G+x);let w;if(S.position)w=S,K[G]=200,G+=3,K[G++]=98,A=G-$,G+=4,zQ($,y,0),I.setUint16(A+$-3,G-$-A);else K[G++]=214,K[G++]=98,A=G-$,G+=4;S=["",""],S.previous=w,S.size=0,S.position=A}let T=tQ.test(Y);S[T?0:1]+=Y,K[G++]=193,y(T?-O:O);return}let F;if(O<32)F=1;else if(O<256)F=2;else if(O<65536)F=3;else F=5;let B=O*3;if(G+B>d)K=ZX(G+B);if(O<64||!N){let T,A,x,w=G+F;for(T=0;T<O;T++)if(A=Y.charCodeAt(T),A<128)K[w++]=A;else if(A<2048)K[w++]=A>>6|192,K[w++]=A&63|128;else if((A&64512)===55296&&((x=Y.charCodeAt(T+1))&64512)===56320)A=65536+((A&1023)<<10)+(x&1023),T++,K[w++]=A>>18|240,K[w++]=A>>12&63|128,K[w++]=A>>6&63|128,K[w++]=A&63|128;else K[w++]=A>>12|224,K[w++]=A>>6&63|128,K[w++]=A&63|128;_=w-G-F}else _=N(Y,G+F);if(_<32)K[G++]=160|_;else if(_<256){if(F<2)K.copyWithin(G+2,G+1,G+1+_);K[G++]=217,K[G++]=_}else if(_<65536){if(F<3)K.copyWithin(G+3,G+2,G+2+_);K[G++]=218,K[G++]=_>>8,K[G++]=_&255}else{if(F<5)K.copyWithin(G+5,G+3,G+3+_);K[G++]=219,I.setUint32(G,_),G+=4}G+=_}else if(W==="number")if(Y>>>0===Y)if(Y<32||Y<128&&this.useRecords===!1||Y<64&&!this.randomAccessStructure)K[G++]=Y;else if(Y<256)K[G++]=204,K[G++]=Y;else if(Y<65536)K[G++]=205,K[G++]=Y>>8,K[G++]=Y&255;else K[G++]=206,I.setUint32(G,Y),G+=4;else if(Y>>0===Y)if(Y>=-32)K[G++]=256+Y;else if(Y>=-128)K[G++]=208,K[G++]=Y+256;else if(Y>=-32768)K[G++]=209,I.setInt16(G,Y),G+=2;else K[G++]=210,I.setInt32(G,Y),G+=4;else{let O;if((O=this.useFloat32)>0&&Y<4294967296&&Y>=-2147483648){K[G++]=202,I.setFloat32(G,Y);let F;if(O<4||(F=Y*gX[(K[G]&127)<<1|K[G+1]>>7])>>0===F){G+=4;return}else G--}K[G++]=203,I.setFloat64(G,Y),G+=8}else if(W==="object"||W==="function")if(!Y)K[G++]=192;else{if(J){let F=J.get(Y);if(F){if(!F.id){let B=J.idsToInsert||(J.idsToInsert=[]);F.id=B.push(F)}K[G++]=214,K[G++]=112,I.setUint32(G,F.id),G+=4;return}else J.set(Y,{offset:G-$})}let O=Y.constructor;if(O===Object)CX(Y);else if(O===Array)tX(Y);else if(O===Map)if(this.mapAsEmptyObject)K[G++]=128;else{if(_=Y.size,_<16)K[G++]=128|_;else if(_<65536)K[G++]=222,K[G++]=_>>8,K[G++]=_&255;else K[G++]=223,I.setUint32(G,_),G+=4;for(let[F,B]of Y)y(F),y(B)}else{for(let F=0,B=lX.length;F<B;F++){let T=dX[F];if(Y instanceof T){let A=lX[F];if(A.write){if(A.type)K[G++]=212,K[G++]=A.type,K[G++]=0;let _X=A.write.call(this,Y);if(_X===Y)if(Array.isArray(Y))tX(Y);else CX(Y);else y(_X);return}let x=K,w=I,t=G;K=null;let qX;try{qX=A.pack.call(this,Y,(_X)=>{if(K=x,x=null,G+=_X,G>d)ZX(G);return{target:K,targetView:I,position:G-_X}},y)}finally{if(x)K=x,I=w,G=t,d=K.length-10}if(qX){if(qX.length+G>d)ZX(qX.length+G);G=LQ(qX,K,G,A.type)}return}}if(Array.isArray(Y))tX(Y);else{if(Y.toJSON){let F=Y.toJSON();if(F!==Y)return y(F)}if(W==="function")return y(this.writeFunction&&this.writeFunction(Y));CX(Y)}}}else if(W==="boolean")K[G++]=Y?195:194;else if(W==="bigint"){if(Y<9223372036854776000&&Y>=-9223372036854776000)K[G++]=211,I.setBigInt64(G,Y);else if(Y<18446744073709552000&&Y>0)K[G++]=207,I.setBigUint64(G,Y);else if(this.largeBigIntToFloat)K[G++]=203,I.setFloat64(G,Number(Y));else if(this.largeBigIntToString)return y(Y.toString());else if(this.useBigIntExtension||this.moreTypes){let O=Y<0?BigInt(-1):BigInt(0),F;if(Y>>BigInt(65536)===O){let B=BigInt(18446744073709552000)-BigInt(1),T=[];while(!0){if(T.push(Y&B),Y>>BigInt(63)===O)break;Y>>=BigInt(64)}F=new Uint8Array(new BigUint64Array(T).buffer),F.reverse()}else{let B=Y<0,T=(B?~Y:Y).toString(16);if(T.length%2)T="0"+T;else if(parseInt(T.charAt(0),16)>=8)T="00"+T;if(DX)F=Buffer.from(T,"hex");else{F=new Uint8Array(T.length/2);for(let A=0;A<F.length;A++)F[A]=parseInt(T.slice(A*2,A*2+2),16)}if(B)for(let A=0;A<F.length;A++)F[A]=~F[A]}if(F.length+G>d)ZX(F.length+G);G=LQ(F,K,G,66);return}else throw RangeError(Y+" was too large to fit in MessagePack 64-bit integer format, use useBigIntExtension, or set largeBigIntToFloat to convert to float-64, or set largeBigIntToString to convert to string");G+=8}else if(W==="undefined")if(this.encodeUndefinedAsNil)K[G++]=192;else K[G++]=212,K[G++]=0,K[G++]=0;else throw Error("Unknown type: "+W)},v0=this.variableMapSize||this.coercibleKeyAsNumber||this.skipValues?(Y)=>{let W;if(this.skipValues){W=[];for(let F in Y)if((typeof Y.hasOwnProperty!=="function"||Y.hasOwnProperty(F))&&!this.skipValues.includes(Y[F]))W.push(F)}else W=Object.keys(Y);let _=W.length;if(_<16)K[G++]=128|_;else if(_<65536)K[G++]=222,K[G++]=_>>8,K[G++]=_&255;else K[G++]=223,I.setUint32(G,_),G+=4;let O;if(this.coercibleKeyAsNumber)for(let F=0;F<_;F++){O=W[F];let B=Number(O);y(isNaN(B)?O:B),y(Y[O])}else for(let F=0;F<_;F++)y(O=W[F]),y(Y[O])}:(Y)=>{K[G++]=222;let W=G-$;G+=2;let _=0;for(let O in Y)if(typeof Y.hasOwnProperty!=="function"||Y.hasOwnProperty(O))y(O),y(Y[O]),_++;if(_>65535)throw Error('Object is too large to serialize with fast 16-bit map size, use the "variableMapSize" option to serialize this object');K[W+++$]=_>>8,K[W+$]=_&255},h0=this.useRecords===!1?v0:X.progressiveRecords&&!E?(Y)=>{let W,_=H.transitions||(H.transitions=Object.create(null)),O=G++-$,F;for(let B in Y)if(typeof Y.hasOwnProperty!=="function"||Y.hasOwnProperty(B)){if(W=_[B],W)_=W;else{let T=Object.keys(Y),A=_;_=H.transitions;let x=0;for(let w=0,t=T.length;w<t;w++){let qX=T[w];if(W=_[qX],!W)W=_[qX]=Object.create(null),x++;_=W}if(O+$+1==G)G--,eX(_,T,x);else g0(_,T,O,x);F=!0,_=A[B]}y(Y[B])}if(!F){let B=_[YX];if(B)K[O+$]=B;else g0(_,Object.keys(Y),O,0)}}:(Y)=>{let W,_=H.transitions||(H.transitions=Object.create(null)),O=0;for(let B in Y)if(typeof Y.hasOwnProperty!=="function"||Y.hasOwnProperty(B)){if(W=_[B],!W)W=_[B]=Object.create(null),O++;_=W}let F=_[YX];if(F)if(F>=96&&E)K[G++]=((F-=96)&31)+96,K[G++]=F>>5;else K[G++]=F;else eX(_,_.__keys__||Object.keys(Y),O);for(let B in Y)if(typeof Y.hasOwnProperty!=="function"||Y.hasOwnProperty(B))y(Y[B])},m0=typeof this.useRecords=="function"&&this.useRecords,CX=m0?(Y)=>{m0(Y)?h0(Y):v0(Y)}:h0,ZX=(Y)=>{let W;if(Y>16777216){if(Y-$>FQ)throw Error("Packed buffer would be larger than maximum buffer size");W=Math.min(FQ,Math.round(Math.max((Y-$)*(Y>67108864?1.25:2),4194304)/4096)*4096)}else W=(Math.max(Y-$<<2,K.length-1)>>12)+1<<12;let _=new pX(W);if(I=_.dataView||(_.dataView=new DataView(_.buffer,0,W)),Y=Math.min(Y,K.length),K.copy)K.copy(_,0,$,Y);else _.set(K.slice($,Y));return G-=$,$=0,d=_.length-10,K=_},eX=(Y,W,_)=>{let O=H.nextId;if(!O)O=64;if(O<k&&this.shouldShareStructure&&!this.shouldShareStructure(W)){if(O=H.nextOwnId,!(O<g))O=k;H.nextOwnId=O+1}else{if(O>=g)O=k;H.nextId=O+1}let F=W.highByte=O>=96&&E?O-96>>5:-1;if(Y[YX]=O,Y.__keys__=W,H[O-64]=W,O<k)if(W.isShared=!0,H.sharedLength=O-63,Z=!0,F>=0)K[G++]=(O&31)+96,K[G++]=F;else K[G++]=O;else{if(F>=0)K[G++]=213,K[G++]=114,K[G++]=(O&31)+96,K[G++]=F;else K[G++]=212,K[G++]=114,K[G++]=O;if(_)f+=$X*_;if(v.length>=V)v.shift()[YX]=0;v.push(Y),y(W)}},g0=(Y,W,_,O)=>{let F=K,B=G,T=d,A=$;if(K=RX,G=0,$=0,!K)RX=K=new pX(8192);d=K.length-10,eX(Y,W,O),RX=K;let x=G;if(K=F,G=B,d=T,$=A,x>1){let w=G+x-1;if(w>d)ZX(w);let t=_+$;K.copyWithin(t+x,t+1,G),K.set(RX.slice(0,x),t),G=w}else K[_+$]=RX[0]},f0=(Y)=>{let W=aQ(Y,K,$,G,H,ZX,(_,O,F)=>{if(F)return Z=!0;G=O;let B=K;if(y(_),jX(),B!==K)return{position:G,targetView:I,target:K};return G},this);if(W===0)return CX(Y);G=W}}useBuffer(X){K=X,K.dataView||(K.dataView=new DataView(K.buffer,K.byteOffset,K.byteLength)),I=K.dataView,G=0}set position(X){G=X}get position(){return G}clearSharedData(){if(this.structures)this.structures=[];if(this.typedStructs)this.typedStructs=[]}}dX=[Date,Set,Error,RegExp,ArrayBuffer,Object.getPrototypeOf(Uint8Array.prototype).constructor,DataView,mX];lX=[{pack(X,Q,$){let Z=X.getTime()/1000;if((this.useTimestamp32||X.getMilliseconds()===0)&&Z>=0&&Z<4294967296){let{target:H,targetView:J,position:N}=Q(6);H[N++]=214,H[N++]=255,J.setUint32(N,Z)}else if(Z>0&&Z<4294967296){let{target:H,targetView:J,position:N}=Q(10);H[N++]=215,H[N++]=255,J.setUint32(N,X.getMilliseconds()*4000000+(Z/1000/4294967296>>0)),J.setUint32(N+4,Z)}else if(isNaN(Z)){if(this.onInvalidDate)return Q(0),$(this.onInvalidDate());let{target:H,targetView:J,position:N}=Q(3);H[N++]=212,H[N++]=255,H[N++]=255}else{let{target:H,targetView:J,position:N}=Q(15);H[N++]=199,H[N++]=12,H[N++]=255,J.setUint32(N,X.getMilliseconds()*1e6),J.setBigInt64(N+4,BigInt(Math.floor(Z)))}}},{pack(X,Q,$){if(this.setAsEmptyObject)return Q(0),$({});let Z=Array.from(X),{target:H,position:J}=Q(this.moreTypes?3:0);if(this.moreTypes)H[J++]=212,H[J++]=115,H[J++]=0;$(Z)}},{pack(X,Q,$){let{target:Z,position:H}=Q(this.moreTypes?3:0);if(this.moreTypes)Z[H++]=212,Z[H++]=101,Z[H++]=0;$([X.name,X.message,X.cause])}},{pack(X,Q,$){let{target:Z,position:H}=Q(this.moreTypes?3:0);if(this.moreTypes)Z[H++]=212,Z[H++]=120,Z[H++]=0;$([X.source,X.flags])}},{pack(X,Q){if(this.moreTypes)W0(X,16,Q);else A0(DX?Buffer.from(X):new Uint8Array(X),Q)}},{pack(X,Q){let $=X.constructor;if($!==UQ&&this.moreTypes)W0(X,M0.indexOf($.name),Q);else A0(X,Q)}},{pack(X,Q){if(this.moreTypes)W0(X,17,Q);else A0(DX?Buffer.from(X):new Uint8Array(X),Q)}},{pack(X,Q){let{target:$,position:Z}=Q(1);$[Z]=193}}];function W0(X,Q,$,Z){let H=X.byteLength;if(H+1<256){var{target:J,position:N}=$(4+H);J[N++]=199,J[N++]=H+1}else if(H+1<65536){var{target:J,position:N}=$(5+H);J[N++]=200,J[N++]=H+1>>8,J[N++]=H+1&255}else{var{target:J,position:N,targetView:D}=$(7+H);J[N++]=201,D.setUint32(N,H+1),N+=4}if(J[N++]=116,J[N++]=Q,!X.buffer)X=new Uint8Array(X);J.set(new Uint8Array(X.buffer,X.byteOffset,X.byteLength),N)}function A0(X,Q){let $=X.byteLength;var Z,H;if($<256){var{target:Z,position:H}=Q($+2);Z[H++]=196,Z[H++]=$}else if($<65536){var{target:Z,position:H}=Q($+3);Z[H++]=197,Z[H++]=$>>8,Z[H++]=$&255}else{var{target:Z,position:H,targetView:J}=Q($+5);Z[H++]=198,J.setUint32(H,$),H+=4}Z.set(X,H)}function LQ(X,Q,$,Z){let H=X.length;switch(H){case 1:Q[$++]=212;break;case 2:Q[$++]=213;break;case 4:Q[$++]=214;break;case 8:Q[$++]=215;break;case 16:Q[$++]=216;break;default:if(H<256)Q[$++]=199,Q[$++]=H;else if(H<65536)Q[$++]=200,Q[$++]=H>>8,Q[$++]=H&255;else Q[$++]=201,Q[$++]=H>>24,Q[$++]=H>>16&255,Q[$++]=H>>8&255,Q[$++]=H&255}return Q[$++]=Z,Q.set(X,$),$+=H,$}function eQ(X,Q){let $,Z=Q.length*6,H=X.length-Z;while($=Q.pop()){let{offset:J,id:N}=$;X.copyWithin(J+Z,J,H),Z-=6;let D=J+Z;X[D++]=214,X[D++]=105,X[D++]=N>>24,X[D++]=N>>16&255,X[D++]=N>>8&255,X[D++]=N&255,H=J}return X}function zQ(X,Q,$){if(S.length>0){I.setUint32(S.position+X,G+$-S.position-X),S.stringsPosition=G-X;let Z=S;S=null,Q(Z[0]),Q(Z[1])}}function R0(X){if(X.Class){if(!X.pack&&!X.write)throw Error("Extension has no pack or write function");if(X.pack&&!X.type)throw Error("Extension has no type (numeric code to identify the extension)");dX.unshift(X.Class),lX.unshift(X)}OQ(X)}function X5(X,Q){return X.isCompatible=($)=>{let Z=!$||(Q.lastNamedStructuresLength||0)===$.length;if(!Z)Q._mergeStructures($);return Z},X}var MQ=new OX({useRecords:!1}),Q5=MQ.pack,$5=MQ.pack;var WQ=512,AQ=1024,RQ=2048;var BQ=80;class r{capId;constructor(X){this.capId=X}}var Z5=new Set(["hello","goaway","call","result","cancel","stream","drop","cap_revoked"]);function V0(X){if(typeof X!=="object"||X===null)return!1;let Q=X,$=Q.op;if(typeof $!=="string"||!Z5.has($))return!1;switch($){case"hello":return Q.v===1&&(Q.mode==="native"||Q.mode==="web")&&Array.isArray(Q.features)&&typeof Q.maxBytes==="number"&&typeof Q.origin==="string";case"goaway":return Q.reason===void 0||typeof Q.reason==="string";case"call":return typeof Q.id==="number"&&typeof Q.method==="string"&&typeof Q.target==="object"&&Q.target!==null&&Q.target.kind==="cap"&&typeof Q.target.id==="number";case"result":return typeof Q.id==="number"&&(Q.ok===!0||Q.ok===!1);case"cancel":return typeof Q.id==="number";case"stream":return typeof Q.id==="number"&&typeof Q.ev==="string"&&(Q.ev==="next"||Q.ev==="credit"||Q.ev==="end"||Q.ev==="error");case"drop":return Array.isArray(Q.caps);case"cap_revoked":if(!Array.isArray(Q.capIds))return!1;for(let Z of Q.capIds)if(typeof Z!=="number"||!Number.isInteger(Z)||Z<0||Z>4294967295)return!1;return!0}}var VQ=!1;function H5(){if(VQ)return;VQ=!0,R0({Class:r,type:BQ,pack:(X)=>q5(X.capId),unpack:(X)=>new r(G5(X))})}function B0(){return H5(),{packr:new OX({useRecords:!0,sequential:!0,moreTypes:!0}),unpackr:new QX({useRecords:!0,sequential:!0,moreTypes:!0})}}function q5(X){let Q=new Uint8Array(5),$=X>>>0,Z=0;while($>=128)Q[Z++]=$&127|128,$>>>=7;return Q[Z++]=$&127,Q.subarray(0,Z)}var J5=5;function G5(X){let Q=0,$=0,Z=Math.min(X.length,J5);for(let H=0;H<Z;H++){let J=X[H];if(Q|=(J&127)<<$,(J&128)===0)return Q>>>0;$+=7}throw Error("Truncated or oversize varuint")}var T0=67108864,P0=1,cX="bunite.",nX="bootstrap";var oX=0,C0=1,PQ=0,EQ=1,FX=2,x0=128,iX=1024,jQ=1024,N5=iX*4,K5=500,Y5=32,D5=8,O5=1024;function F5(X){let Q=X?.initialBudget;if(typeof Q!=="number"||!Number.isFinite(Q)||!Number.isInteger(Q)||Q<1)return Y5;return Math.min(Q,O5)}var sX=null;class w0{entries=new Map;nextCapId=FX;capLimit;constructor(X=iX){this.capLimit=X}install(X,Q){if(this.entries.has(X))throw Error(`cap-id ${X} already installed`);let $={capId:X,...Q};return this.entries.set(X,$),$}allocate(X){if(this.entries.size>=this.capLimit)throw new P({code:"resource_exhausted",message:`cap-table limit ${this.capLimit}`,details:{reason:"max_caps_per_connection"}});let Q=this.nextCapId++;while(this.entries.has(Q))Q=this.nextCapId++;return this.install(Q,X)}get(X){return this.entries.get(X)}release(X,Q=1){let $=this.entries.get(X);if(!$)return!1;if($.refCount=Math.max(0,$.refCount-Q),$.refCount===0&&X>=FX)return this.entries.delete(X),!0;return!1}delete(X){if(X<FX)return!1;return this.entries.delete(X)}clear(){this.entries.clear(),this.nextCapId=FX}size(){return this.entries.size}values(){return this.entries.values()}}var L5={origin:"",topOrigin:"",partition:"default",isAppRes:!1,isMainFrame:!1,userGesture:!1,level:"untrusted"},CQ=Symbol("bunite.rpc.ExportedCap"),TQ=Symbol("bunite.rpc.CapProxyMeta");function z5(X){return typeof X==="object"&&X!==null&&X[CQ]===!0}var _5=typeof FinalizationRegistry<"u"?new FinalizationRegistry((X)=>{if(X.dropped())return;let Q=X.connRef.deref();if(!Q||Q.closed)return;Q._dropFromFinalizer(X.capId)}):{register:()=>{}};class xQ{transport;capTable;pending=new Map;clientStreams=new Map;serverStreams=new Map;serverCallChildren=new Map;serverActiveCalls=new Map;registry=new Map;rootInstances=new Map;revokedCapIds=new Set;closeHandlers=new Set;observers={};nextCallId=1;remoteHello=null;remoteReady;resolveRemoteReady;rejectRemoteReady;closed_=!1;maxBytes;maxInFlightCalls;mode;origin;features;attestation;peerId;policy;constructor(X){this.transport=X.transport,this.mode=X.mode,this.origin=X.origin,this.features=X.features??[],this.maxBytes=X.maxBytes??T0,this.maxInFlightCalls=X.maxInFlightCalls??jQ,this.attestation=X.attestation??L5,this.peerId=X.peerId??"peer",this.policy=X.policy,this.capTable=new w0(X.capLimit??iX),this.capTable.install(oX,{typeId:PQ,cap:null,impl:null,refCount:1}),this.capTable.install(C0,{typeId:EQ,cap:WX,impl:X.runtime??null,refCount:1}),this.remoteReady=new Promise((Q,$)=>{this.resolveRemoteReady=Q,this.rejectRemoteReady=$}),this.remoteReady.catch(()=>{}),this.transport.setReceive((Q)=>this.handleFrame(Q)),this.transport.onClose?.((Q)=>this.shutdown(Q?.reason||"transport_closed",Q)),this.transport.send({op:"hello",v:P0,mode:this.mode,features:this.features,maxBytes:this.maxBytes,origin:this.origin})}get closed(){return this.closed_}onClose(X){return this.closeHandlers.add(X),()=>this.closeHandlers.delete(X)}on(X,Q){let $=this.observers[X];if(!$)$=new Set,this.observers[X]=$;return $.add(Q),()=>{$.delete(Q)}}emitObs(X,Q){let $=this.observers[X];if(!$||$.size===0)return;for(let Z of $)try{Z(Q)}catch{}}markRevoked(X){this.revokedCapIds.add(X);while(this.revokedCapIds.size>N5){let Q=this.revokedCapIds.values().next().value;if(Q===void 0)break;this.revokedCapIds.delete(Q)}}serve(X,Q,$){this.assertNotFrameworkName(X.name);let Z=$?.ifExists??"throw";if(this.registry.get(X.name))switch(Z){case"throw":throw new P({code:"already_exists",message:`cap "${X.name}" already served`,details:{reason:"name_collision"}});case"skip":return this.makeHandle([]);case"replace":return this.replace(X,Q),this.makeHandle([X.name])}return this.registry.set(X.name,{cap:X,impl:Q,version:X.version}),this.makeHandle([X.name])}makeHandle(X){let Q={names:X,[Symbol.dispose]:()=>this.unserve(Q)};return Q}serveAll(X,Q,$){let Z=$?.ifExists??"throw";for(let J of Object.keys(X.roots)){let N=X.roots[J];this.assertNotFrameworkName(N.name);let D=this.registry.get(N.name);if(D){if(Z==="throw")throw new P({code:"already_exists",message:`cap "${N.name}" already served`,details:{reason:"name_collision"}});if(Z==="replace"&&D.version!==N.version)throw new P({code:"failed_precondition",message:`version mismatch on replace for "${N.name}" (current "${D.version}", new "${N.version}")`,details:{reason:"version_mismatch"}})}}let H=[];for(let J of Object.keys(X.roots)){let N=X.roots[J],D=Q[J];if(this.serve(N,D,{ifExists:Z}).names.length>0)H.push(N.name)}return this.makeHandle(H)}unserve(X){let Q=yX(X)?[X.name]:Array.from(X.names),$=[];for(let Z of Q){if(!this.registry.delete(Z))continue;let H=this.rootInstances.get(Z);if(H!==void 0){let J=this.capTable.get(H);if(J)this.invokeServerDisposal(J);this.rootInstances.delete(Z),this.capTable.delete(H),$.push(H)}}if($.length>0)this.transport.send({op:"cap_revoked",capIds:$}),this.emitObs("revoke",{capIds:$,reason:"unserve"})}replace(X,Q){let $=this.registry.get(X.name);if(!$)throw new P({code:"not_found",message:`cap "${X.name}" not served`});if($.version!==X.version)throw new P({code:"failed_precondition",message:`version mismatch (current "${$.version}", new "${X.version}")`,details:{reason:"version_mismatch"}});$.impl=Q,$.cap=X;let Z=this.rootInstances.get(X.name);if(Z!==void 0){let H=this.capTable.get(Z);if(H)H.impl=Q,H.cap=X}this.emitObs("revoke",{capIds:Z!==void 0?[Z]:[],reason:"replace"})}assertNotFrameworkName(X){if(X.startsWith(cX))throw new P({code:"already_exists",message:`cap name "${X}" uses reserved prefix "${cX}"`,details:{reason:"reserved_namespace"}})}runtimeProxy=null;runtime(){if(!this.runtimeProxy)this.runtimeProxy=this.makeCapProxy(WX,C0);return this.runtimeProxy}async bootstrap(X){if(yX(X))return this._bootstrapCap(X);if($0(X))return this._bootstrapSchema(X);throw new P({code:"invalid_argument",message:"bootstrap target must be CapDef or Schema"})}async _bootstrapCap(X){await this.remoteReady;let Q={name:X.name};if(X.version!=null)Q.version=X.version;let $=await this.sendCallTyped(oX,nX,Q,void 0);if(!($ instanceof r))throw new P({code:"invalid_argument",message:"bootstrap did not return a CapRef"});return this.makeCapProxy(X,$.capId)}async _bootstrapSchema(X){let Q=Object.keys(X.roots),$=await Promise.allSettled(Q.map((J)=>this._bootstrapCap(X.roots[J]))),Z=$.find((J)=>J.status==="rejected");if(Z){for(let J of $)if(J.status==="fulfilled")try{this.releaseRef(J.value)}catch{}throw Z.reason}let H={};for(let J=0;J<Q.length;J++)H[Q[J]]=$[J].value;return H}handleFrame(X){if(this.closed_)return;switch(X.op){case"hello":this.handleHello(X);return;case"call":this.handleCall(X);return;case"result":this.handleResult(X);return;case"cancel":this.handleCancel(X);return;case"stream":this.handleStreamFrame(X);return;case"drop":this.handleDrop(X);return;case"cap_revoked":this.handleCapRevoked(X);return;case"goaway":this.handleGoaway(X);return;default:this.handleUnknownFrame(X);return}}handleUnknownFrame(X){let Q=X?.id;if(typeof Q==="number"){this.transport.send({op:"result",id:Q,ok:!1,error:{code:"invalid_argument",message:"unknown opcode"}});return}this.transport.send({op:"goaway",reason:"invalid_argument",error:{code:"invalid_argument",message:"unknown opcode"}}),this.shutdown("invalid_argument")}handleHello(X){this.remoteHello=X,this.resolveRemoteReady(X)}handleGoaway(X){this.rejectRemoteReady(new P(X.error??{code:"unavailable",message:X.reason??"peer goaway"})),this.shutdown(X.reason??"remote goaway")}handleCapRevoked(X){for(let Q of X.capIds){this.markRevoked(Q);let $=new P({code:"failed_precondition",message:"cap revoked",details:{reason:"revoked"}});for(let[Z,H]of this.pending)if(H.capId===Q){if(this.pending.delete(Z),H.timer)clearTimeout(H.timer);H.reject($)}for(let[Z,H]of this.clientStreams)if(H.capId===Q)this.clientStreams.delete(Z),H.fail($)}}async handleCall(X){if(X.target.id===oX&&X.method===nX){await this.handleBootstrap(X);return}let Q=this.capTable.get(X.target.id);if(!Q)return this.emitObs("call",{capId:X.target.id,method:X.method,callId:X.id,result:"not_found"}),this.sendError(X.id,"not_found",`cap-id ${X.target.id} not found`);let $=Q.cap;if(!$||!Q.impl)return this.emitObs("call",{capId:X.target.id,method:X.method,callId:X.id,result:"not_found"}),this.sendError(X.id,"not_found","cap has no impl");let Z=$.methods[X.method];if(!Z)return this.emitObs("call",{capId:X.target.id,capName:$.name,method:X.method,callId:X.id,result:"not_found"}),this.sendError(X.id,"not_found",`method "${X.method}" on cap "${$.name}"`);let H=Q.impl[X.method];if(typeof H!=="function")return this.emitObs("call",{capId:X.target.id,capName:$.name,method:X.method,callId:X.id,result:"not_found"}),this.sendError(X.id,"not_found",`method "${X.method}" has no handler`);if(this.serverActiveCalls.size+this.serverStreams.size>=this.maxInFlightCalls)return this.emitObs("call",{capId:X.target.id,capName:$.name,method:X.method,callId:X.id,result:"resource_exhausted"}),this.sendError(X.id,"resource_exhausted",`in-flight calls limit ${this.maxInFlightCalls}`,{reason:"max_concurrent_calls"});await this.invokeServerMethod(X,$,Z,H)}async handleBootstrap(X){let Q=X.args??{},$=Q.name;if(typeof $!=="string")return this.emitObs("bootstrap",{name:String($),attestation:this.attestation,result:"invalid_argument"}),this.sendError(X.id,"invalid_argument","bootstrap requires {name: string}");let Z=Q.version!=null?String(Q.version):void 0,H=this.registry.get($);if(!H)return this.emitObs("bootstrap",{name:$,version:Z,attestation:this.attestation,result:"not_found"}),this.sendError(X.id,"not_found",`cap "${$}" not served`);let J=H.version;if(J!=null&&Z!=null&&J!==Z)return this.emitObs("bootstrap",{name:$,version:Z,attestation:this.attestation,result:"version_mismatch"}),this.sendError(X.id,"failed_precondition",`version mismatch (server "${J}", client "${Z}")`,{reason:"version_mismatch"});if(this.policy){let D;try{D=await this.policy($,this.attestation)}catch(L){return this.emitObs("error",{phase:"policy",error:L instanceof Error?L:Error(String(L))}),this.emitObs("bootstrap",{name:$,version:Z,attestation:this.attestation,result:"internal"}),this.sendError(X.id,"internal","policy threw")}if(typeof D!=="boolean")return this.emitObs("error",{phase:"policy",error:Error(`policy must return boolean (got ${typeof D})`)}),this.emitObs("bootstrap",{name:$,version:Z,attestation:this.attestation,result:"internal"}),this.sendError(X.id,"internal","policy returned non-boolean");if(!D)return this.emitObs("bootstrap",{name:$,version:Z,attestation:this.attestation,result:"denied"}),this.sendError(X.id,"failed_precondition","policy denied",{reason:"unauthorized"})}let N=this.rootInstances.get($);if(N!==void 0){let D=this.capTable.get(N);if(D)D.refCount+=1;else this.rootInstances.delete($),N=void 0}if(N===void 0)try{N=this.capTable.allocate({typeId:K0(H.cap)??x0,cap:H.cap,impl:H.impl,refCount:1}).capId,this.rootInstances.set($,N)}catch(D){if(D instanceof P){let L=D.code==="resource_exhausted"?"resource_exhausted":"internal";return this.emitObs("bootstrap",{name:$,version:Z,attestation:this.attestation,result:L}),this.sendError(X.id,D.code,D.message,D.details)}throw D}this.emitObs("bootstrap",{name:$,version:Z,attestation:this.attestation,result:"ok",capId:N}),this.transport.send({op:"result",id:X.id,ok:!0,value:new r(N)})}async invokeServerMethod(X,Q,$,Z){let H=this.makeCallCtx(X);if(kX($)){let J=F5($.hint);try{let N=()=>Z(X.args,H),D=sX,z=(D?()=>D.run({callId:X.id},N):N)();this.runServerStream(X.id,z,H,J,Q,X.method,X.target.id)}catch(N){this.emitObs("stream",{capId:X.target.id,capName:Q.name,method:X.method,callId:X.id,event:"error"}),this.transport.send({op:"stream",id:X.id,ev:"error",error:E0(N)})}return}if(IX($)){let J=performance.now(),N=$.idempotent?void 0:this.armServerDeadline(X,H);this.serverActiveCalls.set(X.id,{ctrl:H._ctrl,capId:X.target.id,capName:Q.name,method:X.method,startedAt:J});let D=U5($.returns),L=()=>Promise.resolve(Z(X.args,H)),z=sX,R=z?()=>z.run({callId:X.id},L):L;try{let V=await R();if(N)clearTimeout(N);if(!this.serverActiveCalls.delete(X.id))return;let E=D(V);this.transport.send({op:"result",id:X.id,ok:!0,value:E}),this.emitObs("call",{capId:X.target.id,capName:Q.name,method:X.method,callId:X.id,durationMs:performance.now()-J,result:"ok"})}catch(V){if(N)clearTimeout(N);if(!this.serverActiveCalls.delete(X.id))return;let E=E0(V);this.sendErrorFromStatus(X.id,E),this.emitObs("call",{capId:X.target.id,capName:Q.name,method:X.method,callId:X.id,durationMs:performance.now()-J,result:E.code})}return}this.sendError(X.id,"not_found","unknown method kind")}armServerDeadline(X,Q){let $=X.meta?.deadlineMs;if(!$)return;return setTimeout(()=>{Q._ctrl.abort()},$)}makeCallCtx(X){let Q=new AbortController;return{callId:X.id,peerId:this.peerId,attestation:this.attestation,signal:Q.signal,deadline:X.meta?.deadlineMs,_ctrl:Q,exportCap:(Z,H)=>this.exportCap(Z,H)}}exportCap(X,Q){let $=K0(X)??x0,Z=this.capTable.allocate({typeId:$,cap:X,impl:Q,refCount:1});return{[CQ]:!0,cap:X,capId:Z.capId,typeId:Z.typeId}}runServerStream(X,Q,$,Z,H,J,N){let D=Q[Symbol.asyncIterator](),L=$._ctrl,z={iter:D,abort:L,cancelled:!1,credit:Z,creditWaker:null,capId:N,capName:H.name,method:J,callId:X,count:0};this.serverStreams.set(X,z),this.emitObs("stream",{capId:N,capName:H.name,method:J,callId:X,event:"start"});let R=()=>{if(z.credit>0||z.cancelled)return Promise.resolve();return new Promise((E)=>{z.creditWaker=E})};(async()=>{let E=!1;try{while(!z.cancelled){if(z.credit===0)await R();if(z.cancelled)break;let{done:k,value:g}=await D.next();if(k)break;if(z.cancelled)break;z.credit-=1,z.count+=1,this.transport.send({op:"stream",id:X,ev:"next",value:g})}}catch(k){E=!0,this.transport.send({op:"stream",id:X,ev:"error",error:E0(k)}),this.emitObs("stream",{capId:N,capName:H.name,method:J,callId:X,event:"error",count:z.count})}finally{if(!E)this.transport.send({op:"stream",id:X,ev:"end"}),this.emitObs("stream",{capId:N,capName:H.name,method:J,callId:X,event:z.cancelled?"cancel":"end",count:z.count});this.serverStreams.delete(X)}})()}handleResult(X){let Q=this.pending.get(X.id);if(Q){if(this.pending.delete(X.id),this.serverCallChildren.delete(X.id),Q.timer)clearTimeout(Q.timer);if(X.ok){let Z=Q.decodeReturn?Q.decodeReturn(X.value):X.value;Q.resolve(Z)}else Q.reject(new P(X.error));return}let $=this.clientStreams.get(X.id);if($){this.clientStreams.delete(X.id);let Z=X.ok?new P({code:"invalid_argument",message:"stream method returned result frame"}):new P(X.error);$.fail(Z)}}handleCancel(X){let Q=this.serverStreams.get(X.id);if(Q)Q.cancelled=!0,Q.abort.abort(),Q.iter?.return?.(),this.serverStreams.delete(X.id);let $=this.serverActiveCalls.get(X.id);if($)this.serverActiveCalls.delete(X.id),$.ctrl.abort(),this.transport.send({op:"result",id:X.id,ok:!1,error:{code:"cancelled",message:X.reason}}),this.emitObs("call",{capId:$.capId,capName:$.capName,method:$.method,callId:X.id,durationMs:performance.now()-$.startedAt,result:"cancelled"});for(let[Z,H]of this.serverCallChildren){if(H.parentId!==X.id)continue;if(this.serverCallChildren.delete(Z),this.pending.has(Z))this.transport.send({op:"cancel",id:Z,reason:X.reason})}}releaseRef(X){if(typeof X!=="object"||X===null)return;let Q=X[TQ];if(!Q||Q.dropped)return;Q.dropped=!0,this.sendDrop(Q.capId)}sendDrop(X){if(this.closed_)return;if(X<FX)return;this.transport.send({op:"drop",caps:[{id:X,delta:1}]})}handleStreamFrame(X){if(X.ev==="credit"){let $=this.serverStreams.get(X.id);if(!$)return;$.credit+=X.credit?.messages??0;let Z=$.creditWaker;$.creditWaker=null,Z?.();return}let Q=this.clientStreams.get(X.id);if(!Q)return;switch(X.ev){case"next":Q.push(X.value);return;case"end":Q.end(),this.clientStreams.delete(X.id);return;case"error":Q.fail(new P(X.error)),this.clientStreams.delete(X.id);return}}handleDrop(X){for(let{id:Q,delta:$}of X.caps)if(this.capTable.release(Q,$)){for(let[H,J]of this.rootInstances)if(J===Q){this.rootInstances.delete(H);break}}}sendError(X,Q,$,Z){let H={code:Q,message:$};if(Z!==void 0)H.details=Z;this.transport.send({op:"result",id:X,ok:!1,error:H})}sendErrorFromStatus(X,Q){this.transport.send({op:"result",id:X,ok:!1,error:Q})}nextId(){return this.nextCallId++}sendCallTyped(X,Q,$,Z,H,J){if(this.closed_)return Promise.reject(new P({code:"unavailable",message:"connection closed"}));if(this.revokedCapIds.has(X))return Promise.reject(new P({code:"failed_precondition",message:"cap revoked",details:{reason:"revoked"}}));if(this.pending.size>=this.maxInFlightCalls)return Promise.reject(new P({code:"resource_exhausted",message:`in-flight calls limit ${this.maxInFlightCalls}`,details:{reason:"max_concurrent_calls"}}));let N=this.nextId();return new Promise((D,L)=>{let z=new AbortController,R={resolve:D,reject:L,abort:z,decodeReturn:Z,startedAt:performance.now(),capId:X,method:Q,capName:J,kind:"call"};if(H?.deadlineMs)R.timer=setTimeout(()=>{if(this.pending.delete(N))this.transport.send({op:"cancel",id:N,reason:"deadline_exceeded"}),L(new P({code:"deadline_exceeded"}))},H.deadlineMs+K5);this.pending.set(N,R);let V=H;if(V?.parentCallId===void 0&&sX){let E=sX.getStore();if(E)V={...V??{},parentCallId:E.callId}}if(V?.parentCallId!==void 0)this.serverCallChildren.set(N,{parentId:V.parentCallId});this.transport.send({op:"call",id:N,target:{kind:"cap",id:X},method:Q,args:$,meta:V})})}openClientStream(X,Q,$,Z,H){if(this.closed_){let z=j0(X,0,()=>{},()=>{});return z.fail(new P({code:"unavailable",message:"connection closed"})),z.stream}if(this.revokedCapIds.has(X)){let z=j0(X,0,()=>{},()=>{});return z.fail(new P({code:"failed_precondition",message:"cap revoked",details:{reason:"revoked"}})),z.stream}let J=this.nextId(),L=j0(X,J,()=>{if(this.clientStreams.delete(J))this.transport.send({op:"cancel",id:J,reason:"client_cancel"})},(z)=>{if(this.closed_||!this.clientStreams.has(J))return;this.transport.send({op:"stream",id:J,ev:"credit",credit:{messages:z}})});return this.clientStreams.set(J,L),this.transport.send({op:"call",id:J,target:{kind:"cap",id:X},method:Q,args:$,meta:Z}),L.stream}makeCapProxy(X,Q){let $={},Z={capId:Q,dropped:!1};$[TQ]=Z;let H=()=>{if(Z.dropped)return;Z.dropped=!0,this.sendDrop(Q)};for(let N of Object.keys(X.methods)){let D=X.methods[N];if(kX(D))$[N]=(L)=>this.openClientStream(Q,N,L,void 0,X.name);else if(IX(D)){let L=M5(D.returns,(z,R)=>this.makeCapProxy(z,R));$[N]=(z)=>this.sendCallTyped(Q,N,z,L,void 0,X.name)}}let J=X.disposal;if(J)$[Symbol.dispose]=()=>{try{let N=$[J.method]?.();if(N&&typeof N.then==="function")N.catch((D)=>this.emitObs("error",{phase:"dispose",error:D instanceof Error?D:Error(String(D))}))}catch(N){this.emitObs("error",{phase:"dispose",error:N instanceof Error?N:Error(String(N))})}H()};if(typeof FinalizationRegistry<"u")_5.register($,{connRef:new WeakRef(this),capId:Q,dropped:()=>Z.dropped});return $}_dropFromFinalizer(X){try{this.sendDrop(X)}catch{}}shutdown(X="shutdown",Q){if(this.closed_)return;this.closed_=!0;for(let $ of this.pending.values()){if($.timer)clearTimeout($.timer);$.reject(new P({code:"unavailable",message:X}))}this.pending.clear();for(let $ of this.clientStreams.values())$.fail(new P({code:"unavailable",message:X}));this.clientStreams.clear();for(let $ of this.serverStreams.values())$.cancelled=!0,$.abort.abort(),$.iter?.return?.();this.serverStreams.clear();for(let $ of this.serverActiveCalls.values())$.ctrl.abort();this.serverActiveCalls.clear();for(let $ of this.capTable.values())this.invokeServerDisposal($);if(this.capTable.clear(),!this.remoteHello)this.rejectRemoteReady(new P({code:"unavailable",message:X}));for(let $ of this.closeHandlers)try{$(Q)}catch{}this.closeHandlers.clear();try{this.transport.close()}catch{}}invokeServerDisposal(X){let Q=X.cap;if(!Q)return;let $=Q.disposal;if(!$)return;let Z=X.impl,H=Z?.[$.method];if(!H)return;try{H.call(Z,void 0,void 0)}catch{}}}function U5(X){if(!X)return($)=>$;let Q=($,Z)=>{if(!z5($))throw new P({code:"failed_precondition",message:"expected ctx.exportCap return for cap method",details:{reason:"unregistered_cap_return"}});if($.cap!==Z)throw new P({code:"failed_precondition",message:"exported cap type mismatch with method returns",details:{reason:"unregistered_cap_return"}});return new r($.capId)};if(xX(X))return($)=>Q($,X.cap);if(wX(X))return($)=>{if(!Array.isArray($))throw new P({code:"invalid_argument",message:"expected ExportedCap[] for cap.array method"});return $.map((Z)=>Q(Z,X.cap))};if(bX(X))return($)=>{if(!$||typeof $!=="object")throw new P({code:"invalid_argument",message:"expected Record<string, ExportedCap> for cap.record method"});let Z={};for(let H of Object.keys($))Z[H]=Q($[H],X.cap);return Z};return($)=>$}function M5(X,Q){if(!X)return;if(xX(X)){let $=X.cap;return(Z)=>{if(!(Z instanceof r))throw new P({code:"invalid_argument",message:"expected CapRef"});return Q($,Z.capId)}}if(wX(X)){let $=X.cap,Z=$.disposal;return(H)=>{if(!Array.isArray(H))throw new P({code:"invalid_argument",message:"expected array"});let J=H.map((N)=>{if(!(N instanceof r))throw new P({code:"invalid_argument",message:"expected CapRef in array"});return Q($,N.capId)});return W5(J,Z),J}}if(bX(X)){let $=X.cap;return(Z)=>{if(!Z||typeof Z!=="object")throw new P({code:"invalid_argument",message:"expected record"});let H={};for(let J of Object.keys(Z)){let N=Z[J];if(!(N instanceof r))throw new P({code:"invalid_argument",message:"expected CapRef in record"});H[J]=Q($,N.capId)}return H}}return}function W5(X,Q){if(!Q)return;X[Symbol.dispose]=()=>{for(let $ of X)$[Symbol.dispose]?.call($)}}function E0(X){if(X instanceof P)return X.toStatus();if(X instanceof Error)return{code:"internal",message:X.message};return{code:"internal",message:String(X)}}function j0(X,Q,$,Z){let H=[],J=[],N=!1,D=null,L=!1,z=0;function R(){if(z+=1,z>=D5)Z(z),z=0}function V(){if(H.length>0){let f=H.shift();return R(),{value:f,done:!1}}if(D)return null;if(N||L)return{value:void 0,done:!0};return null}function E(){let f=V();if(f)return Promise.resolve(f);if(D)return Promise.reject(D);return new Promise(($X,jX)=>J.push({resolve:$X,reject:jX}))}function k(){while(J.length>0){let f=J.shift(),$X=V();if($X){f.resolve($X);continue}if(D){f.reject(D);continue}J.unshift(f);break}}function g(){if(L||N||D)return;L=!0,$(),k()}let v={[Symbol.asyncIterator]:()=>({next:E,return:()=>{return g(),Promise.resolve({value:void 0,done:!0})},throw:(f)=>{return g(),Promise.reject(f)}}),[Symbol.dispose]:g,cancel:g};return{capId:X,stream:v,push(f){if(L||N||D)return;H.push(f),k()},end(){N=!0,k()},fail(f){D=f,k()}}}function b0(X){return new xQ(X)}class A5{buffer=[];waiters=[];ctrl=new AbortController;cleanup;ended=!1;failure=null;constructor(X){let Q=($)=>{if(this.ended||this.failure)return;let Z=this.waiters.shift();if(Z){Z.resolve({value:$,done:!1});return}this.buffer.push($)};try{let $=X(Q,this.ctrl.signal);if(typeof $==="function")this.cleanup=$}catch($){this.failure=$}}[Symbol.asyncIterator](){return{next:async()=>{if(this.buffer.length>0)return{value:this.buffer.shift(),done:!1};if(this.failure)throw this.failure;if(this.ended)return{value:void 0,done:!0};return new Promise((X,Q)=>this.waiters.push({resolve:X,reject:Q}))},return:async()=>{return this.dispose(),{value:void 0,done:!0}}}}cancel(){this.dispose()}[Symbol.dispose](){this.dispose()}dispose(){if(this.ended)return;this.ended=!0,this.ctrl.abort();try{this.cleanup?.()}catch{}while(this.waiters.length>0)this.waiters.shift().resolve({value:void 0,done:!0})}}function I0(X,Q={}){let $=B0(),Z,H,J=!1,N=(D)=>{if(J)return;J=!0,H?.(D)};return X.onClose?.(N),X.setReceive((D)=>{let L;try{L=$.unpackr.unpack(D)}catch(z){Q.onProtocolError?.(`unpack failed: ${z instanceof Error?z.message:String(z)}`),N(),X.close();return}if(!V0(L)){Q.onProtocolError?.("malformed frame"),N(),X.close();return}Z?.(L)}),{send(D){let L=$.packr.pack(D);X.send(L instanceof Uint8Array?L:new Uint8Array(L))},setReceive(D){Z=D},close(){X.close()},onClose(D){H=D}}}function k0(X){if("binaryType"in X)try{X.binaryType="arraybuffer"}catch{}let Q=X,$,Z,H=!1,J=(R)=>{if(!$)return;let V=R.data;if(V instanceof Uint8Array){$(V);return}if(V instanceof ArrayBuffer){$(new Uint8Array(V));return}if(typeof Blob<"u"&&V instanceof Blob){V.arrayBuffer().then((E)=>$?.(new Uint8Array(E)));return}},N=()=>{X.removeEventListener?.("message",J),Q.removeEventListener?.("close",L),Q.removeEventListener?.("error",z)},D=(R)=>{if(H)return;H=!0,N(),Z?.(R)},L=(R)=>D({code:R?.code,reason:R?.reason}),z=()=>setTimeout(()=>D(),0);return X.addEventListener("message",J),Q.addEventListener("close",L),Q.addEventListener("error",z),{send(R){X.send(R)},setReceive(R){$=R},onClose(R){Z=R},close(){N(),X.close?.()}}}var y0=null;function VX(){if(!y0)y0=host.runtime().then((X)=>X.surface());return y0}function c(X){return VX().then(X).catch((Q)=>{if(globalThis.__BUNITE_DEBUG__)console.warn("[bunite] surface call failed",Q);return})}function m(X){return VX().then(X)}class wQ{element;onBoundsChange;observer=null;rafId=0;lastRect={x:0,y:0,width:0,height:0};dirty=!1;stopped=!1;constructor(X,Q){this.element=X,this.onBoundsChange=Q}start(){this.observer=new ResizeObserver(()=>this.markDirty()),this.observer.observe(this.element),this.scheduleFrame()}stop(){if(this.stopped=!0,this.observer?.disconnect(),this.observer=null,this.rafId)cancelAnimationFrame(this.rafId),this.rafId=0}markDirty(){this.dirty=!0}scheduleFrame(){if(this.stopped)return;this.rafId=requestAnimationFrame(()=>{this.flush(),this.scheduleFrame()})}flush(){let X=window.devicePixelRatio||1,Q=this.element.getBoundingClientRect(),$={x:Math.round(Q.x*X),y:Math.round(Q.y*X),width:Math.round(Q.width*X),height:Math.round(Q.height*X)};if(!this.dirty&&$.x===this.lastRect.x&&$.y===this.lastRect.y&&$.width===this.lastRect.width&&$.height===this.lastRect.height)return;this.dirty=!1,this.lastRect=$,this.onBoundsChange($)}}class bQ extends HTMLElement{static observedAttributes=["src"];_surfaceId=null;_syncCtrl=null;_initPromise=null;_aborted=!1;_pendingSrc=null;_syncHidden=!1;_userHidden=!1;_layoutObserver=null;_unsubNavigate=null;_activeStreams=[];connectedCallback(){this._aborted=!1,this._syncHidden=!1,this._userHidden=!1;let X=new AbortController;this._unsubNavigate=()=>X.abort(),(async()=>{try{let Q=await VX();if(X.signal.aborted)return;await this._waitForSurfaceId(X.signal);let $=this._surfaceId;if(X.signal.aborted||$==null)return;let Z=Q.surfaceEvents({surfaceId:$});this._activeStreams.push(Z);let H=Q.downloadEvents({surfaceId:$});this._activeStreams.push(H),(async()=>{try{for await(let J of H){if(X.signal.aborted)break;this.dispatchEvent(new CustomEvent("download-event",{detail:J}))}}catch{}})();for await(let J of Z){if(X.signal.aborted)break;this.dispatchEvent(new CustomEvent("surface-event",{detail:J}))}}catch(Q){if(globalThis.__BUNITE_DEBUG__)console.warn("[bunite] surfaceEvents stream failed",Q)}})(),this._waitForLayout()}async _waitForSurfaceId(X){while(this._surfaceId==null&&!X.aborted){let Q=this._initPromise;if(Q)try{await Q}catch{return}else await new Promise(($)=>setTimeout($,16))}}_waitForLayout(){if(this._layoutObserver)return;let X=()=>{if(!this.isConnected||this._aborted)return!0;let Q=this.getBoundingClientRect();if(Q.width>0&&Q.height>0){if(this.getAttribute("src")||this._pendingSrc||"")this.initSurface();return!0}return!1};requestAnimationFrame(()=>{if(X())return;this._layoutObserver=new ResizeObserver(()=>{if(X())this._layoutObserver?.disconnect(),this._layoutObserver=null}),this._layoutObserver.observe(this)})}disconnectedCallback(){this._aborted=!0,this._unsubNavigate?.(),this._unsubNavigate=null;for(let X of this._activeStreams)try{X.cancel?.()}catch{}if(this._activeStreams=[],this._layoutObserver?.disconnect(),this._layoutObserver=null,this._syncCtrl?.stop(),this._syncCtrl=null,this._surfaceId!=null){let X=this._surfaceId;this._surfaceId=null,c((Q)=>Q.remove({surfaceId:X}))}else if(this._initPromise)this._initPromise.then((X)=>{c((Q)=>Q.remove({surfaceId:X.surfaceId}))}).catch(()=>{});this._initPromise=null}attributeChangedCallback(X,Q,$){if(X!=="src")return;if(this._surfaceId!=null){let Z=this._surfaceId;c((H)=>H.navigate({surfaceId:Z,url:$||""}))}else if(this._initPromise)this._pendingSrc=$||"";else if(this.isConnected&&!this._aborted&&$)this._waitForLayout()}setHidden(X){this._userHidden=X,this._applySurfaceHidden()}goBack(){let X=this._surfaceId;if(X!=null)c((Q)=>Q.goBack({surfaceId:X}))}reload(){let X=this._surfaceId;if(X!=null)c((Q)=>Q.reload({surfaceId:X}))}navigate(X){this.setAttribute("src",X)}async evaluate(X,Q){let $=this._surfaceId;if($==null)return{ok:!1,code:"not_supported",message:"surface not ready"};return m((Z)=>Z.evaluate({surfaceId:$,script:X,frameId:Q?.frameId}))}async capabilities(){let X=this._surfaceId;if(X==null)return{evaluate:!1,crossOriginEval:!1,surfaceEvents:!1,nativeInputTrusted:!1,click:!1,type:!1,press:!1,scroll:!1,mouse:!1,dialogs:!1,console:!1,screenshot:!1,accessibilitySnapshot:!1,getBoundingRect:!1,frames:!1,downloads:!1,popups:!1,resolveAndClick:!1};return m((Q)=>Q.capabilities({surfaceId:X}))}async sendClick(X){let Q=this._surfaceId;if(Q==null)return;await m(($)=>$.click({surfaceId:Q,...X}))}async sendType(X){let Q=this._surfaceId;if(Q==null)return;await m(($)=>$.type({surfaceId:Q,text:X}))}async sendPress(X,Q,$){let Z=this._surfaceId;if(Z==null)return;await m((H)=>H.press({surfaceId:Z,key:X,modifiers:Q,action:$}))}async sendScroll(X){let Q=this._surfaceId;if(Q==null)return;await m(($)=>$.scroll({surfaceId:Q,...X}))}async sendMouse(X){let Q=this._surfaceId;if(Q==null)return;await m(($)=>$.mouse({surfaceId:Q,...X}))}async respondToDialog(X,Q,$){let Z=this._surfaceId;if(Z==null)return;await m((H)=>H.respondToDialog({surfaceId:Z,requestId:X,accept:Q,text:$}))}async setDialogTimeout(X){let Q=this._surfaceId;if(Q==null)return;await m(($)=>$.setDialogTimeout({surfaceId:Q,ms:X}))}async waitForSelector(X,Q){let $=this._surfaceId;if($==null)return{ok:!1,code:"runtime_error",message:"surface not ready"};return m((Z)=>Z.waitForSelector({surfaceId:$,selector:X,timeoutMs:Q}))}async waitForFunction(X,Q){let $=this._surfaceId;if($==null)return{ok:!1,code:"runtime_error",message:"surface not ready"};return m((Z)=>Z.waitForFunction({surfaceId:$,expression:X,...Q}))}async getConsoleBuffer(X){let Q=this._surfaceId;if(Q==null)return[];return await m(($)=>$.getConsoleBuffer({surfaceId:Q,clear:X?.clear}))??[]}async getNavigationState(){let X=this._surfaceId;if(X==null)return{lastLoadEpoch:0,isLoading:!1,currentUrl:""};return m((Q)=>Q.getNavigationState({surfaceId:X}))}async accessibilitySnapshot(X){let Q=this._surfaceId;if(Q==null)return{ok:!1,code:"not_supported",message:"surface not ready"};return m(($)=>$.accessibilitySnapshot({surfaceId:Q,interestingOnly:X?.interestingOnly}))}async getBoundingRect(X,Q){let $=this._surfaceId;if($==null)return{ok:!1,code:"runtime_error",message:"surface not ready"};return m((Z)=>Z.getBoundingRect({surfaceId:$,selector:X,frameId:Q?.frameId}))}async listFrames(){let X=this._surfaceId;if(X==null)return{ok:!1,code:"not_supported",message:"surface not ready"};return m((Q)=>Q.listFrames({surfaceId:X}))}async resolveAndClick(X,Q){let $=this._surfaceId;if($==null)return{ok:!1,code:"runtime_error",message:"surface not ready"};return m((Z)=>Z.resolveAndClick({surfaceId:$,selector:X,...Q}))}async setDownloadPolicy(X,Q){let $=this._surfaceId;if($==null)return;await c((Z)=>Z.setDownloadPolicy({surfaceId:$,policy:X,downloadDir:Q}))}async waitForDownload(X){let Q=this._surfaceId;if(Q==null)return{ok:!1,code:"not_supported",message:"surface not ready"};return m(($)=>$.waitForDownload({surfaceId:Q,timeoutMs:X?.timeoutMs}))}async dismissPopup(X){await c((Q)=>Q.dismissPopup({newSurfaceId:X}))}async extendAdoptionTimeout(X,Q){return m(($)=>$.extendPopupTimeout({newSurfaceId:X,gracePeriodMs:Q}))}async screenshot(X){let Q=this._surfaceId;if(Q==null)return{ok:!1,code:"not_supported",message:"surface not ready"};return m(($)=>$.screenshot({surfaceId:Q,...X}))}_applySurfaceHidden(){let X=this._surfaceId;if(X==null)return;let Q=this._userHidden||this._syncHidden;c(($)=>$.setHidden({surfaceId:X,hidden:Q}))}_setupSyncCtrl(){this._syncCtrl=new wQ(this,(X)=>{let Q=this._surfaceId;if(Q==null)return;if(X.width===0&&X.height===0){if(!this._syncHidden)this._syncHidden=!0,this._applySurfaceHidden();return}if(this._syncHidden)this._syncHidden=!1,this._applySurfaceHidden();c((Z)=>Z.resize({surfaceId:Q,x:X.x,y:X.y,w:X.width,h:X.height}))}),this._syncCtrl.start()}initSurface(){if(this._surfaceId!=null||this._initPromise!=null)return;let X=window.devicePixelRatio||1,Q=this.getBoundingClientRect(),$=this.getAttribute("adopt-popup-id"),Z=$?Number($):NaN;if(Number.isFinite(Z)){let N=VX().then(async(D)=>{let L=await D.acceptPopup({newSurfaceId:Z,hostViewId:__buniteWebviewId,bounds:{x:Math.round(Q.x*X),y:Math.round(Q.y*X),width:Math.round(Q.width*X),height:Math.round(Q.height*X)}});if(!L.ok)throw Error(`acceptPopup failed: ${L.code}: ${L.message}`);return{surfaceId:Z}});this._initPromise=N,N.then((D)=>{if(this._initPromise!==N)return;if(this._aborted){c((L)=>L.remove({surfaceId:D.surfaceId}));return}this._surfaceId=D.surfaceId,this._setupSyncCtrl()}).catch((D)=>{if(globalThis.__BUNITE_DEBUG__)console.warn("[bunite] adopt-popup-id init failed",D);this._initPromise=null});return}let H=this._pendingSrc||this.getAttribute("src")||"";this._pendingSrc=null;let J=VX().then((N)=>N.init({src:H,x:Math.round(Q.x*X),y:Math.round(Q.y*X),width:Math.round(Q.width*X),height:Math.round(Q.height*X),hidden:this._userHidden}));this._initPromise=J,J.then((N)=>{if(this._initPromise!==J)return;if(this._aborted){c((D)=>D.remove({surfaceId:N.surfaceId}));return}if(this._surfaceId=N.surfaceId,this._userHidden)this._applySurfaceHidden();if(this._pendingSrc!=null){let D=this._pendingSrc;this._pendingSrc=null;let L=this._surfaceId;if(L!=null)c((z)=>z.navigate({surfaceId:L,url:D}))}this._setupSyncCtrl()}).catch(()=>{}).finally(()=>{if(this._initPromise===J)this._initPromise=null})}}if(typeof customElements<"u"){customElements.define("bunite-webview",bQ);let X=()=>{c((Q)=>Q.bringAllVisiblesToFront())};document.addEventListener("pointerdown",X,!0),document.addEventListener("dragstart",()=>{c((Q)=>Q.setAllPassthrough({passthrough:!0}))},!0),document.addEventListener("dragend",()=>{c((Q)=>Q.setAllPassthrough({passthrough:!1})),X()},!0)}var BX=null,LX=null;function rX(){if(BX){if(!BX.closed)return Promise.resolve(BX);BX=null,LX=null}if(LX)return LX;let X=(async()=>{let Q=new WebSocket(`ws://localhost:${__buniteRpcSocketPort}/rpc?webviewId=${__buniteWebviewId}`);Q.binaryType="arraybuffer",await new Promise((J,N)=>{Q.addEventListener("open",()=>J(),{once:!0}),Q.addEventListener("error",()=>N(Error("bunite preload ws connect failed")),{once:!0})});let $=Uint8Array.from(atob(__buniteSecretKeyBase64),(J)=>J.charCodeAt(0)),Z=await X0(k0(Q),$),H=b0({transport:I0(Z),mode:"native",origin:location.origin});return BX=H,H})();return LX=X,X.catch(()=>{if(LX===X)LX=null}),X}var i=window;i.__bunite??={};i.__buniteWebviewId=__buniteWebviewId;i.__buniteRpcSocketPort=__buniteRpcSocketPort;i.host??={};i.host.bootstrap=async(X)=>{return(await rX()).bootstrap(X)};i.host.runtime=async()=>(await rX()).runtime();i.host.releaseRef=async(X)=>{(await rX()).releaseRef(X)};i.host.getConnection=()=>rX();var SQ=Symbol.for("bunite.console.buffer"),IQ=200,R5=16,V5=50;i[SQ]=[];var aX=i[SQ];function B5(X){if(typeof X==="string")return X;if(X instanceof Error)return X.stack??X.message;try{return JSON.stringify(X)}catch{return String(X)}}var zX=null,kQ=0,T5=1000;function P5(){if(zX)return zX;if(Date.now()<kQ)return Promise.reject(Error("reporting cap cooldown"));return zX=(async()=>{return(await i.host.runtime()).reporting()})(),zX.catch(()=>{zX=null,kQ=Date.now()+T5}),zX}var PX=[],EX=null;function yQ(){if(EX)clearTimeout(EX),EX=null;if(PX.length===0)return;let X=PX;PX=[],P5().then((Q)=>Q.reportConsoleBatch({entries:X})).catch(()=>{})}function E5(){if(PX.length>=V5){yQ();return}if(EX)return;EX=setTimeout(yQ,R5)}function j5(){for(let X of["log","warn","error","info","debug"]){let Q=console[X].bind(console);console[X]=(...$)=>{try{Q(...$)}catch{}try{let Z={level:X,args:$.map(B5),ts:Date.now()};if(aX.push(Z),aX.length>IQ)aX.splice(0,aX.length-IQ);PX.push(Z),E5()}catch{}}}}j5();var TX=null;function S0(){if(!TX)TX=(async()=>{return await(await(await i.host.runtime()).window()).current()})(),TX.catch(()=>{TX=null});return TX}function vQ(X){let Q=X instanceof Element?X:null;while(Q){if(Q.hasAttribute("data-bunite-no-drag"))return!1;if(Q.hasAttribute("data-bunite-drag-region"))return!0;Q=Q.parentElement}return!1}S0();document.addEventListener("mousedown",(X)=>{if(X.button!==0||window.self!==window.top||!vQ(X.target))return;S0().then((Q)=>Q.beginMoveDrag()).catch(()=>{})},!0);document.addEventListener("dblclick",(X)=>{if(X.button!==0||window.self!==window.top||!vQ(X.target))return;S0().then((Q)=>Q.toggleMaximize()).catch(()=>{})},!0);
@@ -19,7 +19,11 @@ let _conn: Connection | null = null;
19
19
  let _connPromise: Promise<Connection> | null = null;
20
20
 
21
21
  function ensureConnection(): Promise<Connection> {
22
- if (_conn) return Promise.resolve(_conn);
22
+ if (_conn) {
23
+ if (!_conn.closed) return Promise.resolve(_conn);
24
+ _conn = null;
25
+ _connPromise = null;
26
+ }
23
27
  if (_connPromise) return _connPromise;
24
28
  const attempt = (async () => {
25
29
  const ws = new WebSocket(
@@ -1,3 +1,4 @@
1
+ import type { CloseInfo } from "./peer";
1
2
  import type { BytesPipe } from "./transport";
2
3
 
3
4
  const VERSION = 1;
@@ -24,12 +25,16 @@ export async function createEncryptedPipe(base: BytesPipe, rawKey: Uint8Array):
24
25
  let sendChain: Promise<void> = Promise.resolve();
25
26
  let recvChain: Promise<void> = Promise.resolve();
26
27
  let closed = false;
27
- const closeOnce = () => {
28
- if (!closed) {
29
- closed = true;
30
- base.close();
31
- }
28
+ let onCloseHandler: ((info?: CloseInfo) => void) | undefined;
29
+ // Report close (so the Connection tears down) for both a base disconnect and a
30
+ // local crypto/frame failure, then close the base transport.
31
+ const closeOnce = (info?: CloseInfo) => {
32
+ if (closed) return;
33
+ closed = true;
34
+ onCloseHandler?.(info);
35
+ base.close();
32
36
  };
37
+ base.onClose?.((info) => closeOnce(info));
33
38
 
34
39
  base.setReceive((frame) => {
35
40
  if (closed) return;
@@ -78,6 +83,9 @@ export async function createEncryptedPipe(base: BytesPipe, rawKey: Uint8Array):
78
83
  setReceive(handler) {
79
84
  downstream = handler;
80
85
  },
86
+ onClose(h) {
87
+ onCloseHandler = h;
88
+ },
81
89
  close() {
82
90
  closeOnce();
83
91
  },
package/src/rpc/index.ts CHANGED
@@ -61,6 +61,7 @@ export {
61
61
  } from "./framework";
62
62
  export type {
63
63
  CapTableEntry,
64
+ CloseInfo,
64
65
  Connection,
65
66
  ConnectionEvents,
66
67
  ConnectionOptions,
package/src/rpc/peer.ts CHANGED
@@ -158,10 +158,16 @@ export class CapTable {
158
158
  }
159
159
  }
160
160
 
161
+ export interface CloseInfo {
162
+ code?: number;
163
+ reason?: string;
164
+ }
165
+
161
166
  export interface Transport {
162
167
  send(frame: Frame): void;
163
168
  setReceive(handler: (frame: Frame) => void): void;
164
169
  close(): void;
170
+ onClose?(handler: (info?: CloseInfo) => void): void;
165
171
  }
166
172
 
167
173
  export type Policy = (name: string, attestation: Attestation) => boolean | Promise<boolean>;
@@ -224,9 +230,9 @@ export interface Connection {
224
230
  event: K,
225
231
  handler: (e: ConnectionEvents[K]) => void,
226
232
  ): () => void;
227
- onClose(handler: () => void): () => void;
233
+ onClose(handler: (info?: CloseInfo) => void): () => void;
228
234
  /** Tear down the connection — rejects pending, fires onClose, closes transport. Reliable signal for application lifecycle. */
229
- shutdown(reason?: string): void;
235
+ shutdown(reason?: string, info?: CloseInfo): void;
230
236
  readonly closed: boolean;
231
237
  }
232
238
 
@@ -335,7 +341,7 @@ class ConnectionImpl implements Connection {
335
341
  private readonly rootInstances = new Map<string, number>();
336
342
  /** Client-side: cap-ids that the server revoked via cap_revoked. */
337
343
  private readonly revokedCapIds = new Set<number>();
338
- private readonly closeHandlers = new Set<() => void>();
344
+ private readonly closeHandlers = new Set<(info?: CloseInfo) => void>();
339
345
  private readonly observers: {
340
346
  [K in keyof ConnectionEvents]?: Set<(e: ConnectionEvents[K]) => void>;
341
347
  } = {};
@@ -388,6 +394,7 @@ class ConnectionImpl implements Connection {
388
394
  this.remoteReady.catch(() => {});
389
395
 
390
396
  this.transport.setReceive((frame) => this.handleFrame(frame));
397
+ this.transport.onClose?.((info) => this.shutdown(info?.reason || "transport_closed", info));
391
398
  this.transport.send({
392
399
  op: "hello",
393
400
  v: PROTOCOL_VERSION,
@@ -402,7 +409,7 @@ class ConnectionImpl implements Connection {
402
409
  return this.closed_;
403
410
  }
404
411
 
405
- onClose(handler: () => void): () => void {
412
+ onClose(handler: (info?: CloseInfo) => void): () => void {
406
413
  this.closeHandlers.add(handler);
407
414
  return () => this.closeHandlers.delete(handler);
408
415
  }
@@ -1446,7 +1453,7 @@ class ConnectionImpl implements Connection {
1446
1453
  }
1447
1454
  }
1448
1455
 
1449
- shutdown(reason: string = "shutdown"): void {
1456
+ shutdown(reason: string = "shutdown", info?: CloseInfo): void {
1450
1457
  if (this.closed_) return;
1451
1458
  this.closed_ = true;
1452
1459
  for (const pending of this.pending.values()) {
@@ -1477,7 +1484,7 @@ class ConnectionImpl implements Connection {
1477
1484
  }
1478
1485
  for (const fn of this.closeHandlers) {
1479
1486
  try {
1480
- fn();
1487
+ fn(info);
1481
1488
  } catch {
1482
1489
  /* swallow */
1483
1490
  }
@@ -46,7 +46,13 @@ function isNative(): boolean {
46
46
  }
47
47
 
48
48
  function ensureWebConnection(path = "/rpc"): Promise<Connection> {
49
- if (_webConn) return Promise.resolve(_webConn);
49
+ // Drop a closed cached conn so a disconnect (WS close/error → onClose) leads to
50
+ // a fresh reconnect on the next call, instead of handing back a dead connection.
51
+ if (_webConn) {
52
+ if (!_webConn.closed) return Promise.resolve(_webConn);
53
+ _webConn = null;
54
+ _webConnPromise = null;
55
+ }
50
56
  // Host-provided shared Connection — cross-bundle reachability for renderer
51
57
  // ecosystems (e.g. extension hosts) that bundle bunite-core 0-externals per
52
58
  // plugin. Page-author trust applies; bunite policy/attestation still gates.
@@ -63,10 +69,16 @@ function ensureWebConnection(path = "/rpc"): Promise<Connection> {
63
69
  const ws = new WebSocket(`${proto}//${location.host}${path}`);
64
70
  ws.binaryType = "arraybuffer";
65
71
  await new Promise<void>((resolve, reject) => {
66
- ws.addEventListener("open", () => resolve(), { once: true });
67
- ws.addEventListener("error", () => reject(new Error("web RPC ws connect failed")), {
68
- once: true,
69
- });
72
+ const onOpen = () => {
73
+ ws.removeEventListener("error", onError);
74
+ resolve();
75
+ };
76
+ const onError = () => {
77
+ ws.removeEventListener("open", onOpen);
78
+ reject(new Error("web RPC ws connect failed"));
79
+ };
80
+ ws.addEventListener("open", onOpen, { once: true });
81
+ ws.addEventListener("error", onError, { once: true });
70
82
  });
71
83
  const conn = createConnection({
72
84
  transport: createFrameTransport(createWebSocketPipe(ws as unknown as WebSocketLike)),
@@ -1,10 +1,11 @@
1
- import type { Transport } from "./peer";
1
+ import type { CloseInfo, Transport } from "./peer";
2
2
  import { createCodec, type Frame, isFrame } from "./wire";
3
3
 
4
4
  export interface BytesPipe {
5
5
  send(bytes: Uint8Array): void;
6
6
  setReceive(handler: (bytes: Uint8Array) => void): void;
7
7
  close(): void;
8
+ onClose?(handler: (info?: CloseInfo) => void): void;
8
9
  }
9
10
 
10
11
  export interface FrameTransportOptions {
@@ -14,6 +15,16 @@ export interface FrameTransportOptions {
14
15
  export function createFrameTransport(pipe: BytesPipe, opts: FrameTransportOptions = {}): Transport {
15
16
  const codec = createCodec();
16
17
  let handler: ((frame: Frame) => void) | undefined;
18
+ let closeHandler: ((info?: CloseInfo) => void) | undefined;
19
+ let closeFired = false;
20
+ // Fire once for any close cause — pipe disconnect (WS close/error) or a
21
+ // protocol error that forces pipe.close() — so the Connection always tears down.
22
+ const fireClose = (info?: CloseInfo) => {
23
+ if (closeFired) return;
24
+ closeFired = true;
25
+ closeHandler?.(info);
26
+ };
27
+ pipe.onClose?.(fireClose);
17
28
 
18
29
  pipe.setReceive((bytes) => {
19
30
  let frame: unknown;
@@ -21,11 +32,13 @@ export function createFrameTransport(pipe: BytesPipe, opts: FrameTransportOption
21
32
  frame = codec.unpackr.unpack(bytes);
22
33
  } catch (err) {
23
34
  opts.onProtocolError?.(`unpack failed: ${err instanceof Error ? err.message : String(err)}`);
35
+ fireClose();
24
36
  pipe.close();
25
37
  return;
26
38
  }
27
39
  if (!isFrame(frame)) {
28
40
  opts.onProtocolError?.("malformed frame");
41
+ fireClose();
29
42
  pipe.close();
30
43
  return;
31
44
  }
@@ -43,22 +56,31 @@ export function createFrameTransport(pipe: BytesPipe, opts: FrameTransportOption
43
56
  close() {
44
57
  pipe.close();
45
58
  },
59
+ onClose(h) {
60
+ closeHandler = h;
61
+ },
46
62
  };
47
63
  }
48
64
 
65
+ type WsMessageEvent = { data: ArrayBuffer | Uint8Array | Blob | string };
66
+ type WsCloseEvent = { code?: number; reason?: string };
67
+
49
68
  export interface WebSocketLike {
50
69
  send(data: Uint8Array | ArrayBuffer): unknown;
51
- addEventListener(
52
- type: "message",
53
- listener: (event: { data: ArrayBuffer | Uint8Array | Blob | string }) => void,
54
- ): void;
55
- removeEventListener?(
56
- type: "message",
57
- listener: (event: { data: ArrayBuffer | Uint8Array | Blob | string }) => void,
58
- ): void;
70
+ addEventListener(type: "message", listener: (event: WsMessageEvent) => void): void;
71
+ removeEventListener?(type: "message", listener: (event: WsMessageEvent) => void): void;
59
72
  close?(): void;
60
73
  }
61
74
 
75
+ // close/error listeners — real WebSockets have them; kept off the public type so
76
+ // message-only implementations stay assignable.
77
+ type WsLifecycle = {
78
+ addEventListener(type: "close", listener: (event: WsCloseEvent) => void): void;
79
+ addEventListener(type: "error", listener: (event: unknown) => void): void;
80
+ removeEventListener?(type: "close", listener: (event: WsCloseEvent) => void): void;
81
+ removeEventListener?(type: "error", listener: (event: unknown) => void): void;
82
+ };
83
+
62
84
  export function createWebSocketPipe(ws: WebSocketLike): BytesPipe {
63
85
  if ("binaryType" in ws) {
64
86
  try {
@@ -67,8 +89,11 @@ export function createWebSocketPipe(ws: WebSocketLike): BytesPipe {
67
89
  /* readonly in some envs */
68
90
  }
69
91
  }
92
+ const wsLife = ws as WebSocketLike & WsLifecycle;
70
93
  let handler: ((bytes: Uint8Array) => void) | undefined;
71
- const onMessage = (event: { data: ArrayBuffer | Uint8Array | Blob | string }) => {
94
+ let closeHandler: ((info?: CloseInfo) => void) | undefined;
95
+ let closeFired = false;
96
+ const onMessage = (event: WsMessageEvent) => {
72
97
  if (!handler) return;
73
98
  const d = event.data;
74
99
  if (d instanceof Uint8Array) {
@@ -84,7 +109,24 @@ export function createWebSocketPipe(ws: WebSocketLike): BytesPipe {
84
109
  return;
85
110
  }
86
111
  };
112
+ const detach = () => {
113
+ ws.removeEventListener?.("message", onMessage);
114
+ wsLife.removeEventListener?.("close", onClose);
115
+ wsLife.removeEventListener?.("error", onError);
116
+ };
117
+ const fireClose = (info?: CloseInfo) => {
118
+ if (closeFired) return;
119
+ closeFired = true;
120
+ detach();
121
+ closeHandler?.(info);
122
+ };
123
+ const onClose = (event: WsCloseEvent) => fireClose({ code: event?.code, reason: event?.reason });
124
+ // `error` is usually followed by `close` (which carries code/reason); defer so
125
+ // close wins, and this still fires for an error with no following close.
126
+ const onError = () => setTimeout(() => fireClose(), 0);
87
127
  ws.addEventListener("message", onMessage);
128
+ wsLife.addEventListener("close", onClose);
129
+ wsLife.addEventListener("error", onError);
88
130
  return {
89
131
  send(bytes) {
90
132
  ws.send(bytes);
@@ -92,8 +134,11 @@ export function createWebSocketPipe(ws: WebSocketLike): BytesPipe {
92
134
  setReceive(h) {
93
135
  handler = h;
94
136
  },
137
+ onClose(h) {
138
+ closeHandler = h;
139
+ },
95
140
  close() {
96
- ws.removeEventListener?.("message", onMessage);
141
+ detach();
97
142
  ws.close?.();
98
143
  },
99
144
  };