ugly-app 0.1.729 → 0.1.730

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.
@@ -1,2 +1,2 @@
1
- export declare const CLI_VERSION = "0.1.729";
1
+ export declare const CLI_VERSION = "0.1.730";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.729";
2
+ export const CLI_VERSION = "0.1.730";
3
3
  //# sourceMappingURL=version.js.map
@@ -1,4 +1,4 @@
1
- "use strict";(()=>{function Pe(e){let t=e.url??"/ws",n=t.startsWith("/")?typeof window<"u"?`${window.location.protocol==="https:"?"wss":"ws"}://${window.location.host}${t}`:`ws://localhost:${4321}${t}`:t,r=0;function o(){return String(++r)}let c=new Map,i=null,d=!1,m=!1,g=!1,a=0,y=!1,k=!1,l=e.initialFocus??!0,h=e.keepConnectedWhenUnfocused??!1,v=null,E=!1,M=0,x="connecting",te=1e3,pt=3e4,mt=5,me=1e3,ne=!1,gt=3e4,re=null,ge=null,yt=null,oe=null,_=null,ie=[],se=[],b=new Map,I=new Map,z=new Map;function ce(){re=new Promise((u,s)=>{ge=u,yt=s}),re.catch(()=>{})}ce();function W(u,s){x=u,typeof window<"u"&&window.dispatchEvent(new CustomEvent("ws-connection-state",{detail:{state:u,...s}}))}function wt(u){for(let{reject:s,timeout:f}of b.values())clearTimeout(f),s(new Error(u));b.clear(),I.clear(),z.clear()}function ae(u){for(let[s,f]of b)clearTimeout(f.timeout),f.retry?we(se,s):(b.delete(s),f.reject(new Error(u?"WebSocket disconnected (idle)":"WebSocket disconnected")))}function ye(u){i.send(JSON.stringify(u))}function we(u,s){u.length>=me&&(u.shift(),ne||(console.warn(`[socket] queue exceeded ${me} \u2014 dropping oldest message(s)`),ne=!0)),u.push(s)}function V(u){g&&d&&i?.readyState===WebSocket.OPEN?i.send(u):we(ie,u)}function ke(u,s,f=6e4,p=!0){if(typeof u=="object"&&u!==null){V(JSON.stringify(u));return}return new Promise((w,R)=>{let T=o(),P=JSON.stringify({type:u,id:T,data:s}),A=setTimeout(()=>{b.delete(T),R(new Error(`Request timeout: ${u}`))},f);b.set(T,{resolve:w,reject:R,timeout:A,serialized:P,retry:p,timeoutMs:f}),V(P)})}function he(u,s){V(JSON.stringify({type:u,data:s}))}function be(){B(),!(!l&&!h)&&(E=!1,v=setInterval(()=>{if(!(!d||!(l||h))){if(E){E=!1,kt();return}E=!0,he("ping",{})}},gt))}function B(){v&&(clearInterval(v),v=null)}function kt(){let u=i;if(M++,d=!1,m=!1,B(),u)try{u.removeEventListener("message",ve),u.close()}catch{}i=null,W("reconnecting",{attempt:a+1}),ae(!1),ce(),a++,X()}function ht(){for(let[u,s]of D)S(s.type,{...s.params,subId:u}).catch(f=>console.error("[resubscribe]",f))}let D=new Map;function bt(){for(;se.length>0&&i?.readyState===WebSocket.OPEN;){let u=se.shift(),s=b.get(u);s&&(i.send(s.serialized),s.timeoutMs!==null&&(s.timeout=setTimeout(()=>{b.delete(u),s.reject(new Error(`Timeout: retry ${u}`))},s.timeoutMs)))}}function vt(){for(;ie.length>0&&i?.readyState===WebSocket.OPEN;)i.send(ie.shift());bt(),e.buildId&&ke("buildId",{}).then(u=>{u!==e.buildId&&typeof window<"u"&&window.dispatchEvent(new CustomEvent("version-mismatch"))}).catch(()=>{}),y&&(ht(),y=!1)}function ue(u,s){typeof window<"u"&&window.dispatchEvent(new CustomEvent(u,{detail:s}))}function ve(u){E=!1;let s=JSON.parse(u.data,e.messageReviver);switch(s.type){case"pong":return;case"ready":g=!0,vt();return;case"authFailed":ue("auth-failed",{});return;case"track":s.subId&&I.get(s.subId)?.(s.data);return;case"frame":s.subId&&z.get(s.subId)?.(s.data);return;case"response":if(s.id){let f=b.get(s.id);f&&(clearTimeout(f.timeout),b.delete(s.id),f.resolve(s.data??s.result))}return;case"pushNotification":ue("push-notification-received",s.data);return;case"server-draining":ue("server-draining",s.data);return;default:{if(s.id&&s.type==="error"){let p=b.get(s.id);p&&(clearTimeout(p.timeout),b.delete(s.id),p.reject(new Error(s.error??"Unknown error")));return}if(s.id){let p=b.get(s.id);if(p){clearTimeout(p.timeout),b.delete(s.id),p.resolve(s.data??s.result);return}}e.onCustomMessage?.(s);let f=c.get(s.type);if(f)for(let p of f)p(s.data)}}}function S(u,s,f=6e4,p=!1){return new Promise((w,R)=>{let T=o(),P=JSON.stringify({id:T,type:u,payload:s}),A=f===null?null:setTimeout(()=>{b.delete(T),R(new Error(`Timeout: ${u}`))},f);b.set(T,{resolve:w,reject:R,timeout:A??setTimeout(()=>{},0),serialized:P,retry:p,timeoutMs:f}),V(P)})}function Se(u){if(u!==l)if(l=u,u)d?be():(a=0,X());else{if(h)return;B(),k=!0}}typeof document<"u"&&(l=document.visibilityState==="visible",document.addEventListener("visibilitychange",()=>{Se(document.visibilityState==="visible")}));function X(){if(m)return;m=!0,g=!1;let u=++M,s=new URL(n,typeof window<"u"?window.location.href:void 0);if(e.getUrlParams)for(let[f,p]of Object.entries(e.getUrlParams()))s.searchParams.set(f,p);i=new WebSocket(s.toString()),i.addEventListener("message",ve),i.addEventListener("open",()=>{m=!1;let f=a>0,p=k;if(d=!0,y=f||p,a=0,ne=!1,k=!1,W("connected",{wasReconnect:f,wasIdleReconnect:p}),ge?.(),l&&be(),oe){let w;_!==null&&b.has(_)?w=_:(w=o(),b.set(w,{resolve:()=>{},reject:()=>{},timeout:setTimeout(()=>b.delete(w),3e4),serialized:"",retry:!1,timeoutMs:3e4})),_=null,ye({id:w,type:"auth",payload:{token:oe}})}}),i.addEventListener("close",()=>{if(u!==M)return;if(m=!1,d=!1,B(),!l&&!h){k=!0,W("idle-disconnected"),ae(!0);return}W("reconnecting",{attempt:a+1}),ae(!1);let f=Math.min(pt,te*Math.pow(2,Math.min(a,mt)));ce(),setTimeout(()=>{a++,X()},f)}),i.addEventListener("error",()=>{})}return X(),{connect(u){oe=u;let s=o(),f=new Promise((p,w)=>{b.set(s,{resolve:R=>{let T=R;p({user:T.user,appToken:T.appToken})},reject:w,timeout:setTimeout(()=>{b.delete(s),w(new Error("Auth timeout"))},3e4),serialized:"",retry:!1,timeoutMs:3e4})});return i?.readyState===WebSocket.OPEN?ye({id:s,type:"auth",payload:{token:u}}):_=s,f},request(u,s,f){let p=f?.timeoutMs===void 0?6e4:f.timeoutMs;return S("request",{name:u,input:s},p,f?.retry??!0)},async requestStream(u,s,f,p){let w=await fetch(`/api/${u}`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream"},credentials:"include",body:JSON.stringify({input:s}),...p?.signal?{signal:p.signal}:{}});if(!w.ok||!w.body){let $=await w.json().catch(()=>({}));if($.error)throw new Error($.error);return $.result}let R=w.body.getReader(),T=new TextDecoder("utf-8"),P="",A,Ee=!1;for(;!Ee;){let{value:$,done:St}=await R.read();if(St)break;P+=T.decode($,{stream:!0});let le;for(;(le=P.indexOf(`
2
- `))!==-1;){let Te=P.slice(0,le).replace(/\r$/,"");if(P=P.slice(le+1),!Te.startsWith("data:"))continue;let Re=Te.slice(5).trimStart();if(!Re)continue;let j;try{j=JSON.parse(Re)}catch{continue}if(j.type==="__result__"){A=j.result,Ee=!0;break}if(j.type==="__error__")throw new Error(j.error??`request ${u} failed`);f(j)}}return A},getDoc(u,s){return S("request",{name:"storeGetDoc",input:{collection:u,id:s}}).then(f=>f.item)},getDocs(u,s,f){return S("request",{name:"storeGetDocs",input:{collection:u,filter:s,...f}}).then(p=>p.items)},getQuery(u,s,f){return S("request",{name:"storeGetQuery",input:{collection:u,query:s,...f}}).then(p=>p.items)},trackDoc(u,s,f){let p=o();return I.set(p,f),D.set(p,{type:"trackDoc",params:{collection:u,id:s}}),S("trackDoc",{collection:u,id:s,subId:p}).catch(w=>{console.error("[trackDoc]",w)}),()=>{I.delete(p),D.delete(p),S("unsubscribe",{subId:p}).catch(()=>{})}},trackDocs(u,s,f,p){let w=o();return I.set(w,f),p&&z.set(w,p),D.set(w,{type:"trackDocs",params:{collection:u,keys:s.keys,filter:s.filter,sort:s.sort,limit:s.limit,skip:s.skip}}),S("trackDocs",{collection:u,keys:s.keys,filter:s.filter,subId:w,sort:s.sort,limit:s.limit,skip:s.skip}).catch(R=>{console.error("[trackDocs]",R)}),()=>{I.delete(w),z.delete(w),D.delete(w),S("unsubscribe",{subId:w}).catch(()=>{})}},find(u,s,f){return S("request",{name:"storeGetDocs",input:{collection:u,filter:s,...f}}).then(p=>p.items)},trackQuery(u,s,f){let p=o();return I.set(p,f),D.set(p,{type:"trackQuery",params:{collection:u,keys:s.keys,filter:s.filter,sort:s.sort,limit:s.limit,skip:s.skip}}),S("trackQuery",{collection:u,keys:s.keys,filter:s.filter,subId:p,sort:s.sort,limit:s.limit,skip:s.skip}).catch(w=>{console.error("[trackQuery]",w)}),()=>{I.delete(p),D.delete(p),S("unsubscribe",{subId:p}).catch(()=>{})}},async uploadFile(u,s){let{uploadUrl:f,resultUrl:p}=await S("request",{name:"uploadUrl",input:{key:s,contentType:u.type}}),w=await fetch(f,{method:"PUT",body:u,headers:{"Content-Type":u.type}});if(!w.ok)throw new Error(`Upload failed: ${w.status} ${w.statusText}`);return p},emit:he,send:ke,on(u,s){let f=c.get(u);return f||(f=new Set,c.set(u,f)),f.add(s),()=>{f.delete(s),f.size===0&&c.delete(u)}},waitForConnection(u=3e4){return d?Promise.resolve():new Promise((s,f)=>{let p=setTimeout(()=>f(new Error("Connection timeout")),u);re?.then(()=>{clearTimeout(p),s()}).catch(w=>{clearTimeout(p),f(w instanceof Error?w:new Error(String(w)))})})},get connectionState(){return x},setFocused(u){Se(u)},disconnect(){wt("Disconnected"),B(),i?.close(),i=null}}}var dn=new TextEncoder;function K(e){let t=/a=fingerprint:(\S+)\s+([0-9A-Fa-f:]+)/.exec(e||"");return t?`${t[1].toLowerCase()} ${t[2].toUpperCase()}`:null}function xe(e){return e??{}}function Ce(e){let t=e.rtcFactory??(g=>new RTCPeerConnection(g)),n=new Map,r=new Set,o=[];async function c(g){let a=String(g.from??"");if(!a)return;let y=String(g.sdp??""),k=String(g.origin??"");if(e.signer&&!await e.signer.verify("client",K(y)??"",String(g.fpTag??""))){e.socket.emit("rtc:error",{to:a,reason:"fingerprint-auth-failed"});return}try{n.get(a)?.pc.close()}catch{}let l=t({iceServers:e.iceServers??[]}),h={pc:l,dc:null,origin:k};n.set(a,h),l.onicecandidate=x=>{x.candidate&&e.socket.emit("rtc:ice",{to:a,candidate:x.candidate.toJSON()})},l.ondatachannel=x=>{h.dc=x.channel,x.channel.onmessage=te=>{d(h,x.channel,te.data)}},await l.setRemoteDescription({type:"offer",sdp:y});let v=await l.createAnswer();await l.setLocalDescription(v);let E=l.localDescription?.sdp??v.sdp??"",M=e.signer?await e.signer.sign("host",K(E)??""):void 0;e.socket.emit("rtc:answer",{to:a,sdp:E,fpTag:M})}async function i(g){let a=n.get(String(g.from??""));if(a)try{await a.pc.addIceCandidate(g.candidate)}catch{}}async function d(g,a,y){let k;try{k=JSON.parse(typeof y=="string"?y:new TextDecoder().decode(y))}catch{return}if(k.t==="req"&&k.id!==void 0)try{let l=await e.onInvoke(String(k.channel),k.payload,g.origin);m(a,{t:"res",id:k.id,ok:!0,result:l})}catch(l){m(a,{t:"res",id:k.id,ok:!1,error:String(l?.message??l)})}else if(k.t==="sub"&&k.id!==void 0)r.add({dc:a,event:String(k.channel??""),id:k.id}),m(a,{t:"res",id:k.id,ok:!0,result:{snapshot:null}});else if(k.t==="unsub"&&k.id!==void 0)for(let l of[...r])l.dc===a&&l.id===k.id&&r.delete(l)}function m(g,a){try{g.readyState==="open"&&g.send(JSON.stringify(a))}catch{}}return o.push(e.socket.on("rtc:offer",g=>{c(xe(g))})),o.push(e.socket.on("rtc:ice",g=>{i(xe(g))})),{stop(){for(let g of o)try{g()}catch{}for(let g of n.values())try{g.pc.close()}catch{}n.clear(),r.clear()},broadcast(g,a){for(let y of r)y.event===g&&m(y.dc,{t:"evt",event:g,data:a})},peerCount:()=>n.size}}function Ie(e){return{sign:async(t,n)=>(await e.invoke("proxy.signFingerprint",{role:t,fingerprint:n})).tag,verify:async(t,n,r)=>(await e.invoke("proxy.verifyFingerprint",{role:t,fingerprint:n,tag:r})).ok}}var F=class{constructor(t){this.cap=t}cap;items=[];push(t){this.items.push(t),this.items.length>this.cap&&this.items.splice(0,this.items.length-this.cap)}since(t,n){let r=0,o=this.items.length;for(;r<o;){let c=r+o>>>1;n(this.items[c])<t?r=c+1:o=c}return this.items.slice(r)}all(){return this.items.slice()}clear(){this.items=[]}size(){return this.items.length}};var J=class{seq=0;byId=new Map;put(t){let n=`o${++this.seq}`;return this.byId.set(n,t),n}get(t){return this.byId.get(t)}clear(){this.byId.clear()}};function Tt(e){return typeof Node<"u"&&typeof e=="object"&&e!==null&&e instanceof Node}function H(e,t){return e.length>t?`${e.slice(0,t)}\u2026`:e}function Ne(e){return Object.getPrototypeOf(e)?.constructor?.name}function C(e,t){switch(typeof e){case"undefined":return{type:"undefined"};case"boolean":return{type:"boolean",value:e};case"bigint":return{type:"bigint",value:`${e}n`,preview:`${e}n`};case"symbol":return{type:"symbol",value:String(e),preview:String(e)};case"string":return{type:"string",value:H(e,1e3)};case"number":return Number.isFinite(e)?{type:"number",value:e}:{type:"number",value:String(e),preview:String(e)};case"function":return{type:"function",className:"Function",preview:`\u0192 ${e.name||"(anonymous)"}()`};case"object":break;default:return{type:"object",preview:String(e)}}if(e===null)return{type:"null"};let n=e;if(Tt(e))return{type:"node",className:e.nodeName??"Node",preview:xt(e),nodeId:t.nodeIdFor?.(e)};if(e instanceof Date)return{type:"date",className:"Date",preview:It(e)};if(e instanceof RegExp)return{type:"regexp",className:"RegExp",preview:String(e)};if(e instanceof Error)return{type:"error",className:e.name||"Error",preview:H(`${e.name}: ${e.message}`,100),objectId:t.registry.put(e)};if(Ct(e))return{type:"promise",className:"Promise",preview:"Promise",objectId:t.registry.put(e)};if(e instanceof Map)return{type:"map",className:"Map",size:e.size,objectId:t.registry.put(e),preview:`Map(${e.size})`,entries:Oe(e,t)};if(e instanceof Set)return{type:"set",className:"Set",size:e.size,objectId:t.registry.put(e),preview:`Set(${e.size})`,entries:Ae(e,t)};if(Array.isArray(e))return{type:"array",className:"Array",size:e.length,objectId:t.registry.put(e),preview:`Array(${e.length})`,entries:De(e,t)};let r=Object.keys(n);return{type:"object",className:Ne(n)??"Object",size:r.length,objectId:t.registry.put(n),preview:Rt(n,r),entries:de(n,r,t)}}function Me(e,t){if(e instanceof Map)return Oe(e,t,1/0).map(n=>n.value);if(e instanceof Set)return Ae(e,t,1/0).map(n=>n.value);if(Array.isArray(e))return De(e,t,1/0).map(n=>n.value);if(e instanceof Error)return de({name:e.name,message:e.message,stack:e.stack},["name","message","stack"],t,1/0).map(n=>n.value);if(typeof e=="object"&&e!==null){let n=Object.keys(e);return de(e,n,t,1/0).map(r=>r.value)}return[]}function De(e,t,n=5){let r=[];for(let o=0;o<e.length&&o<n;o++)r.push({key:String(o),value:C(e[o],t)});return r}function de(e,t,n,r=5){let o=[];for(let c=0;c<t.length&&c<r;c++){let i=t[c],d;try{d=e[i]}catch{d="(getter threw)"}o.push({key:i,value:C(d,n)})}return o}function Oe(e,t,n=5){let r=[],o=0;for(let[c,i]of e){if(o++>=n)break;r.push({key:C(c,t),value:C(i,t)})}return r}function Ae(e,t,n=5){let r=[],o=0;for(let c of e){if(o++>=n)break;r.push({value:C(c,t)})}return r}function Rt(e,t){let n=t.slice(0,5).map(o=>{let c;try{c=e[o]}catch{c="\u2026"}return`${o}: ${Pt(c)}`}),r=t.length>5?", \u2026":"";return H(`{${n.join(", ")}${r}}`,100)}function Pt(e){let t=typeof e;return t==="string"?`"${H(e,20)}"`:t==="object"&&e!==null?Array.isArray(e)?`Array(${e.length})`:Ne(e)??"Object":String(e)}function xt(e){let t=e;if(t.nodeType===1){let n=(t.nodeName??"").toLowerCase(),r=t.id?`#${t.id}`:"",o=typeof t.className=="string"&&t.className?`.${t.className.trim().split(/\s+/).join(".")}`:"";return H(`<${n}${r}${o}>`,100)}return t.nodeName??"Node"}function Ct(e){return typeof e?.then=="function"}function It(e){try{return e.toISOString()}catch{return"Invalid Date"}}var je=["log","info","warn","error","debug"];function Le(e){if(typeof console>"u")return()=>{};let t=0,n={};for(let i of je){let d=console[i];typeof d=="function"&&(n[i]=d,console[i]=(...m)=>{try{c(i,m)}catch{}d.apply(console,m)})}let r=i=>{c("error",[i.message],{stack:O(i.error?.stack),source:{url:i.filename||"",line:i.lineno||0,col:i.colno||0}})},o=i=>{let d=i.reason;c("error",[`Unhandled rejection: ${d?.message??String(i.reason)}`],{stack:O(d?.stack)})};typeof window<"u"&&(window.addEventListener("error",r),window.addEventListener("unhandledrejection",o));function c(i,d,m){let g=d.map(k=>C(k,{registry:e.registry,nodeIdFor:e.nodeIdFor})),a=m?.stack??O(new Error().stack,1),y={seq:++t,ts:e.now(),level:i,args:g,text:Nt(d),stack:a.length?a:void 0,source:m?.source??a[0]?{url:a[0].url,line:a[0].line,col:a[0].col}:void 0};e.buffer.push(y),e.onEntry?.(y)}return()=>{for(let i of je){let d=n[i];d&&(console[i]=d)}typeof window<"u"&&(window.removeEventListener("error",r),window.removeEventListener("unhandledrejection",o))}}function Nt(e){return e.map(t=>{if(typeof t=="string")return t;if(t instanceof Error)return`${t.name}: ${t.message}`;try{return JSON.stringify(t)}catch{return String(t)}}).join(" ").slice(0,2e3)}function O(e,t=0){if(!e)return[];let n=[],r=e.split(`
3
- `);for(let o of r){let c=o.trim(),i=/^at\s+(.*?)\s+\((.*?):(\d+):(\d+)\)$/.exec(c)||/^at\s+(.*?):(\d+):(\d+)$/.exec(c);if(i){i.length===5?n.push({functionName:i[1],url:i[2],line:+i[3],col:+i[4]}):n.push({functionName:"(anonymous)",url:i[1],line:+i[2],col:+i[3]});continue}i=/^(.*?)@(.*?):(\d+):(\d+)$/.exec(c),i&&n.push({functionName:i[1]||"(anonymous)",url:i[2],line:+i[3],col:+i[4]})}return n.slice(t)}function $e(e,t,n=Date.now){let r=t!=null&&t>0?t:40,o=typeof document<"u"&&document.documentElement?fe(document.documentElement,e,r,0):At();return{documentUrl:typeof location<"u"?location.href:"",capturedAt:n(),root:o}}function fe(e,t,n,r){let o={nodeId:t.idFor(e),nodeType:e.nodeType,nodeName:e.nodeName};if(e.nodeType===Node.TEXT_NODE||e.nodeType===Node.COMMENT_NODE){let a=(e.textContent??"").trim();return a&&(o.textContent=a.slice(0,200)),o}if(e.nodeType!==Node.ELEMENT_NODE)return o;let c=e;if(o.attributes=Dt(c),o.rect=Ot(c),r>=n)return o;let i=c.shadowRoot;i&&(o.shadowRoots=Array.from(i.childNodes).filter(Be).map(a=>fe(a,t,n,r+1)));let d=[],m=_e(c,"before");m&&d.push(m);for(let a of Array.from(c.childNodes))Be(a)&&d.push(fe(a,t,n,r+1));let g=_e(c,"after");return g&&d.push(g),d.length&&(o.children=d),o}function _e(e,t){if(typeof getComputedStyle>"u")return;let n;try{n=getComputedStyle(e,`::${t}`).content}catch{return}if(!(!n||n==="none"||n==="normal"))return{nodeId:`${Mt(e)}::${t}`,nodeType:1,nodeName:`::${t}`,pseudo:t,textContent:n}}function Mt(e){return e.__inspectPseudoBase??e.tagName}function Be(e){return e.nodeType===Node.TEXT_NODE?!!(e.textContent??"").trim():e.nodeType===Node.ELEMENT_NODE||e.nodeType===Node.COMMENT_NODE}function Dt(e){let t={};for(let n of Array.from(e.attributes))t[n.name]=n.value;return t}function Ot(e){let t=e.getBoundingClientRect();return{x:t.x,y:t.y,w:t.width,h:t.height}}function At(){return{nodeId:"n0",nodeType:9,nodeName:"#document"}}function Fe(e,t){let n=jt(e,t);if(!n)throw new Error(`inspect.element: node not found (${t.nodeId??t.selector??"?"})`);let r=getComputedStyle(n),o=Ut(n);return{nodeId:e.idFor(n),tag:n.tagName.toLowerCase(),attributes:qt(n),computedStyles:Lt(r),matchedRules:_t(n),boxModel:$t(n,r,o),eventListeners:Ft(n),accessibility:Ht(n),rect:o}}function jt(e,t){if(t.nodeId){let n=e.get(t.nodeId);return n?.nodeType===1?n:null}return t.selector&&typeof document<"u"?document.querySelector(t.selector):null}function Lt(e){let t={};for(let n=0;n<e.length;n++){let r=e.item(n);t[r]=e.getPropertyValue(r)}return t}function _t(e){let t=[];if(typeof document>"u")return t;for(let n of Array.from(document.styleSheets)){let r;try{r=n.cssRules}catch{continue}let o=n.href??void 0;for(let c of Array.from(r)){if(!(c instanceof CSSStyleRule))continue;let i=!1;try{i=e.matches(c.selectorText)}catch{i=!1}i&&t.push({selector:c.selectorText,source:o?{url:o,line:0,col:0}:void 0,props:Bt(c.style)})}}return t}function Bt(e){let t={};for(let n=0;n<e.length;n++){let r=e.item(n);t[r]=e.getPropertyValue(r)}return t}function $t(e,t,n){let r=(o,c)=>({top:Q(t.getPropertyValue(`${o}-top${c}`)),right:Q(t.getPropertyValue(`${o}-right${c}`)),bottom:Q(t.getPropertyValue(`${o}-bottom${c}`)),left:Q(t.getPropertyValue(`${o}-left${c}`))});return{content:n,padding:r("padding",""),border:r("border","-width"),margin:r("margin","")}}function Ft(e){let n=(typeof window<"u"?window:{}).__inspectGetEventListeners;if(!n)return[];try{let r=n(e),o=[];for(let[c,i]of Object.entries(r))for(let d of i)o.push({type:c,useCapture:d.useCapture,passive:d.passive});return o}catch{return[]}}function Ht(e){let t={};for(let o of Array.from(e.attributes))o.name.startsWith("aria-")&&(t[o.name]=o.value);let n=e.getAttribute("role")??void 0,r=e.getAttribute("aria-label")??e.title??(e.textContent??"").trim().slice(0,80)??void 0;return{role:n,name:r||void 0,properties:t}}function qt(e){let t={};for(let n of Array.from(e.attributes))t[n.name]=n.value;return t}function Ut(e){let t=e.getBoundingClientRect();return{x:t.x,y:t.y,w:t.width,h:t.height}}function Q(e){let t=parseFloat(e);return Number.isFinite(t)?t:0}async function He(e,t,n){let r=t.now();try{let o=zt(e,n?.replMode?{$0:t.getPicked(),$_:t.getLast()}:{});return n?.awaitPromise&&Wt(o)&&(o=await o),t.setLast(o),{ok:!0,value:C(o,{registry:t.registry,nodeIdFor:t.nodeIdFor}),tookMs:t.now()-r}}catch(o){let c=o;return{ok:!1,exception:{text:`${c?.name??"Error"}: ${c?.message??String(o)}`,stack:O(c?.stack)},tookMs:t.now()-r}}}function zt(e,t){let n=Object.keys(t);if(n.length===0)return(0,eval)(e);let r=new Function(...n,`return (${e});`);try{return r(...n.map(o=>t[o]))}catch(o){if(o instanceof SyntaxError)return new Function(...n,e)(...n.map(i=>t[i]));throw o}}function Wt(e){return typeof e?.then=="function"}var G=64*1024;function We(e){if(typeof window>"u")return()=>{};let t=0,n=()=>`r${++t}`,r=window.fetch?.bind(window);r&&(window.fetch=async(m,g)=>{let a=e.now(),y=(g?.method||(m instanceof Request?m.method:"GET")).toUpperCase(),k=m instanceof Request?m.url:String(m),l={id:n(),ts:a,method:y,url:k,resourceType:"fetch",requestHeaders:Ue(g?.headers??(m instanceof Request?m.headers:void 0)),requestBody:ze(g?.body),timing:{startMs:a,durationMs:0}};try{let h=await r(m,g);return l.status=h.status,l.responseHeaders=Ue(h.headers),l.timing.durationMs=e.now()-a,l.fromCache=h.fromCache,await Kt(h,l),d(l),h}catch(h){throw l.failed=!0,l.timing.durationMs=e.now()-a,l.responseBody={kind:"text",data:String(h?.message??h)},d(l),h}});let o=window.XMLHttpRequest,c=o?.prototype.open,i=o?.prototype.send;o&&c&&i&&(o.prototype.open=function(g,a,...y){return this.__inspect={method:g.toUpperCase(),url:a,start:0},c.apply(this,[g,a,...y])},o.prototype.send=function(g){let a=this.__inspect;return a&&(a.start=e.now(),this.addEventListener("loadend",()=>{let y={id:n(),ts:a.start,method:a.method,url:a.url,status:this.status,resourceType:"xhr",requestHeaders:{},responseHeaders:Xt(this.getAllResponseHeaders()),requestBody:ze(g),responseBody:Jt(this),timing:{startMs:a.start,durationMs:e.now()-a.start},failed:this.status===0};d(y)})),i.apply(this,[g])});function d(m){e.buffer.push(m),e.onEntry?.(m)}return()=>{r&&(window.fetch=r),o&&c&&(o.prototype.open=c),o&&i&&(o.prototype.send=i)}}function qe(e){return e.responseStatus||void 0}function Ve(){if(typeof performance>"u"||!performance.getEntriesByType)return[];let e=performance.timeOrigin??0,t=[],n=performance.getEntriesByType("navigation")[0];n&&t.push({id:"nav",ts:e+n.startTime,method:"GET",url:n.name||(typeof location<"u"?location.href:""),status:qe(n),resourceType:"document",requestHeaders:{},timing:{startMs:e+n.startTime,durationMs:n.duration,ttfbMs:n.responseStart-n.startTime},sizeBytes:n.transferSize||void 0});for(let r of performance.getEntriesByType("resource"))r.initiatorType==="fetch"||r.initiatorType==="xmlhttprequest"||t.push({id:`res:${Math.round(r.startTime)}:${r.name}`,ts:e+r.startTime,method:"GET",url:r.name,status:qe(r),resourceType:Vt(r.initiatorType),requestHeaders:{},timing:{startMs:e+r.startTime,durationMs:r.duration},sizeBytes:r.transferSize||r.decodedBodySize||void 0,fromCache:r.transferSize===0&&r.decodedBodySize>0});return t}function Vt(e){switch(e){case"img":case"image":return"img";case"css":case"link":return"css";case"script":return"script";case"font":return"font";default:return e||"other"}}function Ue(e){let t={};if(!e)return t;if(typeof Headers<"u"&&e instanceof Headers)e.forEach((n,r)=>t[r]=n);else if(Array.isArray(e))for(let[n,r]of e)t[n]=r;else Object.assign(t,e);return t}function Xt(e){let t={};for(let n of e.split(`\r
4
- `)){let r=n.indexOf(":");r>0&&(t[n.slice(0,r).trim().toLowerCase()]=n.slice(r+1).trim())}return t}function ze(e){if(e!=null)return typeof e=="string"?e.slice(0,G):typeof URLSearchParams<"u"&&e instanceof URLSearchParams?e.toString().slice(0,G):"(binary)"}async function Kt(e,t){let n=e.headers.get("content-type")||"";if(!/json|text|javascript|xml|html|csv/i.test(n)){t.responseBody={kind:"omitted"};return}try{let r=await e.clone().text();t.sizeBytes=r.length;let o=/json/i.test(n)?"json":"text";t.responseBody={kind:o,data:r.slice(0,G)}}catch{t.responseBody={kind:"omitted"}}}function Jt(e){try{if(e.responseType===""||e.responseType==="text"){let t=e.responseText||"",n=e.getResponseHeader("content-type")||"";return{kind:/json/i.test(n)?"json":"text",data:t.slice(0,G)}}}catch{}return{kind:"omitted"}}var Y=class{seq=0;byId=new Map;idOf=new WeakMap;idFor(t){let n=this.idOf.get(t);if(n)return this.byId.set(n,t),n;let r=`n${++this.seq}`;return this.idOf.set(t,r),this.byId.set(r,t),r}get(t){return this.byId.get(t)}clear(){this.byId.clear()}};function Z(e){let t=e.getAttribute?.("data-id");if(t)return`[data-id=${t}]`;let n=e.getAttribute?.("role"),r=e.tagName.toLowerCase();return e.id?`${r}#${e.id}`:n?`${r}[role=${n}]`:r}var Xe="__ugly_inspect_overlay__";function Ke(e){if(typeof document>"u")return{setEnabled:()=>{},highlight:()=>{},destroy:()=>{}};let t=!1,n=null;function r(){if(n)return n;let a=document.createElement("div");return a.id=Xe,Object.assign(a.style,{position:"fixed",pointerEvents:"none",zIndex:"2147483647",background:"rgba(64,128,255,0.28)",border:"1px solid rgba(64,128,255,0.9)",boxSizing:"border-box",top:"0",left:"0",display:"none"}),document.documentElement.appendChild(a),n=a,a}function o(a){let y=r();if(!a){y.style.display="none";return}Object.assign(y.style,{display:"block",transform:`translate(${a.x}px, ${a.y}px)`,width:`${a.w}px`,height:`${a.h}px`})}let c=a=>{let y=d(a.clientX,a.clientY);y&&o(pe(y))},i=a=>{let y=d(a.clientX,a.clientY);y&&(a.preventDefault(),a.stopPropagation(),e.setPickedNode(y),e.onPicked({nodeId:e.reg.idFor(y),selector:Z(y),rect:pe(y)}),m(!1))};function d(a,y){n&&(n.style.display="none");let k=document.elementFromPoint(a,y);return k&&k.id!==Xe?k:null}function m(a){a!==t&&(t=a,a?(window.addEventListener("pointermove",c,!0),window.addEventListener("pointerdown",i,!0)):(window.removeEventListener("pointermove",c,!0),window.removeEventListener("pointerdown",i,!0),o(null)))}function g(a){if(!a){o(null);return}let y=e.reg.get(a);y?.nodeType===1&&o(pe(y))}return{setEnabled:m,highlight:g,destroy:()=>{m(!1),n?.remove(),n=null}}}function pe(e){let t=e.getBoundingClientRect();return{x:t.x,y:t.y,w:t.width,h:t.height}}var Ge=4;async function Ye(e,t){let n=t(),r=[];await new Promise(c=>{let i=()=>{r.push(Qt()),t()-n>=e?c():Je(i)};Je(i)});let o=t();return{startTime:n,endTime:o,durationMs:o-n,sampleCount:r.length,precise:!1,root:Gt(r)}}function Je(e){typeof setTimeout<"u"?setTimeout(e,Ge):e()}function Qt(){return O(new Error().stack,1).filter(t=>!/profile\.(js|ts)/.test(t.url)).map(t=>({url:t.url,line:t.line,col:t.col,functionName:t.functionName})).reverse()}function Gt(e){let t=0,n=Qe(t++,"(root)");for(let r of e){let o=n;o.hitCount++;for(let c of r){let i=c,d=`${i.functionName??"(anonymous)"}@${i.url}:${i.line}`,m=o.childMap.get(d);m||(m=Qe(t++,i.functionName??"(anonymous)",{url:i.url,line:i.line,col:i.col}),o.childMap.set(d,m),o.children.push(m)),m.hitCount++,o=m}}return Ze(n,e.length),et(n)}function Qe(e,t,n){return{id:e,functionName:t,source:n,selfTimeMs:0,totalTimeMs:0,hitCount:0,children:[],childMap:new Map}}function Ze(e,t){let n=0;for(let r of e.children)n+=Ze(r,t);return e.totalTimeMs=e.hitCount*Ge,e.selfTimeMs=Math.max(0,e.totalTimeMs-n),e.totalTimeMs}function et(e){return{id:e.id,functionName:e.functionName,source:e.source,selfTimeMs:e.selfTimeMs,totalTimeMs:e.totalTimeMs,hitCount:e.hitCount,children:e.children.map(t=>et(t))}}function nt(e,t,n){if(e==="cookie"){document.cookie=`${encodeURIComponent(t)}=${encodeURIComponent(n)}; path=/`;return}ee(()=>e==="session"?sessionStorage:localStorage)?.setItem(t,n)}function rt(e,t){if(e==="cookie"){document.cookie=`${encodeURIComponent(t)}=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT`;return}ee(()=>e==="session"?sessionStorage:localStorage)?.removeItem(t)}async function ot(){return{localStorage:tt(ee(()=>localStorage)),sessionStorage:tt(ee(()=>sessionStorage)),cookies:Yt(),indexedDB:await Zt()}}function ee(e){try{return e()}catch{return null}}function tt(e){let t={};if(!e)return t;for(let n=0;n<e.length;n++){let r=e.key(n);r!=null&&(t[r]=e.getItem(r)??"")}return t}function Yt(){if(typeof document>"u"||!document.cookie)return[];let e=typeof location<"u"?location.hostname:"";return document.cookie.split("; ").filter(Boolean).map(t=>{let n=t.indexOf("="),r=n>=0?t.slice(0,n):t,o=n>=0?t.slice(n+1):"";return{name:r,value:o,domain:e,path:"/"}})}async function Zt(){if(typeof indexedDB>"u"||typeof indexedDB.databases!="function")return[];try{let e=await indexedDB.databases(),t=[];for(let n of e)n.name&&t.push({name:n.name,stores:await en(n.name)});return t}catch{return[]}}function en(e){return new Promise(t=>{try{let n=indexedDB.open(e);n.onsuccess=()=>{let r=n.result,o=Array.from(r.objectStoreNames);r.close(),t(o)},n.onerror=()=>t([])}catch{t([])}})}var tn=40;function st(e){let t={longTasks:[]},n=[];if(typeof PerformanceObserver>"u")return{read:()=>({...t,navigation:it()}),stop:()=>{}};r("largest-contentful-paint",o=>{let c=o[o.length-1];if(!c)return;let i=c.element;t.lcp={valueMs:c.startTime,element:i?{nodeId:e.nodeIdFor(i),selector:Z(i),rect:rn(i)}:void 0}}),r("paint",o=>{for(let c of o)c.name==="first-contentful-paint"&&(t.fcp=c.startTime)}),r("layout-shift",o=>{let c=t.cls??0;for(let i of o)i.hadRecentInput||(c+=i.value);t.cls=c}),r("event",o=>{let c=t.inp??0;for(let i of o){let d=i.duration;d>c&&(c=d)}t.inp=c},{durationThreshold:40}),r("longtask",o=>{for(let c of o)t.longTasks.push({ts:e.now(),durationMs:c.duration});t.longTasks.length>200&&t.longTasks.splice(0,t.longTasks.length-200)});function r(o,c,i){try{let d=new PerformanceObserver(m=>c(m.getEntries()));d.observe({type:o,buffered:!0,...i??{}}),n.push(d)}catch{}}return{read:()=>{let o=it(),{resources:c,resourceSummary:i}=nn(o?.domInteractiveMs??t.fcp);return{...t,longTasks:t.longTasks.slice(),navigation:o,ttfb:t.ttfb??o?.ttfbMs,resources:c,resourceSummary:i}},stop:()=>n.forEach(o=>o.disconnect())}}function nn(e){if(typeof performance>"u"||!performance.getEntriesByType)return{};let t=performance.getEntriesByType("resource");if(!t.length)return{};let n=0,r=0;return{resources:t.map(i=>{n+=i.transferSize||0,r+=i.duration;let d=i.requestStart>0?Math.max(0,i.requestStart-i.startTime):void 0,m=e!=null&&i.responseEnd<=e&&(i.initiatorType==="link"||i.initiatorType==="css"||i.initiatorType==="script");return{name:i.name,initiatorType:i.initiatorType||"other",startMs:i.startTime,durationMs:i.duration,blockingMs:d,transferSizeBytes:i.transferSize||void 0,decodedSizeBytes:i.decodedBodySize||void 0,fromCache:i.transferSize===0&&i.decodedBodySize>0,renderBlocking:m}}).sort((i,d)=>d.durationMs-i.durationMs).slice(0,tn),resourceSummary:{count:t.length,transferBytes:n,durationMs:r}}}function it(){if(typeof performance>"u"||!performance.getEntriesByType)return;let e=performance.getEntriesByType("navigation")[0];if(e)return{ttfbMs:e.responseStart,domContentLoadedMs:e.domContentLoadedEventEnd,loadEventMs:e.loadEventEnd,domInteractiveMs:e.domInteractive,transferSizeBytes:e.transferSize}}function rn(e){let t=e.getBoundingClientRect();return{x:t.x,y:t.y,w:t.width,h:t.height}}var ct=1e3;function L(){return typeof performance<"u"&&performance.now?performance.timeOrigin+performance.now():Date.now()}function on(e={}){let t=new J,n=new Y,r=l=>n.idFor(l),o=new F(ct),c=new F(ct),i=null,d,m=Le({buffer:o,registry:t,nodeIdFor:r,onEntry:l=>e.onConsole?.(l),now:L}),g=We({buffer:c,onEntry:l=>e.onNetwork?.(l),now:L}),a=st({nodeIdFor:r,now:L}),y=Ke({reg:n,onPicked:l=>e.onPicked?.(l),setPickedNode:l=>i=l});return{meta(){return{url:typeof location<"u"?location.href:"",title:typeof document<"u"?document.title:"",isUglyApp:typeof window<"u"&&"__uglyInspect"in window,viewport:{w:typeof window<"u"?window.innerWidth:0,h:typeof window<"u"?window.innerHeight:0,dpr:typeof window<"u"&&window.devicePixelRatio||1}}},consoleBuffer:l=>l==null?o.all():o.all().filter(h=>h.seq>l),networkBuffer:l=>{let v=[...c.all(),...Ve()].sort((E,M)=>E.ts-M.ts);return l==null?v:v.filter(E=>E.ts>l)},evaluate:(l,h)=>He(l,{registry:t,nodeIdFor:r,now:L,getPicked:()=>i,getLast:()=>d,setLast:v=>d=v},h),expand:l=>({entries:Me(t.get(l),{registry:t,nodeIdFor:r})}),domCapture:l=>$e(n,l,L),element:l=>Fe(n,l),highlight:l=>y.highlight(l),setPicker:l=>y.setEnabled(l),vitals:()=>a.read(),profile:l=>Ye(l,L),storage:()=>ot(),storageSet:(l,h,v)=>nt(l,h,v),storageRemove:(l,h)=>rt(l,h),reload:l=>{typeof location<"u"&&location.reload()},reset:()=>{t.clear(),n.clear(),o.clear(),c.clear(),i=null,d=void 0},stop:()=>{m(),g(),a.stop(),y.destroy()}}}function at(e){if(typeof window<"u"&&window.__uglyInspectAgent)return window.__uglyInspectAgent;let t=on(e);return typeof window<"u"&&(window.__uglyInspectAgent=t),t}var sn=new Set(["inspect.screenshot","inspect.openTarget"]);function ut(e,t,n){return{id:e,url:n.url,title:n.title,viewport:n.viewport,platform:t,isUglyApp:n.isUglyApp,open:!0}}async function lt(e,t,n={}){switch(t){case"inspect.eval":return e.evaluate(String(n.expression??""),{awaitPromise:n.awaitPromise,replMode:n.replMode});case"inspect.expand":return e.expand(String(n.objectId??""));case"inspect.console.buffer":return{entries:e.consoleBuffer(n.sinceSeq)};case"inspect.network.buffer":return{entries:e.networkBuffer(n.sinceTs)};case"inspect.dom.capture":return e.domCapture(n.maxDepth);case"inspect.element":return e.element({nodeId:n.nodeId,selector:n.selector});case"inspect.dom.highlight":e.highlight(n.nodeId??null);return;case"inspect.picker.set":e.setPicker(!!n.enabled);return;case"inspect.vitals":return e.vitals();case"inspect.profile":return e.profile(Number(n.durationMs??1e3));case"inspect.storage":return e.storage();case"inspect.storage.set":e.storageSet(n.area,String(n.key??""),String(n.value??""));return;case"inspect.storage.remove":e.storageRemove(n.area,String(n.key??""));return;case"inspect.network.reload":e.reload(!!n.ignoreCache);return;case"inspect.network.setCacheDisabled":case"inspect.setThrottle":return;default:throw sn.has(t)?new Error(`inspect: ${t} is host-serviced, not an agent method`):new Error(`inspect: unknown channel ${t}`)}}var q="self";function dt(e){let t=at({onConsole:n=>e.onEvent?.(`inspect.console:${q}`,n),onNetwork:n=>e.onEvent?.(`inspect.network:${q}`,n),onPicked:n=>e.onEvent?.(`inspect.picked:${q}`,n)});return{async dispatch(n,r={}){if(n==="inspect.listTargets")return{targets:[ut(q,e.platform,t.meta())]};if(n==="inspect.screenshot"){if(!e.screenshot)throw new Error("inspect.screenshot: no native capture on this shell");return e.screenshot({...r,targetId:q})}return lt(t,n,r)},stop(){t.stop()}}}function cn(e){return async()=>{let t=await e.invoke("capture.screenshot",void 0),n=typeof window<"u"?window.innerWidth:0,r=typeof window<"u"?window.innerHeight:0,o=typeof window<"u"&&window.devicePixelRatio||1;return{base64:t,width:n,height:r,dpr:o,format:"png"}}}function ft(e){let t=e.platform??e.native?.platform??"web",n=e.signer??(e.native?Ie(e.native):void 0),r=e.screenshot??(e.native?cn(e.native):void 0),o={},c=dt({platform:t,screenshot:r,onEvent:(i,d)=>o.host?.broadcast(i,d)});return o.host=Ce({socket:e.socket,signer:n,iceServers:e.iceServers,rtcFactory:e.rtcFactory,onInvoke:(i,d)=>c.dispatch(i,d??{})}),{stop(){o.host?.stop(),c.stop()},peerCount:()=>o.host?.peerCount()??0}}var U=window,N=U.__uglyInspectBootstrap;if(N&&U.UglyNative&&!U.__uglyInspectHostInstalled){U.__uglyInspectHostInstalled=!0;let e=U.UglyNative,t=Pe({requests:{},messages:{},url:N.wsUrl,getUrlParams:()=>({token:N.token,deviceId:N.deviceId,deviceLabel:N.deviceLabel??N.platform,inspectHost:"true",isHost:"true"})});t.connect(N.token).then(()=>ft({socket:t,native:e,platform:N.platform})).catch(()=>{})}})();
1
+ "use strict";(()=>{function Pe(e){let t=e.url??"/ws",n=t.startsWith("/")?typeof window<"u"?`${window.location.protocol==="https:"?"wss":"ws"}://${window.location.host}${t}`:`ws://localhost:${4321}${t}`:t,r=0;function o(){return String(++r)}let c=new Map,i=null,d=!1,m=!1,g=!1,a=0,y=!1,k=!1,l=e.initialFocus??!0,h=e.keepConnectedWhenUnfocused??!1,v=null,E=!1,M=0,x="connecting",te=1e3,pt=3e4,mt=5,me=1e3,ne=!1,gt=3e4,re=null,ge=null,yt=null,oe=null,_=null,ie=[],se=[],b=new Map,I=new Map,z=new Map;function ce(){re=new Promise((u,s)=>{ge=u,yt=s}),re.catch(()=>{})}ce();function W(u,s){x=u,typeof window<"u"&&window.dispatchEvent(new CustomEvent("ws-connection-state",{detail:{state:u,...s}}))}function wt(u){for(let{reject:s,timeout:f}of b.values())clearTimeout(f),s(new Error(u));b.clear(),I.clear(),z.clear()}function ae(u){for(let[s,f]of b)clearTimeout(f.timeout),f.retry?we(se,s):(b.delete(s),f.reject(new Error(u?"WebSocket disconnected (idle)":"WebSocket disconnected")))}function ye(u){i.send(JSON.stringify(u))}function we(u,s){u.length>=me&&(u.shift(),ne||(console.warn(`[socket] queue exceeded ${me} \u2014 dropping oldest message(s)`),ne=!0)),u.push(s)}function V(u){g&&d&&i?.readyState===WebSocket.OPEN?i.send(u):we(ie,u)}function ke(u,s,f=6e4,p=!0){if(typeof u=="object"&&u!==null){V(JSON.stringify(u));return}return new Promise((w,R)=>{let T=o(),P=JSON.stringify({type:u,id:T,data:s}),A=setTimeout(()=>{b.delete(T),R(new Error(`Request timeout: ${u}`))},f);b.set(T,{resolve:w,reject:R,timeout:A,serialized:P,retry:p,timeoutMs:f}),V(P)})}function he(u,s){V(JSON.stringify({type:u,data:s}))}function be(){B(),!(!l&&!h)&&(E=!1,v=setInterval(()=>{if(!(!d||!(l||h))){if(E){E=!1,kt();return}E=!0,he("ping",{})}},gt))}function B(){v&&(clearInterval(v),v=null)}function kt(){let u=i;if(M++,d=!1,m=!1,B(),u)try{u.removeEventListener("message",ve),u.close()}catch{}i=null,W("reconnecting",{attempt:a+1}),ae(!1),ce(),a++,X()}function ht(){for(let[u,s]of D)S(s.type,{...s.params,subId:u}).catch(f=>console.error("[resubscribe]",f))}let D=new Map;function bt(){for(;se.length>0&&i?.readyState===WebSocket.OPEN;){let u=se.shift(),s=b.get(u);s&&(i.send(s.serialized),s.timeoutMs!==null&&(s.timeout=setTimeout(()=>{b.delete(u),s.reject(new Error(`Timeout: retry ${u}`))},s.timeoutMs)))}}function vt(){for(;ie.length>0&&i?.readyState===WebSocket.OPEN;)i.send(ie.shift());bt(),e.buildId&&ke("buildId",{}).then(u=>{u!==e.buildId&&typeof window<"u"&&window.dispatchEvent(new CustomEvent("version-mismatch"))}).catch(()=>{}),y&&(ht(),y=!1)}function ue(u,s){typeof window<"u"&&window.dispatchEvent(new CustomEvent(u,{detail:s}))}function ve(u){E=!1;let s=JSON.parse(u.data,e.messageReviver);switch(s.type){case"pong":return;case"ready":g=!0,vt();return;case"authFailed":ue("auth-failed",{});return;case"track":s.subId&&I.get(s.subId)?.(s.data);return;case"frame":s.subId&&z.get(s.subId)?.(s.data);return;case"response":if(s.id){let f=b.get(s.id);f&&(clearTimeout(f.timeout),b.delete(s.id),f.resolve(s.data??s.result))}return;case"pushNotification":ue("push-notification-received",s.data);return;case"server-draining":ue("server-draining",s.data);return;default:{if(s.id&&s.type==="error"){let p=b.get(s.id);p&&(clearTimeout(p.timeout),b.delete(s.id),p.reject(new Error(s.error??"Unknown error")));return}if(s.id){let p=b.get(s.id);if(p){clearTimeout(p.timeout),b.delete(s.id),p.resolve(s.data??s.result);return}}e.onCustomMessage?.(s);let f=c.get(s.type);if(f)for(let p of f)p(s.data)}}}function S(u,s,f=6e4,p=!1){return new Promise((w,R)=>{let T=o(),P=JSON.stringify({id:T,type:u,payload:s}),A=f===null?null:setTimeout(()=>{b.delete(T),R(new Error(`Timeout: ${u}`))},f);b.set(T,{resolve:w,reject:R,timeout:A??setTimeout(()=>{},0),serialized:P,retry:p,timeoutMs:f}),V(P)})}function Se(u){if(u!==l)if(l=u,u)d?be():(a=0,X());else{if(h)return;B(),k=!0}}typeof document<"u"&&(l=document.visibilityState==="visible",document.addEventListener("visibilitychange",()=>{Se(document.visibilityState==="visible")}));function X(){if(m)return;m=!0,g=!1;let u=++M,s=new URL(n,typeof window<"u"?window.location.href:void 0);if(e.getUrlParams)for(let[f,p]of Object.entries(e.getUrlParams()))s.searchParams.set(f,p);i=new WebSocket(s.toString()),i.addEventListener("message",ve),i.addEventListener("open",()=>{m=!1;let f=a>0,p=k;if(d=!0,y=f||p,a=0,ne=!1,k=!1,W("connected",{wasReconnect:f,wasIdleReconnect:p}),ge?.(),l&&be(),oe){let w;_!==null&&b.has(_)?w=_:(w=o(),b.set(w,{resolve:()=>{},reject:()=>{},timeout:setTimeout(()=>b.delete(w),3e4),serialized:"",retry:!1,timeoutMs:3e4})),_=null,ye({id:w,type:"auth",payload:{token:oe}})}}),i.addEventListener("close",()=>{if(u!==M)return;if(m=!1,d=!1,B(),!l&&!h){k=!0,W("idle-disconnected"),ae(!0);return}W("reconnecting",{attempt:a+1}),ae(!1);let f=Math.min(pt,te*Math.pow(2,Math.min(a,mt)));ce(),setTimeout(()=>{a++,X()},f)}),i.addEventListener("error",()=>{})}return X(),{connect(u){oe=u;let s=o(),f=new Promise((p,w)=>{b.set(s,{resolve:R=>{let T=R;p({user:T.user,appToken:T.appToken})},reject:w,timeout:setTimeout(()=>{b.delete(s),w(new Error("Auth timeout"))},3e4),serialized:"",retry:!1,timeoutMs:3e4})});return i?.readyState===WebSocket.OPEN?ye({id:s,type:"auth",payload:{token:u}}):_=s,f},request(u,s,f){let p=f?.timeoutMs===void 0?6e4:f.timeoutMs;return S("request",{name:u,input:s},p,f?.retry??!0)},async requestStream(u,s,f,p){let w=await fetch(`/api/${u}`,{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream"},credentials:"include",body:JSON.stringify({input:s}),...p?.signal?{signal:p.signal}:{}});if(!w.ok||!w.body){let F=await w.json().catch(()=>({}));if(F.error)throw new Error(F.error);return F.result}let R=w.body.getReader(),T=new TextDecoder("utf-8"),P="",A,Ee=!1;for(;!Ee;){let{value:F,done:St}=await R.read();if(St)break;P+=T.decode(F,{stream:!0});let le;for(;(le=P.indexOf(`
2
+ `))!==-1;){let Te=P.slice(0,le).replace(/\r$/,"");if(P=P.slice(le+1),!Te.startsWith("data:"))continue;let Re=Te.slice(5).trimStart();if(!Re)continue;let j;try{j=JSON.parse(Re)}catch{continue}if(j.type==="__result__"){A=j.result,Ee=!0;break}if(j.type==="__error__")throw new Error(j.error??`request ${u} failed`);f(j)}}return A},getDoc(u,s){return S("request",{name:"storeGetDoc",input:{collection:u,id:s}}).then(f=>f.item)},getDocs(u,s,f){return S("request",{name:"storeGetDocs",input:{collection:u,filter:s,...f}}).then(p=>p.items)},getQuery(u,s,f){return S("request",{name:"storeGetQuery",input:{collection:u,query:s,...f}}).then(p=>p.items)},trackDoc(u,s,f){let p=o();return I.set(p,f),D.set(p,{type:"trackDoc",params:{collection:u,id:s}}),S("trackDoc",{collection:u,id:s,subId:p}).catch(w=>{console.error("[trackDoc]",w)}),()=>{I.delete(p),D.delete(p),S("unsubscribe",{subId:p}).catch(()=>{})}},trackDocs(u,s,f,p){let w=o();return I.set(w,f),p&&z.set(w,p),D.set(w,{type:"trackDocs",params:{collection:u,keys:s.keys,filter:s.filter,sort:s.sort,limit:s.limit,skip:s.skip}}),S("trackDocs",{collection:u,keys:s.keys,filter:s.filter,subId:w,sort:s.sort,limit:s.limit,skip:s.skip}).catch(R=>{console.error("[trackDocs]",R)}),()=>{I.delete(w),z.delete(w),D.delete(w),S("unsubscribe",{subId:w}).catch(()=>{})}},find(u,s,f){return S("request",{name:"storeGetDocs",input:{collection:u,filter:s,...f}}).then(p=>p.items)},trackQuery(u,s,f){let p=o();return I.set(p,f),D.set(p,{type:"trackQuery",params:{collection:u,keys:s.keys,filter:s.filter,sort:s.sort,limit:s.limit,skip:s.skip}}),S("trackQuery",{collection:u,keys:s.keys,filter:s.filter,subId:p,sort:s.sort,limit:s.limit,skip:s.skip}).catch(w=>{console.error("[trackQuery]",w)}),()=>{I.delete(p),D.delete(p),S("unsubscribe",{subId:p}).catch(()=>{})}},async uploadFile(u,s){let{uploadUrl:f,resultUrl:p}=await S("request",{name:"uploadUrl",input:{key:s,contentType:u.type}}),w=await fetch(f,{method:"PUT",body:u,headers:{"Content-Type":u.type}});if(!w.ok)throw new Error(`Upload failed: ${w.status} ${w.statusText}`);return p},emit:he,send:ke,on(u,s){let f=c.get(u);return f||(f=new Set,c.set(u,f)),f.add(s),()=>{f.delete(s),f.size===0&&c.delete(u)}},waitForConnection(u=3e4){return d?Promise.resolve():new Promise((s,f)=>{let p=setTimeout(()=>f(new Error("Connection timeout")),u);re?.then(()=>{clearTimeout(p),s()}).catch(w=>{clearTimeout(p),f(w instanceof Error?w:new Error(String(w)))})})},get connectionState(){return x},setFocused(u){Se(u)},disconnect(){wt("Disconnected"),B(),i?.close(),i=null}}}var dn=new TextEncoder;function K(e){let t=/a=fingerprint:(\S+)\s+([0-9A-Fa-f:]+)/.exec(e||"");return t?`${t[1].toLowerCase()} ${t[2].toUpperCase()}`:null}function xe(e){return e??{}}function Ce(e){let t=e.rtcFactory??(g=>new RTCPeerConnection(g)),n=new Map,r=new Set,o=[];async function c(g){let a=String(g.from??"");if(!a)return;let y=String(g.sdp??""),k=String(g.origin??"");if(e.signer&&!await e.signer.verify("client",K(y)??"",String(g.fpTag??""))){e.socket.emit("rtc:error",{to:a,reason:"fingerprint-auth-failed"});return}try{n.get(a)?.pc.close()}catch{}let l=t({iceServers:e.iceServers??[]}),h={pc:l,dc:null,origin:k};n.set(a,h),l.onicecandidate=x=>{x.candidate&&e.socket.emit("rtc:ice",{to:a,candidate:x.candidate.toJSON()})},l.ondatachannel=x=>{h.dc=x.channel,x.channel.onmessage=te=>{d(h,x.channel,te.data)}},await l.setRemoteDescription({type:"offer",sdp:y});let v=await l.createAnswer();await l.setLocalDescription(v);let E=l.localDescription?.sdp??v.sdp??"",M=e.signer?await e.signer.sign("host",K(E)??""):void 0;e.socket.emit("rtc:answer",{to:a,sdp:E,fpTag:M})}async function i(g){let a=n.get(String(g.from??""));if(a)try{await a.pc.addIceCandidate(g.candidate)}catch{}}async function d(g,a,y){let k;try{k=JSON.parse(typeof y=="string"?y:new TextDecoder().decode(y))}catch{return}if(k.t==="req"&&k.id!==void 0)try{let l=await e.onInvoke(String(k.channel),k.payload,g.origin);m(a,{t:"res",id:k.id,ok:!0,result:l})}catch(l){m(a,{t:"res",id:k.id,ok:!1,error:String(l?.message??l)})}else if(k.t==="sub"&&k.id!==void 0)r.add({dc:a,event:String(k.channel??""),id:k.id}),m(a,{t:"res",id:k.id,ok:!0,result:{snapshot:null}});else if(k.t==="unsub"&&k.id!==void 0)for(let l of[...r])l.dc===a&&l.id===k.id&&r.delete(l)}function m(g,a){try{g.readyState==="open"&&g.send(JSON.stringify(a))}catch{}}return o.push(e.socket.on("rtc:offer",g=>{c(xe(g))})),o.push(e.socket.on("rtc:ice",g=>{i(xe(g))})),{stop(){for(let g of o)try{g()}catch{}for(let g of n.values())try{g.pc.close()}catch{}n.clear(),r.clear()},broadcast(g,a){for(let y of r)y.event===g&&m(y.dc,{t:"evt",event:g,data:a})},peerCount:()=>n.size}}function Ie(e){return{sign:async(t,n)=>(await e.invoke("proxy.signFingerprint",{role:t,fingerprint:n})).tag,verify:async(t,n,r)=>(await e.invoke("proxy.verifyFingerprint",{role:t,fingerprint:n,tag:r})).ok}}var $=class{constructor(t){this.cap=t}cap;items=[];push(t){this.items.push(t),this.items.length>this.cap&&this.items.splice(0,this.items.length-this.cap)}since(t,n){let r=0,o=this.items.length;for(;r<o;){let c=r+o>>>1;n(this.items[c])<t?r=c+1:o=c}return this.items.slice(r)}all(){return this.items.slice()}clear(){this.items=[]}size(){return this.items.length}};var J=class{seq=0;byId=new Map;put(t){let n=`o${++this.seq}`;return this.byId.set(n,t),n}get(t){return this.byId.get(t)}clear(){this.byId.clear()}};function Tt(e){return typeof Node<"u"&&typeof e=="object"&&e!==null&&e instanceof Node}function H(e,t){return e.length>t?`${e.slice(0,t)}\u2026`:e}function Ne(e){return Object.getPrototypeOf(e)?.constructor?.name}function C(e,t){switch(typeof e){case"undefined":return{type:"undefined"};case"boolean":return{type:"boolean",value:e};case"bigint":return{type:"bigint",value:`${e}n`,preview:`${e}n`};case"symbol":return{type:"symbol",value:String(e),preview:String(e)};case"string":return{type:"string",value:H(e,1e3)};case"number":return Number.isFinite(e)?{type:"number",value:e}:{type:"number",value:String(e),preview:String(e)};case"function":return{type:"function",className:"Function",preview:`\u0192 ${e.name||"(anonymous)"}()`};case"object":break;default:return{type:"object",preview:String(e)}}if(e===null)return{type:"null"};let n=e;if(Tt(e))return{type:"node",className:e.nodeName??"Node",preview:xt(e),nodeId:t.nodeIdFor?.(e)};if(e instanceof Date)return{type:"date",className:"Date",preview:It(e)};if(e instanceof RegExp)return{type:"regexp",className:"RegExp",preview:String(e)};if(e instanceof Error)return{type:"error",className:e.name||"Error",preview:H(`${e.name}: ${e.message}`,100),objectId:t.registry.put(e)};if(Ct(e))return{type:"promise",className:"Promise",preview:"Promise",objectId:t.registry.put(e)};if(e instanceof Map)return{type:"map",className:"Map",size:e.size,objectId:t.registry.put(e),preview:`Map(${e.size})`,entries:Oe(e,t)};if(e instanceof Set)return{type:"set",className:"Set",size:e.size,objectId:t.registry.put(e),preview:`Set(${e.size})`,entries:Ae(e,t)};if(Array.isArray(e))return{type:"array",className:"Array",size:e.length,objectId:t.registry.put(e),preview:`Array(${e.length})`,entries:De(e,t)};let r=Object.keys(n);return{type:"object",className:Ne(n)??"Object",size:r.length,objectId:t.registry.put(n),preview:Rt(n,r),entries:de(n,r,t)}}function Me(e,t){if(e instanceof Map)return Oe(e,t,1/0).map(n=>n.value);if(e instanceof Set)return Ae(e,t,1/0).map(n=>n.value);if(Array.isArray(e))return De(e,t,1/0).map(n=>n.value);if(e instanceof Error)return de({name:e.name,message:e.message,stack:e.stack},["name","message","stack"],t,1/0).map(n=>n.value);if(typeof e=="object"&&e!==null){let n=Object.keys(e);return de(e,n,t,1/0).map(r=>r.value)}return[]}function De(e,t,n=5){let r=[];for(let o=0;o<e.length&&o<n;o++)r.push({key:String(o),value:C(e[o],t)});return r}function de(e,t,n,r=5){let o=[];for(let c=0;c<t.length&&c<r;c++){let i=t[c],d;try{d=e[i]}catch{d="(getter threw)"}o.push({key:i,value:C(d,n)})}return o}function Oe(e,t,n=5){let r=[],o=0;for(let[c,i]of e){if(o++>=n)break;r.push({key:C(c,t),value:C(i,t)})}return r}function Ae(e,t,n=5){let r=[],o=0;for(let c of e){if(o++>=n)break;r.push({value:C(c,t)})}return r}function Rt(e,t){let n=t.slice(0,5).map(o=>{let c;try{c=e[o]}catch{c="\u2026"}return`${o}: ${Pt(c)}`}),r=t.length>5?", \u2026":"";return H(`{${n.join(", ")}${r}}`,100)}function Pt(e){let t=typeof e;return t==="string"?`"${H(e,20)}"`:t==="object"&&e!==null?Array.isArray(e)?`Array(${e.length})`:Ne(e)??"Object":String(e)}function xt(e){let t=e;if(t.nodeType===1){let n=(t.nodeName??"").toLowerCase(),r=t.id?`#${t.id}`:"",o=typeof t.className=="string"&&t.className?`.${t.className.trim().split(/\s+/).join(".")}`:"";return H(`<${n}${r}${o}>`,100)}return t.nodeName??"Node"}function Ct(e){return typeof e?.then=="function"}function It(e){try{return e.toISOString()}catch{return"Invalid Date"}}var je=["log","info","warn","error","debug"];function Le(e){if(typeof console>"u")return()=>{};let t=0,n={};for(let i of je){let d=console[i];typeof d=="function"&&(n[i]=d,console[i]=(...m)=>{try{c(i,m)}catch{}d.apply(console,m)})}let r=i=>{c("error",[i.message],{stack:O(i.error?.stack),source:{url:i.filename||"",line:i.lineno||0,col:i.colno||0}})},o=i=>{let d=i.reason;c("error",[`Unhandled rejection: ${d?.message??String(i.reason)}`],{stack:O(d?.stack)})};typeof window<"u"&&(window.addEventListener("error",r),window.addEventListener("unhandledrejection",o));function c(i,d,m){let g=d.map(k=>C(k,{registry:e.registry,nodeIdFor:e.nodeIdFor})),a=m?.stack??O(new Error().stack,1),y={seq:++t,ts:e.now(),level:i,args:g,text:Nt(d),stack:a.length?a:void 0,source:m?.source??a[0]?{url:a[0].url,line:a[0].line,col:a[0].col}:void 0};e.buffer.push(y),e.onEntry?.(y)}return()=>{for(let i of je){let d=n[i];d&&(console[i]=d)}typeof window<"u"&&(window.removeEventListener("error",r),window.removeEventListener("unhandledrejection",o))}}function Nt(e){return e.map(t=>{if(typeof t=="string")return t;if(t instanceof Error)return`${t.name}: ${t.message}`;try{return JSON.stringify(t)}catch{return String(t)}}).join(" ").slice(0,2e3)}function O(e,t=0){if(!e)return[];let n=[],r=e.split(`
3
+ `);for(let o of r){let c=o.trim(),i=/^at\s+(.*?)\s+\((.*?):(\d+):(\d+)\)$/.exec(c)||/^at\s+(.*?):(\d+):(\d+)$/.exec(c);if(i){i.length===5?n.push({functionName:i[1],url:i[2],line:+i[3],col:+i[4]}):n.push({functionName:"(anonymous)",url:i[1],line:+i[2],col:+i[3]});continue}i=/^(.*?)@(.*?):(\d+):(\d+)$/.exec(c),i&&n.push({functionName:i[1]||"(anonymous)",url:i[2],line:+i[3],col:+i[4]})}return n.slice(t)}function Fe(e,t,n=Date.now){let r=t!=null&&t>0?t:40,o=typeof document<"u"&&document.documentElement?fe(document.documentElement,e,r,0):At();return{documentUrl:typeof location<"u"?location.href:"",capturedAt:n(),root:o}}function fe(e,t,n,r){let o={nodeId:t.idFor(e),nodeType:e.nodeType,nodeName:e.nodeName};if(e.nodeType===Node.TEXT_NODE||e.nodeType===Node.COMMENT_NODE){let a=(e.textContent??"").trim();return a&&(o.textContent=a.slice(0,200)),o}if(e.nodeType!==Node.ELEMENT_NODE)return o;let c=e;if(o.attributes=Dt(c),o.rect=Ot(c),r>=n)return o;let i=c.shadowRoot;i&&(o.shadowRoots=Array.from(i.childNodes).filter(Be).map(a=>fe(a,t,n,r+1)));let d=[],m=_e(c,"before");m&&d.push(m);for(let a of Array.from(c.childNodes))Be(a)&&d.push(fe(a,t,n,r+1));let g=_e(c,"after");return g&&d.push(g),d.length&&(o.children=d),o}function _e(e,t){if(typeof getComputedStyle>"u")return;let n;try{n=getComputedStyle(e,`::${t}`).content}catch{return}if(!(!n||n==="none"||n==="normal"))return{nodeId:`${Mt(e)}::${t}`,nodeType:1,nodeName:`::${t}`,pseudo:t,textContent:n}}function Mt(e){return e.__inspectPseudoBase??e.tagName}function Be(e){return e.nodeType===Node.TEXT_NODE?!!(e.textContent??"").trim():e.nodeType===Node.ELEMENT_NODE||e.nodeType===Node.COMMENT_NODE}function Dt(e){let t={};for(let n of Array.from(e.attributes))t[n.name]=n.value;return t}function Ot(e){let t=e.getBoundingClientRect();return{x:t.x,y:t.y,w:t.width,h:t.height}}function At(){return{nodeId:"n0",nodeType:9,nodeName:"#document"}}function $e(e,t){let n=jt(e,t);if(!n)throw new Error(`inspect.element: node not found (${t.nodeId??t.selector??"?"})`);let r=getComputedStyle(n),o=Ut(n);return{nodeId:e.idFor(n),tag:n.tagName.toLowerCase(),attributes:qt(n),computedStyles:Lt(r),matchedRules:_t(n),boxModel:Ft(n,r,o),eventListeners:$t(n),accessibility:Ht(n),rect:o}}function jt(e,t){if(t.nodeId){let n=e.get(t.nodeId);return n?.nodeType===1?n:null}return t.selector&&typeof document<"u"?document.querySelector(t.selector):null}function Lt(e){let t={};for(let n=0;n<e.length;n++){let r=e.item(n);t[r]=e.getPropertyValue(r)}return t}function _t(e){let t=[];if(typeof document>"u")return t;for(let n of Array.from(document.styleSheets)){let r;try{r=n.cssRules}catch{continue}let o=n.href??void 0;for(let c of Array.from(r)){if(!(c instanceof CSSStyleRule))continue;let i=!1;try{i=e.matches(c.selectorText)}catch{i=!1}i&&t.push({selector:c.selectorText,source:o?{url:o,line:0,col:0}:void 0,props:Bt(c.style)})}}return t}function Bt(e){let t={};for(let n=0;n<e.length;n++){let r=e.item(n);t[r]=e.getPropertyValue(r)}return t}function Ft(e,t,n){let r=(o,c)=>({top:Q(t.getPropertyValue(`${o}-top${c}`)),right:Q(t.getPropertyValue(`${o}-right${c}`)),bottom:Q(t.getPropertyValue(`${o}-bottom${c}`)),left:Q(t.getPropertyValue(`${o}-left${c}`))});return{content:n,padding:r("padding",""),border:r("border","-width"),margin:r("margin","")}}function $t(e){let n=(typeof window<"u"?window:{}).__inspectGetEventListeners;if(!n)return[];try{let r=n(e),o=[];for(let[c,i]of Object.entries(r))for(let d of i)o.push({type:c,useCapture:d.useCapture,passive:d.passive});return o}catch{return[]}}function Ht(e){let t={};for(let o of Array.from(e.attributes))o.name.startsWith("aria-")&&(t[o.name]=o.value);let n=e.getAttribute("role")??void 0,r=e.getAttribute("aria-label")??e.title??(e.textContent??"").trim().slice(0,80)??void 0;return{role:n,name:r||void 0,properties:t}}function qt(e){let t={};for(let n of Array.from(e.attributes))t[n.name]=n.value;return t}function Ut(e){let t=e.getBoundingClientRect();return{x:t.x,y:t.y,w:t.width,h:t.height}}function Q(e){let t=parseFloat(e);return Number.isFinite(t)?t:0}async function He(e,t,n){let r=t.now();try{let o=zt(e,n?.replMode?{$0:t.getPicked(),$_:t.getLast()}:{});return n?.awaitPromise&&Wt(o)&&(o=await o),t.setLast(o),{ok:!0,value:C(o,{registry:t.registry,nodeIdFor:t.nodeIdFor}),tookMs:t.now()-r}}catch(o){let c=o;return{ok:!1,exception:{text:`${c?.name??"Error"}: ${c?.message??String(o)}`,stack:O(c?.stack)},tookMs:t.now()-r}}}function zt(e,t){let n=Object.keys(t);if(n.length===0)return(0,eval)(e);let r=new Function(...n,`return (${e});`);try{return r(...n.map(o=>t[o]))}catch(o){if(o instanceof SyntaxError)return new Function(...n,e)(...n.map(i=>t[i]));throw o}}function Wt(e){return typeof e?.then=="function"}var G=64*1024;function We(e){if(typeof window>"u")return()=>{};let t=0,n=()=>`r${++t}`,r=window.fetch?.bind(window);r&&(window.fetch=async(m,g)=>{let a=e.now(),y=(g?.method||(m instanceof Request?m.method:"GET")).toUpperCase(),k=m instanceof Request?m.url:String(m),l={id:n(),ts:a,method:y,url:k,resourceType:"fetch",requestHeaders:Ue(g?.headers??(m instanceof Request?m.headers:void 0)),requestBody:ze(g?.body),timing:{startMs:a,durationMs:0}};try{let h=await r(m,g);return l.status=h.status,l.responseHeaders=Ue(h.headers),l.timing.durationMs=e.now()-a,l.fromCache=h.fromCache,await Kt(h,l),d(l),h}catch(h){throw l.failed=!0,l.timing.durationMs=e.now()-a,l.responseBody={kind:"text",data:String(h?.message??h)},d(l),h}});let o=window.XMLHttpRequest,c=o?.prototype.open,i=o?.prototype.send;o&&c&&i&&(o.prototype.open=function(g,a,...y){return this.__inspect={method:g.toUpperCase(),url:a,start:0},c.apply(this,[g,a,...y])},o.prototype.send=function(g){let a=this.__inspect;return a&&(a.start=e.now(),this.addEventListener("loadend",()=>{let y={id:n(),ts:a.start,method:a.method,url:a.url,status:this.status,resourceType:"xhr",requestHeaders:{},responseHeaders:Xt(this.getAllResponseHeaders()),requestBody:ze(g),responseBody:Jt(this),timing:{startMs:a.start,durationMs:e.now()-a.start},failed:this.status===0};d(y)})),i.apply(this,[g])});function d(m){e.buffer.push(m),e.onEntry?.(m)}return()=>{r&&(window.fetch=r),o&&c&&(o.prototype.open=c),o&&i&&(o.prototype.send=i)}}function qe(e){return e.responseStatus||void 0}function Ve(){if(typeof performance>"u"||!performance.getEntriesByType)return[];let e=performance.timeOrigin??0,t=[],n=performance.getEntriesByType("navigation")[0];n&&t.push({id:"nav",ts:e+n.startTime,method:"GET",url:n.name||(typeof location<"u"?location.href:""),status:qe(n),resourceType:"document",requestHeaders:{},timing:{startMs:e+n.startTime,durationMs:n.duration,ttfbMs:n.responseStart-n.startTime},sizeBytes:n.transferSize||void 0});for(let r of performance.getEntriesByType("resource"))r.initiatorType==="fetch"||r.initiatorType==="xmlhttprequest"||t.push({id:`res:${Math.round(r.startTime)}:${r.name}`,ts:e+r.startTime,method:"GET",url:r.name,status:qe(r),resourceType:Vt(r.initiatorType),requestHeaders:{},timing:{startMs:e+r.startTime,durationMs:r.duration},sizeBytes:r.transferSize||r.decodedBodySize||void 0,fromCache:r.transferSize===0&&r.decodedBodySize>0});return t}function Vt(e){switch(e){case"img":case"image":return"img";case"css":case"link":return"css";case"script":return"script";case"font":return"font";default:return e||"other"}}function Ue(e){let t={};if(!e)return t;if(typeof Headers<"u"&&e instanceof Headers)e.forEach((n,r)=>t[r]=n);else if(Array.isArray(e))for(let[n,r]of e)t[n]=r;else Object.assign(t,e);return t}function Xt(e){let t={};for(let n of e.split(`\r
4
+ `)){let r=n.indexOf(":");r>0&&(t[n.slice(0,r).trim().toLowerCase()]=n.slice(r+1).trim())}return t}function ze(e){if(e!=null)return typeof e=="string"?e.slice(0,G):typeof URLSearchParams<"u"&&e instanceof URLSearchParams?e.toString().slice(0,G):"(binary)"}async function Kt(e,t){let n=e.headers.get("content-type")||"";if(!/json|text|javascript|xml|html|csv/i.test(n)){t.responseBody={kind:"omitted"};return}try{let r=await e.clone().text();t.sizeBytes=r.length;let o=/json/i.test(n)?"json":"text";t.responseBody={kind:o,data:r.slice(0,G)}}catch{t.responseBody={kind:"omitted"}}}function Jt(e){try{if(e.responseType===""||e.responseType==="text"){let t=e.responseText||"",n=e.getResponseHeader("content-type")||"";return{kind:/json/i.test(n)?"json":"text",data:t.slice(0,G)}}}catch{}return{kind:"omitted"}}var Y=class{seq=0;byId=new Map;idOf=new WeakMap;idFor(t){let n=this.idOf.get(t);if(n)return this.byId.set(n,t),n;let r=`n${++this.seq}`;return this.idOf.set(t,r),this.byId.set(r,t),r}get(t){return this.byId.get(t)}clear(){this.byId.clear()}};function Z(e){let t=e.getAttribute?.("data-id");if(t)return`[data-id=${t}]`;let n=e.getAttribute?.("role"),r=e.tagName.toLowerCase();return e.id?`${r}#${e.id}`:n?`${r}[role=${n}]`:r}var Xe="__ugly_inspect_overlay__";function Ke(e){if(typeof document>"u")return{setEnabled:()=>{},highlight:()=>{},destroy:()=>{}};let t=!1,n=null;function r(){if(n)return n;let a=document.createElement("div");return a.id=Xe,Object.assign(a.style,{position:"fixed",pointerEvents:"none",zIndex:"2147483647",background:"rgba(64,128,255,0.28)",border:"1px solid rgba(64,128,255,0.9)",boxSizing:"border-box",top:"0",left:"0",display:"none"}),document.documentElement.appendChild(a),n=a,a}function o(a){let y=r();if(!a){y.style.display="none";return}Object.assign(y.style,{display:"block",transform:`translate(${a.x}px, ${a.y}px)`,width:`${a.w}px`,height:`${a.h}px`})}let c=a=>{let y=d(a.clientX,a.clientY);y&&o(pe(y))},i=a=>{let y=d(a.clientX,a.clientY);y&&(a.preventDefault(),a.stopPropagation(),e.setPickedNode(y),e.onPicked({nodeId:e.reg.idFor(y),selector:Z(y),rect:pe(y)}),m(!1))};function d(a,y){n&&(n.style.display="none");let k=document.elementFromPoint(a,y);return k&&k.id!==Xe?k:null}function m(a){a!==t&&(t=a,a?(window.addEventListener("pointermove",c,!0),window.addEventListener("pointerdown",i,!0)):(window.removeEventListener("pointermove",c,!0),window.removeEventListener("pointerdown",i,!0),o(null)))}function g(a){if(!a){o(null);return}let y=e.reg.get(a);y?.nodeType===1&&o(pe(y))}return{setEnabled:m,highlight:g,destroy:()=>{m(!1),n?.remove(),n=null}}}function pe(e){let t=e.getBoundingClientRect();return{x:t.x,y:t.y,w:t.width,h:t.height}}var Ge=4;async function Ye(e,t){let n=t(),r=[];await new Promise(c=>{let i=()=>{r.push(Qt()),t()-n>=e?c():Je(i)};Je(i)});let o=t();return{startTime:n,endTime:o,durationMs:o-n,sampleCount:r.length,precise:!1,root:Gt(r)}}function Je(e){typeof setTimeout<"u"?setTimeout(e,Ge):e()}function Qt(){return O(new Error().stack,1).filter(t=>!/profile\.(js|ts)/.test(t.url)).map(t=>({url:t.url,line:t.line,col:t.col,functionName:t.functionName})).reverse()}function Gt(e){let t=0,n=Qe(t++,"(root)");for(let r of e){let o=n;o.hitCount++;for(let c of r){let i=c,d=`${i.functionName??"(anonymous)"}@${i.url}:${i.line}`,m=o.childMap.get(d);m||(m=Qe(t++,i.functionName??"(anonymous)",{url:i.url,line:i.line,col:i.col}),o.childMap.set(d,m),o.children.push(m)),m.hitCount++,o=m}}return Ze(n,e.length),et(n)}function Qe(e,t,n){return{id:e,functionName:t,source:n,selfTimeMs:0,totalTimeMs:0,hitCount:0,children:[],childMap:new Map}}function Ze(e,t){let n=0;for(let r of e.children)n+=Ze(r,t);return e.totalTimeMs=e.hitCount*Ge,e.selfTimeMs=Math.max(0,e.totalTimeMs-n),e.totalTimeMs}function et(e){return{id:e.id,functionName:e.functionName,source:e.source,selfTimeMs:e.selfTimeMs,totalTimeMs:e.totalTimeMs,hitCount:e.hitCount,children:e.children.map(t=>et(t))}}function nt(e,t,n){if(e==="cookie"){document.cookie=`${encodeURIComponent(t)}=${encodeURIComponent(n)}; path=/`;return}ee(()=>e==="session"?sessionStorage:localStorage)?.setItem(t,n)}function rt(e,t){if(e==="cookie"){document.cookie=`${encodeURIComponent(t)}=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT`;return}ee(()=>e==="session"?sessionStorage:localStorage)?.removeItem(t)}async function ot(){return{localStorage:tt(ee(()=>localStorage)),sessionStorage:tt(ee(()=>sessionStorage)),cookies:Yt(),indexedDB:await Zt()}}function ee(e){try{return e()}catch{return null}}function tt(e){let t={};if(!e)return t;for(let n=0;n<e.length;n++){let r=e.key(n);r!=null&&(t[r]=e.getItem(r)??"")}return t}function Yt(){if(typeof document>"u"||!document.cookie)return[];let e=typeof location<"u"?location.hostname:"";return document.cookie.split("; ").filter(Boolean).map(t=>{let n=t.indexOf("="),r=n>=0?t.slice(0,n):t,o=n>=0?t.slice(n+1):"";return{name:r,value:o,domain:e,path:"/"}})}async function Zt(){if(typeof indexedDB>"u"||typeof indexedDB.databases!="function")return[];try{let e=await indexedDB.databases(),t=[];for(let n of e)n.name&&t.push({name:n.name,stores:await en(n.name)});return t}catch{return[]}}function en(e){return new Promise(t=>{try{let n=indexedDB.open(e);n.onsuccess=()=>{let r=n.result,o=Array.from(r.objectStoreNames);r.close(),t(o)},n.onerror=()=>t([])}catch{t([])}})}var tn=40;function st(e){let t={longTasks:[]},n=[];if(typeof PerformanceObserver>"u")return{read:()=>({...t,navigation:it()}),stop:()=>{}};r("largest-contentful-paint",o=>{let c=o[o.length-1];if(!c)return;let i=c.element;t.lcp={valueMs:c.startTime,element:i?{nodeId:e.nodeIdFor(i),selector:Z(i),rect:rn(i)}:void 0}}),r("paint",o=>{for(let c of o)c.name==="first-contentful-paint"&&(t.fcp=c.startTime)}),r("layout-shift",o=>{let c=t.cls??0;for(let i of o)i.hadRecentInput||(c+=i.value);t.cls=c}),r("event",o=>{let c=t.inp??0;for(let i of o){let d=i.duration;d>c&&(c=d)}t.inp=c},{durationThreshold:40}),r("longtask",o=>{for(let c of o)t.longTasks.push({ts:e.now(),durationMs:c.duration});t.longTasks.length>200&&t.longTasks.splice(0,t.longTasks.length-200)});function r(o,c,i){try{let d=new PerformanceObserver(m=>c(m.getEntries()));d.observe({type:o,buffered:!0,...i??{}}),n.push(d)}catch{}}return{read:()=>{let o=it(),{resources:c,resourceSummary:i}=nn(o?.domInteractiveMs??t.fcp);return{...t,longTasks:t.longTasks.slice(),navigation:o,ttfb:t.ttfb??o?.ttfbMs,resources:c,resourceSummary:i}},stop:()=>n.forEach(o=>o.disconnect())}}function nn(e){if(typeof performance>"u"||!performance.getEntriesByType)return{};let t=performance.getEntriesByType("resource");if(!t.length)return{};let n=0,r=0;return{resources:t.map(i=>{n+=i.transferSize||0,r+=i.duration;let d=i.requestStart>0?Math.max(0,i.requestStart-i.startTime):void 0,m=e!=null&&i.responseEnd<=e&&(i.initiatorType==="link"||i.initiatorType==="css"||i.initiatorType==="script");return{name:i.name,initiatorType:i.initiatorType||"other",startMs:i.startTime,durationMs:i.duration,blockingMs:d,transferSizeBytes:i.transferSize||void 0,decodedSizeBytes:i.decodedBodySize||void 0,fromCache:i.transferSize===0&&i.decodedBodySize>0,renderBlocking:m}}).sort((i,d)=>d.durationMs-i.durationMs).slice(0,tn),resourceSummary:{count:t.length,transferBytes:n,durationMs:r}}}function it(){if(typeof performance>"u"||!performance.getEntriesByType)return;let e=performance.getEntriesByType("navigation")[0];if(e)return{ttfbMs:e.responseStart,domContentLoadedMs:e.domContentLoadedEventEnd,loadEventMs:e.loadEventEnd,domInteractiveMs:e.domInteractive,transferSizeBytes:e.transferSize}}function rn(e){let t=e.getBoundingClientRect();return{x:t.x,y:t.y,w:t.width,h:t.height}}var ct=1e3;function L(){return typeof performance<"u"&&performance.now?performance.timeOrigin+performance.now():Date.now()}function on(e={}){let t=new J,n=new Y,r=l=>n.idFor(l),o=new $(ct),c=new $(ct),i=null,d,m=Le({buffer:o,registry:t,nodeIdFor:r,onEntry:l=>e.onConsole?.(l),now:L}),g=We({buffer:c,onEntry:l=>e.onNetwork?.(l),now:L}),a=st({nodeIdFor:r,now:L}),y=Ke({reg:n,onPicked:l=>e.onPicked?.(l),setPickedNode:l=>i=l});return{meta(){return{url:typeof location<"u"?location.href:"",title:typeof document<"u"?document.title:"",isUglyApp:typeof window<"u"&&"__uglyInspect"in window,viewport:{w:typeof window<"u"?window.innerWidth:0,h:typeof window<"u"?window.innerHeight:0,dpr:typeof window<"u"&&window.devicePixelRatio||1}}},consoleBuffer:l=>l==null?o.all():o.all().filter(h=>h.seq>l),networkBuffer:l=>{let v=[...c.all(),...Ve()].sort((E,M)=>E.ts-M.ts);return l==null?v:v.filter(E=>E.ts>l)},evaluate:(l,h)=>He(l,{registry:t,nodeIdFor:r,now:L,getPicked:()=>i,getLast:()=>d,setLast:v=>d=v},h),expand:l=>({entries:Me(t.get(l),{registry:t,nodeIdFor:r})}),domCapture:l=>Fe(n,l,L),element:l=>$e(n,l),highlight:l=>y.highlight(l),setPicker:l=>y.setEnabled(l),vitals:()=>a.read(),profile:l=>Ye(l,L),storage:()=>ot(),storageSet:(l,h,v)=>nt(l,h,v),storageRemove:(l,h)=>rt(l,h),reload:l=>{typeof location<"u"&&location.reload()},reset:()=>{t.clear(),n.clear(),o.clear(),c.clear(),i=null,d=void 0},stop:()=>{m(),g(),a.stop(),y.destroy()}}}function at(e){if(typeof window<"u"&&window.__uglyInspectAgent)return window.__uglyInspectAgent;let t=on(e);return typeof window<"u"&&(window.__uglyInspectAgent=t),t}var sn=new Set(["inspect.screenshot","inspect.openTarget"]);function ut(e,t,n){return{id:e,url:n.url,title:n.title,viewport:n.viewport,platform:t,isUglyApp:n.isUglyApp,open:!0}}async function lt(e,t,n={}){switch(t){case"inspect.eval":return e.evaluate(String(n.expression??""),{awaitPromise:n.awaitPromise,replMode:n.replMode});case"inspect.expand":return e.expand(String(n.objectId??""));case"inspect.console.buffer":return{entries:e.consoleBuffer(n.sinceSeq)};case"inspect.network.buffer":return{entries:e.networkBuffer(n.sinceTs)};case"inspect.dom.capture":return e.domCapture(n.maxDepth);case"inspect.element":return e.element({nodeId:n.nodeId,selector:n.selector});case"inspect.dom.highlight":e.highlight(n.nodeId??null);return;case"inspect.picker.set":e.setPicker(!!n.enabled);return;case"inspect.vitals":return e.vitals();case"inspect.profile":return e.profile(Number(n.durationMs??1e3));case"inspect.storage":return e.storage();case"inspect.storage.set":e.storageSet(n.area,String(n.key??""),String(n.value??""));return;case"inspect.storage.remove":e.storageRemove(n.area,String(n.key??""));return;case"inspect.network.reload":e.reload(!!n.ignoreCache);return;case"inspect.network.setCacheDisabled":case"inspect.setThrottle":return;default:throw sn.has(t)?new Error(`inspect: ${t} is host-serviced, not an agent method`):new Error(`inspect: unknown channel ${t}`)}}var q="self";function dt(e){let t=at({onConsole:n=>e.onEvent?.(`inspect.console:${q}`,n),onNetwork:n=>e.onEvent?.(`inspect.network:${q}`,n),onPicked:n=>e.onEvent?.(`inspect.picked:${q}`,n)});return{async dispatch(n,r={}){if(n==="inspect.listTargets")return{targets:[ut(q,e.platform,t.meta())]};if(n==="inspect.screenshot"){if(!e.screenshot)throw new Error("inspect.screenshot: no native capture on this shell");return e.screenshot({...r,targetId:q})}return lt(t,n,r)},stop(){t.stop()}}}function cn(e){return async()=>{let t=await e.invoke("capture.screenshot",void 0),n=typeof window<"u"?window.innerWidth:0,r=typeof window<"u"?window.innerHeight:0,o=typeof window<"u"&&window.devicePixelRatio||1;return{base64:t,width:n,height:r,dpr:o,format:"png"}}}function ft(e){let t=e.platform??e.native?.platform??"web",n=e.signer??(e.native?Ie(e.native):void 0),r=e.screenshot??(e.native?cn(e.native):void 0),o={},c=dt({platform:t,screenshot:r,onEvent:(i,d)=>o.host?.broadcast(i,d)});return o.host=Ce({socket:e.socket,signer:n,iceServers:e.iceServers,rtcFactory:e.rtcFactory,onInvoke:(i,d)=>c.dispatch(i,d??{})}),{stop(){o.host?.stop(),c.stop()},peerCount:()=>o.host?.peerCount()??0}}var U=window,N=U.__uglyInspectBootstrap;if(N&&U.UglyNative&&!U.__uglyInspectHostInstalled){U.__uglyInspectHostInstalled=!0;let e=U.UglyNative,t=Pe({requests:{},messages:{},url:N.wsUrl,getUrlParams:()=>({token:N.token,deviceId:N.deviceId,deviceLabel:N.deviceLabel??N.platform,inspectHost:"true",isHost:"true"})});t.connect(N.token).then(()=>ft({socket:t,native:e,platform:N.platform})).catch(()=>{})}})();
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/native/proxy.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAmC,KAAK,WAAW,EAAE,KAAK,WAAW,EAAiB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEvI,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,4FAA4F;AAC5F,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAgBjD,CAAC;AAEH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,WAAW,CAAC;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3C,+EAA+E;IAC/E,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,GAAG,UAAU,CAc3E;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;CACrB,GAAG,UAAU,CA8Ib;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE;QAAE,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;KAAE,CAAC;IAC7C;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG;QAAE,QAAQ,CAAC,EAAE,eAAe,CAAA;KAAE,CAAC;CACxD,GAAG,UAAU,CAoBb;AAED,8FAA8F;AAC9F,wBAAgB,mBAAmB,CACjC,GAAG,EAAE;IAAE,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;CAAE,EAC3C,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,OAAO,GACZ,IAAI,CAON"}
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/native/proxy.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAmC,KAAK,WAAW,EAAE,KAAK,WAAW,EAAiB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEvI,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,4FAA4F;AAC5F,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAgBjD,CAAC;AAEH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,WAAW,CAAC;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3C,+EAA+E;IAC/E,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,GAAG,UAAU,CAc3E;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;CACrB,GAAG,UAAU,CA8Ib;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE;QAAE,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;KAAE,CAAC;IAC7C;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG;QAAE,QAAQ,CAAC,EAAE,eAAe,CAAA;KAAE,CAAC;CACxD,GAAG,UAAU,CAgCb;AAED,8FAA8F;AAC9F,wBAAgB,mBAAmB,CACjC,GAAG,EAAE;IAAE,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;CAAE,EAC3C,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,OAAO,GACZ,IAAI,CAON"}
@@ -222,6 +222,11 @@ export function enableUglyProxy(opts) {
222
222
  */
223
223
  export function installProxyClient(opts) {
224
224
  const win = opts.win ?? globalThis;
225
+ // Self-heal a stale grant: if the host rejects our fingerprint, our MSK no longer matches
226
+ // (e.g. the host's key drifted/reset). Ask the native shell to destroy the local key and
227
+ // re-enroll — it re-adopts the host's current key with no manual re-pair. Debounced, since
228
+ // re-enrollment takes several seconds and rtc:error repeats on every retry.
229
+ let lastReenroll = 0;
225
230
  const client = createProxyClient({
226
231
  socket: opts.socket,
227
232
  selfDeviceId: opts.selfDeviceId,
@@ -229,6 +234,14 @@ export function installProxyClient(opts) {
229
234
  iceServers: opts.iceServers,
230
235
  rtcFactory: opts.rtcFactory,
231
236
  onEvent: (event, data) => dispatchNativeEvent(win, event, data),
237
+ onFingerprintReject: () => {
238
+ const now = Date.now();
239
+ if (now - lastReenroll < 30_000)
240
+ return;
241
+ lastReenroll = now;
242
+ console.error('[uglyproxy] fingerprint rejected — destroying stale key + re-enrolling');
243
+ void opts.native.invoke('proxy.reenroll', {}).catch(() => { });
244
+ },
232
245
  });
233
246
  if (opts.inspectHost) {
234
247
  installInspectProxyHost({
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/native/proxy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/native/proxy.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,13 @@ export interface ProxyClientOpts {
33
33
  rtcFactory?: RTCFactory;
34
34
  /** evt frames from the host (UglyNative subscribe events, task deltas) land here. */
35
35
  onEvent?: (event: string, data: unknown) => void;
36
+ /**
37
+ * The host rejected our offer with `fingerprint-auth-failed` — i.e. our MSK no longer
38
+ * matches the host's (a stale/invalid grant). The shell can self-heal by destroying the
39
+ * local key and re-enrolling. Deterministic (not a transient error), so it's a reliable
40
+ * trigger; callers should debounce (re-enroll takes time).
41
+ */
42
+ onFingerprintReject?: () => void;
36
43
  requestTimeoutMs?: number;
37
44
  openTimeoutMs?: number;
38
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"proxyClient.d.ts","sourceRoot":"","sources":["../../src/native/proxyClient.ts"],"names":[],"mappings":"AAKA,OAAO,EAAoC,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,WAAW,CAO5E;AAED,wFAAwF;AACxF,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAChE,kDAAkD;IAClD,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACvE;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,gBAAgB,KAAK,iBAAiB,CAAC;AAEzE,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB;2EACuE;IACvE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,qFAAqF;IACrF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,6DAA6D;IAC7D,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjC,iFAAiF;IACjF,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,yDAAyD;IACzD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D;;;OAGG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC,CAAC;IACtG,MAAM,IAAI,OAAO,CAAC;IAClB,YAAY,IAAI,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,IAAI,IAAI,CAAC;CACf;AAYD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,CA4JpE"}
1
+ {"version":3,"file":"proxyClient.d.ts","sourceRoot":"","sources":["../../src/native/proxyClient.ts"],"names":[],"mappings":"AAKA,OAAO,EAAoC,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,WAAW,CAO5E;AAED,wFAAwF;AACxF,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAChE,kDAAkD;IAClD,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACvE;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,gBAAgB,KAAK,iBAAiB,CAAC;AAEzE,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB;2EACuE;IACvE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,qFAAqF;IACrF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,6DAA6D;IAC7D,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjC,iFAAiF;IACjF,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,yDAAyD;IACzD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D;;;OAGG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC,CAAC;IACtG,MAAM,IAAI,OAAO,CAAC;IAClB,YAAY,IAAI,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,IAAI,IAAI,CAAC;CACf;AAYD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,CAmKpE"}
@@ -104,10 +104,16 @@ export function createProxyClient(opts) {
104
104
  channel.onmessage = (e) => onDcMessage(e.data);
105
105
  offs.push(opts.socket.on('rtc:answer', (d) => { void onAnswer(rec(d)); }));
106
106
  offs.push(opts.socket.on('rtc:ice', (d) => { iceRecv++; void onRemoteIce(rec(d)); }));
107
- offs.push(opts.socket.on('rtc:error', (d) => { if (rec(d)['from'] === host) {
108
- console.error('[uglyproxy] rtc:error from host', { reason: rec(d)['reason'] });
107
+ offs.push(opts.socket.on('rtc:error', (d) => {
108
+ if (rec(d)['from'] !== host)
109
+ return;
110
+ const reason = rec(d)['reason'];
111
+ console.error('[uglyproxy] rtc:error from host', { reason });
109
112
  cleanup();
110
- } }));
113
+ // A fingerprint mismatch = our grant is stale/invalid; let the shell self-heal.
114
+ if (reason === 'fingerprint-auth-failed')
115
+ opts.onFingerprintReject?.();
116
+ }));
111
117
  const opened = new Promise((resolve, reject) => {
112
118
  const timer = setTimeout(() => reject(new Error('proxy DataChannel open timeout')), openTimeout);
113
119
  channel.onopen = () => { clearTimeout(timer); resolve(); };
@@ -1 +1 @@
1
- {"version":3,"file":"proxyClient.js","sourceRoot":"","sources":["../../src/native/proxyClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proxyClient.js","sourceRoot":"","sources":["../../src/native/proxyClient.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,yFAAyF;AACzF,0FAA0F;AAC1F,oFAAoF;AACpF,yFAAyF;AACzF,OAAO,EAAE,gBAAgB,EAAoC,MAAM,kBAAkB,CAAC;AAGtF;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAkC;IAC7D,OAAO;QACL,IAAI,EAAE,KAAK,EAAE,IAAe,EAAE,WAAmB,EAAE,EAAE,CACnD,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG;QAC3E,MAAM,EAAE,KAAK,EAAE,IAAe,EAAE,WAAmB,EAAE,GAAW,EAAE,EAAE,CAClE,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE;KAClF,CAAC;AACJ,CAAC;AAkED,SAAS,GAAG,CAAC,CAAU;IACrB,OAAO,CAAC,CAAC,IAAI,EAAE,CAA4B,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAqB;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,GAAqB,EAAE,EAAE,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9F,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,IAAI,MAAM,CAAC;IACnD,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC;IAEjD,IAAI,EAAE,GAA6B,IAAI,CAAC;IACxC,IAAI,EAAE,GAA0B,IAAI,CAAC;IACrC,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC3C,MAAM,IAAI,GAAsB,EAAE,CAAC;IAEnC,SAAS,OAAO;QACd,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YAAC,IAAI,CAAC;gBAAC,GAAG,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACjC,IAAI,CAAC,CAAC,KAAK;gBAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC;YAAC,EAAE,EAAE,KAAK,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,CAAC;YAAC,EAAE,EAAE,KAAK,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QACzC,EAAE,GAAG,IAAI,CAAC;QACV,EAAE,GAAG,IAAI,CAAC;IACZ,CAAC;IAED,SAAS,WAAW,CAAC,GAAY;QAC/B,IAAI,CAA8G,CAAC;QACnH,IAAI,CAAC;YACH,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAkB,CAAC,CAAC,CAAC;QAC/F,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,CAAC,CAAC;gBAAE,OAAO;YACf,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACrB,IAAI,CAAC,CAAC,KAAK;gBAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,CAAC,EAAE;gBAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;;gBACzB,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC,CAAC;QACrD,CAAC;aAAM,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,KAAK,UAAU,SAAS;QACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QAC1F,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAI,GAAG,CAAC,SAAS,CAA4B,IAAI,EAAE,CAAC;QACjE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,UAAU,OAAO,CAAC,YAAoB;QACzC,OAAO,EAAE,CAAC;QACV,IAAI,GAAG,YAAY,CAAC;QACpB,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC,CAAC;QAC/D,EAAE,GAAG,IAAI,CAAC;QACV,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAChD,EAAE,GAAG,OAAO,CAAC;QAEb,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,EAAE,EAAE;YAC1B,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;gBAAC,OAAO,EAAE,CAAC;gBAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAAC,CAAC;QACrH,CAAC,CAAC;QACF,IAAI,CAAC,0BAA0B,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9I,IAAI,CAAC,uBAAuB,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QACnH,OAAO,CAAC,SAAS,GAAG,CAAC,CAAe,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAE7D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;YAC1C,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI;gBAAE,OAAO;YACpC,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAC7D,OAAO,EAAE,CAAC;YACV,gFAAgF;YAChF,IAAI,MAAM,KAAK,yBAAyB;gBAAE,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;QACzE,CAAC,CAAC,CAAC,CAAC;QAEJ,MAAM,MAAM,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YACjG,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC;QAC1D,IAAI,GAAuB,CAAC;QAC5B,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChG,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,0DAA0D,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,OAAO,EAAG,CAAW,EAAE,OAAO,EAAE,CAAC,CAAC;YAChI,MAAM,CAAC,CAAC;QACV,CAAC;QACD,mFAAmF;QACnF,qFAAqF;QACrF,oDAAoD;QACpD,MAAM,MAAM,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7E,OAAO,CAAC,KAAK,CAAC,4DAA4D,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAEzH,MAAM,MAAM,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,UAAU,QAAQ,CAAC,CAA0B;QAChD,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI;YAAE,OAAO;QACtC,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7F,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACnG,IAAI,CAAC,EAAE,EAAE,CAAC;gBAAC,OAAO,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;gBAAC,OAAO,EAAE,CAAC;gBAAC,OAAO;YAAC,CAAC;QAC1H,CAAC;QACD,MAAM,EAAE,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,UAAU,WAAW,CAAC,CAA0B;QACnD,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI;YAAE,OAAO;QACtC,IAAI,CAAC;YAAC,MAAM,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAwB,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACjG,CAAC;IAED,SAAS,MAAM,CAAC,OAAe,EAAE,OAAgB;QAC/C,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,KAAK,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC7F,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QACzB,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9C,MAAM,KAAK,GAAG,UAAU,GAAG,CAAC;gBAC1B,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;gBAChH,CAAC,CAAC,IAAI,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5C,EAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,SAAS,CAAC,OAAe,EAAE,OAAgB;QAClD,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,KAAK,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC7F,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,UAAU,GAAG,CAAC;gBAC1B,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;gBACnH,CAAC,CAAC,IAAI,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE;gBACd,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC;oBAC7B,QAAQ;oBACR,WAAW,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;wBAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;iBAClG,CAAC;gBACF,MAAM;gBACN,KAAK;aACN,CAAC,CAAC;YACH,EAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,SAAS;QACT,OAAO;QACP,MAAM;QACN,SAAS;QACT,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,UAAU,KAAK,MAAM;QACvC,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI;QACxB,KAAK,EAAE,OAAO;KACf,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ugly-app",
3
- "version": "0.1.729",
3
+ "version": "0.1.730",
4
4
  "type": "module",
5
5
  "comment:files": "Allowlist what ships to npm. dist = runtime; src = sourcemap targets (dist/*.js.map reference ../../src/); templates = CLI scaffold. Everything else at repo root (.pgdata local Postgres, coverage, assets/icons sources, test/, test-results/) is excluded by omission. The !negations strip the scaffold's installed deps + cruft (templates/node_modules is 200MB+ and must never ship). package.json/README/LICENSE ship automatically.",
6
6
  "files": [
@@ -1,2 +1,2 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.729";
2
+ export const CLI_VERSION = "0.1.730";
@@ -243,6 +243,11 @@ export function installProxyClient(opts: {
243
243
  inspectHost?: boolean | { platform?: InspectPlatform };
244
244
  }): UglyNative {
245
245
  const win = opts.win ?? (globalThis as unknown as { dispatchEvent(e: unknown): boolean });
246
+ // Self-heal a stale grant: if the host rejects our fingerprint, our MSK no longer matches
247
+ // (e.g. the host's key drifted/reset). Ask the native shell to destroy the local key and
248
+ // re-enroll — it re-adopts the host's current key with no manual re-pair. Debounced, since
249
+ // re-enrollment takes several seconds and rtc:error repeats on every retry.
250
+ let lastReenroll = 0;
246
251
  const client = createProxyClient({
247
252
  socket: opts.socket,
248
253
  selfDeviceId: opts.selfDeviceId,
@@ -250,6 +255,13 @@ export function installProxyClient(opts: {
250
255
  iceServers: opts.iceServers,
251
256
  rtcFactory: opts.rtcFactory,
252
257
  onEvent: (event, data) => dispatchNativeEvent(win, event, data),
258
+ onFingerprintReject: () => {
259
+ const now = Date.now();
260
+ if (now - lastReenroll < 30_000) return;
261
+ lastReenroll = now;
262
+ console.error('[uglyproxy] fingerprint rejected — destroying stale key + re-enrolling');
263
+ void opts.native.invoke('proxy.reenroll' as never, {} as never).catch(() => {});
264
+ },
253
265
  });
254
266
  if (opts.inspectHost) {
255
267
  installInspectProxyHost({
@@ -50,6 +50,13 @@ export interface ProxyClientOpts {
50
50
  rtcFactory?: RTCFactory;
51
51
  /** evt frames from the host (UglyNative subscribe events, task deltas) land here. */
52
52
  onEvent?: (event: string, data: unknown) => void;
53
+ /**
54
+ * The host rejected our offer with `fingerprint-auth-failed` — i.e. our MSK no longer
55
+ * matches the host's (a stale/invalid grant). The shell can self-heal by destroying the
56
+ * local key and re-enrolling. Deterministic (not a transient error), so it's a reliable
57
+ * trigger; callers should debounce (re-enroll takes time).
58
+ */
59
+ onFingerprintReject?: () => void;
53
60
  requestTimeoutMs?: number;
54
61
  openTimeoutMs?: number;
55
62
  }
@@ -152,7 +159,14 @@ export function createProxyClient(opts: ProxyClientOpts): ProxyClient {
152
159
 
153
160
  offs.push(opts.socket.on('rtc:answer', (d) => { void onAnswer(rec(d)); }));
154
161
  offs.push(opts.socket.on('rtc:ice', (d) => { iceRecv++; void onRemoteIce(rec(d)); }));
155
- offs.push(opts.socket.on('rtc:error', (d) => { if (rec(d)['from'] === host) { console.error('[uglyproxy] rtc:error from host', { reason: rec(d)['reason'] }); cleanup(); } }));
162
+ offs.push(opts.socket.on('rtc:error', (d) => {
163
+ if (rec(d)['from'] !== host) return;
164
+ const reason = rec(d)['reason'];
165
+ console.error('[uglyproxy] rtc:error from host', { reason });
166
+ cleanup();
167
+ // A fingerprint mismatch = our grant is stale/invalid; let the shell self-heal.
168
+ if (reason === 'fingerprint-auth-failed') opts.onFingerprintReject?.();
169
+ }));
156
170
 
157
171
  const opened = new Promise<void>((resolve, reject) => {
158
172
  const timer = setTimeout(() => reject(new Error('proxy DataChannel open timeout')), openTimeout);