bunite-core 0.12.1 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -4
- package/src/host/core/App.ts +19 -2
- package/src/host/core/BrowserView.ts +515 -38
- package/src/host/core/SurfaceBrowserIPC.ts +53 -3
- package/src/host/core/SurfaceManager.ts +603 -30
- package/src/host/core/SurfaceRegistry.ts +9 -1
- package/src/host/core/inputDispatch.ts +147 -0
- package/src/host/events/webviewEvents.ts +25 -1
- package/src/host/log.ts +6 -1
- package/src/host/native.ts +263 -1
- package/src/host/preloadBundle.ts +7 -2
- package/src/native/linux/bunite_linux_ffi.cpp +427 -6
- package/src/native/linux/bunite_linux_internal.h +18 -0
- package/src/native/linux/bunite_linux_runtime.cpp +6 -1
- package/src/native/linux/bunite_linux_utils.cpp +2 -2
- package/src/native/linux/bunite_linux_view.cpp +296 -5
- package/src/native/mac/bunite_mac_ffi.mm +630 -8
- package/src/native/mac/bunite_mac_internal.h +19 -0
- package/src/native/mac/bunite_mac_utils.mm +2 -2
- package/src/native/mac/bunite_mac_view.mm +371 -9
- package/src/native/shared/ffi_exports.h +200 -2
- package/src/native/win/native_host_cef.cpp +186 -11
- package/src/native/win/native_host_ffi.cpp +1194 -1
- package/src/native/win/native_host_internal.h +35 -0
- package/src/native/win/native_host_utils.cpp +2 -1
- package/src/native/win/process_helper_win.cpp +54 -27
- package/src/native/win-webview2/bunite_webview2_ffi.cpp +1023 -12
- package/src/native/win-webview2/webview2_internal.h +25 -0
- package/src/native/win-webview2/webview2_runtime.cpp +403 -34
- package/src/native/win-webview2/webview2_utils.cpp +30 -12
- package/src/preload/runtime.built.js +1 -1
- package/src/preload/runtime.ts +97 -0
- package/src/rpc/framework.ts +340 -8
- package/src/rpc/index.ts +32 -0
- package/src/webview/native.ts +253 -51
- package/src/webview/polyfill.ts +283 -22
|
@@ -50,14 +50,14 @@ std::string escapeJsonString(const std::string& s) {
|
|
|
50
50
|
return out;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
+
// Wildcard semantics shared with CEF/mac/linux backends: `*` only (no `?`),
|
|
54
|
+
// locale-respecting std::tolower. Keeping the 4 impls in lockstep is the rule.
|
|
53
55
|
bool globMatchCaseInsensitive(const std::string& pattern, const std::string& value) {
|
|
54
|
-
auto lower = [](char c) -> char {
|
|
55
|
-
return (c >= 'A' && c <= 'Z') ? static_cast<char>(c + 32) : c;
|
|
56
|
-
};
|
|
57
56
|
size_t pi = 0, vi = 0, star = std::string::npos, match = 0;
|
|
58
57
|
while (vi < value.size()) {
|
|
59
|
-
if (pi < pattern.size() &&
|
|
60
|
-
|
|
58
|
+
if (pi < pattern.size() &&
|
|
59
|
+
std::tolower(static_cast<unsigned char>(pattern[pi])) ==
|
|
60
|
+
std::tolower(static_cast<unsigned char>(value[vi]))) {
|
|
61
61
|
pi++; vi++;
|
|
62
62
|
} else if (pi < pattern.size() && pattern[pi] == '*') {
|
|
63
63
|
star = pi++; match = vi;
|
|
@@ -201,6 +201,10 @@ std::wstring exeDir() {
|
|
|
201
201
|
}
|
|
202
202
|
|
|
203
203
|
std::string defaultUserDataFolder() {
|
|
204
|
+
// Per-app via BUNITE_USER_DATA_DIR — shared path is a SingletonLock.
|
|
205
|
+
if (const char* env = std::getenv("BUNITE_USER_DATA_DIR"); env && *env) {
|
|
206
|
+
return std::string(env) + "\\WebView2";
|
|
207
|
+
}
|
|
204
208
|
wchar_t* base = nullptr;
|
|
205
209
|
if (SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, nullptr, &base) != S_OK || !base) {
|
|
206
210
|
if (base) CoTaskMemFree(base);
|
|
@@ -232,15 +236,29 @@ COREWEBVIEW2_PERMISSION_STATE buniteStateToWebView2(uint32_t state) {
|
|
|
232
236
|
}
|
|
233
237
|
}
|
|
234
238
|
|
|
239
|
+
// Whitelist must be exact-match — prefix would let `../../evil` style paths
|
|
240
|
+
// bypass nav-rule scrutiny (the appres scheme handler still blocks file
|
|
241
|
+
// access, but the navigation decision itself should be honest).
|
|
242
|
+
bool shouldAlwaysAllowNavigationUrl(const std::string& url) {
|
|
243
|
+
return url == "about:blank" ||
|
|
244
|
+
url == "appres://app.internal/internal/index.html";
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// Same semantics as CEF / mac / linux: `^` prefix = block, last-match-wins,
|
|
248
|
+
// default-allow. The shared shouldAlwaysAllowNavigationUrl whitelist guards
|
|
249
|
+
// about:blank + appres internal routes from being denied by user rules.
|
|
235
250
|
bool shouldAllowNavigation(const ViewHost* view, const std::string& url) {
|
|
236
|
-
if (!view || view->navigation_rules.empty())
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
251
|
+
if (!view || shouldAlwaysAllowNavigationUrl(url) || view->navigation_rules.empty()) {
|
|
252
|
+
return true;
|
|
253
|
+
}
|
|
254
|
+
bool allowed = true;
|
|
255
|
+
for (const auto& raw : view->navigation_rules) {
|
|
256
|
+
const bool block = !raw.empty() && raw.front() == '^';
|
|
257
|
+
const std::string pattern = block ? raw.substr(1) : raw;
|
|
258
|
+
if (pattern.empty()) continue;
|
|
259
|
+
if (globMatchCaseInsensitive(pattern, url)) allowed = !block;
|
|
242
260
|
}
|
|
243
|
-
return
|
|
261
|
+
return allowed;
|
|
244
262
|
}
|
|
245
263
|
|
|
246
264
|
} // namespace bunite_webview2
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var k_=Symbol.for("bunite.rpc.CallDef"),y_=Symbol.for("bunite.rpc.StreamDef"),S_=Symbol.for("bunite.rpc.CapDef"),v_=Symbol.for("bunite.rpc.CapRefToken"),h_=Symbol.for("bunite.rpc.CapArrayToken"),m_=Symbol.for("bunite.rpc.CapRecordToken"),P$=Symbol.for("bunite.rpc.Schema");function s8(_){return{[v_]:!0,cap:_}}s8.array=(_)=>({[h_]:!0,cap:_});s8.record=(_)=>({[m_]:!0,cap:_});var s=s8;function B8(_){return typeof _==="object"&&_!==null&&_[v_]===!0}function T8(_){return typeof _==="object"&&_!==null&&_[h_]===!0}function V8(_){return typeof _==="object"&&_!==null&&_[m_]===!0}function P8(_){return typeof _==="object"&&_!==null&&_[k_]===!0}function C8(_){return typeof _==="object"&&_!==null&&_[y_]===!0}function B(_){return{[k_]:!0,idempotent:!!_?.idempotent,returns:_?.returns}}function O8(_){return{[y_]:!0,hint:_?.hint}}function a(_,$,X){return{[S_]:!0,name:_,version:X?.version!=null?String(X.version):void 0,methods:$,disposal:X?.disposal??void 0}}function E8(_){return typeof _==="object"&&_!==null&&_[S_]===!0}function o8(_){return typeof _==="object"&&_!==null&&_[P$]===!0}var a8;try{a8=new TextDecoder}catch(_){}var D,c,q=0;var t_=[],r8=t_,t8=0,b={},E,Q8,d=0,r=0,g,$8,l=[],C,f_={useRecords:!1,mapsAsObjects:!0};class x8{}var __=new x8;__.name="MessagePack 0xC1";var Z8=!1,g_=2,p_,l_,u_;class t{constructor(_){if(_){if(_.useRecords===!1&&_.mapsAsObjects===void 0)_.mapsAsObjects=!0;if(_.sequential&&_.trusted!==!1){if(_.trusted=!0,!_.structures&&_.useRecords!=!1){if(_.structures=[],!_.maxSharedStructures)_.maxSharedStructures=0}}if(_.structures)_.structures.sharedLength=_.structures.length;else if(_.getStructures)(_.structures=[]).uninitialized=!0,_.structures.sharedLength=0;if(_.int64AsNumber)_.int64AsType="number"}Object.assign(this,_)}unpack(_,$){if(D)return H$(()=>{return j8(),this?this.unpack(_,$):t.prototype.unpack.call(f_,_,$)});if(!_.buffer&&_.constructor===ArrayBuffer)_=typeof Buffer<"u"?Buffer.from(_):new Uint8Array(_);if(typeof $==="object")c=$.end||_.length,q=$.start||0;else q=0,c=$>-1?$:_.length;t8=0,r=0,Q8=null,r8=t_,g=null,D=_;try{C=_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))}catch(X){if(D=null,_ instanceof Uint8Array)throw X;throw Error("Source must be a Uint8Array or Buffer but was a "+(_&&typeof _=="object"?_.constructor.name:typeof _))}if(this instanceof t){if(b=this,this.structures)return E=this.structures,w8($);else if(!E||E.length>0)E=[]}else if(b=f_,!E||E.length>0)E=[];return w8($)}unpackMultiple(_,$){let X,H=0;try{Z8=!0;let Q=_.length,Z=this?this.unpack(_,Q):I8.unpack(_,Q);if($){if($(Z,H,q)===!1)return;while(q<Q)if(H=q,$(w8(),H,q)===!1)return}else{X=[Z];while(q<Q)H=q,X.push(w8());return X}}catch(Q){throw Q.lastPosition=H,Q.values=X,Q}finally{Z8=!1,j8()}}_mergeStructures(_,$){if(l_)_=l_.call(this,_);if(_=_||[],Object.isFrozen(_))_=_.map((X)=>X.slice(0));for(let X=0,H=_.length;X<H;X++){let Q=_[X];if(Q){if(Q.isShared=!0,X>=32)Q.highByte=X-32>>5}}_.sharedLength=_.length;for(let X in $||[])if(X>=0){let H=_[X],Q=$[X];if(Q){if(H)(_.restoreStructures||(_.restoreStructures=[]))[X]=H;_[X]=Q}}return this.structures=_}decode(_,$){return this.unpack(_,$)}}function w8(_){try{if(!b.trusted&&!Z8){let X=E.sharedLength||0;if(X<E.length)E.length=X}let $;if(b.randomAccessStructure&&D[q]<64&&D[q]>=32&&p_){if($=p_(D,q,c,b),D=null,!(_&&_.lazy)&&$)$=$.toJSON();q=c}else $=h();if(g)q=g.postBundlePosition,g=null;if(Z8)E.restoreStructures=null;if(q==c){if(E&&E.restoreStructures)d_();if(E=null,D=null,$8)$8=null}else if(q>c)throw Error("Unexpected end of MessagePack data");else if(!Z8){let X;try{X=JSON.stringify($,(H,Q)=>typeof Q==="bigint"?`${Q}n`:Q).slice(0,100)}catch(H){X="(JSON view not available "+H+")"}throw Error("Data read, but end of buffer not reached "+X)}return $}catch($){if(E&&E.restoreStructures)d_();if(j8(),$ instanceof RangeError||$.message.startsWith("Unexpected end of buffer")||q>c)$.incomplete=!0;throw $}}function d_(){for(let _ in E.restoreStructures)E[_]=E.restoreStructures[_];E.restoreStructures=null}function h(){let _=D[q++];if(_<160)if(_<128)if(_<64)return _;else{let $=E[_&63]||b.getStructures&&e_()[_&63];if($){if(!$.read)$.read=$_($,_&63);return $.read()}else return _}else if(_<144)if(_-=128,b.mapsAsObjects){let $={};for(let X=0;X<_;X++){let H=$$();if(H==="__proto__")H="__proto_";$[H]=h()}return $}else{let $=new Map;for(let X=0;X<_;X++)$.set(h(),h());return $}else{_-=144;let $=Array(_);for(let X=0;X<_;X++)$[X]=h();if(b.freezeData)return Object.freeze($);return $}else if(_<192){let $=_-160;if(r>=q)return Q8.slice(q-d,(q+=$)-d);if(r==0&&c<140){let X=$<16?X_($):_$($);if(X!=null)return X}return e8($)}else{let $;switch(_){case 192:return null;case 193:if(g)if($=h(),$>0)return g[1].slice(g.position1,g.position1+=$);else return g[0].slice(g.position0,g.position0-=$);return __;case 194:return!1;case 195:return!0;case 196:if($=D[q++],$===void 0)throw Error("Unexpected end of buffer");return i8($);case 197:return $=C.getUint16(q),q+=2,i8($);case 198:return $=C.getUint32(q),q+=4,i8($);case 199:return K8(D[q++]);case 200:return $=C.getUint16(q),q+=2,K8($);case 201:return $=C.getUint32(q),q+=4,K8($);case 202:if($=C.getFloat32(q),b.useFloat32>2){let X=b8[(D[q]&127)<<1|D[q+1]>>7];return q+=4,(X*$+($>0?0.5:-0.5)>>0)/X}return q+=4,$;case 203:return $=C.getFloat64(q),q+=8,$;case 204:return D[q++];case 205:return $=C.getUint16(q),q+=2,$;case 206:return $=C.getUint32(q),q+=4,$;case 207:if(b.int64AsType==="number")$=C.getUint32(q)*4294967296,$+=C.getUint32(q+4);else if(b.int64AsType==="string")$=C.getBigUint64(q).toString();else if(b.int64AsType==="auto"){if($=C.getBigUint64(q),$<=BigInt(2)<<BigInt(52))$=Number($)}else $=C.getBigUint64(q);return q+=8,$;case 208:return C.getInt8(q++);case 209:return $=C.getInt16(q),q+=2,$;case 210:return $=C.getInt32(q),q+=4,$;case 211:if(b.int64AsType==="number")$=C.getInt32(q)*4294967296,$+=C.getUint32(q+4);else if(b.int64AsType==="string")$=C.getBigInt64(q).toString();else if(b.int64AsType==="auto"){if($=C.getBigInt64(q),$>=BigInt(-2)<<BigInt(52)&&$<=BigInt(2)<<BigInt(52))$=Number($)}else $=C.getBigInt64(q);return q+=8,$;case 212:if($=D[q++],$==114)return a_(D[q++]&63);else{let X=l[$];if(X)if(X.read)return q++,X.read(h());else if(X.noBuffer)return q++,X();else return X(D.subarray(q,++q));else throw Error("Unknown extension "+$)}case 213:if($=D[q],$==114)return q++,a_(D[q++]&63,D[q++]);else return K8(2);case 214:return K8(4);case 215:return K8(8);case 216:return K8(16);case 217:if($=D[q++],r>=q)return Q8.slice(q-d,(q+=$)-d);return E$($);case 218:if($=C.getUint16(q),q+=2,r>=q)return Q8.slice(q-d,(q+=$)-d);return w$($);case 219:if($=C.getUint32(q),q+=4,r>=q)return Q8.slice(q-d,(q+=$)-d);return j$($);case 220:return $=C.getUint16(q),q+=2,n_($);case 221:return $=C.getUint32(q),q+=4,n_($);case 222:return $=C.getUint16(q),q+=2,s_($);case 223:return $=C.getUint32(q),q+=4,s_($);default:if(_>=224)return _-256;if(_===void 0){let X=Error("Unexpected end of MessagePack data");throw X.incomplete=!0,X}throw Error("Unknown MessagePack token "+_)}}}var C$=/^[a-zA-Z_$][a-zA-Z\d_$]*$/;function $_(_,$){function X(){if(X.count++>g_){let Q;try{Q=_.read=Function("r","return function(){return "+(b.freezeData?"Object.freeze":"")+"({"+_.map((Z)=>Z==="__proto__"?"__proto_:r()":C$.test(Z)?Z+":r()":"["+JSON.stringify(Z)+"]:r()").join(",")+"})}")(h)}catch(Z){return g_=1/0,X()}if(_.highByte===0)_.read=c_($,_.read);return Q()}let H={};for(let Q=0,Z=_.length;Q<Z;Q++){let J=_[Q];if(J==="__proto__")J="__proto_";H[J]=h()}if(b.freezeData)return Object.freeze(H);return H}if(X.count=0,_.highByte===0)return c_($,X);return X}var c_=(_,$)=>{return function(){let X=D[q++];if(X===0)return $();let H=_<32?-(_+(X<<5)):_+(X<<5),Q=E[H]||e_()[H];if(!Q)throw Error("Record id is not defined for "+H);if(!Q.read)Q.read=$_(Q,_);return Q.read()}};function e_(){let _=H$(()=>{return D=null,b.getStructures()});return E=b._mergeStructures(_,E)}var e8=F8,E$=F8,w$=F8,j$=F8;function F8(_){let $;if(_<16){if($=X_(_))return $}if(_>64&&a8)return a8.decode(D.subarray(q,q+=_));let X=q+_,H=[];$="";while(q<X){let Q=D[q++];if((Q&128)===0)H.push(Q);else if((Q&224)===192){let Z=D[q++]&63,J=(Q&31)<<6|Z;if(J<128)H.push(65533);else H.push(J)}else if((Q&240)===224){let Z=D[q++]&63,J=D[q++]&63,Y=(Q&31)<<12|Z<<6|J;if(Y<2048||Y>=55296&&Y<=57343)H.push(65533);else H.push(Y)}else if((Q&248)===240){let Z=D[q++]&63,J=D[q++]&63,Y=D[q++]&63,U=(Q&7)<<18|Z<<12|J<<6|Y;if(U<65536||U>1114111)H.push(65533);else if(U>65535)U-=65536,H.push(U>>>10&1023|55296),U=56320|U&1023,H.push(U);else H.push(U)}else H.push(65533);if(H.length>=4096)$+=f.apply(String,H),H.length=0}if(H.length>0)$+=f.apply(String,H);return $}function n_(_){let $=Array(_);for(let X=0;X<_;X++)$[X]=h();if(b.freezeData)return Object.freeze($);return $}function s_(_){if(b.mapsAsObjects){let $={};for(let X=0;X<_;X++){let H=$$();if(H==="__proto__")H="__proto_";$[H]=h()}return $}else{let $=new Map;for(let X=0;X<_;X++)$.set(h(),h());return $}}var f=String.fromCharCode;function _$(_){let $=q,X=Array(_);for(let H=0;H<_;H++){let Q=D[q++];if((Q&128)>0){q=$;return}X[H]=Q}return f.apply(String,X)}function X_(_){if(_<4)if(_<2)if(_===0)return"";else{let $=D[q++];if(($&128)>1){q-=1;return}return f($)}else{let $=D[q++],X=D[q++];if(($&128)>0||(X&128)>0){q-=2;return}if(_<3)return f($,X);let H=D[q++];if((H&128)>0){q-=3;return}return f($,X,H)}else{let $=D[q++],X=D[q++],H=D[q++],Q=D[q++];if(($&128)>0||(X&128)>0||(H&128)>0||(Q&128)>0){q-=4;return}if(_<6)if(_===4)return f($,X,H,Q);else{let Z=D[q++];if((Z&128)>0){q-=5;return}return f($,X,H,Q,Z)}else if(_<8){let Z=D[q++],J=D[q++];if((Z&128)>0||(J&128)>0){q-=6;return}if(_<7)return f($,X,H,Q,Z,J);let Y=D[q++];if((Y&128)>0){q-=7;return}return f($,X,H,Q,Z,J,Y)}else{let Z=D[q++],J=D[q++],Y=D[q++],U=D[q++];if((Z&128)>0||(J&128)>0||(Y&128)>0||(U&128)>0){q-=8;return}if(_<10)if(_===8)return f($,X,H,Q,Z,J,Y,U);else{let W=D[q++];if((W&128)>0){q-=9;return}return f($,X,H,Q,Z,J,Y,U,W)}else if(_<12){let W=D[q++],V=D[q++];if((W&128)>0||(V&128)>0){q-=10;return}if(_<11)return f($,X,H,Q,Z,J,Y,U,W,V);let T=D[q++];if((T&128)>0){q-=11;return}return f($,X,H,Q,Z,J,Y,U,W,V,T)}else{let W=D[q++],V=D[q++],T=D[q++],w=D[q++];if((W&128)>0||(V&128)>0||(T&128)>0||(w&128)>0){q-=12;return}if(_<14)if(_===12)return f($,X,H,Q,Z,J,Y,U,W,V,T,w);else{let k=D[q++];if((k&128)>0){q-=13;return}return f($,X,H,Q,Z,J,Y,U,W,V,T,w,k)}else{let k=D[q++],v=D[q++];if((k&128)>0||(v&128)>0){q-=14;return}if(_<15)return f($,X,H,Q,Z,J,Y,U,W,V,T,w,k,v);let p=D[q++];if((p&128)>0){q-=15;return}return f($,X,H,Q,Z,J,Y,U,W,V,T,w,k,v,p)}}}}}function o_(){let _=D[q++],$;if(_<192)$=_-160;else switch(_){case 217:$=D[q++];break;case 218:$=C.getUint16(q),q+=2;break;case 219:$=C.getUint32(q),q+=4;break;default:throw Error("Expected string")}return F8($)}function i8(_){return b.copyBuffers?Uint8Array.prototype.slice.call(D,q,q+=_):D.subarray(q,q+=_)}function K8(_){let $=D[q++];if(l[$]){let X;return l[$](D.subarray(q,X=q+=_),(H)=>{q=H;try{return h()}finally{q=X}})}else throw Error("Unknown extension type "+$)}var i_=Array(4096);function $$(){let _=D[q++];if(_>=160&&_<192){if(_=_-160,r>=q)return Q8.slice(q-d,(q+=_)-d);else if(!(r==0&&c<180))return e8(_)}else return q--,X$(h());let $=(_<<5^(_>1?C.getUint16(q):_>0?D[q]:0))&4095,X=i_[$],H=q,Q=q+_-3,Z,J=0;if(X&&X.bytes==_){while(H<Q){if(Z=C.getUint32(H),Z!=X[J++]){H=1879048192;break}H+=4}Q+=3;while(H<Q)if(Z=D[H++],Z!=X[J++]){H=1879048192;break}if(H===Q)return q=H,X.string;Q-=3,H=q}X=[],i_[$]=X,X.bytes=_;while(H<Q)Z=C.getUint32(H),X.push(Z),H+=4;Q+=3;while(H<Q)Z=D[H++],X.push(Z);let Y=_<16?X_(_):_$(_);if(Y!=null)return X.string=Y;return X.string=e8(_)}function X$(_){if(typeof _==="string")return _;if(typeof _==="number"||typeof _==="boolean"||typeof _==="bigint")return _.toString();if(_==null)return _+"";if(b.allowArraysInMapKeys&&Array.isArray(_)&&_.flat().every(($)=>["string","number","boolean","bigint"].includes(typeof $)))return _.flat().toString();throw Error(`Invalid property type for record: ${typeof _}`)}var a_=(_,$)=>{let X=h().map(X$),H=_;if($!==void 0)_=_<32?-(($<<5)+_):($<<5)+_,X.highByte=$;let Q=E[_];if(Q&&(Q.isShared||Z8))(E.restoreStructures||(E.restoreStructures=[]))[_]=Q;return E[_]=X,X.read=$_(X,H),X.read()};l[0]=()=>{};l[0].noBuffer=!0;l[66]=(_)=>{let $=_.byteLength%8||8,X=BigInt(_[0]&128?_[0]-256:_[0]);for(let H=1;H<$;H++)X<<=BigInt(8),X+=BigInt(_[H]);if(_.byteLength!==$){let H=new DataView(_.buffer,_.byteOffset,_.byteLength),Q=(Z,J)=>{let Y=J-Z;if(Y<=40){let T=H.getBigUint64(Z);for(let w=Z+8;w<J;w+=8)T<<=BigInt(64),T|=H.getBigUint64(w);return T}let U=Z+(Y>>4<<3),W=Q(Z,U),V=Q(U,J);return W<<BigInt((J-U)*8)|V};X=X<<BigInt((H.byteLength-$)*8)|Q($,H.byteLength)}return X};var r_={Error,EvalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError,AggregateError:typeof AggregateError==="function"?AggregateError:null};l[101]=()=>{let _=h();if(!r_[_[0]]){let $=Error(_[1],{cause:_[2]});return $.name=_[0],$}return r_[_[0]](_[1],{cause:_[2]})};l[105]=(_)=>{if(b.structuredClone===!1)throw Error("Structured clone extension is disabled");let $=C.getUint32(q-4);if(!$8)$8=new Map;let X=D[q],H;if(X>=144&&X<160||X==220||X==221)H=[];else if(X>=128&&X<144||X==222||X==223)H=new Map;else if((X>=199&&X<=201||X>=212&&X<=216)&&D[q+1]===115)H=new Set;else H={};let Q={target:H};$8.set($,Q);let Z=h();if(!Q.used)return Q.target=Z;else Object.assign(H,Z);if(H instanceof Map)for(let[J,Y]of Z.entries())H.set(J,Y);if(H instanceof Set)for(let J of Array.from(Z))H.add(J);return H};l[112]=(_)=>{if(b.structuredClone===!1)throw Error("Structured clone extension is disabled");let $=C.getUint32(q-4),X=$8.get($);return X.used=!0,X.target};l[115]=()=>new Set(h());var H_=["Int8","Uint8","Uint8Clamped","Int16","Uint16","Int32","Uint32","Float32","Float64","BigInt64","BigUint64"].map((_)=>_+"Array"),x$=typeof globalThis==="object"?globalThis:window;l[116]=(_)=>{let $=_[0],X=Uint8Array.prototype.slice.call(_,1).buffer,H=H_[$];if(!H){if($===16)return X;if($===17)return new DataView(X);throw Error("Could not find typed array for code "+$)}return new x$[H](X)};l[120]=()=>{let _=h();return new RegExp(_[0],_[1])};var b$=[];l[98]=(_)=>{let $=(_[0]<<24)+(_[1]<<16)+(_[2]<<8)+_[3],X=q;return q+=$-_.length,g=b$,g=[o_(),o_()],g.position0=0,g.position1=0,g.postBundlePosition=q,q=X,h()};l[255]=(_)=>{if(_.length==4)return new Date((_[0]*16777216+(_[1]<<16)+(_[2]<<8)+_[3])*1000);else if(_.length==8)return new Date(((_[0]<<22)+(_[1]<<14)+(_[2]<<6)+(_[3]>>2))/1e6+((_[3]&3)*4294967296+_[4]*16777216+(_[5]<<16)+(_[6]<<8)+_[7])*1000);else if(_.length==12)return new Date(((_[0]<<24)+(_[1]<<16)+(_[2]<<8)+_[3])/1e6+((_[4]&128?-281474976710656:0)+_[6]*1099511627776+_[7]*4294967296+_[8]*16777216+(_[9]<<16)+(_[10]<<8)+_[11])*1000);else return new Date("invalid")};function H$(_){if(u_)u_();let $=c,X=q,H=t8,Q=d,Z=r,J=Q8,Y=r8,U=$8,W=g,V=new Uint8Array(D.slice(0,c)),T=E,w=E.slice(0,E.length),k=b,v=Z8,p=_();return c=$,q=X,t8=H,d=Q,r=Z,Q8=J,r8=Y,$8=U,g=W,D=V,Z8=v,E=T,E.splice(0,E.length,...w),b=k,C=new DataView(D.buffer,D.byteOffset,D.byteLength),p}function j8(){D=null,$8=null,E=null}function Q$(_){if(_.unpack)l[_.type]=_.unpack;else l[_.type]=_}var b8=Array(147);for(let _=0;_<256;_++)b8[_]=+("1e"+Math.floor(45.15-_*0.30103));var I8=new t({useRecords:!1}),I$=I8.unpack,k$=I8.unpackMultiple,y$=I8.unpack;var S$=new Float32Array(1),GX=new Uint8Array(S$.buffer,0,4);var y8;try{y8=new TextEncoder}catch(_){}var S8,v8,N8=typeof Buffer<"u",k8=N8?function(_){return Buffer.allocUnsafeSlow(_)}:Uint8Array,N$=N8?Buffer:Uint8Array,Z$=N8?4294967296:2144337920,N,D8,I,K=0,u,S=null,v$,h$=21760,m$=/[\u0080-\uFFFF]/,J8=Symbol("record-id");class G8 extends t{constructor(_){super(_);this.offset=0;let $,X,H,Q,Z,J=N$.prototype.utf8Write?function(G,M){return N.utf8Write(G,M,N.byteLength-M)}:y8&&y8.encodeInto?function(G,M){return y8.encodeInto(G,N.subarray(M)).written}:!1,Y=this;if(!_)_={};let U=_&&_.sequential,W=_.structures||_.saveStructures,V=_.maxSharedStructures;if(V==null)V=W?32:0;if(V>8160)throw Error("Maximum maxSharedStructure is 8160");if(_.structuredClone&&_.moreTypes==null)this.moreTypes=!0;let T=_.maxOwnStructures;if(T==null)T=W?32:64;if(!this.structures&&_.useRecords!=!1)this.structures=[];let w=V>32||T+V>64,k=V+64,v=V+T+64;if(v>8256)throw Error("Maximum maxSharedStructure + maxOwnStructure is 8192");let p=[],m=0,e=0;this.pack=this.encode=function(G,M){if(!N)N=new k8(8192),I=N.dataView||(N.dataView=new DataView(N.buffer,0,8192)),K=0;if(u=N.length-10,u-K<2048)N=new k8(N.length),I=N.dataView||(N.dataView=new DataView(N.buffer,0,N.length)),u=N.length-10,K=0;else K=K+7&2147483640;if(X=K,M&O$)K+=M&255;if(Z=Y.structuredClone?new Map:null,Y.bundleStrings&&typeof G!=="string")S=[],S.size=1/0;else S=null;if(Q=Y.structures,Q){if(Q.uninitialized)Q=Y._mergeStructures(Y.getStructures());let L=Q.sharedLength||0;if(L>V)throw Error("Shared structures is larger than maximum shared structures, try increasing maxSharedStructures to "+Q.sharedLength);if(!Q.transitions){Q.transitions=Object.create(null);for(let O=0;O<L;O++){let z=Q[O];if(!z)continue;let A,R=Q.transitions;for(let j=0,x=z.length;j<x;j++){let i=z[j];if(A=R[i],!A)A=R[i]=Object.create(null);R=A}R[J8]=O+64}this.lastNamedStructuresLength=L}if(!U)Q.nextId=L+64}if(H)H=!1;let F;try{if(Y.randomAccessStructure&&G&&typeof G==="object")if(G.constructor===Object)I_(G);else if(G.constructor!==Map&&!Array.isArray(G)&&!v8.some((O)=>G instanceof O))I_(G.toJSON?G.toJSON():G);else y(G);else y(G);let L=S;if(S)K$(X,y,0);if(Z&&Z.idsToInsert){let O=Z.idsToInsert.sort((j,x)=>j.offset>x.offset?1:-1),z=O.length,A=-1;while(L&&z>0){let j=O[--z].offset+X;if(j<L.stringsPosition+X&&A===-1)A=0;if(j>L.position+X){if(A>=0)A+=6}else{if(A>=0)I.setUint32(L.position+X,I.getUint32(L.position+X)+A),A=-1;L=L.previous,z++}}if(A>=0&&L)I.setUint32(L.position+X,I.getUint32(L.position+X)+A);if(K+=O.length*6,K>u)_8(K);Y.offset=K;let R=f$(N.subarray(X,K),O);return Z=null,R}if(Y.offset=K,M&Y$)return N.start=X,N.end=K,N;return N.subarray(X,K)}catch(L){throw F=L,L}finally{if(Q){if(z8(),H&&Y.saveStructures){let L=Q.sharedLength||0,O=N.subarray(X,K),z=g$(Q,Y);if(!F){if(Y.saveStructures(z,z.isCompatible)===!1)return Y.pack(G,M);if(Y.lastNamedStructuresLength=L,N.length>1073741824)N=null;return O}}}if(N.length>1073741824)N=null;if(M&L$)K=X}};let z8=()=>{if(e<10)e++;let G=Q.sharedLength||0;if(Q.length>G&&!U)Q.length=G;if(m>1e4){if(Q.transitions=null,e=0,m=0,p.length>0)p=[]}else if(p.length>0&&!U){for(let M=0,F=p.length;M<F;M++)p[M][J8]=0;p=[]}},c8=(G)=>{var M=G.length;if(M<16)N[K++]=144|M;else if(M<65536)N[K++]=220,N[K++]=M>>8,N[K++]=M&255;else N[K++]=221,I.setUint32(K,M),K+=4;for(let F=0;F<M;F++)y(G[F])},y=(G)=>{if(K>u)N=_8(K);var M=typeof G,F;if(M==="string"){let L=G.length;if(S&&L>=4&&L<4096){if((S.size+=L)>h$){let R,j=(S[0]?S[0].length*3+S[1].length:0)+10;if(K+j>u)N=_8(K+j);let x;if(S.position)x=S,N[K]=200,K+=3,N[K++]=98,R=K-X,K+=4,K$(X,y,0),I.setUint16(R+X-3,K-X-R);else N[K++]=214,N[K++]=98,R=K-X,K+=4;S=["",""],S.previous=x,S.size=0,S.position=R}let A=m$.test(G);S[A?0:1]+=G,N[K++]=193,y(A?-L:L);return}let O;if(L<32)O=1;else if(L<256)O=2;else if(L<65536)O=3;else O=5;let z=L*3;if(K+z>u)N=_8(K+z);if(L<64||!J){let A,R,j,x=K+O;for(A=0;A<L;A++)if(R=G.charCodeAt(A),R<128)N[x++]=R;else if(R<2048)N[x++]=R>>6|192,N[x++]=R&63|128;else if((R&64512)===55296&&((j=G.charCodeAt(A+1))&64512)===56320)R=65536+((R&1023)<<10)+(j&1023),A++,N[x++]=R>>18|240,N[x++]=R>>12&63|128,N[x++]=R>>6&63|128,N[x++]=R&63|128;else N[x++]=R>>12|224,N[x++]=R>>6&63|128,N[x++]=R&63|128;F=x-K-O}else F=J(G,K+O);if(F<32)N[K++]=160|F;else if(F<256){if(O<2)N.copyWithin(K+2,K+1,K+1+F);N[K++]=217,N[K++]=F}else if(F<65536){if(O<3)N.copyWithin(K+3,K+2,K+2+F);N[K++]=218,N[K++]=F>>8,N[K++]=F&255}else{if(O<5)N.copyWithin(K+5,K+3,K+3+F);N[K++]=219,I.setUint32(K,F),K+=4}K+=F}else if(M==="number")if(G>>>0===G)if(G<32||G<128&&this.useRecords===!1||G<64&&!this.randomAccessStructure)N[K++]=G;else if(G<256)N[K++]=204,N[K++]=G;else if(G<65536)N[K++]=205,N[K++]=G>>8,N[K++]=G&255;else N[K++]=206,I.setUint32(K,G),K+=4;else if(G>>0===G)if(G>=-32)N[K++]=256+G;else if(G>=-128)N[K++]=208,N[K++]=G+256;else if(G>=-32768)N[K++]=209,I.setInt16(K,G),K+=2;else N[K++]=210,I.setInt32(K,G),K+=4;else{let L;if((L=this.useFloat32)>0&&G<4294967296&&G>=-2147483648){N[K++]=202,I.setFloat32(K,G);let O;if(L<4||(O=G*b8[(N[K]&127)<<1|N[K+1]>>7])>>0===O){K+=4;return}else K--}N[K++]=203,I.setFloat64(K,G),K+=8}else if(M==="object"||M==="function")if(!G)N[K++]=192;else{if(Z){let O=Z.get(G);if(O){if(!O.id){let z=Z.idsToInsert||(Z.idsToInsert=[]);O.id=z.push(O)}N[K++]=214,N[K++]=112,I.setUint32(K,O.id),K+=4;return}else Z.set(G,{offset:K-X})}let L=G.constructor;if(L===Object)A8(G);else if(L===Array)c8(G);else if(L===Map)if(this.mapAsEmptyObject)N[K++]=128;else{if(F=G.size,F<16)N[K++]=128|F;else if(F<65536)N[K++]=222,N[K++]=F>>8,N[K++]=F&255;else N[K++]=223,I.setUint32(K,F),K+=4;for(let[O,z]of G)y(O),y(z)}else{for(let O=0,z=S8.length;O<z;O++){let A=v8[O];if(G instanceof A){let R=S8[O];if(R.write){if(R.type)N[K++]=212,N[K++]=R.type,N[K++]=0;let L8=R.write.call(this,G);if(L8===G)if(Array.isArray(G))c8(G);else A8(G);else y(L8);return}let j=N,x=I,i=K;N=null;let H8;try{H8=R.pack.call(this,G,(L8)=>{if(N=j,j=null,K+=L8,K>u)_8(K);return{target:N,targetView:I,position:K-L8}},y)}finally{if(j)N=j,I=x,K=i,u=N.length-10}if(H8){if(H8.length+K>u)_8(H8.length+K);K=q$(H8,N,K,R.type)}return}}if(Array.isArray(G))c8(G);else{if(G.toJSON){let O=G.toJSON();if(O!==G)return y(O)}if(M==="function")return y(this.writeFunction&&this.writeFunction(G));A8(G)}}}else if(M==="boolean")N[K++]=G?195:194;else if(M==="bigint"){if(G<9223372036854776000&&G>=-9223372036854776000)N[K++]=211,I.setBigInt64(K,G);else if(G<18446744073709552000&&G>0)N[K++]=207,I.setBigUint64(K,G);else if(this.largeBigIntToFloat)N[K++]=203,I.setFloat64(K,Number(G));else if(this.largeBigIntToString)return y(G.toString());else if(this.useBigIntExtension||this.moreTypes){let L=G<0?BigInt(-1):BigInt(0),O;if(G>>BigInt(65536)===L){let z=BigInt(18446744073709552000)-BigInt(1),A=[];while(!0){if(A.push(G&z),G>>BigInt(63)===L)break;G>>=BigInt(64)}O=new Uint8Array(new BigUint64Array(A).buffer),O.reverse()}else{let z=G<0,A=(z?~G:G).toString(16);if(A.length%2)A="0"+A;else if(parseInt(A.charAt(0),16)>=8)A="00"+A;if(N8)O=Buffer.from(A,"hex");else{O=new Uint8Array(A.length/2);for(let R=0;R<O.length;R++)O[R]=parseInt(A.slice(R*2,R*2+2),16)}if(z)for(let R=0;R<O.length;R++)O[R]=~O[R]}if(O.length+K>u)_8(O.length+K);K=q$(O,N,K,66);return}else throw RangeError(G+" 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");K+=8}else if(M==="undefined")if(this.encodeUndefinedAsNil)N[K++]=192;else N[K++]=212,N[K++]=0,N[K++]=0;else throw Error("Unknown type: "+M)},w_=this.variableMapSize||this.coercibleKeyAsNumber||this.skipValues?(G)=>{let M;if(this.skipValues){M=[];for(let O in G)if((typeof G.hasOwnProperty!=="function"||G.hasOwnProperty(O))&&!this.skipValues.includes(G[O]))M.push(O)}else M=Object.keys(G);let F=M.length;if(F<16)N[K++]=128|F;else if(F<65536)N[K++]=222,N[K++]=F>>8,N[K++]=F&255;else N[K++]=223,I.setUint32(K,F),K+=4;let L;if(this.coercibleKeyAsNumber)for(let O=0;O<F;O++){L=M[O];let z=Number(L);y(isNaN(z)?L:z),y(G[L])}else for(let O=0;O<F;O++)y(L=M[O]),y(G[L])}:(G)=>{N[K++]=222;let M=K-X;K+=2;let F=0;for(let L in G)if(typeof G.hasOwnProperty!=="function"||G.hasOwnProperty(L))y(L),y(G[L]),F++;if(F>65535)throw Error('Object is too large to serialize with fast 16-bit map size, use the "variableMapSize" option to serialize this object');N[M+++X]=F>>8,N[M+X]=F&255},j_=this.useRecords===!1?w_:_.progressiveRecords&&!w?(G)=>{let M,F=Q.transitions||(Q.transitions=Object.create(null)),L=K++-X,O;for(let z in G)if(typeof G.hasOwnProperty!=="function"||G.hasOwnProperty(z)){if(M=F[z],M)F=M;else{let A=Object.keys(G),R=F;F=Q.transitions;let j=0;for(let x=0,i=A.length;x<i;x++){let H8=A[x];if(M=F[H8],!M)M=F[H8]=Object.create(null),j++;F=M}if(L+X+1==K)K--,n8(F,A,j);else b_(F,A,L,j);O=!0,F=R[z]}y(G[z])}if(!O){let z=F[J8];if(z)N[L+X]=z;else b_(F,Object.keys(G),L,0)}}:(G)=>{let M,F=Q.transitions||(Q.transitions=Object.create(null)),L=0;for(let z in G)if(typeof G.hasOwnProperty!=="function"||G.hasOwnProperty(z)){if(M=F[z],!M)M=F[z]=Object.create(null),L++;F=M}let O=F[J8];if(O)if(O>=96&&w)N[K++]=((O-=96)&31)+96,N[K++]=O>>5;else N[K++]=O;else n8(F,F.__keys__||Object.keys(G),L);for(let z in G)if(typeof G.hasOwnProperty!=="function"||G.hasOwnProperty(z))y(G[z])},x_=typeof this.useRecords=="function"&&this.useRecords,A8=x_?(G)=>{x_(G)?j_(G):w_(G)}:j_,_8=(G)=>{let M;if(G>16777216){if(G-X>Z$)throw Error("Packed buffer would be larger than maximum buffer size");M=Math.min(Z$,Math.round(Math.max((G-X)*(G>67108864?1.25:2),4194304)/4096)*4096)}else M=(Math.max(G-X<<2,N.length-1)>>12)+1<<12;let F=new k8(M);if(I=F.dataView||(F.dataView=new DataView(F.buffer,0,M)),G=Math.min(G,N.length),N.copy)N.copy(F,0,X,G);else F.set(N.slice(X,G));return K-=X,X=0,u=F.length-10,N=F},n8=(G,M,F)=>{let L=Q.nextId;if(!L)L=64;if(L<k&&this.shouldShareStructure&&!this.shouldShareStructure(M)){if(L=Q.nextOwnId,!(L<v))L=k;Q.nextOwnId=L+1}else{if(L>=v)L=k;Q.nextId=L+1}let O=M.highByte=L>=96&&w?L-96>>5:-1;if(G[J8]=L,G.__keys__=M,Q[L-64]=M,L<k)if(M.isShared=!0,Q.sharedLength=L-63,H=!0,O>=0)N[K++]=(L&31)+96,N[K++]=O;else N[K++]=L;else{if(O>=0)N[K++]=213,N[K++]=114,N[K++]=(L&31)+96,N[K++]=O;else N[K++]=212,N[K++]=114,N[K++]=L;if(F)m+=e*F;if(p.length>=T)p.shift()[J8]=0;p.push(G),y(M)}},b_=(G,M,F,L)=>{let O=N,z=K,A=u,R=X;if(N=D8,K=0,X=0,!N)D8=N=new k8(8192);u=N.length-10,n8(G,M,L),D8=N;let j=K;if(N=O,K=z,u=A,X=R,j>1){let x=K+j-1;if(x>u)_8(x);let i=F+X;N.copyWithin(i+j,i+1,K),N.set(D8.slice(0,j),i),K=x}else N[F+X]=D8[0]},I_=(G)=>{let M=v$(G,N,X,K,Q,_8,(F,L,O)=>{if(O)return H=!0;K=L;let z=N;if(y(F),z8(),z!==N)return{position:K,targetView:I,target:N};return K},this);if(M===0)return A8(G);K=M}}useBuffer(_){N=_,N.dataView||(N.dataView=new DataView(N.buffer,N.byteOffset,N.byteLength)),I=N.dataView,K=0}set position(_){K=_}get position(){return K}clearSharedData(){if(this.structures)this.structures=[];if(this.typedStructs)this.typedStructs=[]}}v8=[Date,Set,Error,RegExp,ArrayBuffer,Object.getPrototypeOf(Uint8Array.prototype).constructor,DataView,x8];S8=[{pack(_,$,X){let H=_.getTime()/1000;if((this.useTimestamp32||_.getMilliseconds()===0)&&H>=0&&H<4294967296){let{target:Q,targetView:Z,position:J}=$(6);Q[J++]=214,Q[J++]=255,Z.setUint32(J,H)}else if(H>0&&H<4294967296){let{target:Q,targetView:Z,position:J}=$(10);Q[J++]=215,Q[J++]=255,Z.setUint32(J,_.getMilliseconds()*4000000+(H/1000/4294967296>>0)),Z.setUint32(J+4,H)}else if(isNaN(H)){if(this.onInvalidDate)return $(0),X(this.onInvalidDate());let{target:Q,targetView:Z,position:J}=$(3);Q[J++]=212,Q[J++]=255,Q[J++]=255}else{let{target:Q,targetView:Z,position:J}=$(15);Q[J++]=199,Q[J++]=12,Q[J++]=255,Z.setUint32(J,_.getMilliseconds()*1e6),Z.setBigInt64(J+4,BigInt(Math.floor(H)))}}},{pack(_,$,X){if(this.setAsEmptyObject)return $(0),X({});let H=Array.from(_),{target:Q,position:Z}=$(this.moreTypes?3:0);if(this.moreTypes)Q[Z++]=212,Q[Z++]=115,Q[Z++]=0;X(H)}},{pack(_,$,X){let{target:H,position:Q}=$(this.moreTypes?3:0);if(this.moreTypes)H[Q++]=212,H[Q++]=101,H[Q++]=0;X([_.name,_.message,_.cause])}},{pack(_,$,X){let{target:H,position:Q}=$(this.moreTypes?3:0);if(this.moreTypes)H[Q++]=212,H[Q++]=120,H[Q++]=0;X([_.source,_.flags])}},{pack(_,$){if(this.moreTypes)Q_(_,16,$);else Z_(N8?Buffer.from(_):new Uint8Array(_),$)}},{pack(_,$){let X=_.constructor;if(X!==N$&&this.moreTypes)Q_(_,H_.indexOf(X.name),$);else Z_(_,$)}},{pack(_,$){if(this.moreTypes)Q_(_,17,$);else Z_(N8?Buffer.from(_):new Uint8Array(_),$)}},{pack(_,$){let{target:X,position:H}=$(1);X[H]=193}}];function Q_(_,$,X,H){let Q=_.byteLength;if(Q+1<256){var{target:Z,position:J}=X(4+Q);Z[J++]=199,Z[J++]=Q+1}else if(Q+1<65536){var{target:Z,position:J}=X(5+Q);Z[J++]=200,Z[J++]=Q+1>>8,Z[J++]=Q+1&255}else{var{target:Z,position:J,targetView:Y}=X(7+Q);Z[J++]=201,Y.setUint32(J,Q+1),J+=4}if(Z[J++]=116,Z[J++]=$,!_.buffer)_=new Uint8Array(_);Z.set(new Uint8Array(_.buffer,_.byteOffset,_.byteLength),J)}function Z_(_,$){let X=_.byteLength;var H,Q;if(X<256){var{target:H,position:Q}=$(X+2);H[Q++]=196,H[Q++]=X}else if(X<65536){var{target:H,position:Q}=$(X+3);H[Q++]=197,H[Q++]=X>>8,H[Q++]=X&255}else{var{target:H,position:Q,targetView:Z}=$(X+5);H[Q++]=198,Z.setUint32(Q,X),Q+=4}H.set(_,Q)}function q$(_,$,X,H){let Q=_.length;switch(Q){case 1:$[X++]=212;break;case 2:$[X++]=213;break;case 4:$[X++]=214;break;case 8:$[X++]=215;break;case 16:$[X++]=216;break;default:if(Q<256)$[X++]=199,$[X++]=Q;else if(Q<65536)$[X++]=200,$[X++]=Q>>8,$[X++]=Q&255;else $[X++]=201,$[X++]=Q>>24,$[X++]=Q>>16&255,$[X++]=Q>>8&255,$[X++]=Q&255}return $[X++]=H,$.set(_,X),X+=Q,X}function f$(_,$){let X,H=$.length*6,Q=_.length-H;while(X=$.pop()){let{offset:Z,id:J}=X;_.copyWithin(Z+H,Z,Q),H-=6;let Y=Z+H;_[Y++]=214,_[Y++]=105,_[Y++]=J>>24,_[Y++]=J>>16&255,_[Y++]=J>>8&255,_[Y++]=J&255,Q=Z}return _}function K$(_,$,X){if(S.length>0){I.setUint32(S.position+_,K+X-S.position-_),S.stringsPosition=K-_;let H=S;S=null,$(H[0]),$(H[1])}}function q_(_){if(_.Class){if(!_.pack&&!_.write)throw Error("Extension has no pack or write function");if(_.pack&&!_.type)throw Error("Extension has no type (numeric code to identify the extension)");v8.unshift(_.Class),S8.unshift(_)}Q$(_)}function g$(_,$){return _.isCompatible=(X)=>{let H=!X||($.lastNamedStructuresLength||0)===X.length;if(!H)$._mergeStructures(X);return H},_}var G$=new G8({useRecords:!1}),p$=G$.pack,l$=G$.pack;var Y$=512,L$=1024,O$=2048;var D$=80;class o{capId;constructor(_){this.capId=_}}var u$=new Set(["hello","goaway","call","result","cancel","stream","drop","cap_revoked"]);function K_(_){if(typeof _!=="object"||_===null)return!1;let $=_,X=$.op;if(typeof X!=="string"||!u$.has(X))return!1;switch(X){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 H of $.capIds)if(typeof H!=="number"||!Number.isInteger(H)||H<0||H>4294967295)return!1;return!0}}var F$=!1;function d$(){if(F$)return;F$=!0,q_({Class:o,type:D$,pack:(_)=>c$(_.capId),unpack:(_)=>new o(s$(_))})}function J_(){return d$(),{packr:new G8({useRecords:!0,sequential:!0,moreTypes:!0}),unpackr:new t({useRecords:!0,sequential:!0,moreTypes:!0})}}function c$(_){let $=new Uint8Array(5),X=_>>>0,H=0;while(X>=128)$[H++]=X&127|128,X>>>=7;return $[H++]=X&127,$.subarray(0,H)}var n$=5;function s$(_){let $=0,X=0,H=Math.min(_.length,n$);for(let Q=0;Q<H;Q++){let Z=_[Q];if($|=(Z&127)<<X,(Z&128)===0)return $>>>0;X+=7}throw Error("Truncated or oversize varuint")}var N_=67108864,G_=1,h8="bunite.",m8="bootstrap";class P extends Error{code;details;retry;constructor(_){super(_.message??_.code);this.name="IpcError",this.code=_.code,this.details=_.details,this.retry=_.retry}toStatus(){return{code:this.code,message:this.message,details:this.details,retry:this.retry}}}var f8=a("bunite.BrowserWindow",{focus:B(),close:B(),setBounds:B(),setTitle:B(),id:B({idempotent:!0}),label:B({idempotent:!0})}),Y_=a("bunite.Window",{create:B({returns:s(f8)}),list:B({returns:s.array(f8),idempotent:!0}),focus:B(),close:B()}),g8=a("bunite.FileRef",{text:B({idempotent:!0}),bytes:B({idempotent:!0}),path:B({idempotent:!0}),revoke:B()},{disposal:{method:"revoke"}}),L_=a("bunite.Dialogs",{openFile:B({returns:s.array(g8)}),saveFile:B({returns:s(g8)}),showMessage:B()}),O_=a("bunite.Clipboard",{readText:B({idempotent:!0}),writeText:B(),readBytes:B({idempotent:!0}),writeBytes:B()}),F_=a("bunite.Shell",{openExternal:B(),showItemInFolder:B()}),D_=a("bunite.Surface",{init:B(),resize:B(),remove:B(),setHidden:B(),setMasks:B(),setAllPassthrough:B(),bringAllVisiblesToFront:B(),navigate:B(),goBack:B(),reload:B(),evaluate:B(),capabilities:B(),didNavigate:O8(),titleChanged:O8()}),U8=a("bunite.Runtime",{window:B({returns:s(Y_),idempotent:!0}),dialogs:B({returns:s(L_),idempotent:!0}),clipboard:B({returns:s(O_),idempotent:!0}),shell:B({returns:s(F_),idempotent:!0}),appName:B({idempotent:!0}),appVersion:B({idempotent:!0}),theme:B({idempotent:!0}),themeWatch:O8(),surface:B({returns:s(D_),idempotent:!0})}),X8={Runtime:1,Window:2,Dialogs:3,FileRef:4,Clipboard:5,Shell:6,BrowserWindow:7,Surface:8},o$=new Map([[U8,X8.Runtime],[Y_,X8.Window],[L_,X8.Dialogs],[g8,X8.FileRef],[O_,X8.Clipboard],[F_,X8.Shell],[f8,X8.BrowserWindow],[D_,X8.Surface]]);function U_(_){return o$.get(_)}var l8=0,R_=1,M$=0,W$=1,Y8=2,z_=128,u8=1024,R$=1024,i$=u8*4,a$=500,r$=32,t$=8,e$=1024;function _X(_){let $=_?.initialBudget;if(typeof $!=="number"||!Number.isFinite($)||!Number.isInteger($)||$<1)return r$;return Math.min($,e$)}var p8=null;class A_{entries=new Map;nextCapId=Y8;capLimit;constructor(_=u8){this.capLimit=_}install(_,$){if(this.entries.has(_))throw Error(`cap-id ${_} already installed`);let X={capId:_,...$};return this.entries.set(_,X),X}allocate(_){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($,_)}get(_){return this.entries.get(_)}release(_,$=1){let X=this.entries.get(_);if(!X)return!1;if(X.refCount=Math.max(0,X.refCount-$),X.refCount===0&&_>=Y8)return this.entries.delete(_),!0;return!1}delete(_){if(_<Y8)return!1;return this.entries.delete(_)}clear(){this.entries.clear(),this.nextCapId=Y8}size(){return this.entries.size}values(){return this.entries.values()}}var $X={origin:"",topOrigin:"",partition:"default",isAppRes:!1,isMainFrame:!1,userGesture:!1,level:"untrusted"},z$=Symbol("bunite.rpc.ExportedCap"),U$=Symbol("bunite.rpc.CapProxyMeta");function XX(_){return typeof _==="object"&&_!==null&&_[z$]===!0}var HX=typeof FinalizationRegistry<"u"?new FinalizationRegistry((_)=>{if(_.dropped())return;let $=_.connRef.deref();if(!$||$.closed)return;$._dropFromFinalizer(_.capId)}):{register:()=>{}};class A${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(_){this.transport=_.transport,this.mode=_.mode,this.origin=_.origin,this.features=_.features??[],this.maxBytes=_.maxBytes??N_,this.maxInFlightCalls=_.maxInFlightCalls??R$,this.attestation=_.attestation??$X,this.peerId=_.peerId??"peer",this.policy=_.policy,this.capTable=new A_(_.capLimit??u8),this.capTable.install(l8,{typeId:M$,cap:null,impl:null,refCount:1}),this.capTable.install(R_,{typeId:W$,cap:U8,impl:_.runtime??null,refCount:1}),this.remoteReady=new Promise(($,X)=>{this.resolveRemoteReady=$,this.rejectRemoteReady=X}),this.remoteReady.catch(()=>{}),this.transport.setReceive(($)=>this.handleFrame($)),this.transport.send({op:"hello",v:G_,mode:this.mode,features:this.features,maxBytes:this.maxBytes,origin:this.origin})}get closed(){return this.closed_}onClose(_){return this.closeHandlers.add(_),()=>this.closeHandlers.delete(_)}on(_,$){let X=this.observers[_];if(!X)X=new Set,this.observers[_]=X;return X.add($),()=>{X.delete($)}}emitObs(_,$){let X=this.observers[_];if(!X||X.size===0)return;for(let H of X)try{H($)}catch{}}markRevoked(_){this.revokedCapIds.add(_);while(this.revokedCapIds.size>i$){let $=this.revokedCapIds.values().next().value;if($===void 0)break;this.revokedCapIds.delete($)}}serve(_,$,X){this.assertNotFrameworkName(_.name);let H=X?.ifExists??"throw";if(this.registry.get(_.name))switch(H){case"throw":throw new P({code:"already_exists",message:`cap "${_.name}" already served`,details:{reason:"name_collision"}});case"skip":return this.makeHandle([]);case"replace":return this.replace(_,$),this.makeHandle([_.name])}return this.registry.set(_.name,{cap:_,impl:$,version:_.version}),this.makeHandle([_.name])}makeHandle(_){let $={names:_,[Symbol.dispose]:()=>this.unserve($)};return $}serveAll(_,$,X){let H=X?.ifExists??"throw";for(let Z of Object.keys(_.roots)){let J=_.roots[Z];this.assertNotFrameworkName(J.name);let Y=this.registry.get(J.name);if(Y){if(H==="throw")throw new P({code:"already_exists",message:`cap "${J.name}" already served`,details:{reason:"name_collision"}});if(H==="replace"&&Y.version!==J.version)throw new P({code:"failed_precondition",message:`version mismatch on replace for "${J.name}" (current "${Y.version}", new "${J.version}")`,details:{reason:"version_mismatch"}})}}let Q=[];for(let Z of Object.keys(_.roots)){let J=_.roots[Z],Y=$[Z];if(this.serve(J,Y,{ifExists:H}).names.length>0)Q.push(J.name)}return this.makeHandle(Q)}unserve(_){let $=E8(_)?[_.name]:Array.from(_.names),X=[];for(let H of $){if(!this.registry.delete(H))continue;let Q=this.rootInstances.get(H);if(Q!==void 0){let Z=this.capTable.get(Q);if(Z)this.invokeServerDisposal(Z);this.rootInstances.delete(H),this.capTable.delete(Q),X.push(Q)}}if(X.length>0)this.transport.send({op:"cap_revoked",capIds:X}),this.emitObs("revoke",{capIds:X,reason:"unserve"})}replace(_,$){let X=this.registry.get(_.name);if(!X)throw new P({code:"not_found",message:`cap "${_.name}" not served`});if(X.version!==_.version)throw new P({code:"failed_precondition",message:`version mismatch (current "${X.version}", new "${_.version}")`,details:{reason:"version_mismatch"}});X.impl=$,X.cap=_;let H=this.rootInstances.get(_.name);if(H!==void 0){let Q=this.capTable.get(H);if(Q)Q.impl=$,Q.cap=_}this.emitObs("revoke",{capIds:H!==void 0?[H]:[],reason:"replace"})}assertNotFrameworkName(_){if(_.startsWith(h8))throw new P({code:"already_exists",message:`cap name "${_}" uses reserved prefix "${h8}"`,details:{reason:"reserved_namespace"}})}runtimeProxy=null;runtime(){if(!this.runtimeProxy)this.runtimeProxy=this.makeCapProxy(U8,R_);return this.runtimeProxy}async bootstrap(_){if(E8(_))return this._bootstrapCap(_);if(o8(_))return this._bootstrapSchema(_);throw new P({code:"invalid_argument",message:"bootstrap target must be CapDef or Schema"})}async _bootstrapCap(_){await this.remoteReady;let $={name:_.name};if(_.version!=null)$.version=_.version;let X=await this.sendCallTyped(l8,m8,$,void 0);if(!(X instanceof o))throw new P({code:"invalid_argument",message:"bootstrap did not return a CapRef"});return this.makeCapProxy(_,X.capId)}async _bootstrapSchema(_){let $=Object.keys(_.roots),X=await Promise.allSettled($.map((Z)=>this._bootstrapCap(_.roots[Z]))),H=X.find((Z)=>Z.status==="rejected");if(H){for(let Z of X)if(Z.status==="fulfilled")try{this.releaseRef(Z.value)}catch{}throw H.reason}let Q={};for(let Z=0;Z<$.length;Z++)Q[$[Z]]=X[Z].value;return Q}handleFrame(_){if(this.closed_)return;switch(_.op){case"hello":this.handleHello(_);return;case"call":this.handleCall(_);return;case"result":this.handleResult(_);return;case"cancel":this.handleCancel(_);return;case"stream":this.handleStreamFrame(_);return;case"drop":this.handleDrop(_);return;case"cap_revoked":this.handleCapRevoked(_);return;case"goaway":this.handleGoaway(_);return;default:this.handleUnknownFrame(_);return}}handleUnknownFrame(_){let $=_?.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(_){this.remoteHello=_,this.resolveRemoteReady(_)}handleGoaway(_){this.rejectRemoteReady(new P(_.error??{code:"unavailable",message:_.reason??"peer goaway"})),this.shutdown(_.reason??"remote goaway")}handleCapRevoked(_){for(let $ of _.capIds){this.markRevoked($);let X=new P({code:"failed_precondition",message:"cap revoked",details:{reason:"revoked"}});for(let[H,Q]of this.pending)if(Q.capId===$){if(this.pending.delete(H),Q.timer)clearTimeout(Q.timer);Q.reject(X)}for(let[H,Q]of this.clientStreams)if(Q.capId===$)this.clientStreams.delete(H),Q.fail(X)}}async handleCall(_){if(_.target.id===l8&&_.method===m8){await this.handleBootstrap(_);return}let $=this.capTable.get(_.target.id);if(!$)return this.emitObs("call",{capId:_.target.id,method:_.method,callId:_.id,result:"not_found"}),this.sendError(_.id,"not_found",`cap-id ${_.target.id} not found`);let X=$.cap;if(!X||!$.impl)return this.emitObs("call",{capId:_.target.id,method:_.method,callId:_.id,result:"not_found"}),this.sendError(_.id,"not_found","cap has no impl");let H=X.methods[_.method];if(!H)return this.emitObs("call",{capId:_.target.id,capName:X.name,method:_.method,callId:_.id,result:"not_found"}),this.sendError(_.id,"not_found",`method "${_.method}" on cap "${X.name}"`);let Q=$.impl[_.method];if(typeof Q!=="function")return this.emitObs("call",{capId:_.target.id,capName:X.name,method:_.method,callId:_.id,result:"not_found"}),this.sendError(_.id,"not_found",`method "${_.method}" has no handler`);if(this.serverActiveCalls.size+this.serverStreams.size>=this.maxInFlightCalls)return this.emitObs("call",{capId:_.target.id,capName:X.name,method:_.method,callId:_.id,result:"resource_exhausted"}),this.sendError(_.id,"resource_exhausted",`in-flight calls limit ${this.maxInFlightCalls}`,{reason:"max_concurrent_calls"});await this.invokeServerMethod(_,X,H,Q)}async handleBootstrap(_){let $=_.args??{},X=$.name;if(typeof X!=="string")return this.emitObs("bootstrap",{name:String(X),attestation:this.attestation,result:"invalid_argument"}),this.sendError(_.id,"invalid_argument","bootstrap requires {name: string}");let H=$.version!=null?String($.version):void 0,Q=this.registry.get(X);if(!Q)return this.emitObs("bootstrap",{name:X,version:H,attestation:this.attestation,result:"not_found"}),this.sendError(_.id,"not_found",`cap "${X}" not served`);let Z=Q.version;if(Z!=null&&H!=null&&Z!==H)return this.emitObs("bootstrap",{name:X,version:H,attestation:this.attestation,result:"version_mismatch"}),this.sendError(_.id,"failed_precondition",`version mismatch (server "${Z}", client "${H}")`,{reason:"version_mismatch"});if(this.policy){let Y;try{Y=await this.policy(X,this.attestation)}catch(U){return this.emitObs("error",{phase:"policy",error:U instanceof Error?U:Error(String(U))}),this.emitObs("bootstrap",{name:X,version:H,attestation:this.attestation,result:"internal"}),this.sendError(_.id,"internal","policy threw")}if(typeof Y!=="boolean")return this.emitObs("error",{phase:"policy",error:Error(`policy must return boolean (got ${typeof Y})`)}),this.emitObs("bootstrap",{name:X,version:H,attestation:this.attestation,result:"internal"}),this.sendError(_.id,"internal","policy returned non-boolean");if(!Y)return this.emitObs("bootstrap",{name:X,version:H,attestation:this.attestation,result:"denied"}),this.sendError(_.id,"failed_precondition","policy denied",{reason:"unauthorized"})}let J=this.rootInstances.get(X);if(J!==void 0){let Y=this.capTable.get(J);if(Y)Y.refCount+=1;else this.rootInstances.delete(X),J=void 0}if(J===void 0)try{J=this.capTable.allocate({typeId:U_(Q.cap)??z_,cap:Q.cap,impl:Q.impl,refCount:1}).capId,this.rootInstances.set(X,J)}catch(Y){if(Y instanceof P){let U=Y.code==="resource_exhausted"?"resource_exhausted":"internal";return this.emitObs("bootstrap",{name:X,version:H,attestation:this.attestation,result:U}),this.sendError(_.id,Y.code,Y.message,Y.details)}throw Y}this.emitObs("bootstrap",{name:X,version:H,attestation:this.attestation,result:"ok",capId:J}),this.transport.send({op:"result",id:_.id,ok:!0,value:new o(J)})}async invokeServerMethod(_,$,X,H){let Q=this.makeCallCtx(_);if(C8(X)){let Z=_X(X.hint);try{let J=()=>H(_.args,Q),Y=p8,W=(Y?()=>Y.run({callId:_.id},J):J)();this.runServerStream(_.id,W,Q,Z,$,_.method,_.target.id)}catch(J){this.emitObs("stream",{capId:_.target.id,capName:$.name,method:_.method,callId:_.id,event:"error"}),this.transport.send({op:"stream",id:_.id,ev:"error",error:M_(J)})}return}if(P8(X)){let Z=performance.now(),J=X.idempotent?void 0:this.armServerDeadline(_,Q);this.serverActiveCalls.set(_.id,{ctrl:Q._ctrl,capId:_.target.id,capName:$.name,method:_.method,startedAt:Z});let Y=QX(X.returns),U=()=>Promise.resolve(H(_.args,Q)),W=p8,V=W?()=>W.run({callId:_.id},U):U;try{let T=await V();if(J)clearTimeout(J);if(!this.serverActiveCalls.delete(_.id))return;let w=Y(T);this.transport.send({op:"result",id:_.id,ok:!0,value:w}),this.emitObs("call",{capId:_.target.id,capName:$.name,method:_.method,callId:_.id,durationMs:performance.now()-Z,result:"ok"})}catch(T){if(J)clearTimeout(J);if(!this.serverActiveCalls.delete(_.id))return;let w=M_(T);this.sendErrorFromStatus(_.id,w),this.emitObs("call",{capId:_.target.id,capName:$.name,method:_.method,callId:_.id,durationMs:performance.now()-Z,result:w.code})}return}this.sendError(_.id,"not_found","unknown method kind")}armServerDeadline(_,$){let X=_.meta?.deadlineMs;if(!X)return;return setTimeout(()=>{$._ctrl.abort()},X)}makeCallCtx(_){let $=new AbortController;return{callId:_.id,peerId:this.peerId,attestation:this.attestation,signal:$.signal,deadline:_.meta?.deadlineMs,_ctrl:$,exportCap:(H,Q)=>this.exportCap(H,Q)}}exportCap(_,$){let X=U_(_)??z_,H=this.capTable.allocate({typeId:X,cap:_,impl:$,refCount:1});return{[z$]:!0,cap:_,capId:H.capId,typeId:H.typeId}}runServerStream(_,$,X,H,Q,Z,J){let Y=$[Symbol.asyncIterator](),U=X._ctrl,W={iter:Y,abort:U,cancelled:!1,credit:H,creditWaker:null,capId:J,capName:Q.name,method:Z,callId:_,count:0};this.serverStreams.set(_,W),this.emitObs("stream",{capId:J,capName:Q.name,method:Z,callId:_,event:"start"});let V=()=>{if(W.credit>0||W.cancelled)return Promise.resolve();return new Promise((w)=>{W.creditWaker=w})};(async()=>{let w=!1;try{while(!W.cancelled){if(W.credit===0)await V();if(W.cancelled)break;let{done:k,value:v}=await Y.next();if(k)break;if(W.cancelled)break;W.credit-=1,W.count+=1,this.transport.send({op:"stream",id:_,ev:"next",value:v})}}catch(k){w=!0,this.transport.send({op:"stream",id:_,ev:"error",error:M_(k)}),this.emitObs("stream",{capId:J,capName:Q.name,method:Z,callId:_,event:"error",count:W.count})}finally{if(!w)this.transport.send({op:"stream",id:_,ev:"end"}),this.emitObs("stream",{capId:J,capName:Q.name,method:Z,callId:_,event:W.cancelled?"cancel":"end",count:W.count});this.serverStreams.delete(_)}})()}handleResult(_){let $=this.pending.get(_.id);if($){if(this.pending.delete(_.id),this.serverCallChildren.delete(_.id),$.timer)clearTimeout($.timer);if(_.ok){let H=$.decodeReturn?$.decodeReturn(_.value):_.value;$.resolve(H)}else $.reject(new P(_.error));return}let X=this.clientStreams.get(_.id);if(X){this.clientStreams.delete(_.id);let H=_.ok?new P({code:"invalid_argument",message:"stream method returned result frame"}):new P(_.error);X.fail(H)}}handleCancel(_){let $=this.serverStreams.get(_.id);if($)$.cancelled=!0,$.abort.abort(),$.iter?.return?.(),this.serverStreams.delete(_.id);let X=this.serverActiveCalls.get(_.id);if(X)this.serverActiveCalls.delete(_.id),X.ctrl.abort(),this.transport.send({op:"result",id:_.id,ok:!1,error:{code:"cancelled",message:_.reason}}),this.emitObs("call",{capId:X.capId,capName:X.capName,method:X.method,callId:_.id,durationMs:performance.now()-X.startedAt,result:"cancelled"});for(let[H,Q]of this.serverCallChildren){if(Q.parentId!==_.id)continue;if(this.serverCallChildren.delete(H),this.pending.has(H))this.transport.send({op:"cancel",id:H,reason:_.reason})}}releaseRef(_){if(typeof _!=="object"||_===null)return;let $=_[U$];if(!$||$.dropped)return;$.dropped=!0,this.sendDrop($.capId)}sendDrop(_){if(this.closed_)return;if(_<Y8)return;this.transport.send({op:"drop",caps:[{id:_,delta:1}]})}handleStreamFrame(_){if(_.ev==="credit"){let X=this.serverStreams.get(_.id);if(!X)return;X.credit+=_.credit?.messages??0;let H=X.creditWaker;X.creditWaker=null,H?.();return}let $=this.clientStreams.get(_.id);if(!$)return;switch(_.ev){case"next":$.push(_.value);return;case"end":$.end(),this.clientStreams.delete(_.id);return;case"error":$.fail(new P(_.error)),this.clientStreams.delete(_.id);return}}handleDrop(_){for(let{id:$,delta:X}of _.caps)if(this.capTable.release($,X)){for(let[Q,Z]of this.rootInstances)if(Z===$){this.rootInstances.delete(Q);break}}}sendError(_,$,X,H){let Q={code:$,message:X};if(H!==void 0)Q.details=H;this.transport.send({op:"result",id:_,ok:!1,error:Q})}sendErrorFromStatus(_,$){this.transport.send({op:"result",id:_,ok:!1,error:$})}nextId(){return this.nextCallId++}sendCallTyped(_,$,X,H,Q,Z){if(this.closed_)return Promise.reject(new P({code:"unavailable",message:"connection closed"}));if(this.revokedCapIds.has(_))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 J=this.nextId();return new Promise((Y,U)=>{let W=new AbortController,V={resolve:Y,reject:U,abort:W,decodeReturn:H,startedAt:performance.now(),capId:_,method:$,capName:Z,kind:"call"};if(Q?.deadlineMs)V.timer=setTimeout(()=>{if(this.pending.delete(J))this.transport.send({op:"cancel",id:J,reason:"deadline_exceeded"}),U(new P({code:"deadline_exceeded"}))},Q.deadlineMs+a$);this.pending.set(J,V);let T=Q;if(T?.parentCallId===void 0&&p8){let w=p8.getStore();if(w)T={...T??{},parentCallId:w.callId}}if(T?.parentCallId!==void 0)this.serverCallChildren.set(J,{parentId:T.parentCallId});this.transport.send({op:"call",id:J,target:{kind:"cap",id:_},method:$,args:X,meta:T})})}openClientStream(_,$,X,H,Q){if(this.closed_){let W=W_(_,0,()=>{},()=>{});return W.fail(new P({code:"unavailable",message:"connection closed"})),W.stream}if(this.revokedCapIds.has(_)){let W=W_(_,0,()=>{},()=>{});return W.fail(new P({code:"failed_precondition",message:"cap revoked",details:{reason:"revoked"}})),W.stream}let Z=this.nextId(),U=W_(_,Z,()=>{if(this.clientStreams.delete(Z))this.transport.send({op:"cancel",id:Z,reason:"client_cancel"})},(W)=>{if(this.closed_||!this.clientStreams.has(Z))return;this.transport.send({op:"stream",id:Z,ev:"credit",credit:{messages:W}})});return this.clientStreams.set(Z,U),this.transport.send({op:"call",id:Z,target:{kind:"cap",id:_},method:$,args:X,meta:H}),U.stream}makeCapProxy(_,$){let X={},H={capId:$,dropped:!1};X[U$]=H;let Q=()=>{if(H.dropped)return;H.dropped=!0,this.sendDrop($)};for(let J of Object.keys(_.methods)){let Y=_.methods[J];if(C8(Y))X[J]=(U)=>this.openClientStream($,J,U,void 0,_.name);else if(P8(Y)){let U=ZX(Y.returns,(W,V)=>this.makeCapProxy(W,V));X[J]=(W)=>this.sendCallTyped($,J,W,U,void 0,_.name)}}let Z=_.disposal;if(Z){let J=this;X[Symbol.dispose]=()=>{try{let Y=X[Z.method]?.();if(Y&&typeof Y.then==="function")Y.catch((U)=>J.emitObs("error",{phase:"dispose",error:U instanceof Error?U:Error(String(U))}))}catch(Y){J.emitObs("error",{phase:"dispose",error:Y instanceof Error?Y:Error(String(Y))})}Q()}}if(typeof FinalizationRegistry<"u")HX.register(X,{connRef:new WeakRef(this),capId:$,dropped:()=>H.dropped});return X}_dropFromFinalizer(_){try{this.sendDrop(_)}catch{}}shutdown(_="shutdown"){if(this.closed_)return;this.closed_=!0;for(let $ of this.pending.values()){if($.timer)clearTimeout($.timer);$.reject(new P({code:"unavailable",message:_}))}this.pending.clear();for(let $ of this.clientStreams.values())$.fail(new P({code:"unavailable",message:_}));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:_}));for(let $ of this.closeHandlers)try{$()}catch{}this.closeHandlers.clear();try{this.transport.close()}catch{}}invokeServerDisposal(_){let $=_.cap;if(!$)return;let X=$.disposal;if(!X)return;let H=_.impl,Q=H?.[X.method];if(!Q)return;try{Q.call(H,void 0,void 0)}catch{}}}function QX(_){if(!_)return(X)=>X;let $=(X,H)=>{if(!XX(X))throw new P({code:"failed_precondition",message:"expected ctx.exportCap return for cap method",details:{reason:"unregistered_cap_return"}});if(X.cap!==H)throw new P({code:"failed_precondition",message:"exported cap type mismatch with method returns",details:{reason:"unregistered_cap_return"}});return new o(X.capId)};if(B8(_))return(X)=>$(X,_.cap);if(T8(_))return(X)=>{if(!Array.isArray(X))throw new P({code:"invalid_argument",message:"expected ExportedCap[] for cap.array method"});return X.map((H)=>$(H,_.cap))};if(V8(_))return(X)=>{if(!X||typeof X!=="object")throw new P({code:"invalid_argument",message:"expected Record<string, ExportedCap> for cap.record method"});let H={};for(let Q of Object.keys(X))H[Q]=$(X[Q],_.cap);return H};return(X)=>X}function ZX(_,$){if(!_)return;if(B8(_)){let X=_.cap;return(H)=>{if(!(H instanceof o))throw new P({code:"invalid_argument",message:"expected CapRef"});return $(X,H.capId)}}if(T8(_)){let X=_.cap,H=X.disposal;return(Q)=>{if(!Array.isArray(Q))throw new P({code:"invalid_argument",message:"expected array"});let Z=Q.map((J)=>{if(!(J instanceof o))throw new P({code:"invalid_argument",message:"expected CapRef in array"});return $(X,J.capId)});return qX(Z,H),Z}}if(V8(_)){let X=_.cap;return(H)=>{if(!H||typeof H!=="object")throw new P({code:"invalid_argument",message:"expected record"});let Q={};for(let Z of Object.keys(H)){let J=H[Z];if(!(J instanceof o))throw new P({code:"invalid_argument",message:"expected CapRef in record"});Q[Z]=$(X,J.capId)}return Q}}return}function qX(_,$){if(!$)return;_[Symbol.dispose]=()=>{for(let X of _)X[Symbol.dispose]?.call(X)}}function M_(_){if(_ instanceof P)return _.toStatus();if(_ instanceof Error)return{code:"internal",message:_.message};return{code:"internal",message:String(_)}}function W_(_,$,X,H){let Q=[],Z=[],J=!1,Y=null,U=!1,W=0;function V(){if(W+=1,W>=t$)H(W),W=0}function T(){if(Q.length>0){let m=Q.shift();return V(),{value:m,done:!1}}if(Y)return null;if(J||U)return{value:void 0,done:!0};return null}function w(){let m=T();if(m)return Promise.resolve(m);if(Y)return Promise.reject(Y);return new Promise((e,z8)=>Z.push({resolve:e,reject:z8}))}function k(){while(Z.length>0){let m=Z.shift(),e=T();if(e){m.resolve(e);continue}if(Y){m.reject(Y);continue}Z.unshift(m);break}}function v(){if(U||J||Y)return;U=!0,X(),k()}let p={[Symbol.asyncIterator]:()=>({next:w,return:()=>{return v(),Promise.resolve({value:void 0,done:!0})},throw:(m)=>{return v(),Promise.reject(m)}}),[Symbol.dispose]:v,cancel:v};return{capId:_,stream:p,push(m){if(U||J||Y)return;Q.push(m),k()},end(){J=!0,k()},fail(m){Y=m,k()}}}function B_(_){return new A$(_)}function T_(_,$={}){let X=J_(),H;return _.setReceive((Q)=>{let Z;try{Z=X.unpackr.unpack(Q)}catch(J){$.onProtocolError?.(`unpack failed: ${J instanceof Error?J.message:String(J)}`),_.close();return}if(!K_(Z)){$.onProtocolError?.("malformed frame"),_.close();return}H?.(Z)}),{send(Q){let Z=X.packr.pack(Q);_.send(Z instanceof Uint8Array?Z:new Uint8Array(Z))},setReceive(Q){H=Q},close(){_.close()}}}function V_(_){if("binaryType"in _)try{_.binaryType="arraybuffer"}catch{}let $,X=(H)=>{if(!$)return;let Q=H.data;if(Q instanceof Uint8Array){$(Q);return}if(Q instanceof ArrayBuffer){$(new Uint8Array(Q));return}if(typeof Blob<"u"&&Q instanceof Blob){Q.arrayBuffer().then((Z)=>$?.(new Uint8Array(Z)));return}};return _.addEventListener("message",X),{send(H){_.send(H)},setReceive(H){$=H},close(){_.removeEventListener?.("message",X),_.close?.()}}}function M8(_){let $=new ArrayBuffer(_.byteLength);return new Uint8Array($).set(_),$}async function KX(_){return crypto.subtle.importKey("raw",M8(_),"AES-GCM",!1,["encrypt","decrypt"])}async function P_(_,$){let X=await KX($),H,Q=Promise.resolve(),Z=Promise.resolve(),J=!1,Y=()=>{if(!J)J=!0,_.close()};return _.setReceive((U)=>{if(J)return;if(U.length<13||U[0]!==1){Y();return}let W=M8(U.subarray(1,13)),V=M8(U.subarray(13));Z=Z.then(async()=>{if(J)return;try{let T=await crypto.subtle.decrypt({name:"AES-GCM",iv:W},X,V);H?.(new Uint8Array(T))}catch{Y()}})}),{send(U){if(J)return;let W=M8(U);Q=Q.then(async()=>{if(J)return;try{let V=crypto.getRandomValues(new Uint8Array(12)),T=M8(V),w=await crypto.subtle.encrypt({name:"AES-GCM",iv:T},X,W),k=new Uint8Array(w),v=new Uint8Array(13+k.byteLength);v[0]=1,v.set(V,1),v.set(k,13),_.send(v)}catch{Y()}})},setReceive(U){H=U},close(){Y()}}}class JX{buffer=[];waiters=[];ctrl=new AbortController;cleanup;ended=!1;failure=null;constructor(_){let $=(X)=>{if(this.ended||this.failure)return;let H=this.waiters.shift();if(H){H.resolve({value:X,done:!1});return}this.buffer.push(X)};try{let X=_($,this.ctrl.signal);if(typeof X==="function")this.cleanup=X}catch(X){this.failure=X}}[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((_,$)=>this.waiters.push({resolve:_,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})}}var C_=null;function W8(){if(!C_)C_=host.runtime().then((_)=>_.surface());return C_}function n(_){return W8().then(_).catch(($)=>{if(globalThis.__BUNITE_DEBUG__)console.warn("[bunite] surface call failed",$);return})}function B$(_){return W8().then(_)}class T${element;onBoundsChange;observer=null;rafId=0;lastRect={x:0,y:0,width:0,height:0};dirty=!1;stopped=!1;constructor(_,$){this.element=_,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 _=window.devicePixelRatio||1,$=this.element.getBoundingClientRect(),X={x:Math.round($.x*_),y:Math.round($.y*_),width:Math.round($.width*_),height:Math.round($.height*_)};if(!this.dirty&&X.x===this.lastRect.x&&X.y===this.lastRect.y&&X.width===this.lastRect.width&&X.height===this.lastRect.height)return;this.dirty=!1,this.lastRect=X,this.onBoundsChange(X)}}class V$ extends HTMLElement{static observedAttributes=["src"];_surfaceId=null;_syncCtrl=null;_initPromise=null;_aborted=!1;_pendingSrc=null;_syncHidden=!1;_userHidden=!1;_layoutObserver=null;_unsubNavigate=null;_activeStreams=[];constructor(){super()}connectedCallback(){this._aborted=!1,this._syncHidden=!1,this._userHidden=!1;let _=new AbortController;this._unsubNavigate=()=>_.abort(),(async()=>{try{let X=(await W8()).didNavigate();this._activeStreams.push(X);for await(let H of X){if(_.signal.aborted)break;if(H.surfaceId===this._surfaceId)this.dispatchEvent(new CustomEvent("did-navigate",{detail:{url:H.url}}))}}catch($){if(globalThis.__BUNITE_DEBUG__)console.warn("[bunite] didNavigate stream failed",$)}})(),(async()=>{try{let X=(await W8()).titleChanged();this._activeStreams.push(X);for await(let H of X){if(_.signal.aborted)break;if(H.surfaceId===this._surfaceId)this.dispatchEvent(new CustomEvent("title-changed",{detail:{title:H.title}}))}}catch($){if(globalThis.__BUNITE_DEBUG__)console.warn("[bunite] titleChanged stream failed",$)}})(),this._waitForLayout()}_waitForLayout(){if(this._layoutObserver)return;let _=()=>{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(_())return;this._layoutObserver=new ResizeObserver(()=>{if(_())this._layoutObserver?.disconnect(),this._layoutObserver=null}),this._layoutObserver.observe(this)})}disconnectedCallback(){this._aborted=!0,this._unsubNavigate?.(),this._unsubNavigate=null;for(let _ of this._activeStreams)try{_.cancel?.()}catch{}if(this._activeStreams=[],this._layoutObserver?.disconnect(),this._layoutObserver=null,this._syncCtrl?.stop(),this._syncCtrl=null,this._surfaceId!=null){let _=this._surfaceId;this._surfaceId=null,n(($)=>$.remove({surfaceId:_}))}else if(this._initPromise)this._initPromise.then((_)=>{n(($)=>$.remove({surfaceId:_.surfaceId}))}).catch(()=>{});this._initPromise=null}attributeChangedCallback(_,$,X){if(_!=="src")return;if(this._surfaceId!=null){let H=this._surfaceId;n((Q)=>Q.navigate({surfaceId:H,url:X||""}))}else if(this._initPromise)this._pendingSrc=X||"";else if(this.isConnected&&!this._aborted&&X)this._waitForLayout()}setHidden(_){this._userHidden=_,this._applySurfaceHidden()}goBack(){let _=this._surfaceId;if(_!=null)n(($)=>$.goBack({surfaceId:_}))}reload(){let _=this._surfaceId;if(_!=null)n(($)=>$.reload({surfaceId:_}))}navigate(_){this.setAttribute("src",_)}async evaluate(_){let $=this._surfaceId;if($==null)return{ok:!1,code:"not_supported",message:"surface not ready"};return B$((X)=>X.evaluate({surfaceId:$,script:_}))}async capabilities(){let _=this._surfaceId;if(_==null)return{evaluate:!1,crossOriginEval:!1,titleChanged:!1,nativeInputTrusted:!1,click:!1,type:!1,press:!1,scroll:!1,screenshot:!1};return B$(($)=>$.capabilities({surfaceId:_}))}_applySurfaceHidden(){let _=this._surfaceId;if(_==null)return;let $=this._userHidden||this._syncHidden;n((X)=>X.setHidden({surfaceId:_,hidden:$}))}initSurface(){if(this._surfaceId!=null||this._initPromise!=null)return;let _=window.devicePixelRatio||1,$=this.getBoundingClientRect(),X=this._pendingSrc||this.getAttribute("src")||"";this._pendingSrc=null;let H=W8().then((Q)=>Q.init({src:X,x:Math.round($.x*_),y:Math.round($.y*_),width:Math.round($.width*_),height:Math.round($.height*_),hidden:this._userHidden}));this._initPromise=H,H.then((Q)=>{if(this._initPromise!==H)return;if(this._aborted){n((Z)=>Z.remove({surfaceId:Q.surfaceId}));return}if(this._surfaceId=Q.surfaceId,this._userHidden)this._applySurfaceHidden();if(this._pendingSrc!=null){let Z=this._pendingSrc;this._pendingSrc=null;let J=this._surfaceId;if(J!=null)n((Y)=>Y.navigate({surfaceId:J,url:Z}))}this._syncCtrl=new T$(this,(Z)=>{let J=this._surfaceId;if(J==null)return;if(Z.width===0&&Z.height===0){if(!this._syncHidden)this._syncHidden=!0,this._applySurfaceHidden();return}if(this._syncHidden)this._syncHidden=!1,this._applySurfaceHidden();n((U)=>U.resize({surfaceId:J,x:Z.x,y:Z.y,w:Z.width,h:Z.height}))}),this._syncCtrl.start()}).catch(()=>{}).finally(()=>{if(this._initPromise===H)this._initPromise=null})}}if(typeof customElements<"u"){customElements.define("bunite-webview",V$);let _=()=>{n(($)=>$.bringAllVisiblesToFront())};document.addEventListener("pointerdown",_,!0),document.addEventListener("dragstart",()=>{n(($)=>$.setAllPassthrough({passthrough:!0}))},!0),document.addEventListener("dragend",()=>{n(($)=>$.setAllPassthrough({passthrough:!1})),_()},!0)}var E_=null,R8=null;function d8(){if(E_)return Promise.resolve(E_);if(R8)return R8;let _=(async()=>{let $=new WebSocket(`ws://localhost:${__buniteRpcSocketPort}/rpc?webviewId=${__buniteWebviewId}`);$.binaryType="arraybuffer",await new Promise((Z,J)=>{$.addEventListener("open",()=>Z(),{once:!0}),$.addEventListener("error",()=>J(Error("bunite preload ws connect failed")),{once:!0})});let X=Uint8Array.from(atob(__buniteSecretKeyBase64),(Z)=>Z.charCodeAt(0)),H=await P_(V_($),X),Q=B_({transport:T_(H),mode:"native",origin:location.origin});return E_=Q,Q})();return R8=_,_.catch(()=>{if(R8===_)R8=null}),_}var q8=window;q8.__bunite??={};q8.__buniteWebviewId=__buniteWebviewId;q8.__buniteRpcSocketPort=__buniteRpcSocketPort;q8.host??={};q8.host.bootstrap=async(_)=>{return(await d8()).bootstrap(_)};q8.host.runtime=async()=>(await d8()).runtime();q8.host.releaseRef=async(_)=>{(await d8()).releaseRef(_)};q8.host.getConnection=()=>d8();
|
|
1
|
+
var gX=Symbol.for("bunite.rpc.CallDef"),fX=Symbol.for("bunite.rpc.StreamDef"),pX=Symbol.for("bunite.rpc.CapDef"),uX=Symbol.for("bunite.rpc.CapRefToken"),lX=Symbol.for("bunite.rpc.CapArrayToken"),dX=Symbol.for("bunite.rpc.CapRecordToken"),y0=Symbol.for("bunite.rpc.Schema");function t8(X){return{[uX]:!0,cap:X}}t8.array=(X)=>({[lX]:!0,cap:X});t8.record=(X)=>({[dX]:!0,cap:X});var n=t8;function C8(X){return typeof X==="object"&&X!==null&&X[uX]===!0}function E8(X){return typeof X==="object"&&X!==null&&X[lX]===!0}function j8(X){return typeof X==="object"&&X!==null&&X[dX]===!0}function x8(X){return typeof X==="object"&&X!==null&&X[gX]===!0}function w8(X){return typeof X==="object"&&X!==null&&X[fX]===!0}function z(X){return{[gX]:!0,idempotent:!!X?.idempotent,returns:X?.returns}}function G8(X){return{[fX]:!0,hint:X?.hint}}function i(X,$,Q){return{[pX]:!0,name:X,version:Q?.version!=null?String(Q.version):void 0,methods:$,disposal:Q?.disposal??void 0}}function b8(X){return typeof X==="object"&&X!==null&&X[pX]===!0}function e8(X){return typeof X==="object"&&X!==null&&X[y0]===!0}var $X;try{$X=new TextDecoder}catch(X){}var _,s,J=0;var H0=[],QX=H0,ZX=0,b={},E,J8,o=0,e=0,p,H8,l=[],C,cX={useRecords:!1,mapsAsObjects:!0};class y8{}var qX=new y8;qX.name="MessagePack 0xC1";var N8=!1,nX=2,oX,sX,iX;class X8{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(_)return K0(()=>{return k8(),this?this.unpack(X,$):X8.prototype.unpack.call(cX,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;ZX=0,e=0,J8=null,QX=H0,p=null,_=X;try{C=X.dataView||(X.dataView=new DataView(X.buffer,X.byteOffset,X.byteLength))}catch(Q){if(_=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 X8){if(b=this,this.structures)return E=this.structures,I8($);else if(!E||E.length>0)E=[]}else if(b=cX,!E||E.length>0)E=[];return I8($)}unpackMultiple(X,$){let Q,Z=0;try{N8=!0;let H=X.length,q=this?this.unpack(X,H):v8.unpack(X,H);if($){if($(q,Z,J)===!1)return;while(J<H)if(Z=J,$(I8(),Z,J)===!1)return}else{Q=[q];while(J<H)Z=J,Q.push(I8());return Q}}catch(H){throw H.lastPosition=Z,H.values=Q,H}finally{N8=!1,k8()}}_mergeStructures(X,$){if(sX)X=sX.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 I8(X){try{if(!b.trusted&&!N8){let Q=E.sharedLength||0;if(Q<E.length)E.length=Q}let $;if(b.randomAccessStructure&&_[J]<64&&_[J]>=32&&oX){if($=oX(_,J,s,b),_=null,!(X&&X.lazy)&&$)$=$.toJSON();J=s}else $=h();if(p)J=p.postBundlePosition,p=null;if(N8)E.restoreStructures=null;if(J==s){if(E&&E.restoreStructures)aX();if(E=null,_=null,H8)H8=null}else if(J>s)throw Error("Unexpected end of MessagePack data");else if(!N8){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(E&&E.restoreStructures)aX();if(k8(),$ instanceof RangeError||$.message.startsWith("Unexpected end of buffer")||J>s)$.incomplete=!0;throw $}}function aX(){for(let X in E.restoreStructures)E[X]=E.restoreStructures[X];E.restoreStructures=null}function h(){let X=_[J++];if(X<160)if(X<128)if(X<64)return X;else{let $=E[X&63]||b.getStructures&&q0()[X&63];if($){if(!$.read)$.read=JX($,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=N0();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(e>=J)return J8.slice(J-o,(J+=$)-o);if(e==0&&s<140){let Q=$<16?NX($):J0($);if(Q!=null)return Q}return HX($)}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 qX;case 194:return!1;case 195:return!0;case 196:if($=_[J++],$===void 0)throw Error("Unexpected end of buffer");return XX($);case 197:return $=C.getUint16(J),J+=2,XX($);case 198:return $=C.getUint32(J),J+=4,XX($);case 199:return K8(_[J++]);case 200:return $=C.getUint16(J),J+=2,K8($);case 201:return $=C.getUint32(J),J+=4,K8($);case 202:if($=C.getFloat32(J),b.useFloat32>2){let Q=S8[(_[J]&127)<<1|_[J+1]>>7];return J+=4,(Q*$+($>0?0.5:-0.5)>>0)/Q}return J+=4,$;case 203:return $=C.getFloat64(J),J+=8,$;case 204:return _[J++];case 205:return $=C.getUint16(J),J+=2,$;case 206:return $=C.getUint32(J),J+=4,$;case 207:if(b.int64AsType==="number")$=C.getUint32(J)*4294967296,$+=C.getUint32(J+4);else if(b.int64AsType==="string")$=C.getBigUint64(J).toString();else if(b.int64AsType==="auto"){if($=C.getBigUint64(J),$<=BigInt(2)<<BigInt(52))$=Number($)}else $=C.getBigUint64(J);return J+=8,$;case 208:return C.getInt8(J++);case 209:return $=C.getInt16(J),J+=2,$;case 210:return $=C.getInt32(J),J+=4,$;case 211:if(b.int64AsType==="number")$=C.getInt32(J)*4294967296,$+=C.getUint32(J+4);else if(b.int64AsType==="string")$=C.getBigInt64(J).toString();else if(b.int64AsType==="auto"){if($=C.getBigInt64(J),$>=BigInt(-2)<<BigInt(52)&&$<=BigInt(2)<<BigInt(52))$=Number($)}else $=C.getBigInt64(J);return J+=8,$;case 212:if($=_[J++],$==114)return Q0(_[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(_.subarray(J,++J));else throw Error("Unknown extension "+$)}case 213:if($=_[J],$==114)return J++,Q0(_[J++]&63,_[J++]);else return K8(2);case 214:return K8(4);case 215:return K8(8);case 216:return K8(16);case 217:if($=_[J++],e>=J)return J8.slice(J-o,(J+=$)-o);return v0($);case 218:if($=C.getUint16(J),J+=2,e>=J)return J8.slice(J-o,(J+=$)-o);return h0($);case 219:if($=C.getUint32(J),J+=4,e>=J)return J8.slice(J-o,(J+=$)-o);return m0($);case 220:return $=C.getUint16(J),J+=2,tX($);case 221:return $=C.getUint32(J),J+=4,tX($);case 222:return $=C.getUint16(J),J+=2,eX($);case 223:return $=C.getUint32(J),J+=4,eX($);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 S0=/^[a-zA-Z_$][a-zA-Z\d_$]*$/;function JX(X,$){function Q(){if(Q.count++>nX){let H;try{H=X.read=Function("r","return function(){return "+(b.freezeData?"Object.freeze":"")+"({"+X.map((q)=>q==="__proto__"?"__proto_:r()":S0.test(q)?q+":r()":"["+JSON.stringify(q)+"]:r()").join(",")+"})}")(h)}catch(q){return nX=1/0,Q()}if(X.highByte===0)X.read=rX($,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 rX($,Q);return Q}var rX=(X,$)=>{return function(){let Q=_[J++];if(Q===0)return $();let Z=X<32?-(X+(Q<<5)):X+(Q<<5),H=E[Z]||q0()[Z];if(!H)throw Error("Record id is not defined for "+Z);if(!H.read)H.read=JX(H,X);return H.read()}};function q0(){let X=K0(()=>{return _=null,b.getStructures()});return E=b._mergeStructures(X,E)}var HX=_8,v0=_8,h0=_8,m0=_8;function _8(X){let $;if(X<16){if($=NX(X))return $}if(X>64&&$X)return $X.decode(_.subarray(J,J+=X));let Q=J+X,Z=[];$="";while(J<Q){let H=_[J++];if((H&128)===0)Z.push(H);else if((H&224)===192){let q=_[J++]&63,G=(H&31)<<6|q;if(G<128)Z.push(65533);else Z.push(G)}else if((H&240)===224){let q=_[J++]&63,G=_[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=_[J++]&63,G=_[J++]&63,D=_[J++]&63,O=(H&7)<<18|q<<12|G<<6|D;if(O<65536||O>1114111)Z.push(65533);else if(O>65535)O-=65536,Z.push(O>>>10&1023|55296),O=56320|O&1023,Z.push(O);else Z.push(O)}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 tX(X){let $=Array(X);for(let Q=0;Q<X;Q++)$[Q]=h();if(b.freezeData)return Object.freeze($);return $}function eX(X){if(b.mapsAsObjects){let $={};for(let Q=0;Q<X;Q++){let Z=N0();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 J0(X){let $=J,Q=Array(X);for(let Z=0;Z<X;Z++){let H=_[J++];if((H&128)>0){J=$;return}Q[Z]=H}return f.apply(String,Q)}function NX(X){if(X<4)if(X<2)if(X===0)return"";else{let $=_[J++];if(($&128)>1){J-=1;return}return f($)}else{let $=_[J++],Q=_[J++];if(($&128)>0||(Q&128)>0){J-=2;return}if(X<3)return f($,Q);let Z=_[J++];if((Z&128)>0){J-=3;return}return f($,Q,Z)}else{let $=_[J++],Q=_[J++],Z=_[J++],H=_[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=_[J++];if((q&128)>0){J-=5;return}return f($,Q,Z,H,q)}else if(X<8){let q=_[J++],G=_[J++];if((q&128)>0||(G&128)>0){J-=6;return}if(X<7)return f($,Q,Z,H,q,G);let D=_[J++];if((D&128)>0){J-=7;return}return f($,Q,Z,H,q,G,D)}else{let q=_[J++],G=_[J++],D=_[J++],O=_[J++];if((q&128)>0||(G&128)>0||(D&128)>0||(O&128)>0){J-=8;return}if(X<10)if(X===8)return f($,Q,Z,H,q,G,D,O);else{let M=_[J++];if((M&128)>0){J-=9;return}return f($,Q,Z,H,q,G,D,O,M)}else if(X<12){let M=_[J++],T=_[J++];if((M&128)>0||(T&128)>0){J-=10;return}if(X<11)return f($,Q,Z,H,q,G,D,O,M,T);let V=_[J++];if((V&128)>0){J-=11;return}return f($,Q,Z,H,q,G,D,O,M,T,V)}else{let M=_[J++],T=_[J++],V=_[J++],j=_[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,O,M,T,V,j);else{let k=_[J++];if((k&128)>0){J-=13;return}return f($,Q,Z,H,q,G,D,O,M,T,V,j,k)}else{let k=_[J++],v=_[J++];if((k&128)>0||(v&128)>0){J-=14;return}if(X<15)return f($,Q,Z,H,q,G,D,O,M,T,V,j,k,v);let u=_[J++];if((u&128)>0){J-=15;return}return f($,Q,Z,H,q,G,D,O,M,T,V,j,k,v,u)}}}}}function X0(){let X=_[J++],$;if(X<192)$=X-160;else switch(X){case 217:$=_[J++];break;case 218:$=C.getUint16(J),J+=2;break;case 219:$=C.getUint32(J),J+=4;break;default:throw Error("Expected string")}return _8($)}function XX(X){return b.copyBuffers?Uint8Array.prototype.slice.call(_,J,J+=X):_.subarray(J,J+=X)}function K8(X){let $=_[J++];if(l[$]){let Q;return l[$](_.subarray(J,Q=J+=X),(Z)=>{J=Z;try{return h()}finally{J=Q}})}else throw Error("Unknown extension type "+$)}var $0=Array(4096);function N0(){let X=_[J++];if(X>=160&&X<192){if(X=X-160,e>=J)return J8.slice(J-o,(J+=X)-o);else if(!(e==0&&s<180))return HX(X)}else return J--,G0(h());let $=(X<<5^(X>1?C.getUint16(J):X>0?_[J]:0))&4095,Q=$0[$],Z=J,H=J+X-3,q,G=0;if(Q&&Q.bytes==X){while(Z<H){if(q=C.getUint32(Z),q!=Q[G++]){Z=1879048192;break}Z+=4}H+=3;while(Z<H)if(q=_[Z++],q!=Q[G++]){Z=1879048192;break}if(Z===H)return J=Z,Q.string;H-=3,Z=J}Q=[],$0[$]=Q,Q.bytes=X;while(Z<H)q=C.getUint32(Z),Q.push(q),Z+=4;H+=3;while(Z<H)q=_[Z++],Q.push(q);let D=X<16?NX(X):J0(X);if(D!=null)return Q.string=D;return Q.string=HX(X)}function G0(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 Q0=(X,$)=>{let Q=h().map(G0),Z=X;if($!==void 0)X=X<32?-(($<<5)+X):($<<5)+X,Q.highByte=$;let H=E[X];if(H&&(H.isShared||N8))(E.restoreStructures||(E.restoreStructures=[]))[X]=H;return E[X]=Q,Q.read=JX(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 O=q+(D>>4<<3),M=H(q,O),T=H(O,G);return M<<BigInt((G-O)*8)|T};Q=Q<<BigInt((Z.byteLength-$)*8)|H($,Z.byteLength)}return Q};var Z0={Error,EvalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError,AggregateError:typeof AggregateError==="function"?AggregateError:null};l[101]=()=>{let X=h();if(!Z0[X[0]]){let $=Error(X[1],{cause:X[2]});return $.name=X[0],$}return Z0[X[0]](X[1],{cause:X[2]})};l[105]=(X)=>{if(b.structuredClone===!1)throw Error("Structured clone extension is disabled");let $=C.getUint32(J-4);if(!H8)H8=new Map;let Q=_[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)&&_[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 $=C.getUint32(J-4),Q=H8.get($);return Q.used=!0,Q.target};l[115]=()=>new Set(h());var GX=["Int8","Uint8","Uint8Clamped","Int16","Uint16","Int32","Uint32","Float32","Float64","BigInt64","BigUint64"].map((X)=>X+"Array"),g0=typeof globalThis==="object"?globalThis:window;l[116]=(X)=>{let $=X[0],Q=Uint8Array.prototype.slice.call(X,1).buffer,Z=GX[$];if(!Z){if($===16)return Q;if($===17)return new DataView(Q);throw Error("Could not find typed array for code "+$)}return new g0[Z](Q)};l[120]=()=>{let X=h();return new RegExp(X[0],X[1])};var f0=[];l[98]=(X)=>{let $=(X[0]<<24)+(X[1]<<16)+(X[2]<<8)+X[3],Q=J;return J+=$-X.length,p=f0,p=[X0(),X0()],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 K0(X){if(iX)iX();let $=s,Q=J,Z=ZX,H=o,q=e,G=J8,D=QX,O=H8,M=p,T=new Uint8Array(_.slice(0,s)),V=E,j=E.slice(0,E.length),k=b,v=N8,u=X();return s=$,J=Q,ZX=Z,o=H,e=q,J8=G,QX=D,H8=O,p=M,_=T,N8=v,E=V,E.splice(0,E.length,...j),b=k,C=new DataView(_.buffer,_.byteOffset,_.byteLength),u}function k8(){_=null,H8=null,E=null}function Y0(X){if(X.unpack)l[X.type]=X.unpack;else l[X.type]=X}var S8=Array(147);for(let X=0;X<256;X++)S8[X]=+("1e"+Math.floor(45.15-X*0.30103));var v8=new X8({useRecords:!1}),p0=v8.unpack,u0=v8.unpackMultiple,l0=v8.unpack;var d0=new Float32Array(1),C$=new Uint8Array(d0.buffer,0,4);var m8;try{m8=new TextEncoder}catch(X){}var g8,f8,D8=typeof Buffer<"u",h8=D8?function(X){return Buffer.allocUnsafeSlow(X)}:Uint8Array,O0=D8?Buffer:Uint8Array,D0=D8?4294967296:2144337920,K,A8,I,N=0,d,S=null,c0,n0=21760,o0=/[\u0080-\uFFFF]/,Y8=Symbol("record-id");class F8 extends X8{constructor(X){super(X);this.offset=0;let $,Q,Z,H,q,G=O0.prototype.utf8Write?function(Y,A){return K.utf8Write(Y,A,K.byteLength-A)}:m8&&m8.encodeInto?function(Y,A){return m8.encodeInto(Y,K.subarray(A)).written}:!1,D=this;if(!X)X={};let O=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,A){if(!K)K=new h8(8192),I=K.dataView||(K.dataView=new DataView(K.buffer,0,8192)),N=0;if(d=K.length-10,d-N<2048)K=new h8(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,A&M0)N+=A&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(!O)H.nextId=F+64}if(Z)Z=!1;let U;try{if(D.randomAccessStructure&&Y&&typeof Y==="object")if(Y.constructor===Object)mX(Y);else if(Y.constructor!==Map&&!Array.isArray(Y)&&!f8.some((L)=>Y instanceof L))mX(Y.toJSON?Y.toJSON():Y);else y(Y);else y(Y);let F=S;if(S)L0(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=s0(K.subarray(Q,N),L);return q=null,W}if(D.offset=N,A&A0)return K.start=Q,K.end=N,K;return K.subarray(Q,N)}catch(F){throw U=F,F}finally{if(H){if(T8(),Z&&D.saveStructures){let F=H.sharedLength||0,L=K.subarray(Q,N),R=i0(H,D);if(!U){if(D.saveStructures(R,R.isCompatible)===!1)return D.pack(Y,A);if(D.lastNamedStructuresLength=F,K.length>1073741824)K=null;return L}}}if(K.length>1073741824)K=null;if(A&z0)N=Q}};let T8=()=>{if(Q8<10)Q8++;let Y=H.sharedLength||0;if(H.length>Y&&!O)H.length=Y;if(g>1e4){if(H.transitions=null,Q8=0,g=0,u.length>0)u=[]}else if(u.length>0&&!O){for(let A=0,U=u.length;A<U;A++)u[A][Y8]=0;u=[]}},a8=(Y)=>{var A=Y.length;if(A<16)K[N++]=144|A;else if(A<65536)K[N++]=220,K[N++]=A>>8,K[N++]=A&255;else K[N++]=221,I.setUint32(N,A),N+=4;for(let U=0;U<A;U++)y(Y[U])},y=(Y)=>{if(N>d)K=Z8(N);var A=typeof Y,U;if(A==="string"){let F=Y.length;if(S&&F>=4&&F<4096){if((S.size+=F)>n0){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,L0(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=o0.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(A==="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*S8[(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(A==="object"||A==="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)P8(Y);else if(F===Array)a8(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=g8.length;L<R;L++){let B=f8[L];if(Y instanceof B){let W=g8[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))a8(Y);else P8(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=F0(q8,K,N,W.type)}return}}if(Array.isArray(Y))a8(Y);else{if(Y.toJSON){let L=Y.toJSON();if(L!==Y)return y(L)}if(A==="function")return y(this.writeFunction&&this.writeFunction(Y));P8(Y)}}}else if(A==="boolean")K[N++]=Y?195:194;else if(A==="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=F0(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(A==="undefined")if(this.encodeUndefinedAsNil)K[N++]=192;else K[N++]=212,K[N++]=0,K[N++]=0;else throw Error("Unknown type: "+A)},yX=this.variableMapSize||this.coercibleKeyAsNumber||this.skipValues?(Y)=>{let A;if(this.skipValues){A=[];for(let L in Y)if((typeof Y.hasOwnProperty!=="function"||Y.hasOwnProperty(L))&&!this.skipValues.includes(Y[L]))A.push(L)}else A=Object.keys(Y);let U=A.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=A[L];let R=Number(F);y(isNaN(R)?F:R),y(Y[F])}else for(let L=0;L<U;L++)y(F=A[L]),y(Y[F])}:(Y)=>{K[N++]=222;let A=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[A+++Q]=U>>8,K[A+Q]=U&255},SX=this.useRecords===!1?yX:X.progressiveRecords&&!j?(Y)=>{let A,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(A=U[R],A)U=A;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(A=U[q8],!A)A=U[q8]=Object.create(null),x++;U=A}if(F+Q+1==N)N--,r8(U,B,x);else hX(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 hX(U,Object.keys(Y),F,0)}}:(Y)=>{let A,U=H.transitions||(H.transitions=Object.create(null)),F=0;for(let R in Y)if(typeof Y.hasOwnProperty!=="function"||Y.hasOwnProperty(R)){if(A=U[R],!A)A=U[R]=Object.create(null),F++;U=A}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 r8(U,U.__keys__||Object.keys(Y),F);for(let R in Y)if(typeof Y.hasOwnProperty!=="function"||Y.hasOwnProperty(R))y(Y[R])},vX=typeof this.useRecords=="function"&&this.useRecords,P8=vX?(Y)=>{vX(Y)?SX(Y):yX(Y)}:SX,Z8=(Y)=>{let A;if(Y>16777216){if(Y-Q>D0)throw Error("Packed buffer would be larger than maximum buffer size");A=Math.min(D0,Math.round(Math.max((Y-Q)*(Y>67108864?1.25:2),4194304)/4096)*4096)}else A=(Math.max(Y-Q<<2,K.length-1)>>12)+1<<12;let U=new h8(A);if(I=U.dataView||(U.dataView=new DataView(U.buffer,0,A)),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},r8=(Y,A,U)=>{let F=H.nextId;if(!F)F=64;if(F<k&&this.shouldShareStructure&&!this.shouldShareStructure(A)){if(F=H.nextOwnId,!(F<v))F=k;H.nextOwnId=F+1}else{if(F>=v)F=k;H.nextId=F+1}let L=A.highByte=F>=96&&j?F-96>>5:-1;if(Y[Y8]=F,Y.__keys__=A,H[F-64]=A,F<k)if(A.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(A)}},hX=(Y,A,U,F)=>{let L=K,R=N,B=d,W=Q;if(K=A8,N=0,Q=0,!K)A8=K=new h8(8192);d=K.length-10,r8(Y,A,F),A8=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(A8.slice(0,x),t),N=w}else K[U+Q]=A8[0]},mX=(Y)=>{let A=c0(Y,K,Q,N,H,Z8,(U,F,L)=>{if(L)return Z=!0;N=F;let R=K;if(y(U),T8(),R!==K)return{position:N,targetView:I,target:K};return N},this);if(A===0)return P8(Y);N=A}}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=[]}}f8=[Date,Set,Error,RegExp,ArrayBuffer,Object.getPrototypeOf(Uint8Array.prototype).constructor,DataView,y8];g8=[{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)KX(X,16,$);else YX(D8?Buffer.from(X):new Uint8Array(X),$)}},{pack(X,$){let Q=X.constructor;if(Q!==O0&&this.moreTypes)KX(X,GX.indexOf(Q.name),$);else YX(X,$)}},{pack(X,$){if(this.moreTypes)KX(X,17,$);else YX(D8?Buffer.from(X):new Uint8Array(X),$)}},{pack(X,$){let{target:Q,position:Z}=$(1);Q[Z]=193}}];function KX(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 YX(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 F0(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 s0(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 L0(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 DX(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)");f8.unshift(X.Class),g8.unshift(X)}Y0(X)}function i0(X,$){return X.isCompatible=(Q)=>{let Z=!Q||($.lastNamedStructuresLength||0)===Q.length;if(!Z)$._mergeStructures(Q);return Z},X}var _0=new F8({useRecords:!1}),a0=_0.pack,r0=_0.pack;var A0=512,z0=1024,M0=2048;var R0=80;class a{capId;constructor(X){this.capId=X}}var t0=new Set(["hello","goaway","call","result","cancel","stream","drop","cap_revoked"]);function FX(X){if(typeof X!=="object"||X===null)return!1;let $=X,Q=$.op;if(typeof Q!=="string"||!t0.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 W0=!1;function e0(){if(W0)return;W0=!0,DX({Class:a,type:R0,pack:(X)=>X$(X.capId),unpack:(X)=>new a(Q$(X))})}function LX(){return e0(),{packr:new F8({useRecords:!0,sequential:!0,moreTypes:!0}),unpackr:new X8({useRecords:!0,sequential:!0,moreTypes:!0})}}function X$(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 $$=5;function Q$(X){let $=0,Q=0,Z=Math.min(X.length,$$);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 UX=67108864,OX=1,p8="bunite.",u8="bootstrap";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 l8=i("bunite.BrowserWindow",{focus:z(),close:z(),setBounds:z(),setTitle:z(),id:z({idempotent:!0}),label:z({idempotent:!0})}),_X=i("bunite.Window",{create:z({returns:n(l8)}),list:z({returns:n.array(l8),idempotent:!0}),focus:z(),close:z()}),d8=i("bunite.FileRef",{text:z({idempotent:!0}),bytes:z({idempotent:!0}),path:z({idempotent:!0}),revoke:z()},{disposal:{method:"revoke"}}),AX=i("bunite.Dialogs",{openFile:z({returns:n.array(d8)}),saveFile:z({returns:n(d8)}),showMessage:z()}),zX=i("bunite.Clipboard",{readText:z({idempotent:!0}),writeText:z(),readBytes:z({idempotent:!0}),writeBytes:z()}),MX=i("bunite.Shell",{openExternal:z(),showItemInFolder:z()}),WX=i("bunite.PageReporting",{reportConsoleBatch:z()}),RX=i("bunite.Surface",{init:z(),resize:z(),remove:z(),setHidden:z(),setMasks:z(),setAllPassthrough:z(),bringAllVisiblesToFront:z(),navigate:z(),goBack:z(),reload:z(),evaluate:z(),capabilities:z(),click:z(),type:z(),press:z(),scroll:z(),mouse:z(),screenshot:z(),waitForSelector:z(),waitForFunction:z(),respondToDialog:z(),setDialogTimeout:z(),getConsoleBuffer:z({idempotent:!0}),surfaceEvents:G8(),dialogs:G8(),consoleEvents:G8(),getNavigationState:z({idempotent:!0}),accessibilitySnapshot:z(),getBoundingRect:z({idempotent:!0}),listFrames:z({idempotent:!0}),downloadEvents:G8(),waitForDownload:z(),setDownloadPolicy:z(),acceptPopup:z(),dismissPopup:z(),extendPopupTimeout:z(),resolveAndClick:z()}),z8=i("bunite.Runtime",{window:z({returns:n(_X),idempotent:!0}),dialogs:z({returns:n(AX),idempotent:!0}),clipboard:z({returns:n(zX),idempotent:!0}),shell:z({returns:n(MX),idempotent:!0}),appName:z({idempotent:!0}),appVersion:z({idempotent:!0}),theme:z({idempotent:!0}),themeWatch:G8(),surface:z({returns:n(RX),idempotent:!0}),reporting:z({returns:n(WX),idempotent:!0}),popupMetrics:z({idempotent:!0})}),$8={Runtime:1,Window:2,Dialogs:3,FileRef:4,Clipboard:5,Shell:6,BrowserWindow:7,Surface:8,PageReporting:9},Z$=new Map([[z8,$8.Runtime],[_X,$8.Window],[AX,$8.Dialogs],[d8,$8.FileRef],[zX,$8.Clipboard],[MX,$8.Shell],[l8,$8.BrowserWindow],[RX,$8.Surface],[WX,$8.PageReporting]]);function BX(X){return Z$.get(X)}var n8=0,PX=1,V0=0,T0=1,L8=2,CX=128,o8=1024,P0=1024,H$=o8*4,q$=500,J$=32,N$=8,G$=1024;function K$(X){let $=X?.initialBudget;if(typeof $!=="number"||!Number.isFinite($)||!Number.isInteger($)||$<1)return J$;return Math.min($,G$)}var c8=null;class EX{entries=new Map;nextCapId=L8;capLimit;constructor(X=o8){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 Y$={origin:"",topOrigin:"",partition:"default",isAppRes:!1,isMainFrame:!1,userGesture:!1,level:"untrusted"},C0=Symbol("bunite.rpc.ExportedCap"),B0=Symbol("bunite.rpc.CapProxyMeta");function D$(X){return typeof X==="object"&&X!==null&&X[C0]===!0}var F$=typeof FinalizationRegistry<"u"?new FinalizationRegistry((X)=>{if(X.dropped())return;let $=X.connRef.deref();if(!$||$.closed)return;$._dropFromFinalizer(X.capId)}):{register:()=>{}};class E0{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??UX,this.maxInFlightCalls=X.maxInFlightCalls??P0,this.attestation=X.attestation??Y$,this.peerId=X.peerId??"peer",this.policy=X.policy,this.capTable=new EX(X.capLimit??o8),this.capTable.install(n8,{typeId:V0,cap:null,impl:null,refCount:1}),this.capTable.install(PX,{typeId:T0,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:OX,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>H$){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 $=b8(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(p8))throw new P({code:"already_exists",message:`cap name "${X}" uses reserved prefix "${p8}"`,details:{reason:"reserved_namespace"}})}runtimeProxy=null;runtime(){if(!this.runtimeProxy)this.runtimeProxy=this.makeCapProxy(z8,PX);return this.runtimeProxy}async bootstrap(X){if(b8(X))return this._bootstrapCap(X);if(e8(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(n8,u8,$,void 0);if(!(Q instanceof a))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===n8&&X.method===u8){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(O){return this.emitObs("error",{phase:"policy",error:O instanceof Error?O:Error(String(O))}),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:BX(H.cap)??CX,cap:H.cap,impl:H.impl,refCount:1}).capId,this.rootInstances.set(Q,G)}catch(D){if(D instanceof P){let O=D.code==="resource_exhausted"?"resource_exhausted":"internal";return this.emitObs("bootstrap",{name:Q,version:Z,attestation:this.attestation,result:O}),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 a(G)})}async invokeServerMethod(X,$,Q,Z){let H=this.makeCallCtx(X);if(w8(Q)){let q=K$(Q.hint);try{let G=()=>Z(X.args,H),D=c8,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:VX(G)})}return}if(x8(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=L$(Q.returns),O=()=>Promise.resolve(Z(X.args,H)),M=c8,T=M?()=>M.run({callId:X.id},O):O;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=VX(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=BX(X)??CX,Z=this.capTable.allocate({typeId:Q,cap:X,impl:$,refCount:1});return{[C0]:!0,cap:X,capId:Z.capId,typeId:Z.typeId}}runServerStream(X,$,Q,Z,H,q,G){let D=$[Symbol.asyncIterator](),O=Q._ctrl,M={iter:D,abort:O,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:VX(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[B0];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,O)=>{let M=new AbortController,T={resolve:D,reject:O,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"}),O(new P({code:"deadline_exceeded"}))},H.deadlineMs+q$);this.pending.set(G,T);let V=H;if(V?.parentCallId===void 0&&c8){let j=c8.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=TX(X,0,()=>{},()=>{});return M.fail(new P({code:"unavailable",message:"connection closed"})),M.stream}if(this.revokedCapIds.has(X)){let M=TX(X,0,()=>{},()=>{});return M.fail(new P({code:"failed_precondition",message:"cap revoked",details:{reason:"revoked"}})),M.stream}let q=this.nextId(),O=TX(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,O),this.transport.send({op:"call",id:q,target:{kind:"cap",id:X},method:$,args:Q,meta:Z}),O.stream}makeCapProxy(X,$){let Q={},Z={capId:$,dropped:!1};Q[B0]=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(w8(D))Q[G]=(O)=>this.openClientStream($,G,O,void 0,X.name);else if(x8(D)){let O=U$(D.returns,(M,T)=>this.makeCapProxy(M,T));Q[G]=(M)=>this.sendCallTyped($,G,M,O,void 0,X.name)}}let q=X.disposal;if(q){let G=this;Q[Symbol.dispose]=()=>{try{let D=Q[q.method]?.();if(D&&typeof D.then==="function")D.catch((O)=>G.emitObs("error",{phase:"dispose",error:O instanceof Error?O:Error(String(O))}))}catch(D){G.emitObs("error",{phase:"dispose",error:D instanceof Error?D:Error(String(D))})}H()}}if(typeof FinalizationRegistry<"u")F$.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 L$(X){if(!X)return(Q)=>Q;let $=(Q,Z)=>{if(!D$(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 a(Q.capId)};if(C8(X))return(Q)=>$(Q,X.cap);if(E8(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(j8(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 U$(X,$){if(!X)return;if(C8(X)){let Q=X.cap;return(Z)=>{if(!(Z instanceof a))throw new P({code:"invalid_argument",message:"expected CapRef"});return $(Q,Z.capId)}}if(E8(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 a))throw new P({code:"invalid_argument",message:"expected CapRef in array"});return $(Q,G.capId)});return O$(q,Z),q}}if(j8(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 a))throw new P({code:"invalid_argument",message:"expected CapRef in record"});H[q]=$(Q,G.capId)}return H}}return}function O$(X,$){if(!$)return;X[Symbol.dispose]=()=>{for(let Q of X)Q[Symbol.dispose]?.call(Q)}}function VX(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 TX(X,$,Q,Z){let H=[],q=[],G=!1,D=null,O=!1,M=0;function T(){if(M+=1,M>=N$)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||O)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,T8)=>q.push({resolve:Q8,reject:T8}))}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(O||G||D)return;O=!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(O||G||D)return;H.push(g),k()},end(){G=!0,k()},fail(g){D=g,k()}}}function jX(X){return new E0(X)}function xX(X,$={}){let Q=LX(),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(!FX(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 wX(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?.()}}}function M8(X){let $=new ArrayBuffer(X.byteLength);return new Uint8Array($).set(X),$}async function _$(X){return crypto.subtle.importKey("raw",M8(X),"AES-GCM",!1,["encrypt","decrypt"])}async function bX(X,$){let Q=await _$($),Z,H=Promise.resolve(),q=Promise.resolve(),G=!1,D=()=>{if(!G)G=!0,X.close()};return X.setReceive((O)=>{if(G)return;if(O.length<13||O[0]!==1){D();return}let M=M8(O.subarray(1,13)),T=M8(O.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(O){if(G)return;let M=M8(O);H=H.then(async()=>{if(G)return;try{let T=crypto.getRandomValues(new Uint8Array(12)),V=M8(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(O){Z=O},close(){D()}}}class A${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})}}var IX=null;function W8(){if(!IX)IX=host.runtime().then((X)=>X.surface());return IX}function c(X){return W8().then(X).catch(($)=>{if(globalThis.__BUNITE_DEBUG__)console.warn("[bunite] surface call failed",$);return})}function m(X){return W8().then(X)}class j0{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 x0 extends HTMLElement{static observedAttributes=["src"];_surfaceId=null;_syncCtrl=null;_initPromise=null;_aborted=!1;_pendingSrc=null;_syncHidden=!1;_userHidden=!1;_layoutObserver=null;_unsubNavigate=null;_activeStreams=[];constructor(){super()}connectedCallback(){this._aborted=!1,this._syncHidden=!1,this._userHidden=!1;let X=new AbortController;this._unsubNavigate=()=>X.abort(),(async()=>{try{let $=await W8();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 j0(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=W8().then(async(D)=>{let O=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(!O.ok)throw Error(`acceptPopup failed: ${O.code}: ${O.message}`);return{surfaceId:Z}});this._initPromise=G,G.then((D)=>{if(this._initPromise!==G)return;if(this._aborted){c((O)=>O.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=W8().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 O=this._surfaceId;if(O!=null)c((M)=>M.navigate({surfaceId:O,url:D}))}this._setupSyncCtrl()}).catch(()=>{}).finally(()=>{if(this._initPromise===q)this._initPromise=null})}}if(typeof customElements<"u"){customElements.define("bunite-webview",x0);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 kX=null,R8=null;function i8(){if(kX)return Promise.resolve(kX);if(R8)return R8;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 bX(wX($),Q),H=jX({transport:xX(Z),mode:"native",origin:location.origin});return kX=H,H})();return R8=X,X.catch(()=>{if(R8===X)R8=null}),X}var r=window;r.__bunite??={};r.__buniteWebviewId=__buniteWebviewId;r.__buniteRpcSocketPort=__buniteRpcSocketPort;r.host??={};r.host.bootstrap=async(X)=>{return(await i8()).bootstrap(X)};r.host.runtime=async()=>(await i8()).runtime();r.host.releaseRef=async(X)=>{(await i8()).releaseRef(X)};r.host.getConnection=()=>i8();var k0=Symbol.for("bunite.console.buffer"),w0=200,z$=16,M$=50;r[k0]=[];var s8=r[k0];function W$(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,b0=0,R$=1000;function B$(){if(U8)return U8;if(Date.now()<b0)return Promise.reject(Error("reporting cap cooldown"));return U8=(async()=>{return(await r.host.runtime()).reporting()})(),U8.catch(()=>{U8=null,b0=Date.now()+R$}),U8}var B8=[],V8=null;function I0(){if(V8)clearTimeout(V8),V8=null;if(B8.length===0)return;let X=B8;B8=[],B$().then(($)=>$.reportConsoleBatch({entries:X})).catch(()=>{})}function V$(){if(B8.length>=M$){I0();return}if(V8)return;V8=setTimeout(I0,z$)}function T$(){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(W$),ts:Date.now()};if(s8.push(Z),s8.length>w0)s8.splice(0,s8.length-w0);B8.push(Z),V$()}catch{}}}}T$();
|
package/src/preload/runtime.ts
CHANGED
|
@@ -66,4 +66,101 @@ w.host.releaseRef = async (proxy: unknown): Promise<void> => {
|
|
|
66
66
|
|
|
67
67
|
w.host.getConnection = (): Promise<Connection> => ensureConnection();
|
|
68
68
|
|
|
69
|
+
// --- console capture ----------------------------------------------------
|
|
70
|
+
// page → host event sink via PageReportingCap. 16ms coalesce batch. Errors
|
|
71
|
+
// during RPC are swallowed — proxy NEVER throws inside `console.log` (would
|
|
72
|
+
// corrupt page semantics).
|
|
73
|
+
//
|
|
74
|
+
// page-side ring buffer is keyed by Symbol.for so user-page code can't trivially
|
|
75
|
+
// collide / shadow. `evaluate("window[Symbol.for('bunite.console.buffer')]")`
|
|
76
|
+
// remains accessible as a retrospective fallback.
|
|
77
|
+
|
|
78
|
+
type ConsoleLevel = "log" | "warn" | "error" | "info" | "debug";
|
|
79
|
+
type ConsoleEntry = { level: ConsoleLevel; args: string[]; ts: number };
|
|
80
|
+
|
|
81
|
+
const CONSOLE_BUFFER_KEY = Symbol.for("bunite.console.buffer");
|
|
82
|
+
const PAGE_RING_LIMIT = 200;
|
|
83
|
+
const BATCH_INTERVAL_MS = 16;
|
|
84
|
+
const BATCH_SIZE_THRESHOLD = 50;
|
|
85
|
+
|
|
86
|
+
(w as any)[CONSOLE_BUFFER_KEY] = [] as ConsoleEntry[];
|
|
87
|
+
const pageBuffer = (w as any)[CONSOLE_BUFFER_KEY] as ConsoleEntry[];
|
|
88
|
+
|
|
89
|
+
function serializeArg(a: unknown): string {
|
|
90
|
+
if (typeof a === "string") return a;
|
|
91
|
+
if (a instanceof Error) return a.stack ?? a.message;
|
|
92
|
+
try { return JSON.stringify(a); } catch { return String(a); }
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
let reportingCap: Promise<{ reportConsoleBatch(args: { entries: ConsoleEntry[] }): Promise<void> | void }> | null = null;
|
|
96
|
+
// Circuit breaker: after a failed cap fetch, hold off for a cooldown so a
|
|
97
|
+
// permanently-disconnected host doesn't burn a retry per batch (16ms cadence).
|
|
98
|
+
let nextRetryMs = 0;
|
|
99
|
+
const RETRY_COOLDOWN_MS = 1000;
|
|
100
|
+
function getReporting() {
|
|
101
|
+
if (reportingCap) return reportingCap;
|
|
102
|
+
if (Date.now() < nextRetryMs) return Promise.reject(new Error("reporting cap cooldown"));
|
|
103
|
+
reportingCap = (async () => {
|
|
104
|
+
const r = await (w.host as { runtime(): Promise<any> }).runtime();
|
|
105
|
+
return r.reporting();
|
|
106
|
+
})();
|
|
107
|
+
reportingCap.catch(() => {
|
|
108
|
+
reportingCap = null;
|
|
109
|
+
nextRetryMs = Date.now() + RETRY_COOLDOWN_MS;
|
|
110
|
+
});
|
|
111
|
+
return reportingCap;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
let batch: ConsoleEntry[] = [];
|
|
115
|
+
let batchTimer: ReturnType<typeof setTimeout> | null = null;
|
|
116
|
+
|
|
117
|
+
function flushBatch() {
|
|
118
|
+
if (batchTimer) { clearTimeout(batchTimer); batchTimer = null; }
|
|
119
|
+
if (batch.length === 0) return;
|
|
120
|
+
const entries = batch;
|
|
121
|
+
batch = [];
|
|
122
|
+
getReporting()
|
|
123
|
+
.then((rep) => rep.reportConsoleBatch({ entries }))
|
|
124
|
+
.catch(() => {
|
|
125
|
+
// resource_exhausted (RPC over capacity), disconnect, or other RPC error.
|
|
126
|
+
// The page-side ring buffer still has these entries; consumers can fetch
|
|
127
|
+
// via `evaluate(...)` if the host stream missed them.
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function scheduleFlush() {
|
|
132
|
+
if (batch.length >= BATCH_SIZE_THRESHOLD) {
|
|
133
|
+
flushBatch();
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
if (batchTimer) return;
|
|
137
|
+
batchTimer = setTimeout(flushBatch, BATCH_INTERVAL_MS);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function installConsoleProxy() {
|
|
141
|
+
for (const level of ["log", "warn", "error", "info", "debug"] as const) {
|
|
142
|
+
const original = (console as Record<ConsoleLevel, (...a: unknown[]) => void>)[level].bind(console);
|
|
143
|
+
(console as Record<ConsoleLevel, (...a: unknown[]) => void>)[level] = (...args: unknown[]) => {
|
|
144
|
+
// Original console first — preserve page-author dev experience even if
|
|
145
|
+
// the bunite plumbing throws further down (shouldn't, but defensive).
|
|
146
|
+
try { original(...args); } catch { /* extreme: original throws */ }
|
|
147
|
+
try {
|
|
148
|
+
const entry: ConsoleEntry = {
|
|
149
|
+
level,
|
|
150
|
+
args: args.map(serializeArg),
|
|
151
|
+
ts: Date.now(),
|
|
152
|
+
};
|
|
153
|
+
pageBuffer.push(entry);
|
|
154
|
+
if (pageBuffer.length > PAGE_RING_LIMIT) {
|
|
155
|
+
pageBuffer.splice(0, pageBuffer.length - PAGE_RING_LIMIT);
|
|
156
|
+
}
|
|
157
|
+
batch.push(entry);
|
|
158
|
+
scheduleFlush();
|
|
159
|
+
} catch { /* never propagate to page */ }
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
installConsoleProxy();
|
|
165
|
+
|
|
69
166
|
import "../webview/native";
|