9remote 2.0.81 → 2.1.1

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,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  const __importMetaUrl = require('url').pathToFileURL(__filename).href;
3
- var T=Object.create;var L=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var z=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var H=(e,s,t,o)=>{if(s&&typeof s=="object"||typeof s=="function")for(let r of z(s))!j.call(e,r)&&r!==t&&L(e,r,{get:()=>s[r],enumerable:!(o=q(s,r))||o.enumerable});return e};var w=(e,s,t)=>(t=e!=null?T(F(e)):{},H(s||!e||!e.__esModule?L(t,"default",{value:e,enumerable:!0}):t,e));var N=w(require("net"),1),c=w(require("fs"),1),d=w(require("path"),1),x=w(require("os"),1),$=w(require("node-pty"),1);var _={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 k(e){if(process.platform==="win32"){let o=e?_.win32.find(n=>n.id===e):null;if(o)return o;let r=process.env.COMSPEC;return r?{id:"cmd",label:"Command Prompt",path:r,args:[]}:_.win32[0]}let s=process.env.SHELL||"/bin/bash",t=s.split("/").pop();return{id:t,label:t,path:s,args:["-l"]}}var I=d.default.join(x.default.homedir(),".9remote"),b=process.platform==="win32"?"\\\\.\\pipe\\9remote-pty":d.default.join(I,"pty-daemon.sock"),v=d.default.join(I,"pids","ptyDaemon.pid"),f=new Map,D=new Set,M=2*1024*1024,Z=256*1024,B=5*1024*1024;function A(e,s){if(!e?.length||s<=0)return"";let t=s,o=[];for(let r=e.length-1;r>=0&&t>0;r--){let n=e[r];n.length<=t?(o.push(n),t-=n.length):(o.push(n.slice(n.length-t)),t=0)}return o.reverse(),o.join("")}var U=["1049","1047","1000","1002","1003","1006","1015","1005"],J=/\x1b\[\?([0-9;]+)([hl])/g;function V(e,s){typeof s!="string"&&(s=String(s));for(let t of s.matchAll(J)){let o=t[2]==="h";for(let r of t[1].split(";"))e[o?"add":"delete"](`?${r}`)}}function W(e){let s=U.filter(t=>e.has(`?${t}`));return s.length?`\x1B[?${s.join(";")}h`:""}var P=d.default.join(I,"logs"),E=d.default.join(P,"daemon.log");try{c.default.existsSync(P)||c.default.mkdirSync(P,{recursive:!0})}catch{}function K(){try{if(c.default.existsSync(E)&&c.default.statSync(E).size>B){let t=c.default.readFileSync(E,"utf8").slice(-1024*1024);c.default.writeFileSync(E,t)}}catch{}}function m(e,s=null){K();let o=`[${new Date().toISOString()}] ERROR: ${e}`;s&&(o+=` - ${s.message||s}`),o+=`
4
- `;try{c.default.appendFileSync(E,o)}catch{}console.error(o.trim())}function X(){return process.env.CODESPACES==="true"?process.env.CODESPACE_VSCODE_FOLDER||"/workspaces":process.env.HOME||process.env.USERPROFILE||x.default.homedir()}function Y(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"),o=e.includes("bash"),r=null;if(t){r=c.default.mkdtempSync(d.default.join(x.default.tmpdir(),"9remote-zsh-"));let n=d.default.join(r,".zshrc"),i=s.HOME?d.default.join(s.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),s.ZDOTDIR=r}else if(o){let n=s.PROMPT_COMMAND||"";s.PROMPT_COMMAND=`printf "\\e]7;file://%s\\a" "\${HOSTNAME}\${PWD}"${n?`; ${n}`:""}`}return{env:s,zdotDir:r}}function R(e){let s=JSON.stringify(e)+`
6
- `;for(let t of D)try{t.write(s)}catch{}}function u(e,s){try{e.write(JSON.stringify(s)+`
7
- `)}catch{}}function Q(e,s,t=80,o=24,r=null,n=null){if(f.has(e))return{success:!1,error:"Session already exists"};let i=k(r);(!n||!c.default.existsSync(n))&&(n=X());try{let{env:l,zdotDir:O}=Y(i.path);l.NINE_REMOTE_SESSION_ID=e;let S=$.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 h=`function prompt { $p = $PWD.Path -replace '\\\\','/'; "$([char]27)]7;file://$([System.Net.Dns]::GetHostName())$p$([char]27)\\PS $($PWD.Path)> " }\r
8
- `;setTimeout(()=>{try{S.write(h)}catch{}},500)}let a={pty:S,buffer:[],modes:new Set,name:s,createdAt:Date.now(),cwd:n,shellId:i.id,shellLabel:i.label,zdotDir:O};return S.onData(h=>{a.buffer.push(h),V(a.modes,h);let y=h.match(/\x1b\]7;file:\/\/[^/]*([^\x07\x1b]*)/);if(y){let p;try{p=decodeURIComponent(y[1])}catch{p=y[1]}p&&p!==a.cwd&&(a.cwd=p,R({type:"cwdChange",sessionId:e,cwd:p}))}a.buffer.reduce((p,g)=>p+g.length,0)>M&&(a.buffer=[A(a.buffer,M)]),R({type:"output",sessionId:e,data:Buffer.from(h).toString("base64")})}),S.onExit(()=>{f.delete(e),a.zdotDir&&c.default.rm(a.zdotDir,{recursive:!0,force:!0},()=>{}),R({type:"sessionClosed",sessionId:e})}),f.set(e,a),{success:!0,sessionId:e,cwd:n,shellId:i.id,shellLabel:i.label}}catch(l){return m("Failed to create session",l),{success:!1,error:l.message}}}function ee(e,s){let{type:t,sessionId:o,...r}=s;switch(t){case"ping":u(e,{type:"pong",version:"25",requestId:r.requestId});break;case"listSessions":let n=Array.from(f.entries()).map(([p,g])=>({id:p,name:g.name,createdAt:g.createdAt,shellId:g.shellId,shellLabel:g.shellLabel,cwd:g.cwd}));u(e,{type:"sessionList",sessions:n,requestId:r.requestId});break;case"createSession":let i=Q(o||`session-${Date.now()}`,r.name,r.cols,r.rows,r.shellId,r.cwd);u(e,{type:"createResult",...i,requestId:r.requestId});break;case"joinSession":let l=f.get(o);if(!l){u(e,{type:"joinResult",success:!1,error:"Session not found",requestId:r.requestId});return}let O=W(l.modes);O&&u(e,{type:"output",sessionId:o,data:Buffer.from(O).toString("base64")});let S=A(l.buffer,Z);S&&u(e,{type:"output",sessionId:o,data:Buffer.from(S).toString("base64")}),u(e,{type:"joinResult",success:!0,name:l.name,cwd:l.cwd,shellId:l.shellId,shellLabel:l.shellLabel,requestId:r.requestId});break;case"input":let a=f.get(o);a?.pty&&a.pty.write(r.data);break;case"resize":let h=f.get(o);if(h?.pty)try{h.pty.resize(r.cols,r.rows)}catch{}break;case"deleteSession":let y=f.get(o);y?(y.pty&&y.pty.kill(),f.delete(o),R({type:"sessionClosed",sessionId:o}),u(e,{type:"deleteResult",success:!0,requestId:r.requestId})):u(e,{type:"deleteResult",success:!1,error:"Session not found",requestId:r.requestId});break;case"getCwd":let C=f.get(o);u(e,{type:"cwdResult",cwd:C?.cwd||null,requestId:r.requestId});break;default:m(`Unknown message type: ${t}`)}}function te(){if(!c.default.existsSync(I))try{c.default.mkdirSync(I,{recursive:!0})}catch(t){m("Failed to create socket directory",t),process.exit(1)}if(process.platform!=="win32"&&c.default.existsSync(b))try{c.default.unlinkSync(b)}catch(t){m("Failed to remove stale socket",t),process.exit(1)}let e=N.default.createServer(t=>{D.add(t);let o="";t.on("data",r=>{o+=r.toString();let n=o.split(`
9
- `);o=n.pop()||"";for(let i of n)if(i.trim())try{let l=JSON.parse(i);ee(t,l)}catch{m("Invalid message",i)}}),t.on("close",()=>{D.delete(t)}),t.on("error",r=>{m("Client error",r),D.delete(t)})});e.on("error",t=>{m("Server error",t),t.code==="EADDRINUSE"&&m("Socket already in use, exiting"),process.exit(1)}),e.listen(b,()=>{if(process.platform!=="win32")try{c.default.chmodSync(b,384)}catch{}});try{c.default.mkdirSync(d.default.dirname(v),{recursive:!0}),c.default.writeFileSync(v,String(process.pid),{mode:384})}catch{}let s=()=>{for(let[,t]of f)if(t.pty)try{t.pty.kill()}catch{}try{e.close()}catch{}if(process.platform!=="win32"&&c.default.existsSync(b))try{c.default.unlinkSync(b)}catch{}try{c.default.unlinkSync(v)}catch{}process.exit(0)};process.on("SIGTERM",s),process.on("SIGINT",s)}te();
3
+ var Z=Object.create;var k=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var J=Object.getPrototypeOf,V=Object.prototype.hasOwnProperty;var W=(e,s,t,n)=>{if(s&&typeof s=="object"||typeof s=="function")for(let r of U(s))!V.call(e,r)&&r!==t&&k(e,r,{get:()=>s[r],enumerable:!(n=G(s,r))||n.enumerable});return e};var O=(e,s,t)=>(t=e!=null?Z(J(e)):{},W(s||!e||!e.__esModule?k(t,"default",{value:e,enumerable:!0}):t,e));var F=O(require("net"),1),a=O(require("fs"),1),y=O(require("path"),1),_=O(require("os"),1),j=O(require("node-pty"),1);var L={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 z(e){if(process.platform==="win32"){let n=e?L.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:[]}:L.win32[0]}let s=process.env.SHELL||"/bin/bash",t=s.split("/").pop();return{id:t,label:t,path:s,args:["-l"]}}var D=y.default.join(_.default.homedir(),".9remote"),x=process.platform==="win32"?"\\\\.\\pipe\\9remote-pty":y.default.join(D,"pty-daemon.sock"),C=y.default.join(D,"pids","ptyDaemon.pid"),h=new Map,v=new Set,B=2*1024*1024,X=128*1024,Y=128*1024,Q=5*1024*1024;function H(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,l=[];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 w=Math.max(0,o-i),u=Math.min(t,f.length-w);l.push(f.subarray(w,w+u)),t-=u,i=m}let S=Buffer.concat(l),p=0,c=S.indexOf(10);return c>0&&c<S.length-1&&(p=c+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 N=y.default.join(D,"logs"),R=y.default.join(N,"daemon.log");try{a.default.existsSync(N)||a.default.mkdirSync(N,{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 E(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||_.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(y.default.join(_.default.tmpdir(),"9remote-zsh-"));let o=y.default.join(r,".zshrc"),i=s.HOME?y.default.join(s.HOME,".zshrc"):null,l='precmd() { print -Pn "\\e]7;file://%m${PWD}\\e\\\\" }\n';i&&a.default.existsSync(i)&&(l+=`[ -f "${i}" ] && source "${i}"
5
+ `),a.default.writeFileSync(o,l),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 M(e){let s=JSON.stringify(e)+`
6
+ `;for(let t of v)try{t.write(s)}catch{}}function d(e,s){try{e.write(JSON.stringify(s)+`
7
+ `)}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=z(r);(!o||!a.default.existsSync(o))&&(o=ie());try{let{env:l,zdotDir:S}=ce(i.path);l.NINE_REMOTE_SESSION_ID=e;let p=j.default.spawn(i.path,i.args,{name:"xterm-256color",cols:t,rows:n,cwd:o,env:l,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
8
+ `;setTimeout(()=>{try{p.write(f)}catch{}},500)}let c={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=()=>{c.flushScheduled=!1;let f=c.pending;f&&(c.pending=null,M({type:"output",sessionId:e,enc:"b64",data:Buffer.from(f).toString("base64")}))};return p.onData(f=>{c.buffer.push(Buffer.from(f,"utf-8")),re(c.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!==c.cwd&&(c.cwd=u,M({type:"cwdChange",sessionId:e,cwd:u}))}P(c.buffer)>B&&(c.buffer=[H(c.buffer,B)]),c.pending=c.pending===null?f:c.pending+f,c.flushScheduled||(c.flushScheduled=!0,setImmediate(b))}),p.onExit(()=>{h.delete(e),c.zdotDir&&a.default.rm(c.zdotDir,{recursive:!0,force:!0},()=>{}),M({type:"sessionClosed",sessionId:e})}),h.set(e,c),{success:!0,sessionId:e,cwd:o,shellId:i.id,shellLabel:i.label}}catch(l){return E("Failed to create session",l),{success:!1,error:l.message}}}function ae(e,s){let{type:t,sessionId:n,...r}=s;switch(t){case"ping":d(e,{type:"pong",version:"37",requestId:r.requestId});break;case"listSessions":let o=Array.from(h.entries()).map(([u,g])=>({id:u,name:g.name,createdAt:g.createdAt,shellId:g.shellId,shellLabel:g.shellLabel,cwd:g.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 l=h.get(n);if(!l){d(e,{type:"joinResult",success:!1,error:"Session not found",requestId:r.requestId});return}let S=ne(l.modes);S&&d(e,{type:"output",sessionId:n,enc:"b64",data:Buffer.from(S).toString("base64")});let p=H(l.buffer,X);p&&p.length&&d(e,{type:"output",sessionId:n,enc:"b64",data:p.toString("base64")});let c=P(l.buffer);d(e,{type:"joinResult",success:!0,name:l.name,cwd:l.cwd,shellId:l.shellId,shellLabel:l.shellLabel,total:c,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 g=P(u.buffer),T=Math.max(0,Math.min(r.have||0,g)),$=g-T,q=Math.min(Y,$),{prefix:I,trimmed:A}=q>0?ee(u.buffer,T,q):{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:g,remaining:Math.max(0,$-I.length-A)+A,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),M({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 w=h.get(n);d(e,{type:"cwdResult",cwd:w?.cwd||null,requestId:r.requestId});break;default:E(`Unknown message type: ${t}`)}}function fe(){if(!a.default.existsSync(D))try{a.default.mkdirSync(D,{recursive:!0})}catch(t){E("Failed to create socket directory",t),process.exit(1)}if(process.platform!=="win32"&&a.default.existsSync(x))try{a.default.unlinkSync(x)}catch(t){E("Failed to remove stale socket",t),process.exit(1)}let e=F.default.createServer(t=>{v.add(t);let n="";t.on("data",r=>{n+=r.toString();let o=n.split(`
9
+ `);n=o.pop()||"";for(let i of o)if(i.trim())try{let l=JSON.parse(i);ae(t,l)}catch{E("Invalid message",i)}}),t.on("close",()=>{v.delete(t)}),t.on("error",r=>{E("Client error",r),v.delete(t)})});e.on("error",t=>{E("Server error",t),t.code==="EADDRINUSE"&&E("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(y.default.dirname(C),{recursive:!0}),a.default.writeFileSync(C,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(C)}catch{}process.exit(0)};process.on("SIGTERM",s),process.on("SIGINT",s)}fe();