9remote 2.0.70 → 2.0.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,12 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  const __importMetaUrl = require('url').pathToFileURL(__filename).href;
3
- var A=Object.create;var L=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var q=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var j=(e,r,s,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of $(r))!F.call(e,t)&&t!==s&&L(e,t,{get:()=>r[t],enumerable:!(o=T(r,t))||o.enumerable});return e};var g=(e,r,s)=>(s=e!=null?A(q(e)):{},j(r||!e||!e.__esModule?L(s,"default",{value:e,enumerable:!0}):s,e));var N=g(require("net"),1),n=g(require("fs"),1),m=g(require("path"),1),P=g(require("os"),1),M=g(require("node-pty"),1);var 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 C(e){if(process.platform==="win32"){let o=e?k.win32.find(a=>a.id===e):null;if(o)return o;let t=process.env.COMSPEC;return t?{id:"cmd",label:"Command Prompt",path:t,args:[]}:k.win32[0]}let r=process.env.SHELL||"/bin/bash",s=r.split("/").pop();return{id:s,label:s,path:r,args:["-l"]}}var w=m.default.join(P.default.homedir(),".9remote"),b=process.platform==="win32"?"\\\\.\\pipe\\9remote-pty":m.default.join(w,"pty-daemon.sock"),R=m.default.join(w,"pids","ptyDaemon.pid"),l=new Map,O=new Set,_=2*1024*1024,H=256*1024,G=5*1024*1024,D=m.default.join(w,"logs"),E=m.default.join(D,"daemon.log");try{n.default.existsSync(D)||n.default.mkdirSync(D,{recursive:!0})}catch{}function U(){try{if(n.default.existsSync(E)&&n.default.statSync(E).size>G){let s=n.default.readFileSync(E,"utf8").slice(-1024*1024);n.default.writeFileSync(E,s)}}catch{}}function f(e,r=null){U();let o=`[${new Date().toISOString()}] ERROR: ${e}`;r&&(o+=` - ${r.message||r}`),o+=`
4
- `;try{n.default.appendFileSync(E,o)}catch{}console.error(o.trim())}function Z(){return process.env.CODESPACES==="true"?process.env.CODESPACE_VSCODE_FOLDER||"/workspaces":process.env.HOME||process.env.USERPROFILE||P.default.homedir()}function B(e){let r={...process.env,TERM:"xterm-256color",COLORTERM:"truecolor",LANG:process.env.LANG||"en_US.UTF-8"};delete r.PORT;let s=e.includes("zsh"),o=e.includes("bash");if(s){r.ZDOTDIR=r.ZDOTDIR||r.HOME;let t=`
5
- precmd() {
6
- print -Pn "\\e]7;file://%m\${PWD}\\e\\\\"
7
- }
8
- `;r._9REMOTE_PRECMD=t}else if(o){let t=r.PROMPT_COMMAND||"";r.PROMPT_COMMAND=`printf "\\e]7;file://%s\\a" "\${HOSTNAME}\${PWD}"${t?`; ${t}`:""}`}return r}function x(e){let r=JSON.stringify(e)+`
9
- `;for(let s of O)try{s.write(r)}catch{}}function u(e,r){try{e.write(JSON.stringify(r)+`
10
- `)}catch{}}function J(e,r,s=80,o=24,t=null,a=null){if(l.has(e))return{success:!1,error:"Session already exists"};let i=C(t);(!a||!n.default.existsSync(a))&&(a=Z());try{let c=B(i.path);c.NINE_REMOTE_SESSION_ID=e;let h=M.default.spawn(i.path,i.args,{name:"xterm-256color",cols:s,rows:o,cwd:a,env:c,useConpty:process.platform==="win32"});if(i.id==="powershell"||i.id==="pwsh"){let d=`function prompt { $p = $PWD.Path -replace '\\\\','/'; "$([char]27)]7;file://$([System.Net.Dns]::GetHostName())$p$([char]27)\\PS $($PWD.Path)> " }\r
11
- `;setTimeout(()=>{try{h.write(d)}catch{}},500)}let p={pty:h,buffer:[],name:r,createdAt:Date.now(),cwd:a,shellId:i.id,shellLabel:i.label};return h.onData(d=>{p.buffer.push(d);let y=d.match(/\x1b\]7;file:\/\/[^/]*([^\x07\x1b]*)/);if(y)try{p.cwd=decodeURIComponent(y[1])}catch{}p.buffer.reduce((I,S)=>I+S.length,0)>_&&(p.buffer=[p.buffer.join("").slice(-_)]),x({type:"output",sessionId:e,data:Buffer.from(d).toString("base64")})}),h.onExit(()=>{l.delete(e),x({type:"sessionClosed",sessionId:e})}),l.set(e,p),{success:!0,sessionId:e,cwd:a,shellId:i.id,shellLabel:i.label}}catch(c){return f("Failed to create session",c),{success:!1,error:c.message}}}function W(e,r){let{type:s,sessionId:o,...t}=r;switch(s){case"ping":u(e,{type:"pong",version:"18",requestId:t.requestId});break;case"listSessions":let a=Array.from(l.entries()).map(([I,S])=>({id:I,name:S.name,createdAt:S.createdAt,shellId:S.shellId,shellLabel:S.shellLabel,cwd:S.cwd}));u(e,{type:"sessionList",sessions:a,requestId:t.requestId});break;case"createSession":let i=J(t.sessionId||`session-${Date.now()}`,t.name,t.cols,t.rows,t.shellId,t.cwd);u(e,{type:"createResult",...i,requestId:t.requestId});break;case"joinSession":let c=l.get(o);if(!c){u(e,{type:"joinResult",success:!1,error:"Session not found",requestId:t.requestId});return}let h=c.buffer.length>0?c.buffer.join("").slice(-H):"";h&&u(e,{type:"output",sessionId:o,data:Buffer.from(h).toString("base64")}),u(e,{type:"joinResult",success:!0,name:c.name,cwd:c.cwd,shellId:c.shellId,shellLabel:c.shellLabel,requestId:t.requestId});break;case"input":let p=l.get(o);p?.pty&&p.pty.write(t.data);break;case"resize":let d=l.get(o);if(d?.pty)try{d.pty.resize(t.cols,t.rows)}catch{}break;case"deleteSession":let y=l.get(o);y?(y.pty&&y.pty.kill(),l.delete(o),x({type:"sessionClosed",sessionId:o}),u(e,{type:"deleteResult",success:!0,requestId:t.requestId})):u(e,{type:"deleteResult",success:!1,error:"Session not found",requestId:t.requestId});break;case"getCwd":let v=l.get(o);u(e,{type:"cwdResult",cwd:v?.cwd||null,requestId:t.requestId});break;default:f(`Unknown message type: ${s}`)}}function V(){if(!n.default.existsSync(w))try{n.default.mkdirSync(w,{recursive:!0})}catch(s){f("Failed to create socket directory",s),process.exit(1)}if(process.platform!=="win32"&&n.default.existsSync(b))try{n.default.unlinkSync(b)}catch(s){f("Failed to remove stale socket",s),process.exit(1)}let e=N.default.createServer(s=>{O.add(s);let o="";s.on("data",t=>{o+=t.toString();let a=o.split(`
12
- `);o=a.pop()||"";for(let i of a)if(i.trim())try{let c=JSON.parse(i);W(s,c)}catch{f("Invalid message",i)}}),s.on("close",()=>{O.delete(s)}),s.on("error",t=>{f("Client error",t),O.delete(s)})});e.on("error",s=>{f("Server error",s),s.code==="EADDRINUSE"&&f("Socket already in use, exiting"),process.exit(1)}),e.listen(b,()=>{if(process.platform!=="win32")try{n.default.chmodSync(b,384)}catch{}});try{n.default.mkdirSync(m.default.dirname(R),{recursive:!0}),n.default.writeFileSync(R,String(process.pid),{mode:384})}catch{}let r=()=>{for(let[,s]of l)if(s.pty)try{s.pty.kill()}catch{}try{e.close()}catch{}if(process.platform!=="win32"&&n.default.existsSync(b))try{n.default.unlinkSync(b)}catch{}try{n.default.unlinkSync(R)}catch{}process.exit(0)};process.on("SIGTERM",r),process.on("SIGINT",r)}V();
3
+ var T=Object.create;var L=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var H=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of q(r))!j.call(e,s)&&s!==t&&L(e,s,{get:()=>r[s],enumerable:!(o=z(r,s))||o.enumerable});return e};var g=(e,r,t)=>(t=e!=null?T(F(e)):{},H(r||!e||!e.__esModule?L(t,"default",{value:e,enumerable:!0}):t,e));var _=g(require("net"),1),c=g(require("fs"),1),u=g(require("path"),1),D=g(require("os"),1),M=g(require("node-pty"),1);var 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 C(e){if(process.platform==="win32"){let o=e?k.win32.find(n=>n.id===e):null;if(o)return o;let s=process.env.COMSPEC;return s?{id:"cmd",label:"Command Prompt",path:s,args:[]}:k.win32[0]}let r=process.env.SHELL||"/bin/bash",t=r.split("/").pop();return{id:t,label:t,path:r,args:["-l"]}}var w=u.default.join(D.default.homedir(),".9remote"),y=process.platform==="win32"?"\\\\.\\pipe\\9remote-pty":u.default.join(w,"pty-daemon.sock"),v=u.default.join(w,"pids","ptyDaemon.pid"),p=new Map,O=new Set,N=2*1024*1024,Z=256*1024,U=5*1024*1024;function A(e,r){if(!e?.length||r<=0)return"";let t=r,o=[];for(let s=e.length-1;s>=0&&t>0;s--){let n=e[s];n.length<=t?(o.push(n),t-=n.length):(o.push(n.slice(n.length-t)),t=0)}return o.reverse(),o.join("")}var x=u.default.join(w,"logs"),b=u.default.join(x,"daemon.log");try{c.default.existsSync(x)||c.default.mkdirSync(x,{recursive:!0})}catch{}function B(){try{if(c.default.existsSync(b)&&c.default.statSync(b).size>U){let t=c.default.readFileSync(b,"utf8").slice(-1024*1024);c.default.writeFileSync(b,t)}}catch{}}function h(e,r=null){B();let o=`[${new Date().toISOString()}] ERROR: ${e}`;r&&(o+=` - ${r.message||r}`),o+=`
4
+ `;try{c.default.appendFileSync(b,o)}catch{}console.error(o.trim())}function J(){return process.env.CODESPACES==="true"?process.env.CODESPACE_VSCODE_FOLDER||"/workspaces":process.env.HOME||process.env.USERPROFILE||D.default.homedir()}function W(e){let r={...process.env,TERM:"xterm-256color",COLORTERM:"truecolor",LANG:process.env.LANG||"en_US.UTF-8"};delete r.PORT;let t=e.includes("zsh"),o=e.includes("bash"),s=null;if(t){s=c.default.mkdtempSync(u.default.join(D.default.tmpdir(),"9remote-zsh-"));let n=u.default.join(s,".zshrc"),i=r.HOME?u.default.join(r.HOME,".zshrc"):null,l='precmd() { print -Pn "\\e]7;file://%m${PWD}\\e\\\\" }\n';i&&c.default.existsSync(i)&&(l+=`[ -f "${i}" ] && source "${i}"
5
+ `),c.default.writeFileSync(n,l),r.ZDOTDIR=s}else if(o){let n=r.PROMPT_COMMAND||"";r.PROMPT_COMMAND=`printf "\\e]7;file://%s\\a" "\${HOSTNAME}\${PWD}"${n?`; ${n}`:""}`}return{env:r,zdotDir:s}}function P(e){let r=JSON.stringify(e)+`
6
+ `;for(let t of O)try{t.write(r)}catch{}}function f(e,r){try{e.write(JSON.stringify(r)+`
7
+ `)}catch{}}function V(e,r,t=80,o=24,s=null,n=null){if(p.has(e))return{success:!1,error:"Session already exists"};let i=C(s);(!n||!c.default.existsSync(n))&&(n=J());try{let{env:l,zdotDir:E}=W(i.path);l.NINE_REMOTE_SESSION_ID=e;let m=M.default.spawn(i.path,i.args,{name:"xterm-256color",cols:t,rows:o,cwd:n,env:l,useConpty:process.platform==="win32"});if(i.id==="powershell"||i.id==="pwsh"){let d=`function prompt { $p = $PWD.Path -replace '\\\\','/'; "$([char]27)]7;file://$([System.Net.Dns]::GetHostName())$p$([char]27)\\PS $($PWD.Path)> " }\r
8
+ `;setTimeout(()=>{try{m.write(d)}catch{}},500)}let a={pty:m,buffer:[],name:r,createdAt:Date.now(),cwd:n,shellId:i.id,shellLabel:i.label,zdotDir:E};return m.onData(d=>{a.buffer.push(d);let I=d.match(/\x1b\]7;file:\/\/[^/]*([^\x07\x1b]*)/);if(I)try{a.cwd=decodeURIComponent(I[1])}catch{}a.buffer.reduce((S,$)=>S+$.length,0)>N&&(a.buffer=[A(a.buffer,N)]),P({type:"output",sessionId:e,data:Buffer.from(d).toString("base64")})}),m.onExit(()=>{p.delete(e),a.zdotDir&&c.default.rm(a.zdotDir,{recursive:!0,force:!0},()=>{}),P({type:"sessionClosed",sessionId:e})}),p.set(e,a),{success:!0,sessionId:e,cwd:n,shellId:i.id,shellLabel:i.label}}catch(l){return h("Failed to create session",l),{success:!1,error:l.message}}}function K(e,r){let{type:t,sessionId:o,...s}=r;switch(t){case"ping":f(e,{type:"pong",version:"22",requestId:s.requestId});break;case"listSessions":let n=Array.from(p.entries()).map(([R,S])=>({id:R,name:S.name,createdAt:S.createdAt,shellId:S.shellId,shellLabel:S.shellLabel,cwd:S.cwd}));f(e,{type:"sessionList",sessions:n,requestId:s.requestId});break;case"createSession":let i=V(o||`session-${Date.now()}`,s.name,s.cols,s.rows,s.shellId,s.cwd);f(e,{type:"createResult",...i,requestId:s.requestId});break;case"joinSession":let l=p.get(o);if(!l){f(e,{type:"joinResult",success:!1,error:"Session not found",requestId:s.requestId});return}let E=A(l.buffer,Z);E&&f(e,{type:"output",sessionId:o,data:Buffer.from(E).toString("base64")}),f(e,{type:"joinResult",success:!0,name:l.name,cwd:l.cwd,shellId:l.shellId,shellLabel:l.shellLabel,requestId:s.requestId});break;case"input":let m=p.get(o);m?.pty&&m.pty.write(s.data);break;case"resize":let a=p.get(o);if(a?.pty)try{a.pty.resize(s.cols,s.rows)}catch{}break;case"deleteSession":let d=p.get(o);d?(d.pty&&d.pty.kill(),p.delete(o),P({type:"sessionClosed",sessionId:o}),f(e,{type:"deleteResult",success:!0,requestId:s.requestId})):f(e,{type:"deleteResult",success:!1,error:"Session not found",requestId:s.requestId});break;case"getCwd":let I=p.get(o);f(e,{type:"cwdResult",cwd:I?.cwd||null,requestId:s.requestId});break;default:h(`Unknown message type: ${t}`)}}function X(){if(!c.default.existsSync(w))try{c.default.mkdirSync(w,{recursive:!0})}catch(t){h("Failed to create socket directory",t),process.exit(1)}if(process.platform!=="win32"&&c.default.existsSync(y))try{c.default.unlinkSync(y)}catch(t){h("Failed to remove stale socket",t),process.exit(1)}let e=_.default.createServer(t=>{O.add(t);let o="";t.on("data",s=>{o+=s.toString();let n=o.split(`
9
+ `);o=n.pop()||"";for(let i of n)if(i.trim())try{let l=JSON.parse(i);K(t,l)}catch{h("Invalid message",i)}}),t.on("close",()=>{O.delete(t)}),t.on("error",s=>{h("Client error",s),O.delete(t)})});e.on("error",t=>{h("Server error",t),t.code==="EADDRINUSE"&&h("Socket already in use, exiting"),process.exit(1)}),e.listen(y,()=>{if(process.platform!=="win32")try{c.default.chmodSync(y,384)}catch{}});try{c.default.mkdirSync(u.default.dirname(v),{recursive:!0}),c.default.writeFileSync(v,String(process.pid),{mode:384})}catch{}let r=()=>{for(let[,t]of p)if(t.pty)try{t.pty.kill()}catch{}try{e.close()}catch{}if(process.platform!=="win32"&&c.default.existsSync(y))try{c.default.unlinkSync(y)}catch{}try{c.default.unlinkSync(v)}catch{}process.exit(0)};process.on("SIGTERM",r),process.on("SIGINT",r)}X();