@enterprisestandard/cli 0.0.9-beta.20260304.1 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/cli.js +6 -7
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -1,16 +1,15 @@
1
1
  #!/usr/bin/env node
2
- import{spawn as d}from"node:child_process";import{existsSync as y,readFileSync as P,writeFileSync as g}from"node:fs";import{createServer as U}from"node:http";import{platform as k}from"node:os";import{resolve as A}from"node:path";var l="https://ionite.com",F="/callback",u=300000;function i(){let z=process.argv.slice(2),G=l,X=".env",Q,W,D=!1,Z,K,x,$,H,R=[],j=!1,N=[],L={};for(let J of z)if(J.startsWith("--baseUrl=")){let O=J.slice(10).trim().replace(/\/$/,"");G=O.startsWith("http://")||O.startsWith("https://")?O:`http://${O}`}else if(J.startsWith("--envFile="))X=J.slice(10).trim();else if(J.startsWith("--appUrl="))Q=J.slice(9).trim();else if(J.startsWith("--appName="))W=J.slice(10).trim();else if(J==="--discover")D=!0;else if(J.startsWith("--project="))Z=J.slice(10).trim();else if(J.startsWith("--createProject="))K=J.slice(16).trim();else if(J.startsWith("--ssoProvider="))x=J.slice(14).trim();else if(J.startsWith("--vaultProvider="))$=J.slice(16).trim();else if(J.startsWith("--workloadIncomingProvider="))H=J.slice(27).trim();else if(J.startsWith("--outgoingTarget="))R.push(J.slice(17).trim());else if(J==="--enableCiam")j=!0;else if(J.startsWith("--")){let O=J.indexOf("=");if(O!==-1)L[J.slice(2,O)]=J.slice(O+1);else L[J.slice(2)]="true"}else N.push(J);return{command:N[0]??"auth",baseUrl:G,envFile:X,appUrl:Q,appName:W,discover:D,project:Z,createProject:K,ssoProvider:x,vaultProvider:$,workloadIncomingProvider:H,outgoingTargets:R,enableCiam:j,positional:N.slice(1),flags:L}}function T(z){return z.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function o(z,G){let X=A(z),Q="";if(y(X))Q=P(X,"utf-8");for(let[W,D]of Object.entries(G)){let Z=new RegExp(`^${W}=.*$`,"m");if(Z.test(Q))Q=Q.replace(Z,`${W}=${D}`);else{if(Q.length>0&&!Q.endsWith(`
2
+ import{spawn as d}from"node:child_process";import{existsSync as y,readFileSync as P,writeFileSync as g}from"node:fs";import{createServer as U}from"node:http";import{platform as k}from"node:os";import{resolve as A}from"node:path";var l="https://ionite.com",F="/callback",u=300000;function i(){let z=process.argv.slice(2),G=l,X=".env",Q,W,D=!1,Z,K,x,$,H,V=[],j=!1,N=[],L={};for(let J of z)if(J.startsWith("--baseUrl=")){let O=J.slice(10).trim().replace(/\/$/,"");G=O.startsWith("http://")||O.startsWith("https://")?O:`http://${O}`}else if(J.startsWith("--envFile="))X=J.slice(10).trim();else if(J.startsWith("--appUrl="))Q=J.slice(9).trim();else if(J.startsWith("--appName="))W=J.slice(10).trim();else if(J==="--discover")D=!0;else if(J.startsWith("--project="))Z=J.slice(10).trim();else if(J.startsWith("--createProject="))K=J.slice(16).trim();else if(J.startsWith("--ssoProvider="))x=J.slice(14).trim();else if(J.startsWith("--vaultProvider="))$=J.slice(16).trim();else if(J.startsWith("--workloadIncomingProvider="))H=J.slice(27).trim();else if(J.startsWith("--outgoingTarget="))V.push(J.slice(17).trim());else if(J==="--enableCiam")j=!0;else if(J.startsWith("--")){let O=J.indexOf("=");if(O!==-1)L[J.slice(2,O)]=J.slice(O+1);else L[J.slice(2)]="true"}else N.push(J);return{command:N[0]??"auth",baseUrl:G,envFile:X,appUrl:Q,appName:W,discover:D,project:Z,createProject:K,ssoProvider:x,vaultProvider:$,workloadIncomingProvider:H,outgoingTargets:V,enableCiam:j,positional:N.slice(1),flags:L}}function T(z){return z.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function o(z,G){let X=A(z),Q="";if(y(X))Q=P(X,"utf-8");for(let[W,D]of Object.entries(G)){let Z=new RegExp(`^${W}=.*$`,"m");if(Z.test(Q))Q=Q.replace(Z,`${W}=${D}`);else{if(Q.length>0&&!Q.endsWith(`
3
3
  `))Q+=`
4
4
  `;Q+=`${W}=${D}
5
5
  `}}g(X,Q)}function m(z){let G=A(z);if(!y(G))return{};let X=P(G,"utf-8"),Q={};for(let W of X.split(`
6
6
  `)){let D=W.match(/^([^=\s][^=]*)=(.*)$/);if(D)Q[D[1].trim()]=D[2].trim()}return Q}function c(z){let G=k()==="win32"?{command:"cmd",args:["/c","start","",z]}:k()==="darwin"?{command:"open",args:[z]}:{command:"xdg-open",args:[z]};try{return d(G.command,G.args,{stdio:"ignore",detached:!0}).unref(),!0}catch{return!1}}function n(z){let G=(X,Q)=>{if(console.log(`
7
- ${X}:`),!Q.length){console.log(" (none)");return}for(let W of Q)console.log(` ${W.id} ${W.name}`)};G("projects",z.projects),G("sso providers",z.ssoProviders),G("vault providers",z.vaultProviders),G("workload providers (incoming)",z.workloadProviders),G("outgoing targets",z.outgoingTargets),G("existing local dev apps",z.localDevApps),console.log("")}function f(z){let G=m(z.envFile),X=G.ES_IONITE_TOKEN,Q=G.ES_IONITE_URL||z.baseUrl;if(!X)console.error("Missing ES_IONITE_TOKEN. Run `es` to authenticate."),process.exit(1);return{token:X,ioniteUrl:Q}}function I(z,G,X,Q){let W=U((Z,K)=>{let x=new URL(Z.url??"",`http://${Z.headers.host}`);if(x.pathname!==F){K.writeHead(404,{"Content-Type":"text/plain"}),K.end("Not found");return}let $=Object.fromEntries(x.searchParams);if($.error)K.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),K.end(`<!DOCTYPE html><html><head><title>Error</title></head><body><p>Error: ${T($.error)}</p></body></html>`),W.close(),console.error(`Error: ${$.error}`),process.exit(1);K.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),K.end("<!DOCTYPE html><html><head><title>Success</title></head><body><p>Done! You can close this window.</p></body></html>"),W.close(),console.log(Q($)),process.exit(0)});W.listen(0,"127.0.0.1",()=>{let Z=W.address();if(!Z||typeof Z==="string")console.error("Error: could not bind callback server"),process.exit(1);let x=`http://127.0.0.1:${Z.port}${F}`,$=new URL(`${z}${G}`);$.searchParams.set("redirect",x);for(let[R,j]of Object.entries(X))$.searchParams.set(R,j);if(!c($.toString()))console.error(`
7
+ ${X}:`),!Q.length){console.log(" (none)");return}for(let W of Q)console.log(` ${W.id} ${W.name}`)};G("projects",z.projects),G("sso providers",z.ssoProviders),G("vault providers",z.vaultProviders),G("workload providers (incoming)",z.workloadProviders),G("outgoing targets",z.outgoingTargets),G("existing local dev apps",z.localDevApps),console.log("")}function f(z){let G=m(z.envFile),X=G.ES_IONITE_TOKEN,Q=G.ES_IONITE_URL||z.baseUrl;if(!X)console.error("Missing ES_IONITE_TOKEN. Run `es` to authenticate."),process.exit(1);return{token:X,ioniteUrl:Q}}function I(z,G,X,Q){let W=U((Z,K)=>{let x=new URL(Z.url??"",`http://${Z.headers.host}`);if(x.pathname!==F){K.writeHead(404,{"Content-Type":"text/plain"}),K.end("Not found");return}let $=Object.fromEntries(x.searchParams);if($.error)K.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),K.end(`<!DOCTYPE html><html><head><title>Error</title></head><body><p>Error: ${T($.error)}</p></body></html>`),W.close(),console.error(`Error: ${$.error}`),process.exit(1);K.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),K.end("<!DOCTYPE html><html><head><title>Success</title></head><body><p>Done! You can close this window.</p></body></html>"),W.close(),console.log(Q($)),process.exit(0)});W.listen(0,"127.0.0.1",()=>{let Z=W.address();if(!Z||typeof Z==="string")console.error("Error: could not bind callback server"),process.exit(1);let x=`http://127.0.0.1:${Z.port}${F}`,$=new URL(`${z}${G}`);$.searchParams.set("redirect",x);for(let[V,j]of Object.entries(X))$.searchParams.set(V,j);if(!c($.toString()))console.error(`
8
8
  Could not open browser automatically.`);console.error(`
9
- If a browser did not open, visit:`),console.error($.toString())}),W.on("error",(Z)=>{console.error("Error starting callback server:",Z.message),process.exit(1)}),setTimeout(()=>{W.close(),console.error("Timeout: no callback received within 5 minutes. Please try again."),process.exit(1)},u).unref()}async function t(z){let{token:G,ioniteUrl:X}=f(z),Q=await fetch(`${X}/api/dev/app/info?appToken=${encodeURIComponent(G)}`),W=await Q.json().catch(()=>({}));if(!Q.ok)console.error(`Error: ${W.error??"Unknown error"}`),process.exit(1);console.log(`App ID: ${W.id}`),console.log(`Name: ${W.name}`),console.log(`Base URL: ${W.baseUrl??"(not set)"}`),console.log(`Vault Provider ID: ${W.vaultProvider??"(not set)"}`),console.log(`SSO Provider ID: ${W.ssoProvider??"(not set)"}`),console.log(`Workload Incoming Provider: ${W.workloadIncomingProvider??"(not set)"}`),process.exit(0)}function s(z){let G=z.positional[0];if(!G)console.error("Usage: es rename <new-name>"),process.exit(1);let{token:X,ioniteUrl:Q}=f(z);I(Q,"/api/dev/app/rename",{appToken:X,name:G},()=>`✓ App renamed to "${G}"`)}function a(z){let G=z.positional[0];if(!G)console.error("Usage: es set-url <new-base-url>"),process.exit(1);let{token:X,ioniteUrl:Q}=f(z);I(Q,"/api/dev/app/url",{appToken:X,baseUrl:G},()=>`✓ Base URL updated to "${G}"`)}function r(z){let G=z.flags.sso,X=z.flags.vault;if(!G&&!X)console.error("Usage: es set-provider --sso=<provider-id>"),console.error(" es set-provider --vault=<provider-id>"),process.exit(1);let Q=G?"sso":"vault",W=G??X,{token:D,ioniteUrl:Z}=f(z);I(Z,"/api/dev/app/provider",{appToken:D,type:Q,providerId:W},()=>`✓ ${Q.toUpperCase()} provider updated`)}function q(z){let{baseUrl:G,envFile:X,appUrl:Q,appName:W,discover:D,project:Z,createProject:K,ssoProvider:x,vaultProvider:$,workloadIncomingProvider:H,outgoingTargets:R,enableCiam:j}=z,N=U(async(V,J)=>{let O=new URL(V.url??"",`http://${V.headers.host}`);if(O.pathname!==F&&O.pathname!=="/"){J.writeHead(404,{"Content-Type":"text/plain"}),J.end("Not found");return}let Y=Object.fromEntries(O.searchParams);if(Y.error){if(J.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),J.end(`<!DOCTYPE html><html><head><title>Authentication Error</title></head><body><p>Error: ${T(Y.error)}</p><p>${T(Y.details||"")}</p></body></html>`),N.close(),console.error(`Authentication failed: ${Y.error}`),Y.details)console.error(`Details: ${Y.details}`);process.exit(1);return}let{optionsToken:M,optionsSecret:b}=Y;if(M&&b){J.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),J.end("<!DOCTYPE html><html><head><title>Done</title></head><body><p>Options retrieved. You can close this window.</p></body></html>"),N.close();try{let B=`${G}/api/dev/options/pickup?token=${encodeURIComponent(M)}&secret=${encodeURIComponent(b)}`,E=await fetch(B);if(!E.ok)console.error(`Error fetching options: ${E.status} ${E.statusText}`),process.exit(1);let p=await E.json();n(p)}catch(B){console.error("Error retrieving options:",B),process.exit(1)}process.exit(0);return}let{token:w,ioniteEndpoint:S,path:C,expires:h}=Y;if(!w){J.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),J.end("<!DOCTYPE html><html><head><title>Error</title></head><body><p>Error: No token received</p></body></html>"),N.close(),console.error("Error: No token received from authentication"),process.exit(1);return}if(J.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),J.end("<!DOCTYPE html><html><head><title>Success</title></head><body><p>Authentication successful! You can close this window.</p></body></html>"),N.close(),console.error(`
9
+ If a browser did not open, visit:`),console.error($.toString())}),W.on("error",(Z)=>{console.error("Error starting callback server:",Z.message),process.exit(1)}),setTimeout(()=>{W.close(),console.error("Timeout: no callback received within 5 minutes. Please try again."),process.exit(1)},u).unref()}async function t(z){let{token:G,ioniteUrl:X}=f(z),Q=await fetch(`${X}/api/dev/app/info?appToken=${encodeURIComponent(G)}`),W=await Q.json().catch(()=>({}));if(!Q.ok)console.error(`Error: ${W.error??"Unknown error"}`),process.exit(1);console.log(`App ID: ${W.id}`),console.log(`Name: ${W.name}`),console.log(`Base URL: ${W.baseUrl??"(not set)"}`),console.log(`Vault Provider ID: ${W.vaultProvider??"(not set)"}`),console.log(`SSO Provider ID: ${W.ssoProvider??"(not set)"}`),console.log(`Workload Incoming Provider: ${W.workloadIncomingProvider??"(not set)"}`),process.exit(0)}function s(z){let G=z.positional[0];if(!G)console.error("Usage: es rename <new-name>"),process.exit(1);let{token:X,ioniteUrl:Q}=f(z);I(Q,"/api/dev/app/rename",{appToken:X,name:G},()=>`✓ App renamed to "${G}"`)}function a(z){let G=z.positional[0];if(!G)console.error("Usage: es set-url <new-base-url>"),process.exit(1);let{token:X,ioniteUrl:Q}=f(z);I(Q,"/api/dev/app/url",{appToken:X,baseUrl:G},()=>`✓ Base URL updated to "${G}"`)}function r(z){let G=z.flags.sso,X=z.flags.vault;if(!G&&!X)console.error("Usage: es set-provider --sso=<provider-id>"),console.error(" es set-provider --vault=<provider-id>"),process.exit(1);let Q=G?"sso":"vault",W=G??X,{token:D,ioniteUrl:Z}=f(z);I(Z,"/api/dev/app/provider",{appToken:D,type:Q,providerId:W},()=>`✓ ${Q.toUpperCase()} provider updated`)}function q(z){let{baseUrl:G,envFile:X,appUrl:Q,appName:W,discover:D,project:Z,createProject:K,ssoProvider:x,vaultProvider:$,workloadIncomingProvider:H,outgoingTargets:V,enableCiam:j}=z,N=U(async(R,J)=>{let O=new URL(R.url??"",`http://${R.headers.host}`);if(O.pathname!==F&&O.pathname!=="/"){J.writeHead(404,{"Content-Type":"text/plain"}),J.end("Not found");return}let Y=Object.fromEntries(O.searchParams);if(Y.error){if(J.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),J.end(`<!DOCTYPE html><html><head><title>Authentication Error</title></head><body><p>Error: ${T(Y.error)}</p><p>${T(Y.details||"")}</p></body></html>`),N.close(),console.error(`Authentication failed: ${Y.error}`),Y.details)console.error(`Details: ${Y.details}`);process.exit(1);return}let{optionsToken:_,optionsSecret:b}=Y;if(_&&b){J.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),J.end("<!DOCTYPE html><html><head><title>Done</title></head><body><p>Options retrieved. You can close this window.</p></body></html>"),N.close();try{let B=`${G}/api/dev/options/pickup?token=${encodeURIComponent(_)}&secret=${encodeURIComponent(b)}`,E=await fetch(B);if(!E.ok)console.error(`Error fetching options: ${E.status} ${E.statusText}`),process.exit(1);let p=await E.json();n(p)}catch(B){console.error("Error retrieving options:",B),process.exit(1)}process.exit(0);return}let{token:w,ioniteEndpoint:S,path:C,expires:h}=Y;if(!w){J.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),J.end("<!DOCTYPE html><html><head><title>Error</title></head><body><p>Error: No token received</p></body></html>"),N.close(),console.error("Error: No token received from authentication"),process.exit(1);return}if(J.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),J.end("<!DOCTYPE html><html><head><title>Success</title></head><body><p>Authentication successful! You can close this window.</p></body></html>"),N.close(),console.error(`
10
10
  ✓ Authentication successful!
11
- `),h){let B=new Date(h);console.error(`Token expires: ${B.toLocaleString()}
12
- `)}let _={ES_VAULT_TOKEN:w,ES_VAULT_TYPE:"openbao"};if(S)_.ES_VAULT_URL=S,_.ES_IONITE_TOKEN=w,_.ES_IONITE_URL=new URL(S).origin;if(C)_.ES_VAULT_PATH=C;let v=A(X);o(X,_),console.error(`Wrote credentials to ${v}
13
- `),console.error("Configure your SDK:"),console.error("const es = enterpriseStandard(vaultConfig(), {"),console.error(" sso: { ... },"),console.error("});"),process.exit(0)});N.listen(0,"127.0.0.1",()=>{let V=N.address();if(!V||typeof V==="string")console.error("Error: could not bind callback server"),process.exit(1);let O=`http://127.0.0.1:${V.port}${F}`,Y=new URLSearchParams({redirect:O});if(Q)Y.set("appUrl",Q);if(W)Y.set("appName",W);if(D)Y.set("discover","1");if(Z)Y.set("project",Z);if(K)Y.set("createProject",K);if(x)Y.set("ssoProvider",x);if($)Y.set("vaultProvider",$);if(H)Y.set("workloadIncomingProvider",H);if(R.length>0)Y.set("outgoingTargets",R.join(","));if(j)Y.set("enableCiam","1");let M=`${G}/api/dev?${Y.toString()}`;if(console.error("Opening browser to authenticate..."),!c(M))console.error(`
11
+ `),h){let B=new Date(h);console.error(`You will be prompted to re-authenticate on or before: ${B.toLocaleString()}`)}let M={ES_VAULT_TOKEN:w,ES_CONFIG_TYPE:"vault"};if(S)M.ES_VAULT_URL=S,M.ES_VAULT_TTL="600000",M.ES_IONITE_TOKEN=w,M.ES_IONITE_URL=new URL(S).origin;if(C)M.ES_VAULT_PATH=C;let v=A(X);o(X,M),console.error(`Saved developer configuration to ${v}
12
+ `),console.error("Visit https://enterprisestandard.com for more information."),console.error("For LLM documentation visit: https://enterprisestandard.com/llms.txt"),console.error("Configure your SDK:"),console.error("const es = enterpriseStandard(envConfig(), {"),console.error(" sso: { ... },"),console.error("});"),process.exit(0)});N.listen(0,"127.0.0.1",()=>{let R=N.address();if(!R||typeof R==="string")console.error("Error: could not bind callback server"),process.exit(1);let O=`http://127.0.0.1:${R.port}${F}`,Y=new URLSearchParams({redirect:O});if(Q)Y.set("appUrl",Q);if(W)Y.set("appName",W);if(D)Y.set("discover","1");if(Z)Y.set("project",Z);if(K)Y.set("createProject",K);if(x)Y.set("ssoProvider",x);if($)Y.set("vaultProvider",$);if(H)Y.set("workloadIncomingProvider",H);if(V.length>0)Y.set("outgoingTargets",V.join(","));if(j)Y.set("enableCiam","1");let _=`${G}/api/dev?${Y.toString()}`;if(console.error("Opening browser to authenticate..."),!c(_))console.error(`
14
13
  Could not open browser automatically.`);console.error(`
15
- If a browser didn't open, please visit this URL:`),console.error(M),console.error("")}),N.on("error",(V)=>{console.error("Error starting callback server:",V.message),process.exit(1)}),setTimeout(()=>{N.close(),console.error("Timeout: no callback received within 5 minutes. Please try again."),process.exit(1)},u).unref()}async function e(){let z=i();if(["info","rename","set-url","set-provider"].includes(z.command)&&!m(z.envFile).ES_IONITE_TOKEN){console.error(`No credentials found. Starting authentication...
14
+ If a browser didn't open, please visit this URL:`),console.error(_),console.error("")}),N.on("error",(R)=>{console.error("Error starting callback server:",R.message),process.exit(1)}),setTimeout(()=>{N.close(),console.error("Timeout: no callback received within 5 minutes. Please try again."),process.exit(1)},u).unref()}async function e(){let z=i();if(["info","rename","set-url","set-provider"].includes(z.command)&&!m(z.envFile).ES_IONITE_TOKEN){console.error(`No credentials found. Starting authentication...
16
15
  `),q(z);return}switch(z.command){case"info":await t(z);break;case"rename":s(z);break;case"set-url":a(z);break;case"set-provider":r(z);break;default:q(z)}}e().catch((z)=>{console.error("Unexpected error:",z.message),process.exit(1)});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enterprisestandard/cli",
3
- "version": "0.0.9-beta.20260304.1",
3
+ "version": "0.0.10",
4
4
  "description": "Enterprise Standard CLI - Wrangler-style SSO dev flow",
5
5
  "private": false,
6
6
  "author": "enterprisestandard",