simplecloud 0.0.1-beta.32 → 0.0.1-beta.33

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/dist/index.js CHANGED
@@ -177,7 +177,7 @@ ${q.comment}`:q.comment}this.doc.range[2]=q.offset;break}default:this.errors.pus
177
177
  `)}catch{return""}}async attach(A,q){let F=HL(A);if((await this.status(A,q)).status!=="running")throw new Error(`Component ${A} is not running`);return new Promise((E,g)=>{let Z=AIA("screen",["-r",F],{stdio:"inherit"});Z.on("error",g),Z.on("close",()=>E())})}}var qIA;var EIA=NA(()=>{uY();Ox();qIA=e0q(s0q)});var $IA={};Bg($IA,{DockerRunner:()=>ZIA});import{exec as AHq,spawn as qHq}from"child_process";import*as gIA from"path";import{promisify as FHq}from"util";class ZIA{type="docker";async isAvailable(){if(!await YU("docker"))return!1;try{return await B0("docker info"),!0}catch{return!1}}async start(A){let{componentId:q,installationDir:F,jarPath:K,javaArgs:E=[],env:g={}}=A,Z=o2(q),$=await this.status(q,F);if($.status==="running")return{success:!1,message:`Component ${q} is already running in container "${Z}"`,containerId:$.containerId};await B0(`docker rm -f ${Z} 2>/dev/null || true`).catch(()=>{});let U=gIA.basename(K),G="/app",Y=["run","-d","--name",Z,"--restart","unless-stopped","-v",`${F}:${G}`,"-w",G];for(let[Q,J]of Object.entries(g))Y.push("-e",`${Q}=${J}`);Y.push(KHq),Y.push("java"),Y.push(...E),Y.push("-jar"),Y.push(U);try{let{stdout:Q}=await B0(`docker ${Y.join(" ")}`),J=Q.trim().slice(0,12);if(await new Promise((_)=>setTimeout(_,1000)),(await this.status(q,F)).status==="running")return{success:!0,message:`Started ${q} in container "${Z}"`,containerId:J};return{success:!1,message:`Container started but exited immediately. Logs:
178
178
  ${await this.logs(q,F,20)}`}}catch(Q){let J=Q instanceof Error?Q.message:String(Q);return{success:!1,message:`Failed to start ${q}: ${J}`}}}async stop(A,q){let F=o2(A);try{return await B0(`docker stop ${F}`),await B0(`docker rm ${F}`),{success:!0,message:`Stopped and removed container "${F}"`}}catch(K){let E=K instanceof Error?K.message:String(K);if(E.includes("No such container"))return{success:!0,message:`Container "${F}" was not running`};return{success:!1,message:`Failed to stop ${A}: ${E}`}}}async status(A,q){let F=o2(A);try{let{stdout:K}=await B0(`docker inspect --format '{{.State.Running}} {{.Id}} {{.State.StartedAt}}' ${F}`),[E,g,Z]=K.trim().split(" ");if(E==="true"){let $=new Date(Z??Date.now()),U=Math.floor((Date.now()-$.getTime())/1000);return{status:"running",containerId:g?.slice(0,12),uptime:U}}return{status:"stopped"}}catch{return{status:"stopped"}}}async logs(A,q,F=100){let K=o2(A);try{let{stdout:E}=await B0(`docker logs --tail ${F} ${K}`);return E}catch{return""}}async attach(A,q){let F=o2(A);if((await this.status(A,q)).status!=="running")throw new Error(`Component ${A} is not running`);return new Promise((E,g)=>{let Z=qHq("docker",["attach",F],{stdio:"inherit"});Z.on("error",g),Z.on("close",()=>E())})}}var B0,KHq="eclipse-temurin:21-jre";var UIA=NA(()=>{uY();Ox();B0=FHq(AHq)});var QIA={};Bg(QIA,{NativeRunner:()=>YIA});import{spawn as EHq}from"child_process";import*as QU from"fs/promises";import*as UX from"path";class YIA{type="native";async isAvailable(){return!0}async start(A){let{componentId:q,installationDir:F,jarPath:K,javaArgs:E=[],env:g={}}=A,Z=await this.status(q,F);if(Z.status==="running")return{success:!1,message:`Component ${q} is already running (PID: ${Z.pid})`,pid:Z.pid};let $=UX.join(F,"logs");await QU.mkdir($,{recursive:!0});let U=UX.join($,`${q}.log`),G=UX.join($,`${q}.error.log`),Q=vE()==="windows"?"java.exe":"java",J=[...E,"-jar",K],X={...process.env,...g};try{let O=await QU.open(U,"a"),_=await QU.open(G,"a"),j=EHq(Q,J,{cwd:F,env:X,detached:!0,stdio:["ignore",O.fd,_.fd]}),M=j.pid;if(!M)return await O.close(),await _.close(),{success:!1,message:`Failed to start ${q}: No PID returned`};if(j.unref(),await O.close(),await _.close(),await gHq(F,q,{pid:M,startedAt:new Date().toISOString()}),await new Promise((T)=>setTimeout(T,500)),(await this.status(q,F)).status==="running")return{success:!0,message:`Started ${q} (PID: ${M})`,pid:M};return await r2(F,q),{success:!1,message:`Process started but exited immediately. Check logs at ${U}`}}catch(O){let _=O instanceof Error?O.message:String(O);return{success:!1,message:`Failed to start ${q}: ${_}`}}}async stop(A,q){let F=await GIA(q,A);if(!F)return{success:!0,message:`Component ${A} is not running (no PID file)`};if(!await KqA(F.pid))return await r2(q,A),{success:!0,message:`Component ${A} was not running (stale PID file removed)`};try{process.kill(F.pid,"SIGTERM");for(let E=0;E<10;E++)if(await new Promise((Z)=>setTimeout(Z,500)),!await KqA(F.pid))return await r2(q,A),{success:!0,message:`Stopped ${A} (PID: ${F.pid})`};return process.kill(F.pid,"SIGKILL"),await new Promise((E)=>setTimeout(E,500)),await r2(q,A),{success:!0,message:`Force stopped ${A} (PID: ${F.pid})`}}catch(E){let g=E instanceof Error?E.message:String(E);return await r2(q,A),{success:!1,message:`Failed to stop ${A}: ${g}`}}}async status(A,q){let F=await GIA(q,A);if(!F)return{status:"stopped"};if(!await KqA(F.pid))return await r2(q,A),{status:"stopped"};let E=new Date(F.startedAt),g=Math.floor((Date.now()-E.getTime())/1000);return{status:"running",pid:F.pid,uptime:g}}async logs(A,q,F=100){let K=UX.join(q,"logs",`${A}.log`);try{return(await QU.readFile(K,"utf-8")).split(`
179
179
  `).slice(-F).join(`
180
- `)}catch{return""}}async attach(A,q){throw new Error("Attach is not supported for native runner. Use 'logs' command instead.")}}var EqA=(A,q)=>{return UX.join(A,".pids",`${q}.json`)},GIA=async(A,q)=>{let F=EqA(A,q);try{let K=await QU.readFile(F,"utf-8");return JSON.parse(K)}catch{return null}},gHq=async(A,q,F)=>{let K=EqA(A,q),E=UX.dirname(K);await QU.mkdir(E,{recursive:!0}),await QU.writeFile(K,JSON.stringify(F,null,2),"utf-8")},r2=async(A,q)=>{let F=EqA(A,q);await QU.unlink(F).catch(()=>{})},KqA=async(A)=>{try{return process.kill(A,0),!0}catch{return!1}};var JIA=NA(()=>{uY()});var gqA=(A)=>{switch(A){case"linux":case"darwin":return"screen";case"windows":return"native"}},R0=async(A)=>{switch(A){case"screen":return YU("screen");case"docker":return YU("docker");case"native":return!0}},t2=async(A)=>{let q=vE();if(A){if(await R0(A))return A}let F=gqA(q);if(await R0(F))return F;if(q!=="windows"){if(await R0("docker"))return"docker"}if(q==="windows")return"native";throw new Error(`No runner available. Please install screen or docker for ${q}.`)},XIA,s2=async(A)=>{let q=XIA.get(A);if(q)return q;let F;switch(A){case"screen":{let{ScreenRunner:K}=await Promise.resolve().then(() => (EIA(),KIA));F=new K;break}case"docker":{let{DockerRunner:K}=await Promise.resolve().then(() => (UIA(),$IA));F=new K;break}case"native":{let{NativeRunner:K}=await Promise.resolve().then(() => (JIA(),QIA));F=new K;break}}return XIA.set(A,F),F},HL=(A)=>{return`simplecloud-${A}`},o2=(A)=>{return`simplecloud-${A}`};var Ox=NA(()=>{uY();XIA=new Map});var Ak="0.0.1-beta.32";var Q6A=(A=0)=>(q)=>`\x1B[${q+A}m`,J6A=(A=0)=>(q)=>`\x1B[${38+A};5;${q}m`,X6A=(A=0)=>(q,F,K)=>`\x1B[${38+A};2;${q};${F};${K}m`,eF={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},ojq=Object.keys(eF.modifier),TzA=Object.keys(eF.color),IzA=Object.keys(eF.bgColor),rjq=[...TzA,...IzA];function BzA(){let A=new Map;for(let[q,F]of Object.entries(eF)){for(let[K,E]of Object.entries(F))eF[K]={open:`\x1B[${E[0]}m`,close:`\x1B[${E[1]}m`},F[K]=eF[K],A.set(E[0],E[1]);Object.defineProperty(eF,q,{value:F,enumerable:!1})}return Object.defineProperty(eF,"codes",{value:A,enumerable:!1}),eF.color.close="\x1B[39m",eF.bgColor.close="\x1B[49m",eF.color.ansi=Q6A(),eF.color.ansi256=J6A(),eF.color.ansi16m=X6A(),eF.bgColor.ansi=Q6A(10),eF.bgColor.ansi256=J6A(10),eF.bgColor.ansi16m=X6A(10),Object.defineProperties(eF,{rgbToAnsi256:{value(q,F,K){if(q===F&&F===K){if(q<8)return 16;if(q>248)return 231;return Math.round((q-8)/247*24)+232}return 16+36*Math.round(q/255*5)+6*Math.round(F/255*5)+Math.round(K/255*5)},enumerable:!1},hexToRgb:{value(q){let F=/[a-f\d]{6}|[a-f\d]{3}/i.exec(q.toString(16));if(!F)return[0,0,0];let[K]=F;if(K.length===3)K=[...K].map((g)=>g+g).join("");let E=Number.parseInt(K,16);return[E>>16&255,E>>8&255,E&255]},enumerable:!1},hexToAnsi256:{value:(q)=>eF.rgbToAnsi256(...eF.hexToRgb(q)),enumerable:!1},ansi256ToAnsi:{value(q){if(q<8)return 30+q;if(q<16)return 90+(q-8);let F,K,E;if(q>=232)F=((q-232)*10+8)/255,K=F,E=F;else{q-=16;let $=q%36;F=Math.floor(q/36)/5,K=Math.floor($/6)/5,E=$%6/5}let g=Math.max(F,K,E)*2;if(g===0)return 30;let Z=30+(Math.round(E)<<2|Math.round(K)<<1|Math.round(F));if(g===2)Z+=60;return Z},enumerable:!1},rgbToAnsi:{value:(q,F,K)=>eF.ansi256ToAnsi(eF.rgbToAnsi256(q,F,K)),enumerable:!1},hexToAnsi:{value:(q)=>eF.ansi256ToAnsi(eF.hexToAnsi256(q)),enumerable:!1}}),eF}var RzA=BzA(),$G=RzA;import qk from"process";import zzA from"os";import O6A from"tty";function _U(A,q=globalThis.Deno?globalThis.Deno.args:qk.argv){let F=A.startsWith("-")?"":A.length===1?"-":"--",K=q.indexOf(F+A),E=q.indexOf("--");return K!==-1&&(E===-1||K<E)}var{env:AK}=qk,yL;if(_U("no-color")||_U("no-colors")||_U("color=false")||_U("color=never"))yL=0;else if(_U("color")||_U("colors")||_U("color=true")||_U("color=always"))yL=1;function wzA(){if("FORCE_COLOR"in AK){if(AK.FORCE_COLOR==="true")return 1;if(AK.FORCE_COLOR==="false")return 0;return AK.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(AK.FORCE_COLOR,10),3)}}function CzA(A){if(A===0)return!1;return{level:A,hasBasic:!0,has256:A>=2,has16m:A>=3}}function SzA(A,{streamIsTTY:q,sniffFlags:F=!0}={}){let K=wzA();if(K!==void 0)yL=K;let E=F?yL:K;if(E===0)return 0;if(F){if(_U("color=16m")||_U("color=full")||_U("color=truecolor"))return 3;if(_U("color=256"))return 2}if("TF_BUILD"in AK&&"AGENT_NAME"in AK)return 1;if(A&&!q&&E===void 0)return 0;let g=E||0;if(AK.TERM==="dumb")return g;if(qk.platform==="win32"){let Z=zzA.release().split(".");if(Number(Z[0])>=10&&Number(Z[2])>=10586)return Number(Z[2])>=14931?3:2;return 1}if("CI"in AK){if(["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some((Z)=>(Z in AK)))return 3;if(["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some((Z)=>(Z in AK))||AK.CI_NAME==="codeship")return 1;return g}if("TEAMCITY_VERSION"in AK)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(AK.TEAMCITY_VERSION)?1:0;if(AK.COLORTERM==="truecolor")return 3;if(AK.TERM==="xterm-kitty")return 3;if(AK.TERM==="xterm-ghostty")return 3;if(AK.TERM==="wezterm")return 3;if("TERM_PROGRAM"in AK){let Z=Number.parseInt((AK.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(AK.TERM_PROGRAM){case"iTerm.app":return Z>=3?3:2;case"Apple_Terminal":return 2}}if(/-256(color)?$/i.test(AK.TERM))return 2;if(/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(AK.TERM))return 1;if("COLORTERM"in AK)return 1;return g}function _6A(A,q={}){let F=SzA(A,{streamIsTTY:A&&A.isTTY,...q});return CzA(F)}var xzA={stdout:_6A({isTTY:O6A.isatty(1)}),stderr:_6A({isTTY:O6A.isatty(2)})},H6A=xzA;function j6A(A,q,F){let K=A.indexOf(q);if(K===-1)return A;let E=q.length,g=0,Z="";do Z+=A.slice(g,K)+q+F,g=K+E,K=A.indexOf(q,g);while(K!==-1);return Z+=A.slice(g),Z}function V6A(A,q,F,K){let E=0,g="";do{let Z=A[K-1]==="\r";g+=A.slice(E,Z?K-1:K)+q+(Z?`\r
180
+ `)}catch{return""}}async attach(A,q){throw new Error("Attach is not supported for native runner. Use 'logs' command instead.")}}var EqA=(A,q)=>{return UX.join(A,".pids",`${q}.json`)},GIA=async(A,q)=>{let F=EqA(A,q);try{let K=await QU.readFile(F,"utf-8");return JSON.parse(K)}catch{return null}},gHq=async(A,q,F)=>{let K=EqA(A,q),E=UX.dirname(K);await QU.mkdir(E,{recursive:!0}),await QU.writeFile(K,JSON.stringify(F,null,2),"utf-8")},r2=async(A,q)=>{let F=EqA(A,q);await QU.unlink(F).catch(()=>{})},KqA=async(A)=>{try{return process.kill(A,0),!0}catch{return!1}};var JIA=NA(()=>{uY()});var gqA=(A)=>{switch(A){case"linux":case"darwin":return"screen";case"windows":return"native"}},R0=async(A)=>{switch(A){case"screen":return YU("screen");case"docker":return YU("docker");case"native":return!0}},t2=async(A)=>{let q=vE();if(A){if(await R0(A))return A}let F=gqA(q);if(await R0(F))return F;if(q!=="windows"){if(await R0("docker"))return"docker"}if(q==="windows")return"native";throw new Error(`No runner available. Please install screen or docker for ${q}.`)},XIA,s2=async(A)=>{let q=XIA.get(A);if(q)return q;let F;switch(A){case"screen":{let{ScreenRunner:K}=await Promise.resolve().then(() => (EIA(),KIA));F=new K;break}case"docker":{let{DockerRunner:K}=await Promise.resolve().then(() => (UIA(),$IA));F=new K;break}case"native":{let{NativeRunner:K}=await Promise.resolve().then(() => (JIA(),QIA));F=new K;break}}return XIA.set(A,F),F},HL=(A)=>{return`simplecloud-${A}`},o2=(A)=>{return`simplecloud-${A}`};var Ox=NA(()=>{uY();XIA=new Map});var Ak="0.0.1-beta.33";var Q6A=(A=0)=>(q)=>`\x1B[${q+A}m`,J6A=(A=0)=>(q)=>`\x1B[${38+A};5;${q}m`,X6A=(A=0)=>(q,F,K)=>`\x1B[${38+A};2;${q};${F};${K}m`,eF={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},ojq=Object.keys(eF.modifier),TzA=Object.keys(eF.color),IzA=Object.keys(eF.bgColor),rjq=[...TzA,...IzA];function BzA(){let A=new Map;for(let[q,F]of Object.entries(eF)){for(let[K,E]of Object.entries(F))eF[K]={open:`\x1B[${E[0]}m`,close:`\x1B[${E[1]}m`},F[K]=eF[K],A.set(E[0],E[1]);Object.defineProperty(eF,q,{value:F,enumerable:!1})}return Object.defineProperty(eF,"codes",{value:A,enumerable:!1}),eF.color.close="\x1B[39m",eF.bgColor.close="\x1B[49m",eF.color.ansi=Q6A(),eF.color.ansi256=J6A(),eF.color.ansi16m=X6A(),eF.bgColor.ansi=Q6A(10),eF.bgColor.ansi256=J6A(10),eF.bgColor.ansi16m=X6A(10),Object.defineProperties(eF,{rgbToAnsi256:{value(q,F,K){if(q===F&&F===K){if(q<8)return 16;if(q>248)return 231;return Math.round((q-8)/247*24)+232}return 16+36*Math.round(q/255*5)+6*Math.round(F/255*5)+Math.round(K/255*5)},enumerable:!1},hexToRgb:{value(q){let F=/[a-f\d]{6}|[a-f\d]{3}/i.exec(q.toString(16));if(!F)return[0,0,0];let[K]=F;if(K.length===3)K=[...K].map((g)=>g+g).join("");let E=Number.parseInt(K,16);return[E>>16&255,E>>8&255,E&255]},enumerable:!1},hexToAnsi256:{value:(q)=>eF.rgbToAnsi256(...eF.hexToRgb(q)),enumerable:!1},ansi256ToAnsi:{value(q){if(q<8)return 30+q;if(q<16)return 90+(q-8);let F,K,E;if(q>=232)F=((q-232)*10+8)/255,K=F,E=F;else{q-=16;let $=q%36;F=Math.floor(q/36)/5,K=Math.floor($/6)/5,E=$%6/5}let g=Math.max(F,K,E)*2;if(g===0)return 30;let Z=30+(Math.round(E)<<2|Math.round(K)<<1|Math.round(F));if(g===2)Z+=60;return Z},enumerable:!1},rgbToAnsi:{value:(q,F,K)=>eF.ansi256ToAnsi(eF.rgbToAnsi256(q,F,K)),enumerable:!1},hexToAnsi:{value:(q)=>eF.ansi256ToAnsi(eF.hexToAnsi256(q)),enumerable:!1}}),eF}var RzA=BzA(),$G=RzA;import qk from"process";import zzA from"os";import O6A from"tty";function _U(A,q=globalThis.Deno?globalThis.Deno.args:qk.argv){let F=A.startsWith("-")?"":A.length===1?"-":"--",K=q.indexOf(F+A),E=q.indexOf("--");return K!==-1&&(E===-1||K<E)}var{env:AK}=qk,yL;if(_U("no-color")||_U("no-colors")||_U("color=false")||_U("color=never"))yL=0;else if(_U("color")||_U("colors")||_U("color=true")||_U("color=always"))yL=1;function wzA(){if("FORCE_COLOR"in AK){if(AK.FORCE_COLOR==="true")return 1;if(AK.FORCE_COLOR==="false")return 0;return AK.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(AK.FORCE_COLOR,10),3)}}function CzA(A){if(A===0)return!1;return{level:A,hasBasic:!0,has256:A>=2,has16m:A>=3}}function SzA(A,{streamIsTTY:q,sniffFlags:F=!0}={}){let K=wzA();if(K!==void 0)yL=K;let E=F?yL:K;if(E===0)return 0;if(F){if(_U("color=16m")||_U("color=full")||_U("color=truecolor"))return 3;if(_U("color=256"))return 2}if("TF_BUILD"in AK&&"AGENT_NAME"in AK)return 1;if(A&&!q&&E===void 0)return 0;let g=E||0;if(AK.TERM==="dumb")return g;if(qk.platform==="win32"){let Z=zzA.release().split(".");if(Number(Z[0])>=10&&Number(Z[2])>=10586)return Number(Z[2])>=14931?3:2;return 1}if("CI"in AK){if(["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some((Z)=>(Z in AK)))return 3;if(["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some((Z)=>(Z in AK))||AK.CI_NAME==="codeship")return 1;return g}if("TEAMCITY_VERSION"in AK)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(AK.TEAMCITY_VERSION)?1:0;if(AK.COLORTERM==="truecolor")return 3;if(AK.TERM==="xterm-kitty")return 3;if(AK.TERM==="xterm-ghostty")return 3;if(AK.TERM==="wezterm")return 3;if("TERM_PROGRAM"in AK){let Z=Number.parseInt((AK.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(AK.TERM_PROGRAM){case"iTerm.app":return Z>=3?3:2;case"Apple_Terminal":return 2}}if(/-256(color)?$/i.test(AK.TERM))return 2;if(/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(AK.TERM))return 1;if("COLORTERM"in AK)return 1;return g}function _6A(A,q={}){let F=SzA(A,{streamIsTTY:A&&A.isTTY,...q});return CzA(F)}var xzA={stdout:_6A({isTTY:O6A.isatty(1)}),stderr:_6A({isTTY:O6A.isatty(2)})},H6A=xzA;function j6A(A,q,F){let K=A.indexOf(q);if(K===-1)return A;let E=q.length,g=0,Z="";do Z+=A.slice(g,K)+q+F,g=K+E,K=A.indexOf(q,g);while(K!==-1);return Z+=A.slice(g),Z}function V6A(A,q,F,K){let E=0,g="";do{let Z=A[K-1]==="\r";g+=A.slice(E,Z?K-1:K)+q+(Z?`\r
181
181
  `:`
182
182
  `)+F,E=K+1,K=A.indexOf(`
183
183
  `,E)}while(K!==-1);return g+=A.slice(E),g}var{stdout:N6A,stderr:W6A}=H6A,Fk=Symbol("GENERATOR"),m0=Symbol("STYLER"),J3=Symbol("IS_EMPTY"),L6A=["ansi","ansi","ansi256","ansi16m"],c0=Object.create(null),kzA=(A,q={})=>{if(q.level&&!(Number.isInteger(q.level)&&q.level>=0&&q.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let F=N6A?N6A.level:0;A.level=q.level===void 0?F:q.level};var vzA=(A)=>{let q=(...F)=>F.join(" ");return kzA(q,A),Object.setPrototypeOf(q,X3.prototype),q};function X3(A){return vzA(A)}Object.setPrototypeOf(X3.prototype,Function.prototype);for(let[A,q]of Object.entries($G))c0[A]={get(){let F=hL(this,Ek(q.open,q.close,this[m0]),this[J3]);return Object.defineProperty(this,A,{value:F}),F}};c0.visible={get(){let A=hL(this,this[m0],!0);return Object.defineProperty(this,"visible",{value:A}),A}};var Kk=(A,q,F,...K)=>{if(A==="rgb"){if(q==="ansi16m")return $G[F].ansi16m(...K);if(q==="ansi256")return $G[F].ansi256($G.rgbToAnsi256(...K));return $G[F].ansi($G.rgbToAnsi(...K))}if(A==="hex")return Kk("rgb",q,F,...$G.hexToRgb(...K));return $G[F][A](...K)},bzA=["rgb","hex","ansi256"];for(let A of bzA){c0[A]={get(){let{level:F}=this;return function(...K){let E=Ek(Kk(A,L6A[F],"color",...K),$G.color.close,this[m0]);return hL(this,E,this[J3])}}};let q="bg"+A[0].toUpperCase()+A.slice(1);c0[q]={get(){let{level:F}=this;return function(...K){let E=Ek(Kk(A,L6A[F],"bgColor",...K),$G.bgColor.close,this[m0]);return hL(this,E,this[J3])}}}}var yzA=Object.defineProperties(()=>{},{...c0,level:{enumerable:!0,get(){return this[Fk].level},set(A){this[Fk].level=A}}}),Ek=(A,q,F)=>{let K,E;if(F===void 0)K=A,E=q;else K=F.openAll+A,E=q+F.closeAll;return{open:A,close:q,openAll:K,closeAll:E,parent:F}},hL=(A,q,F)=>{let K=(...E)=>hzA(K,E.length===1?""+E[0]:E.join(" "));return Object.setPrototypeOf(K,yzA),K[Fk]=A,K[m0]=q,K[J3]=F,K},hzA=(A,q)=>{if(A.level<=0||!q)return A[J3]?"":q;let F=A[m0];if(F===void 0)return q;let{openAll:K,closeAll:E}=F;if(q.includes("\x1B"))while(F!==void 0)q=j6A(q,F.close,F.open),F=F.parent;let g=q.indexOf(`
@@ -315,7 +315,7 @@ Operation cancelled.`)),process.exit(0);if(F instanceof Q0){if(console.error(V.r
315
315
  Error: ${F.message}`)),F.details)console.error(V.dim(F.details));process.exit(1)}console.error(V.red(`
316
316
  Unexpected error: ${F instanceof Error?F.message:String(F)}`)),process.exit(1)}}}function kMA(A){A.command({command:"blueprint <command>",aliases:["blueprints","bp","bps"],describe:"Manage server blueprints",builder:(q)=>q.command({command:"list",aliases:["ls"],describe:"List all blueprints",builder:{filter:{type:"string",describe:"Filter results by name"},sort:{choices:["name","created","minecraft-version"],describe:"Sort results by field"},reverse:{type:"boolean",default:!1,describe:"Reverse sort order"}},handler:Fq(async(F)=>{await wMA({filter:F.filter,sort:F.sort,reverse:F.reverse})})}).command({command:"info <blueprint>",aliases:["get","show"],describe:"Show blueprint information",builder:(F)=>F.positional("blueprint",{describe:"Blueprint identifier",type:"string",demandOption:!0}),handler:Fq(async(F)=>{await RMA(F.blueprint)})}).command({command:"delete <blueprint>",aliases:["del","rm"],describe:"Delete a blueprint",builder:(F)=>F.positional("blueprint",{describe:"Blueprint identifier",type:"string",demandOption:!0}),handler:Fq(async(F)=>{await d7A(F.blueprint)})}).command({command:"update <blueprint>",aliases:["edit"],describe:"Update blueprint settings",builder:(F)=>F.positional("blueprint",{describe:"Blueprint identifier",type:"string",demandOption:!0}).option("name",{type:"string",describe:"New blueprint name"}).option("minecraft-version",{type:"string",describe:"Minecraft version"}).option("server-software",{type:"string",describe:"Server software"}).option("software-version",{type:"string",describe:"Software version"}).option("configurator",{type:"string",describe:"Configurator"}).option("server-url",{type:"string",describe:"Server JAR URL"}),handler:Fq(async(F)=>{await CMA(F.blueprint,{name:F.name,minecraft_version:F.minecraftVersion,server_software:F.serverSoftware,software_version:F.softwareVersion,configurator:F.configurator,server_url:F.serverUrl})})}).demandCommand(1,"You must specify a subcommand"),handler:()=>{}})}I4();H2();var xGq=(A)=>{return A.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").substring(0,50)},vMA=async(A)=>{let F=(await A.text({name:"orgName",message:"Organization name:",validate:(U)=>{if(!U||U.trim().length===0)return"Organization name cannot be empty";if(U.length>100)return"Organization name must be 100 characters or less"}})).trim(),K=xGq(F),g=(await A.text({name:"orgSlug",message:"Organization slug (URL-friendly identifier):",initialValue:K,validate:(U)=>{if(!U||U.trim().length===0)return"Slug cannot be empty";if(!/^[a-z0-9-]+$/.test(U))return"Slug can only contain lowercase letters, numbers, and hyphens";if(U.length>50)return"Slug must be 50 characters or less"}})).trim();t.info(`Creating organization "${F}"...`);let Z=await hs(F,g),$=bW(Z);if(!$)throw new Error("Organization created but no network ID found in metadata. Please contact support.");return t.success(`Organization "${F}" created successfully!`),{orgId:Z.id,orgName:Z.name,orgSlug:Z.slug,networkId:$}},B2=async(A,q)=>{if(q){t.info(`Looking for organization "${q}"...`);let $=await ms(q);if(!$)t.error(V.red(`Organization "${q}" not found.`)),t.info("Run 'sc setup' without the --org flag to select from your organizations."),process.exit(1);let U=bW($);if(!U)t.error(V.red(`Organization "${$.name}" does not have a network configured. Please contact support.`)),process.exit(1);return t.success(`Using organization: ${V.cyan($.name)}`),{orgId:$.id,orgName:$.name,orgSlug:$.slug,networkId:U}}t.info("Fetching your organizations...");let F=await yC();if(F.length===0)return t.info(V.yellow("You don't have any organizations yet. Let's create one!")),vMA(A);let K=[...F.map(($)=>({value:$.id,label:$.name,hint:$.slug})),{value:"__create_new__",label:"Create new organization",hint:"Set up a new organization"}],E=await A.select({name:"organization",message:"Select an organization:",options:K});if(E==="__create_new__")return vMA(A);let g=F.find(($)=>$.id===E);if(!g)throw new Error("Selected organization not found");let Z=bW(g);if(!Z)t.error(V.red(`Organization "${g.name}" does not have a network configured. Please contact support.`)),process.exit(1);return{orgId:g.id,orgName:g.name,orgSlug:g.slug,networkId:Z}};import*as tJ from"fs/promises";import*as He from"path";var bMA=He.join(process.env.HOME||process.env.USERPROFILE||"~",".config","simplecloud"),_e=He.join(bMA,"wizard-state.json"),kGq=async()=>{try{await tJ.mkdir(bMA,{recursive:!0})}catch(A){throw new Error(`Failed to create config directory: ${A}`)}},je=async()=>{try{await tJ.access(_e)}catch{return{}}try{let A=await tJ.readFile(_e,"utf-8");return JSON.parse(A)}catch{return{}}},yMA=async(A)=>{await kGq(),await tJ.writeFile(_e,JSON.stringify(A,null,2),{mode:384,encoding:"utf-8"})},hMA=async(A)=>{let F=(await je())[A];if(!F)return null;return F},mMA=async(A,q,F,K,E)=>{let g=await je();g[A]={answers:q,fields:F,status:K,timestamp:Date.now(),ttl:E},await yMA(g)},Ve=async(A)=>{let q=await je();delete q[A],await yMA(q)},cMA=(A)=>{return Date.now()-A.timestamp>A.ttl};var bGq=(A,q={})=>({wizardId:A,ttl:q.ttl??900000,answers:{},fields:{},status:"collecting",skipMode:!1}),US=(A,q)=>{let F=A.answers[q];if(F===void 0||F===null)return;return String(F)},GS=async(A)=>{await mMA(A.wizardId,A.answers,A.fields,A.status,A.ttl)},mW=async(A,q,F,K,E)=>{A.answers[q]=K,A.fields[q]={label:F,required:E},await GS(A)},R2=async(A)=>{throw A.status="cancelled",await GS(A),new Error("Setup cancelled.")},Zg=async(A,q={})=>{let F=bGq(A,q),K=await hMA(A);if(K&&!cMA(K))F.answers={...K.answers},F.fields={...K.fields},F.status=K.status;let E=async(W)=>{let N=US(F,W.name),C=W.message.replace(/:$/,""),h=W.required??!0;if(F.skipMode&&N!==void 0)return N;let m=N??W.initialValue,r=await _M({...W,initialValue:m});if(qF(r))await R2(F);let z=String(r);return await mW(F,W.name,C,z,h),z},g=async(W)=>{let N=US(F,W.name),C=W.message.replace(/:$/,""),h=W.required??!0;if(F.skipMode&&N!==void 0)return N;let m=N??W.initialValue,r=await $9({...W,initialValue:m});if(qF(r))await R2(F);let z=String(r);return await mW(F,W.name,C,z,h),z},Z=async(W)=>{let N=US(F,W.name),C=W.message.replace(/:$/,""),h=W.required??!0;if(F.skipMode&&N!==void 0)return N;let m=N??W.initialValue,r=await ak({...W,initialValue:m});if(qF(r))await R2(F);let z=String(r);return await mW(F,W.name,C,z,h),z},$=async(W)=>{let N=await pFA({...W});if(qF(N))await R2(F);return String(N)},U=async(W)=>{let N=F.answers[W.name],C=W.message.replace(/:$/,"").replace(/\?$/,""),h=W.required??!1;if(F.skipMode&&typeof N==="boolean")return N;let m=typeof N==="boolean"?N:W.initialValue,r=await wg({message:W.message,active:W.active,inactive:W.inactive,initialValue:m});if(qF(r))await R2(F);let z=r===!0;return await mW(F,W.name,C,z,h),z},G=async(W)=>{let N=US(F,W.name),C=W.message.replace(/:$/,""),h=W.required??!1;if(F.skipMode&&N!==void 0)return N;let m=N??W.initialValue,r=await lFA({message:W.message,initialValue:m,directory:W.directory});if(qF(r))await R2(F);let z=String(r);return await mW(F,W.name,C,z,h),z},Y=(W,N,C)=>{if(F.answers[W]=N,C)F.fields[W]={label:C,required:!1}},Q=(W)=>F.answers[W],J=()=>({...F.answers}),X=()=>Object.keys(F.answers).length>0,O=()=>{if(Object.keys(F.answers).length===0)return!1;let W=Object.entries(F.fields).filter(([,N])=>N.required).map(([N])=>N);if(W.length===0)return!1;return W.every((N)=>{let C=F.answers[N];return C!==void 0&&C!==null&&C!==""})};return{text:E,select:g,autocomplete:Z,password:$,confirm:U,path:G,setAnswer:Y,getAnswer:Q,getAnswers:J,hasPreviousSession:X,hasRequiredAnswers:O,promptResume:async()=>{if(Object.keys(F.answers).length===0)return"fresh";let W=Object.entries(F.fields).filter(([z])=>{let d=F.answers[z];return d!==void 0&&d!==null&&d!==""}).map(([z,d])=>{let o=F.answers[z];return` ${V.dim(d.label+":")} ${V.cyan(String(o))}`});if(W.length===0)return"fresh";let N=F.status==="ready"&&O(),C=F.status==="ready"?"Previous attempt failed:":"Previous session found:";t.info(V.bold(C)),console.log(W.join(`
317
317
  `)),console.log();let h=[];if(N)h.push({value:"retry",label:"Retry now",hint:"skip wizard, use these values"});h.push({value:"prefill",label:"Edit values",hint:"pre-fill wizard with these values"},{value:"fresh",label:"Start fresh",hint:"clear saved values"});let m=await $9({message:"How would you like to continue?",options:h});if(qF(m))return"cancel";let r=m;if(r==="fresh")F.answers={},F.fields={},F.status="collecting",await Ve(F.wizardId);return r},enableSkipMode:()=>{F.skipMode=!0},disableSkipMode:()=>{F.skipMode=!1},isSkipMode:()=>F.skipMode,markReady:async()=>{F.status="ready",await GS(F)},getStatus:()=>F.status,complete:async()=>{await Ve(F.wizardId)},save:async()=>{await GS(F)}}};import Ce from"process";import KDA from"path";import{fileURLToPath as O4q}from"url";import _4q from"child_process";import H4q,{constants as j4q}from"fs/promises";import{promisify as nGq}from"util";import iGq from"child_process";import De,{constants as aMA}from"fs/promises";import dMA from"process";import uGq from"os";import fGq from"fs";import mGq from"fs";import uMA from"fs";var Ne;function yGq(){try{return uMA.statSync("/.dockerenv"),!0}catch{return!1}}function hGq(){try{return uMA.readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch{return!1}}function We(){if(Ne===void 0)Ne=yGq()||hGq();return Ne}var Le,cGq=()=>{try{return mGq.statSync("/run/.containerenv"),!0}catch{return!1}};function z2(){if(Le===void 0)Le=cGq()||We();return Le}var fMA=()=>{if(dMA.platform!=="linux")return!1;if(uGq.release().toLowerCase().includes("microsoft")){if(z2())return!1;return!0}try{return fGq.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft")?!z2():!1}catch{return!1}},hQ=dMA.env.__IS_WSL_TEST__?fMA:fMA();import pMA from"process";import{Buffer as dGq}from"buffer";import{promisify as pGq}from"util";import lGq from"child_process";var aGq=pGq(lGq.execFile),Me=()=>`${pMA.env.SYSTEMROOT||pMA.env.windir||String.raw`C:\Windows`}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`;var $U=async(A,q={})=>{let{powerShellPath:F,...K}=q,E=$U.encodeCommand(A);return aGq(F??Me(),[...$U.argumentsPrefix,E],{encoding:"utf8",...K})};$U.argumentsPrefix=["-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand"];$U.encodeCommand=(A)=>dGq.from(A,"utf16le").toString("base64");$U.escapeArgument=(A)=>`'${String(A).replaceAll("'","''")}'`;var oGq=nGq(iGq.execFile),rGq=(()=>{let q;return async function(){if(q)return q;let F="/etc/wsl.conf",K=!1;try{await De.access(F,aMA.F_OK),K=!0}catch{}if(!K)return"/mnt/";let E=await De.readFile(F,{encoding:"utf8"}),g=/(?<!#.*)root\s*=\s*(?<mountPoint>.*)/g.exec(E);if(!g)return"/mnt/";return q=g.groups.mountPoint.trim(),q=q.endsWith("/")?q:`${q}/`,q}})(),tGq=async()=>{return`${await rGq()}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`},YS=hQ?tGq:Me,lMA,nMA=async()=>{return lMA??=(async()=>{try{let A=await YS();return await De.access(A,aMA.X_OK),!0}catch{return!1}})(),lMA},iMA=async()=>{let A=await YS(),q=String.raw`(Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice").ProgId`,{stdout:F}=await $U(q,{powerShellPath:A});return F.trim()},oMA=async(A)=>{if(/^[a-z]+:\/\//i.test(A))return A;try{let{stdout:q}=await oGq("wslpath",["-aw",A],{encoding:"utf8"});return q.trim()}catch{return A}};function J0(A,q,F){let K=(E)=>Object.defineProperty(A,q,{value:E,enumerable:!0,writable:!0});return Object.defineProperty(A,q,{configurable:!0,enumerable:!0,get(){let E=F();return K(E),E},set(E){K(E)}}),A}import{promisify as G4q}from"util";import Re from"process";import{execFile as Y4q}from"child_process";import{promisify as sGq}from"util";import eGq from"process";import{execFile as A4q}from"child_process";var q4q=sGq(A4q);async function Pe(){if(eGq.platform!=="darwin")throw new Error("macOS only");let{stdout:A}=await q4q("defaults",["read","com.apple.LaunchServices/com.apple.launchservices.secure","LSHandlers"]),F=/LSHandlerRoleAll = "(?!-)(?<id>[^"]+?)";\s+?LSHandlerURLScheme = (?:http|https);/.exec(A)?.groups.id??"com.apple.Safari";if(F==="com.apple.safari")return"com.apple.Safari";return F}import F4q from"process";import{promisify as K4q}from"util";import{execFile as E4q,execFileSync as aj6}from"child_process";var g4q=K4q(E4q);async function rMA(A,{humanReadableOutput:q=!0,signal:F}={}){if(F4q.platform!=="darwin")throw new Error("macOS only");let K=q?[]:["-ss"],E={};if(F)E.signal=F;let{stdout:g}=await g4q("osascript",["-e",A,K],E);return g.trim()}async function Te(A){return rMA(`tell application "Finder" to set app_path to application file id "${A}" as string
318
- tell application "System Events" to get value of property list item "CFBundleName" of property list file (app_path & ":Contents:Info.plist")`)}import{promisify as Z4q}from"util";import{execFile as $4q}from"child_process";var U4q=Z4q($4q),tMA={MSEdgeHTM:{name:"Edge",id:"com.microsoft.edge"},MSEdgeBHTML:{name:"Edge Beta",id:"com.microsoft.edge.beta"},MSEdgeDHTML:{name:"Edge Dev",id:"com.microsoft.edge.dev"},AppXq0fevzme2pys62n3e0fbqa7peapykr8v:{name:"Edge",id:"com.microsoft.edge.old"},ChromeHTML:{name:"Chrome",id:"com.google.chrome"},ChromeBHTML:{name:"Chrome Beta",id:"com.google.chrome.beta"},ChromeDHTML:{name:"Chrome Dev",id:"com.google.chrome.dev"},ChromiumHTM:{name:"Chromium",id:"org.chromium.Chromium"},BraveHTML:{name:"Brave",id:"com.brave.Browser"},BraveBHTML:{name:"Brave Beta",id:"com.brave.Browser.beta"},BraveDHTML:{name:"Brave Dev",id:"com.brave.Browser.dev"},BraveSSHTM:{name:"Brave Nightly",id:"com.brave.Browser.nightly"},FirefoxURL:{name:"Firefox",id:"org.mozilla.firefox"},OperaStable:{name:"Opera",id:"com.operasoftware.Opera"},VivaldiHTM:{name:"Vivaldi",id:"com.vivaldi.Vivaldi"},"IE.HTTP":{name:"Internet Explorer",id:"com.microsoft.ie"}},QS=new Map(Object.entries(tMA));class Ie extends Error{}async function Be(A=U4q){let{stdout:q}=await A("reg",["QUERY"," HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice","/v","ProgId"]),F=/ProgId\s*REG_SZ\s*(?<id>\S+)/.exec(q);if(!F)throw new Ie(`Cannot find Windows browser in stdout: ${JSON.stringify(q)}`);let{id:K}=F.groups,E=tMA[K];if(!E)throw new Ie(`Unknown browser ID: ${K}`);return E}var Q4q=G4q(Y4q),J4q=(A)=>A.toLowerCase().replaceAll(/(?:^|\s|-)\S/g,(q)=>q.toUpperCase());async function ze(){if(Re.platform==="darwin"){let A=await Pe();return{name:await Te(A),id:A}}if(Re.platform==="linux"){let{stdout:A}=await Q4q("xdg-mime",["query","default","x-scheme-handler/http"]),q=A.trim();return{name:J4q(q.replace(/.desktop$/,"").replace("-"," ")),id:q}}if(Re.platform==="win32")return Be();throw new Error("Only macOS, Linux, and Windows are supported")}import we from"process";var X4q=Boolean(we.env.SSH_CONNECTION||we.env.SSH_CLIENT||we.env.SSH_TTY),sMA=X4q;var JS=Symbol("fallbackAttempt"),Se=import.meta.url?KDA.dirname(O4q(import.meta.url)):"",eMA=KDA.join(Se,"xdg-open"),{platform:w2,arch:ADA}=Ce,qDA=async(A,q)=>{if(A.length===0)return;let F=[];for(let K of A)try{return await q(K)}catch(E){F.push(E)}throw new AggregateError(F,"Failed to open in all supported apps")},XS=async(A)=>{A={wait:!1,background:!1,newInstance:!1,allowNonzeroExitCode:!1,...A};let q=A[JS]===!0;if(delete A[JS],Array.isArray(A.app))return qDA(A.app,(G)=>XS({...A,app:G,[JS]:!0}));let{name:F,arguments:K=[]}=A.app??{};if(K=[...K],Array.isArray(F))return qDA(F,(G)=>XS({...A,app:{name:G,arguments:K},[JS]:!0}));if(F==="browser"||F==="browserPrivate"){let G={"com.google.chrome":"chrome","google-chrome.desktop":"chrome","com.brave.browser":"brave","org.mozilla.firefox":"firefox","firefox.desktop":"firefox","com.microsoft.msedge":"edge","com.microsoft.edge":"edge","com.microsoft.edgemac":"edge","microsoft-edge.desktop":"edge","com.apple.safari":"safari"},Y={chrome:"--incognito",brave:"--incognito",firefox:"--private-window",edge:"--inPrivate"},Q;if(hQ){let J=await iMA();Q=QS.get(J)??{}}else Q=await ze();if(Q.id in G){let J=G[Q.id.toLowerCase()];if(F==="browserPrivate"){if(J==="safari")throw new Error("Safari doesn't support opening in private mode via command line");K.push(Y[J])}return XS({...A,app:{name:C2[J],arguments:K}})}throw new Error(`${Q.name} is not supported as a default browser`)}let E,g=[],Z={},$=!1;if(hQ&&!z2()&&!sMA&&!F)$=await nMA();if(w2==="darwin"){if(E="open",A.wait)g.push("--wait-apps");if(A.background)g.push("--background");if(A.newInstance)g.push("--new");if(F)g.push("-a",F)}else if(w2==="win32"||$){if(E=await YS(),g.push(...$U.argumentsPrefix),!hQ)Z.windowsVerbatimArguments=!0;if(hQ&&A.target)A.target=await oMA(A.target);let G=["$ProgressPreference = 'SilentlyContinue';","Start"];if(A.wait)G.push("-Wait");if(F){if(G.push($U.escapeArgument(F)),A.target)K.push(A.target)}else if(A.target)G.push($U.escapeArgument(A.target));if(K.length>0)K=K.map((Y)=>$U.escapeArgument(Y)),G.push("-ArgumentList",K.join(","));if(A.target=$U.encodeCommand(G.join(" ")),!A.wait)Z.stdio="ignore"}else{if(F)E=F;else{let G=!Se||Se==="/",Y=!1;try{await H4q.access(eMA,j4q.X_OK),Y=!0}catch{}E=Ce.versions.electron??(w2==="android"||G||!Y)?"xdg-open":eMA}if(K.length>0)g.push(...K);if(!A.wait)Z.stdio="ignore",Z.detached=!0}if(w2==="darwin"&&K.length>0)g.push("--args",...K);if(A.target)g.push(A.target);let U=_4q.spawn(E,g,Z);if(A.wait)return new Promise((G,Y)=>{U.once("error",Y),U.once("close",(Q)=>{if(!A.allowNonzeroExitCode&&Q!==0){Y(new Error(`Exited with code ${Q}`));return}G(U)})});if(q)return new Promise((G,Y)=>{U.once("error",Y),U.once("spawn",()=>{U.once("close",(Q)=>{if(U.off("error",Y),Q!==0){Y(new Error(`Exited with code ${Q}`));return}U.unref(),G(U)})})});return U.unref(),new Promise((G,Y)=>{U.once("error",Y),U.once("spawn",()=>{U.off("error",Y),G(U)})})},V4q=(A,q)=>{if(typeof A!=="string")throw new TypeError("Expected a `target`");return XS({...q,target:A})};function FDA(A){if(typeof A==="string"||Array.isArray(A))return A;let{[ADA]:q}=A;if(!q)throw new Error(`${ADA} is not supported`);return q}function cW({[w2]:A},{wsl:q}={}){if(q&&hQ)return FDA(q);if(!A)throw new Error(`${w2} is not supported`);return FDA(A)}var C2={browser:"browser",browserPrivate:"browserPrivate"};J0(C2,"chrome",()=>cW({darwin:"google chrome",win32:"chrome",linux:["google-chrome","google-chrome-stable","chromium","chromium-browser"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe",x64:["/mnt/c/Program Files/Google/Chrome/Application/chrome.exe","/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"]}}));J0(C2,"brave",()=>cW({darwin:"brave browser",win32:"brave",linux:["brave-browser","brave"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe",x64:["/mnt/c/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe","/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe"]}}));J0(C2,"firefox",()=>cW({darwin:"firefox",win32:String.raw`C:\Program Files\Mozilla Firefox\firefox.exe`,linux:"firefox"},{wsl:"/mnt/c/Program Files/Mozilla Firefox/firefox.exe"}));J0(C2,"edge",()=>cW({darwin:"microsoft edge",win32:"msedge",linux:["microsoft-edge","microsoft-edge-dev"]},{wsl:"/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}));J0(C2,"safari",()=>cW({darwin:"Safari"}));var EDA=V4q;N3();I4();var Pg={primaryBlue:"#0ea5e9",secondaryBlue:"#38bdf8",highlightBlue:"#7dd3fc",subtleGray:"#64748b",lightGray:"#BCBCBC",text:"#f1f5f9",success:"#2dd4bf",error:"#fb7185",created:"#3ea867",edited:"#6C50FF",stopped:"#ff5050"},X$={primary:(A)=>V.hex(Pg.primaryBlue).bold(A),secondary:(A)=>V.hex(Pg.secondaryBlue)(A),highlight:(A)=>V.hex(Pg.highlightBlue)(A),subtle:(A)=>V.hex(Pg.subtleGray)(A),light:(A)=>V.hex(Pg.lightGray)(A),success:(A)=>V.hex(Pg.success)(A),error:(A)=>V.hex(Pg.error)(A),mainCommand:(A)=>V.hex(Pg.primaryBlue).bold(A),subCommand:(A)=>V.hex(Pg.subtleGray).italic(A),section:(A)=>V.hex(Pg.lightGray).bold(A),helpMessage:(A)=>V.hex(Pg.lightGray).italic(A),indent:V.hex(Pg.subtleGray)("\u2514\u2500"),header:{created:(A)=>V.bgHex(Pg.created).hex("#F1F1F1").bold(" CREATED ")+" "+A,started:(A)=>V.bgHex(Pg.created).hex("#F1F1F1").bold(" STARTED ")+" "+A,edited:(A)=>V.bgHex(Pg.edited).hex("#F1F1F1").bold(" EDITED ")+" "+A,stopped:(A)=>V.bgHex(Pg.stopped).hex("#F1F1F1").bold(" STOPPED ")+" "+A,deleted:(A)=>V.bgHex(Pg.stopped).hex("#F1F1F1").bold(" DELETED ")+" "+A}};class S2 extends Error{code;constructor(A,q){super(A);this.code=q;this.name="DeviceAuthError"}}var N4q=(A,q,F,K)=>w.gen(function*(){yield*w.sleep(`${K.interval} seconds`);let{data:E,error:g}=yield*w.tryPromise({try:()=>A.device.token({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:q,client_id:F,fetchOptions:{headers:{"user-agent":"simplecloud CLI"}}}),catch:(Z)=>new S2(Z instanceof Error?Z.message:"Network error","network_error")});if(E?.access_token)return{...K,token:E};if(g)switch(g.error){case"authorization_pending":return K;case"slow_down":return{...K,interval:K.interval+5};case"access_denied":return yield*w.fail(new S2("Access denied by user","access_denied"));case"expired_token":return yield*w.fail(new S2("Device code expired. Please try again.","expired_token"));default:return yield*w.fail(new S2(g.error_description||"Unknown error",g.error||"unknown"))}return K}),W4q=(A,q,F,K)=>w.iterate({interval:K},{while:(E)=>!E.token,body:(E)=>N4q(A,q,F,E)}).pipe(w.flatMap((E)=>E.token?w.succeed(E.token):w.fail(new S2("No token received","no_token"))));async function X0(A){let{skipExistingCheck:q=!1,noBrowser:F=!1}=A||{};if(!q){if(await Rg()){let D=await wg({message:"You're already logged in. Do you want to log in again?",initialValue:!1});if(qF(D)||!D)return null}}let K=a6({indicator:"dots"});K.start("Requesting device authorization...");let{data:E,error:g}=await HU.device.code({client_id:"cli",scope:"openid profile email"});if(g||!E)throw K.stop(X$.error("Failed to request device authorization")),new Q0("Failed to request device authorization");K.stop("Device authorization ready");let{device_code:Z,user_code:$,verification_uri:U,verification_uri_complete:G,interval:Y=5,expires_in:Q}=E,J=G||`${U}${U.includes("?")?"&":"?"}user_code=${$}`;if(!F)await EDA(J),console.log(),console.log(X$.highlight("Browser opened for authentication")),console.log(),console.log(X$.subtle("If the browser didn't open, visit the URL below:"));else console.log(),console.log(X$.highlight("Device Authorization Required"));console.log(),console.log(` ${X$.secondary(J)}`),console.log(),console.log(` Code: ${X$.primary($)}`),console.log(),console.log(X$.subtle(`Code expires in ${Math.floor(Q/60)} minutes`)),console.log();let X=a6({indicator:"dots"});X.start("Waiting for authorization...");let O=W4q(HU,Z,"cli",Y),_=await w.runPromise(O).catch((T)=>{throw X.stop(X$.error(T instanceof Error?T.message:"Polling failed")),T});X.stop("Authorization received"),await YFA(_);let{data:j}=await HU.getSession({fetchOptions:{headers:{Authorization:`Bearer ${_.access_token}`}}}),M=j?.user?.name||j?.user?.email||"User",P=j?.user?.email;return{userName:M,email:P}}function gDA(A){A.command({command:"login",describe:"Authenticate with SimpleCloud",builder:(q)=>q.option("no-browser",{type:"boolean",default:!1,describe:"Don't open browser automatically"}),handler:Fq(async(q)=>{yE(X$.primary("Authenticate with SimpleCloud"));let F=await X0({noBrowser:q.noBrowser});if(F===null){hF(X$.subtle("Login cancelled"));return}hF(X$.success(`Logged in as ${F.userName}`))})})}var L4q="https://controller.platform.simplecloud.app",ZDA=async(A)=>{let q=await Zg("context-add");if(q.hasPreviousSession()){let F=await q.promptResume();if(F==="cancel"){t.warn("Cancelled.");return}if(F==="retry")q.enableSkipMode()}try{if(!await F9()){t.info("Please log in to add a context.");let U=await X0({skipExistingCheck:!0});if(!U)t.error(V.red("Login cancelled. Adding context requires authentication.")),process.exit(1);t.success(`Authenticated as ${U.userName}`)}let K=A;if(!K)K=await q.text({name:"contextName",message:"Context name:",validate:(U)=>{if(!U||U.trim().length===0)return"Context name cannot be empty"}}),K=K.trim();if((await w.runPromise(w.gen(function*(){return yield*xY()}).pipe(w.provide(p6))))[K])console.error(V.red(`Context "${K}" already exists.`)),process.exit(1);t.step("Select organization for this context...");let g=await B2(q),Z=await q.text({name:"installationDir",message:"Installation directory (optional, for local serverhost):",initialValue:"",required:!1}),$={orgId:g.orgId,orgName:g.orgName,orgSlug:g.orgSlug,baseURL:L4q,installationDir:Z.trim()||void 0};if(await w.runPromise(w.gen(function*(){yield*A2(K,$)}).pipe(w.provide(p6))),await q.complete(),console.log(V.green(`\u2713 Context "${K}" added successfully.`)),console.log(V.dim(` Organization: ${g.orgName}`)),Z.trim())console.log(V.dim(` Installation: ${Z.trim()}`))}catch(F){if(F instanceof Error&&F.message==="Setup cancelled."){t.warn("Cancelled. Your progress has been saved.");return}console.error(V.red(`Failed to add context: ${F instanceof Error?F.message:String(F)}`)),process.exit(1)}};var $DA=async()=>{try{let A=await w.runPromise(w.gen(function*(){return yield*dJ()}).pipe(w.provide(p6)));if(!A){console.log(V.yellow("No context is currently selected.")),console.log(V.cyan("Run 'simplecloud context add' to create a context, or 'simplecloud context use <name>' to switch to an existing one."));return}let q=await w.runPromise(w.gen(function*(){return yield*A0(A)}).pipe(w.provide(p6)));if(!q)console.error(V.red(`Current context "${A}" not found.`)),process.exit(1);if(console.log(V.bold.cyan(`
318
+ tell application "System Events" to get value of property list item "CFBundleName" of property list file (app_path & ":Contents:Info.plist")`)}import{promisify as Z4q}from"util";import{execFile as $4q}from"child_process";var U4q=Z4q($4q),tMA={MSEdgeHTM:{name:"Edge",id:"com.microsoft.edge"},MSEdgeBHTML:{name:"Edge Beta",id:"com.microsoft.edge.beta"},MSEdgeDHTML:{name:"Edge Dev",id:"com.microsoft.edge.dev"},AppXq0fevzme2pys62n3e0fbqa7peapykr8v:{name:"Edge",id:"com.microsoft.edge.old"},ChromeHTML:{name:"Chrome",id:"com.google.chrome"},ChromeBHTML:{name:"Chrome Beta",id:"com.google.chrome.beta"},ChromeDHTML:{name:"Chrome Dev",id:"com.google.chrome.dev"},ChromiumHTM:{name:"Chromium",id:"org.chromium.Chromium"},BraveHTML:{name:"Brave",id:"com.brave.Browser"},BraveBHTML:{name:"Brave Beta",id:"com.brave.Browser.beta"},BraveDHTML:{name:"Brave Dev",id:"com.brave.Browser.dev"},BraveSSHTM:{name:"Brave Nightly",id:"com.brave.Browser.nightly"},FirefoxURL:{name:"Firefox",id:"org.mozilla.firefox"},OperaStable:{name:"Opera",id:"com.operasoftware.Opera"},VivaldiHTM:{name:"Vivaldi",id:"com.vivaldi.Vivaldi"},"IE.HTTP":{name:"Internet Explorer",id:"com.microsoft.ie"}},QS=new Map(Object.entries(tMA));class Ie extends Error{}async function Be(A=U4q){let{stdout:q}=await A("reg",["QUERY"," HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice","/v","ProgId"]),F=/ProgId\s*REG_SZ\s*(?<id>\S+)/.exec(q);if(!F)throw new Ie(`Cannot find Windows browser in stdout: ${JSON.stringify(q)}`);let{id:K}=F.groups,E=tMA[K];if(!E)throw new Ie(`Unknown browser ID: ${K}`);return E}var Q4q=G4q(Y4q),J4q=(A)=>A.toLowerCase().replaceAll(/(?:^|\s|-)\S/g,(q)=>q.toUpperCase());async function ze(){if(Re.platform==="darwin"){let A=await Pe();return{name:await Te(A),id:A}}if(Re.platform==="linux"){let{stdout:A}=await Q4q("xdg-mime",["query","default","x-scheme-handler/http"]),q=A.trim();return{name:J4q(q.replace(/.desktop$/,"").replace("-"," ")),id:q}}if(Re.platform==="win32")return Be();throw new Error("Only macOS, Linux, and Windows are supported")}import we from"process";var X4q=Boolean(we.env.SSH_CONNECTION||we.env.SSH_CLIENT||we.env.SSH_TTY),sMA=X4q;var JS=Symbol("fallbackAttempt"),Se=import.meta.url?KDA.dirname(O4q(import.meta.url)):"",eMA=KDA.join(Se,"xdg-open"),{platform:w2,arch:ADA}=Ce,qDA=async(A,q)=>{if(A.length===0)return;let F=[];for(let K of A)try{return await q(K)}catch(E){F.push(E)}throw new AggregateError(F,"Failed to open in all supported apps")},XS=async(A)=>{A={wait:!1,background:!1,newInstance:!1,allowNonzeroExitCode:!1,...A};let q=A[JS]===!0;if(delete A[JS],Array.isArray(A.app))return qDA(A.app,(G)=>XS({...A,app:G,[JS]:!0}));let{name:F,arguments:K=[]}=A.app??{};if(K=[...K],Array.isArray(F))return qDA(F,(G)=>XS({...A,app:{name:G,arguments:K},[JS]:!0}));if(F==="browser"||F==="browserPrivate"){let G={"com.google.chrome":"chrome","google-chrome.desktop":"chrome","com.brave.browser":"brave","org.mozilla.firefox":"firefox","firefox.desktop":"firefox","com.microsoft.msedge":"edge","com.microsoft.edge":"edge","com.microsoft.edgemac":"edge","microsoft-edge.desktop":"edge","com.apple.safari":"safari"},Y={chrome:"--incognito",brave:"--incognito",firefox:"--private-window",edge:"--inPrivate"},Q;if(hQ){let J=await iMA();Q=QS.get(J)??{}}else Q=await ze();if(Q.id in G){let J=G[Q.id.toLowerCase()];if(F==="browserPrivate"){if(J==="safari")throw new Error("Safari doesn't support opening in private mode via command line");K.push(Y[J])}return XS({...A,app:{name:C2[J],arguments:K}})}throw new Error(`${Q.name} is not supported as a default browser`)}let E,g=[],Z={},$=!1;if(hQ&&!z2()&&!sMA&&!F)$=await nMA();if(w2==="darwin"){if(E="open",A.wait)g.push("--wait-apps");if(A.background)g.push("--background");if(A.newInstance)g.push("--new");if(F)g.push("-a",F)}else if(w2==="win32"||$){if(E=await YS(),g.push(...$U.argumentsPrefix),!hQ)Z.windowsVerbatimArguments=!0;if(hQ&&A.target)A.target=await oMA(A.target);let G=["$ProgressPreference = 'SilentlyContinue';","Start"];if(A.wait)G.push("-Wait");if(F){if(G.push($U.escapeArgument(F)),A.target)K.push(A.target)}else if(A.target)G.push($U.escapeArgument(A.target));if(K.length>0)K=K.map((Y)=>$U.escapeArgument(Y)),G.push("-ArgumentList",K.join(","));if(A.target=$U.encodeCommand(G.join(" ")),!A.wait)Z.stdio="ignore"}else{if(F)E=F;else{let G=!Se||Se==="/",Y=!1;try{await H4q.access(eMA,j4q.X_OK),Y=!0}catch{}E=Ce.versions.electron??(w2==="android"||G||!Y)?"xdg-open":eMA}if(K.length>0)g.push(...K);if(!A.wait)Z.stdio="ignore",Z.detached=!0}if(w2==="darwin"&&K.length>0)g.push("--args",...K);if(A.target)g.push(A.target);let U=_4q.spawn(E,g,Z);if(A.wait)return new Promise((G,Y)=>{U.once("error",Y),U.once("close",(Q)=>{if(!A.allowNonzeroExitCode&&Q!==0){Y(new Error(`Exited with code ${Q}`));return}G(U)})});if(q)return new Promise((G,Y)=>{U.once("error",Y),U.once("spawn",()=>{U.once("close",(Q)=>{if(U.off("error",Y),Q!==0){Y(new Error(`Exited with code ${Q}`));return}U.unref(),G(U)})})});return U.unref(),new Promise((G,Y)=>{U.once("error",Y),U.once("spawn",()=>{U.off("error",Y),G(U)})})},V4q=(A,q)=>{if(typeof A!=="string")throw new TypeError("Expected a `target`");return XS({...q,target:A})};function FDA(A){if(typeof A==="string"||Array.isArray(A))return A;let{[ADA]:q}=A;if(!q)throw new Error(`${ADA} is not supported`);return q}function cW({[w2]:A},{wsl:q}={}){if(q&&hQ)return FDA(q);if(!A)throw new Error(`${w2} is not supported`);return FDA(A)}var C2={browser:"browser",browserPrivate:"browserPrivate"};J0(C2,"chrome",()=>cW({darwin:"google chrome",win32:"chrome",linux:["google-chrome","google-chrome-stable","chromium","chromium-browser"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe",x64:["/mnt/c/Program Files/Google/Chrome/Application/chrome.exe","/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"]}}));J0(C2,"brave",()=>cW({darwin:"brave browser",win32:"brave",linux:["brave-browser","brave"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe",x64:["/mnt/c/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe","/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe"]}}));J0(C2,"firefox",()=>cW({darwin:"firefox",win32:String.raw`C:\Program Files\Mozilla Firefox\firefox.exe`,linux:"firefox"},{wsl:"/mnt/c/Program Files/Mozilla Firefox/firefox.exe"}));J0(C2,"edge",()=>cW({darwin:"microsoft edge",win32:"msedge",linux:["microsoft-edge","microsoft-edge-dev"]},{wsl:"/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}));J0(C2,"safari",()=>cW({darwin:"Safari"}));var EDA=V4q;N3();I4();var Pg={primaryBlue:"#0ea5e9",secondaryBlue:"#38bdf8",highlightBlue:"#7dd3fc",subtleGray:"#64748b",lightGray:"#BCBCBC",text:"#f1f5f9",success:"#2dd4bf",error:"#fb7185",created:"#3ea867",edited:"#6C50FF",stopped:"#ff5050"},X$={primary:(A)=>V.hex(Pg.primaryBlue).bold(A),secondary:(A)=>V.hex(Pg.secondaryBlue)(A),highlight:(A)=>V.hex(Pg.highlightBlue)(A),subtle:(A)=>V.hex(Pg.subtleGray)(A),light:(A)=>V.hex(Pg.lightGray)(A),success:(A)=>V.hex(Pg.success)(A),error:(A)=>V.hex(Pg.error)(A),mainCommand:(A)=>V.hex(Pg.primaryBlue).bold(A),subCommand:(A)=>V.hex(Pg.subtleGray).italic(A),section:(A)=>V.hex(Pg.lightGray).bold(A),helpMessage:(A)=>V.hex(Pg.lightGray).italic(A),indent:V.hex(Pg.subtleGray)("\u2514\u2500"),header:{created:(A)=>V.bgHex(Pg.created).hex("#F1F1F1").bold(" CREATED ")+" "+A,started:(A)=>V.bgHex(Pg.created).hex("#F1F1F1").bold(" STARTED ")+" "+A,edited:(A)=>V.bgHex(Pg.edited).hex("#F1F1F1").bold(" EDITED ")+" "+A,stopped:(A)=>V.bgHex(Pg.stopped).hex("#F1F1F1").bold(" STOPPED ")+" "+A,deleted:(A)=>V.bgHex(Pg.stopped).hex("#F1F1F1").bold(" DELETED ")+" "+A}};class S2 extends Error{code;constructor(A,q){super(A);this.code=q;this.name="DeviceAuthError"}}var N4q=(A,q,F,K)=>w.gen(function*(){yield*w.sleep(`${K.interval} seconds`);let{data:E,error:g}=yield*w.tryPromise({try:()=>A.device.token({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:q,client_id:F,fetchOptions:{headers:{"user-agent":"simplecloud CLI"}}}),catch:(Z)=>new S2(Z instanceof Error?Z.message:"Network error","network_error")});if(E?.access_token)return{...K,token:E};if(g)switch(g.error){case"authorization_pending":return K;case"slow_down":return{...K,interval:K.interval+5};case"access_denied":return yield*w.fail(new S2("Access denied by user","access_denied"));case"expired_token":return yield*w.fail(new S2("Device code expired. Please try again.","expired_token"));default:return yield*w.fail(new S2(g.error_description||"Unknown error",g.error||"unknown"))}return K}),W4q=(A,q,F,K)=>w.iterate({interval:K},{while:(E)=>!E.token,body:(E)=>N4q(A,q,F,E)}).pipe(w.flatMap((E)=>E.token?w.succeed(E.token):w.fail(new S2("No token received","no_token"))));async function X0(A){let{skipExistingCheck:q=!1,noBrowser:F=!1}=A||{};if(!q){if(await Rg()){let S=await wg({message:"You're already logged in. Do you want to log in again?",initialValue:!1});if(qF(S)||!S)return null}}let K=a6({indicator:"dots"});K.start("Requesting device authorization...");let{data:E,error:g}=await HU.device.code({client_id:"cli",scope:"openid profile email"});if(g||!E)throw K.stop(X$.error("Failed to request device authorization")),new Q0("Failed to request device authorization");K.stop("Device authorization ready");let{device_code:Z,user_code:$,verification_uri:U,verification_uri_complete:G,interval:Y=5,expires_in:Q}=E,J=G||`${U}${U.includes("?")?"&":"?"}user_code=${$}`,X=!1;if(!F)try{await EDA(J),X=!0}catch{}if(console.log(),X)console.log(X$.highlight("Browser opened for authentication")),console.log(),console.log(X$.subtle("If the browser didn't open, visit the URL below:"));else console.log(X$.highlight("Open this URL to authenticate:"));console.log(),console.log(` ${X$.secondary(J)}`),console.log(),console.log(` Code: ${X$.primary($)}`),console.log(),console.log(X$.subtle(`Code expires in ${Math.floor(Q/60)} minutes`)),console.log();let O=a6({indicator:"dots"});O.start("Waiting for authorization...");let _=W4q(HU,Z,"cli",Y),j=await w.runPromise(_).catch((D)=>{throw O.stop(X$.error(D instanceof Error?D.message:"Polling failed")),D});O.stop("Authorization received"),await YFA(j);let{data:M}=await HU.getSession({fetchOptions:{headers:{Authorization:`Bearer ${j.access_token}`}}}),P=M?.user?.name||M?.user?.email||"User",T=M?.user?.email;return{userName:P,email:T}}function gDA(A){A.command({command:"login",describe:"Authenticate with SimpleCloud",builder:(q)=>q.option("no-browser",{type:"boolean",default:!1,describe:"Don't open browser automatically"}),handler:Fq(async(q)=>{yE(X$.primary("Authenticate with SimpleCloud"));let F=await X0({noBrowser:q.noBrowser});if(F===null){hF(X$.subtle("Login cancelled"));return}hF(X$.success(`Logged in as ${F.userName}`))})})}var L4q="https://controller.platform.simplecloud.app",ZDA=async(A)=>{let q=await Zg("context-add");if(q.hasPreviousSession()){let F=await q.promptResume();if(F==="cancel"){t.warn("Cancelled.");return}if(F==="retry")q.enableSkipMode()}try{if(!await F9()){t.info("Please log in to add a context.");let U=await X0({skipExistingCheck:!0});if(!U)t.error(V.red("Login cancelled. Adding context requires authentication.")),process.exit(1);t.success(`Authenticated as ${U.userName}`)}let K=A;if(!K)K=await q.text({name:"contextName",message:"Context name:",validate:(U)=>{if(!U||U.trim().length===0)return"Context name cannot be empty"}}),K=K.trim();if((await w.runPromise(w.gen(function*(){return yield*xY()}).pipe(w.provide(p6))))[K])console.error(V.red(`Context "${K}" already exists.`)),process.exit(1);t.step("Select organization for this context...");let g=await B2(q),Z=await q.text({name:"installationDir",message:"Installation directory (optional, for local serverhost):",initialValue:"",required:!1}),$={orgId:g.orgId,orgName:g.orgName,orgSlug:g.orgSlug,baseURL:L4q,installationDir:Z.trim()||void 0};if(await w.runPromise(w.gen(function*(){yield*A2(K,$)}).pipe(w.provide(p6))),await q.complete(),console.log(V.green(`\u2713 Context "${K}" added successfully.`)),console.log(V.dim(` Organization: ${g.orgName}`)),Z.trim())console.log(V.dim(` Installation: ${Z.trim()}`))}catch(F){if(F instanceof Error&&F.message==="Setup cancelled."){t.warn("Cancelled. Your progress has been saved.");return}console.error(V.red(`Failed to add context: ${F instanceof Error?F.message:String(F)}`)),process.exit(1)}};var $DA=async()=>{try{let A=await w.runPromise(w.gen(function*(){return yield*dJ()}).pipe(w.provide(p6)));if(!A){console.log(V.yellow("No context is currently selected.")),console.log(V.cyan("Run 'simplecloud context add' to create a context, or 'simplecloud context use <name>' to switch to an existing one."));return}let q=await w.runPromise(w.gen(function*(){return yield*A0(A)}).pipe(w.provide(p6)));if(!q)console.error(V.red(`Current context "${A}" not found.`)),process.exit(1);if(console.log(V.bold.cyan(`
319
319
  Current context:
320
320
  `)),console.log(` Name: ${V.bold.green(A)}`),q.orgName)console.log(` Organization: ${V.cyan(q.orgName)}`);if(q.orgSlug)console.log(` Org Slug: ${V.gray(q.orgSlug)}`);if(console.log(` Base URL: ${V.white(q.baseURL)}`),q.installationDir)console.log(` Installation Dir: ${V.white(q.installationDir)}`);console.log()}catch(A){console.error(V.red(`Failed to show current context: ${A instanceof Error?A.message:String(A)}`)),process.exit(1)}};var UDA=async()=>{try{let A=await w.runPromise(w.gen(function*(){return yield*xY()}).pipe(w.provide(p6))),q=await w.runPromise(w.gen(function*(){return yield*dJ()}).pipe(w.provide(p6))),F=Object.keys(A);if(F.length===0){console.log(V.yellow("No contexts configured.")),console.log(V.cyan("Run 'simplecloud context add' to create your first context."));return}console.log(V.bold.cyan(`
321
321
  Configured contexts:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "simplecloud",
3
- "version": "0.0.1-beta.32",
3
+ "version": "0.0.1-beta.33",
4
4
  "description": "simplecloud.app cli",
5
5
  "type": "module",
6
6
  "keywords": [