planx 19.134.1 → 19.134.2

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/main.js CHANGED
@@ -748,7 +748,7 @@ Domains=~${Hfe}
748
748
  </plist>
749
749
  `,QHi=`[Unit]
750
750
  Description=planx ROOT network daemon (TUN + smoltcp via NAPI, exposed over unix-socket tRPC)
751
- Documentation=https://github.com/nontangent/x_x_machina/tree/develop/projects/@planx.machina.at/network
751
+ Documentation=https://github.com/nontangent/x_x_machina/tree/develop/packages/@planx.machina.at/network
752
752
  After=network.target
753
753
 
754
754
  [Service]
@@ -771,7 +771,7 @@ StandardError=append:/var/log/planx-networkd.err.log
771
771
 
772
772
  [Install]
773
773
  WantedBy=multi-user.target
774
- `,VHi=typeof process.getuid=="function"?process.getuid.bind(process):void 0,Gfe={writeFile:(t,e)=>MHi(t,e),mkdir:t=>FHi(t,{recursive:!0}),exec:(t,e)=>jHi(t,e,{stdio:"inherit"}),log:t=>console.log(t),platform:process.platform,getuid:VHi,rm:t=>{try{LHi(t)}catch{}}}});import*as GW from"fs";function bR(t=process.platform){let e=t==="win32";return{socketPath:e?XHi:YHi,pidFile:e?eGi:JHi,logFile:e?tGi:ZHi}}function zW(t){typeof process.getuid=="function"&&process.getuid()!==0&&(console.error("[network] planx-networkd requires root privilege. Run with sudo:"),console.error(` sudo planx network ${t}`),process.exit(1))}function aGr(t){let e=qv(t);if(e===null){if(GW.existsSync(t))try{GW.unlinkSync(t)}catch{}return!1}if(bm(e))return!0;try{GW.unlinkSync(t)}catch{}return!1}function uGr(t,e){return N(this,void 0,void 0,function*(){var r;let n=(r=e.intervalMs)!==null&&r!==void 0?r:100,i=Date.now();for(;Date.now()-i<e.timeoutMs;){if(GW.existsSync(t))return!0;yield new Promise(o=>setTimeout(o,n))}return!1})}var YHi,JHi,ZHi,XHi,eGi,tGi,KW=g(()=>{we();xg();YHi="/var/run/planx-networkd.sock",JHi="/var/run/planx-networkd.pid",ZHi="/var/log/planx-networkd.log",XHi="\\\\.\\pipe\\planx-networkd",eGi="C:\\ProgramData\\planx\\planx-networkd.pid",tGi="C:\\ProgramData\\planx\\planx-networkd.log"});function rGi(){return N(this,void 0,void 0,function*(){yield oGr()})}function lGr(){return N(this,arguments,void 0,function*(t={}){var e;zW("install");let r=(e=t.installFn)!==null&&e!==void 0?e:rGi;try{yield r(),console.log("[network] install completed")}catch(n){let i=n instanceof Error?n.message:String(n);console.error(`[network] install failed: ${i}`),process.exit(1)}})}var cGr=g(()=>{we();sGr();KW()});var dGr={};yn(dGr,{commands:()=>nGi});var nGi,fGr=g(()=>{we();cGr();nGi=[{name:"",description:"Install planx-networkd as a system service",options:[],action:()=>N(void 0,void 0,void 0,function*(){yield lGr()})}]});import{execFile as iGi}from"node:child_process";import{promisify as oGi}from"node:util";function pGr(t,e,r,n){return N(this,void 0,void 0,function*(){var i;try{return jTe((yield r(t,e)).stdout)}catch(o){let s=o;return s.code==="ENOENT"||s.killed||s.signal?n(`[network] orphan detection degraded: ${t} unavailable (${String((i=s.code)!==null&&i!==void 0?i:s.signal)})`):typeof s.code=="number"&&s.code>1&&n(`[network] orphan detection degraded: ${t} exited with code ${s.code}`),[]}})}function qPe(){return N(this,arguments,void 0,function*(t={}){var e,r,n;if(((e=t.platform)!==null&&e!==void 0?e:process.platform)==="win32")return[];let i=(r=t.execFn)!==null&&r!==void 0?r:hGr,o=(n=t.warnFn)!==null&&n!==void 0?n:(a=>sGi.warn(a));return[...new Set([...yield pGr("pgrep",["-f","planx-networkd\\.(main\\.mjs|js)"],i,o),...yield pGr("lsof",["-t","-nP",`-iUDP:${aGi}`],i,o)])]})}function zfe(t){return N(this,arguments,void 0,function*(e,r={}){var n;let i=(n=r.execFn)!==null&&n!==void 0?n:hGr;try{return uGi.test((yield i("ps",["-p",String(e),"-o","command="])).stdout)}catch{return!1}})}var sGi,aGi,uGi,hGr,G1t=g(()=>{we();xg();kr();sGi=ct("network"),aGi=5354,uGi=/planx-networkd\.(main\.mjs|js)/,hGr=(t,e)=>N(void 0,void 0,void 0,function*(){let{stdout:r}=yield oGi(iGi)(t,e,{timeout:3e3});return{stdout:String(r)}})});import{spawn as lGi}from"node:child_process";import{createRequire as cGi}from"node:module";import*as eE from"fs";import{dirname as _Gr,resolve as mGr}from"path";function dGi(t={}){var e,r,n,i,o,s;let a=(e=t.exists)!==null&&e!==void 0?e:eE.existsSync,u=(n=(r=t.argv1)!==null&&r!==void 0?r:process.argv[1])!==null&&n!==void 0?n:"",l=(i=t.cwd)!==null&&i!==void 0?i:process.cwd(),c=(o=t.realpath)!==null&&o!==void 0?o:(m=>{try{return eE.realpathSync(m)}catch{return m}});if(u){let m=mGr(_Gr(c(u)),gGr);if(a(m))return m}let f=mGr(l,yGr);if(a(f))return f;let h=(s=t.requireResolve)!==null&&s!==void 0?s:(m=>cGi(import.meta.url).resolve(m));try{return h(vGr)}catch{}throw new Error(`planx-networkd entry not found (tried: same-dir ${gGr}, ${yGr}, package ${vGr})`)}function fGi(){return dGi()}function AGr(t){let e=_Gr(t);eE.existsSync(e)||eE.mkdirSync(e,{recursive:!0})}function UPe(){return N(this,arguments,void 0,function*(t={},e={}){var r,n,i,o,s,a;let u=bR(),l=(r=t.socket)!==null&&r!==void 0?r:u.socketPath,c=(n=t.pidFile)!==null&&n!==void 0?n:u.pidFile,f=(i=t.logFile)!==null&&i!==void 0?i:u.logFile;if(aGr(c)){console.log(`[network] planx-networkd is already running (pid file: ${c})`);return}for(let B of yield qPe(e))if(yield zfe(B,e)){console.error(`[network] orphan planx-networkd detected (pid: ${B}). Run: sudo planx network stop`),process.exit(1);return}((o=e.requireRootFn)!==null&&o!==void 0?o:zW)("start --background");let m=(s=e.resolveBinPath)!==null&&s!==void 0?s:fGi,A=(a=e.spawnFn)!==null&&a!==void 0?a:lGi,E;try{E=m()}catch(B){console.error(`[network] failed to resolve planx-networkd binary: ${B instanceof Error?B.message:String(B)}`),process.exit(1);return}let b=[E,`--socket=${l}`];if(t.foreground){let B={stdio:"inherit"},L=A(process.execPath,b,B);yield new Promise($=>L.on("exit",()=>$()));return}AGr(c),AGr(f);let S=eE.openSync(f,"a"),w={stdio:["ignore",S,S],detached:!0},C=A(process.execPath,b,w);if(C.unref(),C.pid&&eE.writeFileSync(c,String(C.pid)),!(yield uGr(l,{timeoutMs:5e3}))){console.error(`[network] timeout waiting for socket ${l}`),process.exit(1);return}console.log(`[network] planx-networkd started (pid: ${C.pid}, socket: ${l})`)})}var gGr,yGr,vGr,z1t=g(()=>{we();G1t();KW();gGr="planx-networkd.main.mjs",yGr="dist/projects/@planx.machina.at/network/bin/planx-networkd.js",vGr="@planx.machina.at/network/bin/planx-networkd"});var bGr={};yn(bGr,{commands:()=>pGi});var pGi,EGr=g(()=>{we();z1t();pGi=[{name:"",description:"Start planx-networkd (requires root)",options:[["-b, --background","Run in background (= detached, default)"],["-f, --foreground","Run in foreground (block until SIGTERM)"],["--socket <path>","Unix socket path override"],["--pid-file <path>","PID file path override"],["--log-file <path>","Log file path override"]],action:t=>N(void 0,void 0,void 0,function*(){yield UPe(t??{})})}]});function SGr(t){return N(this,arguments,void 0,function*(e,r={}){let n=yield kI(e,{killFn:r.killFn,termTimeoutMs:r.termTimeoutMs,killTimeoutMs:r.killTimeoutMs,pollMs:r.pollMs,onEscalate:i=>DGr.warn(`[network] SIGTERM ignored, escalating to SIGKILL (pid: ${i})`)});switch(n.outcome){case"already-dead":case"terminated":case"killed":return!0;case"refused":case"timeout":return!1;default:{let i=n.error;return DGr.error(`[network] cannot verify pid ${e}: ${i instanceof Error?i.message:String(i)}`),!1}}})}var DGr,wGr=g(()=>{we();xg();kr();DGr=ct("network")});import*as WW from"fs";function mGi(t,e,r){return N(this,void 0,void 0,function*(){let n=new Set;if(e.existsSync(t)){let i=parseInt(e.readFileSync(t,"utf-8").trim(),10);if(!i||isNaN(i)){console.warn("[network] pid file content invalid; removing");try{e.unlinkSync(t)}catch{}}else if(yield zfe(i,r))n.add(i);else{console.warn(`[network] pid file pid ${i} is not planx-networkd (dead or reused); removing pid file`);try{e.unlinkSync(t)}catch{}}}for(let i of yield qPe(r))n.has(i)||(yield zfe(i,r))&&(console.warn(`[network] orphan planx-networkd detected (pid: ${i}, pid file missing/stale)`),n.add(i));return[...n]})}function QPe(){return N(this,arguments,void 0,function*(t={},e={}){var r,n,i,o;let s=bR(),a=(r=t.socket)!==null&&r!==void 0?r:s.socketPath,u=(n=t.pidFile)!==null&&n!==void 0?n:s.pidFile,l=(i=e.fs)!==null&&i!==void 0?i:hGi,c=yield mGi(u,l,e);if(c.length===0){if(console.log("[network] planx-networkd is not running (no live networkd process)"),l.existsSync(a))try{l.unlinkSync(a)}catch{}return!0}((o=e.requireRootFn)!==null&&o!==void 0?o:zW)("stop");let h=!0;for(let m of c){let A=yield SGr(m,e);A?console.log(`[network] planx-networkd stopped (pid: ${m})`):console.error(`[network] planx-networkd (pid: ${m}) still alive; kill manually: sudo kill -9 ${m}`),h&&(h=A)}if(h){try{l.unlinkSync(u)}catch{}if(l.existsSync(a))try{l.unlinkSync(a)}catch{}}return h})}var hGi,K1t=g(()=>{we();G1t();wGr();KW();hGi={existsSync:WW.existsSync,readFileSync:(t,e)=>WW.readFileSync(t,e),unlinkSync:WW.unlinkSync}});var CGr={};yn(CGr,{commands:()=>gGi});var gGi,IGr=g(()=>{we();K1t();gGi=[{name:"",description:"Stop planx-networkd (requires root)",options:[["--socket <path>","Unix socket path override"],["--pid-file <path>","PID file path override"]],action:t=>N(void 0,void 0,void 0,function*(){(yield QPe(t??{}))||(process.exitCode=1)})}]});function TGr(){return N(this,arguments,void 0,function*(t={},e={}){return(yield QPe({socket:t.socket,pidFile:t.pidFile},{killFn:e.killFn,requireRootFn:e.requireRootFn,fs:e.fs,execFn:e.execFn,platform:e.platform,termTimeoutMs:e.termTimeoutMs,killTimeoutMs:e.killTimeoutMs,pollMs:e.pollMs}))?(yield UPe({socket:t.socket,pidFile:t.pidFile,logFile:t.logFile,foreground:t.foreground},{resolveBinPath:e.resolveBinPath,spawnFn:e.spawnFn,requireRootFn:e.requireRootFn,execFn:e.execFn,platform:e.platform}),!0):(console.error("[network] restart aborted: previous planx-networkd could not be verified dead."),console.error("[network] inspect: sudo lsof -nP -iUDP:5354 / pgrep -fl planx-networkd"),!1)})}var xGr=g(()=>{we();z1t();K1t()});var NGr={};yn(NGr,{commands:()=>yGi});var yGi,OGr=g(()=>{we();xGr();yGi=[{name:"",description:"Restart planx-networkd (= stop \u2192 start, requires root)",options:[["-f, --foreground","After restart, run in foreground (block until SIGTERM)"],["--socket <path>","Unix socket path override"],["--pid-file <path>","PID file path override"],["--log-file <path>","Log file path override"]],action:t=>N(void 0,void 0,void 0,function*(){(yield TGr(t??{}))||(process.exitCode=1)})}]});import{createRequire as vGi}from"node:module";import*as RGr from"fs";function AGi(){return vGi(import.meta.url)(PGr)}function _Gi(t){if(t<60)return`${t}s`;let e=Math.floor(t/60),r=t%60;return e<60?`${e}m ${r}s`:`${Math.floor(e/60)}h ${e%60}m`}function BGr(){return N(this,arguments,void 0,function*(t={},e={}){var r,n;let i=bR(),o=(r=t.socket)!==null&&r!==void 0?r:i.socketPath;if(!RGr.existsSync(o)){console.log("[network] Status: stopped"),console.log(`[network] Socket: ${o} (missing)`);return}let s=(n=e.loadModule)!==null&&n!==void 0?n:AGi,a;try{a=s()}catch(l){console.error(`[network] failed to load ${PGr}: ${l instanceof Error?l.message:String(l)}`),process.exit(1);return}let u=a.createNetworkdClient({socketPath:o});try{let l=yield u.health.query();console.log("[network] Status: running"),console.log(`[network] Socket: ${o}`),console.log(`[network] PID: ${l.pid}`),console.log(`[network] Version: ${l.version}`),console.log(`[network] Native: ${l.nativeVersion}`),console.log(`[network] Platform: ${l.platform}/${l.arch}`),console.log(`[network] Node: ${l.nodeVersion}`),console.log(`[network] Uptime: ${_Gi(l.uptime)}`),console.log(`[network] Started: ${l.startedAt}`),l.dns?console.log(`[network] DNS: tld=.${l.dns.tld} aliases=${l.dns.aliasCount} (port 5354/udp)`):console.log("[network] DNS: n/a (older networkd without DNS support)")}catch(l){console.error(`[network] health query failed: ${l instanceof Error?l.message:String(l)}`),process.exit(1)}})}var PGr,kGr=g(()=>{we();KW();PGr="@planx.machina.at/network"});var MGr={};yn(MGr,{commands:()=>bGi});var bGi,FGr=g(()=>{we();kGr();bGi=[{name:"",description:"Show planx-networkd status",options:[["--socket <path>","Unix socket path override"]],action:t=>N(void 0,void 0,void 0,function*(){yield BGr(t??{})})}]});import*as Ph from"fs";function SGi(t,e){if(!Ph.existsSync(t))return"";let n=Ph.readFileSync(t,"utf-8").split(`
774
+ `,VHi=typeof process.getuid=="function"?process.getuid.bind(process):void 0,Gfe={writeFile:(t,e)=>MHi(t,e),mkdir:t=>FHi(t,{recursive:!0}),exec:(t,e)=>jHi(t,e,{stdio:"inherit"}),log:t=>console.log(t),platform:process.platform,getuid:VHi,rm:t=>{try{LHi(t)}catch{}}}});import*as GW from"fs";function bR(t=process.platform){let e=t==="win32";return{socketPath:e?XHi:YHi,pidFile:e?eGi:JHi,logFile:e?tGi:ZHi}}function zW(t){typeof process.getuid=="function"&&process.getuid()!==0&&(console.error("[network] planx-networkd requires root privilege. Run with sudo:"),console.error(` sudo planx network ${t}`),process.exit(1))}function aGr(t){let e=qv(t);if(e===null){if(GW.existsSync(t))try{GW.unlinkSync(t)}catch{}return!1}if(bm(e))return!0;try{GW.unlinkSync(t)}catch{}return!1}function uGr(t,e){return N(this,void 0,void 0,function*(){var r;let n=(r=e.intervalMs)!==null&&r!==void 0?r:100,i=Date.now();for(;Date.now()-i<e.timeoutMs;){if(GW.existsSync(t))return!0;yield new Promise(o=>setTimeout(o,n))}return!1})}var YHi,JHi,ZHi,XHi,eGi,tGi,KW=g(()=>{we();xg();YHi="/var/run/planx-networkd.sock",JHi="/var/run/planx-networkd.pid",ZHi="/var/log/planx-networkd.log",XHi="\\\\.\\pipe\\planx-networkd",eGi="C:\\ProgramData\\planx\\planx-networkd.pid",tGi="C:\\ProgramData\\planx\\planx-networkd.log"});function rGi(){return N(this,void 0,void 0,function*(){yield oGr()})}function lGr(){return N(this,arguments,void 0,function*(t={}){var e;zW("install");let r=(e=t.installFn)!==null&&e!==void 0?e:rGi;try{yield r(),console.log("[network] install completed")}catch(n){let i=n instanceof Error?n.message:String(n);console.error(`[network] install failed: ${i}`),process.exit(1)}})}var cGr=g(()=>{we();sGr();KW()});var dGr={};yn(dGr,{commands:()=>nGi});var nGi,fGr=g(()=>{we();cGr();nGi=[{name:"",description:"Install planx-networkd as a system service",options:[],action:()=>N(void 0,void 0,void 0,function*(){yield lGr()})}]});import{execFile as iGi}from"node:child_process";import{promisify as oGi}from"node:util";function pGr(t,e,r,n){return N(this,void 0,void 0,function*(){var i;try{return jTe((yield r(t,e)).stdout)}catch(o){let s=o;return s.code==="ENOENT"||s.killed||s.signal?n(`[network] orphan detection degraded: ${t} unavailable (${String((i=s.code)!==null&&i!==void 0?i:s.signal)})`):typeof s.code=="number"&&s.code>1&&n(`[network] orphan detection degraded: ${t} exited with code ${s.code}`),[]}})}function qPe(){return N(this,arguments,void 0,function*(t={}){var e,r,n;if(((e=t.platform)!==null&&e!==void 0?e:process.platform)==="win32")return[];let i=(r=t.execFn)!==null&&r!==void 0?r:hGr,o=(n=t.warnFn)!==null&&n!==void 0?n:(a=>sGi.warn(a));return[...new Set([...yield pGr("pgrep",["-f","planx-networkd\\.(main\\.mjs|js)"],i,o),...yield pGr("lsof",["-t","-nP",`-iUDP:${aGi}`],i,o)])]})}function zfe(t){return N(this,arguments,void 0,function*(e,r={}){var n;let i=(n=r.execFn)!==null&&n!==void 0?n:hGr;try{return uGi.test((yield i("ps",["-p",String(e),"-o","command="])).stdout)}catch{return!1}})}var sGi,aGi,uGi,hGr,G1t=g(()=>{we();xg();kr();sGi=ct("network"),aGi=5354,uGi=/planx-networkd\.(main\.mjs|js)/,hGr=(t,e)=>N(void 0,void 0,void 0,function*(){let{stdout:r}=yield oGi(iGi)(t,e,{timeout:3e3});return{stdout:String(r)}})});import{spawn as lGi}from"node:child_process";import{createRequire as cGi}from"node:module";import*as eE from"fs";import{dirname as _Gr,resolve as mGr}from"path";function dGi(t={}){var e,r,n,i,o,s;let a=(e=t.exists)!==null&&e!==void 0?e:eE.existsSync,u=(n=(r=t.argv1)!==null&&r!==void 0?r:process.argv[1])!==null&&n!==void 0?n:"",l=(i=t.cwd)!==null&&i!==void 0?i:process.cwd(),c=(o=t.realpath)!==null&&o!==void 0?o:(m=>{try{return eE.realpathSync(m)}catch{return m}});if(u){let m=mGr(_Gr(c(u)),gGr);if(a(m))return m}let f=mGr(l,yGr);if(a(f))return f;let h=(s=t.requireResolve)!==null&&s!==void 0?s:(m=>cGi(import.meta.url).resolve(m));try{return h(vGr)}catch{}throw new Error(`planx-networkd entry not found (tried: same-dir ${gGr}, ${yGr}, package ${vGr})`)}function fGi(){return dGi()}function AGr(t){let e=_Gr(t);eE.existsSync(e)||eE.mkdirSync(e,{recursive:!0})}function UPe(){return N(this,arguments,void 0,function*(t={},e={}){var r,n,i,o,s,a;let u=bR(),l=(r=t.socket)!==null&&r!==void 0?r:u.socketPath,c=(n=t.pidFile)!==null&&n!==void 0?n:u.pidFile,f=(i=t.logFile)!==null&&i!==void 0?i:u.logFile;if(aGr(c)){console.log(`[network] planx-networkd is already running (pid file: ${c})`);return}for(let B of yield qPe(e))if(yield zfe(B,e)){console.error(`[network] orphan planx-networkd detected (pid: ${B}). Run: sudo planx network stop`),process.exit(1);return}((o=e.requireRootFn)!==null&&o!==void 0?o:zW)("start --background");let m=(s=e.resolveBinPath)!==null&&s!==void 0?s:fGi,A=(a=e.spawnFn)!==null&&a!==void 0?a:lGi,E;try{E=m()}catch(B){console.error(`[network] failed to resolve planx-networkd binary: ${B instanceof Error?B.message:String(B)}`),process.exit(1);return}let b=[E,`--socket=${l}`];if(t.foreground){let B={stdio:"inherit"},L=A(process.execPath,b,B);yield new Promise($=>L.on("exit",()=>$()));return}AGr(c),AGr(f);let S=eE.openSync(f,"a"),w={stdio:["ignore",S,S],detached:!0},C=A(process.execPath,b,w);if(C.unref(),C.pid&&eE.writeFileSync(c,String(C.pid)),!(yield uGr(l,{timeoutMs:5e3}))){console.error(`[network] timeout waiting for socket ${l}`),process.exit(1);return}console.log(`[network] planx-networkd started (pid: ${C.pid}, socket: ${l})`)})}var gGr,yGr,vGr,z1t=g(()=>{we();G1t();KW();gGr="planx-networkd.main.mjs",yGr="dist/packages/@planx.machina.at/network/bin/planx-networkd.js",vGr="@planx.machina.at/network/bin/planx-networkd"});var bGr={};yn(bGr,{commands:()=>pGi});var pGi,EGr=g(()=>{we();z1t();pGi=[{name:"",description:"Start planx-networkd (requires root)",options:[["-b, --background","Run in background (= detached, default)"],["-f, --foreground","Run in foreground (block until SIGTERM)"],["--socket <path>","Unix socket path override"],["--pid-file <path>","PID file path override"],["--log-file <path>","Log file path override"]],action:t=>N(void 0,void 0,void 0,function*(){yield UPe(t??{})})}]});function SGr(t){return N(this,arguments,void 0,function*(e,r={}){let n=yield kI(e,{killFn:r.killFn,termTimeoutMs:r.termTimeoutMs,killTimeoutMs:r.killTimeoutMs,pollMs:r.pollMs,onEscalate:i=>DGr.warn(`[network] SIGTERM ignored, escalating to SIGKILL (pid: ${i})`)});switch(n.outcome){case"already-dead":case"terminated":case"killed":return!0;case"refused":case"timeout":return!1;default:{let i=n.error;return DGr.error(`[network] cannot verify pid ${e}: ${i instanceof Error?i.message:String(i)}`),!1}}})}var DGr,wGr=g(()=>{we();xg();kr();DGr=ct("network")});import*as WW from"fs";function mGi(t,e,r){return N(this,void 0,void 0,function*(){let n=new Set;if(e.existsSync(t)){let i=parseInt(e.readFileSync(t,"utf-8").trim(),10);if(!i||isNaN(i)){console.warn("[network] pid file content invalid; removing");try{e.unlinkSync(t)}catch{}}else if(yield zfe(i,r))n.add(i);else{console.warn(`[network] pid file pid ${i} is not planx-networkd (dead or reused); removing pid file`);try{e.unlinkSync(t)}catch{}}}for(let i of yield qPe(r))n.has(i)||(yield zfe(i,r))&&(console.warn(`[network] orphan planx-networkd detected (pid: ${i}, pid file missing/stale)`),n.add(i));return[...n]})}function QPe(){return N(this,arguments,void 0,function*(t={},e={}){var r,n,i,o;let s=bR(),a=(r=t.socket)!==null&&r!==void 0?r:s.socketPath,u=(n=t.pidFile)!==null&&n!==void 0?n:s.pidFile,l=(i=e.fs)!==null&&i!==void 0?i:hGi,c=yield mGi(u,l,e);if(c.length===0){if(console.log("[network] planx-networkd is not running (no live networkd process)"),l.existsSync(a))try{l.unlinkSync(a)}catch{}return!0}((o=e.requireRootFn)!==null&&o!==void 0?o:zW)("stop");let h=!0;for(let m of c){let A=yield SGr(m,e);A?console.log(`[network] planx-networkd stopped (pid: ${m})`):console.error(`[network] planx-networkd (pid: ${m}) still alive; kill manually: sudo kill -9 ${m}`),h&&(h=A)}if(h){try{l.unlinkSync(u)}catch{}if(l.existsSync(a))try{l.unlinkSync(a)}catch{}}return h})}var hGi,K1t=g(()=>{we();G1t();wGr();KW();hGi={existsSync:WW.existsSync,readFileSync:(t,e)=>WW.readFileSync(t,e),unlinkSync:WW.unlinkSync}});var CGr={};yn(CGr,{commands:()=>gGi});var gGi,IGr=g(()=>{we();K1t();gGi=[{name:"",description:"Stop planx-networkd (requires root)",options:[["--socket <path>","Unix socket path override"],["--pid-file <path>","PID file path override"]],action:t=>N(void 0,void 0,void 0,function*(){(yield QPe(t??{}))||(process.exitCode=1)})}]});function TGr(){return N(this,arguments,void 0,function*(t={},e={}){return(yield QPe({socket:t.socket,pidFile:t.pidFile},{killFn:e.killFn,requireRootFn:e.requireRootFn,fs:e.fs,execFn:e.execFn,platform:e.platform,termTimeoutMs:e.termTimeoutMs,killTimeoutMs:e.killTimeoutMs,pollMs:e.pollMs}))?(yield UPe({socket:t.socket,pidFile:t.pidFile,logFile:t.logFile,foreground:t.foreground},{resolveBinPath:e.resolveBinPath,spawnFn:e.spawnFn,requireRootFn:e.requireRootFn,execFn:e.execFn,platform:e.platform}),!0):(console.error("[network] restart aborted: previous planx-networkd could not be verified dead."),console.error("[network] inspect: sudo lsof -nP -iUDP:5354 / pgrep -fl planx-networkd"),!1)})}var xGr=g(()=>{we();z1t();K1t()});var NGr={};yn(NGr,{commands:()=>yGi});var yGi,OGr=g(()=>{we();xGr();yGi=[{name:"",description:"Restart planx-networkd (= stop \u2192 start, requires root)",options:[["-f, --foreground","After restart, run in foreground (block until SIGTERM)"],["--socket <path>","Unix socket path override"],["--pid-file <path>","PID file path override"],["--log-file <path>","Log file path override"]],action:t=>N(void 0,void 0,void 0,function*(){(yield TGr(t??{}))||(process.exitCode=1)})}]});import{createRequire as vGi}from"node:module";import*as RGr from"fs";function AGi(){return vGi(import.meta.url)(PGr)}function _Gi(t){if(t<60)return`${t}s`;let e=Math.floor(t/60),r=t%60;return e<60?`${e}m ${r}s`:`${Math.floor(e/60)}h ${e%60}m`}function BGr(){return N(this,arguments,void 0,function*(t={},e={}){var r,n;let i=bR(),o=(r=t.socket)!==null&&r!==void 0?r:i.socketPath;if(!RGr.existsSync(o)){console.log("[network] Status: stopped"),console.log(`[network] Socket: ${o} (missing)`);return}let s=(n=e.loadModule)!==null&&n!==void 0?n:AGi,a;try{a=s()}catch(l){console.error(`[network] failed to load ${PGr}: ${l instanceof Error?l.message:String(l)}`),process.exit(1);return}let u=a.createNetworkdClient({socketPath:o});try{let l=yield u.health.query();console.log("[network] Status: running"),console.log(`[network] Socket: ${o}`),console.log(`[network] PID: ${l.pid}`),console.log(`[network] Version: ${l.version}`),console.log(`[network] Native: ${l.nativeVersion}`),console.log(`[network] Platform: ${l.platform}/${l.arch}`),console.log(`[network] Node: ${l.nodeVersion}`),console.log(`[network] Uptime: ${_Gi(l.uptime)}`),console.log(`[network] Started: ${l.startedAt}`),l.dns?console.log(`[network] DNS: tld=.${l.dns.tld} aliases=${l.dns.aliasCount} (port 5354/udp)`):console.log("[network] DNS: n/a (older networkd without DNS support)")}catch(l){console.error(`[network] health query failed: ${l instanceof Error?l.message:String(l)}`),process.exit(1)}})}var PGr,kGr=g(()=>{we();KW();PGr="@planx.machina.at/network"});var MGr={};yn(MGr,{commands:()=>bGi});var bGi,FGr=g(()=>{we();kGr();bGi=[{name:"",description:"Show planx-networkd status",options:[["--socket <path>","Unix socket path override"]],action:t=>N(void 0,void 0,void 0,function*(){yield BGr(t??{})})}]});import*as Ph from"fs";function SGi(t,e){if(!Ph.existsSync(t))return"";let n=Ph.readFileSync(t,"utf-8").split(`
775
775
  `);return n.slice(Math.max(0,n.length-e-1)).join(`
776
776
  `)}function wGi(t,e){return N(this,void 0,void 0,function*(){let r=Ph.existsSync(t)?Ph.statSync(t).size:0;for(;!e.aborted;){if(yield new Promise(i=>setTimeout(i,DGi)),!Ph.existsSync(t))continue;let n=Ph.statSync(t);if(n.size<r&&(r=0),n.size>r){let i=Ph.openSync(t,"r"),o=Buffer.alloc(n.size-r);Ph.readSync(i,o,0,o.length,r),Ph.closeSync(i),process.stdout.write(o.toString("utf-8")),r=n.size}}})}function LGr(){return N(this,arguments,void 0,function*(t={},e={}){var r,n,i;let o=bR(),s=(r=t.logFile)!==null&&r!==void 0?r:o.logFile,a=(n=t.lines)!==null&&n!==void 0?n:EGi;if(!Ph.existsSync(s))console.error(`[network] log file not found: ${s}`),t.follow||process.exit(1);else{let c=SGi(s,a);c&&process.stdout.write(c)}if(!t.follow)return;let u=(i=e.abortController)!==null&&i!==void 0?i:new AbortController,l=()=>u.abort();process.once("SIGINT",l),process.once("SIGTERM",l);try{yield wGi(s,u.signal)}finally{process.off("SIGINT",l),process.off("SIGTERM",l)}})}var EGi,DGi,jGr=g(()=>{we();KW();EGi=100,DGi=500});var $Gr={};yn($Gr,{commands:()=>CGi});var CGi,qGr=g(()=>{we();jGr();CGi=[{name:"",description:"Tail planx-networkd log file",options:[["-f, --follow","Continue streaming log output (tail -f)"],["-n, --lines <count>","Number of last lines to print (default: 100)"],["--log-file <path>","Log file path override"]],action:t=>N(void 0,void 0,void 0,function*(){yield LGr(t??{})})}]});var UGr={};yn(UGr,{commands:()=>IGi});var IGi,QGr=g(()=>{IGi=[{name:"install",description:"Install planx-networkd as a system service (launchd / systemd)",loadChildren:()=>Promise.resolve().then(()=>(fGr(),dGr)).then(t=>t.commands)},{name:"start",description:"Start planx-networkd (requires root)",loadChildren:()=>Promise.resolve().then(()=>(EGr(),bGr)).then(t=>t.commands)},{name:"stop",description:"Stop planx-networkd (requires root)",loadChildren:()=>Promise.resolve().then(()=>(IGr(),CGr)).then(t=>t.commands)},{name:"restart",description:"Restart planx-networkd (= stop \u2192 start, requires root)",loadChildren:()=>Promise.resolve().then(()=>(OGr(),NGr)).then(t=>t.commands)},{name:"status",description:"Show planx-networkd status (health query over unix socket)",loadChildren:()=>Promise.resolve().then(()=>(FGr(),MGr)).then(t=>t.commands)},{name:"logs",description:"Tail planx-networkd log file",loadChildren:()=>Promise.resolve().then(()=>(qGr(),$Gr)).then(t=>t.commands)}]});var VGr={};yn(VGr,{commands:()=>xGi});function TGi(t){let e=t.split(":");if(e.length!==2)throw new Error(`Invalid port specification: ${t}. Expected format: <local-port>:<remote-port>`);let r=parseInt(e[0],10),n=parseInt(e[1],10);if(isNaN(r)||isNaN(n))throw new Error(`Invalid port numbers in: ${t}`);if(r<1||r>65535||n<1||n>65535)throw new Error("Port numbers must be between 1 and 65535");return{localPort:r,remotePort:n}}var xGi,HGr=g(()=>{we();Re();Mn();Jl();A7();Jl();xGi=[{name:"",description:"Forward a remote port to local machine via WebRTC",arguments:[["<port-spec>","Port specification in format <local-port>:<remote-port>"]],options:[["-s, --server-id <id>","Session server ID or name",void 0],["-b, --bind <address>","Local address to bind (default: 127.0.0.1)",void 0,"127.0.0.1"]],action:(t,e)=>N(void 0,void 0,void 0,function*(){let r=Z(Xb),n=Z(No),i=Z(io);yield n.initialize(),i.initialize();try{let{localPort:o,remotePort:s}=TGi(t),a=e.serverId||process.env.PLANX_SERVER_ID;a||(console.error("Server ID is required. Use --server-id or set PLANX_SERVER_ID"),process.exit(1)),console.log(`Starting port forward: localhost:${o} -> remote:${s}`);let u=yield r.start(a,{localPort:o,remotePort:s,bind:e.bind});console.log(`Port forward active: ${u.bind}:${u.localPort} -> ${u.remoteHost}:${u.remotePort}`),console.log("Press Ctrl+C to stop"),yield new Promise(l=>{process.on("SIGINT",()=>{console.log(`
777
777
  Stopping port forward...`),u.stop(),l()})})}catch(o){o instanceof ROe?(console.error(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "planx",
3
- "version": "19.134.1",
3
+ "version": "19.134.2",
4
4
  "description": "planx — Angular DI ベースの machina ターミナルマルチプレクサ / ピアセッション管理 CLI",
5
5
  "type": "module",
6
6
  "repository": {
@@ -34,11 +34,11 @@
34
34
  "ws": "8.18.3"
35
35
  },
36
36
  "optionalDependencies": {
37
- "@planx.machina.at/tunnel-darwin-arm64": "19.134.1",
38
- "@planx.machina.at/tunnel-darwin-x64": "19.134.1",
39
- "@planx.machina.at/tunnel-linux-x64-gnu": "19.134.1",
40
- "@planx.machina.at/tunnel-linux-arm64-gnu": "19.134.1",
41
- "@planx.machina.at/tunnel-linux-x64-musl": "19.134.1"
37
+ "@planx.machina.at/tunnel-darwin-arm64": "19.134.2",
38
+ "@planx.machina.at/tunnel-darwin-x64": "19.134.2",
39
+ "@planx.machina.at/tunnel-linux-x64-gnu": "19.134.2",
40
+ "@planx.machina.at/tunnel-linux-arm64-gnu": "19.134.2",
41
+ "@planx.machina.at/tunnel-linux-x64-musl": "19.134.2"
42
42
  },
43
43
  "publishConfig": {
44
44
  "access": "public"
@@ -46,7 +46,7 @@ Domains=~${ht}
46
46
  </plist>
47
47
  `,Os=`[Unit]
48
48
  Description=planx ROOT network daemon (TUN + smoltcp via NAPI, exposed over unix-socket tRPC)
49
- Documentation=https://github.com/nontangent/x_x_machina/tree/develop/projects/@planx.machina.at/network
49
+ Documentation=https://github.com/nontangent/x_x_machina/tree/develop/packages/@planx.machina.at/network
50
50
  After=network.target
51
51
 
52
52
  [Service]
package/session.main.mjs CHANGED
@@ -474,7 +474,7 @@ Domains=~${lee}
474
474
  </plist>
475
475
  `,vEi=`[Unit]
476
476
  Description=planx ROOT network daemon (TUN + smoltcp via NAPI, exposed over unix-socket tRPC)
477
- Documentation=https://github.com/nontangent/x_x_machina/tree/develop/projects/@planx.machina.at/network
477
+ Documentation=https://github.com/nontangent/x_x_machina/tree/develop/packages/@planx.machina.at/network
478
478
  After=network.target
479
479
 
480
480
  [Service]
@@ -497,7 +497,7 @@ StandardError=append:/var/log/planx-networkd.err.log
497
497
 
498
498
  [Install]
499
499
  WantedBy=multi-user.target
500
- `,yEi=typeof process.getuid=="function"?process.getuid.bind(process):void 0,uee={writeFile:(t,e)=>uEi(t,e),mkdir:t=>dEi(t,{recursive:!0}),exec:(t,e)=>pEi(t,e,{stdio:"inherit"}),log:t=>console.log(t),platform:process.platform,getuid:yEi,rm:t=>{try{fEi(t)}catch{}}}});import*as wj from"fs";function RA(t=process.platform){let e=t==="win32";return{socketPath:e?CEi:IEi,pidFile:e?AEi:TEi,logFile:e?OEi:xEi}}function Sj(t){typeof process.getuid=="function"&&process.getuid()!==0&&(console.error("[network] planx-networkd requires root privilege. Run with sudo:"),console.error(` sudo planx network ${t}`),process.exit(1))}function JCr(t){let e=Fh(t);if(e===null){if(wj.existsSync(t))try{wj.unlinkSync(t)}catch{}return!1}if(fd(e))return!0;try{wj.unlinkSync(t)}catch{}return!1}function ZCr(t,e){return I(this,void 0,void 0,function*(){var r;let n=(r=e.intervalMs)!==null&&r!==void 0?r:100,i=Date.now();for(;Date.now()-i<e.timeoutMs;){if(wj.existsSync(t))return!0;yield new Promise(s=>setTimeout(s,n))}return!1})}var IEi,TEi,xEi,CEi,AEi,OEi,Ej=p(()=>{ce();lf();IEi="/var/run/planx-networkd.sock",TEi="/var/run/planx-networkd.pid",xEi="/var/log/planx-networkd.log",CEi="\\\\.\\pipe\\planx-networkd",AEi="C:\\ProgramData\\planx\\planx-networkd.pid",OEi="C:\\ProgramData\\planx\\planx-networkd.log"});function PEi(){return I(this,void 0,void 0,function*(){yield YCr()})}function XCr(){return I(this,arguments,void 0,function*(t={}){var e;Sj("install");let r=(e=t.installFn)!==null&&e!==void 0?e:PEi;try{yield r(),console.log("[network] install completed")}catch(n){let i=n instanceof Error?n.message:String(n);console.error(`[network] install failed: ${i}`),process.exit(1)}})}var eAr=p(()=>{ce();QCr();Ej()});var tAr={};fr(tAr,{commands:()=>DEi});var DEi,rAr=p(()=>{ce();eAr();DEi=[{name:"",description:"Install planx-networkd as a system service",options:[],action:()=>I(void 0,void 0,void 0,function*(){yield XCr()})}]});import{execFile as NEi}from"node:child_process";import{promisify as kEi}from"node:util";function nAr(t,e,r,n){return I(this,void 0,void 0,function*(){var i;try{return Rge((yield r(t,e)).stdout)}catch(s){let o=s;return o.code==="ENOENT"||o.killed||o.signal?n(`[network] orphan detection degraded: ${t} unavailable (${String((i=o.code)!==null&&i!==void 0?i:o.signal)})`):typeof o.code=="number"&&o.code>1&&n(`[network] orphan detection degraded: ${t} exited with code ${o.code}`),[]}})}function $2e(){return I(this,arguments,void 0,function*(t={}){var e,r,n;if(((e=t.platform)!==null&&e!==void 0?e:process.platform)==="win32")return[];let i=(r=t.execFn)!==null&&r!==void 0?r:iAr,s=(n=t.warnFn)!==null&&n!==void 0?n:(a=>REi.warn(a));return[...new Set([...yield nAr("pgrep",["-f","planx-networkd\\.(main\\.mjs|js)"],i,s),...yield nAr("lsof",["-t","-nP",`-iUDP:${MEi}`],i,s)])]})}function dee(t){return I(this,arguments,void 0,function*(e,r={}){var n;let i=(n=r.execFn)!==null&&n!==void 0?n:iAr;try{return LEi.test((yield i("ps",["-p",String(e),"-o","command="])).stdout)}catch{return!1}})}var REi,MEi,LEi,iAr,Ort=p(()=>{ce();lf();Mt();REi=qe("network"),MEi=5354,LEi=/planx-networkd\.(main\.mjs|js)/,iAr=(t,e)=>I(void 0,void 0,void 0,function*(){let{stdout:r}=yield kEi(NEi)(t,e,{timeout:3e3});return{stdout:String(r)}})});import{spawn as $Ei}from"node:child_process";import{createRequire as FEi}from"node:module";import*as Ov from"fs";import{dirname as uAr,resolve as sAr}from"path";function jEi(t={}){var e,r,n,i,s,o;let a=(e=t.exists)!==null&&e!==void 0?e:Ov.existsSync,c=(n=(r=t.argv1)!==null&&r!==void 0?r:process.argv[1])!==null&&n!==void 0?n:"",l=(i=t.cwd)!==null&&i!==void 0?i:process.cwd(),u=(s=t.realpath)!==null&&s!==void 0?s:(h=>{try{return Ov.realpathSync(h)}catch{return h}});if(c){let h=sAr(uAr(u(c)),oAr);if(a(h))return h}let d=sAr(l,aAr);if(a(d))return d;let f=(o=t.requireResolve)!==null&&o!==void 0?o:(h=>FEi(import.meta.url).resolve(h));try{return f(cAr)}catch{}throw new Error(`planx-networkd entry not found (tried: same-dir ${oAr}, ${aAr}, package ${cAr})`)}function qEi(){return jEi()}function lAr(t){let e=uAr(t);Ov.existsSync(e)||Ov.mkdirSync(e,{recursive:!0})}function F2e(){return I(this,arguments,void 0,function*(t={},e={}){var r,n,i,s,o,a;let c=RA(),l=(r=t.socket)!==null&&r!==void 0?r:c.socketPath,u=(n=t.pidFile)!==null&&n!==void 0?n:c.pidFile,d=(i=t.logFile)!==null&&i!==void 0?i:c.logFile;if(JCr(u)){console.log(`[network] planx-networkd is already running (pid file: ${u})`);return}for(let x of yield $2e(e))if(yield dee(x,e)){console.error(`[network] orphan planx-networkd detected (pid: ${x}). Run: sudo planx network stop`),process.exit(1);return}((s=e.requireRootFn)!==null&&s!==void 0?s:Sj)("start --background");let h=(o=e.resolveBinPath)!==null&&o!==void 0?o:qEi,m=(a=e.spawnFn)!==null&&a!==void 0?a:$Ei,y;try{y=h()}catch(x){console.error(`[network] failed to resolve planx-networkd binary: ${x instanceof Error?x.message:String(x)}`),process.exit(1);return}let g=[y,`--socket=${l}`];if(t.foreground){let x={stdio:"inherit"},A=m(process.execPath,g,x);yield new Promise(O=>A.on("exit",()=>O()));return}lAr(u),lAr(d);let _=Ov.openSync(d,"a"),b={stdio:["ignore",_,_],detached:!0},w=m(process.execPath,g,b);if(w.unref(),w.pid&&Ov.writeFileSync(u,String(w.pid)),!(yield ZCr(l,{timeoutMs:5e3}))){console.error(`[network] timeout waiting for socket ${l}`),process.exit(1);return}console.log(`[network] planx-networkd started (pid: ${w.pid}, socket: ${l})`)})}var oAr,aAr,cAr,Prt=p(()=>{ce();Ort();Ej();oAr="planx-networkd.main.mjs",aAr="dist/projects/@planx.machina.at/network/bin/planx-networkd.js",cAr="@planx.machina.at/network/bin/planx-networkd"});var dAr={};fr(dAr,{commands:()=>BEi});var BEi,fAr=p(()=>{ce();Prt();BEi=[{name:"",description:"Start planx-networkd (requires root)",options:[["-b, --background","Run in background (= detached, default)"],["-f, --foreground","Run in foreground (block until SIGTERM)"],["--socket <path>","Unix socket path override"],["--pid-file <path>","PID file path override"],["--log-file <path>","Log file path override"]],action:t=>I(void 0,void 0,void 0,function*(){yield F2e(t??{})})}]});function hAr(t){return I(this,arguments,void 0,function*(e,r={}){let n=yield Hw(e,{killFn:r.killFn,termTimeoutMs:r.termTimeoutMs,killTimeoutMs:r.killTimeoutMs,pollMs:r.pollMs,onEscalate:i=>pAr.warn(`[network] SIGTERM ignored, escalating to SIGKILL (pid: ${i})`)});switch(n.outcome){case"already-dead":case"terminated":case"killed":return!0;case"refused":case"timeout":return!1;default:{let i=n.error;return pAr.error(`[network] cannot verify pid ${e}: ${i instanceof Error?i.message:String(i)}`),!1}}})}var pAr,mAr=p(()=>{ce();lf();Mt();pAr=qe("network")});import*as Ij from"fs";function UEi(t,e,r){return I(this,void 0,void 0,function*(){let n=new Set;if(e.existsSync(t)){let i=parseInt(e.readFileSync(t,"utf-8").trim(),10);if(!i||isNaN(i)){console.warn("[network] pid file content invalid; removing");try{e.unlinkSync(t)}catch{}}else if(yield dee(i,r))n.add(i);else{console.warn(`[network] pid file pid ${i} is not planx-networkd (dead or reused); removing pid file`);try{e.unlinkSync(t)}catch{}}}for(let i of yield $2e(r))n.has(i)||(yield dee(i,r))&&(console.warn(`[network] orphan planx-networkd detected (pid: ${i}, pid file missing/stale)`),n.add(i));return[...n]})}function j2e(){return I(this,arguments,void 0,function*(t={},e={}){var r,n,i,s;let o=RA(),a=(r=t.socket)!==null&&r!==void 0?r:o.socketPath,c=(n=t.pidFile)!==null&&n!==void 0?n:o.pidFile,l=(i=e.fs)!==null&&i!==void 0?i:VEi,u=yield UEi(c,l,e);if(u.length===0){if(console.log("[network] planx-networkd is not running (no live networkd process)"),l.existsSync(a))try{l.unlinkSync(a)}catch{}return!0}((s=e.requireRootFn)!==null&&s!==void 0?s:Sj)("stop");let f=!0;for(let h of u){let m=yield hAr(h,e);m?console.log(`[network] planx-networkd stopped (pid: ${h})`):console.error(`[network] planx-networkd (pid: ${h}) still alive; kill manually: sudo kill -9 ${h}`),f&&(f=m)}if(f){try{l.unlinkSync(c)}catch{}if(l.existsSync(a))try{l.unlinkSync(a)}catch{}}return f})}var VEi,Drt=p(()=>{ce();Ort();mAr();Ej();VEi={existsSync:Ij.existsSync,readFileSync:(t,e)=>Ij.readFileSync(t,e),unlinkSync:Ij.unlinkSync}});var gAr={};fr(gAr,{commands:()=>HEi});var HEi,vAr=p(()=>{ce();Drt();HEi=[{name:"",description:"Stop planx-networkd (requires root)",options:[["--socket <path>","Unix socket path override"],["--pid-file <path>","PID file path override"]],action:t=>I(void 0,void 0,void 0,function*(){(yield j2e(t??{}))||(process.exitCode=1)})}]});function yAr(){return I(this,arguments,void 0,function*(t={},e={}){return(yield j2e({socket:t.socket,pidFile:t.pidFile},{killFn:e.killFn,requireRootFn:e.requireRootFn,fs:e.fs,execFn:e.execFn,platform:e.platform,termTimeoutMs:e.termTimeoutMs,killTimeoutMs:e.killTimeoutMs,pollMs:e.pollMs}))?(yield F2e({socket:t.socket,pidFile:t.pidFile,logFile:t.logFile,foreground:t.foreground},{resolveBinPath:e.resolveBinPath,spawnFn:e.spawnFn,requireRootFn:e.requireRootFn,execFn:e.execFn,platform:e.platform}),!0):(console.error("[network] restart aborted: previous planx-networkd could not be verified dead."),console.error("[network] inspect: sudo lsof -nP -iUDP:5354 / pgrep -fl planx-networkd"),!1)})}var _Ar=p(()=>{ce();Prt();Drt()});var bAr={};fr(bAr,{commands:()=>WEi});var WEi,wAr=p(()=>{ce();_Ar();WEi=[{name:"",description:"Restart planx-networkd (= stop \u2192 start, requires root)",options:[["-f, --foreground","After restart, run in foreground (block until SIGTERM)"],["--socket <path>","Unix socket path override"],["--pid-file <path>","PID file path override"],["--log-file <path>","Log file path override"]],action:t=>I(void 0,void 0,void 0,function*(){(yield yAr(t??{}))||(process.exitCode=1)})}]});import{createRequire as GEi}from"node:module";import*as SAr from"fs";function zEi(){return GEi(import.meta.url)(EAr)}function KEi(t){if(t<60)return`${t}s`;let e=Math.floor(t/60),r=t%60;return e<60?`${e}m ${r}s`:`${Math.floor(e/60)}h ${e%60}m`}function IAr(){return I(this,arguments,void 0,function*(t={},e={}){var r,n;let i=RA(),s=(r=t.socket)!==null&&r!==void 0?r:i.socketPath;if(!SAr.existsSync(s)){console.log("[network] Status: stopped"),console.log(`[network] Socket: ${s} (missing)`);return}let o=(n=e.loadModule)!==null&&n!==void 0?n:zEi,a;try{a=o()}catch(l){console.error(`[network] failed to load ${EAr}: ${l instanceof Error?l.message:String(l)}`),process.exit(1);return}let c=a.createNetworkdClient({socketPath:s});try{let l=yield c.health.query();console.log("[network] Status: running"),console.log(`[network] Socket: ${s}`),console.log(`[network] PID: ${l.pid}`),console.log(`[network] Version: ${l.version}`),console.log(`[network] Native: ${l.nativeVersion}`),console.log(`[network] Platform: ${l.platform}/${l.arch}`),console.log(`[network] Node: ${l.nodeVersion}`),console.log(`[network] Uptime: ${KEi(l.uptime)}`),console.log(`[network] Started: ${l.startedAt}`),l.dns?console.log(`[network] DNS: tld=.${l.dns.tld} aliases=${l.dns.aliasCount} (port 5354/udp)`):console.log("[network] DNS: n/a (older networkd without DNS support)")}catch(l){console.error(`[network] health query failed: ${l instanceof Error?l.message:String(l)}`),process.exit(1)}})}var EAr,TAr=p(()=>{ce();Ej();EAr="@planx.machina.at/network"});var xAr={};fr(xAr,{commands:()=>YEi});var YEi,CAr=p(()=>{ce();TAr();YEi=[{name:"",description:"Show planx-networkd status",options:[["--socket <path>","Unix socket path override"]],action:t=>I(void 0,void 0,void 0,function*(){yield IAr(t??{})})}]});import*as Lu from"fs";function ZEi(t,e){if(!Lu.existsSync(t))return"";let n=Lu.readFileSync(t,"utf-8").split(`
500
+ `,yEi=typeof process.getuid=="function"?process.getuid.bind(process):void 0,uee={writeFile:(t,e)=>uEi(t,e),mkdir:t=>dEi(t,{recursive:!0}),exec:(t,e)=>pEi(t,e,{stdio:"inherit"}),log:t=>console.log(t),platform:process.platform,getuid:yEi,rm:t=>{try{fEi(t)}catch{}}}});import*as wj from"fs";function RA(t=process.platform){let e=t==="win32";return{socketPath:e?CEi:IEi,pidFile:e?AEi:TEi,logFile:e?OEi:xEi}}function Sj(t){typeof process.getuid=="function"&&process.getuid()!==0&&(console.error("[network] planx-networkd requires root privilege. Run with sudo:"),console.error(` sudo planx network ${t}`),process.exit(1))}function JCr(t){let e=Fh(t);if(e===null){if(wj.existsSync(t))try{wj.unlinkSync(t)}catch{}return!1}if(fd(e))return!0;try{wj.unlinkSync(t)}catch{}return!1}function ZCr(t,e){return I(this,void 0,void 0,function*(){var r;let n=(r=e.intervalMs)!==null&&r!==void 0?r:100,i=Date.now();for(;Date.now()-i<e.timeoutMs;){if(wj.existsSync(t))return!0;yield new Promise(s=>setTimeout(s,n))}return!1})}var IEi,TEi,xEi,CEi,AEi,OEi,Ej=p(()=>{ce();lf();IEi="/var/run/planx-networkd.sock",TEi="/var/run/planx-networkd.pid",xEi="/var/log/planx-networkd.log",CEi="\\\\.\\pipe\\planx-networkd",AEi="C:\\ProgramData\\planx\\planx-networkd.pid",OEi="C:\\ProgramData\\planx\\planx-networkd.log"});function PEi(){return I(this,void 0,void 0,function*(){yield YCr()})}function XCr(){return I(this,arguments,void 0,function*(t={}){var e;Sj("install");let r=(e=t.installFn)!==null&&e!==void 0?e:PEi;try{yield r(),console.log("[network] install completed")}catch(n){let i=n instanceof Error?n.message:String(n);console.error(`[network] install failed: ${i}`),process.exit(1)}})}var eAr=p(()=>{ce();QCr();Ej()});var tAr={};fr(tAr,{commands:()=>DEi});var DEi,rAr=p(()=>{ce();eAr();DEi=[{name:"",description:"Install planx-networkd as a system service",options:[],action:()=>I(void 0,void 0,void 0,function*(){yield XCr()})}]});import{execFile as NEi}from"node:child_process";import{promisify as kEi}from"node:util";function nAr(t,e,r,n){return I(this,void 0,void 0,function*(){var i;try{return Rge((yield r(t,e)).stdout)}catch(s){let o=s;return o.code==="ENOENT"||o.killed||o.signal?n(`[network] orphan detection degraded: ${t} unavailable (${String((i=o.code)!==null&&i!==void 0?i:o.signal)})`):typeof o.code=="number"&&o.code>1&&n(`[network] orphan detection degraded: ${t} exited with code ${o.code}`),[]}})}function $2e(){return I(this,arguments,void 0,function*(t={}){var e,r,n;if(((e=t.platform)!==null&&e!==void 0?e:process.platform)==="win32")return[];let i=(r=t.execFn)!==null&&r!==void 0?r:iAr,s=(n=t.warnFn)!==null&&n!==void 0?n:(a=>REi.warn(a));return[...new Set([...yield nAr("pgrep",["-f","planx-networkd\\.(main\\.mjs|js)"],i,s),...yield nAr("lsof",["-t","-nP",`-iUDP:${MEi}`],i,s)])]})}function dee(t){return I(this,arguments,void 0,function*(e,r={}){var n;let i=(n=r.execFn)!==null&&n!==void 0?n:iAr;try{return LEi.test((yield i("ps",["-p",String(e),"-o","command="])).stdout)}catch{return!1}})}var REi,MEi,LEi,iAr,Ort=p(()=>{ce();lf();Mt();REi=qe("network"),MEi=5354,LEi=/planx-networkd\.(main\.mjs|js)/,iAr=(t,e)=>I(void 0,void 0,void 0,function*(){let{stdout:r}=yield kEi(NEi)(t,e,{timeout:3e3});return{stdout:String(r)}})});import{spawn as $Ei}from"node:child_process";import{createRequire as FEi}from"node:module";import*as Ov from"fs";import{dirname as uAr,resolve as sAr}from"path";function jEi(t={}){var e,r,n,i,s,o;let a=(e=t.exists)!==null&&e!==void 0?e:Ov.existsSync,c=(n=(r=t.argv1)!==null&&r!==void 0?r:process.argv[1])!==null&&n!==void 0?n:"",l=(i=t.cwd)!==null&&i!==void 0?i:process.cwd(),u=(s=t.realpath)!==null&&s!==void 0?s:(h=>{try{return Ov.realpathSync(h)}catch{return h}});if(c){let h=sAr(uAr(u(c)),oAr);if(a(h))return h}let d=sAr(l,aAr);if(a(d))return d;let f=(o=t.requireResolve)!==null&&o!==void 0?o:(h=>FEi(import.meta.url).resolve(h));try{return f(cAr)}catch{}throw new Error(`planx-networkd entry not found (tried: same-dir ${oAr}, ${aAr}, package ${cAr})`)}function qEi(){return jEi()}function lAr(t){let e=uAr(t);Ov.existsSync(e)||Ov.mkdirSync(e,{recursive:!0})}function F2e(){return I(this,arguments,void 0,function*(t={},e={}){var r,n,i,s,o,a;let c=RA(),l=(r=t.socket)!==null&&r!==void 0?r:c.socketPath,u=(n=t.pidFile)!==null&&n!==void 0?n:c.pidFile,d=(i=t.logFile)!==null&&i!==void 0?i:c.logFile;if(JCr(u)){console.log(`[network] planx-networkd is already running (pid file: ${u})`);return}for(let x of yield $2e(e))if(yield dee(x,e)){console.error(`[network] orphan planx-networkd detected (pid: ${x}). Run: sudo planx network stop`),process.exit(1);return}((s=e.requireRootFn)!==null&&s!==void 0?s:Sj)("start --background");let h=(o=e.resolveBinPath)!==null&&o!==void 0?o:qEi,m=(a=e.spawnFn)!==null&&a!==void 0?a:$Ei,y;try{y=h()}catch(x){console.error(`[network] failed to resolve planx-networkd binary: ${x instanceof Error?x.message:String(x)}`),process.exit(1);return}let g=[y,`--socket=${l}`];if(t.foreground){let x={stdio:"inherit"},A=m(process.execPath,g,x);yield new Promise(O=>A.on("exit",()=>O()));return}lAr(u),lAr(d);let _=Ov.openSync(d,"a"),b={stdio:["ignore",_,_],detached:!0},w=m(process.execPath,g,b);if(w.unref(),w.pid&&Ov.writeFileSync(u,String(w.pid)),!(yield ZCr(l,{timeoutMs:5e3}))){console.error(`[network] timeout waiting for socket ${l}`),process.exit(1);return}console.log(`[network] planx-networkd started (pid: ${w.pid}, socket: ${l})`)})}var oAr,aAr,cAr,Prt=p(()=>{ce();Ort();Ej();oAr="planx-networkd.main.mjs",aAr="dist/packages/@planx.machina.at/network/bin/planx-networkd.js",cAr="@planx.machina.at/network/bin/planx-networkd"});var dAr={};fr(dAr,{commands:()=>BEi});var BEi,fAr=p(()=>{ce();Prt();BEi=[{name:"",description:"Start planx-networkd (requires root)",options:[["-b, --background","Run in background (= detached, default)"],["-f, --foreground","Run in foreground (block until SIGTERM)"],["--socket <path>","Unix socket path override"],["--pid-file <path>","PID file path override"],["--log-file <path>","Log file path override"]],action:t=>I(void 0,void 0,void 0,function*(){yield F2e(t??{})})}]});function hAr(t){return I(this,arguments,void 0,function*(e,r={}){let n=yield Hw(e,{killFn:r.killFn,termTimeoutMs:r.termTimeoutMs,killTimeoutMs:r.killTimeoutMs,pollMs:r.pollMs,onEscalate:i=>pAr.warn(`[network] SIGTERM ignored, escalating to SIGKILL (pid: ${i})`)});switch(n.outcome){case"already-dead":case"terminated":case"killed":return!0;case"refused":case"timeout":return!1;default:{let i=n.error;return pAr.error(`[network] cannot verify pid ${e}: ${i instanceof Error?i.message:String(i)}`),!1}}})}var pAr,mAr=p(()=>{ce();lf();Mt();pAr=qe("network")});import*as Ij from"fs";function UEi(t,e,r){return I(this,void 0,void 0,function*(){let n=new Set;if(e.existsSync(t)){let i=parseInt(e.readFileSync(t,"utf-8").trim(),10);if(!i||isNaN(i)){console.warn("[network] pid file content invalid; removing");try{e.unlinkSync(t)}catch{}}else if(yield dee(i,r))n.add(i);else{console.warn(`[network] pid file pid ${i} is not planx-networkd (dead or reused); removing pid file`);try{e.unlinkSync(t)}catch{}}}for(let i of yield $2e(r))n.has(i)||(yield dee(i,r))&&(console.warn(`[network] orphan planx-networkd detected (pid: ${i}, pid file missing/stale)`),n.add(i));return[...n]})}function j2e(){return I(this,arguments,void 0,function*(t={},e={}){var r,n,i,s;let o=RA(),a=(r=t.socket)!==null&&r!==void 0?r:o.socketPath,c=(n=t.pidFile)!==null&&n!==void 0?n:o.pidFile,l=(i=e.fs)!==null&&i!==void 0?i:VEi,u=yield UEi(c,l,e);if(u.length===0){if(console.log("[network] planx-networkd is not running (no live networkd process)"),l.existsSync(a))try{l.unlinkSync(a)}catch{}return!0}((s=e.requireRootFn)!==null&&s!==void 0?s:Sj)("stop");let f=!0;for(let h of u){let m=yield hAr(h,e);m?console.log(`[network] planx-networkd stopped (pid: ${h})`):console.error(`[network] planx-networkd (pid: ${h}) still alive; kill manually: sudo kill -9 ${h}`),f&&(f=m)}if(f){try{l.unlinkSync(c)}catch{}if(l.existsSync(a))try{l.unlinkSync(a)}catch{}}return f})}var VEi,Drt=p(()=>{ce();Ort();mAr();Ej();VEi={existsSync:Ij.existsSync,readFileSync:(t,e)=>Ij.readFileSync(t,e),unlinkSync:Ij.unlinkSync}});var gAr={};fr(gAr,{commands:()=>HEi});var HEi,vAr=p(()=>{ce();Drt();HEi=[{name:"",description:"Stop planx-networkd (requires root)",options:[["--socket <path>","Unix socket path override"],["--pid-file <path>","PID file path override"]],action:t=>I(void 0,void 0,void 0,function*(){(yield j2e(t??{}))||(process.exitCode=1)})}]});function yAr(){return I(this,arguments,void 0,function*(t={},e={}){return(yield j2e({socket:t.socket,pidFile:t.pidFile},{killFn:e.killFn,requireRootFn:e.requireRootFn,fs:e.fs,execFn:e.execFn,platform:e.platform,termTimeoutMs:e.termTimeoutMs,killTimeoutMs:e.killTimeoutMs,pollMs:e.pollMs}))?(yield F2e({socket:t.socket,pidFile:t.pidFile,logFile:t.logFile,foreground:t.foreground},{resolveBinPath:e.resolveBinPath,spawnFn:e.spawnFn,requireRootFn:e.requireRootFn,execFn:e.execFn,platform:e.platform}),!0):(console.error("[network] restart aborted: previous planx-networkd could not be verified dead."),console.error("[network] inspect: sudo lsof -nP -iUDP:5354 / pgrep -fl planx-networkd"),!1)})}var _Ar=p(()=>{ce();Prt();Drt()});var bAr={};fr(bAr,{commands:()=>WEi});var WEi,wAr=p(()=>{ce();_Ar();WEi=[{name:"",description:"Restart planx-networkd (= stop \u2192 start, requires root)",options:[["-f, --foreground","After restart, run in foreground (block until SIGTERM)"],["--socket <path>","Unix socket path override"],["--pid-file <path>","PID file path override"],["--log-file <path>","Log file path override"]],action:t=>I(void 0,void 0,void 0,function*(){(yield yAr(t??{}))||(process.exitCode=1)})}]});import{createRequire as GEi}from"node:module";import*as SAr from"fs";function zEi(){return GEi(import.meta.url)(EAr)}function KEi(t){if(t<60)return`${t}s`;let e=Math.floor(t/60),r=t%60;return e<60?`${e}m ${r}s`:`${Math.floor(e/60)}h ${e%60}m`}function IAr(){return I(this,arguments,void 0,function*(t={},e={}){var r,n;let i=RA(),s=(r=t.socket)!==null&&r!==void 0?r:i.socketPath;if(!SAr.existsSync(s)){console.log("[network] Status: stopped"),console.log(`[network] Socket: ${s} (missing)`);return}let o=(n=e.loadModule)!==null&&n!==void 0?n:zEi,a;try{a=o()}catch(l){console.error(`[network] failed to load ${EAr}: ${l instanceof Error?l.message:String(l)}`),process.exit(1);return}let c=a.createNetworkdClient({socketPath:s});try{let l=yield c.health.query();console.log("[network] Status: running"),console.log(`[network] Socket: ${s}`),console.log(`[network] PID: ${l.pid}`),console.log(`[network] Version: ${l.version}`),console.log(`[network] Native: ${l.nativeVersion}`),console.log(`[network] Platform: ${l.platform}/${l.arch}`),console.log(`[network] Node: ${l.nodeVersion}`),console.log(`[network] Uptime: ${KEi(l.uptime)}`),console.log(`[network] Started: ${l.startedAt}`),l.dns?console.log(`[network] DNS: tld=.${l.dns.tld} aliases=${l.dns.aliasCount} (port 5354/udp)`):console.log("[network] DNS: n/a (older networkd without DNS support)")}catch(l){console.error(`[network] health query failed: ${l instanceof Error?l.message:String(l)}`),process.exit(1)}})}var EAr,TAr=p(()=>{ce();Ej();EAr="@planx.machina.at/network"});var xAr={};fr(xAr,{commands:()=>YEi});var YEi,CAr=p(()=>{ce();TAr();YEi=[{name:"",description:"Show planx-networkd status",options:[["--socket <path>","Unix socket path override"]],action:t=>I(void 0,void 0,void 0,function*(){yield IAr(t??{})})}]});import*as Lu from"fs";function ZEi(t,e){if(!Lu.existsSync(t))return"";let n=Lu.readFileSync(t,"utf-8").split(`
501
501
  `);return n.slice(Math.max(0,n.length-e-1)).join(`
502
502
  `)}function XEi(t,e){return I(this,void 0,void 0,function*(){let r=Lu.existsSync(t)?Lu.statSync(t).size:0;for(;!e.aborted;){if(yield new Promise(i=>setTimeout(i,JEi)),!Lu.existsSync(t))continue;let n=Lu.statSync(t);if(n.size<r&&(r=0),n.size>r){let i=Lu.openSync(t,"r"),s=Buffer.alloc(n.size-r);Lu.readSync(i,s,0,s.length,r),Lu.closeSync(i),process.stdout.write(s.toString("utf-8")),r=n.size}}})}function AAr(){return I(this,arguments,void 0,function*(t={},e={}){var r,n,i;let s=RA(),o=(r=t.logFile)!==null&&r!==void 0?r:s.logFile,a=(n=t.lines)!==null&&n!==void 0?n:QEi;if(!Lu.existsSync(o))console.error(`[network] log file not found: ${o}`),t.follow||process.exit(1);else{let u=ZEi(o,a);u&&process.stdout.write(u)}if(!t.follow)return;let c=(i=e.abortController)!==null&&i!==void 0?i:new AbortController,l=()=>c.abort();process.once("SIGINT",l),process.once("SIGTERM",l);try{yield XEi(o,c.signal)}finally{process.off("SIGINT",l),process.off("SIGTERM",l)}})}var QEi,JEi,OAr=p(()=>{ce();Ej();QEi=100,JEi=500});var PAr={};fr(PAr,{commands:()=>eIi});var eIi,DAr=p(()=>{ce();OAr();eIi=[{name:"",description:"Tail planx-networkd log file",options:[["-f, --follow","Continue streaming log output (tail -f)"],["-n, --lines <count>","Number of last lines to print (default: 100)"],["--log-file <path>","Log file path override"]],action:t=>I(void 0,void 0,void 0,function*(){yield AAr(t??{})})}]});var NAr={};fr(NAr,{commands:()=>tIi});var tIi,kAr=p(()=>{tIi=[{name:"install",description:"Install planx-networkd as a system service (launchd / systemd)",loadChildren:()=>Promise.resolve().then(()=>(rAr(),tAr)).then(t=>t.commands)},{name:"start",description:"Start planx-networkd (requires root)",loadChildren:()=>Promise.resolve().then(()=>(fAr(),dAr)).then(t=>t.commands)},{name:"stop",description:"Stop planx-networkd (requires root)",loadChildren:()=>Promise.resolve().then(()=>(vAr(),gAr)).then(t=>t.commands)},{name:"restart",description:"Restart planx-networkd (= stop \u2192 start, requires root)",loadChildren:()=>Promise.resolve().then(()=>(wAr(),bAr)).then(t=>t.commands)},{name:"status",description:"Show planx-networkd status (health query over unix socket)",loadChildren:()=>Promise.resolve().then(()=>(CAr(),xAr)).then(t=>t.commands)},{name:"logs",description:"Tail planx-networkd log file",loadChildren:()=>Promise.resolve().then(()=>(DAr(),PAr)).then(t=>t.commands)}]});var RAr={};fr(RAr,{commands:()=>nIi});function rIi(t){let e=t.split(":");if(e.length!==2)throw new Error(`Invalid port specification: ${t}. Expected format: <local-port>:<remote-port>`);let r=parseInt(e[0],10),n=parseInt(e[1],10);if(isNaN(r)||isNaN(n))throw new Error(`Invalid port numbers in: ${t}`);if(r<1||r>65535||n<1||n>65535)throw new Error("Port numbers must be between 1 and 65535");return{localPort:r,remotePort:n}}var nIi,MAr=p(()=>{ce();de();yr();ya();jN();ya();nIi=[{name:"",description:"Forward a remote port to local machine via WebRTC",arguments:[["<port-spec>","Port specification in format <local-port>:<remote-port>"]],options:[["-s, --server-id <id>","Session server ID or name",void 0],["-b, --bind <address>","Local address to bind (default: 127.0.0.1)",void 0,"127.0.0.1"]],action:(t,e)=>I(void 0,void 0,void 0,function*(){let r=q(Av),n=q(ni),i=q(jn);yield n.initialize(),i.initialize();try{let{localPort:s,remotePort:o}=rIi(t),a=e.serverId||process.env.PLANX_SERVER_ID;a||(console.error("Server ID is required. Use --server-id or set PLANX_SERVER_ID"),process.exit(1)),console.log(`Starting port forward: localhost:${s} -> remote:${o}`);let c=yield r.start(a,{localPort:s,remotePort:o,bind:e.bind});console.log(`Port forward active: ${c.bind}:${c.localPort} -> ${c.remoteHost}:${c.remotePort}`),console.log("Press Ctrl+C to stop"),yield new Promise(l=>{process.on("SIGINT",()=>{console.log(`
503
503
  Stopping port forward...`),c.stop(),l()})})}catch(s){s instanceof Awe?(console.error(`
@@ -474,7 +474,7 @@ Domains=~${lee}
474
474
  </plist>
475
475
  `,vEi=`[Unit]
476
476
  Description=planx ROOT network daemon (TUN + smoltcp via NAPI, exposed over unix-socket tRPC)
477
- Documentation=https://github.com/nontangent/x_x_machina/tree/develop/projects/@planx.machina.at/network
477
+ Documentation=https://github.com/nontangent/x_x_machina/tree/develop/packages/@planx.machina.at/network
478
478
  After=network.target
479
479
 
480
480
  [Service]
@@ -497,7 +497,7 @@ StandardError=append:/var/log/planx-networkd.err.log
497
497
 
498
498
  [Install]
499
499
  WantedBy=multi-user.target
500
- `,yEi=typeof process.getuid=="function"?process.getuid.bind(process):void 0,uee={writeFile:(t,e)=>uEi(t,e),mkdir:t=>dEi(t,{recursive:!0}),exec:(t,e)=>pEi(t,e,{stdio:"inherit"}),log:t=>console.log(t),platform:process.platform,getuid:yEi,rm:t=>{try{fEi(t)}catch{}}}});import*as wj from"fs";function RA(t=process.platform){let e=t==="win32";return{socketPath:e?CEi:IEi,pidFile:e?AEi:TEi,logFile:e?OEi:xEi}}function Sj(t){typeof process.getuid=="function"&&process.getuid()!==0&&(console.error("[network] planx-networkd requires root privilege. Run with sudo:"),console.error(` sudo planx network ${t}`),process.exit(1))}function JCr(t){let e=Fh(t);if(e===null){if(wj.existsSync(t))try{wj.unlinkSync(t)}catch{}return!1}if(fd(e))return!0;try{wj.unlinkSync(t)}catch{}return!1}function ZCr(t,e){return I(this,void 0,void 0,function*(){var r;let n=(r=e.intervalMs)!==null&&r!==void 0?r:100,i=Date.now();for(;Date.now()-i<e.timeoutMs;){if(wj.existsSync(t))return!0;yield new Promise(s=>setTimeout(s,n))}return!1})}var IEi,TEi,xEi,CEi,AEi,OEi,Ej=p(()=>{ce();lf();IEi="/var/run/planx-networkd.sock",TEi="/var/run/planx-networkd.pid",xEi="/var/log/planx-networkd.log",CEi="\\\\.\\pipe\\planx-networkd",AEi="C:\\ProgramData\\planx\\planx-networkd.pid",OEi="C:\\ProgramData\\planx\\planx-networkd.log"});function PEi(){return I(this,void 0,void 0,function*(){yield YCr()})}function XCr(){return I(this,arguments,void 0,function*(t={}){var e;Sj("install");let r=(e=t.installFn)!==null&&e!==void 0?e:PEi;try{yield r(),console.log("[network] install completed")}catch(n){let i=n instanceof Error?n.message:String(n);console.error(`[network] install failed: ${i}`),process.exit(1)}})}var eAr=p(()=>{ce();QCr();Ej()});var tAr={};fr(tAr,{commands:()=>DEi});var DEi,rAr=p(()=>{ce();eAr();DEi=[{name:"",description:"Install planx-networkd as a system service",options:[],action:()=>I(void 0,void 0,void 0,function*(){yield XCr()})}]});import{execFile as NEi}from"node:child_process";import{promisify as kEi}from"node:util";function nAr(t,e,r,n){return I(this,void 0,void 0,function*(){var i;try{return Rge((yield r(t,e)).stdout)}catch(s){let o=s;return o.code==="ENOENT"||o.killed||o.signal?n(`[network] orphan detection degraded: ${t} unavailable (${String((i=o.code)!==null&&i!==void 0?i:o.signal)})`):typeof o.code=="number"&&o.code>1&&n(`[network] orphan detection degraded: ${t} exited with code ${o.code}`),[]}})}function $2e(){return I(this,arguments,void 0,function*(t={}){var e,r,n;if(((e=t.platform)!==null&&e!==void 0?e:process.platform)==="win32")return[];let i=(r=t.execFn)!==null&&r!==void 0?r:iAr,s=(n=t.warnFn)!==null&&n!==void 0?n:(a=>REi.warn(a));return[...new Set([...yield nAr("pgrep",["-f","planx-networkd\\.(main\\.mjs|js)"],i,s),...yield nAr("lsof",["-t","-nP",`-iUDP:${MEi}`],i,s)])]})}function dee(t){return I(this,arguments,void 0,function*(e,r={}){var n;let i=(n=r.execFn)!==null&&n!==void 0?n:iAr;try{return LEi.test((yield i("ps",["-p",String(e),"-o","command="])).stdout)}catch{return!1}})}var REi,MEi,LEi,iAr,Ort=p(()=>{ce();lf();Mt();REi=qe("network"),MEi=5354,LEi=/planx-networkd\.(main\.mjs|js)/,iAr=(t,e)=>I(void 0,void 0,void 0,function*(){let{stdout:r}=yield kEi(NEi)(t,e,{timeout:3e3});return{stdout:String(r)}})});import{spawn as $Ei}from"node:child_process";import{createRequire as FEi}from"node:module";import*as Ov from"fs";import{dirname as uAr,resolve as sAr}from"path";function jEi(t={}){var e,r,n,i,s,o;let a=(e=t.exists)!==null&&e!==void 0?e:Ov.existsSync,c=(n=(r=t.argv1)!==null&&r!==void 0?r:process.argv[1])!==null&&n!==void 0?n:"",l=(i=t.cwd)!==null&&i!==void 0?i:process.cwd(),u=(s=t.realpath)!==null&&s!==void 0?s:(h=>{try{return Ov.realpathSync(h)}catch{return h}});if(c){let h=sAr(uAr(u(c)),oAr);if(a(h))return h}let d=sAr(l,aAr);if(a(d))return d;let f=(o=t.requireResolve)!==null&&o!==void 0?o:(h=>FEi(import.meta.url).resolve(h));try{return f(cAr)}catch{}throw new Error(`planx-networkd entry not found (tried: same-dir ${oAr}, ${aAr}, package ${cAr})`)}function qEi(){return jEi()}function lAr(t){let e=uAr(t);Ov.existsSync(e)||Ov.mkdirSync(e,{recursive:!0})}function F2e(){return I(this,arguments,void 0,function*(t={},e={}){var r,n,i,s,o,a;let c=RA(),l=(r=t.socket)!==null&&r!==void 0?r:c.socketPath,u=(n=t.pidFile)!==null&&n!==void 0?n:c.pidFile,d=(i=t.logFile)!==null&&i!==void 0?i:c.logFile;if(JCr(u)){console.log(`[network] planx-networkd is already running (pid file: ${u})`);return}for(let x of yield $2e(e))if(yield dee(x,e)){console.error(`[network] orphan planx-networkd detected (pid: ${x}). Run: sudo planx network stop`),process.exit(1);return}((s=e.requireRootFn)!==null&&s!==void 0?s:Sj)("start --background");let h=(o=e.resolveBinPath)!==null&&o!==void 0?o:qEi,m=(a=e.spawnFn)!==null&&a!==void 0?a:$Ei,y;try{y=h()}catch(x){console.error(`[network] failed to resolve planx-networkd binary: ${x instanceof Error?x.message:String(x)}`),process.exit(1);return}let g=[y,`--socket=${l}`];if(t.foreground){let x={stdio:"inherit"},A=m(process.execPath,g,x);yield new Promise(O=>A.on("exit",()=>O()));return}lAr(u),lAr(d);let _=Ov.openSync(d,"a"),b={stdio:["ignore",_,_],detached:!0},w=m(process.execPath,g,b);if(w.unref(),w.pid&&Ov.writeFileSync(u,String(w.pid)),!(yield ZCr(l,{timeoutMs:5e3}))){console.error(`[network] timeout waiting for socket ${l}`),process.exit(1);return}console.log(`[network] planx-networkd started (pid: ${w.pid}, socket: ${l})`)})}var oAr,aAr,cAr,Prt=p(()=>{ce();Ort();Ej();oAr="planx-networkd.main.mjs",aAr="dist/projects/@planx.machina.at/network/bin/planx-networkd.js",cAr="@planx.machina.at/network/bin/planx-networkd"});var dAr={};fr(dAr,{commands:()=>BEi});var BEi,fAr=p(()=>{ce();Prt();BEi=[{name:"",description:"Start planx-networkd (requires root)",options:[["-b, --background","Run in background (= detached, default)"],["-f, --foreground","Run in foreground (block until SIGTERM)"],["--socket <path>","Unix socket path override"],["--pid-file <path>","PID file path override"],["--log-file <path>","Log file path override"]],action:t=>I(void 0,void 0,void 0,function*(){yield F2e(t??{})})}]});function hAr(t){return I(this,arguments,void 0,function*(e,r={}){let n=yield Hw(e,{killFn:r.killFn,termTimeoutMs:r.termTimeoutMs,killTimeoutMs:r.killTimeoutMs,pollMs:r.pollMs,onEscalate:i=>pAr.warn(`[network] SIGTERM ignored, escalating to SIGKILL (pid: ${i})`)});switch(n.outcome){case"already-dead":case"terminated":case"killed":return!0;case"refused":case"timeout":return!1;default:{let i=n.error;return pAr.error(`[network] cannot verify pid ${e}: ${i instanceof Error?i.message:String(i)}`),!1}}})}var pAr,mAr=p(()=>{ce();lf();Mt();pAr=qe("network")});import*as Ij from"fs";function UEi(t,e,r){return I(this,void 0,void 0,function*(){let n=new Set;if(e.existsSync(t)){let i=parseInt(e.readFileSync(t,"utf-8").trim(),10);if(!i||isNaN(i)){console.warn("[network] pid file content invalid; removing");try{e.unlinkSync(t)}catch{}}else if(yield dee(i,r))n.add(i);else{console.warn(`[network] pid file pid ${i} is not planx-networkd (dead or reused); removing pid file`);try{e.unlinkSync(t)}catch{}}}for(let i of yield $2e(r))n.has(i)||(yield dee(i,r))&&(console.warn(`[network] orphan planx-networkd detected (pid: ${i}, pid file missing/stale)`),n.add(i));return[...n]})}function j2e(){return I(this,arguments,void 0,function*(t={},e={}){var r,n,i,s;let o=RA(),a=(r=t.socket)!==null&&r!==void 0?r:o.socketPath,c=(n=t.pidFile)!==null&&n!==void 0?n:o.pidFile,l=(i=e.fs)!==null&&i!==void 0?i:VEi,u=yield UEi(c,l,e);if(u.length===0){if(console.log("[network] planx-networkd is not running (no live networkd process)"),l.existsSync(a))try{l.unlinkSync(a)}catch{}return!0}((s=e.requireRootFn)!==null&&s!==void 0?s:Sj)("stop");let f=!0;for(let h of u){let m=yield hAr(h,e);m?console.log(`[network] planx-networkd stopped (pid: ${h})`):console.error(`[network] planx-networkd (pid: ${h}) still alive; kill manually: sudo kill -9 ${h}`),f&&(f=m)}if(f){try{l.unlinkSync(c)}catch{}if(l.existsSync(a))try{l.unlinkSync(a)}catch{}}return f})}var VEi,Drt=p(()=>{ce();Ort();mAr();Ej();VEi={existsSync:Ij.existsSync,readFileSync:(t,e)=>Ij.readFileSync(t,e),unlinkSync:Ij.unlinkSync}});var gAr={};fr(gAr,{commands:()=>HEi});var HEi,vAr=p(()=>{ce();Drt();HEi=[{name:"",description:"Stop planx-networkd (requires root)",options:[["--socket <path>","Unix socket path override"],["--pid-file <path>","PID file path override"]],action:t=>I(void 0,void 0,void 0,function*(){(yield j2e(t??{}))||(process.exitCode=1)})}]});function yAr(){return I(this,arguments,void 0,function*(t={},e={}){return(yield j2e({socket:t.socket,pidFile:t.pidFile},{killFn:e.killFn,requireRootFn:e.requireRootFn,fs:e.fs,execFn:e.execFn,platform:e.platform,termTimeoutMs:e.termTimeoutMs,killTimeoutMs:e.killTimeoutMs,pollMs:e.pollMs}))?(yield F2e({socket:t.socket,pidFile:t.pidFile,logFile:t.logFile,foreground:t.foreground},{resolveBinPath:e.resolveBinPath,spawnFn:e.spawnFn,requireRootFn:e.requireRootFn,execFn:e.execFn,platform:e.platform}),!0):(console.error("[network] restart aborted: previous planx-networkd could not be verified dead."),console.error("[network] inspect: sudo lsof -nP -iUDP:5354 / pgrep -fl planx-networkd"),!1)})}var _Ar=p(()=>{ce();Prt();Drt()});var bAr={};fr(bAr,{commands:()=>WEi});var WEi,wAr=p(()=>{ce();_Ar();WEi=[{name:"",description:"Restart planx-networkd (= stop \u2192 start, requires root)",options:[["-f, --foreground","After restart, run in foreground (block until SIGTERM)"],["--socket <path>","Unix socket path override"],["--pid-file <path>","PID file path override"],["--log-file <path>","Log file path override"]],action:t=>I(void 0,void 0,void 0,function*(){(yield yAr(t??{}))||(process.exitCode=1)})}]});import{createRequire as GEi}from"node:module";import*as SAr from"fs";function zEi(){return GEi(import.meta.url)(EAr)}function KEi(t){if(t<60)return`${t}s`;let e=Math.floor(t/60),r=t%60;return e<60?`${e}m ${r}s`:`${Math.floor(e/60)}h ${e%60}m`}function IAr(){return I(this,arguments,void 0,function*(t={},e={}){var r,n;let i=RA(),s=(r=t.socket)!==null&&r!==void 0?r:i.socketPath;if(!SAr.existsSync(s)){console.log("[network] Status: stopped"),console.log(`[network] Socket: ${s} (missing)`);return}let o=(n=e.loadModule)!==null&&n!==void 0?n:zEi,a;try{a=o()}catch(l){console.error(`[network] failed to load ${EAr}: ${l instanceof Error?l.message:String(l)}`),process.exit(1);return}let c=a.createNetworkdClient({socketPath:s});try{let l=yield c.health.query();console.log("[network] Status: running"),console.log(`[network] Socket: ${s}`),console.log(`[network] PID: ${l.pid}`),console.log(`[network] Version: ${l.version}`),console.log(`[network] Native: ${l.nativeVersion}`),console.log(`[network] Platform: ${l.platform}/${l.arch}`),console.log(`[network] Node: ${l.nodeVersion}`),console.log(`[network] Uptime: ${KEi(l.uptime)}`),console.log(`[network] Started: ${l.startedAt}`),l.dns?console.log(`[network] DNS: tld=.${l.dns.tld} aliases=${l.dns.aliasCount} (port 5354/udp)`):console.log("[network] DNS: n/a (older networkd without DNS support)")}catch(l){console.error(`[network] health query failed: ${l instanceof Error?l.message:String(l)}`),process.exit(1)}})}var EAr,TAr=p(()=>{ce();Ej();EAr="@planx.machina.at/network"});var xAr={};fr(xAr,{commands:()=>YEi});var YEi,CAr=p(()=>{ce();TAr();YEi=[{name:"",description:"Show planx-networkd status",options:[["--socket <path>","Unix socket path override"]],action:t=>I(void 0,void 0,void 0,function*(){yield IAr(t??{})})}]});import*as Lu from"fs";function ZEi(t,e){if(!Lu.existsSync(t))return"";let n=Lu.readFileSync(t,"utf-8").split(`
500
+ `,yEi=typeof process.getuid=="function"?process.getuid.bind(process):void 0,uee={writeFile:(t,e)=>uEi(t,e),mkdir:t=>dEi(t,{recursive:!0}),exec:(t,e)=>pEi(t,e,{stdio:"inherit"}),log:t=>console.log(t),platform:process.platform,getuid:yEi,rm:t=>{try{fEi(t)}catch{}}}});import*as wj from"fs";function RA(t=process.platform){let e=t==="win32";return{socketPath:e?CEi:IEi,pidFile:e?AEi:TEi,logFile:e?OEi:xEi}}function Sj(t){typeof process.getuid=="function"&&process.getuid()!==0&&(console.error("[network] planx-networkd requires root privilege. Run with sudo:"),console.error(` sudo planx network ${t}`),process.exit(1))}function JCr(t){let e=Fh(t);if(e===null){if(wj.existsSync(t))try{wj.unlinkSync(t)}catch{}return!1}if(fd(e))return!0;try{wj.unlinkSync(t)}catch{}return!1}function ZCr(t,e){return I(this,void 0,void 0,function*(){var r;let n=(r=e.intervalMs)!==null&&r!==void 0?r:100,i=Date.now();for(;Date.now()-i<e.timeoutMs;){if(wj.existsSync(t))return!0;yield new Promise(s=>setTimeout(s,n))}return!1})}var IEi,TEi,xEi,CEi,AEi,OEi,Ej=p(()=>{ce();lf();IEi="/var/run/planx-networkd.sock",TEi="/var/run/planx-networkd.pid",xEi="/var/log/planx-networkd.log",CEi="\\\\.\\pipe\\planx-networkd",AEi="C:\\ProgramData\\planx\\planx-networkd.pid",OEi="C:\\ProgramData\\planx\\planx-networkd.log"});function PEi(){return I(this,void 0,void 0,function*(){yield YCr()})}function XCr(){return I(this,arguments,void 0,function*(t={}){var e;Sj("install");let r=(e=t.installFn)!==null&&e!==void 0?e:PEi;try{yield r(),console.log("[network] install completed")}catch(n){let i=n instanceof Error?n.message:String(n);console.error(`[network] install failed: ${i}`),process.exit(1)}})}var eAr=p(()=>{ce();QCr();Ej()});var tAr={};fr(tAr,{commands:()=>DEi});var DEi,rAr=p(()=>{ce();eAr();DEi=[{name:"",description:"Install planx-networkd as a system service",options:[],action:()=>I(void 0,void 0,void 0,function*(){yield XCr()})}]});import{execFile as NEi}from"node:child_process";import{promisify as kEi}from"node:util";function nAr(t,e,r,n){return I(this,void 0,void 0,function*(){var i;try{return Rge((yield r(t,e)).stdout)}catch(s){let o=s;return o.code==="ENOENT"||o.killed||o.signal?n(`[network] orphan detection degraded: ${t} unavailable (${String((i=o.code)!==null&&i!==void 0?i:o.signal)})`):typeof o.code=="number"&&o.code>1&&n(`[network] orphan detection degraded: ${t} exited with code ${o.code}`),[]}})}function $2e(){return I(this,arguments,void 0,function*(t={}){var e,r,n;if(((e=t.platform)!==null&&e!==void 0?e:process.platform)==="win32")return[];let i=(r=t.execFn)!==null&&r!==void 0?r:iAr,s=(n=t.warnFn)!==null&&n!==void 0?n:(a=>REi.warn(a));return[...new Set([...yield nAr("pgrep",["-f","planx-networkd\\.(main\\.mjs|js)"],i,s),...yield nAr("lsof",["-t","-nP",`-iUDP:${MEi}`],i,s)])]})}function dee(t){return I(this,arguments,void 0,function*(e,r={}){var n;let i=(n=r.execFn)!==null&&n!==void 0?n:iAr;try{return LEi.test((yield i("ps",["-p",String(e),"-o","command="])).stdout)}catch{return!1}})}var REi,MEi,LEi,iAr,Ort=p(()=>{ce();lf();Mt();REi=qe("network"),MEi=5354,LEi=/planx-networkd\.(main\.mjs|js)/,iAr=(t,e)=>I(void 0,void 0,void 0,function*(){let{stdout:r}=yield kEi(NEi)(t,e,{timeout:3e3});return{stdout:String(r)}})});import{spawn as $Ei}from"node:child_process";import{createRequire as FEi}from"node:module";import*as Ov from"fs";import{dirname as uAr,resolve as sAr}from"path";function jEi(t={}){var e,r,n,i,s,o;let a=(e=t.exists)!==null&&e!==void 0?e:Ov.existsSync,c=(n=(r=t.argv1)!==null&&r!==void 0?r:process.argv[1])!==null&&n!==void 0?n:"",l=(i=t.cwd)!==null&&i!==void 0?i:process.cwd(),u=(s=t.realpath)!==null&&s!==void 0?s:(h=>{try{return Ov.realpathSync(h)}catch{return h}});if(c){let h=sAr(uAr(u(c)),oAr);if(a(h))return h}let d=sAr(l,aAr);if(a(d))return d;let f=(o=t.requireResolve)!==null&&o!==void 0?o:(h=>FEi(import.meta.url).resolve(h));try{return f(cAr)}catch{}throw new Error(`planx-networkd entry not found (tried: same-dir ${oAr}, ${aAr}, package ${cAr})`)}function qEi(){return jEi()}function lAr(t){let e=uAr(t);Ov.existsSync(e)||Ov.mkdirSync(e,{recursive:!0})}function F2e(){return I(this,arguments,void 0,function*(t={},e={}){var r,n,i,s,o,a;let c=RA(),l=(r=t.socket)!==null&&r!==void 0?r:c.socketPath,u=(n=t.pidFile)!==null&&n!==void 0?n:c.pidFile,d=(i=t.logFile)!==null&&i!==void 0?i:c.logFile;if(JCr(u)){console.log(`[network] planx-networkd is already running (pid file: ${u})`);return}for(let x of yield $2e(e))if(yield dee(x,e)){console.error(`[network] orphan planx-networkd detected (pid: ${x}). Run: sudo planx network stop`),process.exit(1);return}((s=e.requireRootFn)!==null&&s!==void 0?s:Sj)("start --background");let h=(o=e.resolveBinPath)!==null&&o!==void 0?o:qEi,m=(a=e.spawnFn)!==null&&a!==void 0?a:$Ei,y;try{y=h()}catch(x){console.error(`[network] failed to resolve planx-networkd binary: ${x instanceof Error?x.message:String(x)}`),process.exit(1);return}let g=[y,`--socket=${l}`];if(t.foreground){let x={stdio:"inherit"},A=m(process.execPath,g,x);yield new Promise(O=>A.on("exit",()=>O()));return}lAr(u),lAr(d);let _=Ov.openSync(d,"a"),b={stdio:["ignore",_,_],detached:!0},w=m(process.execPath,g,b);if(w.unref(),w.pid&&Ov.writeFileSync(u,String(w.pid)),!(yield ZCr(l,{timeoutMs:5e3}))){console.error(`[network] timeout waiting for socket ${l}`),process.exit(1);return}console.log(`[network] planx-networkd started (pid: ${w.pid}, socket: ${l})`)})}var oAr,aAr,cAr,Prt=p(()=>{ce();Ort();Ej();oAr="planx-networkd.main.mjs",aAr="dist/packages/@planx.machina.at/network/bin/planx-networkd.js",cAr="@planx.machina.at/network/bin/planx-networkd"});var dAr={};fr(dAr,{commands:()=>BEi});var BEi,fAr=p(()=>{ce();Prt();BEi=[{name:"",description:"Start planx-networkd (requires root)",options:[["-b, --background","Run in background (= detached, default)"],["-f, --foreground","Run in foreground (block until SIGTERM)"],["--socket <path>","Unix socket path override"],["--pid-file <path>","PID file path override"],["--log-file <path>","Log file path override"]],action:t=>I(void 0,void 0,void 0,function*(){yield F2e(t??{})})}]});function hAr(t){return I(this,arguments,void 0,function*(e,r={}){let n=yield Hw(e,{killFn:r.killFn,termTimeoutMs:r.termTimeoutMs,killTimeoutMs:r.killTimeoutMs,pollMs:r.pollMs,onEscalate:i=>pAr.warn(`[network] SIGTERM ignored, escalating to SIGKILL (pid: ${i})`)});switch(n.outcome){case"already-dead":case"terminated":case"killed":return!0;case"refused":case"timeout":return!1;default:{let i=n.error;return pAr.error(`[network] cannot verify pid ${e}: ${i instanceof Error?i.message:String(i)}`),!1}}})}var pAr,mAr=p(()=>{ce();lf();Mt();pAr=qe("network")});import*as Ij from"fs";function UEi(t,e,r){return I(this,void 0,void 0,function*(){let n=new Set;if(e.existsSync(t)){let i=parseInt(e.readFileSync(t,"utf-8").trim(),10);if(!i||isNaN(i)){console.warn("[network] pid file content invalid; removing");try{e.unlinkSync(t)}catch{}}else if(yield dee(i,r))n.add(i);else{console.warn(`[network] pid file pid ${i} is not planx-networkd (dead or reused); removing pid file`);try{e.unlinkSync(t)}catch{}}}for(let i of yield $2e(r))n.has(i)||(yield dee(i,r))&&(console.warn(`[network] orphan planx-networkd detected (pid: ${i}, pid file missing/stale)`),n.add(i));return[...n]})}function j2e(){return I(this,arguments,void 0,function*(t={},e={}){var r,n,i,s;let o=RA(),a=(r=t.socket)!==null&&r!==void 0?r:o.socketPath,c=(n=t.pidFile)!==null&&n!==void 0?n:o.pidFile,l=(i=e.fs)!==null&&i!==void 0?i:VEi,u=yield UEi(c,l,e);if(u.length===0){if(console.log("[network] planx-networkd is not running (no live networkd process)"),l.existsSync(a))try{l.unlinkSync(a)}catch{}return!0}((s=e.requireRootFn)!==null&&s!==void 0?s:Sj)("stop");let f=!0;for(let h of u){let m=yield hAr(h,e);m?console.log(`[network] planx-networkd stopped (pid: ${h})`):console.error(`[network] planx-networkd (pid: ${h}) still alive; kill manually: sudo kill -9 ${h}`),f&&(f=m)}if(f){try{l.unlinkSync(c)}catch{}if(l.existsSync(a))try{l.unlinkSync(a)}catch{}}return f})}var VEi,Drt=p(()=>{ce();Ort();mAr();Ej();VEi={existsSync:Ij.existsSync,readFileSync:(t,e)=>Ij.readFileSync(t,e),unlinkSync:Ij.unlinkSync}});var gAr={};fr(gAr,{commands:()=>HEi});var HEi,vAr=p(()=>{ce();Drt();HEi=[{name:"",description:"Stop planx-networkd (requires root)",options:[["--socket <path>","Unix socket path override"],["--pid-file <path>","PID file path override"]],action:t=>I(void 0,void 0,void 0,function*(){(yield j2e(t??{}))||(process.exitCode=1)})}]});function yAr(){return I(this,arguments,void 0,function*(t={},e={}){return(yield j2e({socket:t.socket,pidFile:t.pidFile},{killFn:e.killFn,requireRootFn:e.requireRootFn,fs:e.fs,execFn:e.execFn,platform:e.platform,termTimeoutMs:e.termTimeoutMs,killTimeoutMs:e.killTimeoutMs,pollMs:e.pollMs}))?(yield F2e({socket:t.socket,pidFile:t.pidFile,logFile:t.logFile,foreground:t.foreground},{resolveBinPath:e.resolveBinPath,spawnFn:e.spawnFn,requireRootFn:e.requireRootFn,execFn:e.execFn,platform:e.platform}),!0):(console.error("[network] restart aborted: previous planx-networkd could not be verified dead."),console.error("[network] inspect: sudo lsof -nP -iUDP:5354 / pgrep -fl planx-networkd"),!1)})}var _Ar=p(()=>{ce();Prt();Drt()});var bAr={};fr(bAr,{commands:()=>WEi});var WEi,wAr=p(()=>{ce();_Ar();WEi=[{name:"",description:"Restart planx-networkd (= stop \u2192 start, requires root)",options:[["-f, --foreground","After restart, run in foreground (block until SIGTERM)"],["--socket <path>","Unix socket path override"],["--pid-file <path>","PID file path override"],["--log-file <path>","Log file path override"]],action:t=>I(void 0,void 0,void 0,function*(){(yield yAr(t??{}))||(process.exitCode=1)})}]});import{createRequire as GEi}from"node:module";import*as SAr from"fs";function zEi(){return GEi(import.meta.url)(EAr)}function KEi(t){if(t<60)return`${t}s`;let e=Math.floor(t/60),r=t%60;return e<60?`${e}m ${r}s`:`${Math.floor(e/60)}h ${e%60}m`}function IAr(){return I(this,arguments,void 0,function*(t={},e={}){var r,n;let i=RA(),s=(r=t.socket)!==null&&r!==void 0?r:i.socketPath;if(!SAr.existsSync(s)){console.log("[network] Status: stopped"),console.log(`[network] Socket: ${s} (missing)`);return}let o=(n=e.loadModule)!==null&&n!==void 0?n:zEi,a;try{a=o()}catch(l){console.error(`[network] failed to load ${EAr}: ${l instanceof Error?l.message:String(l)}`),process.exit(1);return}let c=a.createNetworkdClient({socketPath:s});try{let l=yield c.health.query();console.log("[network] Status: running"),console.log(`[network] Socket: ${s}`),console.log(`[network] PID: ${l.pid}`),console.log(`[network] Version: ${l.version}`),console.log(`[network] Native: ${l.nativeVersion}`),console.log(`[network] Platform: ${l.platform}/${l.arch}`),console.log(`[network] Node: ${l.nodeVersion}`),console.log(`[network] Uptime: ${KEi(l.uptime)}`),console.log(`[network] Started: ${l.startedAt}`),l.dns?console.log(`[network] DNS: tld=.${l.dns.tld} aliases=${l.dns.aliasCount} (port 5354/udp)`):console.log("[network] DNS: n/a (older networkd without DNS support)")}catch(l){console.error(`[network] health query failed: ${l instanceof Error?l.message:String(l)}`),process.exit(1)}})}var EAr,TAr=p(()=>{ce();Ej();EAr="@planx.machina.at/network"});var xAr={};fr(xAr,{commands:()=>YEi});var YEi,CAr=p(()=>{ce();TAr();YEi=[{name:"",description:"Show planx-networkd status",options:[["--socket <path>","Unix socket path override"]],action:t=>I(void 0,void 0,void 0,function*(){yield IAr(t??{})})}]});import*as Lu from"fs";function ZEi(t,e){if(!Lu.existsSync(t))return"";let n=Lu.readFileSync(t,"utf-8").split(`
501
501
  `);return n.slice(Math.max(0,n.length-e-1)).join(`
502
502
  `)}function XEi(t,e){return I(this,void 0,void 0,function*(){let r=Lu.existsSync(t)?Lu.statSync(t).size:0;for(;!e.aborted;){if(yield new Promise(i=>setTimeout(i,JEi)),!Lu.existsSync(t))continue;let n=Lu.statSync(t);if(n.size<r&&(r=0),n.size>r){let i=Lu.openSync(t,"r"),s=Buffer.alloc(n.size-r);Lu.readSync(i,s,0,s.length,r),Lu.closeSync(i),process.stdout.write(s.toString("utf-8")),r=n.size}}})}function AAr(){return I(this,arguments,void 0,function*(t={},e={}){var r,n,i;let s=RA(),o=(r=t.logFile)!==null&&r!==void 0?r:s.logFile,a=(n=t.lines)!==null&&n!==void 0?n:QEi;if(!Lu.existsSync(o))console.error(`[network] log file not found: ${o}`),t.follow||process.exit(1);else{let u=ZEi(o,a);u&&process.stdout.write(u)}if(!t.follow)return;let c=(i=e.abortController)!==null&&i!==void 0?i:new AbortController,l=()=>c.abort();process.once("SIGINT",l),process.once("SIGTERM",l);try{yield XEi(o,c.signal)}finally{process.off("SIGINT",l),process.off("SIGTERM",l)}})}var QEi,JEi,OAr=p(()=>{ce();Ej();QEi=100,JEi=500});var PAr={};fr(PAr,{commands:()=>eIi});var eIi,DAr=p(()=>{ce();OAr();eIi=[{name:"",description:"Tail planx-networkd log file",options:[["-f, --follow","Continue streaming log output (tail -f)"],["-n, --lines <count>","Number of last lines to print (default: 100)"],["--log-file <path>","Log file path override"]],action:t=>I(void 0,void 0,void 0,function*(){yield AAr(t??{})})}]});var NAr={};fr(NAr,{commands:()=>tIi});var tIi,kAr=p(()=>{tIi=[{name:"install",description:"Install planx-networkd as a system service (launchd / systemd)",loadChildren:()=>Promise.resolve().then(()=>(rAr(),tAr)).then(t=>t.commands)},{name:"start",description:"Start planx-networkd (requires root)",loadChildren:()=>Promise.resolve().then(()=>(fAr(),dAr)).then(t=>t.commands)},{name:"stop",description:"Stop planx-networkd (requires root)",loadChildren:()=>Promise.resolve().then(()=>(vAr(),gAr)).then(t=>t.commands)},{name:"restart",description:"Restart planx-networkd (= stop \u2192 start, requires root)",loadChildren:()=>Promise.resolve().then(()=>(wAr(),bAr)).then(t=>t.commands)},{name:"status",description:"Show planx-networkd status (health query over unix socket)",loadChildren:()=>Promise.resolve().then(()=>(CAr(),xAr)).then(t=>t.commands)},{name:"logs",description:"Tail planx-networkd log file",loadChildren:()=>Promise.resolve().then(()=>(DAr(),PAr)).then(t=>t.commands)}]});var RAr={};fr(RAr,{commands:()=>nIi});function rIi(t){let e=t.split(":");if(e.length!==2)throw new Error(`Invalid port specification: ${t}. Expected format: <local-port>:<remote-port>`);let r=parseInt(e[0],10),n=parseInt(e[1],10);if(isNaN(r)||isNaN(n))throw new Error(`Invalid port numbers in: ${t}`);if(r<1||r>65535||n<1||n>65535)throw new Error("Port numbers must be between 1 and 65535");return{localPort:r,remotePort:n}}var nIi,MAr=p(()=>{ce();de();yr();ya();jN();ya();nIi=[{name:"",description:"Forward a remote port to local machine via WebRTC",arguments:[["<port-spec>","Port specification in format <local-port>:<remote-port>"]],options:[["-s, --server-id <id>","Session server ID or name",void 0],["-b, --bind <address>","Local address to bind (default: 127.0.0.1)",void 0,"127.0.0.1"]],action:(t,e)=>I(void 0,void 0,void 0,function*(){let r=q(Av),n=q(ni),i=q(jn);yield n.initialize(),i.initialize();try{let{localPort:s,remotePort:o}=rIi(t),a=e.serverId||process.env.PLANX_SERVER_ID;a||(console.error("Server ID is required. Use --server-id or set PLANX_SERVER_ID"),process.exit(1)),console.log(`Starting port forward: localhost:${s} -> remote:${o}`);let c=yield r.start(a,{localPort:s,remotePort:o,bind:e.bind});console.log(`Port forward active: ${c.bind}:${c.localPort} -> ${c.remoteHost}:${c.remotePort}`),console.log("Press Ctrl+C to stop"),yield new Promise(l=>{process.on("SIGINT",()=>{console.log(`
503
503
  Stopping port forward...`),c.stop(),l()})})}catch(s){s instanceof Awe?(console.error(`