9remote 2.0.55 → 2.0.57
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 +2 -2
- package/dist/server.cjs +2 -2
- package/dist/ui/assets/{index-2FuQGIl3.js → index-Ct-F6Gco.js} +3127 -3125
- package/dist/ui/index.html +1 -1
- package/package.json +1 -1
package/dist/cli.cjs
CHANGED
|
@@ -9,7 +9,7 @@ Right-click to open / quit`}function Hi(){let{port:e,tunnelUrl:n}=Ct,r=process.p
|
|
|
9
9
|
`}l||(t+=p)}else{var v=qr(er).times(o.getModuleCount()+3);t+=v+`
|
|
10
10
|
`,o.modules.forEach(function(T){t+=er,t+=T.map(lc).join(""),t+=er+`
|
|
11
11
|
`}),t+=v}r?r(t):console.log(t)},setErrorLevel:function(e){this.error=gs[e]||this.error}}});var Rn=require("fs"),jt=require("path"),co=require("url"),lo=A(require("os"),1);var Tn=A(require("dns"),1),Ae=A(require("path"),1),no=A(require("os"),1),ee="9remote",or=process.env.NREMOTE_REGISTRY||`https://registry.npmjs.org/${ee}/latest`,ke=`${ee}@latest`,De=Ae.default.join(no.default.homedir(),".9remote"),te={ROOT:De,LOGS:Ae.default.join(De,"logs"),STATE:Ae.default.join(De,"state"),CONFIG:Ae.default.join(De,"config"),BIN:Ae.default.join(De,"bin"),PIDS:Ae.default.join(De,"pids"),BUFFERS:Ae.default.join(De,"buffers"),DAEMON:Ae.default.join(De,"daemon")},ro=new Tn.default.promises.Resolver;ro.setServers(["1.1.1.1","1.0.0.1","8.8.8.8"]);var rr=Tn.default.lookup,js=/^(\d{1,3}\.){3}\d{1,3}$|^::1$|^[0-9a-f:]+$/i;Tn.default.lookup=(e,n,r)=>{if(typeof n=="function"&&(r=n,n={}),e==="localhost"||js.test(e))return rr(e,n,r);ro.resolve4(e).then(o=>{if(!o?.length)return rr(e,n,r);n.all?r(null,o.map(t=>({address:t,family:4}))):r(null,o[0],4)}).catch(()=>rr(e,n,r))};var I=2208,to=5173;var Oc=[`http://localhost:${I}`,`http://127.0.0.1:${I}`,`http://localhost:${to}`,`http://127.0.0.1:${to}`],Ht={fileName:"agent.log",rotatedName:"agent.log.1",maxBytes:2*1024*1024,cleanupAfterDays:7},oo=60,C={STOPPED:0,PREPARING:1,CONNECTING:2,TUNNELING:3,VERIFYING:4,READY:5},io={showTunnelUrlInMenu:!1};var so={CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN:"1"};var ao={checkIntervalMs:3e4,requestTimeoutMs:5e3},ae={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}},Ks={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 K(e,n={}){return fetch(e,{...n,headers:{...Ks,...n.headers}})}var Gs=(0,jt.dirname)((0,co.fileURLToPath)(__importMetaUrl)),Ws=[(0,jt.join)(lo.default.homedir(),".9remote",".env"),(0,jt.join)(Gs,"..",".env")];function Vs(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 Ws)if((0,Rn.existsSync)(e))try{Vs((0,Rn.readFileSync)(e,"utf8"))}catch{}for(let[e,n]of Object.entries(so))process.env[e]||(process.env[e]=n);var lr=A(require("path"),1),yo=A(require("fs"),1),wo=require("url");var fo=A(uo(),1),sr=A(require("crypto"),1),{machineIdSync:Ys}=fo.default;async function dt(e=null){let n=e||process.env.MACHINE_ID_SALT||"9remote-salt";try{let r=Ys();return sr.default.createHash("sha256").update(r+n).digest("hex").substring(0,16)}catch(r){return console.error("Error getting machine ID:",r),sr.default.randomUUID().replace(/-/g,"").substring(0,16)}}var po=A(require("crypto"),1),Js=process.env.API_KEY_SECRET||"9remote-api-key-secret";function Qs(){let e="abcdefghijklmnopqrstuvwxyz0123456789",n="";for(let r=0;r<4;r++)n+=e.charAt(Math.floor(Math.random()*e.length));return n}function qs(e,n){return po.default.createHmac("sha256",Js).update(e+n).digest("hex").slice(0,6)}function mt(e){let n=e.slice(0,8),r=Qs(),o=qs(n,r);return{key:`sk-${n}-${r}-${o}`,keyId:r}}function xn(e){return!e||e.length<8?"sk-***":`${e.slice(0,3)}***${e.slice(-4)}`}var ie=A(require("fs"),1),Gt=A(require("path"),1);var Dc=te.STATE,ar=Gt.default.join(te.STATE,"state.json"),cr=Gt.default.join(te.ROOT,"keys.json"),bn=Gt.default.join(te.STATE,"cmd.json"),Fc=Gt.default.join(te.STATE,"settings.json");function An(){for(let e of[te.ROOT,te.STATE])ie.default.existsSync(e)||ie.default.mkdirSync(e,{recursive:!0})}function kn(e){try{An(),ie.default.writeFileSync(ar,JSON.stringify(e,null,2),{mode:384})}catch(n){console.error("Error saving state:",n)}}function mo(){try{ie.default.existsSync(ar)&&ie.default.unlinkSync(ar)}catch{}}function _n(){try{return An(),ie.default.existsSync(cr)?JSON.parse(ie.default.readFileSync(cr,"utf8")):{machineId:null,key:null,name:"Default",createdAt:null}}catch{return{machineId:null,key:null,name:"Default",createdAt:null}}}function ht(e){try{An(),ie.default.writeFileSync(bn,JSON.stringify({cmd:e,ts:Date.now()}))}catch{}}function ho(){try{if(!ie.default.existsSync(bn))return null;let e=JSON.parse(ie.default.readFileSync(bn,"utf8"));return ie.default.unlinkSync(bn),e.cmd}catch{return null}}function et(e,n,r="Default"){try{An();let o={machineId:e,key:n,name:r,createdAt:new Date().toISOString()};return ie.default.writeFileSync(cr,JSON.stringify(o,null,2),{mode:384}),o}catch(o){return console.error("Error saving key:",o),null}}function go(){return process.env.CODESPACES==="true"}var Xs=lr.default.dirname((0,wo.fileURLToPath)(__importMetaUrl));async function Fe(){let e=await dt();if(go()&&process.env.NREMOTE_API_KEY)return et(e,process.env.NREMOTE_API_KEY,"Codespace");let n=_n();if(!n.key){let{key:r}=mt(e);n=et(e,r,"Default")}return n}function we(){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 Ws)if((0,Rn.existsSync)(e))try{Vs((0,Rn.readFileSync)(e,"utf8"))}catch{}for(let[e,n]of Object.entries(so))process.env[e]||(process.env[e]=n);var lr=A(require("path"),1),yo=A(require("fs"),1),wo=require("url");var fo=A(uo(),1),sr=A(require("crypto"),1),{machineIdSync:Ys}=fo.default;async function dt(e=null){let n=e||process.env.MACHINE_ID_SALT||"9remote-salt";try{let r=Ys();return sr.default.createHash("sha256").update(r+n).digest("hex").substring(0,16)}catch(r){return console.error("Error getting machine ID:",r),sr.default.randomUUID().replace(/-/g,"").substring(0,16)}}var po=A(require("crypto"),1),Js=process.env.API_KEY_SECRET||"9remote-api-key-secret";function Qs(){let e="abcdefghijklmnopqrstuvwxyz0123456789",n="";for(let r=0;r<4;r++)n+=e.charAt(Math.floor(Math.random()*e.length));return n}function qs(e,n){return po.default.createHmac("sha256",Js).update(e+n).digest("hex").slice(0,6)}function mt(e){let n=e.slice(0,8),r=Qs(),o=qs(n,r);return{key:`sk-${n}-${r}-${o}`,keyId:r}}function xn(e){return!e||e.length<8?"sk-***":`${e.slice(0,3)}***${e.slice(-4)}`}var ie=A(require("fs"),1),Gt=A(require("path"),1);var Dc=te.STATE,ar=Gt.default.join(te.STATE,"state.json"),cr=Gt.default.join(te.ROOT,"keys.json"),bn=Gt.default.join(te.STATE,"cmd.json"),Fc=Gt.default.join(te.STATE,"settings.json");function An(){for(let e of[te.ROOT,te.STATE])ie.default.existsSync(e)||ie.default.mkdirSync(e,{recursive:!0})}function kn(e){try{An(),ie.default.writeFileSync(ar,JSON.stringify(e,null,2),{mode:384})}catch(n){console.error("Error saving state:",n)}}function mo(){try{ie.default.existsSync(ar)&&ie.default.unlinkSync(ar)}catch{}}function _n(){try{return An(),ie.default.existsSync(cr)?JSON.parse(ie.default.readFileSync(cr,"utf8")):{machineId:null,key:null,name:"Default",createdAt:null}}catch{return{machineId:null,key:null,name:"Default",createdAt:null}}}function ht(e){try{An(),ie.default.writeFileSync(bn,JSON.stringify({cmd:e,ts:Date.now()}))}catch{}}function ho(){try{if(!ie.default.existsSync(bn))return null;let e=JSON.parse(ie.default.readFileSync(bn,"utf8"));return ie.default.unlinkSync(bn),e.cmd}catch{return null}}function et(e,n,r="Default"){try{An();let o={machineId:e,key:n,name:r,createdAt:new Date().toISOString()};return ie.default.writeFileSync(cr,JSON.stringify(o,null,2),{mode:384}),o}catch(o){return console.error("Error saving key:",o),null}}function go(){return process.env.CODESPACES==="true"}var Xs=lr.default.dirname((0,wo.fileURLToPath)(__importMetaUrl));async function Fe(){let e=await dt();if(go()&&process.env.NREMOTE_API_KEY)return et(e,process.env.NREMOTE_API_KEY,"Codespace");let n=_n();if(!n.key){let{key:r}=mt(e);n=et(e,r,"Default")}return n}function we(){return"2.0.57"}var ve=A(require("fs"),1),fr=A(require("path"),1);var Pn=te.LOGS,Vt=fr.default.join(Pn,Ht.fileName),In=fr.default.join(Pn,Ht.rotatedName),vo=!1,So=null;function Zs(){ve.default.existsSync(Pn)||ve.default.mkdirSync(Pn,{recursive:!0})}function zs(){try{if(ve.default.statSync(Vt).size<Ht.maxBytes)return;try{ve.default.rmSync(In,{force:!0})}catch{}ve.default.renameSync(Vt,In)}catch{}}function ea(){try{let e=ve.default.statSync(In);Date.now()-e.mtimeMs>Ht.cleanupAfterDays*864e5&&ve.default.rmSync(In,{force:!0})}catch{}}function pr(e){try{zs(),ve.default.appendFileSync(Vt,e+`
|
|
13
13
|
`)}catch{}}function ur(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 Eo(){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 ta=/\x1b\[[0-9;]*m/g,na=/https?:\/\/[^\s]+/g;function ra(e){return String(e).replace(ta,"").replace(na,"").replace(/\s+$/g,"")}function Wt(e,n,r){let o=ra(r);if(!o)return;let t=n==="info"?e:`${e}:${n}`,i=`${Eo()} [${t}] ${o}`;if(pr(i),So)try{So(i)}catch{}}function oa(){process.on("uncaughtException",e=>Wt("crash","error",`uncaughtException: ${e?.stack||e?.message||e}`)),process.on("unhandledRejection",e=>{let n=e instanceof Error?e.stack||e.message:String(e);Wt("crash","error",`unhandledRejection: ${n}`)}),process.on("exit",e=>pr(`${Eo()} [exit] code=${e} pid=${process.pid}`))}function To(){vo||(vo=!0,Zs(),ea(),pr(`
|
|
14
14
|
=== SESSION ${new Date().toISOString()} pid=${process.pid} argv=${process.argv.slice(2).join(" ")} ===`),oa())}function Ro(e=60){try{return ve.default.readFileSync(Vt,"utf8").split(`
|
|
15
15
|
`).filter(Boolean).slice(-e)}catch{return[]}}function Y(e){return{info:(...n)=>Wt(e,"info",ur(n)),warn:(...n)=>Wt(e,"warn",ur(n)),error:(...n)=>Wt(e,"error",ur(n))}}var Yt=Vt;var xo=(e=0)=>n=>`\x1B[${n+e}m`,bo=(e=0)=>n=>`\x1B[${38+e};5;${n}m`,Ao=(e=0)=>(n,r,o)=>`\x1B[${38+e};2;${n};${r};${o}m`,L={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]}},Jc=Object.keys(L.modifier),ia=Object.keys(L.color),sa=Object.keys(L.bgColor),Qc=[...ia,...sa];function aa(){let e=new Map;for(let[n,r]of Object.entries(L)){for(let[o,t]of Object.entries(r))L[o]={open:`\x1B[${t[0]}m`,close:`\x1B[${t[1]}m`},r[o]=L[o],e.set(t[0],t[1]);Object.defineProperty(L,n,{value:r,enumerable:!1})}return Object.defineProperty(L,"codes",{value:e,enumerable:!1}),L.color.close="\x1B[39m",L.bgColor.close="\x1B[49m",L.color.ansi=xo(),L.color.ansi256=bo(),L.color.ansi16m=Ao(),L.bgColor.ansi=xo(10),L.bgColor.ansi256=bo(10),L.bgColor.ansi16m=Ao(10),Object.defineProperties(L,{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=>L.rgbToAnsi256(...L.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)=>L.ansi256ToAnsi(L.rgbToAnsi256(n,r,o)),enumerable:!1},hexToAnsi:{value:n=>L.ansi256ToAnsi(L.hexToAnsi256(n)),enumerable:!1}}),L}var ca=aa(),de=ca;var Cn=A(require("node:process"),1),_o=A(require("node:os"),1),dr=A(require("node:tty"),1);function ce(e,n=globalThis.Deno?globalThis.Deno.args:Cn.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:M}=Cn.default,On;ce("no-color")||ce("no-colors")||ce("color=false")||ce("color=never")?On=0:(ce("color")||ce("colors")||ce("color=true")||ce("color=always"))&&(On=1);function la(){if("FORCE_COLOR"in M)return M.FORCE_COLOR==="true"?1:M.FORCE_COLOR==="false"?0:M.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(M.FORCE_COLOR,10),3)}function ua(e){return e===0?!1:{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function fa(e,{streamIsTTY:n,sniffFlags:r=!0}={}){let o=la();o!==void 0&&(On=o);let t=r?On:o;if(t===0)return 0;if(r){if(ce("color=16m")||ce("color=full")||ce("color=truecolor"))return 3;if(ce("color=256"))return 2}if("TF_BUILD"in M&&"AGENT_NAME"in M)return 1;if(e&&!n&&t===void 0)return 0;let i=t||0;if(M.TERM==="dumb")return i;if(Cn.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 M)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(s=>s in M)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(s=>s in M)||M.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in M)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(M.TEAMCITY_VERSION)?1:0;if(M.COLORTERM==="truecolor"||M.TERM==="xterm-kitty"||M.TERM==="xterm-ghostty"||M.TERM==="wezterm")return 3;if("TERM_PROGRAM"in M){let s=Number.parseInt((M.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(M.TERM_PROGRAM){case"iTerm.app":return s>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(M.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(M.TERM)||"COLORTERM"in M?1:i}function ko(e,n={}){let r=fa(e,{streamIsTTY:e&&e.isTTY,...n});return ua(r)}var pa={stdout:ko({isTTY:dr.default.isatty(1)}),stderr:ko({isTTY:dr.default.isatty(2)})},Po=pa;function Io(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 Oo(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
|
|
@@ -17,7 +17,7 @@ Right-click to open / quit`}function Hi(){let{port:e,tunnelUrl:n}=Ct,r=process.p
|
|
|
17
17
|
`)+r,t=o+1,o=e.indexOf(`
|
|
18
18
|
`,t)}while(o!==-1);return i+=e.slice(t),i}var{stdout:Co,stderr:$o}=Po,mr=Symbol("GENERATOR"),gt=Symbol("STYLER"),Jt=Symbol("IS_EMPTY"),Lo=["ansi","ansi","ansi256","ansi16m"],yt=Object.create(null),da=(e,n={})=>{if(n.level&&!(Number.isInteger(n.level)&&n.level>=0&&n.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let r=Co?Co.level:0;e.level=n.level===void 0?r:n.level};var ma=e=>{let n=(...r)=>r.join(" ");return da(n,e),Object.setPrototypeOf(n,Qt.prototype),n};function Qt(e){return ma(e)}Object.setPrototypeOf(Qt.prototype,Function.prototype);for(let[e,n]of Object.entries(de))yt[e]={get(){let r=$n(this,gr(n.open,n.close,this[gt]),this[Jt]);return Object.defineProperty(this,e,{value:r}),r}};yt.visible={get(){let e=$n(this,this[gt],!0);return Object.defineProperty(this,"visible",{value:e}),e}};var hr=(e,n,r,...o)=>e==="rgb"?n==="ansi16m"?de[r].ansi16m(...o):n==="ansi256"?de[r].ansi256(de.rgbToAnsi256(...o)):de[r].ansi(de.rgbToAnsi(...o)):e==="hex"?hr("rgb",n,r,...de.hexToRgb(...o)):de[r][e](...o),ha=["rgb","hex","ansi256"];for(let e of ha){yt[e]={get(){let{level:r}=this;return function(...o){let t=gr(hr(e,Lo[r],"color",...o),de.color.close,this[gt]);return $n(this,t,this[Jt])}}};let n="bg"+e[0].toUpperCase()+e.slice(1);yt[n]={get(){let{level:r}=this;return function(...o){let t=gr(hr(e,Lo[r],"bgColor",...o),de.bgColor.close,this[gt]);return $n(this,t,this[Jt])}}}}var ga=Object.defineProperties(()=>{},{...yt,level:{enumerable:!0,get(){return this[mr].level},set(e){this[mr].level=e}}}),gr=(e,n,r)=>{let o,t;return r===void 0?(o=e,t=n):(o=r.openAll+e,t=n+r.closeAll),{open:e,close:n,openAll:o,closeAll:t,parent:r}},$n=(e,n,r)=>{let o=(...t)=>ya(o,t.length===1?""+t[0]:t.join(" "));return Object.setPrototypeOf(o,ga),o[mr]=e,o[gt]=n,o[Jt]=r,o},ya=(e,n)=>{if(e.level<=0||!n)return e[Jt]?"":n;let r=e[gt];if(r===void 0)return n;let{openAll:o,closeAll:t}=r;if(n.includes("\x1B"))for(;r!==void 0;)n=Io(n,r.close,r.open),r=r.parent;let i=n.indexOf(`
|
|
19
19
|
`);return i!==-1&&(n=Oo(n,t,o,i)),o+n+t};Object.defineProperties(Qt.prototype,yt);var wa=Qt(),nl=Qt({level:$o?$o.level:0});var m=wa;var J=require("fs"),Jo=require("url"),Xt=require("child_process"),Ie=A(require("path"),1),Tt=A(require("os"),1);var wt=A(require("fs"),1),yr=A(require("path"),1),Mo=A(require("os"),1),No=require("child_process"),Ln=yr.default.join(Mo.default.homedir(),".9remote","pids");function va(){try{wt.default.existsSync(Ln)||wt.default.mkdirSync(Ln,{recursive:!0})}catch{}}function wr(e){return yr.default.join(Ln,`${e}.pid`)}function Ue(e,n){if(n)try{va(),wt.default.writeFileSync(wr(e),String(n))}catch{}}function Mn(e){try{let n=wt.default.readFileSync(wr(e),"utf8").trim(),r=parseInt(n,10);return Number.isFinite(r)&&r>0?r:null}catch{return null}}function Be(e){try{wt.default.unlinkSync(wr(e))}catch{}}function Do(e){if(!e)return!1;try{return process.kill(e,0),!0}catch{return!1}}function Sa(e){let n=Mn(e);if(Be(e),!n)return!1;try{process.platform==="win32"?(0,No.execSync)(`taskkill /F /T /PID ${n}`,{stdio:"ignore",windowsHide:!0}):process.kill(n,"SIGKILL")}catch{}return!0}var Ea=["cloudflared","agent"];function Fo(){for(let e of Ea)Sa(e)}function Uo(){return Ln}var qt=require("child_process"),_e=require("fs"),St=require("path"),Er=A(require("os"),1),vt=A(require("path"),1),Ho=require("url");var sl=(0,St.join)(te.LOGS,"autostart.log"),vr="cc.9remote.agent";var Sr=Er.default.homedir(),Bo=vt.default.dirname((0,Ho.fileURLToPath)(__importMetaUrl)),al={darwin:(0,St.join)(Sr,"Library","LaunchAgents",`${vr}.plist`),linux:(0,St.join)(Sr,".config","autostart",`${vr}.desktop`),linuxSystemd:(0,St.join)(Sr,".config","systemd","user",`${vr}.service`)};function Tr(){for(let e=Bo,n=null;e!==n;n=e,e=vt.default.dirname(e)){let r=vt.default.join(e,"package.json");if((0,_e.existsSync)(r)){try{let o=JSON.parse((0,_e.readFileSync)(r,"utf8"));if(o.name!==ee)continue;let t=typeof o.bin=="string"?o.bin:o.bin?.[ee];if(t){let i=vt.default.resolve(e,t);if((0,_e.existsSync)(i))return i}}catch{}break}}return process.argv[1]||vt.default.resolve(Bo,"..","index.js")}function Rr(){return process.execPath}function jo(e){let n=Rr(),r=Tr();if(process.platform==="win32"){let t=e.join(" "),i=(0,St.join)(Er.default.tmpdir(),`${ee}-launch.vbs`);return(0,_e.writeFileSync)(i,`CreateObject("WScript.Shell").Run """${n}"" ""${r}"" ${t}", 0, False
|
|
20
|
-
`),(0,qt.execFile)("wscript.exe",[i],{windowsHide:!0}).unref?.(),null}let o=(0,qt.spawn)(n,[r,...e],{detached:!0,stdio:"ignore"});return o.unref(),o.pid||null}var N="https://9remote.cc",Ko=3e4,Go=500,xr=300,me={cmdMs:1e3,pendingApprovalMs:3e3,statsMs:5e3,serverReadyIntervalMs:200,serverReadyTimeoutMs:5e3,bgServerReadyTimeoutMs:15e3,bgServerReadyIntervalMs:300},He={intervalMs:2e3,timeoutMs:18e4,fetchTimeoutMs:5e3,dnsTimeoutMs:2e3,maxLogEntries:80,postReadyHoldMs:2e3},ne={killCloudflaredMs:500,killCloudflaredTuiMs:300,serverBootMs:2e3,trayReadyMs:1e3,postReadyHoldMs:2e3,bgSpawnFlushMs:400},Pe={maxLogLines:200,headerWidth:44},Et={checkIntervalMs:36e5,connectCheckDebounceMs:9e5,maxRetry:3,retryDelayMs:3e3,verifyTimeoutMs:15e3,lockTtlMs:3e5,lockFile:"update.lock"},Wo=5e3,Vo=2,Yo=3e4,le={orange:m.rgb(230,138,110),orangeDim:m.rgb(200,120,95)};var Ta=Ie.default.dirname((0,Jo.fileURLToPath)(__importMetaUrl)),Qo=3e3;var Dn=2208,br=Ie.default.join(Tt.default.homedir(),".9remote","cloudflared.pid");function Ra(){try{Fo()}catch{}try{if((0,J.existsSync)(br)){let e=parseInt((0,J.readFileSync)(br,"utf8"));if(Number.isFinite(e))try{process.kill(e)}catch{}try{(0,J.unlinkSync)(br)}catch{}}}catch{}try{process.platform==="win32"?(0,Xt.execSync)(`for /f "tokens=5" %a in ('netstat -aon ^| findstr :${Dn}') do taskkill /F /PID %a`,{stdio:"ignore",windowsHide:!0}):(0,Xt.execSync)(`lsof -ti:${Dn} | xargs kill -9 2>/dev/null || true`,{stdio:"ignore"})}catch{}if(process.platform==="win32"){let e=Date.now()+1500;for(;Date.now()<e;);}}function qo(){return"2.0.
|
|
20
|
+
`),(0,qt.execFile)("wscript.exe",[i],{windowsHide:!0}).unref?.(),null}let o=(0,qt.spawn)(n,[r,...e],{detached:!0,stdio:"ignore"});return o.unref(),o.pid||null}var N="https://9remote.cc",Ko=3e4,Go=500,xr=300,me={cmdMs:1e3,pendingApprovalMs:3e3,statsMs:5e3,serverReadyIntervalMs:200,serverReadyTimeoutMs:5e3,bgServerReadyTimeoutMs:15e3,bgServerReadyIntervalMs:300},He={intervalMs:2e3,timeoutMs:18e4,fetchTimeoutMs:5e3,dnsTimeoutMs:2e3,maxLogEntries:80,postReadyHoldMs:2e3},ne={killCloudflaredMs:500,killCloudflaredTuiMs:300,serverBootMs:2e3,trayReadyMs:1e3,postReadyHoldMs:2e3,bgSpawnFlushMs:400},Pe={maxLogLines:200,headerWidth:44},Et={checkIntervalMs:36e5,connectCheckDebounceMs:9e5,maxRetry:3,retryDelayMs:3e3,verifyTimeoutMs:15e3,lockTtlMs:3e5,lockFile:"update.lock"},Wo=5e3,Vo=2,Yo=3e4,le={orange:m.rgb(230,138,110),orangeDim:m.rgb(200,120,95)};var Ta=Ie.default.dirname((0,Jo.fileURLToPath)(__importMetaUrl)),Qo=3e3;var Dn=2208,br=Ie.default.join(Tt.default.homedir(),".9remote","cloudflared.pid");function Ra(){try{Fo()}catch{}try{if((0,J.existsSync)(br)){let e=parseInt((0,J.readFileSync)(br,"utf8"));if(Number.isFinite(e))try{process.kill(e)}catch{}try{(0,J.unlinkSync)(br)}catch{}}}catch{}try{process.platform==="win32"?(0,Xt.execSync)(`for /f "tokens=5" %a in ('netstat -aon ^| findstr :${Dn}') do taskkill /F /PID %a`,{stdio:"ignore",windowsHide:!0}):(0,Xt.execSync)(`lsof -ti:${Dn} | xargs kill -9 2>/dev/null || true`,{stdio:"ignore"})}catch{}if(process.platform==="win32"){let e=Date.now()+1500;for(;Date.now()<e;);}}function qo(){return"2.0.57"}function Xo(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 xa(){return process.env.CODESPACES==="true"||process.env.GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN?"GitHub Codespaces":(0,J.existsSync)("/.dockerenv")?"Docker":null}function Fn(){Ra()}async function Zo(){try{let e=qo();if(!e)return null;let n=await K(or,{signal:AbortSignal.timeout(Qo)});if(!n.ok)return null;let{version:r}=await n.json();return r&&Xo(e,r)?{current:e,latest:r}:null}catch{return null}}var Nn=Ie.default.join(te.STATE,Et.lockFile);function ba(){try{if((0,J.existsSync)(Nn)){let{pid:e,ts:n}=JSON.parse((0,J.readFileSync)(Nn,"utf8")),r=Date.now()-n<Et.lockTtlMs,o=!1;try{process.kill(e,0),o=!0}catch{}if(r&&o)return!1}}catch{}try{(0,J.writeFileSync)(Nn,JSON.stringify({pid:process.pid,ts:Date.now()}))}catch{}return!0}async function Aa(){try{let e=await K(or,{signal:AbortSignal.timeout(Qo)});if(!e.ok)return null;let{version:n}=await e.json();return n||null}catch{return null}}function ka(){try{if(process.env.NREMOTE_REGISTRY)return`--registry ${new URL(process.env.NREMOTE_REGISTRY).origin}`}catch{}return""}function _a({currentVersion:e,latest:n,agentPid:r}){let o=Uo(),t=ka(),i=Rr(),s=Tr(),a=Nn,c=`--prefer-online --no-audit --no-fund ${t}`.trim();if(process.platform==="win32"){let f=Ie.default.join(Tt.default.tmpdir(),`${ee}-restart.vbs`),p=`@echo off
|
|
21
21
|
setlocal EnableDelayedExpansion
|
|
22
22
|
set "NODE=${i}"
|
|
23
23
|
set "CLI=${s}"
|
package/dist/server.cjs
CHANGED
|
@@ -131,7 +131,7 @@ export const ${FT} = async () => ({
|
|
|
131
131
|
else if (event.type === "permission.asked") post("notification");
|
|
132
132
|
},
|
|
133
133
|
});
|
|
134
|
-
`}function T3(){let r=_n.opencode(),e=$t.default.dirname(r);return ht.default.existsSync(e)||ht.default.mkdirSync(e,{recursive:!0}),ht.default.writeFileSync(r,E3(),"utf8"),{success:!0}}function C3(r){switch(r){case"claude":{let e=oa(_n.claude());return!!(e.hooks?.Stop||e.hooks?.Notification)}case"codex":{let e=_n.codex();return ht.default.existsSync(e)&&ht.default.readFileSync(e,"utf8").includes("# 9Remote notification")}case"gemini":{let e=oa(_n.gemini());return!!(e.hooks?.AfterAgent||e.hooks?.Notification)}case"opencode":return ht.default.existsSync(_n.opencode());default:return!1}}function A3(r){let e=v3[r]?.();return e?(Array.isArray(e)?e:[e]).some(n=>ht.default.existsSync(n)):!1}var R3={claude:x3,codex:w3,gemini:S3,opencode:T3};var k3=Lv;function O3(r){return R3[r]?.()||{success:!1,error:"Unknown tool"}}function HT(){let r={};for(let e of k3)if(!(!A3(e)||C3(e)))try{r[e]=O3(e).success}catch{r[e]=!1}return r}function UT(){let r=_n.claude(),e=oa(r);if(!e.hooks?.Stop&&!e.hooks?.Notification)return;let t=e.env||{};Object.keys(oo).some(i=>t[i]!==oo[i])&&($T(e),xu(r,e))}var Lz=(0,WT.dirname)((0,GT.fileURLToPath)(__importMetaUrl)),Dz=no.rgb(230,138,110),wm="daemon",P3="2.0.
|
|
134
|
+
`}function T3(){let r=_n.opencode(),e=$t.default.dirname(r);return ht.default.existsSync(e)||ht.default.mkdirSync(e,{recursive:!0}),ht.default.writeFileSync(r,E3(),"utf8"),{success:!0}}function C3(r){switch(r){case"claude":{let e=oa(_n.claude());return!!(e.hooks?.Stop||e.hooks?.Notification)}case"codex":{let e=_n.codex();return ht.default.existsSync(e)&&ht.default.readFileSync(e,"utf8").includes("# 9Remote notification")}case"gemini":{let e=oa(_n.gemini());return!!(e.hooks?.AfterAgent||e.hooks?.Notification)}case"opencode":return ht.default.existsSync(_n.opencode());default:return!1}}function A3(r){let e=v3[r]?.();return e?(Array.isArray(e)?e:[e]).some(n=>ht.default.existsSync(n)):!1}var R3={claude:x3,codex:w3,gemini:S3,opencode:T3};var k3=Lv;function O3(r){return R3[r]?.()||{success:!1,error:"Unknown tool"}}function HT(){let r={};for(let e of k3)if(!(!A3(e)||C3(e)))try{r[e]=O3(e).success}catch{r[e]=!1}return r}function UT(){let r=_n.claude(),e=oa(r);if(!e.hooks?.Stop&&!e.hooks?.Notification)return;let t=e.env||{};Object.keys(oo).some(i=>t[i]!==oo[i])&&($T(e),xu(r,e))}var Lz=(0,WT.dirname)((0,GT.fileURLToPath)(__importMetaUrl)),Dz=no.rgb(230,138,110),wm="daemon",P3="2.0.57",Vn=new Map,zT=new Map,VT={};async function qT(){let r=await wl(),e=new Map(r.map(n=>[n.id,n])),t=Dh();for(let n of r)if(!t[n.id])try{await di(n.id)}catch{}Vn.clear();for(let[n,i]of Object.entries(t)){let s=e.get(n);Vn.set(n,{daemon:!0,name:i.name,createdAt:i.createdAt,shellId:i.shellId,cwd:s?.cwd||i.cwd,needsRespawn:!s})}xn(Vn)}async function KT(){let r=eE();for(let n of r.groups)zT.set(n.id,n);Object.assign(VT,r.sessionGroups);try{UT()}catch{}try{HT()}catch{}if(wm==="daemon")if(!await hw())console.error("\u274C Failed to connect to PTY daemon, falling back to buffer mode");else{await qT(),_l("connected",()=>{qT().catch(()=>{})});return}console.log("\u{1F4E6} Buffer persistence mode - scrollback enabled");let e=ZS(),t=Dh();for(let n of e){let i=t[n]||{};Vn.set(n,{pty:null,name:i.name||`Terminal ${Vn.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 $s(r,e){wm==="daemon"&&(_l("output",({sessionId:i,data:s})=>wt(r,"output",{sessionId:i,data:s})),_l("sessionClosed",i=>{Vn.delete(i),vu(i),wt(r,"sessionClosed",i),wt(r,"notificationCleared",i)}));let t=()=>({version:P3,remoteAvailable:Ss(),daemonMode:wm==="daemon"&&Cr(),platform:process.platform,updateAvailable:Kw(),canSelfUpdate:!0,...GS()}),n=()=>{let i=t();for(let s of r.sockets.sockets.values())s.data?.approved&&s.emit("serverInfo",i)};Jw(n),$s._buildServerInfo=t,$s._emitServerInfo=n}function YT(){$s._emitServerInfo?.()}var XT=null;function JT(r){XT=r}async function QT(r,e,t){zS(),XT?.(),r.emit("serverInfo",$s._buildServerInfo?.()),iE(r,e,Vn,zT,VT),aE(r,Vn),DT(r),BS()&&await WS(r,t).catch(n=>{console.error("\u274C Failed to setup remote handlers:",n.message)}),r.on("disconnect",()=>{kT(r.id),VS()})}var se=X(require("fs"),1),yr=X(require("path"),1),Yr=X(require("os"),1),Ks=require("child_process"),kR=X(_R(),1);var Pg=["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"],Hu=[".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 bR=[".ssh",".aws",".gnupg",".kube",".docker",".cargo",".npmrc",".netrc",".pypirc",".config/gh",".config/gcloud"],wR=["/etc/shadow","/etc/sudoers","/etc/ssh","/root","/private/etc/sudoers"];var SR=X(require("fs"),1),wa=X(require("path"),1),ER=X(require("os"),1);var TR=ER.default.homedir();function Mq(r){if(!r)return null;let e=r.startsWith("~")?r.replace(/^~/,TR):r;try{return SR.default.realpathSync(e)}catch{return wa.default.resolve(e)}}function En(r){let e=Mq(r);if(!e)return!1;for(let t of wR)if(e===t||e.startsWith(t+wa.default.sep))return!0;for(let t of bR){let n=wa.default.join(TR,t);if(e===n||e.startsWith(n+wa.default.sep))return!0}return!1}function Uu(r){return Pg.includes(r)}function Ys(r){return Hu.includes(yr.default.extname(r).toLowerCase())}function Nq(r,e){return r.isDirectory()?"folder":Ys(e)?"binary":"file"}function Sa(r){return r<1024?`${r}B`:r<1024*1024?`${(r/1024).toFixed(1)}KB`:`${(r/(1024*1024)).toFixed(1)}MB`}function OR(r,e,t,n=50){if(!(t.length>=n))try{for(let i of se.default.readdirSync(r)){if(t.length>=n)return;if(i.startsWith(".")||Uu(i))continue;let s=yr.default.join(r,i);try{let o=se.default.statSync(s);o.isDirectory()?OR(s,e,t,n):i.toLowerCase().includes(e.toLowerCase())&&t.push({name:i,path:s,type:Ys(i)?"binary":"file",size:o.size,sizeFormatted:Sa(o.size)})}catch{}}}catch{}}function RR(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 PR(r,e,t,n,i,s){if(s.length>=200)return;let o;try{o=se.default.readdirSync(r,{withFileTypes:!0})}catch{return}for(let a of o){if(s.length>=200)return;if(Uu(a.name))continue;let c=yr.default.join(r,a.name),u=yr.default.relative(e,c);if(a.isDirectory()){PR(c,e,t,n,i,s);continue}if(a.isFile()&&!Ys(a.name)&&!(i&&i.test(u))&&!(n&&!n.test(u)))try{if(se.default.statSync(c).size>512e3)continue;let m=se.default.readFileSync(c,"utf-8").split(`
|
|
135
135
|
`),y=[];for(let _=0;_<m.length&&y.length<10;_++){let S=m[_],A=t(S);for(let P of A){if(y.length>=10)break;y.push({line:_+1,column:P.column+1,lineText:S,matchLength:P.length})}}y.length&&s.push({path:c,matches:y})}catch{}}}function MR(r,e,t){let n;try{n=se.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"||Uu(s.name))continue;let o=yr.default.join(r,s.name);if(s.isDirectory()){let a={name:s.name,path:o,type:"folder"};e>0&&(a.children=MR(o,e-1,t)),i.push(a)}else s.isFile()&&i.push({name:s.name,path:o,type:Ys(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 Lq(){if(process.platform!=="win32")return[];try{return(0,Ks.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=>se.default.existsSync(r)).map(r=>({letter:r[0],path:r}))}}function IR(r){r.on("getSystemInfo",t=>{let n=process.platform;t({success:!0,platform:n,isWindows:n==="win32",drives:n==="win32"?Lq():[],homedir:Yr.default.homedir()})}),r.on("getFiles",({dirPath:t,showHidden:n},i)=>{try{let s=t||Yr.default.homedir(),o=s.startsWith("~")?s.replace("~",Yr.default.homedir()):s;if(En(o))return i({success:!1,error:"Access denied"});if(!se.default.existsSync(o))return i({success:!1,error:"Directory not found"});let a=[];for(let c of se.default.readdirSync(o))if(!(!n&&c.startsWith(".")&&c!==".env"&&c!==".env.example")&&!Uu(c))try{let u=yr.default.join(o,c),p=se.default.statSync(u);a.push({name:c,path:u,type:Nq(p,c),size:p.isFile()?p.size:null,sizeFormatted:p.isFile()?Sa(p.size):null,modified:p.mtime.getTime()})}catch{}a.sort((c,u)=>c.type==="folder"&&u.type!=="folder"?-1:c.type!=="folder"&&u.type==="folder"?1:c.name.localeCompare(u.name)),i({success:!0,files:a,currentPath:o,parentPath:yr.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||Yr.default.homedir()).replace(/^~/,Yr.default.homedir());if(!se.default.existsSync(s))return i({success:!1,error:"Workspace not found"});let o=[];OR(s,n,o,50),o.sort((a,c)=>{let u=a.name.toLowerCase()===n.toLowerCase(),p=c.name.toLowerCase()===n.toLowerCase();return u&&!p?-1:!u&&p?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(En(t))return n({success:!1,error:"Access denied"});if(!se.default.existsSync(t))return n({success:!1,error:"File not found"});let i=se.default.statSync(t);if(i.size>512e3)return n({success:!1,error:`File too large (${Sa(i.size)}). Max ${Sa(512e3)}`});if(Ys(t))return n({success:!1,error:"Cannot open binary file"});n({success:!0,content:se.default.readFileSync(t,"utf-8")})}catch(i){n({success:!1,error:i.message})}}),r.on("readImage",({filePath:t},n)=>{try{if(En(t))return n({success:!1,error:"Access denied"});if(!se.default.existsSync(t))return n({success:!1,error:"File not found"});let i=se.default.statSync(t),s=10*1024*1024;if(i.size>s)return n({success:!1,error:`Image too large (${Sa(i.size)})`});let o=yr.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",u=se.default.readFileSync(t),p=`data:${c};base64,${u.toString("base64")}`;n({success:!0,dataUrl:p,size:i.size,mime:c})}catch(i){n({success:!1,error:i.message})}}),r.on("writeFile",({filePath:t,content:n},i)=>{try{if(En(t))return i({success:!1,error:"Access denied"});se.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(En(t))return i({success:!1,error:"Access denied"});if(se.default.existsSync(t))return i({success:!1,error:"Item already exists"});n==="folder"?se.default.mkdirSync(t,{recursive:!0}):se.default.writeFileSync(t,"","utf-8"),i({success:!0})}catch(s){i({success:!1,error:s.message})}}),r.on("deleteItem",({itemPath:t},n)=>{try{if(En(t))return n({success:!1,error:"Access denied"});if(!se.default.existsSync(t))return n({success:!1,error:"Item not found"});se.default.statSync(t).isDirectory()?se.default.rmSync(t,{recursive:!0}):se.default.unlinkSync(t),n({success:!0})}catch(i){n({success:!1,error:i.message})}}),r.on("renameItem",({oldPath:t,newPath:n},i)=>{try{if(En(t)||En(n))return i({success:!1,error:"Access denied"});if(!se.default.existsSync(t))return i({success:!1,error:"Item not found"});if(se.default.existsSync(n))return i({success:!1,error:"Target already exists"});se.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 u=(t||Yr.default.homedir()).replace(/^~/,Yr.default.homedir());if(!se.default.existsSync(u))return c({success:!1,error:"Workspace not found"});let p;if(s){let _;try{_=new RegExp(n,i?"g":"gi")}catch(S){return c({success:!1,error:`Invalid regex: ${S.message}`})}p=S=>{let A=[],P;for(_.lastIndex=0;(P=_.exec(S))!==null;)A.push({column:P.index,length:P[0].length}),P.index===_.lastIndex&&_.lastIndex++;return A}}else{let _=i?n:n.toLowerCase();p=S=>{let A=i?S:S.toLowerCase(),P=[],L=0;for(;(L=A.indexOf(_,L))!==-1;)P.push({column:L,length:_.length}),L+=_.length||1;return P}}let f=RR(o),m=RR(a),y=[];PR(u,u,p,f,m,y),c({success:!0,results:y})}catch(u){c({success:!1,error:u.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 u;if(o){let m;try{m=new RegExp(n,s?"g":"gi")}catch(y){return c({success:!1,error:`Invalid regex: ${y.message}`})}u=y=>{let _=0;return{next:y.replace(m,A=>(_++,i)),count:_}}}else u=m=>{let y=0,_=s?"g":"gi",S=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),A=new RegExp(S,_);return{next:m.replace(A,()=>(y++,i)),count:y}};let p=0,f=0;for(let m of a)try{if(!se.default.existsSync(m)||Ys(m))continue;let y=se.default.statSync(m);if(!y.isFile()||y.size>512e3)continue;let _=se.default.readFileSync(m,"utf-8"),{next:S,count:A}=u(_);A>0&&(se.default.writeFileSync(m,S,"utf-8"),p+=A,f++)}catch{}c({success:!0,replacedCount:p,fileCount:f})}catch(u){c({success:!1,error:u.message})}});let e=new Map;r.on("watchDir",({dirPath:t},n)=>{try{if(!t||!se.default.existsSync(t))return n({success:!1,error:"Directory not found"});if(e.has(t))return n({success:!0});let i=kR.default.watch(t,{depth:0,ignoreInitial:!0,persistent:!0,ignored:o=>Pg.includes(yr.default.basename(o))}),s=o=>a=>r.emit("fileChange",{type:o,path:a});i.on("add",s("add")).on("change",s("change")).on("unlink",s("unlink")).on("addDir",s("addDir")).on("unlinkDir",s("unlinkDir")),e.set(t,i),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.close(),e.delete(t)),n({success:!0})}catch(i){n({success:!1,error:i.message})}}),r.once("disconnect",()=>{for(let 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=[yr.default.dirname(t)]);let a=(0,Ks.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||!se.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,Ks.spawn)(s,o,a);c.on("error",()=>{if(i==="linux"){let u=(0,Ks.spawn)("xterm",["-e",`cd "${t}" && bash`],a);u.on("error",p=>n({success:!1,error:p.message})),u.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||Yr.default.homedir()).replace(/^~/,Yr.default.homedir());if(!se.default.existsSync(o))return s({success:!1,error:"Directory not found"});let c=MR(o,typeof n=="number"?n:3,!!i);s({success:!0,tree:{name:yr.default.basename(o)||o,path:o,type:"folder",children:c}})}catch(o){s({success:!1,error:o.message})}})}var qt=X(require("fs"),1),Ei=X(require("path"),1),Mr=require("child_process");function Si(r,e){return new Promise(t=>{let n=(0,Mr.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 NR(r){return Hu.includes(Ei.default.extname(r).toLowerCase())}function LR(r){r.on("gitStatus",({repoPath:e},t)=>{try{let n=(0,Mr.execSync)("git status --porcelain",{cwd:e,encoding:"utf-8",stdio:["pipe","pipe","pipe"],windowsHide:!0}),i={};try{(0,Mr.execSync)("git diff HEAD --numstat",{cwd:e,encoding:"utf-8",stdio:["pipe","pipe","pipe"],windowsHide:!0}).trim().split(`
|
|
136
136
|
`).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(`
|
|
137
137
|
`).filter(Boolean)){let a=o.match(/^([MADRCU?! ]{1,2})\s+(.+)$/);if(!a)continue;let c=a[1],u=a[2];if(!u)continue;let p;c.includes("?")?p="?":c.includes("A")?p="A":c.includes("D")?p="D":c.includes("M")?p="M":c.includes("R")?p="R":p=c.trim()[0]||"?";let f=i[u]||{added:0,deleted:0};if(p==="?")try{let m=Ei.default.join(e,u);if(qt.default.existsSync(m)&&!NR(u)){let y=qt.default.readFileSync(m,"utf-8");f.added=y.split(`
|
|
@@ -261,7 +261,7 @@ self.addEventListener('fetch', (event) => {
|
|
|
261
261
|
</body>
|
|
262
262
|
</html>
|
|
263
263
|
`);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 Kk=X(require("http"),1),Yk=X(require("https"),1),Xk=require("child_process"),Jk=require("util"),y4=(0,Jk.promisify)(Xk.exec);async function _4(){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 y4(t),i=n.split(`
|
|
264
|
-
`);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 b4(r,e=2e3){return new Promise(t=>{let n=Kk.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 w4(r,e=2e3){return new Promise(t=>{let n=Yk.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 S4(r){let[e,t]=await Promise.all([b4(r),w4(r)]);return t.active?{port:r,...t}:e.active?{port:r,...e}:{port:r,active:!1}}async function Qk(){let r=await _4();return(await Promise.all(r.map(t=>S4(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 Zk=X(require("crypto"),1),E4=process.env.API_KEY_SECRET||"9remote-api-key-secret";function T4(){let r="abcdefghijklmnopqrstuvwxyz0123456789",e="";for(let t=0;t<4;t++)e+=r.charAt(Math.floor(Math.random()*r.length));return e}function eO(r,e){return Zk.default.createHmac("sha256",E4).update(r+e).digest("hex").slice(0,6)}function tO(r){let e=r.slice(0,8),t=T4(),n=eO(e,t);return{key:`sk-${e}-${t}-${n}`,keyId:t}}function C4(r){if(!r||!r.startsWith("sk-"))return null;let e=r.split("-");if(e.length===4){let[,t,n,i]=e,s=eO(t,n);return i!==s?null:{machineId:t,keyId:n}}return null}function Qu(r){return C4(r)!==null}async function rO(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(!Qu(n)){e.setHeader("Content-Type","application/json"),e.writeHead(401),e.end(JSON.stringify({error:"Unauthorized: Invalid API key"}));return}let i=await Qk();e.setHeader("Content-Type","application/json"),e.writeHead(200),e.end(JSON.stringify(i))}cl();var sO=require("url");var Zu=X(require("path"),1),oO=X(require("os"),1);vt();var nO=X(require("path"),1),iO=X(require("os"),1);var mK=nO.default.join(iO.default.homedir(),".9remote","pids");mh();var Na={checkIntervalMs:36e5,connectCheckDebounceMs:9e5,maxRetry:3,retryDelayMs:3e3,verifyTimeoutMs:15e3,lockTtlMs:3e5,lockFile:"update.lock"};var xK={orange:no.rgb(230,138,110),orangeDim:no.rgb(200,120,95)};var CK=Zu.default.dirname((0,sO.fileURLToPath)(__importMetaUrl));var AK=Zu.default.join(oO.default.homedir(),".9remote","cloudflared.pid");function aO(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 RK=Zu.default.join(oe.STATE,Na.lockFile);Un();Gt();vt();xs();var lO=X(cO(),1),Zg=X(require("crypto"),1),{machineIdSync:A4}=lO.default;async function uO(r=null){let e=r||process.env.MACHINE_ID_SALT||"9remote-salt";try{let t=A4();return Zg.default.createHash("sha256").update(t+e).digest("hex").substring(0,16)}catch(t){return console.error("Error getting machine ID:",t),Zg.default.randomUUID().replace(/-/g,"").substring(0,16)}}Un();async function pO(r,e){let t=zw(),n=t.workerUrl||"https://9remote.cc";if(!t.permanentKey){he(e,400,"No permanent key set");return}try{let s=await(await ao(`${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}`;hn({oneTimeKey:s.tempKey,oneTimeKeyExpiresAt:s.expiresAt,qrUrl:o}),ee(e,{oneTimeKey:s.tempKey,expiresAt:s.expiresAt,qrUrl:o})}catch(i){he(e,500,i.message)}}async function fO(r,e){try{let t=await uO(),{key:n}=tO(t),i=Aw();Rw(t,n,i?.name||"Default"),hn({permanentKey:n}),ee(e,{ok:!0,permanentKey:n})}catch(t){he(e,500,t.message)}}Gt();async function dO(r,e){let t=await It(r,e);if(!t)return;let n=rk(t.socketId);ee(e,{ok:n})}async function hO(r,e){let t=await It(r,e);if(!t)return;let n=ik(t.socketId);ee(e,{ok:n})}function mO(r,e){ee(e,{pending:VR()})}function gO(r,e){ee(e,{devices:WR()})}function vO(r,e){ee(e,{rejected:JR()})}async function xO(r,e){let t=await It(r,e);if(!t)return;let n=nk(t.deviceId);ee(e,{ok:n})}async function yO(r,e){let t=await It(r,e);t&&(Vu(t.deviceId),Qs(t.deviceId),ee(e))}async function _O(r,e){let t=await It(r,e);t&&(Vu(t.deviceId),UR(t.deviceId),ee(e))}async function bO(r,e){let t=await It(r,e);if(!t)return;let n=Vu(t.deviceId);ee(e,{disconnected:n})}function wO(r,e){ee(e,{enabled:zu()})}async function SO(r,e){let t=await It(r,e);if(!t)return;let n=qR(t.deviceId,t.label);ee(e,{ok:n})}async function EO(r,e){let t=await It(r,e);if(!t)return;let n=ZR(!!t.enabled);ee(e,{enabled:n})}Gt();var TO={},R4=1e4;function CO(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 AO(r,e){let t="";await new Promise(n=>{r.on("data",i=>t+=i),r.on("end",n)});try{kO(CO(t,null)),ee(e,{success:!0})}catch{he(e,400,"Invalid JSON")}}function RO(r,e,{query:t}){kO(CO(null,t)),ee(e,{success:!0})}function kO({type:r,sessionId:e,tool:t}){let n=Date.now(),i=Ca();if(!i||!e)return;let s={type:r,sessionId:e,tool:t,timestamp:n};if(NT(e,s),wt(i,"chatNotification",s),!IT()||!AT())return;let o=`${t}:${r}`;n-(TO[o]||0)<R4||(TO[o]=n,PT(s))}Gt();Pl();xs();bt();Un();function OO(){return{mode:bh(),active:_h(),presets:Object.keys(Z.sleepInhibit?.presets||{})}}function PO(r,e){ee(e,OO())}async function MO(r,e){let t=await It(r,e);if(!t)return;let n=Vo(t.mode);Cw({sleepInhibitMode:n});let i=OO();St("sleepInhibit",i),ee(e,i)}Gt();async function IO(r,e){try{let t=await wl();ee(e,{sessions:t})}catch(t){he(e,500,t.message)}}async function NO(r,e){let t=await It(r,e);if(t){if(!t.sessionId)return he(e,400,"sessionId required");try{await di(t.sessionId),ee(e)}catch(n){he(e,500,n.message)}}}Pl();xs();bt();Fv();var Kn=Rn("server"),Yn=(0,jO.fileURLToPath)(new URL(".",__importMetaUrl)),FO=process.env.NODE_ENV==="development",k4=5173,ev=(0,ki.existsSync)((0,tr.join)(Yn,"ui","dist"))?(0,tr.join)(Yn,"ui","dist"):(0,tr.join)(Yn,"ui"),O4={".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 P4(r,e,t){let n=(0,ep.request)({hostname:"localhost",port:k4,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 LO(r,e){if(!(0,ki.existsSync)(e))return!1;let t=O4[(0,tr.extname)(e)]||"application/octet-stream";return r.setHeader("Content-Type",t),r.writeHead(200),r.end((0,ki.readFileSync)(e)),!0}async function tv(r){try{let e=await ao(Ap);if(!e.ok)return;let{version:t}=await e.json();t&&aO(r,t)&&(Yw({version:t}),St("updateAvailable",{version:t}),YT())}catch{}}var DO=0;function M4(r){let e=Date.now();e-DO<Na.connectCheckDebounceMs||(DO=e,tv(r))}function I4(r,e){if(process.env.CODESPACES!=="true"){he(e,400,"Not running on Codespaces");return}let t=process.env.CODESPACE_NAME;if(!t){he(e,400,"Codespace name not found");return}let n=Ca();n&&n.emit("codespace:stopping"),ee(e,{success:!0,message:"Stopping codespace..."}),setTimeout(()=>(0,tp.execFile)("gh",["codespace","stop","-c",t],{windowsHide:!0}),500)}var $O;async function BO(r,e,{pathname:t}){let n=r.headers.authorization;if(!n||!n.startsWith("Bearer ")||!Qu(n.slice(7))){he(e,401,"Unauthorized");return}let{parseJsonBody:i}=await Promise.resolve().then(()=>(Gt(),Mi)),s=await i(r,e);if(s){if(!s.port){he(e,400,"Port required");return}t.endsWith("start")?Wk(s.port):Gk(s.port),ee(e,{success:!0})}}function N4(r,e,{pathname:t,search:n}){let i=t.match(/^\/proxy\/(\d+)(\/.*)?$/);i?Vk($O,r,e,i[1],i[2]||"/",n):he(e,404,"Not found")}var L4=[{path:"/api/health",method:"GET",public:!0,handler:(r,e)=>ee(e,{status:"ok",timestamp:Date.now()})},{path:"/api/version",method:"GET",public:!0,handler:(r,e)=>{ee(e,{version:"2.0.55"})}},{path:"/api/notify",method:"POST",public:!0,handler:AO},{path:"/api/notify",method:"GET",public:!0,handler:RO},{path:"/proxy/*",method:"*",public:!0,handler:N4},{path:"/api/ui/events",method:"GET",handler:rS},{path:"/api/local-token",method:"GET",handler:Qw},{path:"/api/ui/state",method:"GET",handler:nS},{path:"/api/ui/state",method:"POST",handler:iS},{path:"/api/ui/stop",method:"POST",handler:sS},{path:"/api/ui/start",method:"POST",handler:oS},{path:"/api/ui/stop-tunnel",method:"POST",handler:aS},{path:"/api/ui/shutdown",method:"POST",handler:cS},{path:"/api/update",method:"POST",handler:lS},{path:"/api/key/one-time",method:"POST",handler:pO},{path:"/api/key/regenerate",method:"POST",handler:fO},{path:"/api/device/approve",method:"POST",handler:dO},{path:"/api/device/reject",method:"POST",handler:hO},{path:"/api/device/pending",method:"GET",handler:mO},{path:"/api/device/approved",method:"GET",handler:gO},{path:"/api/device/rejected",method:"GET",handler:vO},{path:"/api/device/approve-rejected",method:"POST",handler:xO},{path:"/api/device/clear-rejected",method:"POST",handler:yO},{path:"/api/device/remove",method:"POST",handler:_O},{path:"/api/device/label",method:"POST",handler:SO},{path:"/api/device/disconnect",method:"POST",handler:bO},{path:"/api/device/auto-approve",method:"GET",handler:wO},{path:"/api/device/auto-approve",method:"POST",handler:EO},{path:"/api/connections",method:"GET",handler:uS},{path:"/api/logs",method:"GET",handler:pS},{path:"/api/permissions",method:"GET",handler:dS},{path:"/api/permissions/request",method:"POST",handler:gS},{path:"/api/desktop/toggle",method:"POST",handler:fS},{path:"/api/autostart",method:"GET",handler:hS},{path:"/api/autostart",method:"POST",handler:mS},{path:"/api/sleep-inhibit",method:"GET",handler:PO},{path:"/api/sleep-inhibit",method:"POST",handler:MO},{path:"/api/sessions",method:"GET",handler:IO},{path:"/api/sessions/delete",method:"POST",handler:NO},{path:"/api/local-sites",method:"*",public:!0,handler:rO},{path:"/api/codespace/stop",method:"POST",handler:I4},{path:"/api/proxy/start",method:"POST",public:!0,handler:BO},{path:"/api/proxy/end",method:"POST",public:!0,handler:BO}];var D4=parseInt(process.env.PORT||"2208",10),Da=null;function B4(){if(!FO)return;let r=(0,tr.join)(Yn,"vite.config.js");if(!(0,ki.existsSync)(r))return;let e=(0,ki.existsSync)((0,tr.join)(Yn,"node_modules",".bin","vite"))?(0,tr.join)(Yn,"node_modules",".bin","vite"):(0,tr.join)(Yn,"..","node_modules",".bin","vite");Da=(0,tp.spawn)("node",[e,"--config",r],{cwd:Yn,stdio:"ignore",detached:!1}),Da.on("error",()=>{}),Da.unref()}async function HO(){let r=ph(),e=r.sleepInhibitMode;e||(r.sleepInhibit===!1?e="never":e=Z.sleepInhibit?.defaultMode||"never"),Vo(e),await KT(),$O=zk(),B4();let n=Tp(L4,{fallback:(a,c,{pathname:u})=>{if(u.startsWith("/api/")||u.startsWith("/socket.io")){he(c,404,"Not found");return}let p=!!a.headers["cf-connecting-ip"],f=a.socket.remoteAddress==="127.0.0.1"||a.socket.remoteAddress==="::1";if(p||!f){he(c,403,"Forbidden");return}let m=()=>{let y=u==="/"||u===""?(0,tr.join)(ev,"index.html"):(0,tr.join)(ev,u);LO(c,y)||LO(c,(0,tr.join)(ev,"index.html"))};if(FO){P4(a,c,m);return}m()}}),i=(0,ep.createServer)(async(a,c)=>{ok(c),!ak(a,c)&&await n(a,c)});zd(),Ww(),Gw(),Nl(),process.platform==="darwin"&&setInterval(Nl,Mv),await sk(i),i.listen(D4,a=>{if(a)throw a;let c="2.0.55";tv(c),setInterval(()=>tv(c),Na.checkIntervalMs),JT(()=>M4(c))});let s=!1,o=async a=>{if(s)return;s=!0,yh(),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")),Da)try{Da.kill()}catch{}let u=Ca();u&&(u.emit("server:shutdown"),u.close(()=>Kn.info("\u2713 Socket.IO closed"))),await new Promise(p=>setTimeout(p,500)),clearTimeout(c),Kn.info("\u2705 Server stopped cleanly"),process.exit(0)}catch(u){Kn.error(`\u274C Error during shutdown: ${u?.message||u}`),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}HO();0&&(module.exports={startServer});
|
|
264
|
+
`);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 b4(r,e=2e3){return new Promise(t=>{let n=Kk.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 w4(r,e=2e3){return new Promise(t=>{let n=Yk.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 S4(r){let[e,t]=await Promise.all([b4(r),w4(r)]);return t.active?{port:r,...t}:e.active?{port:r,...e}:{port:r,active:!1}}async function Qk(){let r=await _4();return(await Promise.all(r.map(t=>S4(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 Zk=X(require("crypto"),1),E4=process.env.API_KEY_SECRET||"9remote-api-key-secret";function T4(){let r="abcdefghijklmnopqrstuvwxyz0123456789",e="";for(let t=0;t<4;t++)e+=r.charAt(Math.floor(Math.random()*r.length));return e}function eO(r,e){return Zk.default.createHmac("sha256",E4).update(r+e).digest("hex").slice(0,6)}function tO(r){let e=r.slice(0,8),t=T4(),n=eO(e,t);return{key:`sk-${e}-${t}-${n}`,keyId:t}}function C4(r){if(!r||!r.startsWith("sk-"))return null;let e=r.split("-");if(e.length===4){let[,t,n,i]=e,s=eO(t,n);return i!==s?null:{machineId:t,keyId:n}}return null}function Qu(r){return C4(r)!==null}async function rO(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(!Qu(n)){e.setHeader("Content-Type","application/json"),e.writeHead(401),e.end(JSON.stringify({error:"Unauthorized: Invalid API key"}));return}let i=await Qk();e.setHeader("Content-Type","application/json"),e.writeHead(200),e.end(JSON.stringify(i))}cl();var sO=require("url");var Zu=X(require("path"),1),oO=X(require("os"),1);vt();var nO=X(require("path"),1),iO=X(require("os"),1);var mK=nO.default.join(iO.default.homedir(),".9remote","pids");mh();var Na={checkIntervalMs:36e5,connectCheckDebounceMs:9e5,maxRetry:3,retryDelayMs:3e3,verifyTimeoutMs:15e3,lockTtlMs:3e5,lockFile:"update.lock"};var xK={orange:no.rgb(230,138,110),orangeDim:no.rgb(200,120,95)};var CK=Zu.default.dirname((0,sO.fileURLToPath)(__importMetaUrl));var AK=Zu.default.join(oO.default.homedir(),".9remote","cloudflared.pid");function aO(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 RK=Zu.default.join(oe.STATE,Na.lockFile);Un();Gt();vt();xs();var lO=X(cO(),1),Zg=X(require("crypto"),1),{machineIdSync:A4}=lO.default;async function uO(r=null){let e=r||process.env.MACHINE_ID_SALT||"9remote-salt";try{let t=A4();return Zg.default.createHash("sha256").update(t+e).digest("hex").substring(0,16)}catch(t){return console.error("Error getting machine ID:",t),Zg.default.randomUUID().replace(/-/g,"").substring(0,16)}}Un();async function pO(r,e){let t=zw(),n=t.workerUrl||"https://9remote.cc";if(!t.permanentKey){he(e,400,"No permanent key set");return}try{let s=await(await ao(`${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}`;hn({oneTimeKey:s.tempKey,oneTimeKeyExpiresAt:s.expiresAt,qrUrl:o}),ee(e,{oneTimeKey:s.tempKey,expiresAt:s.expiresAt,qrUrl:o})}catch(i){he(e,500,i.message)}}async function fO(r,e){try{let t=await uO(),{key:n}=tO(t),i=Aw();Rw(t,n,i?.name||"Default"),hn({permanentKey:n}),ee(e,{ok:!0,permanentKey:n})}catch(t){he(e,500,t.message)}}Gt();async function dO(r,e){let t=await It(r,e);if(!t)return;let n=rk(t.socketId);ee(e,{ok:n})}async function hO(r,e){let t=await It(r,e);if(!t)return;let n=ik(t.socketId);ee(e,{ok:n})}function mO(r,e){ee(e,{pending:VR()})}function gO(r,e){ee(e,{devices:WR()})}function vO(r,e){ee(e,{rejected:JR()})}async function xO(r,e){let t=await It(r,e);if(!t)return;let n=nk(t.deviceId);ee(e,{ok:n})}async function yO(r,e){let t=await It(r,e);t&&(Vu(t.deviceId),Qs(t.deviceId),ee(e))}async function _O(r,e){let t=await It(r,e);t&&(Vu(t.deviceId),UR(t.deviceId),ee(e))}async function bO(r,e){let t=await It(r,e);if(!t)return;let n=Vu(t.deviceId);ee(e,{disconnected:n})}function wO(r,e){ee(e,{enabled:zu()})}async function SO(r,e){let t=await It(r,e);if(!t)return;let n=qR(t.deviceId,t.label);ee(e,{ok:n})}async function EO(r,e){let t=await It(r,e);if(!t)return;let n=ZR(!!t.enabled);ee(e,{enabled:n})}Gt();var TO={},R4=1e4;function CO(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 AO(r,e){let t="";await new Promise(n=>{r.on("data",i=>t+=i),r.on("end",n)});try{kO(CO(t,null)),ee(e,{success:!0})}catch{he(e,400,"Invalid JSON")}}function RO(r,e,{query:t}){kO(CO(null,t)),ee(e,{success:!0})}function kO({type:r,sessionId:e,tool:t}){let n=Date.now(),i=Ca();if(!i||!e)return;let s={type:r,sessionId:e,tool:t,timestamp:n};if(NT(e,s),wt(i,"chatNotification",s),!IT()||!AT())return;let o=`${t}:${r}`;n-(TO[o]||0)<R4||(TO[o]=n,PT(s))}Gt();Pl();xs();bt();Un();function OO(){return{mode:bh(),active:_h(),presets:Object.keys(Z.sleepInhibit?.presets||{})}}function PO(r,e){ee(e,OO())}async function MO(r,e){let t=await It(r,e);if(!t)return;let n=Vo(t.mode);Cw({sleepInhibitMode:n});let i=OO();St("sleepInhibit",i),ee(e,i)}Gt();async function IO(r,e){try{let t=await wl();ee(e,{sessions:t})}catch(t){he(e,500,t.message)}}async function NO(r,e){let t=await It(r,e);if(t){if(!t.sessionId)return he(e,400,"sessionId required");try{await di(t.sessionId),ee(e)}catch(n){he(e,500,n.message)}}}Pl();xs();bt();Fv();var Kn=Rn("server"),Yn=(0,jO.fileURLToPath)(new URL(".",__importMetaUrl)),FO=process.env.NODE_ENV==="development",k4=5173,ev=(0,ki.existsSync)((0,tr.join)(Yn,"ui","dist"))?(0,tr.join)(Yn,"ui","dist"):(0,tr.join)(Yn,"ui"),O4={".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 P4(r,e,t){let n=(0,ep.request)({hostname:"localhost",port:k4,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 LO(r,e){if(!(0,ki.existsSync)(e))return!1;let t=O4[(0,tr.extname)(e)]||"application/octet-stream";return r.setHeader("Content-Type",t),r.writeHead(200),r.end((0,ki.readFileSync)(e)),!0}async function tv(r){try{let e=await ao(Ap);if(!e.ok)return;let{version:t}=await e.json();t&&aO(r,t)&&(Yw({version:t}),St("updateAvailable",{version:t}),YT())}catch{}}var DO=0;function M4(r){let e=Date.now();e-DO<Na.connectCheckDebounceMs||(DO=e,tv(r))}function I4(r,e){if(process.env.CODESPACES!=="true"){he(e,400,"Not running on Codespaces");return}let t=process.env.CODESPACE_NAME;if(!t){he(e,400,"Codespace name not found");return}let n=Ca();n&&n.emit("codespace:stopping"),ee(e,{success:!0,message:"Stopping codespace..."}),setTimeout(()=>(0,tp.execFile)("gh",["codespace","stop","-c",t],{windowsHide:!0}),500)}var $O;async function BO(r,e,{pathname:t}){let n=r.headers.authorization;if(!n||!n.startsWith("Bearer ")||!Qu(n.slice(7))){he(e,401,"Unauthorized");return}let{parseJsonBody:i}=await Promise.resolve().then(()=>(Gt(),Mi)),s=await i(r,e);if(s){if(!s.port){he(e,400,"Port required");return}t.endsWith("start")?Wk(s.port):Gk(s.port),ee(e,{success:!0})}}function N4(r,e,{pathname:t,search:n}){let i=t.match(/^\/proxy\/(\d+)(\/.*)?$/);i?Vk($O,r,e,i[1],i[2]||"/",n):he(e,404,"Not found")}var L4=[{path:"/api/health",method:"GET",public:!0,handler:(r,e)=>ee(e,{status:"ok",timestamp:Date.now()})},{path:"/api/version",method:"GET",public:!0,handler:(r,e)=>{ee(e,{version:"2.0.57"})}},{path:"/api/notify",method:"POST",public:!0,handler:AO},{path:"/api/notify",method:"GET",public:!0,handler:RO},{path:"/proxy/*",method:"*",public:!0,handler:N4},{path:"/api/ui/events",method:"GET",handler:rS},{path:"/api/local-token",method:"GET",handler:Qw},{path:"/api/ui/state",method:"GET",handler:nS},{path:"/api/ui/state",method:"POST",handler:iS},{path:"/api/ui/stop",method:"POST",handler:sS},{path:"/api/ui/start",method:"POST",handler:oS},{path:"/api/ui/stop-tunnel",method:"POST",handler:aS},{path:"/api/ui/shutdown",method:"POST",handler:cS},{path:"/api/update",method:"POST",handler:lS},{path:"/api/key/one-time",method:"POST",handler:pO},{path:"/api/key/regenerate",method:"POST",handler:fO},{path:"/api/device/approve",method:"POST",handler:dO},{path:"/api/device/reject",method:"POST",handler:hO},{path:"/api/device/pending",method:"GET",handler:mO},{path:"/api/device/approved",method:"GET",handler:gO},{path:"/api/device/rejected",method:"GET",handler:vO},{path:"/api/device/approve-rejected",method:"POST",handler:xO},{path:"/api/device/clear-rejected",method:"POST",handler:yO},{path:"/api/device/remove",method:"POST",handler:_O},{path:"/api/device/label",method:"POST",handler:SO},{path:"/api/device/disconnect",method:"POST",handler:bO},{path:"/api/device/auto-approve",method:"GET",handler:wO},{path:"/api/device/auto-approve",method:"POST",handler:EO},{path:"/api/connections",method:"GET",handler:uS},{path:"/api/logs",method:"GET",handler:pS},{path:"/api/permissions",method:"GET",handler:dS},{path:"/api/permissions/request",method:"POST",handler:gS},{path:"/api/desktop/toggle",method:"POST",handler:fS},{path:"/api/autostart",method:"GET",handler:hS},{path:"/api/autostart",method:"POST",handler:mS},{path:"/api/sleep-inhibit",method:"GET",handler:PO},{path:"/api/sleep-inhibit",method:"POST",handler:MO},{path:"/api/sessions",method:"GET",handler:IO},{path:"/api/sessions/delete",method:"POST",handler:NO},{path:"/api/local-sites",method:"*",public:!0,handler:rO},{path:"/api/codespace/stop",method:"POST",handler:I4},{path:"/api/proxy/start",method:"POST",public:!0,handler:BO},{path:"/api/proxy/end",method:"POST",public:!0,handler:BO}];var D4=parseInt(process.env.PORT||"2208",10),Da=null;function B4(){if(!FO)return;let r=(0,tr.join)(Yn,"vite.config.js");if(!(0,ki.existsSync)(r))return;let e=(0,ki.existsSync)((0,tr.join)(Yn,"node_modules",".bin","vite"))?(0,tr.join)(Yn,"node_modules",".bin","vite"):(0,tr.join)(Yn,"..","node_modules",".bin","vite");Da=(0,tp.spawn)("node",[e,"--config",r],{cwd:Yn,stdio:"ignore",detached:!1}),Da.on("error",()=>{}),Da.unref()}async function HO(){let r=ph(),e=r.sleepInhibitMode;e||(r.sleepInhibit===!1?e="never":e=Z.sleepInhibit?.defaultMode||"never"),Vo(e),await KT(),$O=zk(),B4();let n=Tp(L4,{fallback:(a,c,{pathname:u})=>{if(u.startsWith("/api/")||u.startsWith("/socket.io")){he(c,404,"Not found");return}let p=!!a.headers["cf-connecting-ip"],f=a.socket.remoteAddress==="127.0.0.1"||a.socket.remoteAddress==="::1";if(p||!f){he(c,403,"Forbidden");return}let m=()=>{let y=u==="/"||u===""?(0,tr.join)(ev,"index.html"):(0,tr.join)(ev,u);LO(c,y)||LO(c,(0,tr.join)(ev,"index.html"))};if(FO){P4(a,c,m);return}m()}}),i=(0,ep.createServer)(async(a,c)=>{ok(c),!ak(a,c)&&await n(a,c)});zd(),Ww(),Gw(),Nl(),process.platform==="darwin"&&setInterval(Nl,Mv),await sk(i),i.listen(D4,a=>{if(a)throw a;let c="2.0.57";tv(c),setInterval(()=>tv(c),Na.checkIntervalMs),JT(()=>M4(c))});let s=!1,o=async a=>{if(s)return;s=!0,yh(),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")),Da)try{Da.kill()}catch{}let u=Ca();u&&(u.emit("server:shutdown"),u.close(()=>Kn.info("\u2713 Socket.IO closed"))),await new Promise(p=>setTimeout(p,500)),clearTimeout(c),Kn.info("\u2705 Server stopped cleanly"),process.exit(0)}catch(u){Kn.error(`\u274C Error during shutdown: ${u?.message||u}`),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}HO();0&&(module.exports={startServer});
|
|
265
265
|
/*! Bundled license information:
|
|
266
266
|
|
|
267
267
|
negotiator/index.js:
|