9remote 0.1.57 → 0.1.58

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.
Files changed (2) hide show
  1. package/dist/cli.cjs +2 -2
  2. package/package.json +1 -1
package/dist/cli.cjs CHANGED
@@ -9,7 +9,7 @@ var zn=Object.create;var Dt=Object.defineProperty;var Zn=Object.getOwnPropertyDe
9
9
  `:`
10
10
  `)+t,e=o+1,o=r.indexOf(`
11
11
  `,e)}while(o!==-1);return i+=r.slice(e),i}var{stdout:Yt,stderr:Vt}=Ht,lt=Symbol("GENERATOR"),Te=Symbol("STYLER"),Ie=Symbol("IS_EMPTY"),Jt=["ansi","ansi","ansi256","ansi16m"],Ee=Object.create(null),pr=(r,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 t=Yt?Yt.level:0;r.level=n.level===void 0?t:n.level};var dr=r=>{let n=(...t)=>t.join(" ");return pr(n,r),Object.setPrototypeOf(n,Me.prototype),n};function Me(r){return dr(r)}Object.setPrototypeOf(Me.prototype,Function.prototype);for(let[r,n]of Object.entries(Z))Ee[r]={get(){let t=Qe(this,ft(n.open,n.close,this[Te]),this[Ie]);return Object.defineProperty(this,r,{value:t}),t}};Ee.visible={get(){let r=Qe(this,this[Te],!0);return Object.defineProperty(this,"visible",{value:r}),r}};var ut=(r,n,t,...o)=>r==="rgb"?n==="ansi16m"?Z[t].ansi16m(...o):n==="ansi256"?Z[t].ansi256(Z.rgbToAnsi256(...o)):Z[t].ansi(Z.rgbToAnsi(...o)):r==="hex"?ut("rgb",n,t,...Z.hexToRgb(...o)):Z[t][r](...o),hr=["rgb","hex","ansi256"];for(let r of hr){Ee[r]={get(){let{level:t}=this;return function(...o){let e=ft(ut(r,Jt[t],"color",...o),Z.color.close,this[Te]);return Qe(this,e,this[Ie])}}};let n="bg"+r[0].toUpperCase()+r.slice(1);Ee[n]={get(){let{level:t}=this;return function(...o){let e=ft(ut(r,Jt[t],"bgColor",...o),Z.bgColor.close,this[Te]);return Qe(this,e,this[Ie])}}}}var mr=Object.defineProperties(()=>{},{...Ee,level:{enumerable:!0,get(){return this[lt].level},set(r){this[lt].level=r}}}),ft=(r,n,t)=>{let o,e;return t===void 0?(o=r,e=n):(o=t.openAll+r,e=n+t.closeAll),{open:r,close:n,openAll:o,closeAll:e,parent:t}},Qe=(r,n,t)=>{let o=(...e)=>gr(o,e.length===1?""+e[0]:e.join(" "));return Object.setPrototypeOf(o,mr),o[lt]=r,o[Te]=n,o[Ie]=t,o},gr=(r,n)=>{if(r.level<=0||!n)return r[Ie]?"":n;let t=r[Te];if(t===void 0)return n;let{openAll:o,closeAll:e}=t;if(n.includes("\x1B"))for(;t!==void 0;)n=Wt(n,t.close,t.open),t=t.parent;let i=n.indexOf(`
12
- `);return i!==-1&&(n=Qt(n,e,o,i)),o+n+e};Object.defineProperties(Me.prototype,Ee);var yr=Me(),go=Me({level:Vt?Vt.level:0});var v=yr;var Mt=M(Tn(),1),ke=require("child_process"),ge=M(require("path"),1),Yn=require("url"),ot=M(require("fs"),1),Vn=M(require("os"),1);var bn=M(En(),1),vt=M(require("crypto"),1),{machineIdSync:kr}=bn.default;async function be(r=null){let n=r||process.env.MACHINE_ID_SALT||"9remote-salt";try{let t=kr();return vt.default.createHash("sha256").update(t+n).digest("hex").substring(0,16)}catch(t){return console.error("Error getting machine ID:",t),vt.default.randomUUID().replace(/-/g,"").substring(0,16)}}var _n=M(require("crypto"),1),Rr=process.env.API_KEY_SECRET||"9remote-api-key-secret";function Ar(){let r="abcdefghijklmnopqrstuvwxyz0123456789",n="";for(let t=0;t<4;t++)n+=r.charAt(Math.floor(Math.random()*r.length));return n}function Or(r,n){return _n.default.createHmac("sha256",Rr).update(r+n).digest("hex").slice(0,6)}function _e(r){let n=r.slice(0,8),t=Ar(),o=Or(n,t);return{key:`sk-${n}-${t}-${o}`,keyId:t}}var q=M(require("fs"),1),Ne=M(require("path"),1),xn=M(require("os"),1),$e=Ne.default.join(xn.default.homedir(),".9remote"),Tt=Ne.default.join($e,"state.json"),Et=Ne.default.join($e,"keys.json"),wt=Ne.default.join($e,"cmd.json");function bt(){q.default.existsSync($e)||q.default.mkdirSync($e,{recursive:!0})}function _t(r){try{bt(),q.default.writeFileSync(Tt,JSON.stringify(r,null,2))}catch(n){console.error("Error saving state:",n)}}function Sn(){try{q.default.existsSync(Tt)&&q.default.unlinkSync(Tt)}catch{}}function Be(){try{return bt(),q.default.existsSync(Et)?JSON.parse(q.default.readFileSync(Et,"utf8")):{machineId:null,key:null,name:"Default",createdAt:null}}catch{return{machineId:null,key:null,name:"Default",createdAt:null}}}function kn(){try{if(!q.default.existsSync(wt))return null;let r=JSON.parse(q.default.readFileSync(wt,"utf8"));return q.default.unlinkSync(wt),r.cmd}catch{return null}}function xe(r,n,t="Default"){try{bt();let o={machineId:r,key:n,name:t,createdAt:new Date().toISOString()};return q.default.writeFileSync(Et,JSON.stringify(o,null,2)),o}catch(o){return console.error("Error saving key:",o),null}}async function De(r,n){try{let t=await fetch(`${n}/api/temp-key/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:r,expiryMinutes:30})});if(!t.ok){let o=await t.json();throw new Error(o.error||"Failed to create temp key")}return await t.json()}catch(t){return console.error("Error creating temp key:",t),null}}var de=require("fs"),Rn=require("url"),An=require("child_process"),je=M(require("path"),1),xt=M(require("os"),1),Pr=je.default.dirname((0,Rn.fileURLToPath)(__importMetaUrl)),Q="9remote",On=`https://registry.npmjs.org/${Q}/latest`,Pn=3e3,Cr=8e3;function Cn(){return"0.1.57"}function In(r,n){let t=r.split(".").map(Number),o=n.split(".").map(Number);for(let e=0;e<3;e++){if(o[e]>t[e])return!0;if(o[e]<t[e])return!1}return!1}function Ir(){return process.env.CODESPACES==="true"||process.env.GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN?"GitHub Codespaces":(0,de.existsSync)("/.dockerenv")?"Docker":null}async function Mn(){try{let r=Cn();if(!r)return null;let n=await fetch(On,{signal:AbortSignal.timeout(Pn)});if(!n.ok)return null;let{version:t}=await n.json();return t&&In(r,t)?{current:r,latest:t}:null}catch{return null}}async function Ln(r=!1){if(r)return!1;let n=Cn();if(!n)return!1;let t=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],o=0,e=null,i=a=>{process.stdout.isTTY&&(process.stdout.write(`\r${t[0]} ${a}`),e=setInterval(()=>{process.stdout.write(`\r${t[o++%t.length]} ${a}`)},80))},s=()=>{e&&(clearInterval(e),e=null),process.stdout.isTTY&&process.stdout.write("\r\x1B[K")};return new Promise(a=>{let c=!1,l=f=>{c||(c=!0,s(),a(f))},u=setTimeout(()=>l(!1),Cr);i("Checking for updates..."),fetch(On,{signal:AbortSignal.timeout(Pn)}).then(f=>f.json()).then(f=>{if(c)return;clearTimeout(u);let d=f.version;if(!d||!In(n,d)){l(!1);return}s(),console.log(v.green(`\u2705 New version available: ${n} \u2192 ${d}`));let h=Ir();if(h){console.log(v.yellow(` \u26A0\uFE0F ${h} detected - manual update required`)),console.log(v.gray(` Run: npm install -g ${Q}@latest
12
+ `);return i!==-1&&(n=Qt(n,e,o,i)),o+n+e};Object.defineProperties(Me.prototype,Ee);var yr=Me(),go=Me({level:Vt?Vt.level:0});var v=yr;var Mt=M(Tn(),1),ke=require("child_process"),ge=M(require("path"),1),Yn=require("url"),ot=M(require("fs"),1),Vn=M(require("os"),1);var bn=M(En(),1),vt=M(require("crypto"),1),{machineIdSync:kr}=bn.default;async function be(r=null){let n=r||process.env.MACHINE_ID_SALT||"9remote-salt";try{let t=kr();return vt.default.createHash("sha256").update(t+n).digest("hex").substring(0,16)}catch(t){return console.error("Error getting machine ID:",t),vt.default.randomUUID().replace(/-/g,"").substring(0,16)}}var _n=M(require("crypto"),1),Rr=process.env.API_KEY_SECRET||"9remote-api-key-secret";function Ar(){let r="abcdefghijklmnopqrstuvwxyz0123456789",n="";for(let t=0;t<4;t++)n+=r.charAt(Math.floor(Math.random()*r.length));return n}function Or(r,n){return _n.default.createHmac("sha256",Rr).update(r+n).digest("hex").slice(0,6)}function _e(r){let n=r.slice(0,8),t=Ar(),o=Or(n,t);return{key:`sk-${n}-${t}-${o}`,keyId:t}}var q=M(require("fs"),1),Ne=M(require("path"),1),xn=M(require("os"),1),$e=Ne.default.join(xn.default.homedir(),".9remote"),Tt=Ne.default.join($e,"state.json"),Et=Ne.default.join($e,"keys.json"),wt=Ne.default.join($e,"cmd.json");function bt(){q.default.existsSync($e)||q.default.mkdirSync($e,{recursive:!0})}function _t(r){try{bt(),q.default.writeFileSync(Tt,JSON.stringify(r,null,2))}catch(n){console.error("Error saving state:",n)}}function Sn(){try{q.default.existsSync(Tt)&&q.default.unlinkSync(Tt)}catch{}}function Be(){try{return bt(),q.default.existsSync(Et)?JSON.parse(q.default.readFileSync(Et,"utf8")):{machineId:null,key:null,name:"Default",createdAt:null}}catch{return{machineId:null,key:null,name:"Default",createdAt:null}}}function kn(){try{if(!q.default.existsSync(wt))return null;let r=JSON.parse(q.default.readFileSync(wt,"utf8"));return q.default.unlinkSync(wt),r.cmd}catch{return null}}function xe(r,n,t="Default"){try{bt();let o={machineId:r,key:n,name:t,createdAt:new Date().toISOString()};return q.default.writeFileSync(Et,JSON.stringify(o,null,2)),o}catch(o){return console.error("Error saving key:",o),null}}async function De(r,n){try{let t=await fetch(`${n}/api/temp-key/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:r,expiryMinutes:30})});if(!t.ok){let o=await t.json();throw new Error(o.error||"Failed to create temp key")}return await t.json()}catch(t){return console.error("Error creating temp key:",t),null}}var de=require("fs"),Rn=require("url"),An=require("child_process"),je=M(require("path"),1),xt=M(require("os"),1),Pr=je.default.dirname((0,Rn.fileURLToPath)(__importMetaUrl)),Q="9remote",On=`https://registry.npmjs.org/${Q}/latest`,Pn=3e3,Cr=8e3;function Cn(){return"0.1.58"}function In(r,n){let t=r.split(".").map(Number),o=n.split(".").map(Number);for(let e=0;e<3;e++){if(o[e]>t[e])return!0;if(o[e]<t[e])return!1}return!1}function Ir(){return process.env.CODESPACES==="true"||process.env.GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN?"GitHub Codespaces":(0,de.existsSync)("/.dockerenv")?"Docker":null}async function Mn(){try{let r=Cn();if(!r)return null;let n=await fetch(On,{signal:AbortSignal.timeout(Pn)});if(!n.ok)return null;let{version:t}=await n.json();return t&&In(r,t)?{current:r,latest:t}:null}catch{return null}}async function Ln(r=!1){if(r)return!1;let n=Cn();if(!n)return!1;let t=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],o=0,e=null,i=a=>{process.stdout.isTTY&&(process.stdout.write(`\r${t[0]} ${a}`),e=setInterval(()=>{process.stdout.write(`\r${t[o++%t.length]} ${a}`)},80))},s=()=>{e&&(clearInterval(e),e=null),process.stdout.isTTY&&process.stdout.write("\r\x1B[K")};return new Promise(a=>{let c=!1,l=f=>{c||(c=!0,s(),a(f))},u=setTimeout(()=>l(!1),Cr);i("Checking for updates..."),fetch(On,{signal:AbortSignal.timeout(Pn)}).then(f=>f.json()).then(f=>{if(c)return;clearTimeout(u);let d=f.version;if(!d||!In(n,d)){l(!1);return}s(),console.log(v.green(`\u2705 New version available: ${n} \u2192 ${d}`));let h=Ir();if(h){console.log(v.yellow(` \u26A0\uFE0F ${h} detected - manual update required`)),console.log(v.gray(` Run: npm install -g ${Q}@latest
13
13
  `)),l(!1);return}console.log(v.yellow(`\u{1F504} Auto-updating...
14
14
  `));let g=process.argv.slice(2).filter(b=>b!=="--skip-update").join(" "),T=process.platform,k,_;if(T==="win32"){let b=`@echo off
15
15
  echo \u{1F4E5} Downloading update...
@@ -60,7 +60,7 @@ fi
60
60
  `),process.stdout.write(`${S.dim}${r}${S.reset}
61
61
 
62
62
  `),n.forEach((p,g)=>{let T=g===a?l?">":"\u2605":l?" ":"\u2606";console.log(g===a?` \x1B[7m${S.bold}${T} ${p.label}${S.reset}`:` ${T} ${p.label}`)})},f=()=>{if(c){if(c=!1,process.stdin.isTTY)try{process.stdin.setRawMode(!1)}catch{}process.stdin.removeListener("keypress",d),process.stdin.pause()}},d=(h,p)=>{!c||!p||(p.name==="up"?(a=(a-1+n.length)%n.length,u()):p.name==="down"?(a=(a+1)%n.length,u()):p.name==="return"?(f(),s(a)):p.name==="escape"?(f(),s(-1)):p.ctrl&&p.name==="c"&&(f(),i&&i(),process.exit(0)))};if(process.stdin.removeAllListeners("keypress"),Pt.default.emitKeypressEvents(process.stdin),process.stdin.isTTY)try{process.stdin.setRawMode(!0)}catch{s(-1);return}process.stdin.on("keypress",d),process.stdin.resume(),u(),e&&e(u)})}function Kn(r){return new Promise(n=>{if(process.stdin.isTTY)try{process.stdin.setRawMode(!1)}catch{}process.stdin.removeAllListeners("keypress");let t=Pt.default.createInterface({input:process.stdin,output:process.stdout});t.question(`${r} (y/N): `,o=>{t.close(),n(o.trim().toLowerCase()==="y")})})}function Gn(r,n){let t=null,o=!1,e=()=>{o||(t=Un.default.get(`http://localhost:${r}/api/ui/events`,i=>{let s="";i.on("data",a=>{s+=a.toString();let c=s.split(`
63
- `);s=c.pop();let l="";for(let u of c)if(u.startsWith("data: "))l=u.slice(6);else if(u===""&&l){try{let f=JSON.parse(l);n(f.type,f)}catch{}l=""}}),i.on("end",()=>{o||setTimeout(e,2e3)})}),t.on("error",()=>{o||setTimeout(e,2e3)}))};return e(),()=>{o=!0,t?.destroy()}}var Qr=process.argv.includes("--skip-update"),st=ge.default.dirname((0,Yn.fileURLToPath)(__importMetaUrl)),qo=ge.default.resolve(st,"../.."),Yr=ge.default.resolve(st,"../dist/server.cjs"),Hn=ge.default.resolve(st,"../index.js"),U="https://9remote.cc",B=2208,It=10,Wn=6e4,te=v.rgb(230,138,110),Jn=v.rgb(200,120,95);function Lt(){return"0.1.57"}function Vr(r,n="\u{1F4F1} Scan QR to connect:"){console.log(te(`
63
+ `);s=c.pop();let l="";for(let u of c)if(u.startsWith("data: "))l=u.slice(6);else if(u===""&&l){try{let f=JSON.parse(l);n(f.type,f)}catch{}l=""}}),i.on("end",()=>{o||setTimeout(e,2e3)})}),t.on("error",()=>{o||setTimeout(e,2e3)}))};return e(),()=>{o=!0,t?.destroy()}}var Qr=process.argv.includes("--skip-update"),st=ge.default.dirname((0,Yn.fileURLToPath)(__importMetaUrl)),qo=ge.default.resolve(st,"../.."),Yr=ge.default.resolve(st,"../dist/server.cjs"),Hn=ge.default.resolve(st,"../index.js"),U="https://9remote.cc",B=2208,It=10,Wn=6e4,te=v.rgb(230,138,110),Jn=v.rgb(200,120,95);function Lt(){return"0.1.58"}function Vr(r,n="\u{1F4F1} Scan QR to connect:"){console.log(te(`
64
64
  ${n}`)),Mt.default.generate(r,{small:!0,type:"terminal",margin:0},t=>{console.log(t.trim())})}function Jr(r){return new Promise(n=>{Mt.default.generate(r,{small:!0,type:"terminal",margin:0},t=>{n(Jn("\u{1F4F1} Scan QR to connect:")+`
65
65
  `+t.trim())})})}async function qn(r,n){let t=await De(r,U);if(!t){console.log(v.red("\u274C Failed to create temp key"));return}let o=`${U}/login?k=${t.tempKey}`,e=Math.min(44,process.stdout.columns||55);D({step:4,tunnelUrl:n,oneTimeKey:t.tempKey,oneTimeKeyExpiresAt:t.expiresAt,permanentKey:r,qrUrl:o,workerUrl:U}),Vr(o),console.log(v.gray(`
66
66
  QR will expire in 30 minutes (one-time use)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "9remote",
3
- "version": "0.1.57",
3
+ "version": "0.1.58",
4
4
  "type": "module",
5
5
  "description": "Remote terminal access from anywhere",
6
6
  "main": "index.js",