ROOT /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/vuln/package/app/.next/server FILE /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/vuln/package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js HITS ['sudoPassword', 'sudo'] outerBaseUrl:b.mitmRouterBaseUrl&&String(b.mitmRouterBaseUrl).trim()||y})}catch(a){return console.log("Error getting MITM status:",a.message),v.NextResponse.json({error:"Failed to get MITM status"},{status:500})}}async function F(a){try{let{apiKey:b,sudoPassword:c,mitmRouterBaseUrl:d,forceKillPort443:e}=await a.json(),f=A(c)||await (0,w.loadEncryptedPassword)()||"";if(!b||B(f))return v.NextResponse.json({error:b?"Missing sudoPassword":"Missing apiKey"},{status:400});if(!D(f))return v.NextResponse.json({error:z?"Administrator required — restart 9Router as Administrator":"Root or sudo password required to start MITM"},{status:403});if(null!=d)try{let a=function(a){let b;if(null==a||""===String(a).trim())return y;let c=String(a).trim().replace outerBaseUrl:b.mitmRouterBaseUrl&&String(b.mitmRouterBaseUrl).trim()||y})}catch(a){return console.log("Error getting MITM status:",a.message),v.NextResponse.json({error:"Failed to get MITM status"},{status:500})}}async function F(a){try{let{apiKey:b,sudoPassword:c,mitmRouterBaseUrl:d,forceKillPort443:e}=await a.json(),f=A(c)||await (0,w.loadEncryptedPassword)()||"";if(!b||B(f))return v.NextResponse.json({error:b?"Missing sudoPassword":"Missing apiKey"},{status:400});if(!D(f))return v.NextResponse.json({error:z?"Administrator required — restart 9Router as Administrator":"Root or sudo password required to start MITM"},{status:403});if(null!=d)try{let a=function(a){let b;if(null==a||""===String(a).trim())return y;let c=String(a).trim().replace FILE /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/vuln/package/app/.next/server/app/api/tunnel/tailscale-check/route.js HITS ['tailscaled'] wsHide:!0,env:{...process.env,PATH:D},timeout:1500}),!0}catch{return!1}}async function F(){try{return await C(`tailscale --socket ${A.Z2} status --json`,{windowsHide:!0,env:{...process.env,PATH:D},timeout:1500}),!0}catch{try{return await C("pgrep -x tailscaled",{windowsHide:!0,timeout:1500}),!0}catch{return!1}}}async function G(){try{let a=(0,A.xh)(),b=w().platform(),[c,d]=await Promise.all(["darwin"===b?E():Promise.resolve(!1),a?F():Promise.resolve(!1)]),e=!!d&&(0,A.a$)(),f=!!((0,B.getCachedPassword)()||await (0,B.loadEncryptedPassword)());return z.NextResponse.json({installed:a,loggedIn:e,platform:b,brewAvailable:c,daemonRunning:d,hasCachedPassword:f})}catch(a){return z.NextResponse.json({error:a.message},{status:500})}}let H=new e.AppRou FILE /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/vuln/package/app/.next/server/app/api/tunnel/tailscale-install/route.js HITS ['sudoPassword', 'sudo'] {process.env.PATH||""}`;async function n(a){let b=await a.json().catch(()=>({})),c=f().platform(),d="darwin"===c&&function(){try{return(0,g.execSync)("which brew",{stdio:"ignore",windowsHide:!0,env:{...process.env,PATH:m}}),!0}catch{return!1}}(),e=b.sudoPassword||(0,i.getCachedPassword)()||await (0,i.loadEncryptedPassword)()||"";if("win32"!==c&&!d&&!e.trim())return new Response(JSON.stringify({error:"Sudo password is required"}),{status:400,headers:{"Content-Type":"application/json"}});let j=(0,k.C7)()?.shortId||(0,k.jd)(),l=new TextEncoder;return new Response(new ReadableStream({async start(a){let b=(b,c)=>{a.enqueue(l.encode(`event: ${b} data: ${JSON.stringify(c)} `))};try{let a=await (0,h.A1)(e,j,a=>{b("progress",{message:a})});b("done" {process.env.PATH||""}`;async function n(a){let b=await a.json().catch(()=>({})),c=f().platform(),d="darwin"===c&&function(){try{return(0,g.execSync)("which brew",{stdio:"ignore",windowsHide:!0,env:{...process.env,PATH:m}}),!0}catch{return!1}}(),e=b.sudoPassword||(0,i.getCachedPassword)()||await (0,i.loadEncryptedPassword)()||"";if("win32"!==c&&!d&&!e.trim())return new Response(JSON.stringify({error:"Sudo password is required"}),{status:400,headers:{"Content-Type":"application/json"}});let j=(0,k.C7)()?.shortId||(0,k.jd)(),l=new TextEncoder;return new Response(new ReadableStream({async start(a){let b=(b,c)=>{a.enqueue(l.encode(`event: ${b} data: ${JSON.stringify(c)} `))};try{let a=await (0,h.A1)(e,j,a=>{b("progress",{message:a})});b("done" FILE /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/vuln/package/app/.next/server/app/api/tunnel/tailscale-start-daemon/route.js HITS ['sudoPassword', 'sudo'] 11:a=>{a.exports=require("crypto")},55591:a=>{a.exports=require("https")},62257:(a,b,c)=>{c.r(b),c.d(b,{POST:()=>j});var d=c(71266),e=c(86606),f=c(13774),g=c(50514),h=c(37770),i=c(39990);async function j(a){try{let b=(await a.json().catch(()=>({}))).sudoPassword||(0,g.getCachedPassword)()||await (0,g.loadEncryptedPassword)()||"";return await (0,f.OZ)(b),e.NextResponse.json({success:!0})}catch(a){return console.error("Tailscale start daemon error:",a),e.NextResponse.json({error:a.message},{status:500})}}(0,g.initDbHooks)(h.mt,h.Xx),(0,i.D)([j]),(0,d.A)(j,"40a24fd44912cb525707d1a793ba48189e8e0b0eb9",null)},63033:a=>{a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},71266:(a,b,c)=>{Object.defineProperty(b,"A 11:a=>{a.exports=require("crypto")},55591:a=>{a.exports=require("https")},62257:(a,b,c)=>{c.r(b),c.d(b,{POST:()=>j});var d=c(71266),e=c(86606),f=c(13774),g=c(50514),h=c(37770),i=c(39990);async function j(a){try{let b=(await a.json().catch(()=>({}))).sudoPassword||(0,g.getCachedPassword)()||await (0,g.loadEncryptedPassword)()||"";return await (0,f.OZ)(b),e.NextResponse.json({success:!0})}catch(a){return console.error("Tailscale start daemon error:",a),e.NextResponse.json({error:a.message},{status:500})}}(0,g.initDbHooks)(h.mt,h.Xx),(0,i.D)([j]),(0,d.A)(j,"40a24fd44912cb525707d1a793ba48189e8e0b0eb9",null)},63033:a=>{a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},71266:(a,b,c)=>{Object.defineProperty(b,"A FILE /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/vuln/package/app/.next/server/app/api/version/shutdown/route.js HITS ['sudo'] T /PID ${b}`,{stdio:"ignore",windowsHide:!0,timeout:3e3})}catch{try{(0,d.execSync)(`powershell -NonInteractive -WindowStyle Hidden -Command "Stop-Process -Id ${b} -Force"`,{stdio:"ignore",windowsHide:!0,timeout:3e3})}catch{}}else try{(0,d.execSync)(`sudo -n kill -9 ${b} 2>/dev/null`,{stdio:"ignore",timeout:3e3})}catch{try{process.kill(b,"SIGKILL")}catch{}}try{h().unlinkSync(a)}catch{}}catch{}}();let a=function(){let a=[];if("win32"===process.platform){try{(0,d.execSync)('powershell -NonInteractive -WindowStyle Hidden -Command "Get-WmiObject Win32_Process -Filter \'Name=\\"node.exe\\"\' | Select-Object ProcessId,CommandLine | ConvertTo-Csv -NoTypeInformation"',{encoding:"utf8",windowsHide:!0,timeout:5e3}).split("\n").slice(1).filter(a=>a.tri FILE /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/vuln/package/app/.next/server/app/api/version/update/route.js HITS ['sudo'] T /PID ${b}`,{stdio:"ignore",windowsHide:!0,timeout:3e3})}catch{try{(0,d.execSync)(`powershell -NonInteractive -WindowStyle Hidden -Command "Stop-Process -Id ${b} -Force"`,{stdio:"ignore",windowsHide:!0,timeout:3e3})}catch{}}else try{(0,d.execSync)(`sudo -n kill -9 ${b} 2>/dev/null`,{stdio:"ignore",timeout:3e3})}catch{try{process.kill(b,"SIGKILL")}catch{}}try{h().unlinkSync(a)}catch{}}catch{}}();let a=function(){let a=[];if("win32"===process.platform){try{(0,d.execSync)('powershell -NonInteractive -WindowStyle Hidden -Command "Get-WmiObject Win32_Process -Filter \'Name=\\"node.exe\\"\' | Select-Object ProcessId,CommandLine | ConvertTo-Csv -NoTypeInformation"',{encoding:"utf8",windowsHide:!0,timeout:5e3}).split("\n").slice(1).filter(a=>a.tri FILE /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/vuln/package/app/.next/server/chunks/1574.js HITS ['sudoPassword', 'sudo'] b=await a.json();return av(b.installed),b}}catch{}return av(!1),{installed:!1}},a$=async()=>{ax(!0),ap(null),az([]);try{let a=await fetch("/api/tunnel/tailscale-install",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sudoPassword:aA})});aB("");let b=a.body.getReader(),c=new TextDecoder,d="";for(;;){let{done:a,value:e}=await b.read();if(a)break;let f=(d+=c.decode(e,{stream:!0})).split("\n\n");for(let a of(d=f.pop()||"",f)){let b=a.split("\n"),c="progress",d=null;for(let a of b)if(a.startsWith("event: ")&&(c=a.slice(7).trim()),a.startsWith("data: "))try{d=JSON.parse(a.slice(6))}catch{}if(d)if("progress"===c)az(a=>[...a.slice(-50),d.message]);else if("done"===c){av(!0),ax(!1),aF(!1),a2();return}else"error"===c& b=await a.json();return av(b.installed),b}}catch{}return av(!1),{installed:!1}},a$=async()=>{ax(!0),ap(null),az([]);try{let a=await fetch("/api/tunnel/tailscale-install",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sudoPassword:aA})});aB("");let b=a.body.getReader(),c=new TextDecoder,d="";for(;;){let{done:a,value:e}=await b.read();if(a)break;let f=(d+=c.decode(e,{stream:!0})).split("\n\n");for(let a of(d=f.pop()||"",f)){let b=a.split("\n"),c="progress",d=null;for(let a of b)if(a.startsWith("event: ")&&(c=a.slice(7).trim()),a.startsWith("data: "))try{d=JSON.parse(a.slice(6))}catch{}if(d)if("progress"===c)az(a=>[...a.slice(-50),d.message]);else if("done"===c){av(!0),ax(!1),aF(!1),a2();return}else"error"===c& FILE /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/vuln/package/app/.next/server/chunks/3774.js HITS ['Running install script', 'tailscale up', 'tailscaled', 'sudo'] cale.com/install.sh"],{stdio:["ignore","pipe","pipe"],windowsHide:!0}),f="",g="";e.stdout.on("data",a=>{f+=a.toString()}),e.stderr.on("data",a=>{g+=a.toString()}),e.on("exit",e=>{if(0!==e)return d(Error(`Failed to download install script: ${g}`));b("Running install script...");let h=(0,j.spawn)("sudo",["-S","sh"],{stdio:["pipe","pipe","pipe"],windowsHide:!0}),i="";h.stdout.on("data",a=>{let c=a.toString().trim();c&&b(c)}),h.stderr.on("data",a=>{i+=a.toString()}),h.on("close",a=>{0===a?c():d(Error(i.includes("incorrect password")||i.includes("Sorry")?"Wrong sudo password":i||`Exit code ${a}`))}),h.on("error",d),h.stdin.write(`${a} `),h.stdin.write(f),h.stdin.end()}),e.on("error",d)})}async function N(a){let b=g().join(i().tmpdir(),"tailscale nsole.log(`[Tailscale] login authUrl detected (${b})`),f.unref(),c({authUrl:a}))},l=setInterval(()=>{if(g)return;let a=Q();a&&k(a,"status")},500),m=setTimeout(()=>{if(g)return;g=!0,clearInterval(l),f.unref();let a=i(h)||Q();a?c({authUrl:a}):d(Error("tailscale up timed out without auth URL"))},15e3),n=a=>{let b=i(h+=a.toString());b&&k(b,"stdout")};f.stdout.on("data",n),f.stderr.on("data",n),f.on("error",a=>{g||(g=!0,clearTimeout(m),clearInterval(l),console.error(`[Tailscale] login spawn error: ${a.message}`),d(a))}),f.on("exit",a=>{if(g)return;console.log(`[Tailscale] login exit code=${a}`);let b=i(h)||Q();if(b)return void k(b,"exit");if(E()){g=!0,clearTimeout(m),clearInterval(l),c({alreadyLoggedIn:!0});return}})}):Promise.reject(Error("Tail c(19931);var m=c(81372);let n=(0,k.promisify)(j.exec),o=g().join(m.DATA_DIR,"bin"),p="darwin"===i().platform();i().platform();let q="win32"===i().platform(),r=g().join(o,q?"tailscale.exe":"tailscale"),s=g().join(m.DATA_DIR,"tailscale"),t=g().join(s,"tailscaled.sock"),u=q?[]:["--socket",t],v="C:\\Program Files\\Tailscale\\tailscale.exe",w=["/usr/local/bin/tailscale","/opt/homebrew/bin/tailscale","/usr/bin/tailscale"],x={value:void 0,fetchedAt:0,refreshing:!1},y={value:!1,fetchedAt:0,refreshing:!1},z={value:null,port:null,fetchedAt:0,refreshing:!1};function A(){return e().existsSync(r)?r:q&&e().existsSync(v)?v:!q&&w.find(a=>e().existsSync(a))||null}function B(){return Date.now()-x.fetchedAt>1e4&&(x.refreshing||(x.refreshing=!0,n("which tailsc FILE /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/vuln/package/app/.next/server/chunks/514.js HITS ['sudo'] >/dev/null || \\ certutil -d "$db" -D -n "${c}" 2>/dev/null || true fi fi done `;return new Promise(a=>{f(d,{shell:"/bin/bash"},()=>a())})}async function y(a,b){if(!h()){k(`🔐 Cert: cannot install to system store without sudo — trust this file on clients: ${b}`),await x(b,"add");return}let c=p(),d=`${c.dir}/9router-root-ca.crt`,e=`cp "${b}" "${d}" && (${c.cmd} 2>/dev/null || true)`;try{await g(e,a),await x(b,"add"),k(`🔐 Cert: ✅ installed to Linux trust store (${c.dir}) and user browser databases`)}catch(a){throw Error(`Certificate install failed: ${a.message}`)}}async function z(a){if(await x(null,"delete"),!h())return;let b=p(),c=`${b.dir}/9router-root-ca.crt`,d=`rm -f "${c}" && (${b.cmd} 2>/dev/null || true)`; FILE /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/vuln/package/app/.next/server/chunks/8012.js HITS ['sudo'] finally{try{g.unlinkSync(d)}catch{}}}let o="win32"===process.platform,p="darwin"===process.platform,q=o?h.join(process.env.SystemRoot||"C:\\Windows","System32","drivers","etc","hosts"):"/etc/hosts";function r(){if(o)return!1;try{return f("command -v sudo",{stdio:"ignore",windowsHide:!0}),!0}catch{return!1}}function s(){if(o||!r())return!0;try{return f("sudo -n true",{stdio:"ignore",windowsHide:!0}),!0}catch{return!1}}function t(a,b){return new Promise((c,d)=>{let f=r(),g=f?e("sudo",["-S","sh","-c",a],{stdio:["pipe","pipe","pipe"],windowsHide:!0}):e("sh",["-c",a],{stdio:["ignore","pipe","pipe"],windowsHide:!0}),h="",i="";g.stdout.on("data",a=>{h+=a}),g.stderr.on("data",a=>{i+=a}),g.on("close",a=>{0===a?c(h):d(Error(i||`Exit code ${a}`))}),f& FILE /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/vuln/package/app/.next/server/chunks/9102.js HITS ['sudoPassword', 'sudo'] g&&(B?F(a,""):(r(a),l(!0),t(null)))},F=async(c,d,e=!1)=>{j(!0),v(null);try{let f;if("trust-cert"===c)f=await fetch("/api/cli-tools/antigravity-mitm",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"trust-cert",sudoPassword:d})});else if("start"===c){let c=o?.trim()||(a?.length>0?a[0].key:null)||(b?null:"sk_9router");f=await fetch("/api/cli-tools/antigravity-mitm",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:c,sudoPassword:d,mitmRouterBaseUrl:w.trim()||I,forceKillPort443:e})})}else f=await fetch("/api/cli-tools/antigravity-mitm",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({sudoPassword:d})});if(!f.ok){let a=await f.json().ca g&&(B?F(a,""):(r(a),l(!0),t(null)))},F=async(c,d,e=!1)=>{j(!0),v(null);try{let f;if("trust-cert"===c)f=await fetch("/api/cli-tools/antigravity-mitm",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"trust-cert",sudoPassword:d})});else if("start"===c){let c=o?.trim()||(a?.length>0?a[0].key:null)||(b?null:"sk_9router");f=await fetch("/api/cli-tools/antigravity-mitm",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:c,sudoPassword:d,mitmRouterBaseUrl:w.trim()||I,forceKillPort443:e})})}else f=await fetch("/api/cli-tools/antigravity-mitm",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({sudoPassword:d})});if(!f.ok){let a=await f.json().ca ROOT /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/fixed/package/app/.next-cli-build/server FILE /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/fixed/package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js HITS ['sudoPassword', 'sudo'] outerBaseUrl:b.mitmRouterBaseUrl&&String(b.mitmRouterBaseUrl).trim()||y})}catch(a){return console.log("Error getting MITM status:",a.message),v.NextResponse.json({error:"Failed to get MITM status"},{status:500})}}async function F(a){try{let{apiKey:b,sudoPassword:c,mitmRouterBaseUrl:d,forceKillPort443:e}=await a.json(),f=A(c)||await (0,w.loadEncryptedPassword)()||"";if(!b||B(f))return v.NextResponse.json({error:b?"Missing sudoPassword":"Missing apiKey"},{status:400});if(!D(f))return v.NextResponse.json({error:z?"Administrator required — restart 9Router as Administrator":"Root or sudo password required to start MITM"},{status:403});if(null!=d)try{let a=function(a){let b;if(null==a||""===String(a).trim())return y;let c=String(a).trim().replace outerBaseUrl:b.mitmRouterBaseUrl&&String(b.mitmRouterBaseUrl).trim()||y})}catch(a){return console.log("Error getting MITM status:",a.message),v.NextResponse.json({error:"Failed to get MITM status"},{status:500})}}async function F(a){try{let{apiKey:b,sudoPassword:c,mitmRouterBaseUrl:d,forceKillPort443:e}=await a.json(),f=A(c)||await (0,w.loadEncryptedPassword)()||"";if(!b||B(f))return v.NextResponse.json({error:b?"Missing sudoPassword":"Missing apiKey"},{status:400});if(!D(f))return v.NextResponse.json({error:z?"Administrator required — restart 9Router as Administrator":"Root or sudo password required to start MITM"},{status:403});if(null!=d)try{let a=function(a){let b;if(null==a||""===String(a).trim())return y;let c=String(a).trim().replace FILE /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/fixed/package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js HITS ['tailscaled'] wsHide:!0,env:{...process.env,PATH:D},timeout:1500}),!0}catch{return!1}}async function F(){try{return await C(`tailscale --socket ${A.Z2} status --json`,{windowsHide:!0,env:{...process.env,PATH:D},timeout:1500}),!0}catch{try{return await C("pgrep -x tailscaled",{windowsHide:!0,timeout:1500}),!0}catch{return!1}}}async function G(){try{let a=(0,A.xh)(),b=w().platform(),[c,d]=await Promise.all(["darwin"===b?E():Promise.resolve(!1),a?F():Promise.resolve(!1)]),e=!!d&&(0,A.a$)(),f=!!((0,B.getCachedPassword)()||await (0,B.loadEncryptedPassword)());return z.NextResponse.json({installed:a,loggedIn:e,platform:b,brewAvailable:c,daemonRunning:d,hasCachedPassword:f})}catch(a){return z.NextResponse.json({error:a.message},{status:500})}}let H=new e.AppRou FILE /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/fixed/package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js HITS ['sudoPassword', 'sudo'] {process.env.PATH||""}`;async function n(a){let b=await a.json().catch(()=>({})),c=f().platform(),d="darwin"===c&&function(){try{return(0,g.execSync)("which brew",{stdio:"ignore",windowsHide:!0,env:{...process.env,PATH:m}}),!0}catch{return!1}}(),e=b.sudoPassword||(0,i.getCachedPassword)()||await (0,i.loadEncryptedPassword)()||"";if("win32"!==c&&!d&&!e.trim())return new Response(JSON.stringify({error:"Sudo password is required"}),{status:400,headers:{"Content-Type":"application/json"}});let j=(0,k.C7)()?.shortId||(0,k.jd)(),l=new TextEncoder;return new Response(new ReadableStream({async start(a){let b=!1,c=(c,d)=>{if(!b)try{a.enqueue(l.encode(`event: ${c} data: ${JSON.stringify(d)} `))}catch{b=!0}};try{let a=await (0,h.A1)(e,j,a=>{c("progre {process.env.PATH||""}`;async function n(a){let b=await a.json().catch(()=>({})),c=f().platform(),d="darwin"===c&&function(){try{return(0,g.execSync)("which brew",{stdio:"ignore",windowsHide:!0,env:{...process.env,PATH:m}}),!0}catch{return!1}}(),e=b.sudoPassword||(0,i.getCachedPassword)()||await (0,i.loadEncryptedPassword)()||"";if("win32"!==c&&!d&&!e.trim())return new Response(JSON.stringify({error:"Sudo password is required"}),{status:400,headers:{"Content-Type":"application/json"}});let j=(0,k.C7)()?.shortId||(0,k.jd)(),l=new TextEncoder;return new Response(new ReadableStream({async start(a){let b=!1,c=(c,d)=>{if(!b)try{a.enqueue(l.encode(`event: ${c} data: ${JSON.stringify(d)} `))}catch{b=!0}};try{let a=await (0,h.A1)(e,j,a=>{c("progre FILE /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/fixed/package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js HITS ['sudoPassword', 'sudo'] 11:a=>{a.exports=require("crypto")},55591:a=>{a.exports=require("https")},62257:(a,b,c)=>{c.r(b),c.d(b,{POST:()=>j});var d=c(71266),e=c(86606),f=c(13774),g=c(50514),h=c(37770),i=c(39990);async function j(a){try{let b=(await a.json().catch(()=>({}))).sudoPassword||(0,g.getCachedPassword)()||await (0,g.loadEncryptedPassword)()||"";return await (0,f.OZ)(b),e.NextResponse.json({success:!0})}catch(a){return console.error("Tailscale start daemon error:",a),e.NextResponse.json({error:a.message},{status:500})}}(0,g.initDbHooks)(h.mt,h.Xx),(0,i.D)([j]),(0,d.A)(j,"405fab68578c74f8ea837a3f9f875cd1789d620d57",null)},63033:a=>{a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},71266:(a,b,c)=>{Object.defineProperty(b,"A 11:a=>{a.exports=require("crypto")},55591:a=>{a.exports=require("https")},62257:(a,b,c)=>{c.r(b),c.d(b,{POST:()=>j});var d=c(71266),e=c(86606),f=c(13774),g=c(50514),h=c(37770),i=c(39990);async function j(a){try{let b=(await a.json().catch(()=>({}))).sudoPassword||(0,g.getCachedPassword)()||await (0,g.loadEncryptedPassword)()||"";return await (0,f.OZ)(b),e.NextResponse.json({success:!0})}catch(a){return console.error("Tailscale start daemon error:",a),e.NextResponse.json({error:a.message},{status:500})}}(0,g.initDbHooks)(h.mt,h.Xx),(0,i.D)([j]),(0,d.A)(j,"405fab68578c74f8ea837a3f9f875cd1789d620d57",null)},63033:a=>{a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},71266:(a,b,c)=>{Object.defineProperty(b,"A FILE /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/fixed/package/app/.next-cli-build/server/app/api/version/shutdown/route.js HITS ['sudo'] T /PID ${b}`,{stdio:"ignore",windowsHide:!0,timeout:3e3})}catch{try{(0,d.execSync)(`powershell -NonInteractive -WindowStyle Hidden -Command "Stop-Process -Id ${b} -Force"`,{stdio:"ignore",windowsHide:!0,timeout:3e3})}catch{}}else try{(0,d.execSync)(`sudo -n kill -9 ${b} 2>/dev/null`,{stdio:"ignore",timeout:3e3})}catch{try{process.kill(b,"SIGKILL")}catch{}}try{h().unlinkSync(a)}catch{}}catch{}}();let a=function(){let a=[];if("win32"===process.platform){try{(0,d.execSync)('powershell -NonInteractive -WindowStyle Hidden -Command "Get-WmiObject Win32_Process -Filter \'Name=\\"node.exe\\"\' | Select-Object ProcessId,CommandLine | ConvertTo-Csv -NoTypeInformation"',{encoding:"utf8",windowsHide:!0,timeout:5e3}).split("\n").slice(1).filter(a=>a.tri FILE /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/fixed/package/app/.next-cli-build/server/app/api/version/update/route.js HITS ['sudo'] T /PID ${b}`,{stdio:"ignore",windowsHide:!0,timeout:3e3})}catch{try{(0,d.execSync)(`powershell -NonInteractive -WindowStyle Hidden -Command "Stop-Process -Id ${b} -Force"`,{stdio:"ignore",windowsHide:!0,timeout:3e3})}catch{}}else try{(0,d.execSync)(`sudo -n kill -9 ${b} 2>/dev/null`,{stdio:"ignore",timeout:3e3})}catch{try{process.kill(b,"SIGKILL")}catch{}}try{h().unlinkSync(a)}catch{}}catch{}}();let a=function(){let a=[];if("win32"===process.platform){try{(0,d.execSync)('powershell -NonInteractive -WindowStyle Hidden -Command "Get-WmiObject Win32_Process -Filter \'Name=\\"node.exe\\"\' | Select-Object ProcessId,CommandLine | ConvertTo-Csv -NoTypeInformation"',{encoding:"utf8",windowsHide:!0,timeout:5e3}).split("\n").slice(1).filter(a=>a.tri FILE /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/fixed/package/app/.next-cli-build/server/chunks/1574.js HITS ['sudoPassword', 'sudo'] b=await a.json();return av(b.installed),b}}catch{}return av(!1),{installed:!1}},a$=async()=>{ax(!0),ap(null),az([]);try{let a=await fetch("/api/tunnel/tailscale-install",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sudoPassword:aA})});aB("");let b=a.body.getReader(),c=new TextDecoder,d="";for(;;){let{done:a,value:e}=await b.read();if(a)break;let f=(d+=c.decode(e,{stream:!0})).split("\n\n");for(let a of(d=f.pop()||"",f)){let b=a.split("\n"),c="progress",d=null;for(let a of b)if(a.startsWith("event: ")&&(c=a.slice(7).trim()),a.startsWith("data: "))try{d=JSON.parse(a.slice(6))}catch{}if(d)if("progress"===c)az(a=>[...a.slice(-50),d.message]);else if("done"===c){av(!0),ax(!1),aF(!1),a2();return}else"error"===c& b=await a.json();return av(b.installed),b}}catch{}return av(!1),{installed:!1}},a$=async()=>{ax(!0),ap(null),az([]);try{let a=await fetch("/api/tunnel/tailscale-install",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sudoPassword:aA})});aB("");let b=a.body.getReader(),c=new TextDecoder,d="";for(;;){let{done:a,value:e}=await b.read();if(a)break;let f=(d+=c.decode(e,{stream:!0})).split("\n\n");for(let a of(d=f.pop()||"",f)){let b=a.split("\n"),c="progress",d=null;for(let a of b)if(a.startsWith("event: ")&&(c=a.slice(7).trim()),a.startsWith("data: "))try{d=JSON.parse(a.slice(6))}catch{}if(d)if("progress"===c)az(a=>[...a.slice(-50),d.message]);else if("done"===c){av(!0),ax(!1),aF(!1),a2();return}else"error"===c& FILE /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/fixed/package/app/.next-cli-build/server/chunks/3774.js HITS ['Running install script', 'tailscale up', 'tailscaled', 'sudo'] cale.com/install.sh"],{stdio:["ignore","pipe","pipe"],windowsHide:!0}),h="",j="";f.stdout.on("data",a=>{h+=a.toString()}),f.stderr.on("data",a=>{j+=a.toString()}),f.on("exit",f=>{if(0!==f)return d(Error(`Failed to download install script: ${j}`));b("Running install script...");let m=g().join(i().tmpdir(),`tailscale-install-${k().randomBytes(8).toString("hex")}.sh`);try{e().writeFileSync(m,h,{mode:448})}catch(a){return d(Error(`Failed to write install script: ${a.message}`))}let n=()=>{try{e().unlinkSync(m)}catch{}},o=(0,l.spawn)("sudo",["-S","sh",m],{stdio:["pipe","pipe","pipe"],windowsHide:!0}),p="";o.stdout.on("data",a=>{let c=a.toString().trim();c&&b(c)}),o.stderr.on("data",a=>{p+=a.toString()}),o.on("close",a=>{n(),0===a?c():d(Error(p.i nsole.log(`[Tailscale] login authUrl detected (${b})`),f.unref(),c({authUrl:a}))},k=setInterval(()=>{if(g)return;let a=S();a&&j(a,"status")},500),m=setTimeout(()=>{if(g)return;g=!0,clearInterval(k),f.unref();let a=i(h)||S();a?c({authUrl:a}):d(Error("tailscale up timed out without auth URL"))},15e3),n=a=>{let b=i(h+=a.toString());b&&j(b,"stdout")};f.stdout.on("data",n),f.stderr.on("data",n),f.on("error",a=>{g||(g=!0,clearTimeout(m),clearInterval(k),console.error(`[Tailscale] login spawn error: ${a.message}`),d(a))}),f.on("exit",a=>{if(g)return;console.log(`[Tailscale] login exit code=${a}`);let b=i(h)||S();if(b)return void j(b,"exit");if(G()){g=!0,clearTimeout(m),clearInterval(k),c({alreadyLoggedIn:!0});return}})}):Promise.reject(Error("Tail c(19931);var o=c(81372);let p=(0,m.promisify)(l.exec),q=g().join(o.DATA_DIR,"bin"),r="darwin"===i().platform();i().platform();let s="win32"===i().platform(),t=g().join(q,s?"tailscale.exe":"tailscale"),u=g().join(o.DATA_DIR,"tailscale"),v=g().join(u,"tailscaled.sock"),w=s?[]:["--socket",v],x="C:\\Program Files\\Tailscale\\tailscale.exe",y=["/usr/local/bin/tailscale","/opt/homebrew/bin/tailscale","/usr/bin/tailscale"],z={value:void 0,fetchedAt:0,refreshing:!1},A={value:!1,fetchedAt:0,refreshing:!1},B={value:null,port:null,fetchedAt:0,refreshing:!1};function C(){return e().existsSync(t)?t:s&&e().existsSync(x)?x:!s&&y.find(a=>e().existsSync(a))||null}function D(){return Date.now()-z.fetchedAt>1e4&&(z.refreshing||(z.refreshing=!0,p("which tailsc FILE /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/fixed/package/app/.next-cli-build/server/chunks/4185.js HITS ['sudoPassword', 'sudo'] g&&(B?F(a,""):(r(a),l(!0),t(null)))},F=async(c,d,e=!1)=>{j(!0),v(null);try{let f;if("trust-cert"===c)f=await fetch("/api/cli-tools/antigravity-mitm",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"trust-cert",sudoPassword:d})});else if("start"===c){let c=o?.trim()||(a?.length>0?a[0].key:null)||(b?null:"sk_9router");f=await fetch("/api/cli-tools/antigravity-mitm",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:c,sudoPassword:d,mitmRouterBaseUrl:w.trim()||J,forceKillPort443:e})})}else f=await fetch("/api/cli-tools/antigravity-mitm",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({sudoPassword:d})});if(!f.ok){let a=await f.json().ca g&&(B?F(a,""):(r(a),l(!0),t(null)))},F=async(c,d,e=!1)=>{j(!0),v(null);try{let f;if("trust-cert"===c)f=await fetch("/api/cli-tools/antigravity-mitm",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"trust-cert",sudoPassword:d})});else if("start"===c){let c=o?.trim()||(a?.length>0?a[0].key:null)||(b?null:"sk_9router");f=await fetch("/api/cli-tools/antigravity-mitm",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:c,sudoPassword:d,mitmRouterBaseUrl:w.trim()||J,forceKillPort443:e})})}else f=await fetch("/api/cli-tools/antigravity-mitm",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({sudoPassword:d})});if(!f.ok){let a=await f.json().ca FILE /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/fixed/package/app/.next-cli-build/server/chunks/514.js HITS ['sudo'] >/dev/null || \\ certutil -d "$db" -D -n "${c}" 2>/dev/null || true fi fi done `;return new Promise(a=>{f(d,{shell:"/bin/bash"},()=>a())})}async function y(a,b){if(!h()){k(`🔐 Cert: cannot install to system store without sudo — trust this file on clients: ${b}`),await x(b,"add");return}let c=p(),d=`${c.dir}/9router-root-ca.crt`,e=`cp "${b}" "${d}" && (${c.cmd} 2>/dev/null || true)`;try{await g(e,a),await x(b,"add"),k(`🔐 Cert: ✅ installed to Linux trust store (${c.dir}) and user browser databases`)}catch(a){throw Error(`Certificate install failed: ${a.message}`)}}async function z(a){if(await x(null,"delete"),!h())return;let b=p(),c=`${b.dir}/9router-root-ca.crt`,d=`rm -f "${c}" && (${b.cmd} 2>/dev/null || true)`; FILE /data/pruva/runs/3ea760f8-bc97-4c4a-bb13-39d93abcf770/bundle/artifacts/9router/fixed/package/app/.next-cli-build/server/chunks/8012.js HITS ['sudo'] finally{try{g.unlinkSync(d)}catch{}}}let o="win32"===process.platform,p="darwin"===process.platform,q=o?h.join(process.env.SystemRoot||"C:\\Windows","System32","drivers","etc","hosts"):"/etc/hosts";function r(){if(o)return!1;try{return f("command -v sudo",{stdio:"ignore",windowsHide:!0}),!0}catch{return!1}}function s(){if(o||!r())return!0;try{return f("sudo -n true",{stdio:"ignore",windowsHide:!0}),!0}catch{return!1}}function t(a,b){return new Promise((c,d)=>{let f=r(),g=f?e("sudo",["-S","sh","-c",a],{stdio:["pipe","pipe","pipe"],windowsHide:!0}):e("sh",["-c",a],{stdio:["ignore","pipe","pipe"],windowsHide:!0}),h="",i="";g.stdout.on("data",a=>{h+=a}),g.stderr.on("data",a=>{i+=a}),g.on("close",a=>{0===a?c(h):d(Error(i||`Exit code ${a}`))}),f&