9remote 2.1.5 → 2.1.7
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/ptyDaemon.cjs +10 -7
- package/dist/server.cjs +100 -90
- package/dist/ui/assets/{index-x-cLAYQY.js → index-6avVMwsi.js} +3831 -3663
- package/dist/ui/assets/{index-DxFTXB_J.css → index-ByjrCweb.css} +67 -20
- package/dist/ui/index.html +2 -2
- package/package.json +6 -5
package/dist/cli.cjs
CHANGED
|
@@ -9,7 +9,7 @@ Right-click to open / quit`}function Zi(){let{port:e,tunnelUrl:n}=Ft,r=process.p
|
|
|
9
9
|
`}l||(t+=p)}else{var w=oo(ur).times(o.getModuleCount()+3);t+=w+`
|
|
10
10
|
`,o.modules.forEach(function(T){t+=ur,t+=T.map(Ic).join(""),t+=ur+`
|
|
11
11
|
`}),t+=w}r?r(t):console.log(t)},setErrorLevel:function(e){this.error=ks[e]||this.error}}});var In=require("fs"),qt=require("path"),yo=require("url"),wo=A(require("os"),1);var On=A(require("dns"),1),_e=A(require("path"),1),uo=A(require("os"),1),ne="9remote",mr=process.env.NREMOTE_REGISTRY||`https://registry.npmjs.org/${ne}/latest`,Pe=`${ne}@latest`,Fe=_e.default.join(uo.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")},fo=new On.default.promises.Resolver;fo.setServers(["1.1.1.1","1.0.0.1","8.8.8.8"]);var dr=On.default.lookup,zs=/^(\d{1,3}\.){3}\d{1,3}$|^::1$|^[0-9a-f:]+$/i;On.default.lookup=(e,n,r)=>{if(typeof n=="function"&&(r=n,n={}),e==="localhost"||zs.test(e))return dr(e,n,r);fo.resolve4(e).then(o=>{if(!o?.length)return dr(e,n,r);n.all?r(null,o.map(t=>({address:t,family:4}))):r(null,o[0],4)}).catch(()=>dr(e,n,r))};var O=2208,lo=5173;var zc=[`http://localhost:${O}`,`http://127.0.0.1:${O}`,`http://localhost:${lo}`,`http://127.0.0.1:${lo}`],Yt={fileName:"agent.log",rotatedName:"agent.log.1",maxBytes:2*1024*1024,cleanupAfterDays:7},po=60,$={STOPPED:0,PREPARING:1,CONNECTING:2,TUNNELING:3,VERIFYING:4,READY:5},mo={showTunnelUrlInMenu:!1};var ho={CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN:"1"};var go={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}},ea={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:{...ea,...n.headers}})}var ta=(0,qt.dirname)((0,yo.fileURLToPath)(__importMetaUrl)),na=[(0,qt.join)(wo.default.homedir(),".9remote",".env"),(0,qt.join)(ta,"..",".env")];function ra(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 na)if((0,In.existsSync)(e))try{ra((0,In.readFileSync)(e,"utf8"))}catch{}for(let[e,n]of Object.entries(ho))process.env[e]||(process.env[e]=n);var vr=A(require("path"),1),bo=A(require("fs"),1),Ao=require("url");var So=A(vo(),1),gr=A(require("crypto"),1),{machineIdSync:oa}=So.default;async function vt(e=null){let n=e||process.env.MACHINE_ID_SALT||"9remote-salt";try{let r=oa();return gr.default.createHash("sha256").update(r+n).digest("hex").substring(0,16)}catch(r){return console.error("Error getting machine ID:",r),gr.default.randomUUID().replace(/-/g,"").substring(0,16)}}var Eo=A(require("crypto"),1),ia=process.env.API_KEY_SECRET||"9remote-api-key-secret";function sa(){let e="abcdefghijklmnopqrstuvwxyz0123456789",n="";for(let r=0;r<4;r++)n+=e.charAt(Math.floor(Math.random()*e.length));return n}function aa(e,n){return Eo.default.createHmac("sha256",ia).update(e+n).digest("hex").slice(0,6)}function St(e){let n=e.slice(0,8),r=sa(),o=aa(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 il=re.STATE,yr=Qt.default.join(re.STATE,"state.json"),wr=Qt.default.join(re.ROOT,"keys.json"),Cn=Qt.default.join(re.STATE,"cmd.json"),sl=Qt.default.join(re.STATE,"settings.json");function Ln(){for(let e of[re.ROOT,re.STATE])ae.default.existsSync(e)||ae.default.mkdirSync(e,{recursive:!0})}function Mn(e){try{Ln(),ae.default.writeFileSync(yr,JSON.stringify(e,null,2),{mode:384})}catch(n){console.error("Error saving state:",n)}}function To(){try{ae.default.existsSync(yr)&&ae.default.unlinkSync(yr)}catch{}}function Nn(){try{return Ln(),ae.default.existsSync(wr)?JSON.parse(ae.default.readFileSync(wr,"utf8")):{machineId:null,key:null,name:"Default",createdAt:null}}catch{return{machineId:null,key:null,name:"Default",createdAt:null}}}function Et(e){try{Ln(),ae.default.writeFileSync(Cn,JSON.stringify({cmd:e,ts:Date.now()}))}catch{}}function xo(){try{if(!ae.default.existsSync(Cn))return null;let e=JSON.parse(ae.default.readFileSync(Cn,"utf8"));return ae.default.unlinkSync(Cn),e.cmd}catch{return null}}function rt(e,n,r="Default"){try{Ln();let o={machineId:e,key:n,name:r,createdAt:new Date().toISOString()};return ae.default.writeFileSync(wr,JSON.stringify(o,null,2),{mode:384}),o}catch(o){return console.error("Error saving key:",o),null}}function Ro(){return process.env.CODESPACES==="true"}var ca=vr.default.dirname((0,Ao.fileURLToPath)(__importMetaUrl));async function Ue(){let e=await vt();if(Ro()&&process.env.NREMOTE_API_KEY)return rt(e,process.env.NREMOTE_API_KEY,"Codespace");let n=Nn();if(!n.key){let{key:r}=St(e);n=rt(e,r,"Default")}return n}function Se(){return"2.1.
|
|
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 na)if((0,In.existsSync)(e))try{ra((0,In.readFileSync)(e,"utf8"))}catch{}for(let[e,n]of Object.entries(ho))process.env[e]||(process.env[e]=n);var vr=A(require("path"),1),bo=A(require("fs"),1),Ao=require("url");var So=A(vo(),1),gr=A(require("crypto"),1),{machineIdSync:oa}=So.default;async function vt(e=null){let n=e||process.env.MACHINE_ID_SALT||"9remote-salt";try{let r=oa();return gr.default.createHash("sha256").update(r+n).digest("hex").substring(0,16)}catch(r){return console.error("Error getting machine ID:",r),gr.default.randomUUID().replace(/-/g,"").substring(0,16)}}var Eo=A(require("crypto"),1),ia=process.env.API_KEY_SECRET||"9remote-api-key-secret";function sa(){let e="abcdefghijklmnopqrstuvwxyz0123456789",n="";for(let r=0;r<4;r++)n+=e.charAt(Math.floor(Math.random()*e.length));return n}function aa(e,n){return Eo.default.createHmac("sha256",ia).update(e+n).digest("hex").slice(0,6)}function St(e){let n=e.slice(0,8),r=sa(),o=aa(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 il=re.STATE,yr=Qt.default.join(re.STATE,"state.json"),wr=Qt.default.join(re.ROOT,"keys.json"),Cn=Qt.default.join(re.STATE,"cmd.json"),sl=Qt.default.join(re.STATE,"settings.json");function Ln(){for(let e of[re.ROOT,re.STATE])ae.default.existsSync(e)||ae.default.mkdirSync(e,{recursive:!0})}function Mn(e){try{Ln(),ae.default.writeFileSync(yr,JSON.stringify(e,null,2),{mode:384})}catch(n){console.error("Error saving state:",n)}}function To(){try{ae.default.existsSync(yr)&&ae.default.unlinkSync(yr)}catch{}}function Nn(){try{return Ln(),ae.default.existsSync(wr)?JSON.parse(ae.default.readFileSync(wr,"utf8")):{machineId:null,key:null,name:"Default",createdAt:null}}catch{return{machineId:null,key:null,name:"Default",createdAt:null}}}function Et(e){try{Ln(),ae.default.writeFileSync(Cn,JSON.stringify({cmd:e,ts:Date.now()}))}catch{}}function xo(){try{if(!ae.default.existsSync(Cn))return null;let e=JSON.parse(ae.default.readFileSync(Cn,"utf8"));return ae.default.unlinkSync(Cn),e.cmd}catch{return null}}function rt(e,n,r="Default"){try{Ln();let o={machineId:e,key:n,name:r,createdAt:new Date().toISOString()};return ae.default.writeFileSync(wr,JSON.stringify(o,null,2),{mode:384}),o}catch(o){return console.error("Error saving key:",o),null}}function Ro(){return process.env.CODESPACES==="true"}var ca=vr.default.dirname((0,Ao.fileURLToPath)(__importMetaUrl));async function Ue(){let e=await vt();if(Ro()&&process.env.NREMOTE_API_KEY)return rt(e,process.env.NREMOTE_API_KEY,"Codespace");let n=Nn();if(!n.key){let{key:r}=St(e);n=rt(e,r,"Default")}return n}function Se(){return"2.1.7"}var Ee=A(require("fs"),1),Er=A(require("path"),1);var Dn=re.LOGS,Zt=Er.default.join(Dn,Yt.fileName),Fn=Er.default.join(Dn,Yt.rotatedName),ko=!1,_o=null;function la(){Ee.default.existsSync(Dn)||Ee.default.mkdirSync(Dn,{recursive:!0})}function ua(){try{if(Ee.default.statSync(Zt).size<Yt.maxBytes)return;try{Ee.default.rmSync(Fn,{force:!0})}catch{}Ee.default.renameSync(Zt,Fn)}catch{}}function fa(){try{let e=Ee.default.statSync(Fn);Date.now()-e.mtimeMs>Yt.cleanupAfterDays*864e5&&Ee.default.rmSync(Fn,{force:!0})}catch{}}function Tr(e){try{ua(),Ee.default.appendFileSync(Zt,e+`
|
|
13
13
|
`)}catch{}}function Sr(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 Po(){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 pa=/\x1b\[[0-9;]*m/g,da=/https?:\/\/[^\s]+/g;function ma(e){return String(e).replace(pa,"").replace(da,"").replace(/\s+$/g,"")}function Xt(e,n,r){let o=ma(r);if(!o)return;let t=n==="info"?e:`${e}:${n}`,i=`${Po()} [${t}] ${o}`;if(Tr(i),_o)try{_o(i)}catch{}}function ha(){process.on("uncaughtException",e=>Xt("crash","error",`uncaughtException: ${e?.stack||e?.message||e}`)),process.on("unhandledRejection",e=>{let n=e instanceof Error?e.stack||e.message:String(e);Xt("crash","error",`unhandledRejection: ${n}`)}),process.on("exit",e=>Tr(`${Po()} [exit] code=${e} pid=${process.pid}`))}function Oo(){ko||(ko=!0,la(),fa(),Tr(`
|
|
14
14
|
=== SESSION ${new Date().toISOString()} pid=${process.pid} argv=${process.argv.slice(2).join(" ")} ===`),ha())}function Io(e=60){try{return Ee.default.readFileSync(Zt,"utf8").split(`
|
|
15
15
|
`).filter(Boolean).slice(-e)}catch{return[]}}function J(e){return{info:(...n)=>Xt(e,"info",Sr(n)),warn:(...n)=>Xt(e,"warn",Sr(n)),error:(...n)=>Xt(e,"error",Sr(n))}}var zt=Zt;var $o=(e=0)=>n=>`\x1B[${n+e}m`,Co=(e=0)=>n=>`\x1B[${38+e};5;${n}m`,Lo=(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]}},gl=Object.keys(M.modifier),ga=Object.keys(M.color),ya=Object.keys(M.bgColor),yl=[...ga,...ya];function wa(){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=$o(),M.color.ansi256=Co(),M.color.ansi16m=Lo(),M.bgColor.ansi=$o(10),M.bgColor.ansi256=Co(10),M.bgColor.ansi16m=Lo(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 va=wa(),he=va;var Bn=A(require("node:process"),1),No=A(require("node:os"),1),xr=A(require("node:tty"),1);function ue(e,n=globalThis.Deno?globalThis.Deno.args:Bn.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}=Bn.default,Un;ue("no-color")||ue("no-colors")||ue("color=false")||ue("color=never")?Un=0:(ue("color")||ue("colors")||ue("color=true")||ue("color=always"))&&(Un=1);function Sa(){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 Ea(e){return e===0?!1:{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function Ta(e,{streamIsTTY:n,sniffFlags:r=!0}={}){let o=Sa();o!==void 0&&(Un=o);let t=r?Un: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(Bn.default.platform==="win32"){let s=No.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 Mo(e,n={}){let r=Ta(e,{streamIsTTY:e&&e.isTTY,...n});return Ea(r)}var xa={stdout:Mo({isTTY:xr.default.isatty(1)}),stderr:Mo({isTTY:xr.default.isatty(2)})},Do=xa;function Fo(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 Uo(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:${Wn}
|
|
|
71
71
|
|
|
72
72
|
[Install]
|
|
73
73
|
WantedBy=default.target
|
|
74
|
-
`}function Ba(e){try{return(0,st.execFileSync)("systemctl",["--user",...e],{stdio:"ignore"}),!0}catch{return!1}}function Ha(){return(0,C.existsSync)(Q.linux)||(0,C.existsSync)(Q.linuxSystemd)}async function ja(){try{if(process.platform==="darwin")return La();if(process.platform==="win32")return await Da();if(process.platform==="linux")return Ha()}catch{}return!1}async function Zo(){try{if(process.platform==="win32"&&Na(),!await ja())return!1;if(process.platform==="darwin"){let e=Ca(je(),at());return((0,C.existsSync)(Q.darwin)?(0,C.readFileSync)(Q.darwin,"utf8"):"")===e?!1:((0,C.writeFileSync)(Q.darwin,e),!0)}if(process.platform==="win32"){let e=Ma();return((0,C.existsSync)(Q.win)?(0,C.readFileSync)(Q.win,"utf8"):"")===e?!1:((0,C.writeFileSync)(Q.win,e),!0)}if(process.platform==="linux"){if((0,C.existsSync)(Q.linuxSystemd)){let e=Ua();return(0,C.readFileSync)(Q.linuxSystemd,"utf8")===e?!1:((0,C.writeFileSync)(Q.linuxSystemd,e),Ba(["daemon-reload"]),!0)}if((0,C.existsSync)(Q.linux)){let e=Fa();return(0,C.readFileSync)(Q.linux,"utf8")===e?!1:((0,C.writeFileSync)(Q.linux,e),!0)}}}catch{}return!1}var D="https://9remote.cc",zo=3e4,ei=500,Ir=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},Oe={maxLogLines:200,headerWidth:44},bt={checkIntervalMs:36e5,connectCheckDebounceMs:9e5,maxRetry:3,retryDelayMs:3e3,verifyTimeoutMs:15e3,lockTtlMs:3e5,lockFile:"update.lock"},ti=5e3,ni=2,ri=3e4,fe={orange:m.rgb(230,138,110),orangeDim:m.rgb(200,120,95)};var Ka=Ie.default.dirname((0,oi.fileURLToPath)(__importMetaUrl)),ii=3e3;var Jn=2208,$r=Ie.default.join(At.default.homedir(),".9remote","cloudflared.pid");function Ga(){try{Vo()}catch{}try{if((0,X.existsSync)($r)){let e=parseInt((0,X.readFileSync)($r,"utf8"));if(Number.isFinite(e))try{process.kill(e)}catch{}try{(0,X.unlinkSync)($r)}catch{}}}catch{}try{process.platform==="win32"?(0,rn.execSync)(`for /f "tokens=5" %a in ('netstat -aon ^| findstr :${Jn}') do taskkill /F /PID %a`,{stdio:"ignore",windowsHide:!0}):(0,rn.execSync)(`lsof -ti:${Jn} | xargs kill -9 2>/dev/null || true`,{stdio:"ignore"})}catch{}if(process.platform==="win32"){let e=Date.now()+1500;for(;Date.now()<e;);}}function si(){return"2.1.
|
|
74
|
+
`}function Ba(e){try{return(0,st.execFileSync)("systemctl",["--user",...e],{stdio:"ignore"}),!0}catch{return!1}}function Ha(){return(0,C.existsSync)(Q.linux)||(0,C.existsSync)(Q.linuxSystemd)}async function ja(){try{if(process.platform==="darwin")return La();if(process.platform==="win32")return await Da();if(process.platform==="linux")return Ha()}catch{}return!1}async function Zo(){try{if(process.platform==="win32"&&Na(),!await ja())return!1;if(process.platform==="darwin"){let e=Ca(je(),at());return((0,C.existsSync)(Q.darwin)?(0,C.readFileSync)(Q.darwin,"utf8"):"")===e?!1:((0,C.writeFileSync)(Q.darwin,e),!0)}if(process.platform==="win32"){let e=Ma();return((0,C.existsSync)(Q.win)?(0,C.readFileSync)(Q.win,"utf8"):"")===e?!1:((0,C.writeFileSync)(Q.win,e),!0)}if(process.platform==="linux"){if((0,C.existsSync)(Q.linuxSystemd)){let e=Ua();return(0,C.readFileSync)(Q.linuxSystemd,"utf8")===e?!1:((0,C.writeFileSync)(Q.linuxSystemd,e),Ba(["daemon-reload"]),!0)}if((0,C.existsSync)(Q.linux)){let e=Fa();return(0,C.readFileSync)(Q.linux,"utf8")===e?!1:((0,C.writeFileSync)(Q.linux,e),!0)}}}catch{}return!1}var D="https://9remote.cc",zo=3e4,ei=500,Ir=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},Oe={maxLogLines:200,headerWidth:44},bt={checkIntervalMs:36e5,connectCheckDebounceMs:9e5,maxRetry:3,retryDelayMs:3e3,verifyTimeoutMs:15e3,lockTtlMs:3e5,lockFile:"update.lock"},ti=5e3,ni=2,ri=3e4,fe={orange:m.rgb(230,138,110),orangeDim:m.rgb(200,120,95)};var Ka=Ie.default.dirname((0,oi.fileURLToPath)(__importMetaUrl)),ii=3e3;var Jn=2208,$r=Ie.default.join(At.default.homedir(),".9remote","cloudflared.pid");function Ga(){try{Vo()}catch{}try{if((0,X.existsSync)($r)){let e=parseInt((0,X.readFileSync)($r,"utf8"));if(Number.isFinite(e))try{process.kill(e)}catch{}try{(0,X.unlinkSync)($r)}catch{}}}catch{}try{process.platform==="win32"?(0,rn.execSync)(`for /f "tokens=5" %a in ('netstat -aon ^| findstr :${Jn}') do taskkill /F /PID %a`,{stdio:"ignore",windowsHide:!0}):(0,rn.execSync)(`lsof -ti:${Jn} | xargs kill -9 2>/dev/null || true`,{stdio:"ignore"})}catch{}if(process.platform==="win32"){let e=Date.now()+1500;for(;Date.now()<e;);}}function si(){return"2.1.7"}function ai(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 Wa(){return process.env.CODESPACES==="true"||process.env.GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN?"GitHub Codespaces":(0,X.existsSync)("/.dockerenv")?"Docker":null}function Qn(){Ga()}async function ci(){try{let e=si();if(!e)return null;let n=await G(mr,{signal:AbortSignal.timeout(ii)});if(!n.ok)return null;let{version:r}=await n.json();return r&&ai(e,r)?{current:e,latest:r}:null}catch{return null}}var qn=Ie.default.join(re.STATE,bt.lockFile);function Va(){try{if((0,X.existsSync)(qn)){let{pid:e,ts:n}=JSON.parse((0,X.readFileSync)(qn,"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,X.writeFileSync)(qn,JSON.stringify({pid:process.pid,ts:Date.now()}))}catch{}return!0}async function Ya(){try{let e=await G(mr,{signal:AbortSignal.timeout(ii)});if(!e.ok)return null;let{version:n}=await e.json();return n||null}catch{return null}}function qa(){try{if(process.env.NREMOTE_REGISTRY)return`--registry ${new URL(process.env.NREMOTE_REGISTRY).origin}`}catch{}return""}function Ja({currentVersion:e,latest:n,agentPid:r}){let o=Yo(),t=qa(),i=je(),s=at(),a=qn,c=`--prefer-online --no-audit --no-fund ${t}`.trim();if(process.platform==="win32"){let f=Ie.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/ptyDaemon.cjs
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
const __importMetaUrl = require('url').pathToFileURL(__filename).href;
|
|
3
|
-
var
|
|
4
|
-
`;try{a.default.appendFileSync(R,n)}catch{}console.error(n.trim())}function ie(){return process.env.CODESPACES==="true"?process.env.CODESPACE_VSCODE_FOLDER||"/workspaces":process.env.HOME||process.env.USERPROFILE||
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
var U=Object.create;var A=Object.defineProperty;var Z=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var J=Object.getPrototypeOf,V=Object.prototype.hasOwnProperty;var K=(e,s,t,n)=>{if(s&&typeof s=="object"||typeof s=="function")for(let r of W(s))!V.call(e,r)&&r!==t&&A(e,r,{get:()=>s[r],enumerable:!(n=Z(s,r))||n.enumerable});return e};var O=(e,s,t)=>(t=e!=null?U(J(e)):{},K(s||!e||!e.__esModule?A(t,"default",{value:e,enumerable:!0}):t,e));var j=O(require("net"),1),a=O(require("fs"),1),g=O(require("path"),1),v=O(require("os"),1),H=O(require("node-pty"),1);var L="38",k={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 B(e){if(process.platform==="win32"){let n=e?k.win32.find(o=>o.id===e):null;if(n)return n;let r=process.env.COMSPEC;return r?{id:"cmd",label:"Command Prompt",path:r,args:[]}:k.win32[0]}let s=process.env.SHELL||"/bin/bash",t=s.split("/").pop();return{id:t,label:t,path:s,args:["-l"]}}var D=g.default.join(v.default.homedir(),".9remote"),x=process.platform==="win32"?"\\\\.\\pipe\\9remote-pty":g.default.join(D,"pty-daemon.sock"),_=g.default.join(D,"pids","ptyDaemon.pid"),h=new Map,M=new Set,F=2*1024*1024,X=128*1024,Y=128*1024,Q=5*1024*1024;function G(e,s){if(!e?.length||s<=0)return Buffer.alloc(0);let t=s,n=[];for(let r=e.length-1;r>=0&&t>0;r--){let o=e[r];o.length<=t?(n.push(o),t-=o.length):(n.push(o.subarray(o.length-t)),t=0)}return n.reverse(),Buffer.concat(n)}function P(e){return e?.length?e.reduce((s,t)=>s+t.length,0):0}function ee(e,s,t){if(!e?.length||t<=0)return{prefix:Buffer.alloc(0),trimmed:0};let n=P(e),r=n-Math.max(0,Math.min(s,n)),o=r-t;if(o<0&&(t+=o,o=0),t<=0)return{prefix:Buffer.alloc(0),trimmed:0};let i=0,c=[];for(let b=0;b<e.length&&t>0;b++){let f=e[b],m=i+f.length;if(m<=o){i=m;continue}if(i>=r)break;let E=Math.max(0,o-i),u=Math.min(t,f.length-E);c.push(f.subarray(E,E+u)),t-=u,i=m}let S=Buffer.concat(c),p=0,l=S.indexOf(10);return l>0&&l<S.length-1&&(p=l+1,S=S.subarray(p)),{prefix:S,trimmed:p}}var te=["1049","1047","1000","1002","1003","1006","1015","1005"],se=/\x1b\[\?([0-9;]+)([hl])/g;function re(e,s){typeof s!="string"&&(s=String(s));for(let t of s.matchAll(se)){let n=t[2]==="h";for(let r of t[1].split(";"))e[n?"add":"delete"](`?${r}`)}}function ne(e){let s=te.filter(t=>e.has(`?${t}`));return s.length?`\x1B[?${s.join(";")}h`:""}var C=g.default.join(D,"logs"),R=g.default.join(C,"daemon.log");try{a.default.existsSync(C)||a.default.mkdirSync(C,{recursive:!0})}catch{}function oe(){try{if(a.default.existsSync(R)&&a.default.statSync(R).size>Q){let t=a.default.readFileSync(R,"utf8").slice(-1024*1024);a.default.writeFileSync(R,t)}}catch{}}function w(e,s=null){oe();let n=`[${new Date().toISOString()}] ERROR: ${e}`;s&&(n+=` - ${s.message||s}`),n+=`
|
|
4
|
+
`;try{a.default.appendFileSync(R,n)}catch{}console.error(n.trim())}function ie(){return process.env.CODESPACES==="true"?process.env.CODESPACE_VSCODE_FOLDER||"/workspaces":process.env.HOME||process.env.USERPROFILE||v.default.homedir()}function ce(e){let s={...process.env,TERM:"xterm-256color",COLORTERM:"truecolor",LANG:process.env.LANG||"en_US.UTF-8"};delete s.PORT;let t=e.includes("zsh"),n=e.includes("bash"),r=null;if(t){r=a.default.mkdtempSync(g.default.join(v.default.tmpdir(),"9remote-zsh-"));let o=g.default.join(r,".zshrc"),i=s.HOME||v.default.homedir(),c="";c+=`[ -f "${i}/.zprofile" ] && source "${i}/.zprofile"
|
|
5
|
+
`,c+=`[ -f "${i}/.zshrc" ] && source "${i}/.zshrc"
|
|
6
|
+
`,c+=`[ -f "${i}/.zlogin" ] && source "${i}/.zlogin"
|
|
7
|
+
`,c+='NineRemoteOsc7() { print -Pn "\\e]7;file://%m${PWD}\\e\\\\" }\n',c+=`precmd_functions+=( NineRemoteOsc7 )
|
|
8
|
+
`,a.default.writeFileSync(o,c),s.ZDOTDIR=r}else if(n){let o=s.PROMPT_COMMAND||"";s.PROMPT_COMMAND=`printf "\\e]7;file://%s\\a" "\${HOSTNAME}\${PWD}"${o?`; ${o}`:""}`}return{env:s,zdotDir:r}}function $(e){let s=JSON.stringify(e)+`
|
|
9
|
+
`;for(let t of M)try{t.write(s)}catch{}}function d(e,s){try{e.write(JSON.stringify(s)+`
|
|
10
|
+
`)}catch{}}function le(e,s,t=80,n=24,r=null,o=null){if(h.has(e))return{success:!1,error:"Session already exists"};let i=B(r);(!o||!a.default.existsSync(o))&&(o=ie());try{let{env:c,zdotDir:S}=ce(i.path);c.NINE_REMOTE_SESSION_ID=e;let p=H.default.spawn(i.path,i.args,{name:"xterm-256color",cols:t,rows:n,cwd:o,env:c,useConpty:process.platform==="win32"});if(i.id==="powershell"||i.id==="pwsh"){let f=`function prompt { $p = $PWD.Path -replace '\\\\','/'; "$([char]27)]7;file://$([System.Net.Dns]::GetHostName())$p$([char]27)\\PS $($PWD.Path)> " }\r
|
|
11
|
+
`;setTimeout(()=>{try{p.write(f)}catch{}},500)}let l={pty:p,buffer:[],modes:new Set,name:s,createdAt:Date.now(),cwd:o,shellId:i.id,shellLabel:i.label,zdotDir:S,pending:null,flushScheduled:!1},b=()=>{l.flushScheduled=!1;let f=l.pending;f&&(l.pending=null,$({type:"output",sessionId:e,enc:"b64",data:Buffer.from(f).toString("base64")}))};return p.onData(f=>{l.buffer.push(Buffer.from(f,"utf-8")),re(l.modes,f);let m=f.match(/\x1b\]7;file:\/\/[^/]*([^\x07\x1b]*)/);if(m){let u;try{u=decodeURIComponent(m[1])}catch{u=m[1]}u&&u!==l.cwd&&(l.cwd=u,$({type:"cwdChange",sessionId:e,cwd:u}))}P(l.buffer)>F&&(l.buffer=[G(l.buffer,F)]),l.pending=l.pending===null?f:l.pending+f,l.flushScheduled||(l.flushScheduled=!0,setImmediate(b))}),p.onExit(()=>{h.delete(e),l.zdotDir&&a.default.rm(l.zdotDir,{recursive:!0,force:!0},()=>{}),$({type:"sessionClosed",sessionId:e})}),h.set(e,l),{success:!0,sessionId:e,cwd:o,shellId:i.id,shellLabel:i.label}}catch(c){return w("Failed to create session",c),{success:!1,error:c.message}}}function ae(e,s){let{type:t,sessionId:n,...r}=s;switch(t){case"ping":d(e,{type:"pong",version:L,requestId:r.requestId});break;case"listSessions":let o=Array.from(h.entries()).map(([u,y])=>({id:u,name:y.name,createdAt:y.createdAt,shellId:y.shellId,shellLabel:y.shellLabel,cwd:y.cwd}));d(e,{type:"sessionList",sessions:o,requestId:r.requestId});break;case"createSession":let i=le(n||`session-${Date.now()}`,r.name,r.cols,r.rows,r.shellId,r.cwd);d(e,{type:"createResult",...i,requestId:r.requestId});break;case"joinSession":let c=h.get(n);if(!c){d(e,{type:"joinResult",success:!1,error:"Session not found",requestId:r.requestId});return}let S=ne(c.modes);S&&d(e,{type:"output",sessionId:n,enc:"b64",data:Buffer.from(S).toString("base64")});let p=G(c.buffer,X);p&&p.length&&d(e,{type:"output",sessionId:n,enc:"b64",data:p.toString("base64")});let l=P(c.buffer);d(e,{type:"joinResult",success:!0,name:c.name,cwd:c.cwd,shellId:c.shellId,shellLabel:c.shellLabel,total:l,replaySize:p?p.length:0,requestId:r.requestId});break;case"requestHistory":{let u=h.get(n);if(!u){d(e,{type:"historyResult",success:!1,error:"Session not found",requestId:r.requestId});return}let y=P(u.buffer),N=Math.max(0,Math.min(r.have||0,y)),z=y-N,T=Math.min(Y,z),{prefix:I,trimmed:q}=T>0?ee(u.buffer,N,T):{prefix:Buffer.alloc(0),trimmed:0};d(e,{type:"historyResult",success:!0,sessionId:n,enc:"b64",prefix:I&&I.length?I.toString("base64"):"",prefixLen:I?I.length:0,total:y,remaining:Math.max(0,z-I.length-q)+q,requestId:r.requestId});break}case"input":let b=h.get(n);b?.pty&&b.pty.write(r.data);break;case"resize":let f=h.get(n);if(f?.pty)try{f.pty.resize(r.cols,r.rows)}catch{}break;case"deleteSession":let m=h.get(n);m?(m.pty&&m.pty.kill(),h.delete(n),$({type:"sessionClosed",sessionId:n}),d(e,{type:"deleteResult",success:!0,requestId:r.requestId})):d(e,{type:"deleteResult",success:!1,error:"Session not found",requestId:r.requestId});break;case"getCwd":let E=h.get(n);d(e,{type:"cwdResult",cwd:E?.cwd||null,requestId:r.requestId});break;default:w(`Unknown message type: ${t}`)}}function fe(){if(!a.default.existsSync(D))try{a.default.mkdirSync(D,{recursive:!0})}catch(t){w("Failed to create socket directory",t),process.exit(1)}if(process.platform!=="win32"&&a.default.existsSync(x))try{a.default.unlinkSync(x)}catch(t){w("Failed to remove stale socket",t),process.exit(1)}let e=j.default.createServer(t=>{M.add(t);let n="";t.on("data",r=>{n+=r.toString();let o=n.split(`
|
|
12
|
+
`);n=o.pop()||"";for(let i of o)if(i.trim())try{let c=JSON.parse(i);ae(t,c)}catch{w("Invalid message",i)}}),t.on("close",()=>{M.delete(t)}),t.on("error",r=>{w("Client error",r),M.delete(t)})});e.on("error",t=>{w("Server error",t),t.code==="EADDRINUSE"&&w("Socket already in use, exiting"),process.exit(1)}),e.listen(x,()=>{if(process.platform!=="win32")try{a.default.chmodSync(x,384)}catch{}});try{a.default.mkdirSync(g.default.dirname(_),{recursive:!0}),a.default.writeFileSync(_,String(process.pid),{mode:384})}catch{}let s=()=>{for(let[,t]of h)if(t.pty)try{t.pty.kill()}catch{}try{e.close()}catch{}if(process.platform!=="win32"&&a.default.existsSync(x))try{a.default.unlinkSync(x)}catch{}try{a.default.unlinkSync(_)}catch{}process.exit(0)};process.on("SIGTERM",s),process.on("SIGINT",s)}fe();
|