9remote 2.0.77 → 2.0.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.cjs
CHANGED
|
@@ -9,7 +9,7 @@ Right-click to open / quit`}function qi(){let{port:e,tunnelUrl:n}=Nt,r=process.p
|
|
|
9
9
|
`}l||(t+=p)}else{var v=to(cr).times(o.getModuleCount()+3);t+=v+`
|
|
10
10
|
`,o.modules.forEach(function(T){t+=cr,t+=T.map(Ac).join(""),t+=cr+`
|
|
11
11
|
`}),t+=v}r?r(t):console.log(t)},setErrorLevel:function(e){this.error=xs[e]||this.error}}});var kn=require("fs"),Vt=require("path"),mo=require("url"),ho=A(require("os"),1);var An=A(require("dns"),1),_e=A(require("path"),1),ao=A(require("os"),1),ne="9remote",pr=process.env.NREMOTE_REGISTRY||`https://registry.npmjs.org/${ne}/latest`,Pe=`${ne}@latest`,Fe=_e.default.join(ao.default.homedir(),".9remote"),re={ROOT:Fe,LOGS:_e.default.join(Fe,"logs"),STATE:_e.default.join(Fe,"state"),CONFIG:_e.default.join(Fe,"config"),BIN:_e.default.join(Fe,"bin"),PIDS:_e.default.join(Fe,"pids"),BUFFERS:_e.default.join(Fe,"buffers"),DAEMON:_e.default.join(Fe,"daemon")},co=new An.default.promises.Resolver;co.setServers(["1.1.1.1","1.0.0.1","8.8.8.8"]);var fr=An.default.lookup,Js=/^(\d{1,3}\.){3}\d{1,3}$|^::1$|^[0-9a-f:]+$/i;An.default.lookup=(e,n,r)=>{if(typeof n=="function"&&(r=n,n={}),e==="localhost"||Js.test(e))return fr(e,n,r);co.resolve4(e).then(o=>{if(!o?.length)return fr(e,n,r);n.all?r(null,o.map(t=>({address:t,family:4}))):r(null,o[0],4)}).catch(()=>fr(e,n,r))};var I=2208,so=5173;var qc=[`http://localhost:${I}`,`http://127.0.0.1:${I}`,`http://localhost:${so}`,`http://127.0.0.1:${so}`],Wt={fileName:"agent.log",rotatedName:"agent.log.1",maxBytes:2*1024*1024,cleanupAfterDays:7},lo=60,C={STOPPED:0,PREPARING:1,CONNECTING:2,TUNNELING:3,VERIFYING:4,READY:5},uo={showTunnelUrlInMenu:!1};var fo={CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN:"1"};var po={checkIntervalMs:3e4,requestTimeoutMs:5e3},le={server:{strategy:"exp",baseMs:1e3,maxMs:6e4},tunnelRestart:{strategy:"exp",baseMs:2e3,maxMs:3e5},tunnelSpawn:{strategy:"linear",baseMs:5e3,maxMs:6e4},internet:{strategy:"linear",baseMs:3e3,maxMs:6e4},sse:{strategy:"linear",baseMs:2e3,maxMs:2e3},urlSync:{strategy:"linear",baseMs:5e3,maxMs:6e4}},Qs={Accept:"application/json, text/plain, */*","Accept-Language":"en-US,en;q=0.9","Cache-Control":"no-cache",Pragma:"no-cache","User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"};function G(e,n={}){return fetch(e,{...n,headers:{...Qs,...n.headers}})}var Xs=(0,Vt.dirname)((0,mo.fileURLToPath)(__importMetaUrl)),Zs=[(0,Vt.join)(ho.default.homedir(),".9remote",".env"),(0,Vt.join)(Xs,"..",".env")];function zs(e){for(let n of e.split(`
|
|
12
|
-
`)){let r=n.trim();if(!r||r.startsWith("#"))continue;let o=r.match(/^([A-Z_][A-Z0-9_]*)\s*=\s*"?(.*?)"?$/);o&&!process.env[o[1]]&&(process.env[o[1]]=o[2])}}for(let e of Zs)if((0,kn.existsSync)(e))try{zs((0,kn.readFileSync)(e,"utf8"))}catch{}for(let[e,n]of Object.entries(fo))process.env[e]||(process.env[e]=n);var yr=A(require("path"),1),To=A(require("fs"),1),xo=require("url");var yo=A(go(),1),mr=A(require("crypto"),1),{machineIdSync:ea}=yo.default;async function vt(e=null){let n=e||process.env.MACHINE_ID_SALT||"9remote-salt";try{let r=ea();return mr.default.createHash("sha256").update(r+n).digest("hex").substring(0,16)}catch(r){return console.error("Error getting machine ID:",r),mr.default.randomUUID().replace(/-/g,"").substring(0,16)}}var wo=A(require("crypto"),1),ta=process.env.API_KEY_SECRET||"9remote-api-key-secret";function na(){let e="abcdefghijklmnopqrstuvwxyz0123456789",n="";for(let r=0;r<4;r++)n+=e.charAt(Math.floor(Math.random()*e.length));return n}function ra(e,n){return wo.default.createHmac("sha256",ta).update(e+n).digest("hex").slice(0,6)}function St(e){let n=e.slice(0,8),r=na(),o=ra(n,r);return{key:`sk-${n}-${r}-${o}`,keyId:r}}function _n(e){return!e||e.length<8?"sk-***":`${e.slice(0,3)}***${e.slice(-4)}`}var ae=A(require("fs"),1),qt=A(require("path"),1);var el=re.STATE,hr=qt.default.join(re.STATE,"state.json"),gr=qt.default.join(re.ROOT,"keys.json"),Pn=qt.default.join(re.STATE,"cmd.json"),tl=qt.default.join(re.STATE,"settings.json");function In(){for(let e of[re.ROOT,re.STATE])ae.default.existsSync(e)||ae.default.mkdirSync(e,{recursive:!0})}function On(e){try{In(),ae.default.writeFileSync(hr,JSON.stringify(e,null,2),{mode:384})}catch(n){console.error("Error saving state:",n)}}function vo(){try{ae.default.existsSync(hr)&&ae.default.unlinkSync(hr)}catch{}}function Cn(){try{return In(),ae.default.existsSync(gr)?JSON.parse(ae.default.readFileSync(gr,"utf8")):{machineId:null,key:null,name:"Default",createdAt:null}}catch{return{machineId:null,key:null,name:"Default",createdAt:null}}}function Et(e){try{In(),ae.default.writeFileSync(Pn,JSON.stringify({cmd:e,ts:Date.now()}))}catch{}}function So(){try{if(!ae.default.existsSync(Pn))return null;let e=JSON.parse(ae.default.readFileSync(Pn,"utf8"));return ae.default.unlinkSync(Pn),e.cmd}catch{return null}}function nt(e,n,r="Default"){try{In();let o={machineId:e,key:n,name:r,createdAt:new Date().toISOString()};return ae.default.writeFileSync(gr,JSON.stringify(o,null,2),{mode:384}),o}catch(o){return console.error("Error saving key:",o),null}}function Eo(){return process.env.CODESPACES==="true"}var oa=yr.default.dirname((0,xo.fileURLToPath)(__importMetaUrl));async function Ue(){let e=await vt();if(Eo()&&process.env.NREMOTE_API_KEY)return nt(e,process.env.NREMOTE_API_KEY,"Codespace");let n=Cn();if(!n.key){let{key:r}=St(e);n=nt(e,r,"Default")}return n}function Se(){return"2.0.
|
|
12
|
+
`)){let r=n.trim();if(!r||r.startsWith("#"))continue;let o=r.match(/^([A-Z_][A-Z0-9_]*)\s*=\s*"?(.*?)"?$/);o&&!process.env[o[1]]&&(process.env[o[1]]=o[2])}}for(let e of Zs)if((0,kn.existsSync)(e))try{zs((0,kn.readFileSync)(e,"utf8"))}catch{}for(let[e,n]of Object.entries(fo))process.env[e]||(process.env[e]=n);var yr=A(require("path"),1),To=A(require("fs"),1),xo=require("url");var yo=A(go(),1),mr=A(require("crypto"),1),{machineIdSync:ea}=yo.default;async function vt(e=null){let n=e||process.env.MACHINE_ID_SALT||"9remote-salt";try{let r=ea();return mr.default.createHash("sha256").update(r+n).digest("hex").substring(0,16)}catch(r){return console.error("Error getting machine ID:",r),mr.default.randomUUID().replace(/-/g,"").substring(0,16)}}var wo=A(require("crypto"),1),ta=process.env.API_KEY_SECRET||"9remote-api-key-secret";function na(){let e="abcdefghijklmnopqrstuvwxyz0123456789",n="";for(let r=0;r<4;r++)n+=e.charAt(Math.floor(Math.random()*e.length));return n}function ra(e,n){return wo.default.createHmac("sha256",ta).update(e+n).digest("hex").slice(0,6)}function St(e){let n=e.slice(0,8),r=na(),o=ra(n,r);return{key:`sk-${n}-${r}-${o}`,keyId:r}}function _n(e){return!e||e.length<8?"sk-***":`${e.slice(0,3)}***${e.slice(-4)}`}var ae=A(require("fs"),1),qt=A(require("path"),1);var el=re.STATE,hr=qt.default.join(re.STATE,"state.json"),gr=qt.default.join(re.ROOT,"keys.json"),Pn=qt.default.join(re.STATE,"cmd.json"),tl=qt.default.join(re.STATE,"settings.json");function In(){for(let e of[re.ROOT,re.STATE])ae.default.existsSync(e)||ae.default.mkdirSync(e,{recursive:!0})}function On(e){try{In(),ae.default.writeFileSync(hr,JSON.stringify(e,null,2),{mode:384})}catch(n){console.error("Error saving state:",n)}}function vo(){try{ae.default.existsSync(hr)&&ae.default.unlinkSync(hr)}catch{}}function Cn(){try{return In(),ae.default.existsSync(gr)?JSON.parse(ae.default.readFileSync(gr,"utf8")):{machineId:null,key:null,name:"Default",createdAt:null}}catch{return{machineId:null,key:null,name:"Default",createdAt:null}}}function Et(e){try{In(),ae.default.writeFileSync(Pn,JSON.stringify({cmd:e,ts:Date.now()}))}catch{}}function So(){try{if(!ae.default.existsSync(Pn))return null;let e=JSON.parse(ae.default.readFileSync(Pn,"utf8"));return ae.default.unlinkSync(Pn),e.cmd}catch{return null}}function nt(e,n,r="Default"){try{In();let o={machineId:e,key:n,name:r,createdAt:new Date().toISOString()};return ae.default.writeFileSync(gr,JSON.stringify(o,null,2),{mode:384}),o}catch(o){return console.error("Error saving key:",o),null}}function Eo(){return process.env.CODESPACES==="true"}var oa=yr.default.dirname((0,xo.fileURLToPath)(__importMetaUrl));async function Ue(){let e=await vt();if(Eo()&&process.env.NREMOTE_API_KEY)return nt(e,process.env.NREMOTE_API_KEY,"Codespace");let n=Cn();if(!n.key){let{key:r}=St(e);n=nt(e,r,"Default")}return n}function Se(){return"2.0.78"}var Ee=A(require("fs"),1),vr=A(require("path"),1);var $n=re.LOGS,Qt=vr.default.join($n,Wt.fileName),Ln=vr.default.join($n,Wt.rotatedName),Ro=!1,bo=null;function ia(){Ee.default.existsSync($n)||Ee.default.mkdirSync($n,{recursive:!0})}function sa(){try{if(Ee.default.statSync(Qt).size<Wt.maxBytes)return;try{Ee.default.rmSync(Ln,{force:!0})}catch{}Ee.default.renameSync(Qt,Ln)}catch{}}function aa(){try{let e=Ee.default.statSync(Ln);Date.now()-e.mtimeMs>Wt.cleanupAfterDays*864e5&&Ee.default.rmSync(Ln,{force:!0})}catch{}}function Sr(e){try{sa(),Ee.default.appendFileSync(Qt,e+`
|
|
13
13
|
`)}catch{}}function wr(e){return e.map(n=>{if(n instanceof Error)return n.stack||n.message;if(typeof n=="object")try{return JSON.stringify(n)}catch{return String(n)}return String(n)}).join(" ")}function Ao(){let e=new Date,n=(r,o=2)=>String(r).padStart(o,"0");return`${n(e.getHours())}:${n(e.getMinutes())}:${n(e.getSeconds())}.${n(e.getMilliseconds(),3)}`}var ca=/\x1b\[[0-9;]*m/g,la=/https?:\/\/[^\s]+/g;function ua(e){return String(e).replace(ca,"").replace(la,"").replace(/\s+$/g,"")}function Jt(e,n,r){let o=ua(r);if(!o)return;let t=n==="info"?e:`${e}:${n}`,i=`${Ao()} [${t}] ${o}`;if(Sr(i),bo)try{bo(i)}catch{}}function fa(){process.on("uncaughtException",e=>Jt("crash","error",`uncaughtException: ${e?.stack||e?.message||e}`)),process.on("unhandledRejection",e=>{let n=e instanceof Error?e.stack||e.message:String(e);Jt("crash","error",`unhandledRejection: ${n}`)}),process.on("exit",e=>Sr(`${Ao()} [exit] code=${e} pid=${process.pid}`))}function ko(){Ro||(Ro=!0,ia(),aa(),Sr(`
|
|
14
14
|
=== SESSION ${new Date().toISOString()} pid=${process.pid} argv=${process.argv.slice(2).join(" ")} ===`),fa())}function _o(e=60){try{return Ee.default.readFileSync(Qt,"utf8").split(`
|
|
15
15
|
`).filter(Boolean).slice(-e)}catch{return[]}}function q(e){return{info:(...n)=>Jt(e,"info",wr(n)),warn:(...n)=>Jt(e,"warn",wr(n)),error:(...n)=>Jt(e,"error",wr(n))}}var Xt=Qt;var Po=(e=0)=>n=>`\x1B[${n+e}m`,Io=(e=0)=>n=>`\x1B[${38+e};5;${n}m`,Oo=(e=0)=>(n,r,o)=>`\x1B[${38+e};2;${n};${r};${o}m`,M={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},fl=Object.keys(M.modifier),pa=Object.keys(M.color),da=Object.keys(M.bgColor),pl=[...pa,...da];function ma(){let e=new Map;for(let[n,r]of Object.entries(M)){for(let[o,t]of Object.entries(r))M[o]={open:`\x1B[${t[0]}m`,close:`\x1B[${t[1]}m`},r[o]=M[o],e.set(t[0],t[1]);Object.defineProperty(M,n,{value:r,enumerable:!1})}return Object.defineProperty(M,"codes",{value:e,enumerable:!1}),M.color.close="\x1B[39m",M.bgColor.close="\x1B[49m",M.color.ansi=Po(),M.color.ansi256=Io(),M.color.ansi16m=Oo(),M.bgColor.ansi=Po(10),M.bgColor.ansi256=Io(10),M.bgColor.ansi16m=Oo(10),Object.defineProperties(M,{rgbToAnsi256:{value(n,r,o){return n===r&&r===o?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(r/255*5)+Math.round(o/255*5)},enumerable:!1},hexToRgb:{value(n){let r=/[a-f\d]{6}|[a-f\d]{3}/i.exec(n.toString(16));if(!r)return[0,0,0];let[o]=r;o.length===3&&(o=[...o].map(i=>i+i).join(""));let t=Number.parseInt(o,16);return[t>>16&255,t>>8&255,t&255]},enumerable:!1},hexToAnsi256:{value:n=>M.rgbToAnsi256(...M.hexToRgb(n)),enumerable:!1},ansi256ToAnsi:{value(n){if(n<8)return 30+n;if(n<16)return 90+(n-8);let r,o,t;if(n>=232)r=((n-232)*10+8)/255,o=r,t=r;else{n-=16;let a=n%36;r=Math.floor(n/36)/5,o=Math.floor(a/6)/5,t=a%6/5}let i=Math.max(r,o,t)*2;if(i===0)return 30;let s=30+(Math.round(t)<<2|Math.round(o)<<1|Math.round(r));return i===2&&(s+=60),s},enumerable:!1},rgbToAnsi:{value:(n,r,o)=>M.ansi256ToAnsi(M.rgbToAnsi256(n,r,o)),enumerable:!1},hexToAnsi:{value:n=>M.ansi256ToAnsi(M.hexToAnsi256(n)),enumerable:!1}}),M}var ha=ma(),he=ha;var Nn=A(require("node:process"),1),$o=A(require("node:os"),1),Er=A(require("node:tty"),1);function ue(e,n=globalThis.Deno?globalThis.Deno.args:Nn.default.argv){let r=e.startsWith("-")?"":e.length===1?"-":"--",o=n.indexOf(r+e),t=n.indexOf("--");return o!==-1&&(t===-1||o<t)}var{env:N}=Nn.default,Mn;ue("no-color")||ue("no-colors")||ue("color=false")||ue("color=never")?Mn=0:(ue("color")||ue("colors")||ue("color=true")||ue("color=always"))&&(Mn=1);function ga(){if("FORCE_COLOR"in N)return N.FORCE_COLOR==="true"?1:N.FORCE_COLOR==="false"?0:N.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(N.FORCE_COLOR,10),3)}function ya(e){return e===0?!1:{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function wa(e,{streamIsTTY:n,sniffFlags:r=!0}={}){let o=ga();o!==void 0&&(Mn=o);let t=r?Mn:o;if(t===0)return 0;if(r){if(ue("color=16m")||ue("color=full")||ue("color=truecolor"))return 3;if(ue("color=256"))return 2}if("TF_BUILD"in N&&"AGENT_NAME"in N)return 1;if(e&&!n&&t===void 0)return 0;let i=t||0;if(N.TERM==="dumb")return i;if(Nn.default.platform==="win32"){let s=$o.default.release().split(".");return Number(s[0])>=10&&Number(s[2])>=10586?Number(s[2])>=14931?3:2:1}if("CI"in N)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(s=>s in N)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(s=>s in N)||N.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in N)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(N.TEAMCITY_VERSION)?1:0;if(N.COLORTERM==="truecolor"||N.TERM==="xterm-kitty"||N.TERM==="xterm-ghostty"||N.TERM==="wezterm")return 3;if("TERM_PROGRAM"in N){let s=Number.parseInt((N.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(N.TERM_PROGRAM){case"iTerm.app":return s>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(N.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(N.TERM)||"COLORTERM"in N?1:i}function Co(e,n={}){let r=wa(e,{streamIsTTY:e&&e.isTTY,...n});return ya(r)}var va={stdout:Co({isTTY:Er.default.isatty(1)}),stderr:Co({isTTY:Er.default.isatty(2)})},Lo=va;function Mo(e,n,r){let o=e.indexOf(n);if(o===-1)return e;let t=n.length,i=0,s="";do s+=e.slice(i,o)+n+r,i=o+t,o=e.indexOf(n,i);while(o!==-1);return s+=e.slice(i),s}function No(e,n,r,o){let t=0,i="";do{let s=e[o-1]==="\r";i+=e.slice(t,s?o-1:o)+n+(s?`\r
|
|
@@ -71,7 +71,7 @@ StandardError=append:${Hn}
|
|
|
71
71
|
|
|
72
72
|
[Install]
|
|
73
73
|
WantedBy=default.target
|
|
74
|
-
`}function Na(e){try{return(0,it.execFileSync)("systemctl",["--user",...e],{stdio:"ignore"}),!0}catch{return!1}}function Da(){return(0,$.existsSync)(J.linux)||(0,$.existsSync)(J.linuxSystemd)}async function Fa(){try{if(process.platform==="darwin")return Ia();if(process.platform==="win32")return await $a();if(process.platform==="linux")return Da()}catch{}return!1}async function Jo(){try{if(process.platform==="win32"&&Ca(),!await Fa())return!1;if(process.platform==="darwin"){let e=Pa(je(),st());return((0,$.existsSync)(J.darwin)?(0,$.readFileSync)(J.darwin,"utf8"):"")===e?!1:((0,$.writeFileSync)(J.darwin,e),!0)}if(process.platform==="win32"){let e=Oa();return((0,$.existsSync)(J.win)?(0,$.readFileSync)(J.win,"utf8"):"")===e?!1:((0,$.writeFileSync)(J.win,e),!0)}if(process.platform==="linux"){if((0,$.existsSync)(J.linuxSystemd)){let e=Ma();return(0,$.readFileSync)(J.linuxSystemd,"utf8")===e?!1:((0,$.writeFileSync)(J.linuxSystemd,e),Na(["daemon-reload"]),!0)}if((0,$.existsSync)(J.linux)){let e=La();return(0,$.readFileSync)(J.linux,"utf8")===e?!1:((0,$.writeFileSync)(J.linux,e),!0)}}}catch{}return!1}var D="https://9remote.cc",Qo=3e4,Xo=500,Pr=300,ge={cmdMs:1e3,pendingApprovalMs:3e3,statsMs:5e3,serverReadyIntervalMs:200,serverReadyTimeoutMs:5e3,bgServerReadyTimeoutMs:15e3,bgServerReadyIntervalMs:300},Ke={intervalMs:2e3,timeoutMs:18e4,fetchTimeoutMs:5e3,dnsTimeoutMs:2e3,maxLogEntries:80,postReadyHoldMs:2e3},oe={killCloudflaredMs:500,killCloudflaredTuiMs:300,serverBootMs:2e3,trayReadyMs:1e3,postReadyHoldMs:2e3,bgSpawnFlushMs:400},Ie={maxLogLines:200,headerWidth:44},bt={checkIntervalMs:36e5,connectCheckDebounceMs:9e5,maxRetry:3,retryDelayMs:3e3,verifyTimeoutMs:15e3,lockTtlMs:3e5,lockFile:"update.lock"},Zo=5e3,zo=2,ei=3e4,fe={orange:m.rgb(230,138,110),orangeDim:m.rgb(200,120,95)};var Ua=Oe.default.dirname((0,ti.fileURLToPath)(__importMetaUrl)),ni=3e3;var Wn=2208,Ir=Oe.default.join(At.default.homedir(),".9remote","cloudflared.pid");function Ba(){try{Ko()}catch{}try{if((0,Q.existsSync)(Ir)){let e=parseInt((0,Q.readFileSync)(Ir,"utf8"));if(Number.isFinite(e))try{process.kill(e)}catch{}try{(0,Q.unlinkSync)(Ir)}catch{}}}catch{}try{process.platform==="win32"?(0,tn.execSync)(`for /f "tokens=5" %a in ('netstat -aon ^| findstr :${Wn}') do taskkill /F /PID %a`,{stdio:"ignore",windowsHide:!0}):(0,tn.execSync)(`lsof -ti:${Wn} | xargs kill -9 2>/dev/null || true`,{stdio:"ignore"})}catch{}if(process.platform==="win32"){let e=Date.now()+1500;for(;Date.now()<e;);}}function ri(){return"2.0.
|
|
74
|
+
`}function Na(e){try{return(0,it.execFileSync)("systemctl",["--user",...e],{stdio:"ignore"}),!0}catch{return!1}}function Da(){return(0,$.existsSync)(J.linux)||(0,$.existsSync)(J.linuxSystemd)}async function Fa(){try{if(process.platform==="darwin")return Ia();if(process.platform==="win32")return await $a();if(process.platform==="linux")return Da()}catch{}return!1}async function Jo(){try{if(process.platform==="win32"&&Ca(),!await Fa())return!1;if(process.platform==="darwin"){let e=Pa(je(),st());return((0,$.existsSync)(J.darwin)?(0,$.readFileSync)(J.darwin,"utf8"):"")===e?!1:((0,$.writeFileSync)(J.darwin,e),!0)}if(process.platform==="win32"){let e=Oa();return((0,$.existsSync)(J.win)?(0,$.readFileSync)(J.win,"utf8"):"")===e?!1:((0,$.writeFileSync)(J.win,e),!0)}if(process.platform==="linux"){if((0,$.existsSync)(J.linuxSystemd)){let e=Ma();return(0,$.readFileSync)(J.linuxSystemd,"utf8")===e?!1:((0,$.writeFileSync)(J.linuxSystemd,e),Na(["daemon-reload"]),!0)}if((0,$.existsSync)(J.linux)){let e=La();return(0,$.readFileSync)(J.linux,"utf8")===e?!1:((0,$.writeFileSync)(J.linux,e),!0)}}}catch{}return!1}var D="https://9remote.cc",Qo=3e4,Xo=500,Pr=300,ge={cmdMs:1e3,pendingApprovalMs:3e3,statsMs:5e3,serverReadyIntervalMs:200,serverReadyTimeoutMs:5e3,bgServerReadyTimeoutMs:15e3,bgServerReadyIntervalMs:300},Ke={intervalMs:2e3,timeoutMs:18e4,fetchTimeoutMs:5e3,dnsTimeoutMs:2e3,maxLogEntries:80,postReadyHoldMs:2e3},oe={killCloudflaredMs:500,killCloudflaredTuiMs:300,serverBootMs:2e3,trayReadyMs:1e3,postReadyHoldMs:2e3,bgSpawnFlushMs:400},Ie={maxLogLines:200,headerWidth:44},bt={checkIntervalMs:36e5,connectCheckDebounceMs:9e5,maxRetry:3,retryDelayMs:3e3,verifyTimeoutMs:15e3,lockTtlMs:3e5,lockFile:"update.lock"},Zo=5e3,zo=2,ei=3e4,fe={orange:m.rgb(230,138,110),orangeDim:m.rgb(200,120,95)};var Ua=Oe.default.dirname((0,ti.fileURLToPath)(__importMetaUrl)),ni=3e3;var Wn=2208,Ir=Oe.default.join(At.default.homedir(),".9remote","cloudflared.pid");function Ba(){try{Ko()}catch{}try{if((0,Q.existsSync)(Ir)){let e=parseInt((0,Q.readFileSync)(Ir,"utf8"));if(Number.isFinite(e))try{process.kill(e)}catch{}try{(0,Q.unlinkSync)(Ir)}catch{}}}catch{}try{process.platform==="win32"?(0,tn.execSync)(`for /f "tokens=5" %a in ('netstat -aon ^| findstr :${Wn}') do taskkill /F /PID %a`,{stdio:"ignore",windowsHide:!0}):(0,tn.execSync)(`lsof -ti:${Wn} | xargs kill -9 2>/dev/null || true`,{stdio:"ignore"})}catch{}if(process.platform==="win32"){let e=Date.now()+1500;for(;Date.now()<e;);}}function ri(){return"2.0.78"}function oi(e,n){let r=e.split(".").map(Number),o=n.split(".").map(Number);for(let t=0;t<3;t++){if(o[t]>r[t])return!0;if(o[t]<r[t])return!1}return!1}function Ha(){return process.env.CODESPACES==="true"||process.env.GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN?"GitHub Codespaces":(0,Q.existsSync)("/.dockerenv")?"Docker":null}function Vn(){Ba()}async function ii(){try{let e=ri();if(!e)return null;let n=await G(pr,{signal:AbortSignal.timeout(ni)});if(!n.ok)return null;let{version:r}=await n.json();return r&&oi(e,r)?{current:e,latest:r}:null}catch{return null}}var Gn=Oe.default.join(re.STATE,bt.lockFile);function ja(){try{if((0,Q.existsSync)(Gn)){let{pid:e,ts:n}=JSON.parse((0,Q.readFileSync)(Gn,"utf8")),r=Date.now()-n<bt.lockTtlMs,o=!1;try{process.kill(e,0),o=!0}catch{}if(r&&o)return!1}}catch{}try{(0,Q.writeFileSync)(Gn,JSON.stringify({pid:process.pid,ts:Date.now()}))}catch{}return!0}async function Ka(){try{let e=await G(pr,{signal:AbortSignal.timeout(ni)});if(!e.ok)return null;let{version:n}=await e.json();return n||null}catch{return null}}function Ga(){try{if(process.env.NREMOTE_REGISTRY)return`--registry ${new URL(process.env.NREMOTE_REGISTRY).origin}`}catch{}return""}function Wa({currentVersion:e,latest:n,agentPid:r}){let o=Go(),t=Ga(),i=je(),s=st(),a=Gn,c=`--prefer-online --no-audit --no-fund ${t}`.trim();if(process.platform==="win32"){let f=Oe.default.join(At.default.tmpdir(),`${ne}-restart.vbs`),p=`@echo off
|
|
75
75
|
setlocal EnableDelayedExpansion
|
|
76
76
|
set "NODE=${i}"
|
|
77
77
|
set "CLI=${s}"
|
package/dist/server.cjs
CHANGED
|
@@ -26,7 +26,7 @@ Content-Length: `+i+`\r
|
|
|
26
26
|
`+Object.keys(n).map(i=>`${i}: ${n[i]}`).join(`\r
|
|
27
27
|
`)+`\r
|
|
28
28
|
\r
|
|
29
|
-
`+t)}function li(r,e,t,n,i,s){if(r.listenerCount("wsClientError")){let o=new Error(i);Error.captureStackTrace(o,li),r.emit("wsClientError",o,t,e)}else No(t,n,i,s)}});var vb=A((a8,gb)=>{"use strict";var mn=nl();mn.createWebSocketStream=ob();mn.Server=mb();mn.Receiver=kd();mn.Sender=Od();mn.WebSocket=mn;mn.WebSocketServer=mn.Server;gb.exports=mn});var Hd=A(ds=>{"use strict";var jd;Object.defineProperty(ds,"__esModule",{value:!0});ds.SessionAwareAdapter=ds.Adapter=void 0;var s2=require("events"),o2=p_(),sl=vb(),a2=typeof((jd=sl?.Sender)===null||jd===void 0?void 0:jd.frame)=="function",ol=class extends s2.EventEmitter{constructor(e){super(),this.nsp=e,this.rooms=new Map,this.sids=new Map,this.encoder=e.server.encoder}init(){}close(){}serverCount(){return Promise.resolve(1)}addAll(e,t){this.sids.has(e)||this.sids.set(e,new Set);for(let n of t)this.sids.get(e).add(n),this.rooms.has(n)||(this.rooms.set(n,new Set),this.emit("create-room",n)),this.rooms.get(n).has(e)||(this.rooms.get(n).add(e),this.emit("join-room",n,e))}del(e,t){this.sids.has(e)&&this.sids.get(e).delete(t),this._del(t,e)}_del(e,t){let n=this.rooms.get(e);n!=null&&(n.delete(t)&&this.emit("leave-room",e,t),n.size===0&&this.rooms.delete(e)&&this.emit("delete-room",e))}delAll(e){if(this.sids.has(e)){for(let t of this.sids.get(e))this._del(t,e);this.sids.delete(e)}}broadcast(e,t){let n=t.flags||{},i={preEncoded:!0,volatile:n.volatile,compress:n.compress};e.nsp=this.nsp.name;let s=this._encode(e,i);this.apply(t,o=>{typeof o.notifyOutgoingListeners=="function"&&o.notifyOutgoingListeners(e),o.client.writeToEngine(s,i)})}broadcastWithAck(e,t,n,i){let s=t.flags||{},o={preEncoded:!0,volatile:s.volatile,compress:s.compress};e.nsp=this.nsp.name,e.id=this.nsp._ids++;let a=this._encode(e,o),c=0;this.apply(t,l=>{c++,l.acks.set(e.id,i),typeof l.notifyOutgoingListeners=="function"&&l.notifyOutgoingListeners(e),l.client.writeToEngine(a,o)}),n(c)}_encode(e,t){let n=this.encoder.encode(e);if(a2&&n.length===1&&typeof n[0]=="string"){let i=Buffer.from("4"+n[0]);t.wsPreEncodedFrame=sl.Sender.frame(i,{readOnly:!1,mask:!1,rsv1:!1,opcode:1,fin:!0})}return n}sockets(e){let t=new Set;return this.apply({rooms:e},n=>{t.add(n.id)}),Promise.resolve(t)}socketRooms(e){return this.sids.get(e)}fetchSockets(e){let t=[];return this.apply(e,n=>{t.push(n)}),Promise.resolve(t)}addSockets(e,t){this.apply(e,n=>{n.join(t)})}delSockets(e,t){this.apply(e,n=>{t.forEach(i=>n.leave(i))})}disconnectSockets(e,t){this.apply(e,n=>{n.disconnect(t)})}apply(e,t){let n=e.rooms,i=this.computeExceptSids(e.except);if(n.size){let s=new Set;for(let o of n)if(this.rooms.has(o))for(let a of this.rooms.get(o)){if(s.has(a)||i.has(a))continue;let c=this.nsp.sockets.get(a);c&&(t(c),s.add(a))}}else for(let[s]of this.sids){if(i.has(s))continue;let o=this.nsp.sockets.get(s);o&&t(o)}}computeExceptSids(e){let t=new Set;if(e&&e.size>0)for(let n of e)this.rooms.has(n)&&this.rooms.get(n).forEach(i=>t.add(i));return t}serverSideEmit(e){console.warn("this adapter does not support the serverSideEmit() functionality")}persistSession(e){}restoreSession(e,t){return null}};ds.Adapter=ol;var Fd=class extends ol{constructor(e){super(e),this.nsp=e,this.sessions=new Map,this.packets=[],this.maxDisconnectionDuration=e.server.opts.connectionStateRecovery.maxDisconnectionDuration,setInterval(()=>{let n=Date.now()-this.maxDisconnectionDuration;this.sessions.forEach((i,s)=>{i.disconnectedAt<n&&this.sessions.delete(s)});for(let i=this.packets.length-1;i>=0;i--)if(this.packets[i].emittedAt<n){this.packets.splice(0,i+1);break}},60*1e3).unref()}persistSession(e){e.disconnectedAt=Date.now(),this.sessions.set(e.pid,e)}restoreSession(e,t){let n=this.sessions.get(e);if(!n)return null;if(n.disconnectedAt+this.maxDisconnectionDuration<Date.now())return this.sessions.delete(e),null;let s=this.packets.findIndex(a=>a.id===t);if(s===-1)return null;let o=[];for(let a=s+1;a<this.packets.length;a++){let c=this.packets[a];c2(n.rooms,c.opts)&&o.push(c.data)}return Promise.resolve(Object.assign(Object.assign({},n),{missedPackets:o}))}broadcast(e,t){var n;let i=e.type===2,s=e.id===void 0,o=((n=t.flags)===null||n===void 0?void 0:n.volatile)===void 0;if(i&&s&&o){let a=(0,o2.yeast)();e.data.push(a),this.packets.push({id:a,opts:t,data:e.data,emittedAt:Date.now()})}super.broadcast(e,t)}};ds.SessionAwareAdapter=Fd;function c2(r,e){let t=e.rooms.size===0||r.some(i=>e.rooms.has(i)),n=r.every(i=>!e.except.has(i));return t&&n}});var yb=A(Ur=>{"use strict";var l2=Ur&&Ur.__rest||function(r,e){var t={};for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,n=Object.getOwnPropertySymbols(r);i<n.length;i++)e.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(r,n[i])&&(t[n[i]]=r[n[i]]);return t};Object.defineProperty(Ur,"__esModule",{value:!0});Ur.ClusterAdapterWithHeartbeat=Ur.ClusterAdapter=Ur.MessageType=void 0;var u2=Hd(),p2=Ae(),f2=require("crypto"),Ee=(0,p2.debug)("socket.io-adapter"),d2="emitter",al=5e3;function ms(){return(0,f2.randomBytes)(8).toString("hex")}var Q;(function(r){r[r.INITIAL_HEARTBEAT=1]="INITIAL_HEARTBEAT",r[r.HEARTBEAT=2]="HEARTBEAT",r[r.BROADCAST=3]="BROADCAST",r[r.SOCKETS_JOIN=4]="SOCKETS_JOIN",r[r.SOCKETS_LEAVE=5]="SOCKETS_LEAVE",r[r.DISCONNECT_SOCKETS=6]="DISCONNECT_SOCKETS",r[r.FETCH_SOCKETS=7]="FETCH_SOCKETS",r[r.FETCH_SOCKETS_RESPONSE=8]="FETCH_SOCKETS_RESPONSE",r[r.SERVER_SIDE_EMIT=9]="SERVER_SIDE_EMIT",r[r.SERVER_SIDE_EMIT_RESPONSE=10]="SERVER_SIDE_EMIT_RESPONSE",r[r.BROADCAST_CLIENT_COUNT=11]="BROADCAST_CLIENT_COUNT",r[r.BROADCAST_ACK=12]="BROADCAST_ACK",r[r.ADAPTER_CLOSE=13]="ADAPTER_CLOSE"})(Q||(Ur.MessageType=Q={}));function ui(r){return{rooms:[...r.rooms],except:[...r.except],flags:r.flags}}function hs(r){return{rooms:new Set(r.rooms),except:new Set(r.except),flags:r.flags}}var cl=class extends u2.Adapter{constructor(e){super(e),this.requests=new Map,this.ackRequests=new Map,this.uid=ms()}onMessage(e,t){if(e.uid===this.uid)return Ee("[%s] ignore message from self",this.uid);if(e.nsp!==this.nsp.name)return Ee("[%s] ignore message from another namespace (%s)",this.uid,e.nsp);switch(Ee("[%s] new event of type %d from %s",this.uid,e.type,e.uid),e.type){case Q.BROADCAST:{if(e.data.requestId!==void 0)super.broadcastWithAck(e.data.packet,hs(e.data.opts),i=>{Ee("[%s] waiting for %d client acknowledgements",this.uid,i),this.publishResponse(e.uid,{type:Q.BROADCAST_CLIENT_COUNT,data:{requestId:e.data.requestId,clientCount:i}})},i=>{Ee("[%s] received acknowledgement with value %j",this.uid,i),this.publishResponse(e.uid,{type:Q.BROADCAST_ACK,data:{requestId:e.data.requestId,packet:i}})});else{let i=e.data.packet,s=hs(e.data.opts);this.addOffsetIfNecessary(i,s,t),super.broadcast(i,s)}break}case Q.SOCKETS_JOIN:super.addSockets(hs(e.data.opts),e.data.rooms);break;case Q.SOCKETS_LEAVE:super.delSockets(hs(e.data.opts),e.data.rooms);break;case Q.DISCONNECT_SOCKETS:super.disconnectSockets(hs(e.data.opts),e.data.close);break;case Q.FETCH_SOCKETS:{Ee("[%s] calling fetchSockets with opts %j",this.uid,e.data.opts),super.fetchSockets(hs(e.data.opts)).then(n=>{this.publishResponse(e.uid,{type:Q.FETCH_SOCKETS_RESPONSE,data:{requestId:e.data.requestId,sockets:n.map(i=>{let s=i.handshake,{sessionStore:o}=s,a=l2(s,["sessionStore"]);return{id:i.id,handshake:a,rooms:[...i.rooms],data:i.data}})}})});break}case Q.SERVER_SIDE_EMIT:{let n=e.data.packet;if(!(e.data.requestId!==void 0)){this.nsp._onServerSideEmit(n);return}let s=!1,o=a=>{s||(s=!0,Ee("[%s] calling acknowledgement with %j",this.uid,a),this.publishResponse(e.uid,{type:Q.SERVER_SIDE_EMIT_RESPONSE,data:{requestId:e.data.requestId,packet:a}}))};this.nsp._onServerSideEmit([...n,o]);break}case Q.BROADCAST_CLIENT_COUNT:case Q.BROADCAST_ACK:case Q.FETCH_SOCKETS_RESPONSE:case Q.SERVER_SIDE_EMIT_RESPONSE:this.onResponse(e);break;default:Ee("[%s] unknown message type: %s",this.uid,e.type)}}onResponse(e){var t,n;let i=e.data.requestId;switch(Ee("[%s] received response %s to request %s",this.uid,e.type,i),e.type){case Q.BROADCAST_CLIENT_COUNT:{(t=this.ackRequests.get(i))===null||t===void 0||t.clientCountCallback(e.data.clientCount);break}case Q.BROADCAST_ACK:{(n=this.ackRequests.get(i))===null||n===void 0||n.ack(e.data.packet);break}case Q.FETCH_SOCKETS_RESPONSE:{let s=this.requests.get(i);if(!s)return;s.current++,e.data.sockets.forEach(o=>s.responses.push(o)),s.current===s.expected&&(clearTimeout(s.timeout),s.resolve(s.responses),this.requests.delete(i));break}case Q.SERVER_SIDE_EMIT_RESPONSE:{let s=this.requests.get(i);if(!s)return;s.current++,s.responses.push(e.data.packet),s.current===s.expected&&(clearTimeout(s.timeout),s.resolve(null,s.responses),this.requests.delete(i));break}default:Ee("[%s] unknown response type: %s",this.uid,e.type)}}async broadcast(e,t){var n;if(!((n=t.flags)===null||n===void 0?void 0:n.local))try{let s=await this.publishAndReturnOffset({type:Q.BROADCAST,data:{packet:e,opts:ui(t)}});this.addOffsetIfNecessary(e,t,s)}catch(s){return Ee("[%s] error while broadcasting message: %s",this.uid,s.message)}super.broadcast(e,t)}addOffsetIfNecessary(e,t,n){var i;if(!this.nsp.server.opts.connectionStateRecovery)return;let s=e.type===2,o=e.id===void 0,a=((i=t.flags)===null||i===void 0?void 0:i.volatile)===void 0;s&&o&&a&&e.data.push(n)}broadcastWithAck(e,t,n,i){var s;if(!((s=t?.flags)===null||s===void 0?void 0:s.local)){let a=ms();this.ackRequests.set(a,{clientCountCallback:n,ack:i}),this.publish({type:Q.BROADCAST,data:{packet:e,requestId:a,opts:ui(t)}}),setTimeout(()=>{this.ackRequests.delete(a)},t.flags.timeout)}super.broadcastWithAck(e,t,n,i)}async addSockets(e,t){var n;if(!((n=e.flags)===null||n===void 0?void 0:n.local))try{await this.publishAndReturnOffset({type:Q.SOCKETS_JOIN,data:{opts:ui(e),rooms:t}})}catch(s){Ee("[%s] error while publishing message: %s",this.uid,s.message)}super.addSockets(e,t)}async delSockets(e,t){var n;if(!((n=e.flags)===null||n===void 0?void 0:n.local))try{await this.publishAndReturnOffset({type:Q.SOCKETS_LEAVE,data:{opts:ui(e),rooms:t}})}catch(s){Ee("[%s] error while publishing message: %s",this.uid,s.message)}super.delSockets(e,t)}async disconnectSockets(e,t){var n;if(!((n=e.flags)===null||n===void 0?void 0:n.local))try{await this.publishAndReturnOffset({type:Q.DISCONNECT_SOCKETS,data:{opts:ui(e),close:t}})}catch(s){Ee("[%s] error while publishing message: %s",this.uid,s.message)}super.disconnectSockets(e,t)}async fetchSockets(e){var t;let[n,i]=await Promise.all([super.fetchSockets(e),this.serverCount()]),s=i-1;if(!((t=e.flags)===null||t===void 0)&&t.local||s<=0)return n;let o=ms();return new Promise((a,c)=>{let l=setTimeout(()=>{let f=this.requests.get(o);f&&(c(new Error(`timeout reached: only ${f.current} responses received out of ${f.expected}`)),this.requests.delete(o))},e.flags.timeout||al),u={type:Q.FETCH_SOCKETS,resolve:a,timeout:l,current:0,expected:s,responses:n};this.requests.set(o,u),this.publish({type:Q.FETCH_SOCKETS,data:{opts:ui(e),requestId:o}})})}async serverSideEmit(e){if(!(typeof e[e.length-1]=="function"))return this.publish({type:Q.SERVER_SIDE_EMIT,data:{packet:e}});let n=e.pop(),i=await this.serverCount()-1;if(Ee('[%s] waiting for %d responses to "serverSideEmit" request',this.uid,i),i<=0)return n(null,[]);let s=ms(),o=setTimeout(()=>{let c=this.requests.get(s);c&&(n(new Error(`timeout reached: only ${c.current} responses received out of ${c.expected}`),c.responses),this.requests.delete(s))},al),a={type:Q.SERVER_SIDE_EMIT,resolve:n,timeout:o,current:0,expected:i,responses:[]};this.requests.set(s,a),this.publish({type:Q.SERVER_SIDE_EMIT,data:{requestId:s,packet:e}})}publish(e){Ee("[%s] sending message %s",this.uid,e.type),this.publishAndReturnOffset(e).catch(t=>{Ee("[%s] error while publishing message: %s",this.uid,t)})}publishAndReturnOffset(e){return e.uid=this.uid,e.nsp=this.nsp.name,this.doPublish(e)}publishResponse(e,t){t.uid=this.uid,t.nsp=this.nsp.name,Ee("[%s] sending response %s to %s",this.uid,t.type,e),this.doPublishResponse(e,t).catch(n=>{Ee("[%s] error while publishing response: %s",this.uid,n)})}};Ur.ClusterAdapter=cl;var qd=class extends cl{constructor(e,t){super(e),this.nodesMap=new Map,this.customRequests=new Map,this._opts=Object.assign({heartbeatInterval:5e3,heartbeatTimeout:1e4},t),this.cleanupTimer=setInterval(()=>{let n=Date.now();this.nodesMap.forEach((i,s)=>{n-i>this._opts.heartbeatTimeout&&(Ee("[%s] node %s seems down",this.uid,s),this.removeNode(s))})},1e3)}init(){this.publish({type:Q.INITIAL_HEARTBEAT})}scheduleHeartbeat(){this.heartbeatTimer?this.heartbeatTimer.refresh():this.heartbeatTimer=setTimeout(()=>{this.publish({type:Q.HEARTBEAT})},this._opts.heartbeatInterval)}close(){this.publish({type:Q.ADAPTER_CLOSE}),clearTimeout(this.heartbeatTimer),this.cleanupTimer&&clearInterval(this.cleanupTimer)}onMessage(e,t){if(e.uid===this.uid)return Ee("[%s] ignore message from self",this.uid);switch(e.uid&&e.uid!==d2&&this.nodesMap.set(e.uid,Date.now()),e.type){case Q.INITIAL_HEARTBEAT:this.publish({type:Q.HEARTBEAT});break;case Q.HEARTBEAT:break;case Q.ADAPTER_CLOSE:this.removeNode(e.uid);break;default:super.onMessage(e,t)}}serverCount(){return Promise.resolve(1+this.nodesMap.size)}publish(e){return this.scheduleHeartbeat(),super.publish(e)}async serverSideEmit(e){if(!(typeof e[e.length-1]=="function"))return this.publish({type:Q.SERVER_SIDE_EMIT,data:{packet:e}});let n=e.pop(),i=this.nodesMap.size;if(Ee('[%s] waiting for %d responses to "serverSideEmit" request',this.uid,i),i<=0)return n(null,[]);let s=ms(),o=setTimeout(()=>{let c=this.customRequests.get(s);c&&(n(new Error(`timeout reached: missing ${c.missingUids.size} responses`),c.responses),this.customRequests.delete(s))},al),a={type:Q.SERVER_SIDE_EMIT,resolve:n,timeout:o,missingUids:new Set([...this.nodesMap.keys()]),responses:[]};this.customRequests.set(s,a),this.publish({type:Q.SERVER_SIDE_EMIT,data:{requestId:s,packet:e}})}async fetchSockets(e){var t;let[n,i]=await Promise.all([super.fetchSockets({rooms:e.rooms,except:e.except,flags:{local:!0}}),this.serverCount()]),s=i-1;if(!((t=e.flags)===null||t===void 0)&&t.local||s<=0)return n;let o=ms();return new Promise((a,c)=>{let l=setTimeout(()=>{let f=this.customRequests.get(o);f&&(c(new Error(`timeout reached: missing ${f.missingUids.size} responses`)),this.customRequests.delete(o))},e.flags.timeout||al),u={type:Q.FETCH_SOCKETS,resolve:a,timeout:l,missingUids:new Set([...this.nodesMap.keys()]),responses:n};this.customRequests.set(o,u),this.publish({type:Q.FETCH_SOCKETS,data:{opts:ui(e),requestId:o}})})}onResponse(e){let t=e.data.requestId;switch(Ee("[%s] received response %s to request %s",this.uid,e.type,t),e.type){case Q.FETCH_SOCKETS_RESPONSE:{let n=this.customRequests.get(t);if(!n)return;e.data.sockets.forEach(i=>n.responses.push(i)),n.missingUids.delete(e.uid),n.missingUids.size===0&&(clearTimeout(n.timeout),n.resolve(n.responses),this.customRequests.delete(t));break}case Q.SERVER_SIDE_EMIT_RESPONSE:{let n=this.customRequests.get(t);if(!n)return;n.responses.push(e.data.packet),n.missingUids.delete(e.uid),n.missingUids.size===0&&(clearTimeout(n.timeout),n.resolve(null,n.responses),this.customRequests.delete(t));break}default:super.onResponse(e)}}removeNode(e){this.customRequests.forEach((t,n)=>{t.missingUids.delete(e),t.missingUids.size===0&&(clearTimeout(t.timeout),t.type===Q.FETCH_SOCKETS?t.resolve(t.responses):t.type===Q.SERVER_SIDE_EMIT&&t.resolve(null,t.responses),this.customRequests.delete(n))}),this.nodesMap.delete(e)}};Ur.ClusterAdapterWithHeartbeat=qd});var ll=A(pr=>{"use strict";Object.defineProperty(pr,"__esModule",{value:!0});pr.MessageType=pr.ClusterAdapterWithHeartbeat=pr.ClusterAdapter=pr.SessionAwareAdapter=pr.Adapter=void 0;var xb=Hd();Object.defineProperty(pr,"Adapter",{enumerable:!0,get:function(){return xb.Adapter}});Object.defineProperty(pr,"SessionAwareAdapter",{enumerable:!0,get:function(){return xb.SessionAwareAdapter}});var Ud=yb();Object.defineProperty(pr,"ClusterAdapter",{enumerable:!0,get:function(){return Ud.ClusterAdapter}});Object.defineProperty(pr,"ClusterAdapterWithHeartbeat",{enumerable:!0,get:function(){return Ud.ClusterAdapterWithHeartbeat}});Object.defineProperty(pr,"MessageType",{enumerable:!0,get:function(){return Ud.MessageType}})});var wb=A(gs=>{"use strict";var h2=gs&&gs.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(gs,"__esModule",{value:!0});gs.ParentNamespace=void 0;var _b=md(),m2=ll(),g2=h2(Ae()),bb=(0,g2.default)("socket.io:parent-namespace"),ul=class r extends _b.Namespace{constructor(e){super(e,"/_"+r.count++),this.children=new Set}_initAdapter(){this.adapter=new $d(this)}emit(e,...t){return this.children.forEach(n=>{n.emit(e,...t)}),!0}createChild(e){bb("creating child namespace %s",e);let t=new _b.Namespace(this.server,e);if(this._fns.forEach(n=>t.use(n)),this.listeners("connect").forEach(n=>t.on("connect",n)),this.listeners("connection").forEach(n=>t.on("connection",n)),this.children.add(t),this.server._opts.cleanupEmptyChildNamespaces){let n=t._remove;t._remove=i=>{n.call(t,i),t.sockets.size===0&&(bb("closing child namespace %s",e),t.adapter.close(),this.server._nsps.delete(t.name),this.children.delete(t))}}return this.server._nsps.set(e,t),this.server.sockets.emitReserved("new_namespace",t),t}fetchSockets(){throw new Error("fetchSockets() is not supported on parent namespaces")}};gs.ParentNamespace=ul;ul.count=0;var $d=class extends m2.Adapter{broadcast(e,t){this.nsp.children.forEach(n=>{n.adapter.broadcast(e,t)})}}});var Ab=A(fi=>{"use strict";var v2=fi&&fi.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(fi,"__esModule",{value:!0});fi.patchAdapter=x2;fi.restoreAdapter=_2;fi.serveFile=w2;var pi=ll(),Sb=require("fs"),y2=v2(Ae()),pl=(0,y2.default)("socket.io:adapter-uws"),Wd="",{addAll:Tb,del:Cb,broadcast:kb}=pi.Adapter.prototype;function x2(r){pi.Adapter.prototype.addAll=function(e,t){let n=!this.sids.has(e);Tb.call(this,e,t);let i=this.nsp.sockets.get(e)||this.nsp._preConnectSockets.get(e);if(i){if(i.conn.transport.name==="websocket"){Eb(this.nsp.name,i,n,t);return}n&&i.conn.on("upgrade",()=>{let s=this.sids.get(e);s&&Eb(this.nsp.name,i,n,s)})}},pi.Adapter.prototype.del=function(e,t){Cb.call(this,e,t);let n=this.nsp.sockets.get(e)||this.nsp._preConnectSockets.get(e);if(n&&n.conn.transport.name==="websocket"){let i=n.conn.id,s=n.conn.transport.socket,o=`${this.nsp.name}${Wd}${t}`;pl("unsubscribe connection %s from topic %s",i,o),s.unsubscribe(o)}},pi.Adapter.prototype.broadcast=function(e,t){if(!(t.rooms.size<=1&&t.except.size===0)){kb.call(this,e,t);return}let i=t.flags||{},s={preEncoded:!0,volatile:i.volatile,compress:i.compress};e.nsp=this.nsp.name;let o=this.encoder.encode(e),a=t.rooms.size===0?this.nsp.name:`${this.nsp.name}${Wd}${t.rooms.keys().next().value}`;pl("fast publish to %s",a),o.forEach(c=>{let l=typeof c!="string";r.publish(a,l?c:"4"+c,l)}),this.apply(t,c=>{c.conn.transport.name!=="websocket"&&c.client.writeToEngine(o,s)})}}function Eb(r,e,t,n){let i=e.conn.id,s=e.conn.transport.socket;t&&(pl("subscribe connection %s to topic %s",i,r),s.subscribe(r)),n.forEach(o=>{let a=`${r}${Wd}${o}`;pl("subscribe connection %s to topic %s",i,a),s.subscribe(a)})}function _2(){pi.Adapter.prototype.addAll=Tb,pi.Adapter.prototype.del=Cb,pi.Adapter.prototype.broadcast=kb}var b2=r=>{let{buffer:e,byteOffset:t,byteLength:n}=r;return e.slice(t,t+n)};function w2(r,e){let{size:t}=(0,Sb.statSync)(e),n=(0,Sb.createReadStream)(e),i=()=>!n.destroyed&&n.destroy(),s=a=>{throw i(),a},o=a=>{let c=b2(a);r.cork(()=>{let l=r.getWriteOffset(),[u,f]=r.tryEnd(c,t);!f&&!u&&(n.pause(),r.onWritable(h=>{let[g,x]=r.tryEnd(c.slice(h-l),t);return!x&&g&&n.resume(),g}))})};r.onAborted(i),n.on("data",o).on("error",s).on("end",i)}});var Rb=A((d8,S2)=>{S2.exports={name:"socket.io",version:"4.8.3",description:"node.js realtime framework server",keywords:["realtime","framework","websocket","tcp","events","socket","io"],files:["dist/","client-dist/","wrapper.mjs","!**/*.tsbuildinfo"],directories:{doc:"docs/",example:"example/",lib:"lib/",test:"test/"},type:"commonjs",main:"./dist/index.js",exports:{".":{types:"./dist/index.d.ts",import:"./wrapper.mjs",require:"./dist/index.js"},"./package.json":"./package.json"},types:"./dist/index.d.ts",license:"MIT",homepage:"https://github.com/socketio/socket.io/tree/main/packages/socket.io#readme",repository:{type:"git",url:"git+https://github.com/socketio/socket.io.git"},bugs:{url:"https://github.com/socketio/socket.io/issues"},scripts:{compile:"rimraf ./dist && tsc",test:"npm run format:check && npm run compile && npm run test:types && npm run test:unit","test:types":"tsd","test:unit":"nyc mocha --import=tsx --reporter spec --slow 200 --bail --timeout 10000 test/index.ts","format:check":'prettier --check "lib/**/*.ts" "test/**/*.ts"',"format:fix":'prettier --write "lib/**/*.ts" "test/**/*.ts"',prepack:"npm run compile"},dependencies:{accepts:"~1.3.4",base64id:"~2.0.0",cors:"~2.8.5",debug:"~4.4.1","engine.io":"~6.6.0","socket.io-adapter":"~2.5.2","socket.io-parser":"~4.2.4"},contributors:[{name:"Guillermo Rauch",email:"rauchg@gmail.com"},{name:"Arnout Kazemier",email:"info@3rd-eden.com"},{name:"Vladimir Dronnikov",email:"dronnikov@gmail.com"},{name:"Einar Otto Stangvik",email:"einaros@gmail.com"}],engines:{node:">=10.2.0"},tsd:{directory:"test"}}});var Bb=A((St,Do)=>{"use strict";var E2=St&&St.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var i=Object.getOwnPropertyDescriptor(e,t);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,i)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),T2=St&&St.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),C2=St&&St.__importStar||function(r){if(r&&r.__esModule)return r;var e={};if(r!=null)for(var t in r)t!=="default"&&Object.prototype.hasOwnProperty.call(r,t)&&E2(e,r,t);return T2(e,r),e},Vd=St&&St.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(St,"__esModule",{value:!0});St.Namespace=St.Socket=St.Server=void 0;var k2=Vd(require("http")),A2=require("fs"),Gd=require("zlib"),R2=Qa(),fl=require("stream"),Ob=require("path"),Mb=zx(),O2=r_(),Pb=require("events"),Kd=md();Object.defineProperty(St,"Namespace",{enumerable:!0,get:function(){return Kd.Namespace}});var M2=wb(),Ib=ll(),P2=C2(To()),I2=Vd(Ae()),Lb=dd();Object.defineProperty(St,"Socket",{enumerable:!0,get:function(){return Lb.Socket}});var N2=qc(),zd=Ab(),D2=Vd(Vf()),Rt=(0,I2.default)("socket.io:server"),Nb=Rb().version,Db=/\.map/,vs=class r extends N2.StrictEventEmitter{constructor(e,t={}){super(),this._nsps=new Map,this.parentNsps=new Map,this.parentNamespacesFromRegExp=new Map,typeof e=="object"&&e instanceof Object&&!e.listen&&(t=e,e=void 0),this.path(t.path||"/socket.io"),this.connectTimeout(t.connectTimeout||45e3),this.serveClient(t.serveClient!==!1),this._parser=t.parser||P2,this.encoder=new this._parser.Encoder,this.opts=t,t.connectionStateRecovery?(t.connectionStateRecovery=Object.assign({maxDisconnectionDuration:120*1e3,skipMiddlewares:!0},t.connectionStateRecovery),this.adapter(t.adapter||Ib.SessionAwareAdapter)):this.adapter(t.adapter||Ib.Adapter),t.cleanupEmptyChildNamespaces=!!t.cleanupEmptyChildNamespaces,this.sockets=this.of("/"),(e||typeof e=="number")&&this.attach(e),this.opts.cors&&(this._corsMiddleware=(0,D2.default)(this.opts.cors))}get _opts(){return this.opts}serveClient(e){return arguments.length?(this._serveClient=e,this):this._serveClient}_checkNamespace(e,t,n){if(this.parentNsps.size===0)return n(!1);let i=this.parentNsps.keys(),s=()=>{let o=i.next();if(o.done)return n(!1);o.value(e,t,(a,c)=>{if(a||!c)return s();if(this._nsps.has(e))return Rt("dynamic namespace %s already exists",e),n(this._nsps.get(e));let l=this.parentNsps.get(o.value).createChild(e);Rt("dynamic namespace %s was created",e),n(l)})};s()}path(e){if(!arguments.length)return this._path;this._path=e.replace(/\/$/,"");let t=this._path.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");return this.clientPathRegex=new RegExp("^"+t+"/socket\\.io(\\.msgpack|\\.esm)?(\\.min)?\\.js(\\.map)?(?:\\?|$)"),this}connectTimeout(e){return e===void 0?this._connectTimeout:(this._connectTimeout=e,this)}adapter(e){if(!arguments.length)return this._adapter;this._adapter=e;for(let t of this._nsps.values())t._initAdapter();return this}listen(e,t={}){return this.attach(e,t)}attach(e,t={}){if(typeof e=="function"){let n="You are trying to attach socket.io to an express request handler function. Please pass a http.Server instance.";throw new Error(n)}if(Number(e)==e&&(e=Number(e)),typeof e=="number"){Rt("creating http server and binding to %d",e);let n=e;e=k2.default.createServer((i,s)=>{s.writeHead(404),s.end()}),e.listen(n)}return Object.assign(t,this.opts),t.path=t.path||this._path,this.initEngine(e,t),this}attachApp(e,t={}){Object.assign(t,this.opts),t.path=t.path||this._path,Rt("creating uWebSockets.js-based engine with opts %j",t);let n=new Mb.uServer(t);n.attach(e,t),this.bind(n),this._serveClient&&e.get(`${this._path}/*`,(i,s)=>{if(!this.clientPathRegex.test(s.getUrl())){s.setYield(!0);return}let o=s.getUrl().replace(this._path,"").replace(/\?.*$/,"").replace(/^\//,""),a=Db.test(o),c=a?"map":"source",l='"'+Nb+'"',u="W/"+l,f=s.getHeader("if-none-match");if(f&&(l===f||u===f)){Rt("serve client %s 304",c),i.writeStatus("304 Not Modified"),i.end();return}Rt("serve client %s",c),i.writeHeader("cache-control","public, max-age=0"),i.writeHeader("content-type","application/"+(a?"json":"javascript")+"; charset=utf-8"),i.writeHeader("etag",l);let h=Ob.join(__dirname,"../client-dist/",o);(0,zd.serveFile)(i,h)}),(0,zd.patchAdapter)(e)}initEngine(e,t){Rt("creating engine.io instance with opts %j",t),this.eio=(0,Mb.attach)(e,t),this._serveClient&&this.attachServe(e),this.httpServer=e,this.bind(this.eio)}attachServe(e){Rt("attaching client serving req handler");let t=e.listeners("request").slice(0);e.removeAllListeners("request"),e.on("request",(n,i)=>{if(this.clientPathRegex.test(n.url))this._corsMiddleware?this._corsMiddleware(n,i,()=>{this.serve(n,i)}):this.serve(n,i);else for(let s=0;s<t.length;s++)t[s].call(e,n,i)})}serve(e,t){let n=e.url.replace(this._path,"").replace(/\?.*$/,""),i=Db.test(n),s=i?"map":"source",o='"'+Nb+'"',a="W/"+o,c=e.headers["if-none-match"];if(c&&(o===c||a===c)){Rt("serve client %s 304",s),t.writeHead(304),t.end();return}Rt("serve client %s",s),t.setHeader("Cache-Control","public, max-age=0"),t.setHeader("Content-Type","application/"+(i?"json":"javascript")+"; charset=utf-8"),t.setHeader("ETag",o),r.sendFile(n,e,t)}static sendFile(e,t,n){let i=(0,A2.createReadStream)(Ob.join(__dirname,"../client-dist/",e)),s=R2(t).encodings(["br","gzip","deflate"]),o=a=>{a&&n.end()};switch(s){case"br":n.writeHead(200,{"content-encoding":"br"}),(0,fl.pipeline)(i,(0,Gd.createBrotliCompress)(),n,o);break;case"gzip":n.writeHead(200,{"content-encoding":"gzip"}),(0,fl.pipeline)(i,(0,Gd.createGzip)(),n,o);break;case"deflate":n.writeHead(200,{"content-encoding":"deflate"}),(0,fl.pipeline)(i,(0,Gd.createDeflate)(),n,o);break;default:n.writeHead(200),(0,fl.pipeline)(i,n,o)}}bind(e){return this.engine=e,this.engine.on("connection",this.onconnection.bind(this)),this}onconnection(e){Rt("incoming connection with id %s",e.id);let t=new O2.Client(this,e);return e.protocol===3&&t.connect("/"),this}of(e,t){if(typeof e=="function"||e instanceof RegExp){let i=new M2.ParentNamespace(this);return Rt("initializing parent namespace %s",i.name),typeof e=="function"?this.parentNsps.set(e,i):(this.parentNsps.set((s,o,a)=>a(null,e.test(s)),i),this.parentNamespacesFromRegExp.set(e,i)),t&&i.on("connect",t),i}String(e)[0]!=="/"&&(e="/"+e);let n=this._nsps.get(e);if(!n){for(let[i,s]of this.parentNamespacesFromRegExp)if(i.test(e))return Rt("attaching namespace %s to parent namespace %s",e,i),s.createChild(e);Rt("initializing namespace %s",e),n=new Kd.Namespace(this,e),this._nsps.set(e,n),e!=="/"&&this.sockets.emitReserved("new_namespace",n)}return t&&n.on("connect",t),n}async close(e){if(await Promise.allSettled([...this._nsps.values()].map(async t=>{t.sockets.forEach(n=>{n._onclose("server shutting down")}),await t.adapter.close()})),this.engine.close(),(0,zd.restoreAdapter)(),this.httpServer)return new Promise(t=>{this.httpServer.close(n=>{e&&e(n),n&&Rt("server was not running"),t()})});e&&e()}use(e){return this.sockets.use(e),this}to(e){return this.sockets.to(e)}in(e){return this.sockets.in(e)}except(e){return this.sockets.except(e)}send(...e){return this.sockets.emit("message",...e),this}write(...e){return this.sockets.emit("message",...e),this}serverSideEmit(e,...t){return this.sockets.serverSideEmit(e,...t)}serverSideEmitWithAck(e,...t){return this.sockets.serverSideEmitWithAck(e,...t)}allSockets(){return this.sockets.allSockets()}compress(e){return this.sockets.compress(e)}get volatile(){return this.sockets.volatile}get local(){return this.sockets.local}timeout(e){return this.sockets.timeout(e)}fetchSockets(){return this.sockets.fetchSockets()}socketsJoin(e){return this.sockets.socketsJoin(e)}socketsLeave(e){return this.sockets.socketsLeave(e)}disconnectSockets(e=!1){return this.sockets.disconnectSockets(e)}};St.Server=vs;var L2=Object.keys(Pb.EventEmitter.prototype).filter(function(r){return typeof Pb.EventEmitter.prototype[r]=="function"});L2.forEach(function(r){vs.prototype[r]=function(){return this.sockets[r].apply(this.sockets,arguments)}});Do.exports=(r,e)=>new vs(r,e);Do.exports.Server=vs;Do.exports.Namespace=Kd.Namespace;Do.exports.Socket=Lb.Socket});function Yd(){return Lo=(0,Hb.randomBytes)(32).toString("hex"),Lo}function qb(){return Lo||Yd(),Lo}function Ub(r){return!!r&&typeof r=="string"&&r===Lo}var Hb,Lo,dl=Ce(()=>{Hb=require("crypto"),Lo=null});var zb,ml,$,pt=Ce(()=>{zb={darwin:{capture:"nodeScreenshots",encoder:"sharp",tileSize:128,inputFormat:"rgba"},win32:{capture:"nodeScreenshots",encoder:"sharp",tileSize:256,inputFormat:"rgba"},linux:{capture:"nodeScreenshots",encoder:"sharp",tileSize:256,inputFormat:"rgba"}},ml=zb[process.platform]||zb.linux,$={pipeline:{captureLib:ml.capture,encoder:ml.encoder,inputFormat:ml.inputFormat,tileSize:ml.tileSize,tileFormat:"webp",webpEffort:0,jpegQuality:50,tileConcurrency:6,outputScale:1,adaptiveTiers:[{minEffective:1,outputScale:1,jpegQuality:72},{minEffective:.7,outputScale:.95,jpegQuality:62},{minEffective:.4,outputScale:.8,jpegQuality:52},{minEffective:0,outputScale:.65,jpegQuality:45}],tierHysteresis:.05,checksumSampling:{rowStep:3,colStep:8}},webrtc:{enableWebRTC:!0,enableTurn:!1,turnApiUrl:"https://9remote.cc/api/webrtc/turn-credentials",turnRefreshInterval:1380*60*1e3,dcMaxMessageSize:65536,dcBufferThreshold:262144,iceDisconnectGraceMs:6e3,dcChunkSize:8,dcMaxTilesPerFrame:32,dcReliable:!0,dcOrdered:!1,answerTimeout:1e4,maxControlBuffer:500},robotSettings:{mouseDelay:2,keyboardDelay:2},throttling:{mouseThrottle:8,keyThrottle:25,typeTextThrottle:100,maxTextLength:1e3},resourceManagement:{inactiveTimeout:120*1e3,memoryCheckInterval:6e4,memoryWarningThreshold:1e3,maxTimersPerClient:100,maxChunkTimersPerClient:50,disconnectGraceMs:3e4},streaming:{activeInterval:60,idleInterval:400,idleThreshold:3,actionCaptureDelay:50,chunkSize:32,chunkDelay:5},focus:{paddingTiles:4},displayWake:{enabled:!0,throttleMs:3e4,macDurationSec:5},sleepInhibit:{defaultMode:"never",presets:{"30m":1800*1e3,"1h":3600*1e3,"2h":7200*1e3,"4h":14400*1e3,"24h":1440*60*1e3,never:null}},desktopSwitch:{darwin:{prev:{keyCode:123,mods:"control down"},next:{keyCode:124,mods:"control down"},new:{type:"missionControl"}},win32:{prev:["left",["control","command"]],next:["right",["control","command"]],new:["d",["control","command"]]},linux:{prev:null,next:null,new:null}},logging:{lifecycle:!1,errors:!0,dpiDetection:!1,focus:!1,focusEveryFrames:60,metrics:!1,metricsEveryFrames:30,webrtc:!1}}});var Bo,jo,ve,Xd=Ce(()=>{pt();ji();Bo=()=>$.logging,jo=On("remote"),ve={lifecycle:r=>{Bo().lifecycle&&jo.info(r)},focus:r=>{Bo().focus&&jo.info(r)},dpi:r=>{Bo().dpiDetection&&jo.info(r)},error:(r,e)=>{Bo().errors&&jo.error(`${r} ${e?.message||e||""}`)},warn:r=>{Bo().errors&&jo.warn(r)}}});function Ho(){for(let r of[ie.ROOT,ie.STATE])$r.default.existsSync(r)||$r.default.mkdirSync(r,{recursive:!0})}function eh(){try{return Ho(),$r.default.existsSync(Qd)?JSON.parse($r.default.readFileSync(Qd,"utf8"))||{}:{}}catch{return{}}}function Qb(r){try{Ho();let e={...eh(),...r};return $r.default.writeFileSync(Qd,JSON.stringify(e,null,2),{mode:384}),e}catch(e){return console.error("Error saving settings:",e),null}}function ew(){try{return Ho(),$r.default.existsSync(Zd)?JSON.parse($r.default.readFileSync(Zd,"utf8")):{machineId:null,key:null,name:"Default",createdAt:null}}catch{return{machineId:null,key:null,name:"Default",createdAt:null}}}function qn(r){try{Ho(),$r.default.writeFileSync(G2,JSON.stringify({cmd:r,ts:Date.now()}))}catch{}}function tw(r,e,t="Default"){try{Ho();let n={machineId:r,key:e,name:t,createdAt:new Date().toISOString()};return $r.default.writeFileSync(Zd,JSON.stringify(n,null,2),{mode:384}),n}catch(n){return console.error("Error saving key:",n),null}}var $r,Fo,j8,F8,Zd,G2,Qd,xs=Ce(()=>{$r=K(require("fs"),1),Fo=K(require("path"),1);bt();j8=ie.STATE,F8=Fo.default.join(ie.STATE,"state.json"),Zd=Fo.default.join(ie.ROOT,"keys.json"),G2=Fo.default.join(ie.STATE,"cmd.json"),Qd=Fo.default.join(ie.STATE,"settings.json")});function rw(){return new Promise(r=>{if(process.platform!=="darwin"){r({screenRecording:!0,accessibility:!0});return}let e=!1,t=!1,n=0,i=()=>{++n===2&&r({screenRecording:e,accessibility:t})};(0,qo.execFile)("osascript",["-e",'use framework "ApplicationServices"',"-e",`set checkOptions to current application's NSDictionary's dictionaryWithObject:(false) forKey:("AXTrustedCheckOptionPrompt" as string)`,"-e","return current application's AXIsProcessTrustedWithOptions(checkOptions) as boolean"],{timeout:3e3},(s,o)=>{t=!s&&o.trim()==="true",i()}),(0,qo.exec)(`osascript -e 'use framework "CoreGraphics"' -e "return (current application's CGPreflightScreenCaptureAccess()) as boolean"`,{timeout:3e3},(s,o)=>{e=!s&&o.trim()==="true",i()})})}function nw(r){let e=z2[r];e&&process.platform==="darwin"&&(0,qo.exec)(`open "${e}"`,()=>{})}var qo,z2,iw=Ce(()=>{qo=require("child_process"),z2={screenRecording:"x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture",accessibility:"x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility"}});function V2(){return!process.env.DISPLAY&&!process.env.WAYLAND_DISPLAY}function Wo(){for(let r=sw,e=null;r!==e;e=r,r=Rr.default.dirname(r)){let t=Rr.default.join(r,"package.json");if((0,de.existsSync)(t)){try{let n=JSON.parse((0,de.readFileSync)(t,"utf8"));if(n.name!==Bi)continue;let i=typeof n.bin=="string"?n.bin:n.bin?.[Bi];if(i){let s=Rr.default.resolve(r,i);if((0,de.existsSync)(s))return s}}catch{}break}}return process.argv[1]||Rr.default.resolve(sw,"..","index.js")}function ws(){return process.execPath}function cw(){let r=Rr.default.dirname(ws()),e=["/usr/local/bin","/usr/bin","/bin","/usr/sbin","/sbin","/opt/homebrew/bin"];return e.includes(r)||e.unshift(r),e.join(":")}function th(r){return String(r).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function K2(r,e){let t=[r,e,..._l].map(n=>` <string>${th(n)}</string>`).join(`
|
|
29
|
+
`+t)}function li(r,e,t,n,i,s){if(r.listenerCount("wsClientError")){let o=new Error(i);Error.captureStackTrace(o,li),r.emit("wsClientError",o,t,e)}else No(t,n,i,s)}});var vb=A((a8,gb)=>{"use strict";var mn=nl();mn.createWebSocketStream=ob();mn.Server=mb();mn.Receiver=kd();mn.Sender=Od();mn.WebSocket=mn;mn.WebSocketServer=mn.Server;gb.exports=mn});var Hd=A(ds=>{"use strict";var jd;Object.defineProperty(ds,"__esModule",{value:!0});ds.SessionAwareAdapter=ds.Adapter=void 0;var s2=require("events"),o2=p_(),sl=vb(),a2=typeof((jd=sl?.Sender)===null||jd===void 0?void 0:jd.frame)=="function",ol=class extends s2.EventEmitter{constructor(e){super(),this.nsp=e,this.rooms=new Map,this.sids=new Map,this.encoder=e.server.encoder}init(){}close(){}serverCount(){return Promise.resolve(1)}addAll(e,t){this.sids.has(e)||this.sids.set(e,new Set);for(let n of t)this.sids.get(e).add(n),this.rooms.has(n)||(this.rooms.set(n,new Set),this.emit("create-room",n)),this.rooms.get(n).has(e)||(this.rooms.get(n).add(e),this.emit("join-room",n,e))}del(e,t){this.sids.has(e)&&this.sids.get(e).delete(t),this._del(t,e)}_del(e,t){let n=this.rooms.get(e);n!=null&&(n.delete(t)&&this.emit("leave-room",e,t),n.size===0&&this.rooms.delete(e)&&this.emit("delete-room",e))}delAll(e){if(this.sids.has(e)){for(let t of this.sids.get(e))this._del(t,e);this.sids.delete(e)}}broadcast(e,t){let n=t.flags||{},i={preEncoded:!0,volatile:n.volatile,compress:n.compress};e.nsp=this.nsp.name;let s=this._encode(e,i);this.apply(t,o=>{typeof o.notifyOutgoingListeners=="function"&&o.notifyOutgoingListeners(e),o.client.writeToEngine(s,i)})}broadcastWithAck(e,t,n,i){let s=t.flags||{},o={preEncoded:!0,volatile:s.volatile,compress:s.compress};e.nsp=this.nsp.name,e.id=this.nsp._ids++;let a=this._encode(e,o),c=0;this.apply(t,l=>{c++,l.acks.set(e.id,i),typeof l.notifyOutgoingListeners=="function"&&l.notifyOutgoingListeners(e),l.client.writeToEngine(a,o)}),n(c)}_encode(e,t){let n=this.encoder.encode(e);if(a2&&n.length===1&&typeof n[0]=="string"){let i=Buffer.from("4"+n[0]);t.wsPreEncodedFrame=sl.Sender.frame(i,{readOnly:!1,mask:!1,rsv1:!1,opcode:1,fin:!0})}return n}sockets(e){let t=new Set;return this.apply({rooms:e},n=>{t.add(n.id)}),Promise.resolve(t)}socketRooms(e){return this.sids.get(e)}fetchSockets(e){let t=[];return this.apply(e,n=>{t.push(n)}),Promise.resolve(t)}addSockets(e,t){this.apply(e,n=>{n.join(t)})}delSockets(e,t){this.apply(e,n=>{t.forEach(i=>n.leave(i))})}disconnectSockets(e,t){this.apply(e,n=>{n.disconnect(t)})}apply(e,t){let n=e.rooms,i=this.computeExceptSids(e.except);if(n.size){let s=new Set;for(let o of n)if(this.rooms.has(o))for(let a of this.rooms.get(o)){if(s.has(a)||i.has(a))continue;let c=this.nsp.sockets.get(a);c&&(t(c),s.add(a))}}else for(let[s]of this.sids){if(i.has(s))continue;let o=this.nsp.sockets.get(s);o&&t(o)}}computeExceptSids(e){let t=new Set;if(e&&e.size>0)for(let n of e)this.rooms.has(n)&&this.rooms.get(n).forEach(i=>t.add(i));return t}serverSideEmit(e){console.warn("this adapter does not support the serverSideEmit() functionality")}persistSession(e){}restoreSession(e,t){return null}};ds.Adapter=ol;var Fd=class extends ol{constructor(e){super(e),this.nsp=e,this.sessions=new Map,this.packets=[],this.maxDisconnectionDuration=e.server.opts.connectionStateRecovery.maxDisconnectionDuration,setInterval(()=>{let n=Date.now()-this.maxDisconnectionDuration;this.sessions.forEach((i,s)=>{i.disconnectedAt<n&&this.sessions.delete(s)});for(let i=this.packets.length-1;i>=0;i--)if(this.packets[i].emittedAt<n){this.packets.splice(0,i+1);break}},60*1e3).unref()}persistSession(e){e.disconnectedAt=Date.now(),this.sessions.set(e.pid,e)}restoreSession(e,t){let n=this.sessions.get(e);if(!n)return null;if(n.disconnectedAt+this.maxDisconnectionDuration<Date.now())return this.sessions.delete(e),null;let s=this.packets.findIndex(a=>a.id===t);if(s===-1)return null;let o=[];for(let a=s+1;a<this.packets.length;a++){let c=this.packets[a];c2(n.rooms,c.opts)&&o.push(c.data)}return Promise.resolve(Object.assign(Object.assign({},n),{missedPackets:o}))}broadcast(e,t){var n;let i=e.type===2,s=e.id===void 0,o=((n=t.flags)===null||n===void 0?void 0:n.volatile)===void 0;if(i&&s&&o){let a=(0,o2.yeast)();e.data.push(a),this.packets.push({id:a,opts:t,data:e.data,emittedAt:Date.now()})}super.broadcast(e,t)}};ds.SessionAwareAdapter=Fd;function c2(r,e){let t=e.rooms.size===0||r.some(i=>e.rooms.has(i)),n=r.every(i=>!e.except.has(i));return t&&n}});var yb=A(Ur=>{"use strict";var l2=Ur&&Ur.__rest||function(r,e){var t={};for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,n=Object.getOwnPropertySymbols(r);i<n.length;i++)e.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(r,n[i])&&(t[n[i]]=r[n[i]]);return t};Object.defineProperty(Ur,"__esModule",{value:!0});Ur.ClusterAdapterWithHeartbeat=Ur.ClusterAdapter=Ur.MessageType=void 0;var u2=Hd(),p2=Ae(),f2=require("crypto"),Ee=(0,p2.debug)("socket.io-adapter"),d2="emitter",al=5e3;function ms(){return(0,f2.randomBytes)(8).toString("hex")}var Q;(function(r){r[r.INITIAL_HEARTBEAT=1]="INITIAL_HEARTBEAT",r[r.HEARTBEAT=2]="HEARTBEAT",r[r.BROADCAST=3]="BROADCAST",r[r.SOCKETS_JOIN=4]="SOCKETS_JOIN",r[r.SOCKETS_LEAVE=5]="SOCKETS_LEAVE",r[r.DISCONNECT_SOCKETS=6]="DISCONNECT_SOCKETS",r[r.FETCH_SOCKETS=7]="FETCH_SOCKETS",r[r.FETCH_SOCKETS_RESPONSE=8]="FETCH_SOCKETS_RESPONSE",r[r.SERVER_SIDE_EMIT=9]="SERVER_SIDE_EMIT",r[r.SERVER_SIDE_EMIT_RESPONSE=10]="SERVER_SIDE_EMIT_RESPONSE",r[r.BROADCAST_CLIENT_COUNT=11]="BROADCAST_CLIENT_COUNT",r[r.BROADCAST_ACK=12]="BROADCAST_ACK",r[r.ADAPTER_CLOSE=13]="ADAPTER_CLOSE"})(Q||(Ur.MessageType=Q={}));function ui(r){return{rooms:[...r.rooms],except:[...r.except],flags:r.flags}}function hs(r){return{rooms:new Set(r.rooms),except:new Set(r.except),flags:r.flags}}var cl=class extends u2.Adapter{constructor(e){super(e),this.requests=new Map,this.ackRequests=new Map,this.uid=ms()}onMessage(e,t){if(e.uid===this.uid)return Ee("[%s] ignore message from self",this.uid);if(e.nsp!==this.nsp.name)return Ee("[%s] ignore message from another namespace (%s)",this.uid,e.nsp);switch(Ee("[%s] new event of type %d from %s",this.uid,e.type,e.uid),e.type){case Q.BROADCAST:{if(e.data.requestId!==void 0)super.broadcastWithAck(e.data.packet,hs(e.data.opts),i=>{Ee("[%s] waiting for %d client acknowledgements",this.uid,i),this.publishResponse(e.uid,{type:Q.BROADCAST_CLIENT_COUNT,data:{requestId:e.data.requestId,clientCount:i}})},i=>{Ee("[%s] received acknowledgement with value %j",this.uid,i),this.publishResponse(e.uid,{type:Q.BROADCAST_ACK,data:{requestId:e.data.requestId,packet:i}})});else{let i=e.data.packet,s=hs(e.data.opts);this.addOffsetIfNecessary(i,s,t),super.broadcast(i,s)}break}case Q.SOCKETS_JOIN:super.addSockets(hs(e.data.opts),e.data.rooms);break;case Q.SOCKETS_LEAVE:super.delSockets(hs(e.data.opts),e.data.rooms);break;case Q.DISCONNECT_SOCKETS:super.disconnectSockets(hs(e.data.opts),e.data.close);break;case Q.FETCH_SOCKETS:{Ee("[%s] calling fetchSockets with opts %j",this.uid,e.data.opts),super.fetchSockets(hs(e.data.opts)).then(n=>{this.publishResponse(e.uid,{type:Q.FETCH_SOCKETS_RESPONSE,data:{requestId:e.data.requestId,sockets:n.map(i=>{let s=i.handshake,{sessionStore:o}=s,a=l2(s,["sessionStore"]);return{id:i.id,handshake:a,rooms:[...i.rooms],data:i.data}})}})});break}case Q.SERVER_SIDE_EMIT:{let n=e.data.packet;if(!(e.data.requestId!==void 0)){this.nsp._onServerSideEmit(n);return}let s=!1,o=a=>{s||(s=!0,Ee("[%s] calling acknowledgement with %j",this.uid,a),this.publishResponse(e.uid,{type:Q.SERVER_SIDE_EMIT_RESPONSE,data:{requestId:e.data.requestId,packet:a}}))};this.nsp._onServerSideEmit([...n,o]);break}case Q.BROADCAST_CLIENT_COUNT:case Q.BROADCAST_ACK:case Q.FETCH_SOCKETS_RESPONSE:case Q.SERVER_SIDE_EMIT_RESPONSE:this.onResponse(e);break;default:Ee("[%s] unknown message type: %s",this.uid,e.type)}}onResponse(e){var t,n;let i=e.data.requestId;switch(Ee("[%s] received response %s to request %s",this.uid,e.type,i),e.type){case Q.BROADCAST_CLIENT_COUNT:{(t=this.ackRequests.get(i))===null||t===void 0||t.clientCountCallback(e.data.clientCount);break}case Q.BROADCAST_ACK:{(n=this.ackRequests.get(i))===null||n===void 0||n.ack(e.data.packet);break}case Q.FETCH_SOCKETS_RESPONSE:{let s=this.requests.get(i);if(!s)return;s.current++,e.data.sockets.forEach(o=>s.responses.push(o)),s.current===s.expected&&(clearTimeout(s.timeout),s.resolve(s.responses),this.requests.delete(i));break}case Q.SERVER_SIDE_EMIT_RESPONSE:{let s=this.requests.get(i);if(!s)return;s.current++,s.responses.push(e.data.packet),s.current===s.expected&&(clearTimeout(s.timeout),s.resolve(null,s.responses),this.requests.delete(i));break}default:Ee("[%s] unknown response type: %s",this.uid,e.type)}}async broadcast(e,t){var n;if(!((n=t.flags)===null||n===void 0?void 0:n.local))try{let s=await this.publishAndReturnOffset({type:Q.BROADCAST,data:{packet:e,opts:ui(t)}});this.addOffsetIfNecessary(e,t,s)}catch(s){return Ee("[%s] error while broadcasting message: %s",this.uid,s.message)}super.broadcast(e,t)}addOffsetIfNecessary(e,t,n){var i;if(!this.nsp.server.opts.connectionStateRecovery)return;let s=e.type===2,o=e.id===void 0,a=((i=t.flags)===null||i===void 0?void 0:i.volatile)===void 0;s&&o&&a&&e.data.push(n)}broadcastWithAck(e,t,n,i){var s;if(!((s=t?.flags)===null||s===void 0?void 0:s.local)){let a=ms();this.ackRequests.set(a,{clientCountCallback:n,ack:i}),this.publish({type:Q.BROADCAST,data:{packet:e,requestId:a,opts:ui(t)}}),setTimeout(()=>{this.ackRequests.delete(a)},t.flags.timeout)}super.broadcastWithAck(e,t,n,i)}async addSockets(e,t){var n;if(!((n=e.flags)===null||n===void 0?void 0:n.local))try{await this.publishAndReturnOffset({type:Q.SOCKETS_JOIN,data:{opts:ui(e),rooms:t}})}catch(s){Ee("[%s] error while publishing message: %s",this.uid,s.message)}super.addSockets(e,t)}async delSockets(e,t){var n;if(!((n=e.flags)===null||n===void 0?void 0:n.local))try{await this.publishAndReturnOffset({type:Q.SOCKETS_LEAVE,data:{opts:ui(e),rooms:t}})}catch(s){Ee("[%s] error while publishing message: %s",this.uid,s.message)}super.delSockets(e,t)}async disconnectSockets(e,t){var n;if(!((n=e.flags)===null||n===void 0?void 0:n.local))try{await this.publishAndReturnOffset({type:Q.DISCONNECT_SOCKETS,data:{opts:ui(e),close:t}})}catch(s){Ee("[%s] error while publishing message: %s",this.uid,s.message)}super.disconnectSockets(e,t)}async fetchSockets(e){var t;let[n,i]=await Promise.all([super.fetchSockets(e),this.serverCount()]),s=i-1;if(!((t=e.flags)===null||t===void 0)&&t.local||s<=0)return n;let o=ms();return new Promise((a,c)=>{let l=setTimeout(()=>{let f=this.requests.get(o);f&&(c(new Error(`timeout reached: only ${f.current} responses received out of ${f.expected}`)),this.requests.delete(o))},e.flags.timeout||al),u={type:Q.FETCH_SOCKETS,resolve:a,timeout:l,current:0,expected:s,responses:n};this.requests.set(o,u),this.publish({type:Q.FETCH_SOCKETS,data:{opts:ui(e),requestId:o}})})}async serverSideEmit(e){if(!(typeof e[e.length-1]=="function"))return this.publish({type:Q.SERVER_SIDE_EMIT,data:{packet:e}});let n=e.pop(),i=await this.serverCount()-1;if(Ee('[%s] waiting for %d responses to "serverSideEmit" request',this.uid,i),i<=0)return n(null,[]);let s=ms(),o=setTimeout(()=>{let c=this.requests.get(s);c&&(n(new Error(`timeout reached: only ${c.current} responses received out of ${c.expected}`),c.responses),this.requests.delete(s))},al),a={type:Q.SERVER_SIDE_EMIT,resolve:n,timeout:o,current:0,expected:i,responses:[]};this.requests.set(s,a),this.publish({type:Q.SERVER_SIDE_EMIT,data:{requestId:s,packet:e}})}publish(e){Ee("[%s] sending message %s",this.uid,e.type),this.publishAndReturnOffset(e).catch(t=>{Ee("[%s] error while publishing message: %s",this.uid,t)})}publishAndReturnOffset(e){return e.uid=this.uid,e.nsp=this.nsp.name,this.doPublish(e)}publishResponse(e,t){t.uid=this.uid,t.nsp=this.nsp.name,Ee("[%s] sending response %s to %s",this.uid,t.type,e),this.doPublishResponse(e,t).catch(n=>{Ee("[%s] error while publishing response: %s",this.uid,n)})}};Ur.ClusterAdapter=cl;var qd=class extends cl{constructor(e,t){super(e),this.nodesMap=new Map,this.customRequests=new Map,this._opts=Object.assign({heartbeatInterval:5e3,heartbeatTimeout:1e4},t),this.cleanupTimer=setInterval(()=>{let n=Date.now();this.nodesMap.forEach((i,s)=>{n-i>this._opts.heartbeatTimeout&&(Ee("[%s] node %s seems down",this.uid,s),this.removeNode(s))})},1e3)}init(){this.publish({type:Q.INITIAL_HEARTBEAT})}scheduleHeartbeat(){this.heartbeatTimer?this.heartbeatTimer.refresh():this.heartbeatTimer=setTimeout(()=>{this.publish({type:Q.HEARTBEAT})},this._opts.heartbeatInterval)}close(){this.publish({type:Q.ADAPTER_CLOSE}),clearTimeout(this.heartbeatTimer),this.cleanupTimer&&clearInterval(this.cleanupTimer)}onMessage(e,t){if(e.uid===this.uid)return Ee("[%s] ignore message from self",this.uid);switch(e.uid&&e.uid!==d2&&this.nodesMap.set(e.uid,Date.now()),e.type){case Q.INITIAL_HEARTBEAT:this.publish({type:Q.HEARTBEAT});break;case Q.HEARTBEAT:break;case Q.ADAPTER_CLOSE:this.removeNode(e.uid);break;default:super.onMessage(e,t)}}serverCount(){return Promise.resolve(1+this.nodesMap.size)}publish(e){return this.scheduleHeartbeat(),super.publish(e)}async serverSideEmit(e){if(!(typeof e[e.length-1]=="function"))return this.publish({type:Q.SERVER_SIDE_EMIT,data:{packet:e}});let n=e.pop(),i=this.nodesMap.size;if(Ee('[%s] waiting for %d responses to "serverSideEmit" request',this.uid,i),i<=0)return n(null,[]);let s=ms(),o=setTimeout(()=>{let c=this.customRequests.get(s);c&&(n(new Error(`timeout reached: missing ${c.missingUids.size} responses`),c.responses),this.customRequests.delete(s))},al),a={type:Q.SERVER_SIDE_EMIT,resolve:n,timeout:o,missingUids:new Set([...this.nodesMap.keys()]),responses:[]};this.customRequests.set(s,a),this.publish({type:Q.SERVER_SIDE_EMIT,data:{requestId:s,packet:e}})}async fetchSockets(e){var t;let[n,i]=await Promise.all([super.fetchSockets({rooms:e.rooms,except:e.except,flags:{local:!0}}),this.serverCount()]),s=i-1;if(!((t=e.flags)===null||t===void 0)&&t.local||s<=0)return n;let o=ms();return new Promise((a,c)=>{let l=setTimeout(()=>{let f=this.customRequests.get(o);f&&(c(new Error(`timeout reached: missing ${f.missingUids.size} responses`)),this.customRequests.delete(o))},e.flags.timeout||al),u={type:Q.FETCH_SOCKETS,resolve:a,timeout:l,missingUids:new Set([...this.nodesMap.keys()]),responses:n};this.customRequests.set(o,u),this.publish({type:Q.FETCH_SOCKETS,data:{opts:ui(e),requestId:o}})})}onResponse(e){let t=e.data.requestId;switch(Ee("[%s] received response %s to request %s",this.uid,e.type,t),e.type){case Q.FETCH_SOCKETS_RESPONSE:{let n=this.customRequests.get(t);if(!n)return;e.data.sockets.forEach(i=>n.responses.push(i)),n.missingUids.delete(e.uid),n.missingUids.size===0&&(clearTimeout(n.timeout),n.resolve(n.responses),this.customRequests.delete(t));break}case Q.SERVER_SIDE_EMIT_RESPONSE:{let n=this.customRequests.get(t);if(!n)return;n.responses.push(e.data.packet),n.missingUids.delete(e.uid),n.missingUids.size===0&&(clearTimeout(n.timeout),n.resolve(null,n.responses),this.customRequests.delete(t));break}default:super.onResponse(e)}}removeNode(e){this.customRequests.forEach((t,n)=>{t.missingUids.delete(e),t.missingUids.size===0&&(clearTimeout(t.timeout),t.type===Q.FETCH_SOCKETS?t.resolve(t.responses):t.type===Q.SERVER_SIDE_EMIT&&t.resolve(null,t.responses),this.customRequests.delete(n))}),this.nodesMap.delete(e)}};Ur.ClusterAdapterWithHeartbeat=qd});var ll=A(pr=>{"use strict";Object.defineProperty(pr,"__esModule",{value:!0});pr.MessageType=pr.ClusterAdapterWithHeartbeat=pr.ClusterAdapter=pr.SessionAwareAdapter=pr.Adapter=void 0;var xb=Hd();Object.defineProperty(pr,"Adapter",{enumerable:!0,get:function(){return xb.Adapter}});Object.defineProperty(pr,"SessionAwareAdapter",{enumerable:!0,get:function(){return xb.SessionAwareAdapter}});var Ud=yb();Object.defineProperty(pr,"ClusterAdapter",{enumerable:!0,get:function(){return Ud.ClusterAdapter}});Object.defineProperty(pr,"ClusterAdapterWithHeartbeat",{enumerable:!0,get:function(){return Ud.ClusterAdapterWithHeartbeat}});Object.defineProperty(pr,"MessageType",{enumerable:!0,get:function(){return Ud.MessageType}})});var wb=A(gs=>{"use strict";var h2=gs&&gs.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(gs,"__esModule",{value:!0});gs.ParentNamespace=void 0;var _b=md(),m2=ll(),g2=h2(Ae()),bb=(0,g2.default)("socket.io:parent-namespace"),ul=class r extends _b.Namespace{constructor(e){super(e,"/_"+r.count++),this.children=new Set}_initAdapter(){this.adapter=new $d(this)}emit(e,...t){return this.children.forEach(n=>{n.emit(e,...t)}),!0}createChild(e){bb("creating child namespace %s",e);let t=new _b.Namespace(this.server,e);if(this._fns.forEach(n=>t.use(n)),this.listeners("connect").forEach(n=>t.on("connect",n)),this.listeners("connection").forEach(n=>t.on("connection",n)),this.children.add(t),this.server._opts.cleanupEmptyChildNamespaces){let n=t._remove;t._remove=i=>{n.call(t,i),t.sockets.size===0&&(bb("closing child namespace %s",e),t.adapter.close(),this.server._nsps.delete(t.name),this.children.delete(t))}}return this.server._nsps.set(e,t),this.server.sockets.emitReserved("new_namespace",t),t}fetchSockets(){throw new Error("fetchSockets() is not supported on parent namespaces")}};gs.ParentNamespace=ul;ul.count=0;var $d=class extends m2.Adapter{broadcast(e,t){this.nsp.children.forEach(n=>{n.adapter.broadcast(e,t)})}}});var Ab=A(fi=>{"use strict";var v2=fi&&fi.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(fi,"__esModule",{value:!0});fi.patchAdapter=x2;fi.restoreAdapter=_2;fi.serveFile=w2;var pi=ll(),Sb=require("fs"),y2=v2(Ae()),pl=(0,y2.default)("socket.io:adapter-uws"),Wd="",{addAll:Tb,del:Cb,broadcast:kb}=pi.Adapter.prototype;function x2(r){pi.Adapter.prototype.addAll=function(e,t){let n=!this.sids.has(e);Tb.call(this,e,t);let i=this.nsp.sockets.get(e)||this.nsp._preConnectSockets.get(e);if(i){if(i.conn.transport.name==="websocket"){Eb(this.nsp.name,i,n,t);return}n&&i.conn.on("upgrade",()=>{let s=this.sids.get(e);s&&Eb(this.nsp.name,i,n,s)})}},pi.Adapter.prototype.del=function(e,t){Cb.call(this,e,t);let n=this.nsp.sockets.get(e)||this.nsp._preConnectSockets.get(e);if(n&&n.conn.transport.name==="websocket"){let i=n.conn.id,s=n.conn.transport.socket,o=`${this.nsp.name}${Wd}${t}`;pl("unsubscribe connection %s from topic %s",i,o),s.unsubscribe(o)}},pi.Adapter.prototype.broadcast=function(e,t){if(!(t.rooms.size<=1&&t.except.size===0)){kb.call(this,e,t);return}let i=t.flags||{},s={preEncoded:!0,volatile:i.volatile,compress:i.compress};e.nsp=this.nsp.name;let o=this.encoder.encode(e),a=t.rooms.size===0?this.nsp.name:`${this.nsp.name}${Wd}${t.rooms.keys().next().value}`;pl("fast publish to %s",a),o.forEach(c=>{let l=typeof c!="string";r.publish(a,l?c:"4"+c,l)}),this.apply(t,c=>{c.conn.transport.name!=="websocket"&&c.client.writeToEngine(o,s)})}}function Eb(r,e,t,n){let i=e.conn.id,s=e.conn.transport.socket;t&&(pl("subscribe connection %s to topic %s",i,r),s.subscribe(r)),n.forEach(o=>{let a=`${r}${Wd}${o}`;pl("subscribe connection %s to topic %s",i,a),s.subscribe(a)})}function _2(){pi.Adapter.prototype.addAll=Tb,pi.Adapter.prototype.del=Cb,pi.Adapter.prototype.broadcast=kb}var b2=r=>{let{buffer:e,byteOffset:t,byteLength:n}=r;return e.slice(t,t+n)};function w2(r,e){let{size:t}=(0,Sb.statSync)(e),n=(0,Sb.createReadStream)(e),i=()=>!n.destroyed&&n.destroy(),s=a=>{throw i(),a},o=a=>{let c=b2(a);r.cork(()=>{let l=r.getWriteOffset(),[u,f]=r.tryEnd(c,t);!f&&!u&&(n.pause(),r.onWritable(h=>{let[g,x]=r.tryEnd(c.slice(h-l),t);return!x&&g&&n.resume(),g}))})};r.onAborted(i),n.on("data",o).on("error",s).on("end",i)}});var Rb=A((d8,S2)=>{S2.exports={name:"socket.io",version:"4.8.3",description:"node.js realtime framework server",keywords:["realtime","framework","websocket","tcp","events","socket","io"],files:["dist/","client-dist/","wrapper.mjs","!**/*.tsbuildinfo"],directories:{doc:"docs/",example:"example/",lib:"lib/",test:"test/"},type:"commonjs",main:"./dist/index.js",exports:{".":{types:"./dist/index.d.ts",import:"./wrapper.mjs",require:"./dist/index.js"},"./package.json":"./package.json"},types:"./dist/index.d.ts",license:"MIT",homepage:"https://github.com/socketio/socket.io/tree/main/packages/socket.io#readme",repository:{type:"git",url:"git+https://github.com/socketio/socket.io.git"},bugs:{url:"https://github.com/socketio/socket.io/issues"},scripts:{compile:"rimraf ./dist && tsc",test:"npm run format:check && npm run compile && npm run test:types && npm run test:unit","test:types":"tsd","test:unit":"nyc mocha --import=tsx --reporter spec --slow 200 --bail --timeout 10000 test/index.ts","format:check":'prettier --check "lib/**/*.ts" "test/**/*.ts"',"format:fix":'prettier --write "lib/**/*.ts" "test/**/*.ts"',prepack:"npm run compile"},dependencies:{accepts:"~1.3.4",base64id:"~2.0.0",cors:"~2.8.5",debug:"~4.4.1","engine.io":"~6.6.0","socket.io-adapter":"~2.5.2","socket.io-parser":"~4.2.4"},contributors:[{name:"Guillermo Rauch",email:"rauchg@gmail.com"},{name:"Arnout Kazemier",email:"info@3rd-eden.com"},{name:"Vladimir Dronnikov",email:"dronnikov@gmail.com"},{name:"Einar Otto Stangvik",email:"einaros@gmail.com"}],engines:{node:">=10.2.0"},tsd:{directory:"test"}}});var Bb=A((St,Do)=>{"use strict";var E2=St&&St.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var i=Object.getOwnPropertyDescriptor(e,t);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(r,n,i)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),T2=St&&St.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),C2=St&&St.__importStar||function(r){if(r&&r.__esModule)return r;var e={};if(r!=null)for(var t in r)t!=="default"&&Object.prototype.hasOwnProperty.call(r,t)&&E2(e,r,t);return T2(e,r),e},Vd=St&&St.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(St,"__esModule",{value:!0});St.Namespace=St.Socket=St.Server=void 0;var k2=Vd(require("http")),A2=require("fs"),Gd=require("zlib"),R2=Qa(),fl=require("stream"),Ob=require("path"),Mb=zx(),O2=r_(),Pb=require("events"),Kd=md();Object.defineProperty(St,"Namespace",{enumerable:!0,get:function(){return Kd.Namespace}});var M2=wb(),Ib=ll(),P2=C2(To()),I2=Vd(Ae()),Lb=dd();Object.defineProperty(St,"Socket",{enumerable:!0,get:function(){return Lb.Socket}});var N2=qc(),zd=Ab(),D2=Vd(Vf()),Rt=(0,I2.default)("socket.io:server"),Nb=Rb().version,Db=/\.map/,vs=class r extends N2.StrictEventEmitter{constructor(e,t={}){super(),this._nsps=new Map,this.parentNsps=new Map,this.parentNamespacesFromRegExp=new Map,typeof e=="object"&&e instanceof Object&&!e.listen&&(t=e,e=void 0),this.path(t.path||"/socket.io"),this.connectTimeout(t.connectTimeout||45e3),this.serveClient(t.serveClient!==!1),this._parser=t.parser||P2,this.encoder=new this._parser.Encoder,this.opts=t,t.connectionStateRecovery?(t.connectionStateRecovery=Object.assign({maxDisconnectionDuration:120*1e3,skipMiddlewares:!0},t.connectionStateRecovery),this.adapter(t.adapter||Ib.SessionAwareAdapter)):this.adapter(t.adapter||Ib.Adapter),t.cleanupEmptyChildNamespaces=!!t.cleanupEmptyChildNamespaces,this.sockets=this.of("/"),(e||typeof e=="number")&&this.attach(e),this.opts.cors&&(this._corsMiddleware=(0,D2.default)(this.opts.cors))}get _opts(){return this.opts}serveClient(e){return arguments.length?(this._serveClient=e,this):this._serveClient}_checkNamespace(e,t,n){if(this.parentNsps.size===0)return n(!1);let i=this.parentNsps.keys(),s=()=>{let o=i.next();if(o.done)return n(!1);o.value(e,t,(a,c)=>{if(a||!c)return s();if(this._nsps.has(e))return Rt("dynamic namespace %s already exists",e),n(this._nsps.get(e));let l=this.parentNsps.get(o.value).createChild(e);Rt("dynamic namespace %s was created",e),n(l)})};s()}path(e){if(!arguments.length)return this._path;this._path=e.replace(/\/$/,"");let t=this._path.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");return this.clientPathRegex=new RegExp("^"+t+"/socket\\.io(\\.msgpack|\\.esm)?(\\.min)?\\.js(\\.map)?(?:\\?|$)"),this}connectTimeout(e){return e===void 0?this._connectTimeout:(this._connectTimeout=e,this)}adapter(e){if(!arguments.length)return this._adapter;this._adapter=e;for(let t of this._nsps.values())t._initAdapter();return this}listen(e,t={}){return this.attach(e,t)}attach(e,t={}){if(typeof e=="function"){let n="You are trying to attach socket.io to an express request handler function. Please pass a http.Server instance.";throw new Error(n)}if(Number(e)==e&&(e=Number(e)),typeof e=="number"){Rt("creating http server and binding to %d",e);let n=e;e=k2.default.createServer((i,s)=>{s.writeHead(404),s.end()}),e.listen(n)}return Object.assign(t,this.opts),t.path=t.path||this._path,this.initEngine(e,t),this}attachApp(e,t={}){Object.assign(t,this.opts),t.path=t.path||this._path,Rt("creating uWebSockets.js-based engine with opts %j",t);let n=new Mb.uServer(t);n.attach(e,t),this.bind(n),this._serveClient&&e.get(`${this._path}/*`,(i,s)=>{if(!this.clientPathRegex.test(s.getUrl())){s.setYield(!0);return}let o=s.getUrl().replace(this._path,"").replace(/\?.*$/,"").replace(/^\//,""),a=Db.test(o),c=a?"map":"source",l='"'+Nb+'"',u="W/"+l,f=s.getHeader("if-none-match");if(f&&(l===f||u===f)){Rt("serve client %s 304",c),i.writeStatus("304 Not Modified"),i.end();return}Rt("serve client %s",c),i.writeHeader("cache-control","public, max-age=0"),i.writeHeader("content-type","application/"+(a?"json":"javascript")+"; charset=utf-8"),i.writeHeader("etag",l);let h=Ob.join(__dirname,"../client-dist/",o);(0,zd.serveFile)(i,h)}),(0,zd.patchAdapter)(e)}initEngine(e,t){Rt("creating engine.io instance with opts %j",t),this.eio=(0,Mb.attach)(e,t),this._serveClient&&this.attachServe(e),this.httpServer=e,this.bind(this.eio)}attachServe(e){Rt("attaching client serving req handler");let t=e.listeners("request").slice(0);e.removeAllListeners("request"),e.on("request",(n,i)=>{if(this.clientPathRegex.test(n.url))this._corsMiddleware?this._corsMiddleware(n,i,()=>{this.serve(n,i)}):this.serve(n,i);else for(let s=0;s<t.length;s++)t[s].call(e,n,i)})}serve(e,t){let n=e.url.replace(this._path,"").replace(/\?.*$/,""),i=Db.test(n),s=i?"map":"source",o='"'+Nb+'"',a="W/"+o,c=e.headers["if-none-match"];if(c&&(o===c||a===c)){Rt("serve client %s 304",s),t.writeHead(304),t.end();return}Rt("serve client %s",s),t.setHeader("Cache-Control","public, max-age=0"),t.setHeader("Content-Type","application/"+(i?"json":"javascript")+"; charset=utf-8"),t.setHeader("ETag",o),r.sendFile(n,e,t)}static sendFile(e,t,n){let i=(0,A2.createReadStream)(Ob.join(__dirname,"../client-dist/",e)),s=R2(t).encodings(["br","gzip","deflate"]),o=a=>{a&&n.end()};switch(s){case"br":n.writeHead(200,{"content-encoding":"br"}),(0,fl.pipeline)(i,(0,Gd.createBrotliCompress)(),n,o);break;case"gzip":n.writeHead(200,{"content-encoding":"gzip"}),(0,fl.pipeline)(i,(0,Gd.createGzip)(),n,o);break;case"deflate":n.writeHead(200,{"content-encoding":"deflate"}),(0,fl.pipeline)(i,(0,Gd.createDeflate)(),n,o);break;default:n.writeHead(200),(0,fl.pipeline)(i,n,o)}}bind(e){return this.engine=e,this.engine.on("connection",this.onconnection.bind(this)),this}onconnection(e){Rt("incoming connection with id %s",e.id);let t=new O2.Client(this,e);return e.protocol===3&&t.connect("/"),this}of(e,t){if(typeof e=="function"||e instanceof RegExp){let i=new M2.ParentNamespace(this);return Rt("initializing parent namespace %s",i.name),typeof e=="function"?this.parentNsps.set(e,i):(this.parentNsps.set((s,o,a)=>a(null,e.test(s)),i),this.parentNamespacesFromRegExp.set(e,i)),t&&i.on("connect",t),i}String(e)[0]!=="/"&&(e="/"+e);let n=this._nsps.get(e);if(!n){for(let[i,s]of this.parentNamespacesFromRegExp)if(i.test(e))return Rt("attaching namespace %s to parent namespace %s",e,i),s.createChild(e);Rt("initializing namespace %s",e),n=new Kd.Namespace(this,e),this._nsps.set(e,n),e!=="/"&&this.sockets.emitReserved("new_namespace",n)}return t&&n.on("connect",t),n}async close(e){if(await Promise.allSettled([...this._nsps.values()].map(async t=>{t.sockets.forEach(n=>{n._onclose("server shutting down")}),await t.adapter.close()})),this.engine.close(),(0,zd.restoreAdapter)(),this.httpServer)return new Promise(t=>{this.httpServer.close(n=>{e&&e(n),n&&Rt("server was not running"),t()})});e&&e()}use(e){return this.sockets.use(e),this}to(e){return this.sockets.to(e)}in(e){return this.sockets.in(e)}except(e){return this.sockets.except(e)}send(...e){return this.sockets.emit("message",...e),this}write(...e){return this.sockets.emit("message",...e),this}serverSideEmit(e,...t){return this.sockets.serverSideEmit(e,...t)}serverSideEmitWithAck(e,...t){return this.sockets.serverSideEmitWithAck(e,...t)}allSockets(){return this.sockets.allSockets()}compress(e){return this.sockets.compress(e)}get volatile(){return this.sockets.volatile}get local(){return this.sockets.local}timeout(e){return this.sockets.timeout(e)}fetchSockets(){return this.sockets.fetchSockets()}socketsJoin(e){return this.sockets.socketsJoin(e)}socketsLeave(e){return this.sockets.socketsLeave(e)}disconnectSockets(e=!1){return this.sockets.disconnectSockets(e)}};St.Server=vs;var L2=Object.keys(Pb.EventEmitter.prototype).filter(function(r){return typeof Pb.EventEmitter.prototype[r]=="function"});L2.forEach(function(r){vs.prototype[r]=function(){return this.sockets[r].apply(this.sockets,arguments)}});Do.exports=(r,e)=>new vs(r,e);Do.exports.Server=vs;Do.exports.Namespace=Kd.Namespace;Do.exports.Socket=Lb.Socket});function Yd(){return Lo=(0,Hb.randomBytes)(32).toString("hex"),Lo}function qb(){return Lo||Yd(),Lo}function Ub(r){return!!r&&typeof r=="string"&&r===Lo}var Hb,Lo,dl=Ce(()=>{Hb=require("crypto"),Lo=null});var zb,ml,$,pt=Ce(()=>{zb={darwin:{capture:"nodeScreenshots",encoder:"sharp",tileSize:128,inputFormat:"rgba"},win32:{capture:"nodeScreenshots",encoder:"sharp",tileSize:256,inputFormat:"rgba"},linux:{capture:"nodeScreenshots",encoder:"sharp",tileSize:256,inputFormat:"rgba"}},ml=zb[process.platform]||zb.linux,$={pipeline:{captureLib:ml.capture,encoder:ml.encoder,inputFormat:ml.inputFormat,tileSize:ml.tileSize,tileFormat:"webp",webpEffort:0,jpegQuality:50,tileConcurrency:6,outputScale:1,adaptiveTiers:[{minEffective:1,outputScale:1,jpegQuality:72},{minEffective:.7,outputScale:.95,jpegQuality:62},{minEffective:.4,outputScale:.8,jpegQuality:52},{minEffective:0,outputScale:.65,jpegQuality:45}],tierHysteresis:.05,checksumSampling:{rowStep:3,colStep:8}},webrtc:{enableWebRTC:!0,enableTurn:!1,turnApiUrl:"https://9remote.cc/api/webrtc/turn-credentials",turnRefreshInterval:1380*60*1e3,dcMaxMessageSize:65536,dcBufferThreshold:262144,iceDisconnectGraceMs:6e3,dcChunkSize:8,dcMaxTilesPerFrame:32,dcReliable:!0,dcOrdered:!1,answerTimeout:1e4,maxControlBuffer:500},robotSettings:{mouseDelay:2,keyboardDelay:2},throttling:{mouseThrottle:8,keyThrottle:25,typeTextThrottle:100,maxTextLength:1e3},resourceManagement:{inactiveTimeout:120*1e3,memoryCheckInterval:6e4,memoryWarningThreshold:1e3,maxTimersPerClient:100,maxChunkTimersPerClient:50,disconnectGraceMs:3e4},streaming:{activeInterval:60,idleInterval:400,idleThreshold:3,actionCaptureDelay:50,chunkSize:16,chunkDelay:5},focus:{paddingTiles:4},displayWake:{enabled:!0,throttleMs:3e4,macDurationSec:5},sleepInhibit:{defaultMode:"never",presets:{"30m":1800*1e3,"1h":3600*1e3,"2h":7200*1e3,"4h":14400*1e3,"24h":1440*60*1e3,never:null}},desktopSwitch:{darwin:{prev:{keyCode:123,mods:"control down"},next:{keyCode:124,mods:"control down"},new:{type:"missionControl"}},win32:{prev:["left",["control","command"]],next:["right",["control","command"]],new:["d",["control","command"]]},linux:{prev:null,next:null,new:null}},logging:{lifecycle:!1,errors:!0,dpiDetection:!1,focus:!1,focusEveryFrames:60,metrics:!1,metricsEveryFrames:30,webrtc:!1}}});var Bo,jo,ve,Xd=Ce(()=>{pt();ji();Bo=()=>$.logging,jo=On("remote"),ve={lifecycle:r=>{Bo().lifecycle&&jo.info(r)},focus:r=>{Bo().focus&&jo.info(r)},dpi:r=>{Bo().dpiDetection&&jo.info(r)},error:(r,e)=>{Bo().errors&&jo.error(`${r} ${e?.message||e||""}`)},warn:r=>{Bo().errors&&jo.warn(r)}}});function Ho(){for(let r of[ie.ROOT,ie.STATE])$r.default.existsSync(r)||$r.default.mkdirSync(r,{recursive:!0})}function eh(){try{return Ho(),$r.default.existsSync(Qd)?JSON.parse($r.default.readFileSync(Qd,"utf8"))||{}:{}}catch{return{}}}function Qb(r){try{Ho();let e={...eh(),...r};return $r.default.writeFileSync(Qd,JSON.stringify(e,null,2),{mode:384}),e}catch(e){return console.error("Error saving settings:",e),null}}function ew(){try{return Ho(),$r.default.existsSync(Zd)?JSON.parse($r.default.readFileSync(Zd,"utf8")):{machineId:null,key:null,name:"Default",createdAt:null}}catch{return{machineId:null,key:null,name:"Default",createdAt:null}}}function qn(r){try{Ho(),$r.default.writeFileSync(G2,JSON.stringify({cmd:r,ts:Date.now()}))}catch{}}function tw(r,e,t="Default"){try{Ho();let n={machineId:r,key:e,name:t,createdAt:new Date().toISOString()};return $r.default.writeFileSync(Zd,JSON.stringify(n,null,2),{mode:384}),n}catch(n){return console.error("Error saving key:",n),null}}var $r,Fo,j8,F8,Zd,G2,Qd,xs=Ce(()=>{$r=K(require("fs"),1),Fo=K(require("path"),1);bt();j8=ie.STATE,F8=Fo.default.join(ie.STATE,"state.json"),Zd=Fo.default.join(ie.ROOT,"keys.json"),G2=Fo.default.join(ie.STATE,"cmd.json"),Qd=Fo.default.join(ie.STATE,"settings.json")});function rw(){return new Promise(r=>{if(process.platform!=="darwin"){r({screenRecording:!0,accessibility:!0});return}let e=!1,t=!1,n=0,i=()=>{++n===2&&r({screenRecording:e,accessibility:t})};(0,qo.execFile)("osascript",["-e",'use framework "ApplicationServices"',"-e",`set checkOptions to current application's NSDictionary's dictionaryWithObject:(false) forKey:("AXTrustedCheckOptionPrompt" as string)`,"-e","return current application's AXIsProcessTrustedWithOptions(checkOptions) as boolean"],{timeout:3e3},(s,o)=>{t=!s&&o.trim()==="true",i()}),(0,qo.exec)(`osascript -e 'use framework "CoreGraphics"' -e "return (current application's CGPreflightScreenCaptureAccess()) as boolean"`,{timeout:3e3},(s,o)=>{e=!s&&o.trim()==="true",i()})})}function nw(r){let e=z2[r];e&&process.platform==="darwin"&&(0,qo.exec)(`open "${e}"`,()=>{})}var qo,z2,iw=Ce(()=>{qo=require("child_process"),z2={screenRecording:"x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture",accessibility:"x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility"}});function V2(){return!process.env.DISPLAY&&!process.env.WAYLAND_DISPLAY}function Wo(){for(let r=sw,e=null;r!==e;e=r,r=Rr.default.dirname(r)){let t=Rr.default.join(r,"package.json");if((0,de.existsSync)(t)){try{let n=JSON.parse((0,de.readFileSync)(t,"utf8"));if(n.name!==Bi)continue;let i=typeof n.bin=="string"?n.bin:n.bin?.[Bi];if(i){let s=Rr.default.resolve(r,i);if((0,de.existsSync)(s))return s}}catch{}break}}return process.argv[1]||Rr.default.resolve(sw,"..","index.js")}function ws(){return process.execPath}function cw(){let r=Rr.default.dirname(ws()),e=["/usr/local/bin","/usr/bin","/bin","/usr/sbin","/sbin","/opt/homebrew/bin"];return e.includes(r)||e.unshift(r),e.join(":")}function th(r){return String(r).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function K2(r,e){let t=[r,e,..._l].map(n=>` <string>${th(n)}</string>`).join(`
|
|
30
30
|
`);return`<?xml version="1.0" encoding="UTF-8"?>
|
|
31
31
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
32
32
|
<plist version="1.0">
|
|
@@ -110,7 +110,7 @@ WantedBy=default.target
|
|
|
110
110
|
`:`
|
|
111
111
|
`)+t,i=n+1,n=r.indexOf(`
|
|
112
112
|
`,i)}while(n!==-1);return s+=r.slice(i),s}var{stdout:bv,stderr:wv}=yv,Tp=Symbol("GENERATOR"),Ni=Symbol("STYLER"),so=Symbol("IS_EMPTY"),Sv=["ansi","ansi","ansi256","ansi16m"],Di=Object.create(null),LO=(r,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let t=bv?bv.level:0;r.level=e.level===void 0?t:e.level};var BO=r=>{let e=(...t)=>t.join(" ");return LO(e,r),Object.setPrototypeOf(e,oo.prototype),e};function oo(r){return BO(r)}Object.setPrototypeOf(oo.prototype,Function.prototype);for(let[r,e]of Object.entries(Sr))Di[r]={get(){let t=Ga(this,kp(e.open,e.close,this[Ni]),this[so]);return Object.defineProperty(this,r,{value:t}),t}};Di.visible={get(){let r=Ga(this,this[Ni],!0);return Object.defineProperty(this,"visible",{value:r}),r}};var Cp=(r,e,t,...n)=>r==="rgb"?e==="ansi16m"?Sr[t].ansi16m(...n):e==="ansi256"?Sr[t].ansi256(Sr.rgbToAnsi256(...n)):Sr[t].ansi(Sr.rgbToAnsi(...n)):r==="hex"?Cp("rgb",e,t,...Sr.hexToRgb(...n)):Sr[t][r](...n),jO=["rgb","hex","ansi256"];for(let r of jO){Di[r]={get(){let{level:t}=this;return function(...n){let i=kp(Cp(r,Sv[t],"color",...n),Sr.color.close,this[Ni]);return Ga(this,i,this[so])}}};let e="bg"+r[0].toUpperCase()+r.slice(1);Di[e]={get(){let{level:t}=this;return function(...n){let i=kp(Cp(r,Sv[t],"bgColor",...n),Sr.bgColor.close,this[Ni]);return Ga(this,i,this[so])}}}}var FO=Object.defineProperties(()=>{},{...Di,level:{enumerable:!0,get(){return this[Tp].level},set(r){this[Tp].level=r}}}),kp=(r,e,t)=>{let n,i;return t===void 0?(n=r,i=e):(n=t.openAll+r,i=e+t.closeAll),{open:r,close:e,openAll:n,closeAll:i,parent:t}},Ga=(r,e,t)=>{let n=(...i)=>HO(n,i.length===1?""+i[0]:i.join(" "));return Object.setPrototypeOf(n,FO),n[Tp]=r,n[Ni]=e,n[so]=t,n},HO=(r,e)=>{if(r.level<=0||!e)return r[so]?"":e;let t=r[Ni];if(t===void 0)return e;let{openAll:n,closeAll:i}=t;if(e.includes("\x1B"))for(;t!==void 0;)e=xv(e,t.close,t.open),t=t.parent;let s=e.indexOf(`
|
|
113
|
-
`);return s!==-1&&(e=_v(e,i,n,s)),n+e+i};Object.defineProperties(oo.prototype,Di);var qO=oo(),x4=oo({level:wv?wv.level:0});var ao=qO;Lt();bt();ji();var jb=K(Bb(),1),{Server:Fb,Namespace:h8,Socket:m8}=jb.default;var IA=require("fs"),NA=require("path");bt();dl();var ct={control:"control",binary:"binary"},lt={idle:"idle",connecting:"connecting",open:"open",degraded:"degraded",closed:"closed"},$b={clientApp:{enabled:["ws","rtc"],channels:{control:{strategy:"priority",prefer:"rtc"},binary:{strategy:"priority",prefer:"rtc"}}},remoteDesktop:{enabled:["ws","rtc"],channels:{control:{strategy:"priority",prefer:"ws"},binary:{strategy:"priority",prefer:"rtc"}}}};var ys=class{static id="base";static capabilities={control:!1,binary:!1,signaling:"none"};static priority={control:0,binary:0};constructor(){this._listeners=new Map,this._state=lt.idle}get state(){return this._state}get ready(){return this._state===lt.open}supports(e){return!!this.constructor.capabilities[e]}on(e,t){this._listeners.has(e)||this._listeners.set(e,new Set),this._listeners.get(e).add(t)}off(e,t){this._listeners.get(e)?.delete(t)}_emit(e,...t){let n=this._listeners.get(e);if(n)for(let i of n)i(...t)}_setState(e){this._state!==e&&(this._state=e,this._emit("stateChange",e))}connect(e){throw new Error("Not implemented: connect")}disconnect(){throw new Error("Not implemented: disconnect")}send(e,t){throw new Error("Not implemented: send")}};var hl=class extends ys{static id="ws";static capabilities={control:!0,binary:!0,signaling:"ws"};static priority={control:100,binary:10};constructor(){super(),this._socket=null}get socket(){return this._socket}connect(e){this._socket=e.socket,this._setState(e.socket.connected?lt.open:lt.connecting),e.socket.on("connect",()=>this._setState(lt.open)),e.socket.on("disconnect",()=>this._setState(lt.closed)),e.socket.onAny?.((t,n)=>this._emit("message",{event:t,data:n,source:"ws"}))}disconnect(){this._socket=null,this._setState(lt.closed)}send(e,t){if(!this._socket?.connected)return!1;let n=this._socket._rawEmit||this._socket.emit.bind(this._socket);if(e===ct.control){let{event:i,args:s=[]}=t;return n(i,...s),!0}if(e===ct.binary){let i=this._socket.conn?.transport;return i&&i.writable===!1?!1:(n("tiles-bin-v2",t),!0)}return!1}};var Jb=K(require("node-datachannel"),1);function B2(r,e){return e&&typeof e=="object"&&e.type==="Buffer"&&Array.isArray(e.data)?{__b:Buffer.from(e.data).toString("base64")}:e}function j2(r,e){return e&&typeof e=="object"&&typeof e.__b=="string"?Buffer.from(e.__b,"base64"):e}function Wb(r){return JSON.stringify(r,B2)}function Gb(r){return JSON.parse(typeof r=="string"?r:Buffer.from(r).toString("utf8"),j2)}pt();var Kb=K(require("node:dns/promises"),1),F2=3e4,H2=/\s([0-9a-f-]{8,}\.local)\s/i,Vb=new Map;async function q2(r){let e=Vb.get(r);if(e&&Date.now()-e.ts<F2)return e.ip;try{let{address:t}=await Kb.default.lookup(r);return Vb.set(r,{ip:t,ts:Date.now()}),t}catch{return null}}async function Yb(r){let e=r.match(H2);if(!e)return r;let t=await q2(e[1]);return t?r.replace(e[1],t):null}var{PeerConnection:U2}=Jb.default,$2=[{hostname:"stun.l.google.com",port:19302,type:"Stun"},{hostname:"stun1.l.google.com",port:19302,type:"Stun"},{hostname:"stun2.l.google.com",port:19302,type:"Stun"},{hostname:"stun3.l.google.com",port:19302,type:"Stun"},{hostname:"stun4.l.google.com",port:19302,type:"Stun"},{hostname:"global.stun.twilio.com",port:3478,type:"Stun"},{hostname:"stun.cloudflare.com",port:3478,type:"Stun"}];async function W2(r,e){try{let t=await fetch(r,{headers:{"X-API-Key":e}});if(!t.ok)throw new Error(`HTTP ${t.status}`);let{iceServers:n}=await t.json(),i=[];for(let s of n)for(let o of s.urls)if(o.startsWith("stun:")){let a=o.replace("stun:","").split(":")[0],c=parseInt(o.split(":")[2]||"3478");i.push({hostname:a,port:c,type:"Stun"})}else if(o.startsWith("turn:")||o.startsWith("turns:")){let a=o.startsWith("turns:"),l=o.replace(/^turns?:/,"").split("?")[0],u=l.split(":")[0],f=parseInt(l.split(":")[1]||(a?"5349":"3478")),h=o.includes("transport=tcp")?"Tcp":"Udp";i.push({hostname:u,port:f,type:a?"Tls":"Turn",relayType:h,username:s.username,password:s.credential})}return i}catch(t){return console.error("[WebRtcProtocol] TURN fetch failed:",t.message),null}}var gl=class extends ys{static id="rtc";static capabilities={control:!0,binary:!0,signaling:"external"};static priority={control:50,binary:100};constructor(){super(),this._pc=null,this._dcControl=null,this._dcBinary=null,this._iceServers=$2,this._refreshTimer=null,this._remoteSet=!1,this._pendingCandidates=[],this._signaling=null,this._iceGraceTimer=null}async connect(e){this._ctx=e,this._setState(lt.connecting);let t=e.profile?.rtc||{};t.enableTurn&&e.auth?.apiKey&&t.turnApiUrl&&await this._refreshTurn(t),this._signaling=e.signaling,this._signaling?.on?.(n=>this._handleSignal(n,t))}disconnect(){clearTimeout(this._refreshTimer),this._signaling?.off?.(),this._signaling=null,this._cleanupPeer(),this._setState(lt.closed)}send(e,t){if(e===ct.control){if(!this._dcControl)return!1;try{return this._dcControl.sendMessage(Wb({event:t.event,args:t.args||[],ackId:t.ackId||null})),!0}catch(n){return console.error("[WebRtcProtocol] send control:",n.message),!1}}if(e===ct.binary){if(!this._dcBinary)return!1;try{let n=Array.isArray(t)?t[0]:t,i=$.webrtc.dcBufferThreshold;return this._dcBinary.bufferedAmount()>i?!1:this._dcBinary.sendMessageBinary(n)}catch(n){return console.error("[WebRtcProtocol] send binary:",n.message),!1}}return!1}_handleSignal(e,t){if(e.type==="offer")this._processOffer(e.sdp,t);else if(e.type==="ice"){if(!this._remoteSet||!this._pc){this._pendingCandidates.push({candidate:e.candidate,mid:e.mid||"0"});return}this._addRemoteCandidate(e.candidate,e.mid||"0")}}async _addRemoteCandidate(e,t){try{let n=await Yb(e);if(!n||!this._pc)return;this._pc.addRemoteCandidate(n,t)}catch(n){console.error("[WebRtcProtocol] addRemoteCandidate:",n.message)}}_createPeer(e){try{this._pc?.close()}catch{}this._pc=null,this._dcControl=null,this._dcBinary=null,this._remoteSet=!1,this._pendingCandidates=[],this._iceGraceTimer&&(clearTimeout(this._iceGraceTimer),this._iceGraceTimer=null);let t=this._ctx?.auth?.socketId||"anon",n=new U2(`peer-${t}`,{iceServers:this._iceServers});this._pcState="new",n.onStateChange(i=>{if(this._pcState=i,i==="failed"||i==="closed")this._iceGraceTimer&&(clearTimeout(this._iceGraceTimer),this._iceGraceTimer=null),this._setState(lt.closed);else if(i==="disconnected"){if(this._iceGraceTimer)return;this._iceGraceTimer=setTimeout(()=>{this._iceGraceTimer=null,this._pcState!=="connected"&&this._setState(lt.closed)},$.webrtc.iceDisconnectGraceMs)}else i==="connected"&&this._iceGraceTimer&&(clearTimeout(this._iceGraceTimer),this._iceGraceTimer=null)}),n.onDataChannel(i=>{let s=i.getLabel?.()||"",o=()=>{s==="control"?this._dcControl=i:s==="binary"&&(this._dcBinary=i),this._dcControl&&this._dcBinary&&this._setState(lt.open)};i.onOpen(o),i.onClosed(()=>{s==="control"&&(this._dcControl=null),s==="binary"&&(this._dcBinary=null),!this._dcControl&&!this._dcBinary&&this._setState(lt.closed)}),i.onError(a=>console.error(`[WebRtcProtocol] DC[${s}] error:`,a)),i.onMessage(a=>{if(s!=="control")return;let c;try{c=Gb(a)}catch(l){console.error("[WebRtcProtocol] control parse:",l.message);return}try{this._emit("message",{event:c.event,data:c,source:"rtc"})}catch(l){console.error(`[WebRtcProtocol] handler error event=${c.event}:`,l.message)}})}),this._pc=n}_processOffer(e,t){return this._createPeer(t),new Promise((n,i)=>{this._pc.onLocalDescription((o,a)=>{a==="answer"&&(this._signaling?.send?.({type:"answer",sdp:o}),n())}),this._pc.onLocalCandidate((o,a)=>{o&&this._signaling?.send?.({type:"ice",candidate:o,mid:a})});try{this._pc.setRemoteDescription(e,"offer"),this._remoteSet=!0;for(let{candidate:o,mid:a}of this._pendingCandidates)this._addRemoteCandidate(o,a);this._pendingCandidates=[],this._pc.setLocalDescription()}catch(o){this._signaling?.send?.({type:"error",message:o.message}),i(o)}let s=t?.answerTimeout||1e4;setTimeout(()=>i(new Error("Answer timeout")),s)})}_cleanupPeer(){this._iceGraceTimer&&(clearTimeout(this._iceGraceTimer),this._iceGraceTimer=null);try{this._pc?.close()}catch{}this._pc=null,this._dcControl=null,this._dcBinary=null}async _refreshTurn(e){let t=await W2(e.turnApiUrl,this._ctx.auth.apiKey);t?.length&&(this._iceServers=t,$.logging?.webrtc&&console.log(`[WebRtcProtocol] TURN credentials loaded (${t.length} servers)`)),clearTimeout(this._refreshTimer),this._refreshTimer=setTimeout(()=>this._refreshTurn(e),e.turnRefreshInterval)}};var Xb=new Map;function Jd(r){if(!r?.id)throw new Error("Adapter missing static id");Xb.set(r.id,r)}function Zb(r){return Xb.get(r)}mh();Jd(hl);Jd(gl);var Rl=class{constructor(e,t){let n=t.enableWebRTC?"remoteDesktop":"clientApp",i={...$b[n]};t.enableWebRTC||(i.enabled=["ws"]),i.rtc={enableTurn:!!(t.apiKey&&t.turnApiUrl),turnApiUrl:t.turnApiUrl||null,turnRefreshInterval:t.turnRefreshInterval,dcMaxMessageSize:t.dcMaxMessageSize,answerTimeout:t.answerTimeout},this._profile=i,this._auth={apiKey:t.apiKey||null,socketId:e.id},this._socket=e,this._wsChunkSize=t.wsChunkSize,this._dcChunkSize=t.dcChunkSize,this._dcMaxTilesPerFrame=t.dcMaxTilesPerFrame,this._maxControlBuffer=t.maxControlBuffer,this._adapters=new Map,this._listeners=new Map,this._buffer=[],this._rtcSignalingHandler=null,this._sigListeners=null,this._chunkOffset=0}get type(){return this._pickAdapter(ct.binary)?.constructor.id==="rtc"?"dc":"ws"}async init(){for(let e of this._profile.enabled){let t=Zb(e);if(!t)continue;let n=new t;n.on("stateChange",s=>this._onAdapterStateChange(e,s)),n.on("message",({event:s,data:o,source:a})=>this._dispatch(s,o,a)),this._adapters.set(e,n);let i=this._buildCtx(e);await n.connect(i)}}setupSignaling(e){this._installSignalingListeners()}emit(e,...t){this._sendControl(e,t)}sendTiles(e,t){let{tiles:n,timestamp:i}=e;if(!n?.length)return[];let s=this._pickAdapter(ct.binary),o=i??Date.now();return s?.constructor.id==="rtc"&&t?this._emitTilesRtc(s,n,o,t):this._emitTilesChunked(n,o)}close(){for(let e of this._adapters.values())try{e.disconnect()}catch{}this._adapters.clear(),this._buffer=[]}attachAsBus(e){if(e._rawEmit)return;let t=e.emit.bind(e);e._rawEmit=t;let n=new Set(["error","disconnect","disconnecting","connect","newListener","removeListener"]);e.emit=(i,...s)=>n.has(i)?t(i,...s):(this._sendControl(i,s),!0)}_emitTilesChunked(e,t){let n=this._adapters.get("ws");if(!n?.ready)return[];let i=this._wsChunkSize,s=e.length,o=s>i?this._chunkOffset%s:0;s>i&&(this._chunkOffset=(o+i)%s);let a=[];for(let c=0;c<s;c+=i){let l=[];for(let u=0;u<i&&c+u<s;u++)l.push(e[(o+c+u)%s]);if(n.send(ct.binary,Ts(l,t))===!1)break;a.push(...l)}return a}_emitTilesRtc(e,t,n,i){let s=this._profile.rtc?.dcMaxMessageSize??65536,o=t.length,a=o>this._dcChunkSize?this._chunkOffset%o:0,c=h=>{let g=[];for(let x=0;x<h;x++)g.push(t[(a+x)%o]);return g},l=Math.min(this._dcChunkSize,o);for(;l>1&&i(c(l),n).length>s;)l=Math.floor(l/2);o>l&&(this._chunkOffset=(a+l)%o);let u=this._adapters.get("ws"),f=[];for(let h=0;h<o;h+=l){let g=[];for(let S=0;S<l&&h+S<o;S++)g.push(t[(a+h+S)%o]);let x=i(g,n);if(x.length>s){g.length===1&&u?.ready&&u.send(ct.binary,x)!==!1&&f.push(...g);continue}if(e.send(ct.binary,x)===!1)return f;f.push(...g)}return f}_buildCtx(e){let t={auth:this._auth,profile:this._profile};return e==="ws"&&(t.socket=this._socket),e==="rtc"&&(t.signaling={send:n=>this._sendSignaling(n),on:n=>{this._rtcSignalingHandler=n,this._installSignalingListeners()},off:()=>{this._rtcSignalingHandler=null,this._removeSignalingListeners()}}),t}_onAdapterStateChange(e,t){t===lt.open&&this._flushBuffer()}_pickAdapter(e){let t=this._profile.channels[e];if(!t)return null;let n=[...this._adapters.values()].filter(i=>i.supports(e)&&i.ready);if(t.prefer){let i=n.find(s=>s.constructor.id===t.prefer);if(i)return i}return n.sort((i,s)=>(s.constructor.priority[e]??0)-(i.constructor.priority[e]??0)),n[0]||null}hasReadyAdapter(){return!!(this._pickAdapter(ct.control)||this._pickAdapter(ct.binary))}_sendControl(e,t,n){let i=this._pickAdapter(ct.control);if(!i){this._buffer.push({event:e,args:t,ackId:n}),this._buffer.length>this._maxControlBuffer&&this._buffer.shift();return}i.constructor.id==="rtc"?i.send(ct.control,{event:e,args:t,ackId:n}):i.send(ct.control,{event:e,args:t})}_flushBuffer(){if(!(!this._buffer.length||!this._pickAdapter(ct.control)))for(;this._buffer.length;){let{event:t,args:n,ackId:i}=this._buffer.shift();this._sendControl(t,n,i)}}_dispatch(e,t,n){if(n==="rtc"){let s=Array.isArray(t?.args)?[...t.args]:[],o=t?.ackId;o&&s.push((...l)=>this._sendAck(o,l));let a=this._listeners.get(e);if(a)for(let l of a)l(...s);let c=this._socket.listeners?.(e)||[];for(let l of c)l(...s);return}let i=this._listeners.get(e);if(i)for(let s of i)s(t)}_sendAck(e,t){let n=this._adapters.get("rtc");n?.ready&&n.send(ct.control,{event:"__ack",args:t,ackId:e})}_sendSignaling(e){let t=this._adapters.get("ws");if(t?.ready){t.send(ct.control,{event:this._sigEvent(e.type),args:[this._sigData(e)]});return}console.warn("[ProtocolManager] signaling unavailable (ws down)")}_sigEvent(e){return e==="offer"?"webrtc:offer":e==="answer"?"webrtc:answer":e==="ice"?"webrtc:ice-candidate":"webrtc:error"}_sigData(e){return e.type==="offer"||e.type==="answer"?{sdp:e.sdp}:e.type==="ice"?{candidate:e.candidate,mid:e.mid}:e}_installSignalingListeners(){if(!this._rtcSignalingHandler||this._sigListeners)return;let e=({sdp:n})=>this._rtcSignalingHandler?.({type:"offer",sdp:n}),t=({candidate:n,mid:i})=>this._rtcSignalingHandler?.({type:"ice",candidate:n,mid:i});this._sigListeners={onOffer:e,onIce:t},this._socket.on("webrtc:offer",e),this._socket.on("webrtc:ice-candidate",t)}_removeSignalingListeners(){this._sigListeners&&(this._socket.off("webrtc:offer",this._sigListeners.onOffer),this._socket.off("webrtc:ice-candidate",this._sigListeners.onIce),this._sigListeners=null)}};hi();pt();var GT=require("path"),zT=require("url");var Nl=K(require("net"),1),ce=K(require("fs"),1),he=K(require("path"),1),Jw=K(require("os"),1),Xw=require("child_process"),Zw=require("url");var vh={win32:[{id:"cmd",label:"Command Prompt",path:"cmd.exe",args:[]},{id:"powershell",label:"PowerShell",path:"powershell.exe",args:["-NoLogo"]},{id:"pwsh",label:"PowerShell Core",path:"pwsh.exe",args:["-NoLogo"]}],unix:[{id:"bash",label:"Bash",path:"/bin/bash",args:["-l"]},{id:"zsh",label:"Zsh",path:"/bin/zsh",args:["-l"]},{id:"sh",label:"Sh",path:"/bin/sh",args:["-l"]}]};function Vw(){return process.platform==="win32"?vh.win32:[]}function yh(r){if(process.platform==="win32"){let n=r?vh.win32.find(s=>s.id===r):null;if(n)return n;let i=process.env.COMSPEC;return i?{id:"cmd",label:"Command Prompt",path:i,args:[]}:vh.win32[0]}let e=process.env.SHELL||"/bin/bash",t=e.split("/").pop();return{id:t,label:t,path:e,args:["-l"]}}var _h=he.default.dirname((0,Zw.fileURLToPath)(__importMetaUrl)),xn=he.default.join(Jw.default.homedir(),".9remote"),Jo=process.platform==="win32"?"\\\\.\\pipe\\9remote-pty":he.default.join(xn,"pty-daemon.sock"),Kw=he.default.join(_h,"ptyDaemon.js"),Yw=he.default.join(_h,"ptyDaemon.cjs"),Ol=he.default.join(xn,"daemon");function Qw(r,e){if(ce.default.existsSync(r)){ce.default.mkdirSync(e,{recursive:!0});for(let t of ce.default.readdirSync(r,{withFileTypes:!0})){let n=he.default.join(r,t.name),i=he.default.join(e,t.name);t.isDirectory()?Qw(n,i):t.isFile()&&ce.default.copyFileSync(n,i)}}}function yB(r,e){let t=r;for(let n=0;n<6;n++){let i=he.default.join(t,"node_modules",e);if(ce.default.existsSync(i))return i;let s=he.default.dirname(t);if(s===t)break;t=s}return null}var xB=r=>yB(r,"node-pty");function _B(r){try{if(!ce.default.existsSync(Ol))return;let e=he.default.join(xn,"pids","ptyDaemon.pid"),t=!1;try{let n=parseInt(ce.default.readFileSync(e,"utf8").trim(),10);if(Number.isFinite(n)&&n>0)try{process.kill(n,0),t=!0}catch{}}catch{}if(t)return;for(let n of ce.default.readdirSync(Ol))if(n!==`v${r}`)try{ce.default.rmSync(he.default.join(Ol,n),{recursive:!0,force:!0})}catch{}}catch{}}function bB(r){_B("22");let e=he.default.join(Ol,`v${"22"}`),t=r.endsWith(".js"),n=t?he.default.join(e,"features","terminal"):e,i=he.default.join(n,he.default.basename(r)),s=he.default.join(n,"node_modules","node-pty");if(ce.default.existsSync(i)&&ce.default.existsSync(s))return{script:i,cwd:n};try{if(ce.default.mkdirSync(n,{recursive:!0}),ce.default.copyFileSync(r,i),t){let a=he.default.dirname(r);ce.default.copyFileSync(he.default.join(a,"constants.js"),he.default.join(n,"constants.js"));let c=he.default.join(e,"lib");ce.default.mkdirSync(c,{recursive:!0}),ce.default.copyFileSync(he.default.resolve(a,"..","..","lib","constants.js"),he.default.join(c,"constants.js"))}let o=xB(he.default.dirname(r));return o?(Qw(o,s),{script:i,cwd:n}):null}catch{return null}}var Wr=null,ks=!1,$n=!1,xh="",wB=0,As=new Map,Ml=new Map;function SB(){return++wB}function Zo(r,e){Ml.has(r)||Ml.set(r,[]),Ml.get(r).push(e)}function Xo(r,e){let t=Ml.get(r);if(t)for(let n of t)try{n(e)}catch(i){console.error(`[DaemonClient] Error in ${r} handler:`,i)}}function bh(r){if(!Wr||!ks)return!1;try{return Wr.write(JSON.stringify(r)+`
|
|
113
|
+
`);return s!==-1&&(e=_v(e,i,n,s)),n+e+i};Object.defineProperties(oo.prototype,Di);var qO=oo(),x4=oo({level:wv?wv.level:0});var ao=qO;Lt();bt();ji();var jb=K(Bb(),1),{Server:Fb,Namespace:h8,Socket:m8}=jb.default;var IA=require("fs"),NA=require("path");bt();dl();var ct={control:"control",binary:"binary"},lt={idle:"idle",connecting:"connecting",open:"open",degraded:"degraded",closed:"closed"},$b={clientApp:{enabled:["ws","rtc"],channels:{control:{strategy:"priority",prefer:"rtc"},binary:{strategy:"priority",prefer:"rtc"}}},remoteDesktop:{enabled:["ws","rtc"],channels:{control:{strategy:"priority",prefer:"ws"},binary:{strategy:"priority",prefer:"rtc"}}}};var ys=class{static id="base";static capabilities={control:!1,binary:!1,signaling:"none"};static priority={control:0,binary:0};constructor(){this._listeners=new Map,this._state=lt.idle}get state(){return this._state}get ready(){return this._state===lt.open}supports(e){return!!this.constructor.capabilities[e]}on(e,t){this._listeners.has(e)||this._listeners.set(e,new Set),this._listeners.get(e).add(t)}off(e,t){this._listeners.get(e)?.delete(t)}_emit(e,...t){let n=this._listeners.get(e);if(n)for(let i of n)i(...t)}_setState(e){this._state!==e&&(this._state=e,this._emit("stateChange",e))}connect(e){throw new Error("Not implemented: connect")}disconnect(){throw new Error("Not implemented: disconnect")}send(e,t){throw new Error("Not implemented: send")}};var hl=class extends ys{static id="ws";static capabilities={control:!0,binary:!0,signaling:"ws"};static priority={control:100,binary:10};constructor(){super(),this._socket=null}get socket(){return this._socket}connect(e){this._socket=e.socket,this._setState(e.socket.connected?lt.open:lt.connecting),e.socket.on("connect",()=>this._setState(lt.open)),e.socket.on("disconnect",()=>this._setState(lt.closed)),e.socket.onAny?.((t,n)=>this._emit("message",{event:t,data:n,source:"ws"}))}disconnect(){this._socket=null,this._setState(lt.closed)}send(e,t){if(!this._socket?.connected)return!1;let n=this._socket._rawEmit||this._socket.emit.bind(this._socket);if(e===ct.control){let{event:i,args:s=[]}=t;return n(i,...s),!0}if(e===ct.binary){let i=this._socket.conn?.transport;return i&&i.writable===!1?!1:(n("tiles-bin-v2",t),!0)}return!1}};var Jb=K(require("node-datachannel"),1);function B2(r,e){return e&&typeof e=="object"&&e.type==="Buffer"&&Array.isArray(e.data)?{__b:Buffer.from(e.data).toString("base64")}:e}function j2(r,e){return e&&typeof e=="object"&&typeof e.__b=="string"?Buffer.from(e.__b,"base64"):e}function Wb(r){return JSON.stringify(r,B2)}function Gb(r){return JSON.parse(typeof r=="string"?r:Buffer.from(r).toString("utf8"),j2)}pt();var Kb=K(require("node:dns/promises"),1),F2=3e4,H2=/\s([0-9a-f-]{8,}\.local)\s/i,Vb=new Map;async function q2(r){let e=Vb.get(r);if(e&&Date.now()-e.ts<F2)return e.ip;try{let{address:t}=await Kb.default.lookup(r);return Vb.set(r,{ip:t,ts:Date.now()}),t}catch{return null}}async function Yb(r){let e=r.match(H2);if(!e)return r;let t=await q2(e[1]);return t?r.replace(e[1],t):null}var{PeerConnection:U2}=Jb.default,$2=[{hostname:"stun.l.google.com",port:19302,type:"Stun"},{hostname:"stun1.l.google.com",port:19302,type:"Stun"},{hostname:"stun2.l.google.com",port:19302,type:"Stun"},{hostname:"stun3.l.google.com",port:19302,type:"Stun"},{hostname:"stun4.l.google.com",port:19302,type:"Stun"},{hostname:"global.stun.twilio.com",port:3478,type:"Stun"},{hostname:"stun.cloudflare.com",port:3478,type:"Stun"}];async function W2(r,e){try{let t=await fetch(r,{headers:{"X-API-Key":e}});if(!t.ok)throw new Error(`HTTP ${t.status}`);let{iceServers:n}=await t.json(),i=[];for(let s of n)for(let o of s.urls)if(o.startsWith("stun:")){let a=o.replace("stun:","").split(":")[0],c=parseInt(o.split(":")[2]||"3478");i.push({hostname:a,port:c,type:"Stun"})}else if(o.startsWith("turn:")||o.startsWith("turns:")){let a=o.startsWith("turns:"),l=o.replace(/^turns?:/,"").split("?")[0],u=l.split(":")[0],f=parseInt(l.split(":")[1]||(a?"5349":"3478")),h=o.includes("transport=tcp")?"Tcp":"Udp";i.push({hostname:u,port:f,type:a?"Tls":"Turn",relayType:h,username:s.username,password:s.credential})}return i}catch(t){return console.error("[WebRtcProtocol] TURN fetch failed:",t.message),null}}var gl=class extends ys{static id="rtc";static capabilities={control:!0,binary:!0,signaling:"external"};static priority={control:50,binary:100};constructor(){super(),this._pc=null,this._dcControl=null,this._dcBinary=null,this._iceServers=$2,this._refreshTimer=null,this._remoteSet=!1,this._pendingCandidates=[],this._signaling=null,this._iceGraceTimer=null}async connect(e){this._ctx=e,this._setState(lt.connecting);let t=e.profile?.rtc||{};t.enableTurn&&e.auth?.apiKey&&t.turnApiUrl&&await this._refreshTurn(t),this._signaling=e.signaling,this._signaling?.on?.(n=>this._handleSignal(n,t))}disconnect(){clearTimeout(this._refreshTimer),this._signaling?.off?.(),this._signaling=null,this._cleanupPeer(),this._setState(lt.closed)}send(e,t){if(e===ct.control){if(!this._dcControl)return!1;try{return this._dcControl.sendMessage(Wb({event:t.event,args:t.args||[],ackId:t.ackId||null})),!0}catch(n){return console.error("[WebRtcProtocol] send control:",n.message),!1}}if(e===ct.binary){if(!this._dcBinary)return!1;try{let n=Array.isArray(t)?t[0]:t,i=$.webrtc.dcBufferThreshold;return this._dcBinary.bufferedAmount()>i?!1:this._dcBinary.sendMessageBinary(n)}catch(n){return console.error("[WebRtcProtocol] send binary:",n.message),!1}}return!1}_handleSignal(e,t){if(e.type==="offer")this._processOffer(e.sdp,t);else if(e.type==="ice"){if(!this._remoteSet||!this._pc){this._pendingCandidates.push({candidate:e.candidate,mid:e.mid||"0"});return}this._addRemoteCandidate(e.candidate,e.mid||"0")}}async _addRemoteCandidate(e,t){try{let n=await Yb(e);if(!n||!this._pc)return;this._pc.addRemoteCandidate(n,t)}catch(n){console.error("[WebRtcProtocol] addRemoteCandidate:",n.message)}}_createPeer(e){try{this._pc?.close()}catch{}this._pc=null,this._dcControl=null,this._dcBinary=null,this._remoteSet=!1,this._pendingCandidates=[],this._iceGraceTimer&&(clearTimeout(this._iceGraceTimer),this._iceGraceTimer=null);let t=this._ctx?.auth?.socketId||"anon",n=new U2(`peer-${t}`,{iceServers:this._iceServers});this._pcState="new",n.onStateChange(i=>{if(this._pcState=i,i==="failed"||i==="closed")this._iceGraceTimer&&(clearTimeout(this._iceGraceTimer),this._iceGraceTimer=null),this._setState(lt.closed);else if(i==="disconnected"){if(this._iceGraceTimer)return;this._iceGraceTimer=setTimeout(()=>{this._iceGraceTimer=null,this._pcState!=="connected"&&this._setState(lt.closed)},$.webrtc.iceDisconnectGraceMs)}else i==="connected"&&this._iceGraceTimer&&(clearTimeout(this._iceGraceTimer),this._iceGraceTimer=null)}),n.onDataChannel(i=>{let s=i.getLabel?.()||"",o=()=>{s==="control"?this._dcControl=i:s==="binary"&&(this._dcBinary=i),this._dcControl&&this._dcBinary&&this._setState(lt.open)};i.onOpen(o),i.onClosed(()=>{s==="control"&&(this._dcControl=null),s==="binary"&&(this._dcBinary=null),!this._dcControl&&!this._dcBinary&&this._setState(lt.closed)}),i.onError(a=>console.error(`[WebRtcProtocol] DC[${s}] error:`,a)),i.onMessage(a=>{if(s!=="control")return;let c;try{c=Gb(a)}catch(l){console.error("[WebRtcProtocol] control parse:",l.message);return}try{this._emit("message",{event:c.event,data:c,source:"rtc"})}catch(l){console.error(`[WebRtcProtocol] handler error event=${c.event}:`,l.message)}})}),this._pc=n}_processOffer(e,t){return this._createPeer(t),new Promise((n,i)=>{this._pc.onLocalDescription((o,a)=>{a==="answer"&&(this._signaling?.send?.({type:"answer",sdp:o}),n())}),this._pc.onLocalCandidate((o,a)=>{o&&this._signaling?.send?.({type:"ice",candidate:o,mid:a})});try{this._pc.setRemoteDescription(e,"offer"),this._remoteSet=!0;for(let{candidate:o,mid:a}of this._pendingCandidates)this._addRemoteCandidate(o,a);this._pendingCandidates=[],this._pc.setLocalDescription()}catch(o){this._signaling?.send?.({type:"error",message:o.message}),i(o)}let s=t?.answerTimeout||1e4;setTimeout(()=>i(new Error("Answer timeout")),s)})}_cleanupPeer(){this._iceGraceTimer&&(clearTimeout(this._iceGraceTimer),this._iceGraceTimer=null);try{this._pc?.close()}catch{}this._pc=null,this._dcControl=null,this._dcBinary=null}async _refreshTurn(e){let t=await W2(e.turnApiUrl,this._ctx.auth.apiKey);t?.length&&(this._iceServers=t,$.logging?.webrtc&&console.log(`[WebRtcProtocol] TURN credentials loaded (${t.length} servers)`)),clearTimeout(this._refreshTimer),this._refreshTimer=setTimeout(()=>this._refreshTurn(e),e.turnRefreshInterval)}};var Xb=new Map;function Jd(r){if(!r?.id)throw new Error("Adapter missing static id");Xb.set(r.id,r)}function Zb(r){return Xb.get(r)}mh();Jd(hl);Jd(gl);var Rl=class{constructor(e,t){let n=t.enableWebRTC?"remoteDesktop":"clientApp",i={...$b[n]};t.enableWebRTC||(i.enabled=["ws"]),i.rtc={enableTurn:!!(t.apiKey&&t.turnApiUrl),turnApiUrl:t.turnApiUrl||null,turnRefreshInterval:t.turnRefreshInterval,dcMaxMessageSize:t.dcMaxMessageSize,answerTimeout:t.answerTimeout},this._profile=i,this._auth={apiKey:t.apiKey||null,socketId:e.id},this._socket=e,this._wsChunkSize=t.wsChunkSize,this._dcChunkSize=t.dcChunkSize,this._dcMaxTilesPerFrame=t.dcMaxTilesPerFrame,this._maxControlBuffer=t.maxControlBuffer,this._adapters=new Map,this._listeners=new Map,this._buffer=[],this._rtcSignalingHandler=null,this._sigListeners=null,this._chunkOffset=0,this._wsPendingSince=new Map}get type(){return this._pickAdapter(ct.binary)?.constructor.id==="rtc"?"dc":"ws"}async init(){for(let e of this._profile.enabled){let t=Zb(e);if(!t)continue;let n=new t;n.on("stateChange",s=>this._onAdapterStateChange(e,s)),n.on("message",({event:s,data:o,source:a})=>this._dispatch(s,o,a)),this._adapters.set(e,n);let i=this._buildCtx(e);await n.connect(i)}}setupSignaling(e){this._installSignalingListeners()}emit(e,...t){this._sendControl(e,t)}sendTiles(e,t){let{tiles:n,timestamp:i}=e;if(!n?.length)return[];let s=this._pickAdapter(ct.binary),o=i??Date.now();return s?.constructor.id==="rtc"&&t?this._emitTilesRtc(s,n,o,t):this._emitTilesChunked(n,o)}close(){for(let e of this._adapters.values())try{e.disconnect()}catch{}this._adapters.clear(),this._buffer=[]}attachAsBus(e){if(e._rawEmit)return;let t=e.emit.bind(e);e._rawEmit=t;let n=new Set(["error","disconnect","disconnecting","connect","newListener","removeListener"]);e.emit=(i,...s)=>n.has(i)?t(i,...s):(this._sendControl(i,s),!0)}_emitTilesChunked(e,t){let n=this._adapters.get("ws");if(!n?.ready)return[];let i=this._wsChunkSize,s=this._wsPendingSince,o=t??Date.now(),a=[...e].sort((l,u)=>{let f=s.get(l.tileIndex)??1/0,h=s.get(u.tileIndex)??1/0;if(f!==h)return f-h;let g=(l.imageBuffer?.length||0)-(u.imageBuffer?.length||0);return g!==0?g:l.tileIndex-u.tileIndex}),c=[];for(let l=0;l<a.length;l+=i){let u=a.slice(l,l+i);if(n.send(ct.binary,Ts(u,t))===!1){for(let f=l;f<a.length;f++){let h=a[f].tileIndex;s.has(h)||s.set(h,o)}break}for(let f of u)s.delete(f.tileIndex);c.push(...u)}return c}_emitTilesRtc(e,t,n,i){let s=this._profile.rtc?.dcMaxMessageSize??65536,o=t.length,a=o>this._dcChunkSize?this._chunkOffset%o:0,c=h=>{let g=[];for(let x=0;x<h;x++)g.push(t[(a+x)%o]);return g},l=Math.min(this._dcChunkSize,o);for(;l>1&&i(c(l),n).length>s;)l=Math.floor(l/2);o>l&&(this._chunkOffset=(a+l)%o);let u=this._adapters.get("ws"),f=[];for(let h=0;h<o;h+=l){let g=[];for(let S=0;S<l&&h+S<o;S++)g.push(t[(a+h+S)%o]);let x=i(g,n);if(x.length>s){g.length===1&&u?.ready&&u.send(ct.binary,x)!==!1&&f.push(...g);continue}if(e.send(ct.binary,x)===!1)return f;f.push(...g)}return f}_buildCtx(e){let t={auth:this._auth,profile:this._profile};return e==="ws"&&(t.socket=this._socket),e==="rtc"&&(t.signaling={send:n=>this._sendSignaling(n),on:n=>{this._rtcSignalingHandler=n,this._installSignalingListeners()},off:()=>{this._rtcSignalingHandler=null,this._removeSignalingListeners()}}),t}_onAdapterStateChange(e,t){t===lt.open&&this._flushBuffer()}_pickAdapter(e){let t=this._profile.channels[e];if(!t)return null;let n=[...this._adapters.values()].filter(i=>i.supports(e)&&i.ready);if(t.prefer){let i=n.find(s=>s.constructor.id===t.prefer);if(i)return i}return n.sort((i,s)=>(s.constructor.priority[e]??0)-(i.constructor.priority[e]??0)),n[0]||null}hasReadyAdapter(){return!!(this._pickAdapter(ct.control)||this._pickAdapter(ct.binary))}_sendControl(e,t,n){let i=this._pickAdapter(ct.control);if(!i){this._buffer.push({event:e,args:t,ackId:n}),this._buffer.length>this._maxControlBuffer&&this._buffer.shift();return}i.constructor.id==="rtc"?i.send(ct.control,{event:e,args:t,ackId:n}):i.send(ct.control,{event:e,args:t})}_flushBuffer(){if(!(!this._buffer.length||!this._pickAdapter(ct.control)))for(;this._buffer.length;){let{event:t,args:n,ackId:i}=this._buffer.shift();this._sendControl(t,n,i)}}_dispatch(e,t,n){if(n==="rtc"){let s=Array.isArray(t?.args)?[...t.args]:[],o=t?.ackId;o&&s.push((...l)=>this._sendAck(o,l));let a=this._listeners.get(e);if(a)for(let l of a)l(...s);let c=this._socket.listeners?.(e)||[];for(let l of c)l(...s);return}let i=this._listeners.get(e);if(i)for(let s of i)s(t)}_sendAck(e,t){let n=this._adapters.get("rtc");n?.ready&&n.send(ct.control,{event:"__ack",args:t,ackId:e})}_sendSignaling(e){let t=this._adapters.get("ws");if(t?.ready){t.send(ct.control,{event:this._sigEvent(e.type),args:[this._sigData(e)]});return}console.warn("[ProtocolManager] signaling unavailable (ws down)")}_sigEvent(e){return e==="offer"?"webrtc:offer":e==="answer"?"webrtc:answer":e==="ice"?"webrtc:ice-candidate":"webrtc:error"}_sigData(e){return e.type==="offer"||e.type==="answer"?{sdp:e.sdp}:e.type==="ice"?{candidate:e.candidate,mid:e.mid}:e}_installSignalingListeners(){if(!this._rtcSignalingHandler||this._sigListeners)return;let e=({sdp:n})=>this._rtcSignalingHandler?.({type:"offer",sdp:n}),t=({candidate:n,mid:i})=>this._rtcSignalingHandler?.({type:"ice",candidate:n,mid:i});this._sigListeners={onOffer:e,onIce:t},this._socket.on("webrtc:offer",e),this._socket.on("webrtc:ice-candidate",t)}_removeSignalingListeners(){this._sigListeners&&(this._socket.off("webrtc:offer",this._sigListeners.onOffer),this._socket.off("webrtc:ice-candidate",this._sigListeners.onIce),this._sigListeners=null)}};hi();pt();var GT=require("path"),zT=require("url");var Nl=K(require("net"),1),ce=K(require("fs"),1),he=K(require("path"),1),Jw=K(require("os"),1),Xw=require("child_process"),Zw=require("url");var vh={win32:[{id:"cmd",label:"Command Prompt",path:"cmd.exe",args:[]},{id:"powershell",label:"PowerShell",path:"powershell.exe",args:["-NoLogo"]},{id:"pwsh",label:"PowerShell Core",path:"pwsh.exe",args:["-NoLogo"]}],unix:[{id:"bash",label:"Bash",path:"/bin/bash",args:["-l"]},{id:"zsh",label:"Zsh",path:"/bin/zsh",args:["-l"]},{id:"sh",label:"Sh",path:"/bin/sh",args:["-l"]}]};function Vw(){return process.platform==="win32"?vh.win32:[]}function yh(r){if(process.platform==="win32"){let n=r?vh.win32.find(s=>s.id===r):null;if(n)return n;let i=process.env.COMSPEC;return i?{id:"cmd",label:"Command Prompt",path:i,args:[]}:vh.win32[0]}let e=process.env.SHELL||"/bin/bash",t=e.split("/").pop();return{id:t,label:t,path:e,args:["-l"]}}var _h=he.default.dirname((0,Zw.fileURLToPath)(__importMetaUrl)),xn=he.default.join(Jw.default.homedir(),".9remote"),Jo=process.platform==="win32"?"\\\\.\\pipe\\9remote-pty":he.default.join(xn,"pty-daemon.sock"),Kw=he.default.join(_h,"ptyDaemon.js"),Yw=he.default.join(_h,"ptyDaemon.cjs"),Ol=he.default.join(xn,"daemon");function Qw(r,e){if(ce.default.existsSync(r)){ce.default.mkdirSync(e,{recursive:!0});for(let t of ce.default.readdirSync(r,{withFileTypes:!0})){let n=he.default.join(r,t.name),i=he.default.join(e,t.name);t.isDirectory()?Qw(n,i):t.isFile()&&ce.default.copyFileSync(n,i)}}}function yB(r,e){let t=r;for(let n=0;n<6;n++){let i=he.default.join(t,"node_modules",e);if(ce.default.existsSync(i))return i;let s=he.default.dirname(t);if(s===t)break;t=s}return null}var xB=r=>yB(r,"node-pty");function _B(r){try{if(!ce.default.existsSync(Ol))return;let e=he.default.join(xn,"pids","ptyDaemon.pid"),t=!1;try{let n=parseInt(ce.default.readFileSync(e,"utf8").trim(),10);if(Number.isFinite(n)&&n>0)try{process.kill(n,0),t=!0}catch{}}catch{}if(t)return;for(let n of ce.default.readdirSync(Ol))if(n!==`v${r}`)try{ce.default.rmSync(he.default.join(Ol,n),{recursive:!0,force:!0})}catch{}}catch{}}function bB(r){_B("22");let e=he.default.join(Ol,`v${"22"}`),t=r.endsWith(".js"),n=t?he.default.join(e,"features","terminal"):e,i=he.default.join(n,he.default.basename(r)),s=he.default.join(n,"node_modules","node-pty");if(ce.default.existsSync(i)&&ce.default.existsSync(s))return{script:i,cwd:n};try{if(ce.default.mkdirSync(n,{recursive:!0}),ce.default.copyFileSync(r,i),t){let a=he.default.dirname(r);ce.default.copyFileSync(he.default.join(a,"constants.js"),he.default.join(n,"constants.js"));let c=he.default.join(e,"lib");ce.default.mkdirSync(c,{recursive:!0}),ce.default.copyFileSync(he.default.resolve(a,"..","..","lib","constants.js"),he.default.join(c,"constants.js"))}let o=xB(he.default.dirname(r));return o?(Qw(o,s),{script:i,cwd:n}):null}catch{return null}}var Wr=null,ks=!1,$n=!1,xh="",wB=0,As=new Map,Ml=new Map;function SB(){return++wB}function Zo(r,e){Ml.has(r)||Ml.set(r,[]),Ml.get(r).push(e)}function Xo(r,e){let t=Ml.get(r);if(t)for(let n of t)try{n(e)}catch(i){console.error(`[DaemonClient] Error in ${r} handler:`,i)}}function bh(r){if(!Wr||!ks)return!1;try{return Wr.write(JSON.stringify(r)+`
|
|
114
114
|
`),!0}catch(e){return console.error("[DaemonClient] Send error:",e),!1}}function Qo(r,e=5e3){return new Promise((t,n)=>{let i=SB();r.requestId=i;let s=setTimeout(()=>{As.delete(i),n(new Error("Request timeout"))},e);As.set(i,{resolve:t,reject:n,timer:s}),bh(r)||(clearTimeout(s),As.delete(i),n(new Error("Not connected to daemon")))})}function EB(r){let{type:e,requestId:t,...n}=r;if(t&&As.has(t)){let{resolve:i,timer:s}=As.get(t);clearTimeout(s),As.delete(t),i({type:e,...n});return}switch(e){case"output":Xo("output",{sessionId:n.sessionId,data:Buffer.from(n.data,"base64")});break;case"sessionClosed":Xo("sessionClosed",n.sessionId);break;case"cwdChange":Xo("cwdChange",{sessionId:n.sessionId,cwd:n.cwd});break;case"pong":break;default:console.log("[DaemonClient] Unknown message:",e)}}function Il(){return new Promise(r=>{let e=Nl.default.connect(Jo),t=setTimeout(()=>{e.destroy(),r(!1)},1e3);e.on("connect",()=>{clearTimeout(t),e.destroy(),r(!0)}),e.on("error",()=>{if(clearTimeout(t),process.platform!=="win32"&&ce.default.existsSync(Jo))try{ce.default.unlinkSync(Jo)}catch{}r(!1)})})}function TB(){ce.default.existsSync(xn)||ce.default.mkdirSync(xn,{recursive:!0});let r=ce.default.existsSync(Kw)?Kw:ce.default.existsSync(Yw)?Yw:null;if(!r)return console.error("[DaemonClient] \u274C Daemon script not found"),null;let e=bB(r);return e||{script:r,cwd:_h}}async function CB(){if(!ce.default.existsSync(xn))try{ce.default.mkdirSync(xn,{recursive:!0})}catch(a){return console.error("[DaemonClient] Failed to create socket directory:",a.message),!1}let r=TB();if(!r)return!1;let{script:e,cwd:t}=r,n=he.default.join(xn,"logs");try{ce.default.mkdirSync(n,{recursive:!0})}catch{}let i=he.default.join(n,"daemon.log"),s;try{s=ce.default.openSync(i,"w")}catch(a){console.error("[DaemonClient] Failed to open log file:",a.message),s="ignore"}if((0,Xw.spawn)("node",[e],{detached:!0,stdio:["ignore",s,s],cwd:t}).unref(),typeof s=="number")try{ce.default.closeSync(s)}catch{}for(let a=0;a<20;a++)if(await new Promise(c=>setTimeout(c,100)),await Il())return!0;console.error("[DaemonClient] \u274C Failed to start daemon");try{let a=ce.default.readFileSync(i,"utf8");a.trim()&&(console.error("[DaemonClient] Daemon log:"),console.error(a))}catch{}return!1}function kB(){return new Promise(r=>{let e=Nl.default.connect(Jo),t="",n=s=>{try{e.destroy()}catch{}r(s)},i=setTimeout(()=>n(null),2e3);e.on("connect",()=>e.write(JSON.stringify({type:"ping",requestId:-1})+`
|
|
115
115
|
`)),e.on("data",s=>{t+=s.toString();let o=t.indexOf(`
|
|
116
116
|
`);if(o!==-1){clearTimeout(i);try{let a=JSON.parse(t.slice(0,o));n(a.version||"unknown")}catch{n(null)}}}),e.on("error",()=>{clearTimeout(i),n(null)})})}async function AB(){try{let r=he.default.join(xn,"pids","ptyDaemon.pid"),e=parseInt(ce.default.readFileSync(r,"utf8").trim(),10);Number.isFinite(e)&&e>0&&process.kill(e,"SIGTERM")}catch{}for(let r=0;r<20;r++){if(!await Il())return;await new Promise(e=>setTimeout(e,100))}}async function eS(){if(!(ks||$n)){$n=!0;try{if(await Il()){let r=await kB();r!=="22"&&(console.log(`[DaemonClient] Daemon v${r} != v${"22"}, restarting`),await AB())}return!await Il()&&!await CB()?(console.error("[DaemonClient] \u274C Failed to start daemon"),$n=!1,!1):new Promise(r=>{let e=setTimeout(()=>{console.error("[DaemonClient] \u274C Connection timeout after 5s"),Wr&&Wr.destroy(),$n=!1,r(!1)},5e3);Wr=Nl.default.connect(Jo),Wr.on("connect",()=>{clearTimeout(e),ks=!0,$n=!1,Xo("connected"),r(!0)}),Wr.on("data",t=>{xh+=t.toString();let n=xh.split(`
|
|
@@ -160,7 +160,7 @@ function post(type) {
|
|
|
160
160
|
export default function (${e}) {
|
|
161
161
|
${e}.on(${JSON.stringify(t)}, async () => post("stop"));
|
|
162
162
|
}
|
|
163
|
-
`}function O3(){let r=Te.amp(),e=Me.default.dirname(r);return se.default.existsSync(e)||se.default.mkdirSync(e,{recursive:!0}),se.default.writeFileSync(r,qT("amp","amp","agent.end"),"utf8"),{success:!0}}function M3(){let r=Te.pi(),e=Me.default.dirname(r);return se.default.existsSync(e)||se.default.mkdirSync(e,{recursive:!0}),se.default.writeFileSync(r,qT("pi","pi","agent_end"),"utf8"),{success:!0}}function NT(r,e){try{return se.default.existsSync(r)&&se.default.readFileSync(r,"utf8").includes(e)}catch{return!1}}function P3(r){switch(r){case"claude":{let e=xr(Te.claude());return!!(e.hooks?.Stop||e.hooks?.Notification)}case"codex":return NT(Te.codex(),"# 9Remote notification");case"gemini":{let e=xr(Te.gemini());return!!(e.hooks?.AfterAgent||e.hooks?.Notification)}case"opencode":case"amp":case"pi":return se.default.existsSync(Te[r]());case"kiro":case"antigravity":case"cursor":case"grok":case"copilot":case"codebuddy":case"factory":case"qoder":case"rovodev":case"hermes":return NT(Te[r](),`&tool=${r}`);default:return!1}}function I3(r){let e=(process.env.PATH||"").split(Me.default.delimiter).filter(Boolean),t=process.platform==="win32"?(process.env.PATHEXT||".EXE;.CMD;.BAT").split(";"):[""];return e.some(n=>t.some(i=>{try{return se.default.existsSync(Me.default.join(n,r+i))}catch{return!1}}))}function N3(r){let e=t3[r];if(e&&I3(e))return!0;let t=r3[r]?.();return t?(Array.isArray(t)?t:[t]).some(n=>se.default.existsSync(n)):!1}var D3={claude:i3,codex:c3,gemini:l3,opencode:p3,grok:d3,cursor:w3,antigravity:E3,kiro:T3,copilot:y3,codebuddy:x3,factory:_3,qoder:b3,rovodev:k3,hermes:R3,amp:O3,pi:M3};var L3=Mv;function B3(r){return D3[r]?.()||{success:!1,error:"Unknown tool"}}function UT(){let r={};for(let e of L3)if(!(!N3(e)||P3(e)))try{r[e]=B3(e).success}catch{r[e]=!1}return r}function $T(){let r=Te.claude(),e=xr(r);if(!e.hooks?.Stop&&!e.hooks?.Notification)return;let t=e.env||{};Object.keys(uo).some(i=>t[i]!==uo[i])&&(jT(e),Jr(r,e))}hi();var fz=(0,GT.dirname)((0,zT.fileURLToPath)(__importMetaUrl)),dz=ao.rgb(230,138,110),Am="daemon",j3="2.0.
|
|
163
|
+
`}function O3(){let r=Te.amp(),e=Me.default.dirname(r);return se.default.existsSync(e)||se.default.mkdirSync(e,{recursive:!0}),se.default.writeFileSync(r,qT("amp","amp","agent.end"),"utf8"),{success:!0}}function M3(){let r=Te.pi(),e=Me.default.dirname(r);return se.default.existsSync(e)||se.default.mkdirSync(e,{recursive:!0}),se.default.writeFileSync(r,qT("pi","pi","agent_end"),"utf8"),{success:!0}}function NT(r,e){try{return se.default.existsSync(r)&&se.default.readFileSync(r,"utf8").includes(e)}catch{return!1}}function P3(r){switch(r){case"claude":{let e=xr(Te.claude());return!!(e.hooks?.Stop||e.hooks?.Notification)}case"codex":return NT(Te.codex(),"# 9Remote notification");case"gemini":{let e=xr(Te.gemini());return!!(e.hooks?.AfterAgent||e.hooks?.Notification)}case"opencode":case"amp":case"pi":return se.default.existsSync(Te[r]());case"kiro":case"antigravity":case"cursor":case"grok":case"copilot":case"codebuddy":case"factory":case"qoder":case"rovodev":case"hermes":return NT(Te[r](),`&tool=${r}`);default:return!1}}function I3(r){let e=(process.env.PATH||"").split(Me.default.delimiter).filter(Boolean),t=process.platform==="win32"?(process.env.PATHEXT||".EXE;.CMD;.BAT").split(";"):[""];return e.some(n=>t.some(i=>{try{return se.default.existsSync(Me.default.join(n,r+i))}catch{return!1}}))}function N3(r){let e=t3[r];if(e&&I3(e))return!0;let t=r3[r]?.();return t?(Array.isArray(t)?t:[t]).some(n=>se.default.existsSync(n)):!1}var D3={claude:i3,codex:c3,gemini:l3,opencode:p3,grok:d3,cursor:w3,antigravity:E3,kiro:T3,copilot:y3,codebuddy:x3,factory:_3,qoder:b3,rovodev:k3,hermes:R3,amp:O3,pi:M3};var L3=Mv;function B3(r){return D3[r]?.()||{success:!1,error:"Unknown tool"}}function UT(){let r={};for(let e of L3)if(!(!N3(e)||P3(e)))try{r[e]=B3(e).success}catch{r[e]=!1}return r}function $T(){let r=Te.claude(),e=xr(r);if(!e.hooks?.Stop&&!e.hooks?.Notification)return;let t=e.env||{};Object.keys(uo).some(i=>t[i]!==uo[i])&&(jT(e),Jr(r,e))}hi();var fz=(0,GT.dirname)((0,zT.fileURLToPath)(__importMetaUrl)),dz=ao.rgb(230,138,110),Am="daemon",j3="2.0.78",Xr=new Map,VT=new Map,KT={},YT=[];async function WT(){let r=await Dl(),e=new Map(r.map(n=>[n.id,n])),t=jh();for(let n of r)if(!t[n.id])try{await mi(n.id)}catch{}Xr.clear();for(let[n,i]of Object.entries(t)){let s=e.get(n);Xr.set(n,{daemon:!0,name:i.name,createdAt:i.createdAt,shellId:i.shellId,cwd:s?.cwd||i.cwd,needsRespawn:!s})}Mr(Xr)}async function JT(){let r=KS();for(let n of r.groups)VT.set(n.id,n);Object.assign(KT,r.sessionGroups),YT.push(...r.sessionOrder);try{$T()}catch{}try{UT()}catch{}if(Am==="daemon")if(!await tS())console.error("\u274C Failed to connect to PTY daemon, falling back to buffer mode");else{await WT(),Zo("connected",()=>{WT().catch(()=>{})});return}console.log("\u{1F4E6} Buffer persistence mode - scrollback enabled");let e=VS(),t=jh();for(let n of e){let i=t[n]||{};Xr.set(n,{pty:null,name:i.name||`Terminal ${Xr.size+1}`,createdAt:i.createdAt||Date.now(),buffer:[],needsRestore:!0}),console.log(`\u{1F504} Found saved session: ${n}`)}e.length>0&&console.log(`\u2705 Found ${e.length} saved session(s)`)}function Gs(r,e){Am==="daemon"&&(Zo("output",({sessionId:i,data:s})=>yt(r,"output",{sessionId:i,data:s})),Zo("cwdChange",({sessionId:i,cwd:s})=>{let o=Xr.get(i);o&&s&&o.cwd!==s&&(o.cwd=s,Mr(Xr)),yt(r,"cwdChange",{sessionId:i,cwd:s})}),Zo("sessionClosed",i=>{Xr.delete(i),Su(i),yt(r,"sessionClosed",i),yt(r,"notificationCleared",i)}));let t=()=>({version:j3,remoteAvailable:Es(),daemonMode:Am==="daemon"&&Ut(),platform:process.platform,updateAvailable:ww(),canSelfUpdate:!0,...FS()}),n=()=>{let i=t();for(let s of r.sockets.sockets.values())s.data?.approved&&s.emit("serverInfo",i)};Tw(n),Gs._buildServerInfo=t,Gs._emitServerInfo=n}function XT(){Gs._emitServerInfo?.()}var ZT=null;function QT(r){ZT=r}async function eC(r,e,t){HS(),ZT?.(),r.emit("serverInfo",Gs._buildServerInfo?.()),QS(r,e,Xr,VT,KT,YT),rE(r,Xr),RT(r),$l()&&await jS(r,t).catch(n=>{console.error("\u274C Failed to setup remote handlers:",n.message)}),r.on("disconnect",()=>{ST(r.id),qS()})}var re=K(require("fs"),1),br=K(require("path"),1),Qr=K(require("os"),1),Zs=require("child_process"),cA=K(Qk(),1);var kg=["node_modules",".git","dist","build",".next","coverage","__pycache__",".cache",".vscode",".idea",".turbo",".vercel",".output","out",".nuxt",".svelte-kit","target","vendor",".gradle",".pytest_cache",".mypy_cache",".tox",".venv","venv","env",".DS_Store",".parcel-cache",".rollup.cache"],Gu=[".png",".jpg",".jpeg",".gif",".webp",".ico",".svg",".bmp",".pdf",".zip",".tar",".gz",".rar",".7z",".exe",".dll",".so",".dylib",".mp3",".mp4",".wav",".avi",".mov",".webm",".woff",".woff2",".ttf",".eot",".otf",".sqlite",".db"];var eA=[".ssh",".aws",".gnupg",".kube",".docker",".cargo",".npmrc",".netrc",".pypirc",".config/gh",".config/gcloud"],tA=["/etc/shadow","/etc/sudoers","/etc/ssh","/root","/private/etc/sudoers"];var rA=K(require("fs"),1),ka=K(require("path"),1),nA=K(require("os"),1);var iA=nA.default.homedir();function e$(r){if(!r)return null;let e=r.startsWith("~")?r.replace(/^~/,iA):r;try{return rA.default.realpathSync(e)}catch{return ka.default.resolve(e)}}function Tn(r){let e=e$(r);if(!e)return!1;for(let t of tA)if(e===t||e.startsWith(t+ka.default.sep))return!0;for(let t of eA){let n=ka.default.join(iA,t);if(e===n||e.startsWith(n+ka.default.sep))return!0}return!1}function zu(r){return kg.includes(r)}function Qs(r){return Gu.includes(br.default.extname(r).toLowerCase())}function r$(r,e){return r.isDirectory()?"folder":Qs(e)?"binary":"file"}function Aa(r){return r<1024?`${r}B`:r<1024*1024?`${(r/1024).toFixed(1)}KB`:`${(r/(1024*1024)).toFixed(1)}MB`}function lA(r,e,t,n=50){if(!(t.length>=n))try{for(let i of re.default.readdirSync(r)){if(t.length>=n)return;if(i.startsWith(".")||zu(i))continue;let s=br.default.join(r,i);try{let o=re.default.statSync(s);o.isDirectory()?lA(s,e,t,n):i.toLowerCase().includes(e.toLowerCase())&&t.push({name:i,path:s,type:Qs(i)?"binary":"file",size:o.size,sizeFormatted:Aa(o.size)})}catch{}}}catch{}}function aA(r){if(!r)return null;let e=r.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*/g,"::ANY::").replace(/\*/g,"[^/]*").replace(/::ANY::/g,".*").replace(/\?/g,".");return new RegExp(`^${e}$`)}function uA(r,e,t,n,i,s){if(s.length>=200)return;let o;try{o=re.default.readdirSync(r,{withFileTypes:!0})}catch{return}for(let a of o){if(s.length>=200)return;if(zu(a.name))continue;let c=br.default.join(r,a.name),l=br.default.relative(e,c);if(a.isDirectory()){uA(c,e,t,n,i,s);continue}if(a.isFile()&&!Qs(a.name)&&!(i&&i.test(l))&&!(n&&!n.test(l)))try{if(re.default.statSync(c).size>512e3)continue;let h=re.default.readFileSync(c,"utf-8").split(`
|
|
164
164
|
`),g=[];for(let x=0;x<h.length&&g.length<10;x++){let S=h[x],k=t(S);for(let R of k){if(g.length>=10)break;g.push({line:x+1,column:R.column+1,lineText:S,matchLength:R.length})}}g.length&&s.push({path:c,matches:g})}catch{}}}function pA(r,e,t){let n;try{n=re.default.readdirSync(r,{withFileTypes:!0})}catch{return[]}let i=[];for(let s of n){if(!t&&s.name.startsWith(".")&&s.name!==".env"&&s.name!==".env.example"||zu(s.name))continue;let o=br.default.join(r,s.name);if(s.isDirectory()){let a={name:s.name,path:o,type:"folder"};e>0&&(a.children=pA(o,e-1,t)),i.push(a)}else s.isFile()&&i.push({name:s.name,path:o,type:Qs(s.name)?"binary":"file"})}return i.sort((s,o)=>s.type==="folder"&&o.type!=="folder"?-1:s.type!=="folder"&&o.type==="folder"?1:s.name.localeCompare(o.name)),i}function n$(){if(process.platform!=="win32")return[];try{return(0,Zs.execSync)("wmic logicaldisk get name",{encoding:"utf-8",stdio:["pipe","pipe","pipe"],windowsHide:!0}).split(/\r?\n/).map(e=>e.trim()).filter(e=>/^[A-Z]:$/.test(e)).map(e=>({letter:e[0],path:e+"\\"}))}catch{return"CDEFGHIJ".split("").map(r=>`${r}:\\`).filter(r=>re.default.existsSync(r)).map(r=>({letter:r[0],path:r}))}}function fA(r){r.on("getSystemInfo",t=>{let n=process.platform;t({success:!0,platform:n,isWindows:n==="win32",drives:n==="win32"?n$():[],homedir:Qr.default.homedir()})}),r.on("getFiles",({dirPath:t,showHidden:n},i)=>{try{let s=t||Qr.default.homedir(),o=s.startsWith("~")?s.replace("~",Qr.default.homedir()):s;if(Tn(o))return i({success:!1,error:"Access denied"});if(!re.default.existsSync(o))return i({success:!1,error:"Directory not found"});let a=[];for(let c of re.default.readdirSync(o))if(!(!n&&c.startsWith(".")&&c!==".env"&&c!==".env.example")&&!zu(c))try{let l=br.default.join(o,c),u=re.default.statSync(l);a.push({name:c,path:l,type:r$(u,c),size:u.isFile()?u.size:null,sizeFormatted:u.isFile()?Aa(u.size):null,modified:u.mtime.getTime()})}catch{}a.sort((c,l)=>c.type==="folder"&&l.type!=="folder"?-1:c.type!=="folder"&&l.type==="folder"?1:c.name.localeCompare(l.name)),i({success:!0,files:a,currentPath:o,parentPath:br.default.dirname(o)})}catch(s){i({success:!1,error:s.message})}}),r.on("searchFiles",({workspace:t,query:n},i)=>{try{if(!n||n.length<2)return i({success:!0,files:[]});let s=(t||Qr.default.homedir()).replace(/^~/,Qr.default.homedir());if(!re.default.existsSync(s))return i({success:!1,error:"Workspace not found"});let o=[];lA(s,n,o,50),o.sort((a,c)=>{let l=a.name.toLowerCase()===n.toLowerCase(),u=c.name.toLowerCase()===n.toLowerCase();return l&&!u?-1:!l&&u?1:a.path.length-c.path.length}),i({success:!0,files:o})}catch(s){i({success:!1,error:s.message})}}),r.on("readFile",({filePath:t},n)=>{try{if(Tn(t))return n({success:!1,error:"Access denied"});if(!re.default.existsSync(t))return n({success:!1,error:"File not found"});let i=re.default.statSync(t);if(i.size>512e3)return n({success:!1,error:`File too large (${Aa(i.size)}). Max ${Aa(512e3)}`});if(Qs(t))return n({success:!1,error:"Cannot open binary file"});n({success:!0,content:re.default.readFileSync(t,"utf-8")})}catch(i){n({success:!1,error:i.message})}}),r.on("readImage",({filePath:t},n)=>{try{if(Tn(t))return n({success:!1,error:"Access denied"});if(!re.default.existsSync(t))return n({success:!1,error:"File not found"});let i=re.default.statSync(t),s=10*1024*1024;if(i.size>s)return n({success:!1,error:`Image too large (${Aa(i.size)})`});let o=br.default.extname(t).toLowerCase().slice(1),c={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",svg:"image/svg+xml",ico:"image/x-icon",bmp:"image/bmp"}[o]||"application/octet-stream",l=re.default.readFileSync(t),u=`data:${c};base64,${l.toString("base64")}`;n({success:!0,dataUrl:u,size:i.size,mime:c})}catch(i){n({success:!1,error:i.message})}}),r.on("writeFile",({filePath:t,content:n},i)=>{try{if(Tn(t))return i({success:!1,error:"Access denied"});re.default.writeFileSync(t,n,"utf-8"),i({success:!0})}catch(s){i({success:!1,error:s.message})}}),r.on("createItem",({itemPath:t,type:n},i)=>{try{if(Tn(t))return i({success:!1,error:"Access denied"});if(re.default.existsSync(t))return i({success:!1,error:"Item already exists"});n==="folder"?re.default.mkdirSync(t,{recursive:!0}):re.default.writeFileSync(t,"","utf-8"),i({success:!0})}catch(s){i({success:!1,error:s.message})}}),r.on("deleteItem",({itemPath:t},n)=>{try{if(Tn(t))return n({success:!1,error:"Access denied"});if(!re.default.existsSync(t))return n({success:!1,error:"Item not found"});re.default.statSync(t).isDirectory()?re.default.rmSync(t,{recursive:!0}):re.default.unlinkSync(t),n({success:!0})}catch(i){n({success:!1,error:i.message})}}),r.on("renameItem",({oldPath:t,newPath:n},i)=>{try{if(Tn(t)||Tn(n))return i({success:!1,error:"Access denied"});if(!re.default.existsSync(t))return i({success:!1,error:"Item not found"});if(re.default.existsSync(n))return i({success:!1,error:"Target already exists"});re.default.renameSync(t,n),i({success:!0})}catch(s){i({success:!1,error:s.message})}}),r.on("searchInFiles",({workspace:t,query:n,caseSensitive:i,regex:s,includeGlob:o,excludeGlob:a},c)=>{try{if(!n)return c({success:!0,results:[]});let l=(t||Qr.default.homedir()).replace(/^~/,Qr.default.homedir());if(!re.default.existsSync(l))return c({success:!1,error:"Workspace not found"});let u;if(s){let x;try{x=new RegExp(n,i?"g":"gi")}catch(S){return c({success:!1,error:`Invalid regex: ${S.message}`})}u=S=>{let k=[],R;for(x.lastIndex=0;(R=x.exec(S))!==null;)k.push({column:R.index,length:R[0].length}),R.index===x.lastIndex&&x.lastIndex++;return k}}else{let x=i?n:n.toLowerCase();u=S=>{let k=i?S:S.toLowerCase(),R=[],M=0;for(;(M=k.indexOf(x,M))!==-1;)R.push({column:M,length:x.length}),M+=x.length||1;return R}}let f=aA(o),h=aA(a),g=[];uA(l,l,u,f,h,g),c({success:!0,results:g})}catch(l){c({success:!1,error:l.message})}}),r.on("replaceInFiles",({workspace:t,query:n,replacement:i,caseSensitive:s,regex:o,files:a},c)=>{try{if(!n||!Array.isArray(a)||!a.length)return c({success:!0,replacedCount:0,fileCount:0});let l;if(o){let h;try{h=new RegExp(n,s?"g":"gi")}catch(g){return c({success:!1,error:`Invalid regex: ${g.message}`})}l=g=>{let x=0;return{next:g.replace(h,k=>(x++,i)),count:x}}}else l=h=>{let g=0,x=s?"g":"gi",S=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),k=new RegExp(S,x);return{next:h.replace(k,()=>(g++,i)),count:g}};let u=0,f=0;for(let h of a)try{if(!re.default.existsSync(h)||Qs(h))continue;let g=re.default.statSync(h);if(!g.isFile()||g.size>512e3)continue;let x=re.default.readFileSync(h,"utf-8"),{next:S,count:k}=l(x);k>0&&(re.default.writeFileSync(h,S,"utf-8"),u+=k,f++)}catch{}c({success:!0,replacedCount:u,fileCount:f})}catch(l){c({success:!1,error:l.message})}});let e=new Map;r.on("watchDir",({dirPath:t},n)=>{try{if(!t||!re.default.existsSync(t))return n({success:!1,error:"Directory not found"});let i=e.get(t);if(i)return i.count++,n({success:!0});let s=cA.default.watch(t,{depth:0,ignoreInitial:!0,persistent:!0,ignored:a=>kg.includes(br.default.basename(a))}),o=a=>c=>r.emit("fileChange",{type:a,path:c});s.on("add",o("add")).on("change",o("change")).on("unlink",o("unlink")).on("addDir",o("addDir")).on("unlinkDir",o("unlinkDir")),e.set(t,{w:s,count:1}),n({success:!0})}catch(i){n({success:!1,error:i.message})}}),r.on("unwatchDir",({dirPath:t},n)=>{try{let i=e.get(t);i&&--i.count<=0&&(i.w.close(),e.delete(t)),n({success:!0})}catch(i){n({success:!1,error:i.message})}}),r.once("disconnect",()=>{for(let{w:t}of e.values())try{t.close()}catch{}e.clear()}),r.on("revealInOS",({filePath:t},n)=>{try{if(!t)return n({success:!1,error:"No path"});let i=process.platform,s,o;i==="darwin"?(s="open",o=["-R",t]):i==="win32"?(s="explorer",o=[`/select,${t}`]):(s="xdg-open",o=[br.default.dirname(t)]);let a=(0,Zs.spawn)(s,o,{detached:!0,stdio:"ignore",windowsHide:!0});a.on("error",c=>n({success:!1,error:c.message})),a.unref(),n({success:!0})}catch(i){n({success:!1,error:i.message})}}),r.on("openInTerminal",({dirPath:t},n)=>{try{if(!t||!re.default.existsSync(t))return n({success:!1,error:"Directory not found"});let i=process.platform,s,o,a={detached:!0,stdio:"ignore",windowsHide:!0};i==="darwin"?(s="open",o=["-a","Terminal",t]):i==="win32"?(s="cmd",o=["/C","start","cmd","/K",`cd /d "${t}"`],a.shell=!1):(s="gnome-terminal",o=[`--working-directory=${t}`]);let c=(0,Zs.spawn)(s,o,a);c.on("error",()=>{if(i==="linux"){let l=(0,Zs.spawn)("xterm",["-e",`cd "${t}" && bash`],a);l.on("error",u=>n({success:!1,error:u.message})),l.unref()}else n({success:!1,error:"Failed to open terminal"})}),c.unref(),n({success:!0})}catch(i){n({success:!1,error:i.message})}}),r.on("getFileTree",({dirPath:t,depth:n,showHidden:i},s)=>{try{let o=(t||Qr.default.homedir()).replace(/^~/,Qr.default.homedir());if(!re.default.existsSync(o))return s({success:!1,error:"Directory not found"});let c=pA(o,typeof n=="number"?n:3,!!i);s({success:!0,tree:{name:br.default.basename(o)||o,path:o,type:"folder",children:c}})}catch(o){s({success:!1,error:o.message})}})}var Gt=K(require("fs"),1),ki=K(require("path"),1),wr=require("child_process");function Ci(r,e){return new Promise(t=>{let n=(0,wr.spawn)("git",r,{cwd:e,windowsHide:!0}),i="",s="";n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.on("error",o=>t({code:-1,stdout:i,stderr:o.message})),n.on("close",o=>t({code:o,stdout:i,stderr:s}))})}function dA(r){return Gu.includes(ki.default.extname(r).toLowerCase())}function hA(r){r.on("gitStatus",({repoPath:e},t)=>{try{let n=(0,wr.execSync)("git status --porcelain",{cwd:e,encoding:"utf-8",stdio:["pipe","pipe","pipe"],windowsHide:!0}),i={};try{(0,wr.execSync)("git diff HEAD --numstat",{cwd:e,encoding:"utf-8",stdio:["pipe","pipe","pipe"],windowsHide:!0}).trim().split(`
|
|
165
165
|
`).filter(Boolean).forEach(a=>{let c=a.split(" ");c.length>=3&&(i[c[2]]={added:c[0]==="-"?0:parseInt(c[0],10)||0,deleted:c[1]==="-"?0:parseInt(c[1],10)||0})})}catch{}let s=[];for(let o of n.trim().split(`
|
|
166
166
|
`).filter(Boolean)){let a=o.match(/^([MADRCU?! ]{1,2})\s+(.+)$/);if(!a)continue;let c=a[1],l=a[2];if(!l)continue;let u;c.includes("?")?u="?":c.includes("A")?u="A":c.includes("D")?u="D":c.includes("M")?u="M":c.includes("R")?u="R":u=c.trim()[0]||"?";let f=i[l]||{added:0,deleted:0};if(u==="?")try{let h=ki.default.join(e,l);if(Gt.default.existsSync(h)&&!dA(l)){let g=Gt.default.readFileSync(h,"utf-8");f.added=g.split(`
|
|
@@ -291,8 +291,8 @@ self.addEventListener('fetch', (event) => {
|
|
|
291
291
|
</body>
|
|
292
292
|
</html>
|
|
293
293
|
`);return}e._proxyTargetPort=n,e.url=i+(s||""),r.web(e,t,{target:`http://localhost:${n}`,changeOrigin:!0},o=>{t.writeHead(502),t.end(`Bad Gateway: ${o.message}`)})}var kR=K(require("http"),1),AR=K(require("https"),1),RR=require("child_process"),OR=require("util"),q$=(0,OR.promisify)(RR.exec);async function U$(){let r=process.platform,e=new Set([80,443]);try{let t;if(r==="win32")t="netstat -ano | findstr LISTENING";else{let s="/dev/null";t=`lsof -iTCP -sTCP:LISTEN -P -n 2>${s} || netstat -tlnp 2>${s}`}let{stdout:n}=await q$(t),i=n.split(`
|
|
294
|
-
`);for(let s of i){let o=s.match(/[:\*\]](\d{2,5})(?:\s|$)/g);if(o)for(let a of o){let c=parseInt(a.replace(/[:\*\]\s]/g,""),10);c>0&&c<=65535&&(c===80||c===443||c>=1024)&&e.add(c)}}return Array.from(e)}catch(t){return console.error("Failed to get listening ports:",t.message),[80,443,3e3,3001,4200,5e3,5173,8e3,8080,9e3]}}function $$(r,e=2e3){return new Promise(t=>{let n=kR.default.request({host:"localhost",port:r,method:"GET",path:"/",timeout:e},i=>{i.on("data",()=>{}),i.on("end",()=>{}),t({active:!0,protocol:"http",status:i.statusCode})});n.on("error",i=>{t({active:!1,error:i.message})}),n.on("timeout",()=>{n.destroy(),t({active:!1,error:"timeout"})}),n.end()})}function W$(r,e=2e3){return new Promise(t=>{let n=AR.default.request({host:"localhost",port:r,method:"GET",path:"/",timeout:e,rejectUnauthorized:!1},i=>{i.on("data",()=>{}),i.on("end",()=>{}),t({active:!0,protocol:"https",status:i.statusCode})});n.on("error",i=>{t({active:!1,error:i.message})}),n.on("timeout",()=>{n.destroy(),t({active:!1,error:"timeout"})}),n.end()})}async function G$(r){let[e,t]=await Promise.all([$$(r),W$(r)]);return t.active?{port:r,...t}:e.active?{port:r,...e}:{port:r,active:!1}}async function MR(){let r=await U$();return(await Promise.all(r.map(t=>G$(t)))).filter(t=>t.active).map(t=>({port:t.port,protocol:t.protocol,url:`${t.protocol}://localhost:${t.port}`,name:`localhost:${t.port}`,status:t.status})).sort((t,n)=>t.port-n.port)}var PR=K(require("crypto"),1),z$=process.env.API_KEY_SECRET||"9remote-api-key-secret";function V$(){let r="abcdefghijklmnopqrstuvwxyz0123456789",e="";for(let t=0;t<4;t++)e+=r.charAt(Math.floor(Math.random()*r.length));return e}function IR(r,e){return PR.default.createHmac("sha256",z$).update(r+e).digest("hex").slice(0,6)}function NR(r){let e=r.slice(0,8),t=V$(),n=IR(e,t);return{key:`sk-${e}-${t}-${n}`,keyId:t}}function K$(r){if(!r||!r.startsWith("sk-"))return null;let e=r.split("-");if(e.length===4){let[,t,n,i]=e,s=IR(t,n);return i!==s?null:{machineId:t,keyId:n}}return null}function rp(r){return K$(r)!==null}async function DR(r,e){let t=r.headers.authorization;if(!t||!t.startsWith("Bearer ")){e.setHeader("Content-Type","application/json"),e.writeHead(401),e.end(JSON.stringify({error:"Unauthorized: Missing API key"}));return}let n=t.slice(7);if(!rp(n)){e.setHeader("Content-Type","application/json"),e.writeHead(401),e.end(JSON.stringify({error:"Unauthorized: Invalid API key"}));return}let i=await MR();e.setHeader("Content-Type","application/json"),e.writeHead(200),e.end(JSON.stringify(i))}dl();var jR=require("url");var np=K(require("path"),1),FR=K(require("os"),1);bt();var LR=K(require("path"),1),BR=K(require("os"),1);var HV=LR.default.join(BR.default.homedir(),".9remote","pids");nh();var Fa={checkIntervalMs:36e5,connectCheckDebounceMs:9e5,maxRetry:3,retryDelayMs:3e3,verifyTimeoutMs:15e3,lockTtlMs:3e5,lockFile:"update.lock"};var $V={orange:ao.rgb(230,138,110),orangeDim:ao.rgb(200,120,95)};var XV=np.default.dirname((0,jR.fileURLToPath)(__importMetaUrl));var ZV=np.default.join(FR.default.homedir(),".9remote","cloudflared.pid");function HR(r,e){let t=r.split(".").map(Number),n=e.split(".").map(Number);for(let i=0;i<3;i++){if(n[i]>t[i])return!0;if(n[i]<t[i])return!1}return!1}var QV=np.default.join(ie.STATE,Fa.lockFile);yn();Lt();bt();xs();var UR=K(qR(),1),Yg=K(require("crypto"),1),{machineIdSync:Y$}=UR.default;async function $R(r=null){let e=r||process.env.MACHINE_ID_SALT||"9remote-salt";try{let t=Y$();return Yg.default.createHash("sha256").update(t+e).digest("hex").substring(0,16)}catch(t){return console.error("Error getting machine ID:",t),Yg.default.randomUUID().replace(/-/g,"").substring(0,16)}}yn();async function WR(r,e){let t=_w(),n=t.workerUrl||"https://9remote.cc";if(!t.permanentKey){le(e,400,"No permanent key set");return}try{let s=await(await po(`${n}/api/temp-key/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t.permanentKey,expiryMinutes:30})})).json(),o=`${n}/login?k=${s.tempKey}`;vn({oneTimeKey:s.tempKey,oneTimeKeyExpiresAt:s.expiresAt,qrUrl:o}),X(e,{oneTimeKey:s.tempKey,expiresAt:s.expiresAt,qrUrl:o})}catch(i){le(e,500,i.message)}}async function GR(r,e){try{let t=await $R(),{key:n}=NR(t),i=ew();tw(t,n,i?.name||"Default"),vn({permanentKey:n}),X(e,{ok:!0,permanentKey:n})}catch(t){le(e,500,t.message)}}Lt();async function zR(r,e){let t=await Dt(r,e);if(!t)return;let n=DA(t.socketId);X(e,{ok:n})}async function VR(r,e){let t=await Dt(r,e);if(!t)return;let n=BA(t.socketId);X(e,{ok:n})}function KR(r,e){X(e,{pending:CA()})}function YR(r,e){X(e,{devices:SA()})}function JR(r,e){X(e,{rejected:OA()})}async function XR(r,e){let t=await Dt(r,e);if(!t)return;let n=LA(t.deviceId);X(e,{ok:n})}async function ZR(r,e){let t=await Dt(r,e);t&&(Xu(t.deviceId),ro(t.deviceId),X(e))}async function QR(r,e){let t=await Dt(r,e);t&&(Xu(t.deviceId),bA(t.deviceId),X(e))}async function eO(r,e){let t=await Dt(r,e);if(!t)return;let n=Xu(t.deviceId);X(e,{disconnected:n})}function tO(r,e){X(e,{enabled:Ju()})}async function rO(r,e){let t=await Dt(r,e);if(!t)return;let n=wA(t.deviceId,t.label);X(e,{ok:n})}async function nO(r,e){let t=await Dt(r,e);if(!t)return;let n=PA(!!t.enabled);X(e,{enabled:n})}Lt();hi();var iO={},J$=1e4;function sO(r,e){if(e)return{type:e.type||"stop",sessionId:e.sessionId||"",tool:e.tool||"claude"};let t=JSON.parse(r||"{}");return{type:t.type||"stop",sessionId:t.sessionId||"",tool:t.tool||"claude"}}async function oO(r,e){let t="";await new Promise(n=>{r.on("data",i=>t+=i),r.on("end",n)});try{cO(sO(t,null)),X(e,{success:!0})}catch{le(e,400,"Invalid JSON")}}function aO(r,e,{query:t}){cO(sO(null,t)),X(e,{success:!0})}function cO({type:r,sessionId:e,tool:t}){let n=Date.now(),i=Ma();if(!i||!e)return;let s={type:r,sessionId:e,tool:t,timestamp:n};kT(e,s),yt(i,"chatNotification",s);let o=`${e}:${r}`;n-(iO[o]||0)<J$||(iO[o]=n,TT(s))}Lt();Tl();xs();pt();yn();function lO(){return{mode:lh(),active:ch(),presets:Object.keys($.sleepInhibit?.presets||{})}}function uO(r,e){X(e,lO())}async function pO(r,e){let t=await Dt(r,e);if(!t)return;let n=Yo(t.mode);Qb({sleepInhibitMode:n});let i=lO();Et("sleepInhibit",i),X(e,i)}Lt();async function fO(r,e){try{let t=await Dl();X(e,{sessions:t})}catch(t){le(e,500,t.message)}}async function dO(r,e){let t=await Dt(r,e);if(t){if(!t.sessionId)return le(e,400,"sessionId required");try{await mi(t.sessionId),X(e)}catch(n){le(e,500,n.message)}}}var An=K(require("os"),1);pt();Lt();function X$(){let r=IS();if(!r?.activeClients)return{total:0,streaming:0};let e=0;for(let t of r.activeClients.values())t.isStreaming&&e++;return{total:r.activeClients.size,streaming:e}}function Z$(){let r=process.memoryUsage(),e=An.default.cpus();return{agent:{pid:process.pid,version:"2.0.77",nodeVersion:process.version,platform:`${process.platform}/${process.arch}`,uptimeSec:Math.round(process.uptime()),memory:{heapUsedMB:Math.round(r.heapUsed/1048576*10)/10,heapTotalMB:Math.round(r.heapTotal/1048576*10)/10,rssMB:Math.round(r.rss/1048576*10)/10,externalMB:Math.round(r.external/1048576*10)/10}},os:{hostname:An.default.hostname(),platform:An.default.platform(),arch:An.default.arch(),uptimeSec:Math.round(An.default.uptime()),loadAvg:An.default.loadavg(),cpuModel:e?.[0]?.model||"unknown",cpuCount:e.length,totalMemMB:Math.round(An.default.totalmem()/1048576),freeMemMB:Math.round(An.default.freemem()/1048576)},remote:{available:$l(),...X$(),memoryWarningThresholdMB:$.resourceManagement.memoryWarningThreshold},timestamp:Date.now()}}function hO(r,e){try{X(e,Z$())}catch(t){le(e,500,"stats error",t.message)}}Tl();xs();pt();Dv();var Kn=On("server"),Yn=(0,yO.fileURLToPath)(new URL(".",__importMetaUrl)),xO=process.env.NODE_ENV==="development",Q$=5173,Jg=(0,Ii.existsSync)((0,rr.join)(Yn,"ui","dist"))?(0,rr.join)(Yn,"ui","dist"):(0,rr.join)(Yn,"ui"),e4={".html":"text/html",".js":"application/javascript",".css":"text/css",".svg":"image/svg+xml",".png":"image/png",".ico":"image/x-icon",".woff2":"font/woff2",".woff":"font/woff"};function t4(r,e,t){let n=(0,ip.request)({hostname:"localhost",port:Q$,path:r.url,method:r.method,headers:r.headers},i=>{e.writeHead(i.statusCode,i.headers),i.pipe(e)});n.on("error",()=>t?t():void(e.writeHead(502),e.end("Vite dev server not ready"))),r.pipe(n)}function mO(r,e){if(!(0,Ii.existsSync)(e))return!1;let t=e4[(0,rr.extname)(e)]||"application/octet-stream";return r.setHeader("Content-Type",t),r.writeHead(200),r.end((0,Ii.readFileSync)(e)),!0}async function Xg(r){try{let e=await po(Op);if(!e.ok)return;let{version:t}=await e.json();t&&HR(r,t)&&(Sw({version:t}),Et("updateAvailable",{version:t}),XT())}catch{}}var gO=0;function r4(r){let e=Date.now();e-gO<Fa.connectCheckDebounceMs||(gO=e,Xg(r))}function n4(r,e){if(process.env.CODESPACES!=="true"){le(e,400,"Not running on Codespaces");return}let t=process.env.CODESPACE_NAME;if(!t){le(e,400,"Codespace name not found");return}let n=Ma();n&&n.emit("codespace:stopping"),X(e,{success:!0,message:"Stopping codespace..."}),setTimeout(()=>(0,Pi.execFile)("gh",["codespace","stop","-c",t],{windowsHide:!0}),500)}var _O;async function vO(r,e,{pathname:t}){let n=r.headers.authorization;if(!n||!n.startsWith("Bearer ")||!rp(n.slice(7))){le(e,401,"Unauthorized");return}let{parseJsonBody:i}=await Promise.resolve().then(()=>(Lt(),Li)),s=await i(r,e);if(s){if(!s.port){le(e,400,"Port required");return}t.endsWith("start")?SR(s.port):ER(s.port),X(e,{success:!0})}}function i4(r,e,{pathname:t,search:n}){let i=t.match(/^\/proxy\/(\d+)(\/.*)?$/);i?CR(_O,r,e,i[1],i[2]||"/",n):le(e,404,"Not found")}var s4=[{path:"/api/health",method:"GET",public:!0,handler:(r,e)=>X(e,{status:"ok",timestamp:Date.now()})},{path:"/api/version",method:"GET",public:!0,handler:(r,e)=>{X(e,{version:"2.0.77"})}},{path:"/api/notify",method:"POST",public:!0,handler:oO},{path:"/api/notify",method:"GET",public:!0,handler:aO},{path:"/proxy/*",method:"*",public:!0,handler:i4},{path:"/api/ui/events",method:"GET",handler:Ow},{path:"/api/local-token",method:"GET",handler:Cw},{path:"/api/ui/state",method:"GET",handler:Mw},{path:"/api/ui/state",method:"POST",handler:Pw},{path:"/api/ui/stop",method:"POST",handler:Iw},{path:"/api/ui/start",method:"POST",handler:Nw},{path:"/api/ui/stop-tunnel",method:"POST",handler:Dw},{path:"/api/ui/shutdown",method:"POST",handler:Lw},{path:"/api/update",method:"POST",handler:Bw},{path:"/api/system/stats",method:"GET",handler:hO},{path:"/api/key/one-time",method:"POST",handler:WR},{path:"/api/key/regenerate",method:"POST",handler:GR},{path:"/api/device/approve",method:"POST",handler:zR},{path:"/api/device/reject",method:"POST",handler:VR},{path:"/api/device/pending",method:"GET",handler:KR},{path:"/api/device/approved",method:"GET",handler:YR},{path:"/api/device/rejected",method:"GET",handler:JR},{path:"/api/device/approve-rejected",method:"POST",handler:XR},{path:"/api/device/clear-rejected",method:"POST",handler:ZR},{path:"/api/device/remove",method:"POST",handler:QR},{path:"/api/device/label",method:"POST",handler:rO},{path:"/api/device/disconnect",method:"POST",handler:eO},{path:"/api/device/auto-approve",method:"GET",handler:tO},{path:"/api/device/auto-approve",method:"POST",handler:nO},{path:"/api/connections",method:"GET",handler:jw},{path:"/api/logs",method:"GET",handler:Fw},{path:"/api/permissions",method:"GET",handler:qw},{path:"/api/permissions/request",method:"POST",handler:Ww},{path:"/api/desktop/toggle",method:"POST",handler:Hw},{path:"/api/autostart",method:"GET",handler:Uw},{path:"/api/autostart",method:"POST",handler:$w},{path:"/api/sleep-inhibit",method:"GET",handler:uO},{path:"/api/sleep-inhibit",method:"POST",handler:pO},{path:"/api/sessions",method:"GET",handler:fO},{path:"/api/sessions/delete",method:"POST",handler:dO},{path:"/api/local-sites",method:"*",public:!0,handler:DR},{path:"/api/codespace/stop",method:"POST",handler:n4},{path:"/api/proxy/start",method:"POST",public:!0,handler:vO},{path:"/api/proxy/end",method:"POST",public:!0,handler:vO}];var o4=parseInt(process.env.PORT||"2208",10),qa=null;function a4(r){if(process.platform!=="win32")try{let e=(0,Pi.execSync)(`pgrep -f "vite --config ${r}"`,{encoding:"utf8"}).trim();for(let t of e.split(`
|
|
295
|
-
`).filter(Boolean))if((0,Pi.execSync)(`ps -o ppid= -p ${t}`,{encoding:"utf8"}).trim()==="1")try{process.kill(Number(t))}catch{}}catch{}}function c4(){if(!xO)return;let r=(0,rr.join)(Yn,"vite.config.js");if(!(0,Ii.existsSync)(r))return;a4(r);let e=(0,Ii.existsSync)((0,rr.join)(Yn,"node_modules",".bin","vite"))?(0,rr.join)(Yn,"node_modules",".bin","vite"):(0,rr.join)(Yn,"..","node_modules",".bin","vite");qa=(0,Pi.spawn)("node",[e,"--config",r],{cwd:Yn,stdio:"ignore",detached:!1}),qa.on("error",()=>{}),qa.unref()}async function bO(){let r=eh(),e=r.sleepInhibitMode;e||(r.sleepInhibit===!1?e="never":e=$.sleepInhibit?.defaultMode||"never"),Yo(e),await JT(),_O=TR(),c4();let n=Ap(s4,{fallback:(a,c,{pathname:l})=>{if(l.startsWith("/api/")||l.startsWith("/socket.io")){le(c,404,"Not found");return}let u=!!a.headers["cf-connecting-ip"],f=a.socket.remoteAddress==="127.0.0.1"||a.socket.remoteAddress==="::1";if(u||!f){le(c,403,"Forbidden");return}let h=()=>{let g=l==="/"||l===""?(0,rr.join)(Jg,"index.html"):(0,rr.join)(Jg,l);mO(c,g)||mO(c,(0,rr.join)(Jg,"index.html"))};if(xO){t4(a,c,h);return}h()}}),i=(0,ip.createServer)(async(a,c)=>{FA(c),!HA(a,c)&&await n(a,c)});Yd(),yw(),xw(),Al(),process.platform==="darwin"&&setInterval(Al,Av),await jA(i),i.listen(o4,a=>{if(a)throw a;let c="2.0.
|
|
294
|
+
`);for(let s of i){let o=s.match(/[:\*\]](\d{2,5})(?:\s|$)/g);if(o)for(let a of o){let c=parseInt(a.replace(/[:\*\]\s]/g,""),10);c>0&&c<=65535&&(c===80||c===443||c>=1024)&&e.add(c)}}return Array.from(e)}catch(t){return console.error("Failed to get listening ports:",t.message),[80,443,3e3,3001,4200,5e3,5173,8e3,8080,9e3]}}function $$(r,e=2e3){return new Promise(t=>{let n=kR.default.request({host:"localhost",port:r,method:"GET",path:"/",timeout:e},i=>{i.on("data",()=>{}),i.on("end",()=>{}),t({active:!0,protocol:"http",status:i.statusCode})});n.on("error",i=>{t({active:!1,error:i.message})}),n.on("timeout",()=>{n.destroy(),t({active:!1,error:"timeout"})}),n.end()})}function W$(r,e=2e3){return new Promise(t=>{let n=AR.default.request({host:"localhost",port:r,method:"GET",path:"/",timeout:e,rejectUnauthorized:!1},i=>{i.on("data",()=>{}),i.on("end",()=>{}),t({active:!0,protocol:"https",status:i.statusCode})});n.on("error",i=>{t({active:!1,error:i.message})}),n.on("timeout",()=>{n.destroy(),t({active:!1,error:"timeout"})}),n.end()})}async function G$(r){let[e,t]=await Promise.all([$$(r),W$(r)]);return t.active?{port:r,...t}:e.active?{port:r,...e}:{port:r,active:!1}}async function MR(){let r=await U$();return(await Promise.all(r.map(t=>G$(t)))).filter(t=>t.active).map(t=>({port:t.port,protocol:t.protocol,url:`${t.protocol}://localhost:${t.port}`,name:`localhost:${t.port}`,status:t.status})).sort((t,n)=>t.port-n.port)}var PR=K(require("crypto"),1),z$=process.env.API_KEY_SECRET||"9remote-api-key-secret";function V$(){let r="abcdefghijklmnopqrstuvwxyz0123456789",e="";for(let t=0;t<4;t++)e+=r.charAt(Math.floor(Math.random()*r.length));return e}function IR(r,e){return PR.default.createHmac("sha256",z$).update(r+e).digest("hex").slice(0,6)}function NR(r){let e=r.slice(0,8),t=V$(),n=IR(e,t);return{key:`sk-${e}-${t}-${n}`,keyId:t}}function K$(r){if(!r||!r.startsWith("sk-"))return null;let e=r.split("-");if(e.length===4){let[,t,n,i]=e,s=IR(t,n);return i!==s?null:{machineId:t,keyId:n}}return null}function rp(r){return K$(r)!==null}async function DR(r,e){let t=r.headers.authorization;if(!t||!t.startsWith("Bearer ")){e.setHeader("Content-Type","application/json"),e.writeHead(401),e.end(JSON.stringify({error:"Unauthorized: Missing API key"}));return}let n=t.slice(7);if(!rp(n)){e.setHeader("Content-Type","application/json"),e.writeHead(401),e.end(JSON.stringify({error:"Unauthorized: Invalid API key"}));return}let i=await MR();e.setHeader("Content-Type","application/json"),e.writeHead(200),e.end(JSON.stringify(i))}dl();var jR=require("url");var np=K(require("path"),1),FR=K(require("os"),1);bt();var LR=K(require("path"),1),BR=K(require("os"),1);var HV=LR.default.join(BR.default.homedir(),".9remote","pids");nh();var Fa={checkIntervalMs:36e5,connectCheckDebounceMs:9e5,maxRetry:3,retryDelayMs:3e3,verifyTimeoutMs:15e3,lockTtlMs:3e5,lockFile:"update.lock"};var $V={orange:ao.rgb(230,138,110),orangeDim:ao.rgb(200,120,95)};var XV=np.default.dirname((0,jR.fileURLToPath)(__importMetaUrl));var ZV=np.default.join(FR.default.homedir(),".9remote","cloudflared.pid");function HR(r,e){let t=r.split(".").map(Number),n=e.split(".").map(Number);for(let i=0;i<3;i++){if(n[i]>t[i])return!0;if(n[i]<t[i])return!1}return!1}var QV=np.default.join(ie.STATE,Fa.lockFile);yn();Lt();bt();xs();var UR=K(qR(),1),Yg=K(require("crypto"),1),{machineIdSync:Y$}=UR.default;async function $R(r=null){let e=r||process.env.MACHINE_ID_SALT||"9remote-salt";try{let t=Y$();return Yg.default.createHash("sha256").update(t+e).digest("hex").substring(0,16)}catch(t){return console.error("Error getting machine ID:",t),Yg.default.randomUUID().replace(/-/g,"").substring(0,16)}}yn();async function WR(r,e){let t=_w(),n=t.workerUrl||"https://9remote.cc";if(!t.permanentKey){le(e,400,"No permanent key set");return}try{let s=await(await po(`${n}/api/temp-key/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t.permanentKey,expiryMinutes:30})})).json(),o=`${n}/login?k=${s.tempKey}`;vn({oneTimeKey:s.tempKey,oneTimeKeyExpiresAt:s.expiresAt,qrUrl:o}),X(e,{oneTimeKey:s.tempKey,expiresAt:s.expiresAt,qrUrl:o})}catch(i){le(e,500,i.message)}}async function GR(r,e){try{let t=await $R(),{key:n}=NR(t),i=ew();tw(t,n,i?.name||"Default"),vn({permanentKey:n}),X(e,{ok:!0,permanentKey:n})}catch(t){le(e,500,t.message)}}Lt();async function zR(r,e){let t=await Dt(r,e);if(!t)return;let n=DA(t.socketId);X(e,{ok:n})}async function VR(r,e){let t=await Dt(r,e);if(!t)return;let n=BA(t.socketId);X(e,{ok:n})}function KR(r,e){X(e,{pending:CA()})}function YR(r,e){X(e,{devices:SA()})}function JR(r,e){X(e,{rejected:OA()})}async function XR(r,e){let t=await Dt(r,e);if(!t)return;let n=LA(t.deviceId);X(e,{ok:n})}async function ZR(r,e){let t=await Dt(r,e);t&&(Xu(t.deviceId),ro(t.deviceId),X(e))}async function QR(r,e){let t=await Dt(r,e);t&&(Xu(t.deviceId),bA(t.deviceId),X(e))}async function eO(r,e){let t=await Dt(r,e);if(!t)return;let n=Xu(t.deviceId);X(e,{disconnected:n})}function tO(r,e){X(e,{enabled:Ju()})}async function rO(r,e){let t=await Dt(r,e);if(!t)return;let n=wA(t.deviceId,t.label);X(e,{ok:n})}async function nO(r,e){let t=await Dt(r,e);if(!t)return;let n=PA(!!t.enabled);X(e,{enabled:n})}Lt();hi();var iO={},J$=1e4;function sO(r,e){if(e)return{type:e.type||"stop",sessionId:e.sessionId||"",tool:e.tool||"claude"};let t=JSON.parse(r||"{}");return{type:t.type||"stop",sessionId:t.sessionId||"",tool:t.tool||"claude"}}async function oO(r,e){let t="";await new Promise(n=>{r.on("data",i=>t+=i),r.on("end",n)});try{cO(sO(t,null)),X(e,{success:!0})}catch{le(e,400,"Invalid JSON")}}function aO(r,e,{query:t}){cO(sO(null,t)),X(e,{success:!0})}function cO({type:r,sessionId:e,tool:t}){let n=Date.now(),i=Ma();if(!i||!e)return;let s={type:r,sessionId:e,tool:t,timestamp:n};kT(e,s),yt(i,"chatNotification",s);let o=`${e}:${r}`;n-(iO[o]||0)<J$||(iO[o]=n,TT(s))}Lt();Tl();xs();pt();yn();function lO(){return{mode:lh(),active:ch(),presets:Object.keys($.sleepInhibit?.presets||{})}}function uO(r,e){X(e,lO())}async function pO(r,e){let t=await Dt(r,e);if(!t)return;let n=Yo(t.mode);Qb({sleepInhibitMode:n});let i=lO();Et("sleepInhibit",i),X(e,i)}Lt();async function fO(r,e){try{let t=await Dl();X(e,{sessions:t})}catch(t){le(e,500,t.message)}}async function dO(r,e){let t=await Dt(r,e);if(t){if(!t.sessionId)return le(e,400,"sessionId required");try{await mi(t.sessionId),X(e)}catch(n){le(e,500,n.message)}}}var An=K(require("os"),1);pt();Lt();function X$(){let r=IS();if(!r?.activeClients)return{total:0,streaming:0};let e=0;for(let t of r.activeClients.values())t.isStreaming&&e++;return{total:r.activeClients.size,streaming:e}}function Z$(){let r=process.memoryUsage(),e=An.default.cpus();return{agent:{pid:process.pid,version:"2.0.78",nodeVersion:process.version,platform:`${process.platform}/${process.arch}`,uptimeSec:Math.round(process.uptime()),memory:{heapUsedMB:Math.round(r.heapUsed/1048576*10)/10,heapTotalMB:Math.round(r.heapTotal/1048576*10)/10,rssMB:Math.round(r.rss/1048576*10)/10,externalMB:Math.round(r.external/1048576*10)/10}},os:{hostname:An.default.hostname(),platform:An.default.platform(),arch:An.default.arch(),uptimeSec:Math.round(An.default.uptime()),loadAvg:An.default.loadavg(),cpuModel:e?.[0]?.model||"unknown",cpuCount:e.length,totalMemMB:Math.round(An.default.totalmem()/1048576),freeMemMB:Math.round(An.default.freemem()/1048576)},remote:{available:$l(),...X$(),memoryWarningThresholdMB:$.resourceManagement.memoryWarningThreshold},timestamp:Date.now()}}function hO(r,e){try{X(e,Z$())}catch(t){le(e,500,"stats error",t.message)}}Tl();xs();pt();Dv();var Kn=On("server"),Yn=(0,yO.fileURLToPath)(new URL(".",__importMetaUrl)),xO=process.env.NODE_ENV==="development",Q$=5173,Jg=(0,Ii.existsSync)((0,rr.join)(Yn,"ui","dist"))?(0,rr.join)(Yn,"ui","dist"):(0,rr.join)(Yn,"ui"),e4={".html":"text/html",".js":"application/javascript",".css":"text/css",".svg":"image/svg+xml",".png":"image/png",".ico":"image/x-icon",".woff2":"font/woff2",".woff":"font/woff"};function t4(r,e,t){let n=(0,ip.request)({hostname:"localhost",port:Q$,path:r.url,method:r.method,headers:r.headers},i=>{e.writeHead(i.statusCode,i.headers),i.pipe(e)});n.on("error",()=>t?t():void(e.writeHead(502),e.end("Vite dev server not ready"))),r.pipe(n)}function mO(r,e){if(!(0,Ii.existsSync)(e))return!1;let t=e4[(0,rr.extname)(e)]||"application/octet-stream";return r.setHeader("Content-Type",t),r.writeHead(200),r.end((0,Ii.readFileSync)(e)),!0}async function Xg(r){try{let e=await po(Op);if(!e.ok)return;let{version:t}=await e.json();t&&HR(r,t)&&(Sw({version:t}),Et("updateAvailable",{version:t}),XT())}catch{}}var gO=0;function r4(r){let e=Date.now();e-gO<Fa.connectCheckDebounceMs||(gO=e,Xg(r))}function n4(r,e){if(process.env.CODESPACES!=="true"){le(e,400,"Not running on Codespaces");return}let t=process.env.CODESPACE_NAME;if(!t){le(e,400,"Codespace name not found");return}let n=Ma();n&&n.emit("codespace:stopping"),X(e,{success:!0,message:"Stopping codespace..."}),setTimeout(()=>(0,Pi.execFile)("gh",["codespace","stop","-c",t],{windowsHide:!0}),500)}var _O;async function vO(r,e,{pathname:t}){let n=r.headers.authorization;if(!n||!n.startsWith("Bearer ")||!rp(n.slice(7))){le(e,401,"Unauthorized");return}let{parseJsonBody:i}=await Promise.resolve().then(()=>(Lt(),Li)),s=await i(r,e);if(s){if(!s.port){le(e,400,"Port required");return}t.endsWith("start")?SR(s.port):ER(s.port),X(e,{success:!0})}}function i4(r,e,{pathname:t,search:n}){let i=t.match(/^\/proxy\/(\d+)(\/.*)?$/);i?CR(_O,r,e,i[1],i[2]||"/",n):le(e,404,"Not found")}var s4=[{path:"/api/health",method:"GET",public:!0,handler:(r,e)=>X(e,{status:"ok",timestamp:Date.now()})},{path:"/api/version",method:"GET",public:!0,handler:(r,e)=>{X(e,{version:"2.0.78"})}},{path:"/api/notify",method:"POST",public:!0,handler:oO},{path:"/api/notify",method:"GET",public:!0,handler:aO},{path:"/proxy/*",method:"*",public:!0,handler:i4},{path:"/api/ui/events",method:"GET",handler:Ow},{path:"/api/local-token",method:"GET",handler:Cw},{path:"/api/ui/state",method:"GET",handler:Mw},{path:"/api/ui/state",method:"POST",handler:Pw},{path:"/api/ui/stop",method:"POST",handler:Iw},{path:"/api/ui/start",method:"POST",handler:Nw},{path:"/api/ui/stop-tunnel",method:"POST",handler:Dw},{path:"/api/ui/shutdown",method:"POST",handler:Lw},{path:"/api/update",method:"POST",handler:Bw},{path:"/api/system/stats",method:"GET",handler:hO},{path:"/api/key/one-time",method:"POST",handler:WR},{path:"/api/key/regenerate",method:"POST",handler:GR},{path:"/api/device/approve",method:"POST",handler:zR},{path:"/api/device/reject",method:"POST",handler:VR},{path:"/api/device/pending",method:"GET",handler:KR},{path:"/api/device/approved",method:"GET",handler:YR},{path:"/api/device/rejected",method:"GET",handler:JR},{path:"/api/device/approve-rejected",method:"POST",handler:XR},{path:"/api/device/clear-rejected",method:"POST",handler:ZR},{path:"/api/device/remove",method:"POST",handler:QR},{path:"/api/device/label",method:"POST",handler:rO},{path:"/api/device/disconnect",method:"POST",handler:eO},{path:"/api/device/auto-approve",method:"GET",handler:tO},{path:"/api/device/auto-approve",method:"POST",handler:nO},{path:"/api/connections",method:"GET",handler:jw},{path:"/api/logs",method:"GET",handler:Fw},{path:"/api/permissions",method:"GET",handler:qw},{path:"/api/permissions/request",method:"POST",handler:Ww},{path:"/api/desktop/toggle",method:"POST",handler:Hw},{path:"/api/autostart",method:"GET",handler:Uw},{path:"/api/autostart",method:"POST",handler:$w},{path:"/api/sleep-inhibit",method:"GET",handler:uO},{path:"/api/sleep-inhibit",method:"POST",handler:pO},{path:"/api/sessions",method:"GET",handler:fO},{path:"/api/sessions/delete",method:"POST",handler:dO},{path:"/api/local-sites",method:"*",public:!0,handler:DR},{path:"/api/codespace/stop",method:"POST",handler:n4},{path:"/api/proxy/start",method:"POST",public:!0,handler:vO},{path:"/api/proxy/end",method:"POST",public:!0,handler:vO}];var o4=parseInt(process.env.PORT||"2208",10),qa=null;function a4(r){if(process.platform!=="win32")try{let e=(0,Pi.execSync)(`pgrep -f "vite --config ${r}"`,{encoding:"utf8"}).trim();for(let t of e.split(`
|
|
295
|
+
`).filter(Boolean))if((0,Pi.execSync)(`ps -o ppid= -p ${t}`,{encoding:"utf8"}).trim()==="1")try{process.kill(Number(t))}catch{}}catch{}}function c4(){if(!xO)return;let r=(0,rr.join)(Yn,"vite.config.js");if(!(0,Ii.existsSync)(r))return;a4(r);let e=(0,Ii.existsSync)((0,rr.join)(Yn,"node_modules",".bin","vite"))?(0,rr.join)(Yn,"node_modules",".bin","vite"):(0,rr.join)(Yn,"..","node_modules",".bin","vite");qa=(0,Pi.spawn)("node",[e,"--config",r],{cwd:Yn,stdio:"ignore",detached:!1}),qa.on("error",()=>{}),qa.unref()}async function bO(){let r=eh(),e=r.sleepInhibitMode;e||(r.sleepInhibit===!1?e="never":e=$.sleepInhibit?.defaultMode||"never"),Yo(e),await JT(),_O=TR(),c4();let n=Ap(s4,{fallback:(a,c,{pathname:l})=>{if(l.startsWith("/api/")||l.startsWith("/socket.io")){le(c,404,"Not found");return}let u=!!a.headers["cf-connecting-ip"],f=a.socket.remoteAddress==="127.0.0.1"||a.socket.remoteAddress==="::1";if(u||!f){le(c,403,"Forbidden");return}let h=()=>{let g=l==="/"||l===""?(0,rr.join)(Jg,"index.html"):(0,rr.join)(Jg,l);mO(c,g)||mO(c,(0,rr.join)(Jg,"index.html"))};if(xO){t4(a,c,h);return}h()}}),i=(0,ip.createServer)(async(a,c)=>{FA(c),!HA(a,c)&&await n(a,c)});Yd(),yw(),xw(),Al(),process.platform==="darwin"&&setInterval(Al,Av),await jA(i),i.listen(o4,a=>{if(a)throw a;let c="2.0.78";Xg(c),setInterval(()=>Xg(c),Fa.checkIntervalMs),QT(()=>r4(c))});let s=!1,o=async a=>{if(s)return;s=!0,ah(),Kn.info(`\u{1F6D1} Received ${a}, shutting down gracefully...`);let c=setTimeout(()=>{Kn.error("\u26A0\uFE0F Forced exit"),process.exit(1)},5e3);try{if(i.close(()=>Kn.info("\u2713 HTTP server closed")),qa)try{qa.kill()}catch{}let l=Ma();l&&(l.emit("server:shutdown"),l.close(()=>Kn.info("\u2713 Socket.IO closed"))),await new Promise(u=>setTimeout(u,500)),clearTimeout(c),Kn.info("\u2705 Server stopped cleanly"),process.exit(0)}catch(l){Kn.error(`\u274C Error during shutdown: ${l?.message||l}`),clearTimeout(c),process.exit(1)}};return process.on("SIGINT",()=>o("SIGINT")),process.on("SIGTERM",()=>o("SIGTERM")),process.platform==="win32"&&process.on("SIGBREAK",()=>o("SIGBREAK")),process.on("uncaughtException",a=>{Kn.error(`\u26A0\uFE0F uncaughtException: ${a?.stack||a}`)}),process.on("unhandledRejection",a=>{Kn.error(`\u26A0\uFE0F unhandledRejection: ${a?.stack||a}`)}),i}bO();0&&(module.exports={startServer});
|
|
296
296
|
/*! Bundled license information:
|
|
297
297
|
|
|
298
298
|
negotiator/index.js:
|
|
@@ -2315,19 +2315,19 @@ button {
|
|
|
2315
2315
|
.terminal-wrapper .xterm-screen { touch-action: pan-y !important; }
|
|
2316
2316
|
.xterm .xterm-helpers { z-index: 0 !important; }
|
|
2317
2317
|
.xterm-helper-textarea { opacity: 0 !important; }
|
|
2318
|
-
/* Thin continuous
|
|
2318
|
+
/* Thin continuous amber glow ring around focused pane */
|
|
2319
2319
|
.terminal-focus-glow::after {
|
|
2320
2320
|
content: "";
|
|
2321
2321
|
position: absolute;
|
|
2322
2322
|
inset: 0;
|
|
2323
|
-
border: 1px solid
|
|
2324
|
-
box-shadow: 0 0 6px rgba(
|
|
2323
|
+
border: 1px solid #fbbf24;
|
|
2324
|
+
box-shadow: 0 0 6px rgba(251, 191, 36, 0.7);
|
|
2325
2325
|
pointer-events: none;
|
|
2326
2326
|
z-index: 2;
|
|
2327
2327
|
}
|
|
2328
|
-
/* Finished-terminal highlight — animated gradient
|
|
2328
|
+
/* Finished-terminal highlight — animated gradient top bar (separate pseudo from focus-glow) */
|
|
2329
2329
|
/* Finished-terminal badge styles — KEEP IN SYNC with web/app/globals.css (separate build) */
|
|
2330
|
-
.terminal-done-border::
|
|
2330
|
+
.terminal-done-border::before {
|
|
2331
2331
|
content: "";
|
|
2332
2332
|
position: absolute;
|
|
2333
2333
|
top: 0;
|
|
@@ -2338,6 +2338,7 @@ button {
|
|
|
2338
2338
|
background-size: 200% 100%;
|
|
2339
2339
|
animation: borderFlow 3s linear infinite;
|
|
2340
2340
|
pointer-events: none;
|
|
2341
|
+
z-index: 3;
|
|
2341
2342
|
}
|
|
2342
2343
|
@keyframes borderFlow {
|
|
2343
2344
|
from { background-position: 0% 0; }
|